From f6ba10025dc5df39847066904a8bbeb708b570bf Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Glondu?= Date: Wed, 12 Jun 2024 08:22:19 +0200 Subject: [PATCH] New upstream version 5.2.0 --- .depend | 3265 +- .depend.menhir | 33 +- .gitattributes | 104 +- .github/workflows/build.yml | 279 +- .github/workflows/hygiene.yml | 39 +- .github/workflows/stale.yml | 5 +- .gitignore | 159 +- .gitmodules | 2 +- .mailmap | 6 + CODE_OF_CONDUCT.md | 7 + CONTRIBUTING.md | 208 +- Changes | 2648 +- HACKING.adoc | 34 +- INSTALL.adoc | 5 +- Makefile | 2681 +- Makefile.best_binaries | 25 + Makefile.build_config.in | 127 +- Makefile.common | 390 +- Makefile.config.in | 102 +- Makefile.config_if_required | 2 + Makefile.menhir | 21 +- README.adoc | 83 +- README.win32.adoc | 70 +- VERSION | 2 +- aclocal.m4 | 115 +- api_docgen/Format_tutorial.mld | 32 +- api_docgen/Makefile.common | 9 +- api_docgen/Makefile.docfiles | 46 +- api_docgen/alldoc.tex | 42 +- api_docgen/ocamldoc/Makefile | 29 +- api_docgen/odoc/Makefile | 28 +- appveyor.yml | 29 +- asmcomp/CSE.mli | 18 + asmcomp/CSEgen.ml | 19 +- asmcomp/afl_instrument.ml | 26 +- asmcomp/amd64/CSE.ml | 1 + asmcomp/amd64/arch.ml | 19 + asmcomp/amd64/arch.mli | 81 + asmcomp/amd64/emit.mlp | 142 +- asmcomp/amd64/proc.ml | 63 +- asmcomp/amd64/reload.ml | 1 + asmcomp/amd64/scheduling.ml | 11 +- asmcomp/amd64/selection.ml | 62 +- asmcomp/amd64/stackframe.ml | 39 + asmcomp/arm/CSE.ml | 35 - asmcomp/arm/NOTES.md | 20 - asmcomp/arm/arch.ml | 276 - asmcomp/arm/emit.mlp | 1027 - asmcomp/arm/proc.ml | 363 - asmcomp/arm/reload.ml | 57 - asmcomp/arm/scheduling.ml | 80 - asmcomp/arm/selection.ml | 332 - asmcomp/arm64/CSE.ml | 1 + asmcomp/arm64/arch.ml | 1 + asmcomp/arm64/arch.mli | 109 + asmcomp/arm64/emit.mlp | 216 +- asmcomp/arm64/proc.ml | 28 +- asmcomp/arm64/reload.ml | 1 + asmcomp/arm64/scheduling.ml | 11 +- asmcomp/arm64/selection.ml | 6 + asmcomp/arm64/stackframe.ml | 32 + asmcomp/asmgen.ml | 32 +- asmcomp/asmgen.mli | 2 +- asmcomp/asmlibrarian.ml | 5 +- asmcomp/asmlink.ml | 101 +- asmcomp/asmpackager.ml | 81 +- ...ion_intf.ml => branch_relaxation_intf.mli} | 0 asmcomp/cmm.ml | 14 +- asmcomp/cmm.mli | 10 +- asmcomp/cmm_helpers.ml | 348 +- asmcomp/cmm_helpers.mli | 18 +- asmcomp/cmm_invariants.ml | 2 +- asmcomp/cmm_invariants.mli | 3 +- asmcomp/cmmgen.ml | 231 +- asmcomp/coloring.ml | 3 + asmcomp/deadcode.ml | 2 - asmcomp/dune | 7 +- asmcomp/emitaux.ml | 109 +- asmcomp/emitaux.mli | 6 +- asmcomp/emitenv.mli | 11 +- asmcomp/i386/CSE.ml | 50 - asmcomp/i386/NOTES.md | 23 - asmcomp/i386/arch.ml | 176 - asmcomp/i386/emit.mlp | 1031 - asmcomp/i386/proc.ml | 245 - asmcomp/i386/reload.ml | 96 - asmcomp/i386/scheduling.ml | 23 - asmcomp/i386/selection.ml | 325 - asmcomp/interval.ml | 22 +- asmcomp/interval.mli | 10 +- asmcomp/linear.ml | 5 +- asmcomp/linear.mli | 5 +- asmcomp/linearize.ml | 138 +- asmcomp/linscan.ml | 174 +- asmcomp/linscan.mli | 2 +- asmcomp/liveness.ml | 2 - asmcomp/mach.ml | 13 +- asmcomp/mach.mli | 12 +- asmcomp/polling.ml | 15 +- asmcomp/power/CSE.ml | 1 + asmcomp/power/NOTES.md | 196 +- asmcomp/power/arch.ml | 47 +- asmcomp/power/arch.mli | 85 + asmcomp/power/emit.mlp | 918 +- asmcomp/power/proc.ml | 162 +- asmcomp/power/reload.ml | 1 + asmcomp/power/scheduling.ml | 5 +- asmcomp/power/selection.ml | 1 + asmcomp/power/stackframe.ml | 32 + asmcomp/printcmm.ml | 8 +- asmcomp/printmach.ml | 25 +- asmcomp/printmach.mli | 2 +- asmcomp/proc.mli | 9 - asmcomp/reloadgen.ml | 9 +- asmcomp/riscv/CSE.ml | 1 + asmcomp/riscv/NOTES.md | 6 +- asmcomp/riscv/arch.ml | 1 + asmcomp/riscv/arch.mli | 76 + asmcomp/riscv/emit.mlp | 316 +- asmcomp/riscv/proc.ml | 43 +- asmcomp/riscv/reload.ml | 1 + asmcomp/riscv/scheduling.ml | 11 +- asmcomp/riscv/selection.ml | 4 + asmcomp/riscv/stackframe.ml | 32 + asmcomp/s390x/CSE.ml | 1 + asmcomp/s390x/arch.ml | 1 + asmcomp/s390x/arch.mli | 79 + asmcomp/s390x/emit.mlp | 183 +- asmcomp/s390x/proc.ml | 24 +- asmcomp/s390x/reload.ml | 1 + asmcomp/s390x/scheduling.ml | 46 +- asmcomp/s390x/selection.ml | 1 + asmcomp/s390x/stackframe.ml | 32 + asmcomp/schedgen.ml | 124 +- asmcomp/schedgen.mli | 7 +- asmcomp/selectgen.ml | 78 +- asmcomp/selectgen.mli | 29 - asmcomp/spill.ml | 269 +- asmcomp/spill.mli | 1 - asmcomp/split.ml | 10 +- asmcomp/stackframe.mli | 21 + asmcomp/stackframegen.ml | 116 + asmcomp/stackframegen.mli | 46 + asmcomp/strmatch.ml | 4 +- asmcomp/thread_sanitizer.ml | 291 + asmcomp/thread_sanitizer.mli | 52 + asmcomp/x86_ast.mli | 16 + asmcomp/x86_dsl.ml | 10 + asmcomp/x86_dsl.mli | 10 + asmcomp/x86_gas.ml | 7 + asmcomp/x86_masm.ml | 7 + asmcomp/x86_proc.ml | 62 +- asmcomp/x86_proc.mli | 13 +- boot/menhir/parser.ml | 28647 +++++++++++----- boot/ocamlc | Bin 2999149 -> 3233094 bytes boot/ocamllex | Bin 369687 -> 402271 bytes build-aux/ax_check_compile_flag.m4 | 53 + build-aux/ax_pthread.m4 | 29 +- build-aux/config.guess | 1254 +- build-aux/config.sub | 172 +- build-aux/ocaml_version.m4 | 41 +- bytecomp/bytegen.ml | 607 +- bytecomp/bytegen.mli | 3 +- bytecomp/bytelibrarian.ml | 5 +- bytecomp/bytelink.ml | 438 +- bytecomp/bytelink.mli | 9 +- bytecomp/bytepackager.ml | 412 +- bytecomp/bytepackager.mli | 7 +- bytecomp/bytesections.ml | 165 +- bytecomp/bytesections.mli | 81 +- bytecomp/dll.ml | 68 +- bytecomp/dll.mli | 2 +- bytecomp/emitcode.ml | 141 +- bytecomp/emitcode.mli | 18 +- bytecomp/instruct.ml | 18 +- bytecomp/instruct.mli | 38 +- bytecomp/meta.ml | 5 +- bytecomp/meta.mli | 5 +- bytecomp/printinstr.ml | 4 + bytecomp/symtable.ml | 342 +- bytecomp/symtable.mli | 54 +- compilerlibs/META.in | 44 + compilerlibs/Makefile.compilerlibs | 466 - configure | 10590 +++--- configure.ac | 1693 +- debugger/.depend | 649 - debugger/Makefile | 90 - debugger/checkpoints.ml | 6 +- debugger/checkpoints.mli | 4 +- debugger/command_line.ml | 18 +- debugger/command_line.mli | 8 +- debugger/debugcom.ml | 67 +- debugger/debugcom.mli | 25 +- debugger/debugger_parser.mly | 3 +- debugger/eval.ml | 56 +- debugger/events.ml | 1 - debugger/events.mli | 2 +- debugger/frames.ml | 4 +- debugger/int64ops.ml | 20 +- debugger/int64ops.mli | 20 +- debugger/loadprinter.ml | 60 +- debugger/loadprinter.mli | 2 - debugger/main.ml | 15 +- debugger/main.mli | 16 + debugger/ocamldebug_entry.mli | 17 + debugger/parameters.ml | 4 +- debugger/parameters.mli | 1 - debugger/pattern_matching.ml | 254 - debugger/pattern_matching.mli | 23 - debugger/pos.mli | 2 +- debugger/primitives.ml | 3 +- debugger/printval.ml | 14 +- debugger/program_loading.ml | 2 - debugger/program_management.ml | 8 +- debugger/show_source.mli | 5 +- debugger/source.ml | 4 +- debugger/symbols.ml | 20 +- debugger/time_travel.ml | 20 +- debugger/trap_barrier.ml | 4 +- debugger/trap_barrier.mli | 4 +- debugger/unix_tools.ml | 1 - driver/compenv.ml | 67 +- driver/compenv.mli | 9 - driver/compile.ml | 14 +- driver/compile_common.ml | 46 +- driver/compile_common.mli | 14 +- driver/compmisc.ml | 54 +- driver/compmisc.mli | 8 +- driver/main.mli | 19 + driver/main_args.ml | 314 +- driver/main_args.mli | 35 +- driver/maindriver.ml | 12 +- driver/makedepend.ml | 195 +- driver/optcompile.ml | 73 +- driver/optmain.mli | 19 + driver/optmaindriver.ml | 2 +- driver/pparse.ml | 59 +- dune | 17 +- dune-project | 2 +- file_formats/cmi_format.ml | 12 +- file_formats/cmi_format.mli | 1 - file_formats/cmo_format.mli | 30 +- file_formats/cmt_format.ml | 323 +- file_formats/cmt_format.mli | 11 +- file_formats/cmx_format.mli | 5 +- file_formats/cmxs_format.mli | 3 +- file_formats/linear_format.ml | 9 +- lambda/lambda.ml | 116 +- lambda/lambda.mli | 50 +- lambda/matching.ml | 718 +- lambda/matching.mli | 16 + lambda/printlambda.ml | 99 +- lambda/simplif.ml | 107 +- lambda/simplif.mli | 2 +- lambda/switch.ml | 273 +- lambda/tmc.ml | 96 +- lambda/translattribute.ml | 294 +- lambda/translattribute.mli | 24 +- lambda/translclass.ml | 120 +- lambda/translclass.mli | 3 +- lambda/translcore.ml | 494 +- lambda/translmod.ml | 221 +- lambda/translobj.ml | 13 +- lambda/translobj.mli | 1 + lambda/translprim.ml | 41 +- lambda/value_rec_compiler.ml | 792 + lambda/value_rec_compiler.mli | 18 + lex/.depend | 118 - lex/Makefile | 83 - lex/common.ml | 11 +- lex/common.mli | 4 +- lex/lexer.mll | 5 +- lex/main.ml | 5 +- lex/main.mli | 19 + lex/output.ml | 36 +- lex/parser.mly | 3 +- lex/table.ml | 3 - man/Makefile | 4 +- man/ocaml.1 | 115 +- man/ocamlc.1 | 141 +- man/ocamlcp.1 | 28 +- man/ocamldebug.1 | 20 +- man/ocamldep.1 | 43 +- man/ocamldoc.1 | 77 +- man/ocamllex.1 | 10 +- man/ocamlmktop.1 | 15 +- man/ocamlopt.1 | 209 +- man/ocamlprof.1 | 18 +- man/ocamlrun.1 | 45 +- man/ocamlyacc.1 | 13 +- manual/Makefile | 11 +- manual/README.md | 40 +- manual/src/.gitignore | 10 - manual/src/Makefile | 40 +- manual/src/allfiles.etex | 9 +- manual/src/cmds/.gitignore | 3 - manual/src/cmds/Makefile | 7 +- manual/src/cmds/afl-fuzz.etex | 5 +- manual/src/cmds/comp.etex | 4 - manual/src/cmds/instrumented-runtime.etex | 315 - manual/src/cmds/intf-c.etex | 311 +- manual/src/cmds/lexyacc.etex | 20 +- manual/src/cmds/native.etex | 37 - manual/src/cmds/ocamldep.etex | 6 + manual/src/cmds/ocamldoc.etex | 12 +- manual/src/cmds/runtime-tracing.etex | 481 + manual/src/cmds/runtime.etex | 30 +- manual/src/cmds/tail-mod-cons.etex | 38 +- manual/src/cmds/top.etex | 59 +- manual/src/cmds/tsan.etex | 251 + manual/src/cmds/unified-options.etex | 104 +- manual/src/foreword.etex | 17 +- manual/src/html_processing/.gitignore | 7 - manual/src/html_processing/Makefile | 23 +- manual/src/html_processing/scss/_common.scss | 2 +- manual/src/html_processing/scss/style.scss | 2 +- manual/src/htmlman/.gitignore | 12 - manual/src/infoman/.gitignore | 5 - manual/src/library/.gitignore | 7 - manual/src/library/Makefile | 17 +- manual/src/library/core.etex | 3 - manual/src/library/libdynlink.etex | 3 +- manual/src/library/libruntime_events.etex | 19 + manual/src/library/libstr.etex | 10 +- manual/src/library/libthreads.etex | 33 +- manual/src/library/libunix.etex | 13 +- manual/src/library/stdlib-blurb.etex | 22 +- manual/src/macros.tex | 11 +- manual/src/refman/.gitignore | 4 - manual/src/refman/Makefile | 8 +- manual/src/refman/expr.etex | 8 +- manual/src/refman/exten.etex | 5 + manual/src/refman/extensions/alerts.etex | 6 +- manual/src/refman/extensions/attributes.etex | 6 +- manual/src/refman/extensions/bindingops.etex | 120 +- manual/src/refman/extensions/effects.etex | 793 + .../refman/extensions/generativefunctors.etex | 2 +- .../src/refman/extensions/privatetypes.etex | 2 +- .../extensions/signaturesubstitution.etex | 40 +- manual/src/refman/lex.etex | 40 +- manual/src/refman/patterns.etex | 4 - manual/src/refman/types.etex | 5 - manual/src/texstuff/.gitignore | 13 - manual/src/textman/.gitignore | 5 - manual/src/tutorials/.gitignore | 2 - manual/src/tutorials/Makefile | 8 +- manual/src/tutorials/coreexamples.etex | 14 +- manual/src/tutorials/gadtexamples.etex | 12 +- manual/src/tutorials/lablexamples.etex | 6 +- manual/src/tutorials/memorymodel.etex | 756 + manual/src/tutorials/moduleexamples.etex | 146 +- manual/src/tutorials/objectexamples.etex | 26 +- manual/src/tutorials/parallelism.etex | 741 + manual/src/tutorials/polymorphism.etex | 29 +- manual/src/tutorials/polyvariant.etex | 2 +- manual/styles/html.sty | 2 +- manual/tests/.gitignore | 1 - manual/tests/Makefile | 8 +- manual/tests/check-stdlib-modules | 3 +- manual/tests/cross_reference_checker.ml | 47 +- manual/tools/.gitignore | 10 - manual/tools/Makefile | 5 +- middle_end/clambda.ml | 1 - middle_end/clambda.mli | 1 - middle_end/clambda_primitives.ml | 16 +- middle_end/clambda_primitives.mli | 17 +- middle_end/closure/closure.ml | 200 +- middle_end/compilenv.ml | 71 +- middle_end/compilenv.mli | 4 + middle_end/convert_primitives.ml | 14 +- .../flambda/augment_specialised_args.ml | 2 +- middle_end/flambda/base_types/export_id.ml | 2 +- .../flambda/base_types/set_of_closures_id.ml | 2 +- middle_end/flambda/build_export_info.ml | 10 +- middle_end/flambda/closure_conversion.ml | 125 +- middle_end/flambda/closure_conversion_aux.ml | 6 - middle_end/flambda/closure_conversion_aux.mli | 3 - middle_end/flambda/effect_analysis.ml | 3 - middle_end/flambda/extract_projections.ml | 4 +- middle_end/flambda/flambda.ml | 22 - middle_end/flambda/flambda.mli | 2 - middle_end/flambda/flambda_invariants.ml | 13 - middle_end/flambda/flambda_iterators.ml | 36 +- middle_end/flambda/flambda_iterators.mli | 4 +- middle_end/flambda/flambda_to_clambda.ml | 26 +- middle_end/flambda/flambda_utils.ml | 42 +- middle_end/flambda/freshening.ml | 5 + middle_end/flambda/freshening.mli | 7 + middle_end/flambda/inconstant_idents.ml | 7 - middle_end/flambda/inline_and_simplify.ml | 20 +- middle_end/flambda/inlining_cost.ml | 5 +- middle_end/flambda/invariant_params.ml | 2 +- middle_end/flambda/lift_code.ml | 34 - middle_end/flambda/lift_constants.ml | 5 +- .../flambda/lift_let_to_initialize_symbol.ml | 78 +- middle_end/flambda/ref_to_variables.ml | 7 +- middle_end/flambda/simple_value_approx.ml | 20 +- middle_end/flambda/un_anf.ml | 30 - middle_end/internal_variable_names.ml | 38 + middle_end/printclambda.ml | 12 - middle_end/printclambda_primitives.ml | 23 +- middle_end/semantics_of_primitives.ml | 12 +- ocaml-variants.opam | 73 +- ocamldoc/.depend | 861 - ocamldoc/META.in | 5 + ocamldoc/Makefile | 355 - ocamldoc/Makefile.best_ocamldoc | 41 - ocamldoc/generators/odoc_literate.ml | 215 - ocamldoc/generators/odoc_todo.ml | 235 - ocamldoc/odoc.ml | 2 +- ocamldoc/odoc.mli | 18 + ocamldoc/odoc_analyse.ml | 35 +- ocamldoc/odoc_args.ml | 13 +- ocamldoc/odoc_ast.ml | 285 +- ocamldoc/odoc_class.ml | 18 - ocamldoc/odoc_class.mli | 114 + ocamldoc/odoc_comments.ml | 19 +- ocamldoc/odoc_control.ml | 14 - ocamldoc/odoc_cross.ml | 19 +- ocamldoc/odoc_dag2html.ml | 88 +- ocamldoc/odoc_dep.ml | 2 - ocamldoc/odoc_dep.mli | 27 + ocamldoc/odoc_dot.mli | 79 + ocamldoc/odoc_exception.mli | 36 + ocamldoc/odoc_extension.mli | 45 + ocamldoc/odoc_gen.ml | 8 +- ocamldoc/odoc_gen.mli | 5 +- ocamldoc/odoc_global.ml | 1 + ocamldoc/odoc_global.mli | 3 + ocamldoc/odoc_html.ml | 13 +- ocamldoc/odoc_html.mli | 681 + ocamldoc/odoc_info.ml | 94 +- ocamldoc/odoc_info.mli | 42 +- ocamldoc/odoc_inherit.ml | 14 - ocamldoc/odoc_latex.ml | 11 +- ocamldoc/odoc_latex.mli | 532 + ocamldoc/odoc_latex_style.mli | 18 + ocamldoc/odoc_lexer.mli | 26 + ocamldoc/odoc_lexer.mll | 19 +- ocamldoc/odoc_man.ml | 24 +- ocamldoc/odoc_man.mli | 240 + ocamldoc/odoc_merge.ml | 190 +- ocamldoc/odoc_messages.ml | 6 +- ocamldoc/odoc_messages.mli | 261 + ocamldoc/odoc_misc.ml | 16 +- ocamldoc/odoc_module.ml | 92 +- ocamldoc/odoc_module.mli | 274 + ocamldoc/odoc_name.ml | 11 +- ocamldoc/odoc_ocamlhtml.mli | 24 + ocamldoc/odoc_ocamlhtml.mll | 53 +- ocamldoc/odoc_parameter.ml | 16 - ocamldoc/odoc_parameter.mli | 63 + ocamldoc/odoc_parser.mly | 60 +- ocamldoc/odoc_scan.mli | 54 + ocamldoc/odoc_see_lexer.mli | 18 + ocamldoc/odoc_sig.ml | 237 +- ocamldoc/odoc_sig.mli | 5 + ocamldoc/odoc_str.ml | 121 +- ocamldoc/odoc_str.mli | 5 +- ocamldoc/odoc_test.ml | 4 +- ocamldoc/odoc_test.mli | 18 + ocamldoc/odoc_texi.ml | 8 +- ocamldoc/odoc_texi.mli | 454 + ocamldoc/odoc_text_lexer.mli | 23 + ocamldoc/odoc_text_lexer.mll | 23 +- ocamldoc/odoc_to_text.ml | 18 + ocamldoc/odoc_to_text.mli | 96 + ocamldoc/odoc_type.ml | 7 +- ocamldoc/odoc_type.mli | 74 + ocamldoc/odoc_types.ml | 4 + ocamldoc/odoc_types.mli | 3 + ocamldoc/odoc_value.ml | 16 - ocamldoc/odoc_value.mli | 64 + ocamltest/.depend | 450 - ocamltest/Makefile | 312 - ocamltest/OCAMLTEST.org | 770 + ocamltest/README | 199 - ocamltest/README.md | 220 + ocamltest/actions.ml | 6 +- ocamltest/actions.mli | 4 +- ocamltest/actions_helpers.ml | 14 +- ocamltest/builtin_actions.ml | 129 +- ocamltest/dune | 19 +- ocamltest/environments.ml | 25 +- ocamltest/filecompare.ml | 9 +- ocamltest/main.ml | 241 +- ocamltest/ocaml_actions.ml | 135 +- ocamltest/ocaml_actions.mli | 2 + ocamltest/ocaml_commands.ml | 4 +- ocamltest/ocaml_commands.mli | 2 +- ocamltest/ocaml_compilers.ml | 4 +- ocamltest/ocaml_directories.ml | 3 +- ocamltest/ocaml_files.ml | 4 +- ocamltest/ocaml_files.mli | 2 +- ocamltest/ocaml_filetypes.ml | 7 +- ocamltest/ocaml_filetypes.mli | 1 + ocamltest/ocaml_flags.ml | 3 +- ocamltest/ocaml_modifiers.ml | 9 +- ocamltest/ocaml_tests.ml | 61 +- ocamltest/ocaml_variables.ml | 13 +- ocamltest/ocaml_variables.mli | 6 +- ocamltest/ocamltest.org | 745 - ocamltest/ocamltest_config.ml.in | 79 +- ocamltest/ocamltest_config.mli | 31 +- ocamltest/ocamltest_stdlib.ml | 8 +- ocamltest/ocamltest_unix.mli | 1 + ocamltest/ocamltest_unix_dummy.ml | 1 + ocamltest/ocamltest_unix_real.ml | 3 +- ocamltest/options.ml | 31 +- ocamltest/options.mli | 6 + ocamltest/result.ml | 6 +- ocamltest/run_stubs.c | 6 +- ocamltest/run_unix.c | 9 +- ocamltest/run_win32.c | 1 + ocamltest/tests.ml | 13 +- ocamltest/tests.mli | 5 +- ocamltest/translate.ml | 138 + ocamltest/translate.mli | 23 + ocamltest/tsl_ast.ml | 8 + ocamltest/tsl_ast.mli | 6 + ocamltest/tsl_lexer.mli | 3 + ocamltest/tsl_lexer.mll | 35 +- ocamltest/tsl_parser.mly | 33 +- ocamltest/tsl_semantics.ml | 138 +- ocamltest/tsl_semantics.mli | 15 +- ocamltest/variables.ml | 2 + ocamltest/variables.mli | 2 + otherlibs/Makefile | 13 +- otherlibs/Makefile.otherlibs.common | 114 +- otherlibs/bigarray/.depend | 5 - otherlibs/bigarray/Makefile | 26 - otherlibs/bigarray/bigarray.ml | 15 - otherlibs/bigarray/bigarray.mli | 15 - otherlibs/dynlink/.depend | 4 - otherlibs/dynlink/META.in | 6 + otherlibs/dynlink/Makefile | 113 +- otherlibs/dynlink/byte/dynlink.ml | 165 +- otherlibs/dynlink/dynlink.mli | 2 - otherlibs/dynlink/dynlink_common.ml | 169 +- otherlibs/dynlink/dynlink_common.mli | 2 - .../Makefile.copy-sources | 3 +- otherlibs/dynlink/dynlink_platform_intf.ml | 7 +- otherlibs/dynlink/dynlink_types.ml | 5 +- otherlibs/dynlink/dynlink_types.mli | 2 - otherlibs/dynlink/extract_crc.ml | 86 - otherlibs/dynlink/native/dynlink.ml | 18 +- otherlibs/runtime_events/.depend | 5 + otherlibs/runtime_events/META.in | 8 + otherlibs/runtime_events/Makefile | 32 + .../caml/runtime_events_consumer.h | 98 + otherlibs/runtime_events/runtime_events.ml | 373 + otherlibs/runtime_events/runtime_events.mli | 297 + .../runtime_events/runtime_events_consumer.c | 1223 + otherlibs/str/META.in | 8 + otherlibs/str/Makefile | 2 +- otherlibs/str/str.ml | 66 +- otherlibs/str/str.mli | 4 + otherlibs/str/strstubs.c | 2 +- otherlibs/systhreads/.depend | 33 - otherlibs/systhreads/META.in | 13 + otherlibs/systhreads/Makefile | 73 +- otherlibs/systhreads/caml/threads.h | 71 + otherlibs/systhreads/condition.ml | 20 - otherlibs/systhreads/condition.mli | 53 - otherlibs/systhreads/mutex.ml | 20 - otherlibs/systhreads/mutex.mli | 60 - otherlibs/systhreads/st_posix.h | 428 +- otherlibs/systhreads/st_pthreads.h | 311 + otherlibs/systhreads/st_stubs.c | 1241 +- otherlibs/systhreads/st_win32.h | 507 +- otherlibs/systhreads/thread.ml | 32 +- otherlibs/systhreads/thread.mli | 60 +- otherlibs/systhreads/threadUnix.ml | 65 - otherlibs/systhreads/threadUnix.mli | 98 - otherlibs/systhreads/threads.h | 68 - otherlibs/unix/.depend | 4 + otherlibs/unix/META.in | 8 + otherlibs/unix/Makefile | 69 +- otherlibs/unix/accept.c | 64 - otherlibs/unix/accept_unix.c | 63 + otherlibs/unix/accept_win32.c | 50 + otherlibs/unix/access.c | 8 +- otherlibs/unix/addrofstr.c | 22 +- otherlibs/unix/alarm.c | 4 +- otherlibs/unix/bind.c | 41 - otherlibs/unix/bind_unix.c | 41 + otherlibs/unix/bind_win32.c | 33 + otherlibs/unix/caml/socketaddr.h | 97 + otherlibs/unix/caml/unixsupport.h | 170 + otherlibs/unix/channels.c | 85 - otherlibs/unix/channels_unix.c | 85 + otherlibs/unix/channels_win32.c | 167 + otherlibs/unix/chdir.c | 6 +- otherlibs/unix/chmod.c | 6 +- otherlibs/unix/chown.c | 6 +- otherlibs/unix/chroot.c | 6 +- otherlibs/unix/close.c | 28 - otherlibs/unix/close_on.c | 32 + otherlibs/unix/close_unix.c | 28 + otherlibs/unix/close_win32.c | 43 + otherlibs/unix/closedir.c | 6 +- otherlibs/unix/connect.c | 44 - otherlibs/unix/connect_unix.c | 44 + otherlibs/unix/connect_win32.c | 38 + otherlibs/unix/createprocess.c | 173 + otherlibs/unix/cst2constr.c | 2 +- otherlibs/unix/cst2constr.h | 3 +- otherlibs/unix/cstringv.c | 8 +- otherlibs/unix/dune | 178 +- otherlibs/unix/dup.c | 36 - otherlibs/unix/dup2.c | 18 +- otherlibs/unix/dup_unix.c | 36 + otherlibs/unix/dup_win32.c | 117 + otherlibs/unix/envir.c | 68 - otherlibs/unix/envir_unix.c | 68 + otherlibs/unix/envir_win32.c | 43 + otherlibs/unix/errmsg.c | 25 - otherlibs/unix/errmsg_unix.c | 29 + otherlibs/unix/errmsg_win32.c | 45 + otherlibs/unix/execv.c | 10 +- otherlibs/unix/execve.c | 14 +- otherlibs/unix/execvp.c | 37 +- otherlibs/unix/exit.c | 4 +- otherlibs/unix/fchmod.c | 8 +- otherlibs/unix/fchown.c | 8 +- otherlibs/unix/fcntl.c | 18 +- otherlibs/unix/fork.c | 39 +- otherlibs/unix/fsync.c | 8 +- otherlibs/unix/ftruncate.c | 14 +- otherlibs/unix/getaddrinfo.c | 32 +- otherlibs/unix/getcwd.c | 10 +- otherlibs/unix/getegid.c | 4 +- otherlibs/unix/geteuid.c | 4 +- otherlibs/unix/getgid.c | 4 +- otherlibs/unix/getgr.c | 37 +- otherlibs/unix/getgroups.c | 8 +- otherlibs/unix/gethost.c | 152 +- otherlibs/unix/gethostname.c | 8 +- otherlibs/unix/getlogin.c | 6 +- otherlibs/unix/getnameinfo.c | 12 +- otherlibs/unix/getpeername.c | 41 - otherlibs/unix/getpeername_unix.c | 41 + otherlibs/unix/getpeername_win32.c | 33 + otherlibs/unix/getpid.c | 22 - otherlibs/unix/getpid_unix.c | 22 + otherlibs/unix/getpid_win32.c | 24 + otherlibs/unix/getppid.c | 4 +- otherlibs/unix/getproto.c | 29 +- otherlibs/unix/getpw.c | 46 +- otherlibs/unix/getserv.c | 33 +- otherlibs/unix/getsockname.c | 41 - otherlibs/unix/getsockname_unix.c | 41 + otherlibs/unix/getsockname_win32.c | 33 + otherlibs/unix/gettimeofday.c | 33 - otherlibs/unix/gettimeofday_unix.c | 33 + otherlibs/unix/gettimeofday_win32.c | 37 + otherlibs/unix/getuid.c | 4 +- otherlibs/unix/gmtime.c | 53 +- otherlibs/unix/initgroups.c | 10 +- otherlibs/unix/isatty.c | 22 - otherlibs/unix/isatty_unix.c | 22 + otherlibs/unix/isatty_win32.c | 24 + otherlibs/unix/itimer.c | 30 +- otherlibs/unix/kill.c | 6 +- otherlibs/unix/link.c | 58 - otherlibs/unix/link_unix.c | 58 + otherlibs/unix/link_win32.c | 64 + otherlibs/unix/listen.c | 35 - otherlibs/unix/listen_unix.c | 36 + otherlibs/unix/listen_win32.c | 26 + otherlibs/unix/lockf.c | 116 - otherlibs/unix/lockf_unix.c | 116 + otherlibs/unix/lockf_win32.c | 134 + otherlibs/unix/lseek.c | 66 - otherlibs/unix/lseek_unix.c | 66 + otherlibs/unix/lseek_win32.c | 77 + otherlibs/unix/mkdir.c | 6 +- otherlibs/unix/mkfifo.c | 12 +- otherlibs/unix/mmap.c | 206 - otherlibs/unix/mmap_ba.c | 2 +- otherlibs/unix/mmap_unix.c | 206 + otherlibs/unix/mmap_win32.c | 132 + otherlibs/unix/nice.c | 6 +- otherlibs/unix/nonblock.c | 42 + otherlibs/unix/open.c | 87 - otherlibs/unix/open_unix.c | 87 + otherlibs/unix/open_win32.c | 91 + otherlibs/unix/opendir.c | 6 +- otherlibs/unix/pipe.c | 40 - otherlibs/unix/pipe_unix.c | 40 + otherlibs/unix/pipe_win32.c | 46 + otherlibs/unix/putenv.c | 10 +- otherlibs/unix/read.c | 38 - otherlibs/unix/read_unix.c | 55 + otherlibs/unix/read_win32.c | 105 + otherlibs/unix/readdir.c | 6 +- otherlibs/unix/readlink.c | 57 - otherlibs/unix/readlink_unix.c | 57 + otherlibs/unix/readlink_win32.c | 107 + otherlibs/unix/realpath.c | 43 - otherlibs/unix/realpath_unix.c | 43 + otherlibs/unix/realpath_win32.c | 79 + otherlibs/unix/rename.c | 40 - otherlibs/unix/rename_unix.c | 40 + otherlibs/unix/rename_win32.c | 43 + otherlibs/unix/rewinddir.c | 8 +- otherlibs/unix/rmdir.c | 6 +- otherlibs/unix/select.c | 114 - otherlibs/unix/select_unix.c | 111 + otherlibs/unix/select_win32.c | 1331 + otherlibs/unix/sendrecv.c | 148 - otherlibs/unix/sendrecv_unix.c | 146 + otherlibs/unix/sendrecv_win32.c | 141 + otherlibs/unix/setgid.c | 6 +- otherlibs/unix/setgroups.c | 8 +- otherlibs/unix/setsid.c | 6 +- otherlibs/unix/setuid.c | 6 +- otherlibs/unix/shutdown.c | 40 - otherlibs/unix/shutdown_unix.c | 40 + otherlibs/unix/shutdown_win32.c | 31 + otherlibs/unix/signals.c | 64 +- otherlibs/unix/sleep.c | 76 - otherlibs/unix/sleep_unix.c | 76 + otherlibs/unix/sleep_win32.c | 27 + otherlibs/unix/socket.c | 65 - otherlibs/unix/socket_unix.c | 65 + otherlibs/unix/socket_win32.c | 79 + otherlibs/unix/socketaddr.c | 52 +- otherlibs/unix/socketaddr.h | 84 - otherlibs/unix/socketpair.c | 57 - otherlibs/unix/socketpair_unix.c | 57 + otherlibs/unix/socketpair_win32.c | 200 + otherlibs/unix/sockopt.c | 302 - otherlibs/unix/sockopt_unix.c | 304 + otherlibs/unix/sockopt_win32.c | 233 + otherlibs/unix/spawn.c | 41 +- otherlibs/unix/startup.c | 49 + otherlibs/unix/stat.c | 198 - otherlibs/unix/stat_unix.c | 198 + otherlibs/unix/stat_win32.c | 446 + otherlibs/unix/strofaddr.c | 10 +- otherlibs/unix/symlink.c | 61 - otherlibs/unix/symlink_unix.c | 61 + otherlibs/unix/symlink_win32.c | 157 + otherlibs/unix/system.c | 44 + otherlibs/unix/termios.c | 122 +- otherlibs/unix/time.c | 8 +- otherlibs/unix/times.c | 67 - otherlibs/unix/times_unix.c | 71 + otherlibs/unix/times_win32.c | 41 + otherlibs/unix/truncate.c | 72 - otherlibs/unix/truncate_unix.c | 72 + otherlibs/unix/truncate_win32.c | 128 + otherlibs/unix/umask.c | 4 +- otherlibs/unix/unix.ml | 1120 - otherlibs/unix/unix.mli | 198 +- otherlibs/unix/unixLabels.mli | 198 +- otherlibs/unix/unix_unix.ml | 1200 + otherlibs/unix/unix_win32.ml | 1259 + otherlibs/unix/unixsupport.c | 346 - otherlibs/unix/unixsupport.h | 60 - otherlibs/unix/unixsupport_unix.c | 353 + otherlibs/unix/unixsupport_win32.c | 282 + otherlibs/unix/unlink.c | 6 +- otherlibs/unix/utimes.c | 94 - otherlibs/unix/utimes_unix.c | 94 + otherlibs/unix/utimes_win32.c | 76 + otherlibs/unix/wait.c | 28 +- otherlibs/unix/windbug.c | 32 + otherlibs/unix/windbug.h | 45 + otherlibs/unix/windir.c | 81 + otherlibs/unix/winlist.c | 80 + otherlibs/unix/winlist.h | 55 + otherlibs/unix/winwait.c | 80 + otherlibs/unix/winworker.c | 323 + otherlibs/unix/winworker.h | 73 + otherlibs/unix/write.c | 86 - otherlibs/unix/write_unix.c | 114 + otherlibs/unix/write_win32.c | 147 + otherlibs/win32unix/.depend | 13 - otherlibs/win32unix/Makefile | 75 - otherlibs/win32unix/accept.c | 50 - otherlibs/win32unix/bind.c | 34 - otherlibs/win32unix/channels.c | 142 - otherlibs/win32unix/close.c | 42 - otherlibs/win32unix/close_on.c | 32 - otherlibs/win32unix/connect.c | 39 - otherlibs/win32unix/createprocess.c | 155 - otherlibs/win32unix/dup.c | 120 - otherlibs/win32unix/envir.c | 43 - otherlibs/win32unix/errmsg.c | 45 - otherlibs/win32unix/getpeername.c | 33 - otherlibs/win32unix/getpid.c | 24 - otherlibs/win32unix/getsockname.c | 33 - otherlibs/win32unix/gettimeofday.c | 45 - otherlibs/win32unix/isatty.c | 24 - otherlibs/win32unix/link.c | 64 - otherlibs/win32unix/listen.c | 27 - otherlibs/win32unix/lockf.c | 160 - otherlibs/win32unix/lseek.c | 70 - otherlibs/win32unix/mmap.c | 168 - otherlibs/win32unix/nonblock.c | 44 - otherlibs/win32unix/open.c | 91 - otherlibs/win32unix/pipe.c | 46 - otherlibs/win32unix/read.c | 61 - otherlibs/win32unix/readlink.c | 107 - otherlibs/win32unix/realpath.c | 79 - otherlibs/win32unix/rename.c | 43 - otherlibs/win32unix/select.c | 1330 - otherlibs/win32unix/sendrecv.c | 143 - otherlibs/win32unix/shutdown.c | 32 - otherlibs/win32unix/sleep.c | 28 - otherlibs/win32unix/socket.c | 40 - otherlibs/win32unix/socketpair.c | 201 - otherlibs/win32unix/sockopt.c | 234 - otherlibs/win32unix/startup.c | 51 - otherlibs/win32unix/stat.c | 454 - otherlibs/win32unix/symlink.c | 167 - otherlibs/win32unix/system.c | 45 - otherlibs/win32unix/times.c | 58 - otherlibs/win32unix/truncate.c | 128 - otherlibs/win32unix/unix.ml | 1235 - otherlibs/win32unix/unixsupport.c | 347 - otherlibs/win32unix/unixsupport.h | 97 - otherlibs/win32unix/utimes.c | 85 - otherlibs/win32unix/windbug.c | 32 - otherlibs/win32unix/windbug.h | 70 - otherlibs/win32unix/windir.c | 83 - otherlibs/win32unix/winlist.c | 80 - otherlibs/win32unix/winlist.h | 55 - otherlibs/win32unix/winwait.c | 81 - otherlibs/win32unix/winworker.c | 322 - otherlibs/win32unix/winworker.h | 73 - otherlibs/win32unix/write.c | 101 - parsing/ast_helper.ml | 20 +- parsing/ast_helper.mli | 14 +- parsing/ast_invariants.ml | 19 + parsing/ast_iterator.ml | 74 +- parsing/ast_iterator.mli | 3 + parsing/ast_mapper.ml | 112 +- parsing/ast_mapper.mli | 9 +- parsing/attr_helper.ml | 11 +- parsing/attr_helper.mli | 13 +- parsing/builtin_attributes.ml | 273 +- parsing/builtin_attributes.mli | 130 +- parsing/depend.ml | 55 +- parsing/depend.mli | 3 +- parsing/lexer.mli | 6 +- parsing/lexer.mll | 80 +- parsing/location.ml | 195 +- parsing/location.mli | 80 +- parsing/parse.ml | 51 +- parsing/parser.mly | 489 +- parsing/parsetree.mli | 124 +- parsing/pprintast.ml | 347 +- parsing/pprintast.mli | 10 +- parsing/printast.ml | 175 +- parsing/printast.mli | 10 +- parsing/syntaxerr.ml | 13 +- parsing/syntaxerr.mli | 10 +- parsing/unit_info.ml | 122 + parsing/unit_info.mli | 159 + release-info/News | 69 + release-info/howto.md | 2 + release-info/markdown-add-pr-links.sh | 14 +- runtime/HACKING.adoc | 171 + runtime/Makefile | 421 - runtime/addrmap.c | 141 + runtime/afl.c | 45 +- runtime/alloc.c | 167 +- runtime/amd64.S | 1336 +- runtime/amd64nt.asm | 132 +- runtime/arm.S | 447 - runtime/arm64.S | 1067 +- runtime/array.c | 124 +- runtime/backtrace.c | 106 +- runtime/backtrace_byt.c | 246 +- runtime/backtrace_nat.c | 349 +- runtime/bigarray.c | 244 +- runtime/blake2.c | 245 + runtime/callback.c | 280 +- runtime/caml/address_class.h | 110 +- runtime/caml/addrmap.h | 98 + runtime/caml/alloc.h | 32 +- runtime/caml/atomic_refcount.h | 37 + runtime/caml/backtrace.h | 20 +- runtime/caml/backtrace_prim.h | 43 +- runtime/caml/bigarray.h | 24 +- runtime/caml/blake2.h | 46 + runtime/caml/callback.h | 13 +- runtime/caml/camlatomic.h | 85 + runtime/caml/codefrag.h | 17 +- runtime/caml/compact.h | 36 - runtime/caml/compatibility.h | 373 - runtime/caml/config.h | 89 +- runtime/caml/custom.h | 32 +- runtime/caml/domain.h | 154 +- runtime/caml/domain_state.h | 41 +- runtime/caml/domain_state.tbl | 193 +- runtime/caml/eventlog.h | 130 - runtime/caml/exec.h | 67 - runtime/caml/exec.h.in | 73 + runtime/caml/fail.h | 78 +- runtime/caml/fiber.h | 292 + runtime/caml/finalise.h | 68 +- runtime/caml/frame_descriptors.h | 159 + runtime/caml/freelist.h | 72 - runtime/caml/gc.h | 48 +- runtime/caml/gc_ctrl.h | 46 +- runtime/caml/gc_stats.h | 88 + runtime/caml/globroots.h | 8 +- runtime/caml/hooks.h | 3 +- runtime/caml/instrtrace.h | 3 +- runtime/caml/instruct.h | 1 + runtime/caml/intext.h | 50 +- runtime/caml/io.h | 33 +- runtime/caml/lf_skiplist.h | 123 + runtime/caml/m.h.in | 12 +- runtime/caml/major_gc.h | 115 +- runtime/caml/memory.h | 219 +- runtime/caml/memprof.h | 36 +- runtime/caml/minor_gc.h | 101 +- runtime/caml/misc.h | 193 +- runtime/caml/mlvalues.h | 210 +- runtime/caml/osdeps.h | 61 +- runtime/caml/platform.h | 181 + runtime/caml/prims.h | 19 +- runtime/caml/printexc.h | 2 +- runtime/caml/reverse.h | 47 +- runtime/caml/roots.h | 42 +- runtime/caml/runtime_events.h | 321 + runtime/caml/s.h.in | 28 +- runtime/caml/shared_heap.h | 115 + runtime/caml/signals.h | 78 +- runtime/caml/signals_machdep.h | 74 - runtime/caml/sizeclasses.h | 19 + runtime/caml/skiplist.h | 6 +- runtime/caml/stack.h | 150 +- runtime/caml/stacks.h | 47 - runtime/caml/startup.h | 4 +- runtime/caml/startup_aux.h | 51 +- runtime/caml/sync.h | 38 + runtime/caml/sys.h | 16 +- runtime/caml/tsan.h | 91 + runtime/caml/ui.h | 32 - runtime/caml/weak.h | 209 +- runtime/caml/winsupport.h | 8 +- runtime/codefrag.c | 157 +- runtime/compact.c | 498 - runtime/compare.c | 380 +- runtime/custom.c | 134 +- runtime/debugger.c | 123 +- runtime/domain.c | 2107 +- runtime/dune | 16 +- runtime/dynlink.c | 138 +- runtime/dynlink_nat.c | 100 +- runtime/eventlog.c | 397 - runtime/extern.c | 912 +- runtime/fail_byt.c | 40 +- runtime/fail_nat.c | 65 +- runtime/fiber.c | 711 + runtime/finalise.c | 446 +- runtime/fix_code.c | 5 +- runtime/floats.c | 33 +- runtime/frame_descriptors.c | 231 + runtime/freelist.c | 1856 - runtime/gc_ctrl.c | 712 +- runtime/gc_stats.c | 178 + runtime/gen_domain_state32_inc.awk | 36 - runtime/gen_domain_state64_inc.awk | 33 - runtime/gen_primitives.sh | 55 +- runtime/gen_primsc.sh | 63 + runtime/globroots.c | 126 +- runtime/hash.c | 31 +- runtime/i386.S | 448 - runtime/i386nt.asm | 315 - runtime/instrtrace.c | 171 +- runtime/intern.c | 1053 +- runtime/interp.c | 454 +- runtime/ints.c | 85 +- runtime/io.c | 507 +- runtime/lexing.c | 27 +- runtime/lf_skiplist.c | 497 + runtime/major_gc.c | 3020 +- runtime/md5.c | 4 +- runtime/memory.c | 1029 +- runtime/memprof.c | 367 +- runtime/meta.c | 95 +- runtime/minor_gc.c | 1089 +- runtime/misc.c | 136 +- runtime/obj.c | 184 +- runtime/parsing.c | 54 +- runtime/platform.c | 242 + runtime/power.S | 1520 +- runtime/printexc.c | 14 +- runtime/prng.c | 69 + runtime/riscv.S | 1437 +- runtime/roots.c | 70 + runtime/roots_byt.c | 144 - runtime/roots_nat.c | 524 - runtime/runtime_events.c | 834 + runtime/s390x.S | 1422 +- runtime/sak.c | 38 +- runtime/shared_heap.c | 1456 + runtime/signals.c | 556 +- runtime/signals_byt.c | 87 - runtime/signals_nat.c | 355 +- runtime/signals_osdep.h | 450 - runtime/skiplist.c | 4 - runtime/stacks.c | 114 - runtime/startup_aux.c | 129 +- runtime/startup_byt.c | 176 +- runtime/startup_nat.c | 74 +- runtime/str.c | 7 +- runtime/sync.c | 192 + runtime/sync_posix.h | 146 + runtime/sys.c | 218 +- runtime/tsan.c | 434 + runtime/unix.c | 143 +- runtime/weak.c | 775 +- runtime/win32.c | 309 +- runtime/zstd.c | 115 + stdlib/.depend | 199 +- stdlib/CONTRIBUTING.md | 14 +- stdlib/Compflags | 1 - stdlib/META.in | 5 + stdlib/Makefile | 213 +- stdlib/StdlibModules | 104 +- stdlib/arg.ml | 2 +- stdlib/arg.mli | 23 +- stdlib/array.ml | 67 +- stdlib/array.mli | 176 +- stdlib/arrayLabels.mli | 176 +- stdlib/atomic.ml | 19 +- stdlib/atomic.mli | 132 +- stdlib/bigarray.ml | 21 +- stdlib/bigarray.mli | 122 +- stdlib/bool.ml | 5 + stdlib/bool.mli | 14 + stdlib/buffer.ml | 237 +- stdlib/buffer.mli | 32 +- stdlib/bytes.ml | 34 +- stdlib/bytes.mli | 151 +- stdlib/bytesLabels.mli | 151 +- stdlib/camlinternalAtomic.ml | 60 - stdlib/camlinternalAtomic.mli | 30 - stdlib/camlinternalFormat.ml | 4 +- stdlib/camlinternalLazy.ml | 96 +- stdlib/camlinternalLazy.mli | 9 +- stdlib/camlinternalOO.ml | 32 +- stdlib/char.ml | 19 +- stdlib/char.mli | 32 +- stdlib/complex.ml | 10 +- stdlib/condition.ml | 20 + stdlib/condition.mli | 176 + stdlib/digest.ml | 211 +- stdlib/digest.mli | 130 +- stdlib/domain.ml | 298 + stdlib/domain.mli | 153 + stdlib/dune | 7 +- stdlib/dynarray.ml | 790 + stdlib/dynarray.mli | 641 + stdlib/effect.ml | 179 + stdlib/effect.mli | 147 + stdlib/ephemeron.ml | 197 +- stdlib/ephemeron.mli | 314 +- stdlib/filename.ml | 38 +- stdlib/filename.mli | 43 +- stdlib/float.ml | 102 +- stdlib/float.mli | 416 +- stdlib/format.ml | 395 +- stdlib/format.mli | 472 +- stdlib/fun.ml | 1 + stdlib/fun.mli | 6 + stdlib/gc.ml | 41 +- stdlib/gc.mli | 324 +- stdlib/genlex.ml | 203 - stdlib/genlex.mli | 75 - stdlib/hashtbl.ml | 48 +- stdlib/hashtbl.mli | 203 +- stdlib/header.c | 7 +- stdlib/headernt.c | 19 +- stdlib/in_channel.ml | 36 + stdlib/in_channel.mli | 134 +- stdlib/int.ml | 5 + stdlib/int.mli | 22 +- stdlib/int32.ml | 21 +- stdlib/int32.mli | 33 +- stdlib/int64.ml | 23 +- stdlib/int64.mli | 34 +- stdlib/lazy.ml | 18 +- stdlib/lazy.mli | 124 +- stdlib/lexing.mli | 2 +- stdlib/list.ml | 184 +- stdlib/list.mli | 90 +- stdlib/listLabels.mli | 90 +- stdlib/map.ml | 37 +- stdlib/map.mli | 329 +- stdlib/marshal.ml | 3 +- stdlib/marshal.mli | 20 +- stdlib/moreLabels.mli | 806 +- stdlib/mutex.ml | 34 + stdlib/mutex.mli | 71 + stdlib/nativeint.ml | 19 +- stdlib/nativeint.mli | 37 +- stdlib/obj.ml | 40 +- stdlib/obj.mli | 58 +- stdlib/oo.mli | 5 +- stdlib/option.mli | 2 +- stdlib/out_channel.ml | 13 + stdlib/out_channel.mli | 99 +- stdlib/parsing.mli | 2 +- stdlib/pervasives.ml | 244 - stdlib/printexc.ml | 65 +- stdlib/printexc.mli | 57 +- stdlib/printf.mli | 15 +- stdlib/queue.mli | 112 +- stdlib/random.ml | 562 +- stdlib/random.mli | 186 +- stdlib/scanf.ml | 79 +- stdlib/scanf.mli | 90 +- {otherlibs/systhreads => stdlib}/semaphore.ml | 0 .../systhreads => stdlib}/semaphore.mli | 0 stdlib/seq.ml | 24 +- stdlib/seq.mli | 36 +- stdlib/set.ml | 31 +- stdlib/set.mli | 274 +- stdlib/stack.ml | 5 + stdlib/stack.mli | 19 +- stdlib/stdLabels.mli | 2 +- stdlib/std_exit.mli | 19 + stdlib/stdlib.ml | 159 +- stdlib/stdlib.mli | 236 +- stdlib/stream.ml | 236 - stdlib/stream.mli | 111 - stdlib/string.ml | 35 +- stdlib/string.mli | 215 +- stdlib/stringLabels.mli | 215 +- stdlib/sys.ml.in | 3 +- stdlib/sys.mli | 81 +- stdlib/templates/float.template.mli | 90 +- .../templates/floatarraylabeled.template.mli | 163 +- stdlib/templates/hashtbl.template.mli | 203 +- stdlib/templates/map.template.mli | 329 +- stdlib/templates/set.template.mli | 274 +- stdlib/type.ml | 41 + stdlib/type.mli | 119 + stdlib/uchar.mli | 4 +- stdlib/weak.ml | 89 +- stdlib/weak.mli | 22 +- testsuite/HACKING.adoc | 136 +- testsuite/Makefile | 171 +- testsuite/lib/Makefile | 57 - testsuite/lib/lib.mli | 57 + testsuite/lib/testing.mli | 16 +- testsuite/summarize.awk | 71 +- .../afl-instrumentation/afl-fuzz-test.ml | 14 + .../afl-instrumentation/afl-fuzz-test.run | 19 + .../afl-instrumentation/afl-showmap-test.ml | 18 + .../afl-instrumentation/afl-showmap-test.run | 36 + .../tests/afl-instrumentation/afltest.ml | 16 - .../tests/afl-instrumentation/afltest.run | 36 - .../tests/afl-instrumentation/has-afl-fuzz.sh | 7 + .../tests/afl-instrumentation/readline.ml | 6 + testsuite/tests/arch-power/exn_raise.ml | 9 +- testsuite/tests/asmcomp/bind_tuples.ml | 2 +- testsuite/tests/asmcomp/compare.ml | 2 +- testsuite/tests/asmcomp/evaluation_order.ml | 3 +- testsuite/tests/asmcomp/func_sections.ml | 33 +- testsuite/tests/asmcomp/func_sections.run | 2 +- testsuite/tests/asmcomp/is_in_static_data.c | 5 - testsuite/tests/asmcomp/is_static.ml | 40 - testsuite/tests/asmcomp/is_static_flambda.ml | 207 - .../tests/asmcomp/is_static_flambda_dep.ml | 1 - .../tests/asmcomp/lift_mutable_let_flambda.ml | 4 +- testsuite/tests/asmcomp/optargs.ml | 22 +- testsuite/tests/asmcomp/poll_attr_both.ml | 34 +- testsuite/tests/asmcomp/poll_attr_inserted.ml | 20 +- testsuite/tests/asmcomp/poll_attr_prologue.ml | 34 +- testsuite/tests/asmcomp/poll_attr_user.ml | 34 +- testsuite/tests/asmcomp/polling.c | 14 +- testsuite/tests/asmcomp/polling_insertion.ml | 24 +- testsuite/tests/asmcomp/prevent_fma.ml | 22 + testsuite/tests/asmcomp/register_typing.ml | 2 +- .../tests/asmcomp/register_typing_switch.ml | 2 +- testsuite/tests/asmcomp/run.ml | 9 + testsuite/tests/asmcomp/select_addr.ml | 14 + testsuite/tests/asmcomp/select_addr.reference | 1 + testsuite/tests/asmcomp/simple_float_const.ml | 1 - .../asmcomp/simple_float_const_opaque.ml | 1 - .../asmcomp/static_float_array_flambda.ml | 26 - .../static_float_array_flambda_opaque.ml | 30 - testsuite/tests/asmcomp/staticalloc.ml | 8 +- testsuite/tests/asmcomp/unrolling_flambda.ml | 4 +- testsuite/tests/asmcomp/unrolling_flambda2.ml | 4 +- testsuite/tests/asmgen/arith.cmm | 6 +- testsuite/tests/asmgen/catch-float.cmm | 6 +- testsuite/tests/asmgen/catch-multiple.cmm | 6 +- .../tests/asmgen/catch-rec-deadhandler.cmm | 12 +- testsuite/tests/asmgen/catch-rec.cmm | 6 +- testsuite/tests/asmgen/catch-try-float.cmm | 6 +- testsuite/tests/asmgen/catch-try.cmm | 6 +- testsuite/tests/asmgen/checkbound.cmm | 6 +- .../tests/asmgen/even-odd-spill-float.cmm | 6 +- testsuite/tests/asmgen/even-odd-spill.cmm | 6 +- testsuite/tests/asmgen/even-odd.cmm | 6 +- testsuite/tests/asmgen/fib.cmm | 6 +- testsuite/tests/asmgen/immediates.cmm | 6 +- testsuite/tests/asmgen/integr.cmm | 10 +- testsuite/tests/asmgen/invariants.cmm | 8 +- testsuite/tests/asmgen/main.c | 6 +- testsuite/tests/asmgen/mainarith.c | 2 +- testsuite/tests/asmgen/pgcd.cmm | 6 +- testsuite/tests/asmgen/quicksort.cmm | 6 +- testsuite/tests/asmgen/quicksort2.cmm | 6 +- testsuite/tests/asmgen/soli.cmm | 7 +- testsuite/tests/asmgen/tagged-fib.cmm | 6 +- testsuite/tests/asmgen/tagged-integr.cmm | 6 +- testsuite/tests/asmgen/tagged-quicksort.cmm | 6 +- testsuite/tests/asmgen/tagged-tak.cmm | 6 +- testsuite/tests/asmgen/tak.cmm | 6 +- testsuite/tests/ast-invariants/test.ml | 10 +- testsuite/tests/backtrace/backtrace.ml | 4 +- testsuite/tests/backtrace/backtrace2.ml | 11 +- .../tests/backtrace/backtrace2.reference | 14 +- testsuite/tests/backtrace/backtrace3.ml | 11 +- .../tests/backtrace/backtrace_bounds_exn.ml | 25 + .../backtrace/backtrace_bounds_exn.reference | 4 + testsuite/tests/backtrace/backtrace_c_exn.ml | 26 + .../tests/backtrace/backtrace_c_exn.reference | 2 + testsuite/tests/backtrace/backtrace_c_exn_.c | 14 + .../tests/backtrace/backtrace_deprecated.ml | 11 +- .../backtrace_dynlink.flambda.reference | 25 + .../tests/backtrace/backtrace_dynlink.ml | 80 + .../backtrace/backtrace_dynlink.reference | 18 + .../backtrace/backtrace_dynlink_plugin.ml | 8 + .../tests/backtrace/backtrace_effects.ml | 47 + .../backtrace/backtrace_effects.reference | 11 + ...backtrace_effects_nested.flambda.reference | 4 + .../backtrace/backtrace_effects_nested.ml | 59 + .../backtrace_effects_nested.reference | 3 + .../tests/backtrace/backtrace_or_exception.ml | 11 +- testsuite/tests/backtrace/backtrace_slots.ml | 11 +- .../tests/backtrace/backtrace_systhreads.ml | 52 + .../backtrace/backtrace_systhreads.reference | 25 + .../backtrace/backtraces_and_finalizers.ml | 6 +- testsuite/tests/backtrace/callstack.ml | 26 +- testsuite/tests/backtrace/callstack.reference | 2 +- testsuite/tests/backtrace/event_after_prim.ml | 8 +- testsuite/tests/backtrace/inline_test.ml | 30 +- .../tests/backtrace/inline_traversal_test.ml | 30 +- .../tests/backtrace/lazy.flambda.reference | 12 + testsuite/tests/backtrace/lazy.ml | 19 +- testsuite/tests/backtrace/lazy.reference | 22 +- testsuite/tests/backtrace/methods.ml | 8 +- testsuite/tests/backtrace/names.ml | 19 +- testsuite/tests/backtrace/names.reference | 14 +- testsuite/tests/backtrace/pr2195.ml | 53 +- testsuite/tests/backtrace/pr6920_why_at.ml | 17 +- .../tests/backtrace/pr6920_why_swallow.ml | 17 +- testsuite/tests/backtrace/print_location.ml | 12 + .../tests/backtrace/print_location.reference | 3 + testsuite/tests/backtrace/raw_backtrace.ml | 11 +- testsuite/tests/badly-ordered-deps/lib.ml | 1 + .../main.bytecode.reference | 2 + testsuite/tests/badly-ordered-deps/main.ml | 19 + testsuite/tests/basic-float/float_compare.ml | 1 + testsuite/tests/basic-io-2/io.ml | 4 +- testsuite/tests/basic-io/wc.ml | 2 +- testsuite/tests/basic-manyargs/manyargs.ml | 2 +- testsuite/tests/basic-modules/anonymous.ml | 54 +- .../basic-modules/anonymous.ocamlc.reference | 18 +- .../anonymous.ocamlopt.flambda.reference | 18 +- .../anonymous.ocamlopt.reference | 19 +- testsuite/tests/basic-modules/main.ml | 2 +- testsuite/tests/basic-modules/pr11186.ml | 18 + .../recursive_module_evaluation_errors.ml | 30 +- testsuite/tests/basic-more/bounds.ml | 2 +- testsuite/tests/basic-more/div_by_zero.ml | 2 +- testsuite/tests/basic-more/function_in_ref.ml | 2 +- testsuite/tests/basic-more/if_in_if.ml | 2 +- .../basic-more/labels_evaluation_order.ml | 16 + .../labels_evaluation_order.reference | 7 + .../basic-more/morematch.compilers.reference | 13 + testsuite/tests/basic-more/morematch.ml | 8 +- testsuite/tests/basic-more/opaque_prim.ml | 2 +- testsuite/tests/basic-more/pr10338.ml | 10 +- testsuite/tests/basic-more/pr1271.ml | 2 +- testsuite/tests/basic-more/pr2719.ml | 2 +- testsuite/tests/basic-more/pr6216.ml | 4 +- .../basic-more/record_evaluation_order.ml | 2 +- .../robustmatch.compilers.reference | 27 + testsuite/tests/basic-more/robustmatch.ml | 4 +- testsuite/tests/basic-more/safer_matching.ml | 15 + .../tests/basic-more/safer_matching.reference | 2 + .../tests/basic-more/sequential_and_or.ml | 2 +- .../tests/basic-more/structural_constants.ml | 2 +- testsuite/tests/basic-more/tbuffer.ml | 2 +- testsuite/tests/basic-more/testrandom.ml | 16 - .../tests/basic-more/testrandom.reference | 4 - .../tests/basic-more/top_level_patterns.ml | 2 +- testsuite/tests/basic-more/tprintf.ml | 2 +- testsuite/tests/basic-multdef/usemultdef.ml | 2 +- testsuite/tests/basic-private/tlength.ml | 2 +- testsuite/tests/basic/arrays.ml | 7 + testsuite/tests/basic/boxedints.ml | 24 +- testsuite/tests/basic/boxedints.reference | 6 + testsuite/tests/basic/constprop.ml.c | 13 +- testsuite/tests/basic/opt_variants.ml | 2 +- .../tests/basic/patmatch_for_multiple.ml | 173 +- testsuite/tests/basic/patmatch_incoherence.ml | 9 +- testsuite/tests/basic/patmatch_split_no_or.ml | 44 +- .../basic/unit_naming.compilers.reference | 2 +- testsuite/tests/basic/unit_naming.ml | 20 +- testsuite/tests/c-api/aligned_alloc.ml | 24 + testsuite/tests/c-api/aligned_alloc_stubs.c | 12 + testsuite/tests/c-api/alloc_async.ml | 16 +- testsuite/tests/c-api/alloc_async_stubs.c | 28 +- testsuite/tests/c-api/external.ml | 24 + testsuite/tests/c-api/external_stubs.c | 7 + .../tests/c-api/test_c_thread_has_lock.ml | 20 + .../c-api/test_c_thread_has_lock.reference | 2 + .../c-api/test_c_thread_has_lock_cstubs.c | 17 + .../c-api/test_c_thread_has_lock_systhread.ml | 24 + ...test_c_thread_has_lock_systhread.reference | 4 + .../tests/callback/callback_effects_gc.ml | 29 + testsuite/tests/callback/callbackprim.c | 7 +- testsuite/tests/callback/minor_named.ml | 15 + .../tests/callback/minor_named.reference | 1 + testsuite/tests/callback/minor_named_.c | 10 + testsuite/tests/callback/nested_fiber.ml | 49 + .../tests/callback/nested_fiber.reference | 5 + testsuite/tests/callback/nested_fiber_.c | 6 + testsuite/tests/callback/signals_alloc.ml | 13 +- testsuite/tests/callback/stack_overflow.ml | 27 + .../tests/callback/stack_overflow.reference | 2 + testsuite/tests/callback/stack_overflow_.c | 6 + testsuite/tests/callback/tcallback.ml | 76 - testsuite/tests/callback/test1.ml | 48 + testsuite/tests/callback/test1.reference | 7 + testsuite/tests/callback/test1_.c | 68 + testsuite/tests/callback/test2.ml | 21 + testsuite/tests/callback/test2.reference | 8 + testsuite/tests/callback/test2_.c | 23 + testsuite/tests/callback/test3.ml | 41 + testsuite/tests/callback/test3.reference | 10 + testsuite/tests/callback/test3_.c | 23 + testsuite/tests/callback/test4.ml | 27 + testsuite/tests/callback/test4.reference | 6 + testsuite/tests/callback/test4_.c | 23 + testsuite/tests/callback/test5.ml | 25 + testsuite/tests/callback/test5.reference | 9 + testsuite/tests/callback/test5_.c | 37 + testsuite/tests/callback/test6.ml | 30 + testsuite/tests/callback/test6.reference | 12 + testsuite/tests/callback/test6_.c | 23 + testsuite/tests/callback/test7.ml | 38 + testsuite/tests/callback/test7.reference | 7 + testsuite/tests/callback/test7_.c | 23 + testsuite/tests/callback/test_finaliser_gc.ml | 30 + .../callback/test_finaliser_gc.reference | 2 + .../tests/callback/test_signalhandler.ml | 82 + .../callback/test_signalhandler.reference | 8 + .../tests/callback/test_signalhandler_.c | 81 + .../tests/compaction/test_compact_full.ml | 12 + .../tests/compaction/test_freelist_free.ml | 19 + .../tests/compiler-libs/test_longident.ml | 6 +- .../tests/compiler-libs/test_untypeast.ml | 40 +- testsuite/tests/effects/backtrace.ml | 59 + testsuite/tests/effects/backtrace.reference | 6 + testsuite/tests/effects/cmphash.ml | 20 + testsuite/tests/effects/cmphash.reference | 2 + testsuite/tests/effects/evenodd.ml | 21 + testsuite/tests/effects/evenodd.reference | 1 + .../effects/issue479.compilers.reference | 13 + testsuite/tests/effects/issue479.ml | 56 + testsuite/tests/effects/manylive.ml | 26 + testsuite/tests/effects/manylive.reference | 1 + testsuite/tests/effects/marshal.ml | 15 + testsuite/tests/effects/marshal.reference | 1 + testsuite/tests/effects/overflow.ml | 39 + testsuite/tests/effects/overflow.reference | 1 + testsuite/tests/effects/partial.ml | 27 + testsuite/tests/effects/partial.reference | 1 + testsuite/tests/effects/reperform.ml | 36 + testsuite/tests/effects/reperform.reference | 22 + testsuite/tests/effects/sched.ml | 64 + testsuite/tests/effects/sched.reference | 1 + testsuite/tests/effects/shallow_state.ml | 47 + .../tests/effects/shallow_state.reference | 3 + testsuite/tests/effects/shallow_state_io.ml | 50 + .../tests/effects/shallow_state_io.reference | 3 + testsuite/tests/effects/test1.ml | 14 + testsuite/tests/effects/test1.reference | 1 + testsuite/tests/effects/test10.ml | 33 + testsuite/tests/effects/test10.reference | 1 + testsuite/tests/effects/test11.ml | 21 + testsuite/tests/effects/test11.reference | 2 + testsuite/tests/effects/test2.ml | 29 + testsuite/tests/effects/test2.reference | 6 + testsuite/tests/effects/test3.ml | 21 + testsuite/tests/effects/test3.reference | 2 + testsuite/tests/effects/test4.ml | 20 + testsuite/tests/effects/test4.reference | 1 + testsuite/tests/effects/test5.ml | 23 + testsuite/tests/effects/test5.reference | 1 + testsuite/tests/effects/test6.ml | 29 + testsuite/tests/effects/test6.reference | 3 + testsuite/tests/effects/test_lazy.ml | 49 + testsuite/tests/effects/test_lazy.reference | 3 + testsuite/tests/effects/unhandled_effects.ml | 36 + testsuite/tests/effects/unhandled_unlinked.ml | 7 + .../effects/unhandled_unlinked.reference | 1 + testsuite/tests/effects/used_cont.ml | 20 + testsuite/tests/effects/used_cont.reference | 1 + testsuite/tests/embedded/cmcaml.ml | 2 +- testsuite/tests/ephe-c-api/test.ml | 4 +- testsuite/tests/exotic-syntax/exotic.ml | 7 +- testsuite/tests/extension-constructor/test.ml | 3 +- testsuite/tests/flambda/afl_lazy.ml | 6 +- testsuite/tests/flambda/approx_meet.ml | 7 +- testsuite/tests/flambda/gpr2239.ml | 7 +- testsuite/tests/flambda/gpr998.ml | 2 +- testsuite/tests/flambda/specialise.ml | 6 +- .../float_subst_boxed_number.ml | 10 +- .../float-unboxing/unbox_under_assign.ml | 3 +- .../deprecated_unsigned_printers.ml | 2 +- .../ignored_scan_counters.ml | 2 +- .../legacy_incompatible_flags.ml | 3 +- .../legacy_unfinished_modifiers.ml | 3 +- testsuite/tests/formatting/errors_batch.ml | 2 +- testsuite/tests/formatting/margins.ml | 2 +- .../tests/formatting/margins.ocaml.reference | 8 +- ...test_locations.dlocations.ocamlc.reference | 280 +- ...t_locations.dno-locations.ocamlc.reference | 252 +- testsuite/tests/formatting/test_locations.ml | 45 +- testsuite/tests/frame-pointers/c_call.ml | 24 + .../tests/frame-pointers/c_call.reference | 12 + testsuite/tests/frame-pointers/c_call_.c | 47 + testsuite/tests/frame-pointers/effects.ml | 50 + .../tests/frame-pointers/effects.reference | 26 + .../tests/frame-pointers/exception_handler.ml | 66 + .../exception_handler.reference | 16 + testsuite/tests/frame-pointers/fp_backtrace.c | 155 + testsuite/tests/frame-pointers/reperform.ml | 47 + .../tests/frame-pointers/reperform.reference | 17 + .../tests/frame-pointers/stack_realloc.ml | 64 + .../frame-pointers/stack_realloc.reference | 9 + .../tests/frame-pointers/stack_realloc2.ml | 66 + .../frame-pointers/stack_realloc2.reference | 9 + .../tests/frame-pointers/stack_realloc_.c | 16 + .../functors/functors.compilers.reference | 92 +- testsuite/tests/functors/functors.ml | 8 +- testsuite/tests/gc-roots/globroots.ml | 40 +- .../tests/gc-roots/globroots_parallel.ml | 32 + .../gc-roots/globroots_parallel.reference | 1 + .../gc-roots/globroots_parallel_spawn_burn.ml | 58 + .../globroots_parallel_spawn_burn.reference | 1 + .../tests/gc-roots/globroots_sequential.ml | 67 + ...ference => globroots_sequential.reference} | 0 testsuite/tests/gc-roots/globrootsprim.c | 7 +- .../tests/generalized-open/accepted_expect.ml | 31 +- .../tests/generalized-open/clambda_optim.ml | 13 +- .../tests/generalized-open/expansiveness.ml | 2 +- .../tests/generalized-open/funct_body.ml | 20 +- testsuite/tests/generalized-open/gpr1506.ml | 36 +- testsuite/tests/generalized-open/pr10048.ml | 2 +- testsuite/tests/generalized-open/shadowing.ml | 11 +- .../errors.compilers.reference | 528 +- .../tests/generated-parse-errors/errors.ml | 2 +- .../cant_reference_hidden.ocamlc.reference | 4 + .../hidden_stays_hidden.ocamlc.reference | 4 + testsuite/tests/hidden_includes/liba/a.ml | 5 + testsuite/tests/hidden_includes/liba_alt/a.ml | 3 + testsuite/tests/hidden_includes/libb/b.ml | 7 + testsuite/tests/hidden_includes/libc/c1.ml | 3 + testsuite/tests/hidden_includes/libc/c2.ml | 1 + testsuite/tests/hidden_includes/libc/c3.ml | 1 + testsuite/tests/hidden_includes/libc/c4.ml | 6 + testsuite/tests/hidden_includes/libc/c5.ml | 7 + .../not_included.ocamlc.reference | 7 + testsuite/tests/hidden_includes/test.ml | 159 + .../wrong_include_order.ocamlc.reference | 3 + testsuite/tests/instrumented-runtime/main.ml | 11 - testsuite/tests/instrumented-runtime/main.run | 35 - testsuite/tests/int64-unboxing/test.ml | 4 +- testsuite/tests/lazy/lazy1.ml | 2 +- testsuite/tests/lazy/lazy2.ml | 10 + testsuite/tests/lazy/lazy2.reference | 1 + testsuite/tests/lazy/lazy3.ml | 27 + testsuite/tests/lazy/lazy3.reference | 1 + testsuite/tests/lazy/lazy4.ml | 15 + testsuite/tests/lazy/lazy4.reference | 1 + testsuite/tests/lazy/lazy5.ml | 26 + testsuite/tests/lazy/lazy5.reference | 1 + testsuite/tests/lazy/lazy6.ml | 32 + testsuite/tests/lazy/lazy6.reference | 1 + testsuite/tests/lazy/lazy7.ml | 37 + testsuite/tests/lazy/lazy7.reference | 1 + testsuite/tests/lazy/lazy8.ml | 26 + testsuite/tests/lazy/lazy8.reference | 1 + testsuite/tests/lazy/minor_major_force.ml | 74 + .../tests/lazy/minor_major_force.reference | 16 + testsuite/tests/let-syntax/let_syntax.ml | 67 +- testsuite/tests/letrec-check/basic.ml | 40 +- .../letrec-check/extension_constructor.ml | 4 +- .../tests/letrec-check/flat_float_array.ml | 8 +- .../tests/letrec-check/float_unboxing.ml | 6 +- testsuite/tests/letrec-check/labels.ml | 6 +- testsuite/tests/letrec-check/lazy_.ml | 4 +- testsuite/tests/letrec-check/modules.ml | 18 +- .../tests/letrec-check/no_flat_float_array.ml | 4 +- testsuite/tests/letrec-check/objects.ml | 14 +- .../tests/letrec-check/partial_application.ml | 54 + testsuite/tests/letrec-check/pr7215.ml | 2 +- .../tests/letrec-check/pr7215.ocaml.reference | 2 +- testsuite/tests/letrec-check/pr7231.ml | 8 +- .../tests/letrec-check/pr7231.ocaml.reference | 3 +- testsuite/tests/letrec-check/pr7706.ml | 8 +- .../tests/letrec-check/pr7706.ocaml.reference | 4 +- testsuite/tests/letrec-check/records.ml | 4 +- testsuite/tests/letrec-check/unboxed.ml | 10 +- testsuite/tests/letrec-compilation/modrec.ml | 8 + .../tests/letrec-compilation/modrec.reference | 1 + ...12153_miscompilation_of_recursive_atoms.ml | 11 + testsuite/tests/lexing/comments.ml | 2 +- testsuite/tests/lexing/escape.ml | 8 +- testsuite/tests/lexing/escape.ocaml.reference | 12 + testsuite/tests/lexing/newlines.ml | 23 + testsuite/tests/lexing/uchar_esc.ml | 2 +- .../tests/lexing/uchar_esc.ocaml.reference | 8 + testsuite/tests/lf_skiplist/stubs.c | 162 + testsuite/tests/lf_skiplist/test.ml | 30 + testsuite/tests/lf_skiplist/test_parallel.ml | 109 + testsuite/tests/lib-arg/test_rest_all.ml | 2 +- testsuite/tests/lib-arg/testarg.ml | 2 +- testsuite/tests/lib-arg/testerror.ml | 2 +- testsuite/tests/lib-array/test_array.ml | 68 +- testsuite/tests/lib-bigarray-2/bigarrcml.ml | 4 +- testsuite/tests/lib-bigarray-2/bigarrcstub.c | 1 - testsuite/tests/lib-bigarray-2/bigarrfml.ml | 52 +- testsuite/tests/lib-bigarray-2/bigarrfstub.c | 1 - .../tests/lib-bigarray-2/has-gfortran.sh | 2 +- testsuite/tests/lib-bigarray-file/mapfile.ml | 6 +- testsuite/tests/lib-bigarray/bigarrays.ml | 26 +- .../tests/lib-bigarray/bigarrays.reference | 6 +- testsuite/tests/lib-bigarray/fftba.ml | 3 +- testsuite/tests/lib-bigarray/pr5115.ml | 3 +- testsuite/tests/lib-bigarray/specialized.ml | 91 + testsuite/tests/lib-bigarray/weak_bigarray.ml | 3 +- testsuite/tests/lib-bool/test.ml | 12 +- testsuite/tests/lib-buffer/test.ml | 34 +- testsuite/tests/lib-bytes-utf/test.ml | 3 +- testsuite/tests/lib-bytes/binary.ml | 3 +- testsuite/tests/lib-bytes/test_bytes.ml | 2 +- testsuite/tests/lib-channels/bigarrays.ml | 21 + .../tests/lib-channels/bigarrays.reference | 1 + testsuite/tests/lib-channels/close_in.ml | 32 + testsuite/tests/lib-channels/close_out.ml | 19 + testsuite/tests/lib-channels/input_all.ml | 15 +- testsuite/tests/lib-channels/input_lines.ml | 32 + testsuite/tests/lib-channels/refcounting.ml | 32 + .../tests/lib-digest/blake2b_self_test.ml | 7 + .../lib-digest/blake2b_self_test.reference | 1 + .../lib-digest/blake2b_self_test_stubs.c | 101 + testsuite/tests/lib-digest/digests.ml | 73 + testsuite/tests/lib-digest/md5.ml | 2 +- .../tests/lib-domain/DLS_thread_safety.ml | 56 + .../lib-domain/DLS_thread_safety.reference | 1 + testsuite/tests/lib-dynarray/heap_sort.ml | 98 + testsuite/tests/lib-dynarray/test.ml | 377 + testsuite/tests/lib-dynlink-bytecode/main.ml | 103 +- testsuite/tests/lib-dynlink-csharp/main.ml | 155 +- .../tests/lib-dynlink-domains/Plugin_0.ml | 35 + .../tests/lib-dynlink-domains/Plugin_0_0.ml | 30 + .../tests/lib-dynlink-domains/Plugin_0_0_0.ml | 33 + .../lib-dynlink-domains/Plugin_0_0_0_0.ml | 2 + .../lib-dynlink-domains/Plugin_0_0_0_1.ml | 2 + .../lib-dynlink-domains/Plugin_0_0_0_2.ml | 2 + .../tests/lib-dynlink-domains/Plugin_1.ml | 38 + .../tests/lib-dynlink-domains/Plugin_1_0.ml | 30 + .../tests/lib-dynlink-domains/Plugin_1_0_0.ml | 31 + .../lib-dynlink-domains/Plugin_1_0_0_0.ml | 2 + .../tests/lib-dynlink-domains/Plugin_1_1.ml | 2 + .../tests/lib-dynlink-domains/Plugin_1_2.ml | 32 + .../tests/lib-dynlink-domains/Plugin_1_2_0.ml | 35 + .../lib-dynlink-domains/Plugin_1_2_0_0.ml | 2 + .../tests/lib-dynlink-domains/Plugin_1_2_1.ml | 2 + .../tests/lib-dynlink-domains/Plugin_1_2_2.ml | 26 + .../lib-dynlink-domains/Plugin_1_2_2_0.ml | 2 + .../tests/lib-dynlink-domains/Plugin_1_2_3.ml | 23 + .../lib-dynlink-domains/Plugin_1_2_3_0.ml | 2 + testsuite/tests/lib-dynlink-domains/main.ml | 224 + .../tests/lib-dynlink-domains/main.reference | 22 + testsuite/tests/lib-dynlink-domains/store.ml | 7 + .../lib-dynlink-domains/test_generator.ml | 685 + testsuite/tests/lib-dynlink-init-info/test.ml | 2 +- .../test10_main.byte.reference | 14 +- .../lib-dynlink-initializers/test10_main.ml | 123 +- .../test10_main.native.reference | 22 +- .../lib-dynlink-initializers/test1_main.ml | 80 +- .../lib-dynlink-initializers/test2_main.ml | 80 +- .../lib-dynlink-initializers/test3_main.ml | 94 +- .../lib-dynlink-initializers/test4_main.ml | 94 +- .../lib-dynlink-initializers/test5_main.ml | 108 +- .../lib-dynlink-initializers/test6_main.ml | 84 +- .../lib-dynlink-initializers/test7_main.ml | 80 +- .../lib-dynlink-initializers/test8_main.ml | 104 +- .../lib-dynlink-initializers/test9_main.ml | 94 +- .../tests/lib-dynlink-native/factorial.c | 2 +- testsuite/tests/lib-dynlink-native/main.ml | 402 +- .../tests/lib-dynlink-native/main.reference | 2 +- .../lib-dynlink-native/packed1_client.ml | 3 - testsuite/tests/lib-dynlink-packed/loader.ml | 123 +- testsuite/tests/lib-dynlink-pr4229/main.ml | 146 +- testsuite/tests/lib-dynlink-pr4839/test.ml | 524 +- testsuite/tests/lib-dynlink-pr6950/loader.ml | 86 +- testsuite/tests/lib-dynlink-pr9209/dyn.ml | 114 +- testsuite/tests/lib-dynlink-pr9209/ocamltests | 1 - testsuite/tests/lib-dynlink-private/test.ml | 342 +- testsuite/tests/lib-either/test.ml | 2 +- testsuite/tests/lib-filename/extension.ml | 3 +- testsuite/tests/lib-filename/null.ml | 3 +- testsuite/tests/lib-filename/quotecommand.ml | 54 +- testsuite/tests/lib-filename/suffix.ml | 3 +- testsuite/tests/lib-filename/temp.ml | 15 + testsuite/tests/lib-float/test.ml | 3 +- testsuite/tests/lib-floatarray/floatarray.ml | 121 +- testsuite/tests/lib-format/domains.ml | 23 + testsuite/tests/lib-format/domains.reference | 1 + testsuite/tests/lib-format/mc_pr586_par.ml | 12 + .../tests/lib-format/mc_pr586_par.reference | 700 + testsuite/tests/lib-format/mc_pr586_par2.ml | 14 + .../tests/lib-format/mc_pr586_par2.reference | 700 + testsuite/tests/lib-format/pr6824.ml | 2 +- testsuite/tests/lib-format/print_array.ml | 28 + .../tests/lib-format/print_array.reference | 7 + testsuite/tests/lib-format/print_seq.ml | 2 +- testsuite/tests/lib-format/tformat.ml | 27 +- testsuite/tests/lib-fun/test.ml | 3 +- testsuite/tests/lib-hashtbl/compatibility.ml | 3 +- testsuite/tests/lib-hashtbl/hfun.ml | 3 +- testsuite/tests/lib-hashtbl/htbl.ml | 60 +- testsuite/tests/lib-hashtbl/htbl.reference | 22 +- testsuite/tests/lib-int/test.ml | 10 +- testsuite/tests/lib-int64/issue9460.ml | 3 +- testsuite/tests/lib-int64/test.ml | 3 +- testsuite/tests/lib-internalformat/test.ml | 2 +- testsuite/tests/lib-lazy/test.ml | 2 +- testsuite/tests/lib-list/test.ml | 29 +- testsuite/tests/lib-marshal/compressed.ml | 168 + .../tests/lib-marshal/compressed.reference | 38 + testsuite/tests/lib-marshal/intern_final.ml | 9 +- testsuite/tests/lib-marshal/intext.ml | 115 +- testsuite/tests/lib-marshal/intext.reference | 10 + testsuite/tests/lib-marshal/intext_par.ml | 611 + .../tests/lib-marshal/intext_par.reference | 1 + testsuite/tests/lib-marshal/intextaux_par.c | 69 + testsuite/tests/lib-obj/new_obj.ml | 3 +- testsuite/tests/lib-obj/reachable_words.ml | 3 +- .../tests/lib-obj/reachable_words_bug.ml | 3 +- testsuite/tests/lib-obj/reachable_words_np.ml | 21 - testsuite/tests/lib-obj/with_tag.ml | 3 +- testsuite/tests/lib-option/test.ml | 3 +- testsuite/tests/lib-printf/pr6534.ml | 3 +- testsuite/tests/lib-printf/pr6938.ml | 3 +- testsuite/tests/lib-printf/tprintf.ml | 27 +- testsuite/tests/lib-queue/test.ml | 3 +- testsuite/tests/lib-random/chi2.ml | 212 +- testsuite/tests/lib-random/compat_32_64.ml | 123 + .../tests/lib-random/compat_32_64.reference | 156 + testsuite/tests/lib-random/defaultinit.ml | 19 + .../tests/lib-random/defaultinit.reference | 4 + testsuite/tests/lib-random/full_int.ml | 10 - testsuite/tests/lib-random/full_int.reference | 1 - testsuite/tests/lib-random/parallel.ml | 45 + testsuite/tests/lib-random/parallel.reference | 12 + testsuite/tests/lib-random/rand.ml | 15 - testsuite/tests/lib-random/selfinit.ml | 14 + .../{rand.reference => selfinit.reference} | 0 testsuite/tests/lib-random/testvectors.ml | 16 + .../tests/lib-random/testvectors.reference | 50 + testsuite/tests/lib-result/test.ml | 3 +- testsuite/tests/lib-runtime-events/stubs.c | 95 + testsuite/tests/lib-runtime-events/test.ml | 26 + .../tests/lib-runtime-events/test.reference | 2 + .../tests/lib-runtime-events/test_caml.ml | 99 + .../lib-runtime-events/test_caml.reference | 1 + .../lib-runtime-events/test_caml_counters.ml | 30 + .../lib-runtime-events/test_caml_exception.ml | 24 + .../test_caml_exception.reference | 1 + .../lib-runtime-events/test_caml_parallel.ml | 95 + .../lib-runtime-events/test_caml_reentry.ml | 24 + .../test_caml_reentry.reference | 1 + .../lib-runtime-events/test_caml_runparams.ml | 25 + .../test_caml_slot_reuse.ml | 23 + .../lib-runtime-events/test_caml_stubs_gc.ml | 21 + .../tests/lib-runtime-events/test_compact.ml | 75 + .../lib-runtime-events/test_dropped_events.ml | 54 + .../lib-runtime-events/test_env_start.ml | 26 + .../tests/lib-runtime-events/test_external.ml | 47 + .../test_external_preserve.ml | 33 + .../tests/lib-runtime-events/test_fork.ml | 52 + .../lib-runtime-events/test_instrumented.ml | 58 + .../test_instrumented.reference | 1 + .../lib-runtime-events/test_user_event.ml | 87 + .../test_user_event_signal.ml | 39 + .../test_user_event_signal.reference | 6 + .../test_user_event_unknown.ml | 62 + .../test_user_event_unknown.reference | 5 + testsuite/tests/lib-scanf-2/tscanf2_master.ml | 87 +- testsuite/tests/lib-scanf/tscanf.ml | 12 +- testsuite/tests/lib-seq/test.ml | 28 +- testsuite/tests/lib-set/testmap.ml | 3 +- testsuite/tests/lib-set/testset.ml | 3 +- testsuite/tests/lib-stack/test.ml | 23 +- .../tests/lib-stdlabels/test_stdlabels.ml | 2 +- .../tests/lib-stdlib/pervasives_deprecated.ml | 41 - testsuite/tests/lib-str/parallel.ml | 42 + testsuite/tests/lib-str/parallel.reference | 1 + testsuite/tests/lib-str/t01.ml | 11 +- .../tests/lib-stream/count_concat_bug.ml | 62 - .../lib-stream/count_concat_bug.reference | 2 - testsuite/tests/lib-stream/mpr7769.ml | 10 - testsuite/tests/lib-stream/mpr7769.reference | 1 - testsuite/tests/lib-stream/mpr7769.txt | 1 - testsuite/tests/lib-string/binary.ml | 3 +- testsuite/tests/lib-string/test_string.ml | 12 +- .../tests/lib-string/test_string.reference | 4 + testsuite/tests/lib-sync/prodcons.ml | 64 + testsuite/tests/lib-sync/prodcons.reference | 1 + testsuite/tests/lib-sync/trylock.ml | 13 + testsuite/tests/lib-sync/trylock.reference | 1 + testsuite/tests/lib-sync/trylock2.ml | 9 + testsuite/tests/lib-sync/trylock2.reference | 1 + testsuite/tests/lib-sys/immediate64.ml | 3 +- testsuite/tests/lib-sys/rename.ml | 55 +- testsuite/tests/lib-sys/rename.reference | 6 + testsuite/tests/lib-systhreads/boundscheck.ml | 40 + .../lib-systhreads/boundscheck.reference | 0 testsuite/tests/lib-systhreads/eintr.ml | 14 +- .../lib-systhreads/multicore_lifecycle.ml | 22 + .../multicore_lifecycle.reference | 1 + .../lib-systhreads/test_c_thread_register.ml | 21 + .../test_c_thread_register.reference | 1 + .../test_c_thread_register_cstubs.c | 37 + testsuite/tests/lib-systhreads/testfork.ml | 16 +- testsuite/tests/lib-systhreads/testfork2.ml | 40 + .../tests/lib-systhreads/testfork2.reference | 1 + testsuite/tests/lib-systhreads/testpreempt.ml | 13 +- testsuite/tests/lib-systhreads/testyield.ml | 16 +- .../tests/lib-systhreads/threadsigmask.ml | 27 +- .../tests/lib-threads/backtrace_threads.ml | 13 +- testsuite/tests/lib-threads/bank.ml | 13 +- testsuite/tests/lib-threads/beat.ml | 18 +- testsuite/tests/lib-threads/bufchan.ml | 15 +- testsuite/tests/lib-threads/close.ml | 13 +- testsuite/tests/lib-threads/delayintr.ml | 73 +- testsuite/tests/lib-threads/fileio.ml | 13 +- testsuite/tests/lib-threads/mutex_errors.ml | 17 +- testsuite/tests/lib-threads/pr4466.ml | 9 +- testsuite/tests/lib-threads/pr5325.ml | 13 +- testsuite/tests/lib-threads/pr7638.ml | 16 +- testsuite/tests/lib-threads/pr8857.ml | 13 +- testsuite/tests/lib-threads/pr9971.ml | 15 - testsuite/tests/lib-threads/prodcons.ml | 13 +- testsuite/tests/lib-threads/prodcons2.ml | 13 +- testsuite/tests/lib-threads/sieve.ml | 26 +- testsuite/tests/lib-threads/signal.ml | 73 +- testsuite/tests/lib-threads/sockets.ml | 16 +- testsuite/tests/lib-threads/swapchan.ml | 13 +- testsuite/tests/lib-threads/tls.ml | 13 +- testsuite/tests/lib-threads/torture.ml | 15 +- .../lib-threads/uncaught_exception_handler.ml | 26 +- .../uncaught_exception_handler.reference | 18 +- testsuite/tests/lib-uchar/test.ml | 3 +- testsuite/tests/lib-unix/common/bigarrays.ml | 30 + .../tests/lib-unix/common/bigarrays.reference | 1 + testsuite/tests/lib-unix/common/channel_of.ml | 23 +- .../lib-unix/common/channel_of.reference | 5 +- testsuite/tests/lib-unix/common/cloexec.ml | 83 +- testsuite/tests/lib-unix/common/dup.ml | 11 +- testsuite/tests/lib-unix/common/dup2.ml | 13 +- .../tests/lib-unix/common/fork_cleanup.ml | 22 + .../lib-unix/common/fork_cleanup.reference | 1 + .../common/fork_cleanup_systhreads.ml | 25 + .../common/fork_cleanup_systhreads.reference | 1 + .../tests/lib-unix/common/getaddrinfo.ml | 11 +- .../tests/lib-unix/common/gethostbyaddr.ml | 29 + .../lib-unix/common/gethostbyaddr.reference | 1 + .../common/multicore_fork_domain_alone.ml | 22 + .../common/multicore_fork_domain_alone2.ml | 22 + testsuite/tests/lib-unix/common/pipe_eof.ml | 11 +- .../tests/lib-unix/common/process_pid.ml | 11 +- .../tests/lib-unix/common/redirections.ml | 61 +- testsuite/tests/lib-unix/common/rename.ml | 11 +- .../lib-unix/common/test_unix_cmdline.ml | 59 +- .../tests/lib-unix/common/test_unixlabels.ml | 13 +- testsuite/tests/lib-unix/common/truncate.ml | 11 +- testsuite/tests/lib-unix/common/uexit.ml | 11 +- testsuite/tests/lib-unix/common/utimes.ml | 13 +- .../tests/lib-unix/common/wait_nohang.ml | 59 +- testsuite/tests/lib-unix/isatty/isatty_std.ml | 15 +- testsuite/tests/lib-unix/isatty/isatty_tty.ml | 13 +- testsuite/tests/lib-unix/kill/unix_kill.ml | 11 +- testsuite/tests/lib-unix/realpath/test.ml | 11 +- testsuite/tests/lib-unix/unix-execvpe/exec.ml | 17 +- .../tests/lib-unix/unix-execvpe/exec.run | 2 +- .../lib-unix/unix-socket/recvfrom_linux.ml | 17 +- .../lib-unix/unix-socket/recvfrom_unix.ml | 15 +- .../lib-unix/win-channel-of/fd_of_channel.c | 8 + .../win-channel-of/parallel_channel_of.ml | 39 + .../tests/lib-unix/win-createprocess/test.ml | 129 + testsuite/tests/lib-unix/win-env/test_env.ml | 19 +- .../tests/lib-unix/win-socketpair/test.ml | 29 +- testsuite/tests/lib-unix/win-stat/fakeclock.c | 1 - testsuite/tests/lib-unix/win-stat/test.ml | 13 +- .../lib-unix/win-symlink/parallel_symlink.ml | 43 + testsuite/tests/lib-unix/win-symlink/test.ml | 15 +- testsuite/tests/link-test/empty.ml | 56 +- testsuite/tests/link-test/test.ml | 158 +- testsuite/tests/load_path/test.ml | 12 +- .../non_local.compilers.reference | 4 + testsuite/tests/local-functions/non_local.ml | 25 + testsuite/tests/local-functions/tupled.ml | 3 +- testsuite/tests/local-functions/tupled2.ml | 3 +- testsuite/tests/locale/test.ml | 2 +- testsuite/tests/manual-intf-c/prog.ml | 19 +- .../exhaustiveness_warnings.ml | 8 +- .../no_mixing_under_guard.ml | 2 +- .../no_value_clauses.ml | 4 +- .../match-exception-warnings/placement.ml | 2 +- .../tests/match-exception-warnings/pr7083.ml | 2 +- .../match-exception-warnings/reachability.ml | 8 +- testsuite/tests/match-exception/allocation.ml | 3 +- .../match-exception/exception_propagation.ml | 3 +- .../match-exception/identifier_sharing.ml | 3 +- .../tests/match-exception/match_failure.ml | 3 +- .../tests/match-exception/nested_handlers.ml | 3 +- .../raise_from_success_continuation.ml | 3 +- testsuite/tests/match-exception/streams.ml | 3 +- testsuite/tests/match-exception/tail_calls.ml | 3 +- .../tests/match-side-effects/contexts_1.ml | 43 + .../tests/match-side-effects/contexts_2.ml | 15 + .../tests/match-side-effects/contexts_3.ml | 13 + .../tests/match-side-effects/partiality.ml | 181 + .../match-side-effects/test_contexts_code.ml | 126 + .../test_contexts_results.ml | 43 + testsuite/tests/memory-model/.depend | 61 + testsuite/tests/memory-model/Makefile | 50 + testsuite/tests/memory-model/README.md | 31 + testsuite/tests/memory-model/barrier.ml | 20 + testsuite/tests/memory-model/barrier.mli | 9 + testsuite/tests/memory-model/forbidden.ml | 740 + .../tests/memory-model/forbidden.reference | 32 + testsuite/tests/memory-model/hist.ml | 61 + testsuite/tests/memory-model/hist.mli | 25 + testsuite/tests/memory-model/opt.ml | 51 + testsuite/tests/memory-model/opt.mli | 18 + testsuite/tests/memory-model/outcome.ml | 52 + testsuite/tests/memory-model/outcome.mli | 46 + testsuite/tests/memory-model/publish.ml | 218 + .../tests/memory-model/publish.reference | 4 + testsuite/tests/memory-model/run.ml | 75 + testsuite/tests/memory-model/run.mli | 30 + testsuite/tests/memory-model/shared.ml | 58 + testsuite/tests/memory-model/shared.mli | 25 + testsuite/tests/messages/highlight_tabs.ml | 6 +- testsuite/tests/messages/precise_locations.ml | 16 +- testsuite/tests/messages/spellcheck.ml | 215 + testsuite/tests/misc-kb/kbmain.ml | 2 +- testsuite/tests/misc-unsafe/almabench.ml | 2 +- testsuite/tests/misc-unsafe/fft.ml | 2 +- testsuite/tests/misc-unsafe/quicksort.ml | 2 +- testsuite/tests/misc-unsafe/soli.ml | 2 +- testsuite/tests/misc/bdd.ml | 3 +- testsuite/tests/misc/boyer.ml | 3 +- testsuite/tests/misc/ephe_infix.ml | 29 - testsuite/tests/misc/ephe_issue9391.ml | 70 - testsuite/tests/misc/ephetest.ml | 174 - testsuite/tests/misc/ephetest.reference | 29 - testsuite/tests/misc/ephetest2.ml | 156 - testsuite/tests/misc/ephetest2_new.ml | 147 - testsuite/tests/misc/ephetest2_new.reference | 5 - testsuite/tests/misc/ephetest3.ml | 124 - testsuite/tests/misc/ephetest_new.ml | 158 - testsuite/tests/misc/exotic.ml | 4 +- testsuite/tests/misc/fib.ml | 3 +- testsuite/tests/misc/finaliser.ml | 69 - .../tests/misc/gc_mark_stack_overflow.ml | 36 + .../misc/gc_mark_stack_overflow.reference | 1 + testsuite/tests/misc/gcwords.ml | 3 +- testsuite/tests/misc/gpr1370.ml | 3 +- testsuite/tests/misc/hamming.ml | 3 +- testsuite/tests/misc/nucleic.ml | 3 +- testsuite/tests/misc/pr7168.ml | 18 +- testsuite/tests/misc/sieve.ml | 3 +- testsuite/tests/misc/sorts.ml | 5 +- testsuite/tests/misc/takc.ml | 3 +- testsuite/tests/misc/taku.ml | 3 +- testsuite/tests/misc/weaklifetime.ml | 76 - testsuite/tests/misc/weaklifetime2.ml | 60 - testsuite/tests/misc/weaktest.ml | 70 - .../no-alias-deps/aliases.compilers.reference | 9 +- testsuite/tests/no-alias-deps/aliases.ml | 41 +- .../tests/no-alias-deps/{b.cmi => b.cmi.in} | 0 testsuite/tests/no-alias-deps/gpr2235.ml | 38 +- testsuite/tests/opaque/test.ml | 113 +- .../tests/output-complete-obj/github9344.ml | 18 +- testsuite/tests/output-complete-obj/test.ml | 59 +- testsuite/tests/output-complete-obj/test2.ml | 26 +- testsuite/tests/parallel/atomics.ml | 59 + testsuite/tests/parallel/atomics.reference | 2 + testsuite/tests/parallel/backup_thread.ml | 20 + .../tests/parallel/backup_thread.reference | 1 + .../tests/parallel/backup_thread_pipe.ml | 25 + .../parallel/backup_thread_pipe.reference | 1 + testsuite/tests/parallel/catch_break.ml | 114 + testsuite/tests/parallel/constpromote.ml | 14 + .../tests/parallel/constpromote.reference | 1 + testsuite/tests/parallel/deadcont.ml | 51 + testsuite/tests/parallel/deadcont.reference | 2 + testsuite/tests/parallel/domain_dls.ml | 34 + testsuite/tests/parallel/domain_dls.reference | 1 + testsuite/tests/parallel/domain_dls2.ml | 12 + .../tests/parallel/domain_dls2.reference | 1 + testsuite/tests/parallel/domain_id.ml | 31 + testsuite/tests/parallel/domain_id.reference | 1 + .../parallel/domain_parallel_spawn_burn.ml | 48 + .../domain_parallel_spawn_burn.reference | 1 + .../domain_parallel_spawn_burn_gc_set.ml | 63 + ...omain_parallel_spawn_burn_gc_set.reference | 1 + .../parallel/domain_serial_spawn_burn.ml | 56 + .../domain_serial_spawn_burn.reference | 1 + testsuite/tests/parallel/fib_threads.ml | 26 + .../tests/parallel/fib_threads.reference | 1 + testsuite/tests/parallel/join.ml | 67 + .../join.reference} | 0 .../tests/parallel/major_gc_wait_backup.ml | 42 + .../parallel/major_gc_wait_backup.reference | 2 + testsuite/tests/parallel/mctest.ml | 247 + testsuite/tests/parallel/mctest.reference | 4 + .../tests/parallel/multicore_systhreads.ml | 35 + .../parallel/multicore_systhreads.reference | 1 + testsuite/tests/parallel/pingpong.ml | 48 + testsuite/tests/parallel/pingpong.reference | 1 + testsuite/tests/parallel/poll.ml | 30 + testsuite/tests/parallel/poll.reference | 1 + testsuite/tests/parallel/prodcons_domains.ml | 64 + .../tests/parallel/prodcons_domains.reference | 1 + .../parallel/recommended_domain_count.ml | 10 + .../recommended_domain_count.reference | 1 + .../recommended_domain_count_cstubs.c | 13 + .../parallel/recommended_domain_count_unix.ml | 33 + .../recommended_domain_count_unix.reference | 1 + testsuite/tests/parallel/tak.ml | 19 + testsuite/tests/parallel/tak.reference | 1 + .../tests/parallel/test_c_thread_register.ml | 27 + .../parallel/test_c_thread_register.reference | 1 + .../parallel/test_c_thread_register_cstubs.c | 55 + testsuite/tests/parallel/test_issue_11094.ml | 58 + .../tests/parallel/test_issue_11094.reference | 1 + testsuite/tests/parse-errors/escape_error.ml | 8 +- .../expecting.compilers.reference | 16 +- testsuite/tests/parse-errors/expecting.ml | 8 +- .../mismatch_struct_sig.compilers.reference | 37 + .../tests/parse-errors/mismatch_struct_sig.ml | 44 + testsuite/tests/parse-errors/pr7847.ml | 17 +- ...closed_class_signature.compilers.reference | 4 +- .../parse-errors/unclosed_class_signature.mli | 8 +- ...osed_class_simpl_expr1.compilers.reference | 4 +- .../unclosed_class_simpl_expr1.ml | 8 +- ...osed_class_simpl_expr2.compilers.reference | 4 +- .../unclosed_class_simpl_expr2.ml | 8 +- ...osed_class_simpl_expr3.compilers.reference | 4 +- .../unclosed_class_simpl_expr3.ml | 8 +- .../unclosed_object.compilers.reference | 4 +- .../tests/parse-errors/unclosed_object.ml | 8 +- ...sed_paren_module_expr1.compilers.reference | 4 +- .../unclosed_paren_module_expr1.ml | 8 +- ...sed_paren_module_expr2.compilers.reference | 4 +- .../unclosed_paren_module_expr2.ml | 8 +- ...sed_paren_module_expr3.compilers.reference | 4 +- .../unclosed_paren_module_expr3.ml | 8 +- ...sed_paren_module_expr4.compilers.reference | 4 +- .../unclosed_paren_module_expr4.ml | 8 +- ...sed_paren_module_expr5.compilers.reference | 4 +- .../unclosed_paren_module_expr5.ml | 8 +- ...osed_paren_module_type.compilers.reference | 4 +- .../unclosed_paren_module_type.mli | 8 +- .../unclosed_sig.compilers.reference | 4 +- testsuite/tests/parse-errors/unclosed_sig.mli | 8 +- .../unclosed_simple_expr.compilers.reference | 117 +- .../parse-errors/unclosed_simple_expr.ml | 8 +- ...nclosed_simple_pattern.compilers.reference | 26 +- .../parse-errors/unclosed_simple_pattern.ml | 2 +- .../unclosed_struct.compilers.reference | 4 +- .../tests/parse-errors/unclosed_struct.ml | 8 +- .../locations_test.compilers.reference | 761 +- testsuite/tests/parsetree/locations_test.ml | 11 +- testsuite/tests/parsetree/source.ml | 49 +- testsuite/tests/parsetree/test.ml | 4 +- .../parsing/anonymous_class_parameter.ml | 8 +- testsuite/tests/parsing/arrow_ambiguity.ml | 8 +- testsuite/tests/parsing/assert_location.ml | 11 + .../tests/parsing/assert_location.reference | 1 + .../parsing/attributes.compilers.reference | 65 +- testsuite/tests/parsing/attributes.ml | 20 +- testsuite/tests/parsing/broken_invariants.ml | 29 +- testsuite/tests/parsing/change_start_loc.ml | 4 +- .../tests/parsing/change_start_loc.reference | 1 + .../tests/parsing/constructor_declarations.ml | 17 +- testsuite/tests/parsing/docstrings.ml | 6 +- .../tests/parsing/extended_indexoperators.ml | 4 +- .../tests/parsing/extension_operators.ml | 18 +- .../parsing/extensions.compilers.reference | 308 +- testsuite/tests/parsing/extensions.ml | 20 +- testsuite/tests/parsing/hash_ambiguity.ml | 17 +- ...nd_float_with_modifier.compilers.reference | 2 +- .../parsing/int_and_float_with_modifier.ml | 20 +- testsuite/tests/parsing/multi_indices.ml | 7 +- testsuite/tests/parsing/pr10468.ml | 4 +- testsuite/tests/parsing/pr6604.ml | 20 +- testsuite/tests/parsing/pr6604_2.ml | 20 +- testsuite/tests/parsing/pr6604_3.ml | 8 +- testsuite/tests/parsing/pr6865.ml | 20 +- testsuite/tests/parsing/pr7165.ml | 20 +- .../quotedextensions.compilers.reference | 68 +- testsuite/tests/parsing/quotedextensions.ml | 20 +- testsuite/tests/parsing/rawidents.ml | 100 + testsuite/tests/parsing/reloc.ml | 6 +- .../shortcut_ext_attr.compilers.reference | 38 +- testsuite/tests/parsing/shortcut_ext_attr.ml | 20 +- testsuite/tests/ppx-attributes/inline.ml | 14 + testsuite/tests/ppx-attributes/warning.ml | 7 +- testsuite/tests/ppx-contexts/test.ml | 36 +- .../tests/prim-bigstring/bigstring_access.ml | 3 +- .../tests/prim-bigstring/string_access.ml | 3 +- testsuite/tests/prim-bswap/bswap.ml | 3 +- testsuite/tests/prim-revapply/apply.ml | 2 +- testsuite/tests/prim-revapply/revapply.ml | 2 +- .../tests/printing-types/disambiguation.ml | 6 +- .../tests/printing-types/existentials.ml | 112 + testsuite/tests/printing-types/pr248.ml | 2 +- testsuite/tests/raise-counts/main.ml | 2 +- testsuite/tests/regression/gpr1623/gpr1623.ml | 4 +- .../missing_set_of_closures.ml | 36 +- testsuite/tests/regression/pr11887/pr11887.ml | 187 + testsuite/tests/regression/pr3612/pr3612.ml | 2 +- testsuite/tests/regression/pr7798/pr7798.ml | 12 +- testsuite/tests/regression/pr8769/pr8769.ml | 70 +- testsuite/tests/regression/pr9326/gc_set.ml | 32 +- .../pr9853/compaction_corner_case.ml | 10 +- .../reproducibility/cmis_on_file_system.ml | 36 +- testsuite/tests/required-external/main.ml | 72 +- testsuite/tests/runtime-C-exceptions/test.ml | 2 +- .../has-stackoverflow-detection.sh | 8 - .../tests/runtime-errors/stackoverflow.ml | 31 +- .../stackoverflow.native.reference | 9 - .../tests/runtime-errors/stackoverflow.run | 16 - testsuite/tests/runtime-errors/syserror.ml | 55 +- .../tests/runtime-naked-pointers/cstubs.c | 20 - testsuite/tests/runtime-naked-pointers/np.ml | 11 - testsuite/tests/runtime-naked-pointers/np1.ml | 12 - testsuite/tests/runtime-naked-pointers/np2.ml | 13 - .../tests/runtime-naked-pointers/np2.run | 3 - testsuite/tests/runtime-naked-pointers/np3.ml | 15 - .../tests/runtime-naked-pointers/np3.run | 3 - testsuite/tests/runtime-naked-pointers/np4.ml | 13 - .../tests/runtime-naked-pointers/np4.run | 3 - .../tests/runtime-naked-pointers/runtest.sh | 10 - .../tests/self-contained-toplevel/main.ml | 43 +- testsuite/tests/shadow_include/artificial.ml | 4 +- .../cannot_shadow_error.compilers.reference | 14 +- .../shadow_include/cannot_shadow_error.ml | 22 +- testsuite/tests/shadow_include/ghosts.ml | 2 +- testsuite/tests/shadow_include/shadow_all.ml | 87 +- testsuite/tests/shape-index/auxiliaire.ml | 1 + testsuite/tests/shape-index/index.ml | 69 + testsuite/tests/shape-index/index.reference | 63 + testsuite/tests/shape-index/index_aliases.ml | 52 + .../tests/shape-index/index_aliases.reference | 66 + .../tests/shape-index/index_bindingops.ml | 30 + .../shape-index/index_bindingops.reference | 47 + testsuite/tests/shape-index/index_constrs.ml | 32 + .../tests/shape-index/index_constrs.reference | 26 + .../shape-index/index_constrs_records.ml | 44 + .../index_constrs_records.reference | 93 + testsuite/tests/shape-index/index_functor.ml | 22 + .../tests/shape-index/index_functor.reference | 17 + testsuite/tests/shape-index/index_labels.ml | 27 + .../tests/shape-index/index_labels.reference | 25 + testsuite/tests/shape-index/index_modules.ml | 22 + .../tests/shape-index/index_modules.reference | 14 + testsuite/tests/shape-index/index_objects.ml | 49 + .../tests/shape-index/index_objects.reference | 32 + testsuite/tests/shape-index/index_types.ml | 41 + .../tests/shape-index/index_types.reference | 26 + testsuite/tests/shape-index/index_vb.ml | 22 + .../tests/shape-index/index_vb.reference | 24 + testsuite/tests/shapes/aliases.ml | 127 + testsuite/tests/shapes/comp_units.ml | 76 +- testsuite/tests/shapes/functors.ml | 95 +- testsuite/tests/shapes/incl_md_typeof.ml | 10 +- testsuite/tests/shapes/more_func.ml | 121 + testsuite/tests/shapes/nested_types.ml | 50 + testsuite/tests/shapes/open_arg.ml | 7 +- testsuite/tests/shapes/open_struct.ml | 60 +- testsuite/tests/shapes/recmodules.ml | 43 +- testsuite/tests/shapes/rotor_example.ml | 16 +- testsuite/tests/shapes/simple.ml | 50 +- testsuite/tests/shapes/typeof_include.ml | 4 +- testsuite/tests/statmemprof/alloc_counts.ml | 5 +- .../tests/statmemprof/arrays_in_major.ml | 4 +- .../statmemprof/arrays_in_major.reference | 11 - .../tests/statmemprof/arrays_in_minor.ml | 4 +- .../statmemprof/arrays_in_minor.reference | 11 - .../tests/statmemprof/blocking_in_callback.ml | 16 +- testsuite/tests/statmemprof/callstacks.ml | 35 +- testsuite/tests/statmemprof/comballoc.ml | 15 +- testsuite/tests/statmemprof/custom.ml | 5 +- .../tests/statmemprof/exception_callback.ml | 4 +- .../statmemprof/exception_callback_minor.ml | 4 +- testsuite/tests/statmemprof/intern.ml | 4 +- testsuite/tests/statmemprof/intern.reference | 10 - testsuite/tests/statmemprof/lists_in_minor.ml | 4 +- .../statmemprof/lists_in_minor.reference | 8 - .../tests/statmemprof/minor_no_postpone.ml | 4 +- .../tests/statmemprof/moved_while_blocking.ml | 16 +- .../statmemprof/thread_exit_in_callback.ml | 16 +- .../syntactic-arity/alloc.compilers.reference | 6 + testsuite/tests/syntactic-arity/alloc.ml | 39 + .../tests/syntactic-arity/alloc.reference | 2 + .../max_arity.compilers.reference | 5 + testsuite/tests/syntactic-arity/max_arity.ml | 160 + .../tests/syntactic-arity/max_arity.reference | 2 + .../tests/syntactic-arity/measure_arity.ml | 477 + .../syntactic-arity/measure_runtime_arity.ml | 128 + .../measure_runtime_arity.reference | 10 + .../tests/syntactic-arity/syntactic_arity.ml | 70 + .../syntactic-arity/syntactic_arity.reference | 8 + testsuite/tests/syntactic-arity/warnings.ml | 92 + testsuite/tests/tmc/ambiguities.ml | 23 +- testsuite/tests/tmc/other_features.ml | 6 +- testsuite/tests/tmc/partial_application.ml | 14 +- testsuite/tests/tmc/readable_output.ml | 81 +- testsuite/tests/tmc/semantic.ml | 2 +- testsuite/tests/tmc/shortcut.ml | 11 + testsuite/tests/tmc/stack_space.ml | 15 +- testsuite/tests/tmc/try_with.ml | 10 + testsuite/tests/tmc/tupled_function.ml | 7 +- testsuite/tests/tmc/tupled_function_calls.ml | 14 +- .../tupled_function_calls.native.reference | 2 + testsuite/tests/tmc/usage_warnings.ml | 23 +- testsuite/tests/tool-caml-tex/ellipses.ml | 20 +- testsuite/tests/tool-caml-tex/redirections.ml | 32 +- .../tool-caml-tex/redirections.reference | 1 + .../test-no-input-file.compilers.reference | 2 + .../tool-command-line/test-no-input-file.ml | 16 + .../tool-command-line/test-o-one-c-file.ml | 20 +- .../tool-command-line/test-o-several-files.ml | 14 +- .../test-unknown-file.compilers.reference | 2 +- .../tool-command-line/test-unknown-file.ml | 53 +- .../tests/tool-debugger/basic/debuggee.ml | 20 +- testsuite/tests/tool-debugger/dynlink/host.ml | 59 +- .../tool-debugger/find-artifacts/debuggee.ml | 42 +- .../tool-debugger/module_named_main/main.ml | 32 +- .../tool-debugger/no_debug_event/noev.ml | 48 +- .../tests/tool-debugger/printer/debuggee.ml | 47 +- testsuite/tests/tool-dumpobj/test.ml | 8 + testsuite/tests/tool-dumpobj/test.reference | 6 + testsuite/tests/tool-dumpobj/test.run | 4 + .../tests/tool-expect-test/clean_typer.ml | 18 +- testsuite/tests/tool-lexyacc/calc.ml | 10 +- testsuite/tests/tool-lexyacc/calc_parser.mly | 8 +- testsuite/tests/tool-lexyacc/chars.mll | 2 +- testsuite/tests/tool-lexyacc/csets.mll | 22 + testsuite/tests/tool-lexyacc/csets.reference | 3 + testsuite/tests/tool-lexyacc/mpr7760.mll | 2 +- testsuite/tests/tool-lexyacc/parsecheck.mly | 14 + testsuite/tests/tool-ocaml-annot/failure.ml | 26 +- testsuite/tests/tool-ocaml-annot/success.ml | 22 +- testsuite/tests/tool-ocaml-annot/typeonly.ml | 24 +- .../tests/tool-ocaml/directive_failure.ml | 8 +- testsuite/tests/tool-ocaml/t000.ml | 10 +- testsuite/tests/tool-ocaml/t010-const0.ml | 10 +- testsuite/tests/tool-ocaml/t010-const1.ml | 10 +- testsuite/tests/tool-ocaml/t010-const2.ml | 10 +- testsuite/tests/tool-ocaml/t010-const3.ml | 10 +- testsuite/tests/tool-ocaml/t011-constint.ml | 10 +- testsuite/tests/tool-ocaml/t020.ml | 10 +- testsuite/tests/tool-ocaml/t021-pushconst1.ml | 10 +- testsuite/tests/tool-ocaml/t021-pushconst2.ml | 10 +- testsuite/tests/tool-ocaml/t021-pushconst3.ml | 10 +- .../tests/tool-ocaml/t022-pushconstint.ml | 10 +- testsuite/tests/tool-ocaml/t040-makeblock1.ml | 10 +- testsuite/tests/tool-ocaml/t040-makeblock2.ml | 10 +- testsuite/tests/tool-ocaml/t040-makeblock3.ml | 10 +- testsuite/tests/tool-ocaml/t041-makeblock.ml | 10 +- testsuite/tests/tool-ocaml/t050-getglobal.ml | 10 +- .../tests/tool-ocaml/t050-pushgetglobal.ml | 10 +- .../tests/tool-ocaml/t051-getglobalfield.ml | 10 +- .../tool-ocaml/t051-pushgetglobalfield.ml | 10 +- testsuite/tests/tool-ocaml/t060-raise.ml | 12 +- testsuite/tests/tool-ocaml/t070-branch.ml | 10 +- testsuite/tests/tool-ocaml/t070-branchif.ml | 10 +- .../tests/tool-ocaml/t070-branchifnot.ml | 10 +- testsuite/tests/tool-ocaml/t071-boolnot.ml | 10 +- testsuite/tests/tool-ocaml/t080-eq.ml | 10 +- testsuite/tests/tool-ocaml/t080-geint.ml | 10 +- testsuite/tests/tool-ocaml/t080-gtint.ml | 10 +- testsuite/tests/tool-ocaml/t080-leint.ml | 10 +- testsuite/tests/tool-ocaml/t080-ltint.ml | 10 +- testsuite/tests/tool-ocaml/t080-neq.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc0.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc1.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc2.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc3.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc4.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc5.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc6.ml | 10 +- testsuite/tests/tool-ocaml/t090-acc7.ml | 10 +- testsuite/tests/tool-ocaml/t091-acc.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc0.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc1.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc2.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc3.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc4.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc5.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc6.ml | 10 +- testsuite/tests/tool-ocaml/t092-pushacc7.ml | 10 +- testsuite/tests/tool-ocaml/t093-pushacc.ml | 10 +- testsuite/tests/tool-ocaml/t100-pushtrap.ml | 10 +- testsuite/tests/tool-ocaml/t101-poptrap.ml | 10 +- testsuite/tests/tool-ocaml/t110-addint.ml | 10 +- testsuite/tests/tool-ocaml/t110-andint.ml | 10 +- testsuite/tests/tool-ocaml/t110-asrint-1.ml | 10 +- testsuite/tests/tool-ocaml/t110-asrint-2.ml | 10 +- testsuite/tests/tool-ocaml/t110-divint-1.ml | 10 +- testsuite/tests/tool-ocaml/t110-divint-2.ml | 10 +- testsuite/tests/tool-ocaml/t110-divint-3.ml | 10 +- testsuite/tests/tool-ocaml/t110-lslint.ml | 10 +- testsuite/tests/tool-ocaml/t110-lsrint.ml | 10 +- testsuite/tests/tool-ocaml/t110-modint-1.ml | 10 +- testsuite/tests/tool-ocaml/t110-modint-2.ml | 10 +- testsuite/tests/tool-ocaml/t110-mulint.ml | 10 +- testsuite/tests/tool-ocaml/t110-negint.ml | 10 +- testsuite/tests/tool-ocaml/t110-offsetint.ml | 10 +- testsuite/tests/tool-ocaml/t110-orint.ml | 10 +- testsuite/tests/tool-ocaml/t110-subint.ml | 10 +- testsuite/tests/tool-ocaml/t110-xorint.ml | 10 +- .../tests/tool-ocaml/t120-getstringchar.ml | 10 +- .../tests/tool-ocaml/t121-setstringchar.ml | 12 +- .../tests/tool-ocaml/t130-getvectitem.ml | 10 +- testsuite/tests/tool-ocaml/t130-vectlength.ml | 10 +- .../tests/tool-ocaml/t131-setvectitem.ml | 10 +- testsuite/tests/tool-ocaml/t140-switch-1.ml | 10 +- testsuite/tests/tool-ocaml/t140-switch-2.ml | 10 +- testsuite/tests/tool-ocaml/t140-switch-3.ml | 10 +- testsuite/tests/tool-ocaml/t140-switch-4.ml | 10 +- testsuite/tests/tool-ocaml/t141-switch-5.ml | 10 +- testsuite/tests/tool-ocaml/t141-switch-6.ml | 10 +- testsuite/tests/tool-ocaml/t141-switch-7.ml | 10 +- testsuite/tests/tool-ocaml/t142-switch-8.ml | 10 +- testsuite/tests/tool-ocaml/t142-switch-9.ml | 10 +- testsuite/tests/tool-ocaml/t142-switch-A.ml | 10 +- testsuite/tests/tool-ocaml/t150-push-1.ml | 10 +- testsuite/tests/tool-ocaml/t150-push-2.ml | 10 +- testsuite/tests/tool-ocaml/t160-closure.ml | 10 +- testsuite/tests/tool-ocaml/t161-apply1.ml | 10 +- testsuite/tests/tool-ocaml/t162-return.ml | 10 +- testsuite/tests/tool-ocaml/t163.ml | 10 +- testsuite/tests/tool-ocaml/t164-apply2.ml | 10 +- testsuite/tests/tool-ocaml/t164-apply3.ml | 10 +- testsuite/tests/tool-ocaml/t165-apply.ml | 10 +- testsuite/tests/tool-ocaml/t170-envacc2.ml | 10 +- testsuite/tests/tool-ocaml/t170-envacc3.ml | 10 +- testsuite/tests/tool-ocaml/t170-envacc4.ml | 10 +- testsuite/tests/tool-ocaml/t171-envacc.ml | 10 +- .../tests/tool-ocaml/t172-pushenvacc1.ml | 10 +- .../tests/tool-ocaml/t172-pushenvacc2.ml | 10 +- .../tests/tool-ocaml/t172-pushenvacc3.ml | 10 +- .../tests/tool-ocaml/t172-pushenvacc4.ml | 10 +- testsuite/tests/tool-ocaml/t173-pushenvacc.ml | 10 +- testsuite/tests/tool-ocaml/t180-appterm1.ml | 10 +- testsuite/tests/tool-ocaml/t180-appterm2.ml | 10 +- testsuite/tests/tool-ocaml/t180-appterm3.ml | 10 +- testsuite/tests/tool-ocaml/t181-appterm.ml | 10 +- .../tests/tool-ocaml/t190-makefloatblock-1.ml | 10 +- .../tests/tool-ocaml/t190-makefloatblock-2.ml | 10 +- .../tests/tool-ocaml/t190-makefloatblock-3.ml | 10 +- testsuite/tests/tool-ocaml/t191-vectlength.ml | 10 +- .../tests/tool-ocaml/t192-getfloatfield-1.ml | 10 +- .../tests/tool-ocaml/t192-getfloatfield-2.ml | 10 +- .../tests/tool-ocaml/t193-setfloatfield-1.ml | 10 +- .../tests/tool-ocaml/t193-setfloatfield-2.ml | 10 +- testsuite/tests/tool-ocaml/t200-getfield0.ml | 10 +- testsuite/tests/tool-ocaml/t200-getfield1.ml | 10 +- testsuite/tests/tool-ocaml/t200-getfield2.ml | 10 +- testsuite/tests/tool-ocaml/t200-getfield3.ml | 10 +- testsuite/tests/tool-ocaml/t201-getfield.ml | 10 +- testsuite/tests/tool-ocaml/t210-setfield0.ml | 10 +- testsuite/tests/tool-ocaml/t210-setfield1.ml | 10 +- testsuite/tests/tool-ocaml/t210-setfield2.ml | 10 +- testsuite/tests/tool-ocaml/t210-setfield3.ml | 10 +- testsuite/tests/tool-ocaml/t211-setfield.ml | 10 +- testsuite/tests/tool-ocaml/t220-assign.ml | 10 +- .../tests/tool-ocaml/t230-check_signals.ml | 10 +- testsuite/tests/tool-ocaml/t240-c_call1.ml | 10 +- testsuite/tests/tool-ocaml/t240-c_call2.ml | 12 +- testsuite/tests/tool-ocaml/t240-c_call3.ml | 10 +- testsuite/tests/tool-ocaml/t240-c_call4.ml | 10 +- testsuite/tests/tool-ocaml/t240-c_call5.ml | 10 +- .../tests/tool-ocaml/t250-closurerec-1.ml | 10 +- .../tests/tool-ocaml/t250-closurerec-2.ml | 10 +- .../tool-ocaml/t251-pushoffsetclosure0.ml | 10 +- .../tool-ocaml/t251-pushoffsetclosure2.ml | 10 +- .../tool-ocaml/t251-pushoffsetclosurem2.ml | 10 +- .../tool-ocaml/t252-pushoffsetclosure.ml | 10 +- .../tests/tool-ocaml/t253-offsetclosure0.ml | 10 +- .../tests/tool-ocaml/t253-offsetclosure2.ml | 10 +- .../tests/tool-ocaml/t253-offsetclosurem2.ml | 10 +- .../tests/tool-ocaml/t254-offsetclosure.ml | 10 +- testsuite/tests/tool-ocaml/t260-offsetref.ml | 10 +- .../tests/tool-ocaml/t270-push_retaddr.ml | 10 +- testsuite/tests/tool-ocaml/t300-getmethod.ml | 10 +- testsuite/tests/tool-ocaml/t301-object.ml | 10 +- testsuite/tests/tool-ocaml/t310-alloc-1.ml | 10 +- testsuite/tests/tool-ocaml/t310-alloc-2.ml | 10 +- testsuite/tests/tool-ocaml/t320-gc-1.ml | 10 +- testsuite/tests/tool-ocaml/t320-gc-2.ml | 10 +- testsuite/tests/tool-ocaml/t320-gc-3.ml | 10 +- testsuite/tests/tool-ocaml/t330-compact-1.ml | 10 +- testsuite/tests/tool-ocaml/t330-compact-2.ml | 12 +- testsuite/tests/tool-ocaml/t330-compact-3.ml | 10 +- testsuite/tests/tool-ocaml/t330-compact-4.ml | 10 +- testsuite/tests/tool-ocaml/t340-weak.ml | 10 +- testsuite/tests/tool-ocaml/t350-heapcheck.ml | 10 +- testsuite/tests/tool-ocaml/t360-stacks-1.ml | 10 +- testsuite/tests/tool-ocaml/t360-stacks-2.ml | 11 +- .../tests/tool-ocamlc-compat32/compat32.ml | 50 +- .../tests/tool-ocamlc-error-cleanup/test.ml | 16 +- testsuite/tests/tool-ocamlc-locations/foo.ml | 1 + .../marshalled.compilers.reference | 5 + .../tests/tool-ocamlc-locations/marshalled.ml | 24 + .../test.compilers.reference | 5 + testsuite/tests/tool-ocamlc-locations/test.ml | 17 + .../tests/tool-ocamlc-locations/testloc.ml | 102 + .../tests/tool-ocamlc-locations/trivpp.ml | 8 + ...tool-ocamlc-open-error.compilers.reference | 1 + .../tool-ocamlc-open-error.ml | 10 +- .../tool-ocamlc-open/tool-ocamlc-open.ml | 16 +- .../stop_after_lambda.compilers.reference | 1 + .../stop_after_lambda.ml | 10 + .../stop_after_parsing_impl.ml | 20 +- .../stop_after_parsing_intf.mli | 20 +- .../stop_after_scheduling.compilers.reference | 2 +- .../stop_after_scheduling.ml | 20 +- .../stop_after_typing_impl.ml | 20 +- .../tests/tool-ocamldep-modalias/main.ml | 263 +- testsuite/tests/tool-ocamldep-shadowing/a.ml | 14 +- testsuite/tests/tool-ocamldoc-open/main.ml | 8 +- .../Alert_toplevel.html.reference | 25 + .../tests/tool-ocamldoc/Alert_toplevel.mli | 7 + .../Alert_toplevel2.html.reference | 22 + .../tests/tool-ocamldoc/Alert_toplevel2.mli | 5 + .../tests/tool-ocamldoc/Alerts.html.reference | 161 + testsuite/tests/tool-ocamldoc/Alerts.mli | 55 + .../tool-ocamldoc/Alerts_impl.html.reference | 108 + testsuite/tests/tool-ocamldoc/Alerts_impl.ml | 22 + .../Documentation_tags.html.reference | 2 +- .../tool-ocamldoc/Documentation_tags.mli | 2 +- .../tool-ocamldoc/Entities.html.reference | 2 +- testsuite/tests/tool-ocamldoc/Entities.ml | 2 +- .../tests/tool-ocamldoc/Extensible_variant.ml | 2 +- .../tool-ocamldoc/Functions.html.reference | 50 + .../tool-ocamldoc/Functions.latex.reference | 96 + testsuite/tests/tool-ocamldoc/Functions.ml | 59 + .../Include_module_type_of.html.reference | 2 +- .../tool-ocamldoc/Include_module_type_of.mli | 7 +- .../Inline_records.html.reference | 2 +- .../tests/tool-ocamldoc/Inline_records.mli | 10 +- .../tests/tool-ocamldoc/Inline_records_bis.ml | 2 +- .../tool-ocamldoc/Item_ids.html.reference | 2 +- testsuite/tests/tool-ocamldoc/Item_ids.mli | 2 +- testsuite/tests/tool-ocamldoc/Level_0.mli | 2 +- .../tool-ocamldoc/Linebreaks.html.reference | 2 +- testsuite/tests/tool-ocamldoc/Linebreaks.mli | 8 +- .../tests/tool-ocamldoc/Loop.html.reference | 2 +- testsuite/tests/tool-ocamldoc/Loop.ml | 7 +- .../Module_whitespace.html.reference | 2 +- .../tests/tool-ocamldoc/Module_whitespace.ml | 2 +- .../tool-ocamldoc/No_preamble.html.reference | 2 +- testsuite/tests/tool-ocamldoc/No_preamble.mli | 2 +- .../tool-ocamldoc/Paragraph.html.reference | 2 +- testsuite/tests/tool-ocamldoc/Paragraph.mli | 2 +- .../Short_description.latex.reference | 2 +- .../tests/tool-ocamldoc/Short_description.txt | 2 +- testsuite/tests/tool-ocamldoc/Test.mli | 2 +- .../tool-ocamldoc/Variants.html.reference | 2 +- testsuite/tests/tool-ocamldoc/Variants.mli | 7 +- testsuite/tests/tool-ocamldoc/latex_ref.mli | 2 +- testsuite/tests/tool-ocamldoc/t01.ml | 6 +- testsuite/tests/tool-ocamldoc/t02.ml | 6 +- testsuite/tests/tool-ocamldoc/t03.ml | 6 +- testsuite/tests/tool-ocamldoc/t04.ml | 6 +- testsuite/tests/tool-ocamldoc/t05.ml | 6 +- testsuite/tests/tool-ocamlobjinfo/question.ml | 18 +- .../check_for_pack.compilers.reference | 2 +- .../tool-ocamlopt-save-ir/check_for_pack.ml | 24 +- .../save_ir_after_scheduling.ml | 14 +- .../save_ir_after_typing.ml | 25 +- .../tool-ocamlopt-save-ir/start_from_emit.ml | 49 +- .../stop_after_lambda.compilers.reference | 1 + .../stop_after_lambda.ml | 15 + .../stop_after_scheduling.ml | 16 +- .../tool-ocamltest-var-expansion/subst1.ml | 10 + .../subst1.reference | 4 + .../tool-ocamltest-var-expansion/subst2.ml | 13 + .../subst2.reference | 5 + testsuite/tests/tool-ocamltest/norm1.ml | 3 +- testsuite/tests/tool-ocamltest/norm2.ml | 3 +- testsuite/tests/tool-ocamltest/norm3.ml | 3 +- testsuite/tests/tool-ocamltest/norm4.ml | 3 +- .../tests/tool-toplevel-invocation/test.ml | 90 +- .../error_highlighting.compilers.reference | 46 +- .../tests/tool-toplevel/error_highlighting.ml | 17 +- testsuite/tests/tool-toplevel/exotic_lists.ml | 2 +- .../install_printer.compilers.reference | 20 + .../tests/tool-toplevel/install_printer.ml | 58 + .../known-bugs/broken_rec_in_show.ml | 6 +- testsuite/tests/tool-toplevel/mod_use.ml | 4 +- .../multi_phrase_line.compilers.reference | 70 + .../tests/tool-toplevel/multi_phrase_line.ml | 32 + .../tool-toplevel/pr6468.compilers.reference | 6 +- testsuite/tests/tool-toplevel/pr6468.ml | 2 +- .../tool-toplevel/pr7060.compilers.reference | 1 + testsuite/tests/tool-toplevel/pr7060.ml | 2 +- testsuite/tests/tool-toplevel/pr7751.ml | 4 +- .../tool-toplevel/pr9701.compilers.reference | 4 + testsuite/tests/tool-toplevel/pr9701.ml | 14 + testsuite/tests/tool-toplevel/printval.ml | 2 +- .../redefinition_hints.compilers.reference | 32 +- .../tests/tool-toplevel/redefinition_hints.ml | 8 +- testsuite/tests/tool-toplevel/show.ml | 2 +- .../tests/tool-toplevel/show_short_paths.ml | 4 +- testsuite/tests/tool-toplevel/strings.ml | 2 +- .../tool-toplevel/topeval.compilers.reference | 3 + testsuite/tests/tool-toplevel/topeval.ml | 24 +- .../tool-toplevel/tracing.compilers.reference | 2 +- testsuite/tests/tool-toplevel/tracing.ml | 2 +- .../tool-toplevel/uncaught_exceptions.ml | 2 +- testsuite/tests/tool-toplevel/use_command.ml | 6 +- testsuite/tests/translprim/array_spec.ml | 23 +- .../tests/translprim/comparison_optim.ml | 103 + .../translprim/comparison_optim.reference | 80 + .../comparison_table.compilers.reference | 10 +- .../tests/translprim/comparison_table.ml | 8 +- testsuite/tests/translprim/locs.ml | 5 +- .../module_coercion.compilers.flat.reference | 166 +- ...odule_coercion.compilers.no-flat.reference | 166 +- testsuite/tests/translprim/module_coercion.ml | 23 +- testsuite/tests/translprim/ref_spec.ml | 8 +- testsuite/tests/tsan/array_elt.ml | 25 + testsuite/tests/tsan/array_elt.reference | 40 + testsuite/tests/tsan/array_elt.run | 4 + testsuite/tests/tsan/callbacks.c | 27 + testsuite/tests/tsan/exn_from_c.ml | 58 + testsuite/tests/tsan/exn_from_c.reference | 53 + testsuite/tests/tsan/exn_from_c.run | 4 + testsuite/tests/tsan/exn_in_callback.ml | 64 + .../tests/tsan/exn_in_callback.reference | 52 + testsuite/tests/tsan/exn_in_callback.run | 4 + testsuite/tests/tsan/exn_reraise.ml | 59 + testsuite/tests/tsan/exn_reraise.reference | 52 + testsuite/tests/tsan/exn_reraise.run | 4 + testsuite/tests/tsan/filter-locations.sh | 46 + testsuite/tests/tsan/handlers_at_tail.ml | 26 + testsuite/tests/tsan/norace_atomics.ml | 26 + testsuite/tests/tsan/perform.ml | 94 + testsuite/tests/tsan/perform.reference | 141 + testsuite/tests/tsan/perform.run | 4 + testsuite/tests/tsan/raise_through_handler.ml | 61 + .../tsan/raise_through_handler.reference | 46 + .../tests/tsan/raise_through_handler.run | 4 + testsuite/tests/tsan/record_field.ml | 30 + testsuite/tests/tsan/record_field.reference | 41 + testsuite/tests/tsan/record_field.run | 4 + testsuite/tests/tsan/reperform.ml | 106 + testsuite/tests/tsan/reperform.reference | 140 + testsuite/tests/tsan/reperform.run | 4 + testsuite/tests/tsan/unhandled.ml | 88 + testsuite/tests/tsan/unhandled.reference | 98 + testsuite/tests/tsan/unhandled.run | 4 + testsuite/tests/tsan/waitgroup.ml | 7 + testsuite/tests/tsan/waitgroup_stubs.c | 59 + .../tests/typing-core-bugs/const_int_hint.ml | 133 +- .../typing-core-bugs/missing_rec_hint.ml | 24 +- .../typing-core-bugs/repeated_did_you_mean.ml | 6 +- .../type_expected_explanation.ml | 72 +- .../tests/typing-core-bugs/unit_fun_hints.ml | 34 +- testsuite/tests/typing-deprecated/alerts.ml | 17 +- .../tests/typing-deprecated/deprecated.ml | 37 +- .../typing-extension-constructor/test.ml | 2 +- .../test.ocaml.reference | 6 +- testsuite/tests/typing-extensions/cast.ml | 2 +- .../tests/typing-extensions/disambiguation.ml | 65 +- .../tests/typing-extensions/extensions.ml | 62 +- testsuite/tests/typing-extensions/msg.ml | 2 +- .../tests/typing-extensions/open_types.ml | 23 +- testsuite/tests/typing-external/pr11392.ml | 12 +- testsuite/tests/typing-fstclassmod/aliases.ml | 2 +- .../tests/typing-fstclassmod/fstclassmod.ml | 2 +- .../typing-fstclassmod/nondep_instance.ml | 7 +- .../tests/typing-fstclassmod/scope_escape.ml | 137 + testsuite/tests/typing-gadts/ambiguity.ml | 75 +- .../tests/typing-gadts/ambivalent_apply.ml | 14 +- testsuite/tests/typing-gadts/didier.ml | 18 +- .../tests/typing-gadts/dynamic_frisch.ml | 10 +- testsuite/tests/typing-gadts/gadthead.ml | 6 +- .../tests/typing-gadts/name_existentials.ml | 16 +- .../tests/typing-gadts/nested_equations.ml | 14 +- testsuite/tests/typing-gadts/omega07.ml | 2 +- testsuite/tests/typing-gadts/or_patterns.ml | 152 +- .../typing-gadts/packed-module-recasting.ml | 504 + testsuite/tests/typing-gadts/pr10189.ml | 21 +- testsuite/tests/typing-gadts/pr10271.ml | 2 +- testsuite/tests/typing-gadts/pr10348.ml | 50 + testsuite/tests/typing-gadts/pr10735.ml | 11 +- testsuite/tests/typing-gadts/pr10907.ml | 6 +- testsuite/tests/typing-gadts/pr11888.ml | 59 + testsuite/tests/typing-gadts/pr5332.ml | 4 +- testsuite/tests/typing-gadts/pr5689.ml | 14 +- testsuite/tests/typing-gadts/pr5785.ml | 3 +- testsuite/tests/typing-gadts/pr5848.ml | 2 +- testsuite/tests/typing-gadts/pr5906.ml | 3 +- testsuite/tests/typing-gadts/pr5948.ml | 14 +- testsuite/tests/typing-gadts/pr5981.ml | 4 +- testsuite/tests/typing-gadts/pr5985.ml | 51 +- testsuite/tests/typing-gadts/pr5989.ml | 4 +- testsuite/tests/typing-gadts/pr5997.ml | 4 +- testsuite/tests/typing-gadts/pr6158.ml | 8 +- testsuite/tests/typing-gadts/pr6163.ml | 4 +- testsuite/tests/typing-gadts/pr6174.ml | 6 +- testsuite/tests/typing-gadts/pr6241.ml | 3 +- testsuite/tests/typing-gadts/pr6690.ml | 14 +- testsuite/tests/typing-gadts/pr6817.ml | 2 +- testsuite/tests/typing-gadts/pr6934.ml | 4 +- testsuite/tests/typing-gadts/pr6980.ml | 11 +- testsuite/tests/typing-gadts/pr6993_bad.ml | 3 +- testsuite/tests/typing-gadts/pr7016.ml | 13 +- testsuite/tests/typing-gadts/pr7160.ml | 12 +- testsuite/tests/typing-gadts/pr7214.ml | 14 +- testsuite/tests/typing-gadts/pr7222.ml | 9 +- testsuite/tests/typing-gadts/pr7230.ml | 2 +- testsuite/tests/typing-gadts/pr7234.ml | 12 +- testsuite/tests/typing-gadts/pr7260.ml | 4 +- testsuite/tests/typing-gadts/pr7269.ml | 15 +- testsuite/tests/typing-gadts/pr7298.ml | 2 +- testsuite/tests/typing-gadts/pr7374.ml | 18 +- testsuite/tests/typing-gadts/pr7378.ml | 12 +- testsuite/tests/typing-gadts/pr7381.ml | 2 +- testsuite/tests/typing-gadts/pr7390.ml | 7 +- testsuite/tests/typing-gadts/pr7391.ml | 2 +- testsuite/tests/typing-gadts/pr7397.ml | 2 +- testsuite/tests/typing-gadts/pr7421.ml | 10 +- testsuite/tests/typing-gadts/pr7432.ml | 3 +- testsuite/tests/typing-gadts/pr7520.ml | 2 +- testsuite/tests/typing-gadts/pr7618.ml | 16 +- testsuite/tests/typing-gadts/pr7747.ml | 4 +- testsuite/tests/typing-gadts/pr7902.ml | 8 +- testsuite/tests/typing-gadts/pr9019.ml | 8 +- testsuite/tests/typing-gadts/pr9759.ml | 3 +- testsuite/tests/typing-gadts/pr9799.ml | 2 +- .../typing-gadts/principality-and-gadts.ml | 40 +- testsuite/tests/typing-gadts/return_type.ml | 8 +- .../tests/typing-gadts/syntactic-arity.ml | 165 + testsuite/tests/typing-gadts/term-conv.ml | 2 +- testsuite/tests/typing-gadts/test.ml | 286 +- .../typing-gadts/unexpected_existentials.ml | 30 +- testsuite/tests/typing-gadts/unify_mb.ml | 2 +- .../tests/typing-gadts/variables_in_mcomp.ml | 2 +- testsuite/tests/typing-gadts/yallop_bugs.ml | 6 +- testsuite/tests/typing-immediate/immediate.ml | 14 +- .../typing-implicit_unpack/implicit_unpack.ml | 70 +- testsuite/tests/typing-kind/kind_mismatch.ml | 27 + .../typing-misc-bugs/core_array_reduced_ok.ml | 8 +- .../gadt_declaration_check.ml | 4 +- .../pr6303_bad.compilers.reference | 6 +- .../tests/typing-misc-bugs/pr6303_bad.ml | 20 +- .../pr6946_bad.compilers.reference | 2 +- .../tests/typing-misc-bugs/pr6946_bad.ml | 20 +- .../tests/typing-misc/apply_non_function.ml | 142 + testsuite/tests/typing-misc/build_as_type.ml | 11 +- testsuite/tests/typing-misc/constraints.ml | 209 +- testsuite/tests/typing-misc/deep.ml | 22 +- .../typing-misc/disambiguate_principality.ml | 55 +- testsuite/tests/typing-misc/distant_errors.ml | 2 +- testsuite/tests/typing-misc/empty_variant.ml | 4 +- .../tests/typing-misc/enrich_typedecl.ml | 22 +- .../tests/typing-misc/exotic_unifications.ml | 12 +- testsuite/tests/typing-misc/external_arity.ml | 2 +- testsuite/tests/typing-misc/filter_params.ml | 2 +- testsuite/tests/typing-misc/gpr2277.ml | 2 +- .../tests/typing-misc/includeclass_errors.ml | 79 +- testsuite/tests/typing-misc/injectivity.ml | 74 +- testsuite/tests/typing-misc/inside_out.ml | 2 +- testsuite/tests/typing-misc/is_expansive.ml | 3 +- testsuite/tests/typing-misc/labels.ml | 22 +- testsuite/tests/typing-misc/let_rec_approx.ml | 38 + testsuite/tests/typing-misc/normalize_type.ml | 2 +- testsuite/tests/typing-misc/occur_check.ml | 64 +- testsuite/tests/typing-misc/open.ml | 37 + testsuite/tests/typing-misc/optbinders.ml | 14 +- .../tests/typing-misc/pat_type_sharing.ml | 2 +- testsuite/tests/typing-misc/pattern_open.ml | 8 +- testsuite/tests/typing-misc/polyvars.ml | 133 +- testsuite/tests/typing-misc/pr6416.ml | 138 +- testsuite/tests/typing-misc/pr6634.ml | 20 +- .../typing-misc/pr6939-flat-float-array.ml | 9 +- .../typing-misc/pr6939-no-flat-float-array.ml | 6 +- testsuite/tests/typing-misc/pr7103.ml | 20 +- testsuite/tests/typing-misc/pr7228.ml | 4 +- testsuite/tests/typing-misc/pr7668_bad.ml | 20 +- testsuite/tests/typing-misc/pr7712.ml | 2 +- testsuite/tests/typing-misc/pr7937.ml | 28 +- testsuite/tests/typing-misc/pr8548.ml | 3 +- testsuite/tests/typing-misc/pr8548_split.ml | 42 +- testsuite/tests/typing-misc/printing.ml | 22 +- testsuite/tests/typing-misc/records.ml | 107 +- testsuite/tests/typing-misc/scope_escape.ml | 8 +- ...mpty_polyvariant_error.compilers.reference | 2 +- .../typecore_empty_polyvariant_error.ml | 16 +- .../tests/typing-misc/typecore_errors.ml | 70 +- .../typing-misc/typecore_nolabel_errors.ml | 18 +- .../tests/typing-misc/typetexp_errors.ml | 39 +- .../typing-misc/unbound_type_variables.ml | 14 +- .../unique_names_in_unification.ml | 34 +- testsuite/tests/typing-misc/variance.ml | 114 +- testsuite/tests/typing-misc/variant.ml | 38 +- testsuite/tests/typing-misc/wellfounded.ml | 6 +- .../tests/typing-misc/wellfounded11150.ml | 49 + testsuite/tests/typing-misc/wrong_kind.ml | 38 +- testsuite/tests/typing-missing-cmi-2/test.ml | 26 +- .../tests/typing-missing-cmi-3/middle.ml | 7 + .../tests/typing-missing-cmi-3/original.ml | 2 + testsuite/tests/typing-missing-cmi-3/user.ml | 52 +- .../test.compilers.reference | 10 +- testsuite/tests/typing-missing-cmi/test.ml | 38 +- .../gatien_baron_20131019_ok.ml | 8 +- .../tests/typing-modules-bugs/pr10661_ok.ml | 6 +- .../pr10693_bad.compilers.reference | 24 +- .../tests/typing-modules-bugs/pr10693_bad.ml | 20 +- .../tests/typing-modules-bugs/pr5164_ok.ml | 8 +- .../tests/typing-modules-bugs/pr51_ok.ml | 8 +- .../tests/typing-modules-bugs/pr5663_ok.ml | 8 +- .../tests/typing-modules-bugs/pr5914_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6240_ok.ml | 8 +- .../pr6293_bad.compilers.reference | 6 +- .../tests/typing-modules-bugs/pr6293_bad.ml | 20 +- .../tests/typing-modules-bugs/pr6427_bad.ml | 20 +- .../tests/typing-modules-bugs/pr6485_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6513_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6572_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6651_ok.ml | 8 +- .../pr6752_bad.compilers.reference | 6 +- .../tests/typing-modules-bugs/pr6752_bad.ml | 20 +- .../tests/typing-modules-bugs/pr6752_ok.ml | 8 +- .../pr6899_first_bad.compilers.reference | 5 +- .../typing-modules-bugs/pr6899_first_bad.ml | 20 +- .../tests/typing-modules-bugs/pr6899_ok.ml | 8 +- .../pr6899_second_bad.compilers.reference | 5 +- .../typing-modules-bugs/pr6899_second_bad.ml | 20 +- .../tests/typing-modules-bugs/pr6944_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6954_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6981_ok.ml | 8 +- .../tests/typing-modules-bugs/pr6982_ok.ml | 8 +- .../typing-modules-bugs/pr6985_extended.ml | 2 +- .../tests/typing-modules-bugs/pr6985_ok.ml | 8 +- .../pr6992_bad.compilers.reference | 6 +- .../tests/typing-modules-bugs/pr6992_bad.ml | 20 +- .../tests/typing-modules-bugs/pr7036_ok.ml | 8 +- .../tests/typing-modules-bugs/pr7082_ok.ml | 8 +- .../tests/typing-modules-bugs/pr7112_bad.ml | 20 +- .../tests/typing-modules-bugs/pr7112_ok.ml | 8 +- .../tests/typing-modules-bugs/pr7152_ok.ml | 8 +- .../tests/typing-modules-bugs/pr7182_ok.ml | 8 +- .../typing-modules-bugs/pr7305_principal.ml | 8 +- .../tests/typing-modules-bugs/pr7321_ok.ml | 8 +- .../pr7414_2_bad.compilers.reference | 6 +- .../tests/typing-modules-bugs/pr7414_2_bad.ml | 20 +- .../pr7414_bad.compilers.reference | 6 +- .../tests/typing-modules-bugs/pr7414_bad.ml | 20 +- .../tests/typing-modules-bugs/pr7519_ok.ml | 8 +- .../tests/typing-modules-bugs/pr7601_ok.ml | 8 +- .../tests/typing-modules-bugs/pr7601a_ok.ml | 8 +- .../pr9695_bad.compilers.reference | 2 +- .../tests/typing-modules-bugs/pr9695_bad.ml | 20 +- testsuite/tests/typing-modules/Test.ml | 28 +- testsuite/tests/typing-modules/aliases.ml | 142 +- testsuite/tests/typing-modules/anonymous.ml | 2 +- .../applicative_functor_type.ml | 10 +- .../extension_constructors_errors_test.ml | 6 +- testsuite/tests/typing-modules/firstclass.ml | 10 +- testsuite/tests/typing-modules/functors.ml | 517 +- testsuite/tests/typing-modules/generative.ml | 33 +- .../typing-modules/illegal_permutation.ml | 40 +- .../tests/typing-modules/inclusion_errors.ml | 319 +- .../inclusion_errors_elision.ml | 10 +- .../tests/typing-modules/merge_constraint.ml | 46 +- .../module_type_substitution.ml | 83 +- testsuite/tests/typing-modules/nondep.ml | 4 +- .../typing-modules/nondep_private_abbrev.ml | 8 +- testsuite/tests/typing-modules/nongen.ml | 23 + .../tests/typing-modules/normalize_path.ml | 2 +- .../typing-modules/package_constraint.ml | 241 + .../typing-modules/packed_module_levels.ml | 2 +- testsuite/tests/typing-modules/pr10298.ml | 2 +- testsuite/tests/typing-modules/pr10399.ml | 6 +- testsuite/tests/typing-modules/pr5911.ml | 2 +- testsuite/tests/typing-modules/pr6394.ml | 4 +- testsuite/tests/typing-modules/pr6633.ml | 22 +- testsuite/tests/typing-modules/pr7207.ml | 4 +- testsuite/tests/typing-modules/pr7348.ml | 2 +- testsuite/tests/typing-modules/pr7726.ml | 52 +- testsuite/tests/typing-modules/pr7787.ml | 2 +- testsuite/tests/typing-modules/pr7818.ml | 51 +- testsuite/tests/typing-modules/pr7851.ml | 22 +- testsuite/tests/typing-modules/pr8810.ml | 8 +- testsuite/tests/typing-modules/pr9384.ml | 2 +- testsuite/tests/typing-modules/pr9695.ml | 4 +- testsuite/tests/typing-modules/printing.ml | 2 +- testsuite/tests/typing-modules/private.ml | 4 +- .../typing-modules/records_errors_test.ml | 100 +- testsuite/tests/typing-modules/recursive.ml | 5 +- .../struct_include_optimisation.ml | 65 + .../struct_include_optimisation.reference | 5 + .../typing-modules/unroll_private_abbrev.ml | 10 +- .../typing-modules/variants_errors_test.ml | 66 +- testsuite/tests/typing-modules/with_ghosts.ml | 6 +- testsuite/tests/typing-multifile/pr6372.ml | 14 +- testsuite/tests/typing-multifile/pr7325.ml | 22 +- testsuite/tests/typing-multifile/pr7563.ml | 2 +- testsuite/tests/typing-multifile/pr9218.ml | 6 +- .../pr3968_bad.compilers.reference | 18 +- .../tests/typing-objects-bugs/pr3968_bad.ml | 20 +- .../pr4018_bad.compilers.reference | 29 +- .../tests/typing-objects-bugs/pr4018_bad.ml | 20 +- .../pr4435_bad.compilers.reference | 2 +- .../tests/typing-objects-bugs/pr4435_bad.ml | 20 +- .../tests/typing-objects-bugs/pr4766_ok.ml | 8 +- .../tests/typing-objects-bugs/pr4824_ok.ml | 8 +- .../pr4824a_bad.compilers.reference | 2 +- .../tests/typing-objects-bugs/pr4824a_bad.ml | 20 +- .../tests/typing-objects-bugs/pr5156_ok.ml | 8 +- .../tests/typing-objects-bugs/pr7284_bad.ml | 20 +- .../tests/typing-objects-bugs/pr7293_ok.ml | 8 +- .../tests/typing-objects-bugs/woodyatt_ok.ml | 8 +- .../typing-objects-bugs/yamagata021012_ok.ml | 22 +- testsuite/tests/typing-objects/Exemples.ml | 68 +- testsuite/tests/typing-objects/Tests.ml | 196 +- .../tests/typing-objects/abstract_rows.ml | 6 +- testsuite/tests/typing-objects/class_2.ml | 15 + testsuite/tests/typing-objects/dummy.ml | 52 +- testsuite/tests/typing-objects/errors.ml | 41 +- testsuite/tests/typing-objects/field_kind.ml | 5 +- testsuite/tests/typing-objects/nongen.ml | 23 + .../tests/typing-objects/open_in_classes.ml | 2 +- testsuite/tests/typing-objects/pr11569.ml | 35 + testsuite/tests/typing-objects/pr5545.ml | 2 +- testsuite/tests/typing-objects/pr5619_bad.ml | 2 +- testsuite/tests/typing-objects/pr5858.ml | 4 +- testsuite/tests/typing-objects/pr6123_bad.ml | 6 +- testsuite/tests/typing-objects/pr6383.ml | 4 +- testsuite/tests/typing-objects/pr6907_bad.ml | 4 +- testsuite/tests/typing-objects/pr7711_ok.ml | 2 +- .../typing-objects/self_cannot_be_closed.ml | 8 +- .../self_cannot_escape_pr7865.ml | 2 +- .../tests/typing-objects/unbound-type-var.ml | 4 +- .../pervasives_leitmotiv.compilers.reference | 4 +- .../typing-ocamlc-i/pervasives_leitmotiv.ml | 17 +- .../pr4791.compilers.reference | 4 +- testsuite/tests/typing-ocamlc-i/pr4791.ml | 17 +- .../pr6323.compilers.reference | 2 +- testsuite/tests/typing-ocamlc-i/pr6323.ml | 17 +- .../pr7402.compilers.reference | 2 +- testsuite/tests/typing-ocamlc-i/pr7402.ml | 17 +- .../pr7620_bad.compilers.reference | 6 +- testsuite/tests/typing-ocamlc-i/pr7620_bad.ml | 20 +- testsuite/tests/typing-poly-bugs/pr5322_ok.ml | 8 +- testsuite/tests/typing-poly-bugs/pr5673_ok.ml | 8 +- testsuite/tests/typing-poly-bugs/pr6922_ok.ml | 10 +- testsuite/tests/typing-poly/error_messages.ml | 64 +- testsuite/tests/typing-poly/poly.ml | 334 +- testsuite/tests/typing-poly/pr7636.ml | 2 +- testsuite/tests/typing-poly/pr9603.ml | 11 +- .../pr3918c.compilers.reference | 4 +- .../typing-polyvariants-bugs-2/pr3918c.ml | 44 +- .../tests/typing-polyvariants-bugs/pr10664.ml | 11 + .../pr10664.reference | 1 + .../pr10664.reference~ | 1 + .../typing-polyvariants-bugs/pr10664a.ml | 159 + .../typing-polyvariants-bugs/pr4775_ok.ml | 8 +- .../typing-polyvariants-bugs/pr4933_ok.ml | 8 +- .../typing-polyvariants-bugs/pr5057_ok.ml | 8 +- .../pr5057a_bad.compilers.reference | 6 +- .../typing-polyvariants-bugs/pr5057a_bad.ml | 20 +- .../typing-polyvariants-bugs/pr7199_ok.ml | 8 +- .../typing-polyvariants-bugs/pr7817_bad.ml | 17 +- .../tests/typing-polyvariants-bugs/pr7824.ml | 3 +- .../tests/typing-polyvariants-bugs/pr8575.ml | 10 +- .../privrowsabate_ok.ml | 8 +- .../pr5026_bad.compilers.reference | 5 +- .../tests/typing-private-bugs/pr5026_bad.ml | 20 +- .../tests/typing-private-bugs/pr5469_ok.ml | 8 +- .../typing-private/invalid_private_row.ml | 14 +- .../private.compilers.principal.reference | 25 +- .../private.compilers.reference | 25 +- testsuite/tests/typing-private/private.ml | 7 +- testsuite/tests/typing-recmod/gpr1626.ml | 2 +- testsuite/tests/typing-recmod/pr6491.ml | 43 + testsuite/tests/typing-recmod/pr9494.ml | 7 +- .../typing-recmod/t01bad.compilers.reference | 3 +- testsuite/tests/typing-recmod/t01bad.ml | 20 +- .../typing-recmod/t02bad.compilers.reference | 6 +- testsuite/tests/typing-recmod/t02bad.ml | 20 +- testsuite/tests/typing-recmod/t03ok.ml | 8 +- .../typing-recmod/t04bad.compilers.reference | 6 +- testsuite/tests/typing-recmod/t04bad.ml | 20 +- .../typing-recmod/t05bad.compilers.reference | 8 +- testsuite/tests/typing-recmod/t05bad.ml | 20 +- testsuite/tests/typing-recmod/t06ok.ml | 8 +- .../typing-recmod/t07bad.compilers.reference | 6 +- testsuite/tests/typing-recmod/t07bad.ml | 20 +- .../typing-recmod/t08bad.compilers.reference | 9 +- testsuite/tests/typing-recmod/t08bad.ml | 20 +- .../typing-recmod/t09bad.compilers.reference | 9 +- testsuite/tests/typing-recmod/t09bad.ml | 20 +- testsuite/tests/typing-recmod/t10ok.ml | 8 +- .../typing-recmod/t11bad.compilers.reference | 6 +- testsuite/tests/typing-recmod/t11bad.ml | 20 +- .../typing-recmod/t12bad.compilers.reference | 6 +- testsuite/tests/typing-recmod/t12bad.ml | 20 +- testsuite/tests/typing-recmod/t13ok.ml | 8 +- .../typing-recmod/t14bad.compilers.reference | 5 +- testsuite/tests/typing-recmod/t14bad.ml | 20 +- .../typing-recmod/t15bad.compilers.reference | 3 +- testsuite/tests/typing-recmod/t15bad.ml | 20 +- testsuite/tests/typing-recmod/t16ok.ml | 8 +- testsuite/tests/typing-recmod/t17ok.ml | 8 +- testsuite/tests/typing-recmod/t18ok.ml | 8 +- testsuite/tests/typing-recmod/t20ok.ml | 8 +- testsuite/tests/typing-recmod/t21ok.ml | 8 +- testsuite/tests/typing-recmod/t22ok.ml | 8 +- testsuite/tests/typing-recordarg/recordarg.ml | 2 +- .../recordarg.ocaml.reference | 8 +- .../pr5343_bad.compilers.reference | 4 +- .../tests/typing-rectypes-bugs/pr5343_bad.ml | 20 +- .../pr6174_bad.compilers.reference | 4 +- .../tests/typing-rectypes-bugs/pr6174_bad.ml | 20 +- .../pr6870_bad.compilers.reference | 10 +- .../tests/typing-rectypes-bugs/pr6870_bad.ml | 20 +- .../b_bad.compilers.reference | 3 +- testsuite/tests/typing-safe-linking/b_bad.ml | 32 +- .../redefine_largefile.ml | 2 +- .../redefine_largefile_top.ml | 22 +- testsuite/tests/typing-short-paths/errors.ml | 109 +- testsuite/tests/typing-short-paths/gpr1223.ml | 6 +- .../pr5918.compilers.reference | 2 +- testsuite/tests/typing-short-paths/pr5918.ml | 11 +- testsuite/tests/typing-short-paths/pr6836.ml | 4 +- testsuite/tests/typing-short-paths/pr7543.ml | 4 +- .../short-paths.compilers.reference | 33 +- .../tests/typing-short-paths/short-paths.ml | 4 +- testsuite/tests/typing-signatures/els.ml | 2 +- .../typing-signatures/els.ocaml.reference | 8 +- .../typing-signatures/nondep_regression.ml | 17 + testsuite/tests/typing-signatures/pr6371.ml | 2 +- testsuite/tests/typing-signatures/pr6672.ml | 2 +- .../regression_tsubst_error.ml | 12 + .../typing-sigsubst/sig_local_aliases.ml | 14 +- ..._aliases_syntax_errors.compilers.reference | 10 +- .../sig_local_aliases_syntax_errors.ml | 8 +- testsuite/tests/typing-sigsubst/sigsubst.ml | 38 +- .../test_locations.compilers.reference | 12 +- .../tests/typing-sigsubst/test_locations.ml | 57 +- testsuite/tests/typing-typeparam/newtype.ml | 2 +- .../typing-typeparam/newtype.ocaml.reference | 8 +- testsuite/tests/typing-unboxed-types/test.ml | 4 +- .../tests/typing-unboxed-types/test_flat.ml | 52 +- .../typing-unboxed-types/test_no_flat.ml | 4 +- testsuite/tests/typing-unboxed/test.ml | 64 +- .../ambiguous_guarded_disjunction.ml | 50 +- .../tests/typing-warnings/application.ml | 65 +- testsuite/tests/typing-warnings/coercions.ml | 12 +- .../disable_warnings_classes.ml | 11 +- .../tests/typing-warnings/exhaustiveness.ml | 27 +- .../tests/typing-warnings/never_returns.ml | 22 +- .../tests/typing-warnings/open_warnings.ml | 44 +- testsuite/tests/typing-warnings/pr5892.ml | 5 +- testsuite/tests/typing-warnings/pr6587.ml | 10 +- testsuite/tests/typing-warnings/pr6872.ml | 11 +- testsuite/tests/typing-warnings/pr7085.ml | 7 +- testsuite/tests/typing-warnings/pr7115.ml | 8 +- .../pr7261.compilers.reference | 1 + testsuite/tests/typing-warnings/pr7261.ml | 11 +- testsuite/tests/typing-warnings/pr7297.ml | 5 +- testsuite/tests/typing-warnings/pr7553.ml | 7 +- testsuite/tests/typing-warnings/pr9244.ml | 7 +- testsuite/tests/typing-warnings/records.ml | 107 +- .../unused_functor_parameter.ml | 7 +- testsuite/tests/typing-warnings/unused_rec.ml | 5 +- .../tests/typing-warnings/unused_recmodule.ml | 3 +- .../tests/typing-warnings/unused_types.ml | 91 +- testsuite/tests/typing-warnings/warning16.ml | 6 +- .../tests/unboxed-primitive-args/test.ml | 31 +- .../tests/unwind/check-linker-version.sh | 2 +- testsuite/tests/unwind/driver.ml | 41 +- testsuite/tests/unwind/mylib.ml | 7 + testsuite/tests/unwind/mylib.mli | 2 + testsuite/tests/unwind/stack_walker.c | 61 +- testsuite/tests/unwind/unwind_test.reference | 10 + testsuite/tests/utils/edit_distance.ml | 8 +- testsuite/tests/utils/find_first_mono.ml | 73 + .../tests/utils/find_first_mono.reference | 54 + testsuite/tests/utils/magic_number.ml | 6 +- testsuite/tests/utils/overflow_detection.ml | 8 +- .../test_strongly_connected_components.ml | 10 +- .../deprecated_module.compilers.reference | 1 + testsuite/tests/warnings/deprecated_module.ml | 11 +- ...cated_module_assigment.compilers.reference | 10 + .../warnings/deprecated_module_assigment.ml | 11 +- .../deprecated_module_use.compilers.reference | 4 + .../tests/warnings/deprecated_module_use.ml | 38 +- .../tests/warnings/deprecated_mutable.ml | 11 +- .../warnings/deprecated_warning_specs.ml | 2 +- testsuite/tests/warnings/marshall_for_w53.ml | 4 + testsuite/tests/warnings/mnemonics.mll | 15 +- .../tests/warnings/w01.compilers.reference | 5 + testsuite/tests/warnings/w01.ml | 20 +- .../tests/warnings/w03.compilers.reference | 5 +- testsuite/tests/warnings/w03.ml | 20 +- testsuite/tests/warnings/w04.ml | 20 +- .../warnings/w04_failure.compilers.reference | 2 + testsuite/tests/warnings/w04_failure.ml | 20 +- .../tests/warnings/w06.compilers.reference | 1 + testsuite/tests/warnings/w06.ml | 20 +- testsuite/tests/warnings/w26_alias.ml | 19 + .../tests/warnings/w32.compilers.reference | 17 + testsuite/tests/warnings/w32.ml | 26 +- .../tests/warnings/w32b.compilers.reference | 1 + testsuite/tests/warnings/w32b.ml | 20 +- .../tests/warnings/w33.compilers.reference | 2 + testsuite/tests/warnings/w33.ml | 20 +- testsuite/tests/warnings/w44.ml | 65 + .../tests/warnings/w45.compilers.reference | 2 + testsuite/tests/warnings/w45.ml | 20 +- .../warnings/w47_inline.compilers.reference | 8 + testsuite/tests/warnings/w47_inline.ml | 20 +- .../w47_ppwarning.compilers.reference | 22 + testsuite/tests/warnings/w47_ppwarning.ml | 19 + .../tests/warnings/w50.compilers.reference | 1 + testsuite/tests/warnings/w50.ml | 20 +- testsuite/tests/warnings/w51.ml | 8 +- testsuite/tests/warnings/w51_bis.ml | 20 +- testsuite/tests/warnings/w52.ml | 19 +- .../tests/warnings/w53.compilers.reference | 948 +- testsuite/tests/warnings/w53.ml | 530 +- testsuite/tests/warnings/w53_marshalled.ml | 17 + .../tests/warnings/w54.compilers.reference | 3 + testsuite/tests/warnings/w54.ml | 20 +- .../tests/warnings/w55.flambda.reference | 2 + testsuite/tests/warnings/w55.ml | 51 +- testsuite/tests/warnings/w55.native.reference | 5 + testsuite/tests/warnings/w58.ml | 35 +- .../tests/warnings/w59.flambda.reference | 24 +- testsuite/tests/warnings/w59.ml | 53 +- testsuite/tests/warnings/w60.ml | 20 +- .../tests/warnings/w68.compilers.reference | 11 - testsuite/tests/warnings/w68.ml | 34 - testsuite/tests/warnings/w68.reference | 2 - .../ephe_infix.ml} | 0 testsuite/tests/weak-ephe-final/ephetest.ml | 156 + .../ephetest.reference} | 0 testsuite/tests/weak-ephe-final/ephetest2.ml | 146 + .../ephetest2.reference | 0 testsuite/tests/weak-ephe-final/ephetest3.ml | 122 + .../ephetest3.reference | 0 .../tests/weak-ephe-final/ephetest_par.ml | 165 + .../ephetest_par.reference} | 0 testsuite/tests/weak-ephe-final/finaliser.ml | 68 + .../tests/weak-ephe-final/finaliser.reference | 0 testsuite/tests/weak-ephe-final/finaliser2.ml | 51 + .../weak-ephe-final/finaliser2.reference | 5 + .../weak-ephe-final/finaliser_handover.ml | 40 + .../finaliser_handover.reference | 1 + testsuite/tests/weak-ephe-final/pr12001.ml | 15 + .../tests/weak-ephe-final/pr12001.reference | 2 + .../tests/weak-ephe-final/weaklifetime.ml | 78 + .../weak-ephe-final/weaklifetime.reference | 0 .../tests/weak-ephe-final/weaklifetime2.ml | 59 + .../weaklifetime2.reference | 0 .../tests/weak-ephe-final/weaklifetime_par.ml | 116 + .../weaklifetime_par.reference | 1 + testsuite/tests/weak-ephe-final/weaktest.ml | 80 + .../weaktest.reference | 0 .../weak-ephe-final/weaktest_par_load.ml | 39 + testsuite/tests/win-unicode/mltest.ml | 9 +- testsuite/tools/Makefile | 99 - testsuite/tools/asmgen_amd64.S | 34 - testsuite/tools/asmgen_i386.S | 70 - testsuite/tools/asmgen_i386nt.asm | 67 - testsuite/tools/asmgen_power.S | 149 +- testsuite/tools/codegen_main.mli | 16 + testsuite/tools/expect.ml | 379 + testsuite/tools/expect.mli | 25 + testsuite/tools/expect_test.ml | 373 - testsuite/tools/lexcmm.mll | 4 +- testsuite/tools/parsecmm.mly | 22 +- tools/.depend | 203 - tools/Makefile | 352 - tools/autogen | 15 +- tools/bump-magic-numbers | 62 + tools/caml_tex.ml | 787 - tools/check-parser-uptodate-or-warn.sh | 2 +- tools/check-symbol-names | 15 +- tools/check-typo | 18 +- tools/check-typo-since | 2 +- tools/ci/actions/check-changes-modified.sh | 16 +- tools/ci/actions/check-configure.sh | 9 + tools/ci/actions/check-manual-modified.sh | 3 +- tools/ci/actions/check-no-ignored-files.sh | 19 + tools/ci/actions/check-parsetree-modified.sh | 54 + tools/ci/actions/deepen-fetch.sh | 34 +- tools/ci/actions/runner.sh | 68 +- tools/ci/appveyor/appveyor_build.cmd | 21 +- tools/ci/appveyor/appveyor_build.sh | 81 +- .../bootstrap/remove-sinh-primitive.patch | 13 - tools/ci/inria/bootstrap/script | 18 +- tools/ci/inria/light | 8 +- tools/ci/inria/main | 49 +- tools/ci/inria/other-configs/script | 25 +- tools/ci/inria/sanitizers/Jenkinsfile | 2 +- tools/ci/inria/sanitizers/script | 55 +- tools/cmpbyt.ml | 41 +- tools/cmpbyt.mli | 16 + tools/cvt_emit.mli | 16 + tools/cvt_emit.mll | 38 +- tools/dumpobj.ml | 178 +- tools/dumpobj.mli | 16 + tools/eqparsetree.ml | 2 +- tools/eventlog_metadata.in | 216 - tools/gdb-macros | 447 +- tools/gdb_ocamlrun.py | 168 + tools/gen_sizeclasses.ml | 97 + tools/lintapidiff.ml | 54 +- tools/lintapidiff.mli | 17 + tools/list-globals | 24 + tools/make_opcodes.mli | 16 + tools/msvs-promote-path | 46 +- tools/objinfo.ml | 186 +- tools/objinfo.mli | 16 + tools/ocamlcmt.ml | 16 +- tools/ocamlcmt.mli | 16 + tools/ocamlcp.ml | 91 +- tools/ocamlcp.mli | 16 + tools/ocamlcp_common.ml | 120 + tools/ocamlcp_common.mli | 55 + tools/ocamldep.mli | 16 + tools/ocamlmklib.ml | 23 +- tools/ocamlmklib.mli | 16 + tools/ocamlmktop.ml | 14 +- tools/ocamlmktop.mli | 16 + tools/ocamloptp.ml | 92 +- tools/ocamloptp.mli | 16 + tools/ocamlprof.ml | 84 +- tools/ocamlprof.mli | 16 + tools/ocamlsize | 25 +- tools/ocamltex.ml | 789 + tools/ocamltex.mli | 17 + tools/opnames.mli | 16 + tools/primreq.ml | 9 +- tools/primreq.mli | 16 + tools/profiling.ml | 4 +- tools/profiling.mli | 4 +- tools/stripdebug.ml | 88 +- tools/stripdebug.mli | 16 + tools/sync_stdlib_docs | 22 +- tools/translate-all-tests | 1412 + toplevel/byte/topeval.ml | 73 +- toplevel/byte/topmain.ml | 14 +- toplevel/dune | 3 - toplevel/expunge.ml | 66 +- toplevel/expunge.mli | 19 + toplevel/genprintval.ml | 10 +- toplevel/native/topeval.ml | 36 +- toplevel/native/tophooks.ml | 35 +- toplevel/native/topmain.ml | 16 +- toplevel/topcommon.ml | 135 +- toplevel/topcommon.mli | 14 +- toplevel/topdirs.ml | 294 +- toplevel/topdirs.mli | 4 - toplevel/toploop.ml | 292 +- toplevel/toploop.mli | 10 +- toplevel/topprinters.ml | 37 + toplevel/topprinters.mli | 23 + toplevel/topstart.mli | 19 + typing/annot.mli | 3 +- typing/btype.ml | 11 +- typing/btype.mli | 5 + typing/cmt2annot.ml | 10 +- typing/cmt2annot.mli | 22 + typing/ctype.ml | 1584 +- typing/ctype.mli | 122 +- typing/datarepr.ml | 8 +- typing/env.ml | 463 +- typing/env.mli | 46 +- typing/envaux.ml | 6 +- typing/ident.ml | 28 + typing/ident.mli | 32 +- typing/includeclass.ml | 12 +- typing/includecore.ml | 128 +- typing/includecore.mli | 10 +- typing/includemod.ml | 177 +- typing/includemod.mli | 11 +- typing/includemod_errorprinter.ml | 112 +- typing/mtype.ml | 16 +- typing/oprint.ml | 141 +- typing/oprint.mli | 1 + typing/outcometree.mli | 20 +- typing/parmatch.ml | 262 +- typing/parmatch.mli | 57 +- typing/path.ml | 93 +- typing/path.mli | 48 +- typing/patterns.ml | 18 +- typing/patterns.mli | 4 +- typing/persistent_env.ml | 105 +- typing/persistent_env.mli | 14 +- typing/predef.ml | 16 +- typing/predef.mli | 2 +- typing/primitive.ml | 42 +- typing/primitive.mli | 2 +- typing/printpat.ml | 38 +- typing/printpat.mli | 8 +- typing/printtyp.ml | 935 +- typing/printtyp.mli | 24 +- typing/printtyped.ml | 180 +- typing/printtyped.mli | 10 +- typing/rec_check.ml | 1260 - typing/rec_check.mli | 19 - typing/shape.ml | 366 +- typing/shape.mli | 100 +- typing/shape_reduce.ml | 342 + typing/shape_reduce.mli | 62 + typing/signature_group.ml | 8 +- typing/signature_group.mli | 4 +- typing/stypes.ml | 36 +- typing/stypes.mli | 13 +- typing/subst.ml | 94 +- typing/subst.mli | 5 - typing/tast_iterator.ml | 384 +- typing/tast_iterator.mli | 4 + typing/tast_mapper.ml | 353 +- typing/tast_mapper.mli | 3 + typing/typeclass.ml | 569 +- typing/typeclass.mli | 16 +- typing/typecore.ml | 4930 +-- typing/typecore.mli | 25 +- typing/typedecl.ml | 1133 +- typing/typedecl.mli | 22 +- typing/typedecl_immediacy.ml | 7 +- typing/typedecl_separability.ml | 2 +- typing/typedecl_unboxed.ml | 1 - typing/typedecl_variance.ml | 247 +- typing/typedecl_variance.mli | 30 +- typing/typedtree.ml | 103 +- typing/typedtree.mli | 135 +- typing/typemod.ml | 782 +- typing/typemod.mli | 20 +- typing/typeopt.ml | 10 +- typing/typeopt.mli | 1 - typing/types.ml | 68 +- typing/types.mli | 18 +- typing/typetexp.ml | 813 +- typing/typetexp.mli | 69 +- typing/untypeast.ml | 131 +- typing/value_rec_check.ml | 1416 + typing/value_rec_check.mli | 20 + typing/value_rec_types.mli | 27 + utils/HACKING.adoc | 21 +- utils/Makefile | 119 - utils/binutils.ml | 2 +- utils/build_path_prefix_map.ml | 31 +- utils/build_path_prefix_map.mli | 18 +- utils/ccomp.ml | 37 +- utils/ccomp.mli | 2 +- utils/clflags.ml | 27 +- utils/clflags.mli | 8 +- utils/compression.ml | 31 + utils/compression.mli | 34 + utils/config.common.ml.in | 159 + utils/config.fixed.ml | 73 + utils/config.generated.ml.in | 95 + utils/config.mli | 44 +- utils/config.mlp | 246 - utils/consistbl.ml | 2 - utils/consistbl.mli | 5 - utils/diffing.ml | 10 +- utils/diffing.mli | 2 +- utils/diffing_with_keys.ml | 2 +- utils/domainstate.ml.c | 4 + utils/domainstate.mli.c | 2 + utils/dune | 13 +- utils/load_path.ml | 193 +- utils/load_path.mli | 89 +- utils/local_store.mli | 4 +- utils/misc.ml | 397 +- utils/misc.mli | 353 +- utils/targetint.mli | 3 +- utils/warnings.ml | 324 +- utils/warnings.mli | 29 +- yacc/Makefile | 61 - yacc/closure.c | 64 +- yacc/defs.h | 76 +- yacc/error.c | 78 +- yacc/lalr.c | 144 +- yacc/lr0.c | 122 +- yacc/main.c | 30 +- yacc/mkpar.c | 56 +- yacc/output.c | 114 +- yacc/reader.c | 456 +- yacc/skeleton.c | 6 +- yacc/symtab.c | 14 +- yacc/verbose.c | 58 +- yacc/warshall.c | 26 +- yacc/wstr.c | 8 +- 3237 files changed, 168241 insertions(+), 96146 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 asmcomp/CSE.mli create mode 100644 asmcomp/amd64/arch.mli create mode 100644 asmcomp/amd64/stackframe.ml delete mode 100644 asmcomp/arm/CSE.ml delete mode 100644 asmcomp/arm/NOTES.md delete mode 100644 asmcomp/arm/arch.ml delete mode 100644 asmcomp/arm/emit.mlp delete mode 100644 asmcomp/arm/proc.ml delete mode 100644 asmcomp/arm/reload.ml delete mode 100644 asmcomp/arm/scheduling.ml delete mode 100644 asmcomp/arm/selection.ml create mode 100644 asmcomp/arm64/arch.mli create mode 100644 asmcomp/arm64/stackframe.ml rename asmcomp/{branch_relaxation_intf.ml => branch_relaxation_intf.mli} (100%) delete mode 100644 asmcomp/i386/CSE.ml delete mode 100644 asmcomp/i386/NOTES.md delete mode 100644 asmcomp/i386/arch.ml delete mode 100644 asmcomp/i386/emit.mlp delete mode 100644 asmcomp/i386/proc.ml delete mode 100644 asmcomp/i386/reload.ml delete mode 100644 asmcomp/i386/scheduling.ml delete mode 100644 asmcomp/i386/selection.ml create mode 100644 asmcomp/power/arch.mli create mode 100644 asmcomp/power/stackframe.ml create mode 100644 asmcomp/riscv/arch.mli create mode 100644 asmcomp/riscv/stackframe.ml create mode 100644 asmcomp/s390x/arch.mli create mode 100644 asmcomp/s390x/stackframe.ml create mode 100644 asmcomp/stackframe.mli create mode 100644 asmcomp/stackframegen.ml create mode 100644 asmcomp/stackframegen.mli create mode 100644 asmcomp/thread_sanitizer.ml create mode 100644 asmcomp/thread_sanitizer.mli create mode 100644 build-aux/ax_check_compile_flag.m4 create mode 100644 compilerlibs/META.in delete mode 100644 compilerlibs/Makefile.compilerlibs delete mode 100644 debugger/.depend delete mode 100644 debugger/Makefile create mode 100644 debugger/main.mli create mode 100644 debugger/ocamldebug_entry.mli delete mode 100644 debugger/pattern_matching.ml delete mode 100644 debugger/pattern_matching.mli create mode 100644 driver/main.mli create mode 100644 driver/optmain.mli create mode 100644 lambda/value_rec_compiler.ml create mode 100644 lambda/value_rec_compiler.mli delete mode 100644 lex/.depend delete mode 100644 lex/Makefile create mode 100644 lex/main.mli delete mode 100644 manual/src/.gitignore delete mode 100644 manual/src/cmds/.gitignore delete mode 100644 manual/src/cmds/instrumented-runtime.etex create mode 100644 manual/src/cmds/runtime-tracing.etex create mode 100644 manual/src/cmds/tsan.etex delete mode 100644 manual/src/html_processing/.gitignore delete mode 100644 manual/src/htmlman/.gitignore delete mode 100644 manual/src/infoman/.gitignore delete mode 100644 manual/src/library/.gitignore create mode 100644 manual/src/library/libruntime_events.etex delete mode 100644 manual/src/refman/.gitignore create mode 100644 manual/src/refman/extensions/effects.etex delete mode 100644 manual/src/texstuff/.gitignore delete mode 100644 manual/src/textman/.gitignore delete mode 100644 manual/src/tutorials/.gitignore create mode 100644 manual/src/tutorials/memorymodel.etex create mode 100644 manual/src/tutorials/parallelism.etex delete mode 100644 manual/tests/.gitignore delete mode 100644 manual/tools/.gitignore delete mode 100644 ocamldoc/.depend create mode 100644 ocamldoc/META.in delete mode 100644 ocamldoc/Makefile delete mode 100644 ocamldoc/Makefile.best_ocamldoc delete mode 100644 ocamldoc/generators/odoc_literate.ml delete mode 100644 ocamldoc/generators/odoc_todo.ml create mode 100644 ocamldoc/odoc.mli create mode 100644 ocamldoc/odoc_class.mli delete mode 100644 ocamldoc/odoc_control.ml create mode 100644 ocamldoc/odoc_dep.mli create mode 100644 ocamldoc/odoc_dot.mli create mode 100644 ocamldoc/odoc_exception.mli create mode 100644 ocamldoc/odoc_extension.mli create mode 100644 ocamldoc/odoc_html.mli delete mode 100644 ocamldoc/odoc_inherit.ml create mode 100644 ocamldoc/odoc_latex.mli create mode 100644 ocamldoc/odoc_latex_style.mli create mode 100644 ocamldoc/odoc_lexer.mli create mode 100644 ocamldoc/odoc_man.mli create mode 100644 ocamldoc/odoc_messages.mli create mode 100644 ocamldoc/odoc_module.mli create mode 100644 ocamldoc/odoc_ocamlhtml.mli create mode 100644 ocamldoc/odoc_parameter.mli create mode 100644 ocamldoc/odoc_scan.mli create mode 100644 ocamldoc/odoc_see_lexer.mli create mode 100644 ocamldoc/odoc_test.mli create mode 100644 ocamldoc/odoc_texi.mli create mode 100644 ocamldoc/odoc_text_lexer.mli create mode 100644 ocamldoc/odoc_to_text.mli create mode 100644 ocamldoc/odoc_type.mli create mode 100644 ocamldoc/odoc_value.mli delete mode 100644 ocamltest/.depend delete mode 100644 ocamltest/Makefile create mode 100644 ocamltest/OCAMLTEST.org delete mode 100644 ocamltest/README create mode 100644 ocamltest/README.md delete mode 100644 ocamltest/ocamltest.org create mode 100644 ocamltest/translate.ml create mode 100644 ocamltest/translate.mli delete mode 100644 otherlibs/bigarray/.depend delete mode 100644 otherlibs/bigarray/Makefile delete mode 100644 otherlibs/bigarray/bigarray.ml delete mode 100644 otherlibs/bigarray/bigarray.mli create mode 100644 otherlibs/dynlink/META.in delete mode 100644 otherlibs/dynlink/extract_crc.ml create mode 100644 otherlibs/runtime_events/.depend create mode 100644 otherlibs/runtime_events/META.in create mode 100644 otherlibs/runtime_events/Makefile create mode 100644 otherlibs/runtime_events/caml/runtime_events_consumer.h create mode 100644 otherlibs/runtime_events/runtime_events.ml create mode 100644 otherlibs/runtime_events/runtime_events.mli create mode 100644 otherlibs/runtime_events/runtime_events_consumer.c create mode 100644 otherlibs/str/META.in create mode 100644 otherlibs/systhreads/META.in create mode 100644 otherlibs/systhreads/caml/threads.h delete mode 100644 otherlibs/systhreads/condition.ml delete mode 100644 otherlibs/systhreads/condition.mli delete mode 100644 otherlibs/systhreads/mutex.ml delete mode 100644 otherlibs/systhreads/mutex.mli create mode 100644 otherlibs/systhreads/st_pthreads.h delete mode 100644 otherlibs/systhreads/threadUnix.ml delete mode 100644 otherlibs/systhreads/threadUnix.mli delete mode 100644 otherlibs/systhreads/threads.h create mode 100644 otherlibs/unix/META.in delete mode 100644 otherlibs/unix/accept.c create mode 100644 otherlibs/unix/accept_unix.c create mode 100644 otherlibs/unix/accept_win32.c delete mode 100644 otherlibs/unix/bind.c create mode 100644 otherlibs/unix/bind_unix.c create mode 100644 otherlibs/unix/bind_win32.c create mode 100644 otherlibs/unix/caml/socketaddr.h create mode 100644 otherlibs/unix/caml/unixsupport.h delete mode 100644 otherlibs/unix/channels.c create mode 100644 otherlibs/unix/channels_unix.c create mode 100644 otherlibs/unix/channels_win32.c delete mode 100644 otherlibs/unix/close.c create mode 100644 otherlibs/unix/close_on.c create mode 100644 otherlibs/unix/close_unix.c create mode 100644 otherlibs/unix/close_win32.c delete mode 100644 otherlibs/unix/connect.c create mode 100644 otherlibs/unix/connect_unix.c create mode 100644 otherlibs/unix/connect_win32.c create mode 100644 otherlibs/unix/createprocess.c delete mode 100644 otherlibs/unix/dup.c create mode 100644 otherlibs/unix/dup_unix.c create mode 100644 otherlibs/unix/dup_win32.c delete mode 100644 otherlibs/unix/envir.c create mode 100644 otherlibs/unix/envir_unix.c create mode 100644 otherlibs/unix/envir_win32.c delete mode 100644 otherlibs/unix/errmsg.c create mode 100644 otherlibs/unix/errmsg_unix.c create mode 100644 otherlibs/unix/errmsg_win32.c delete mode 100644 otherlibs/unix/getpeername.c create mode 100644 otherlibs/unix/getpeername_unix.c create mode 100644 otherlibs/unix/getpeername_win32.c delete mode 100644 otherlibs/unix/getpid.c create mode 100644 otherlibs/unix/getpid_unix.c create mode 100644 otherlibs/unix/getpid_win32.c delete mode 100644 otherlibs/unix/getsockname.c create mode 100644 otherlibs/unix/getsockname_unix.c create mode 100644 otherlibs/unix/getsockname_win32.c delete mode 100644 otherlibs/unix/gettimeofday.c create mode 100644 otherlibs/unix/gettimeofday_unix.c create mode 100644 otherlibs/unix/gettimeofday_win32.c delete mode 100644 otherlibs/unix/isatty.c create mode 100644 otherlibs/unix/isatty_unix.c create mode 100644 otherlibs/unix/isatty_win32.c delete mode 100644 otherlibs/unix/link.c create mode 100644 otherlibs/unix/link_unix.c create mode 100644 otherlibs/unix/link_win32.c delete mode 100644 otherlibs/unix/listen.c create mode 100644 otherlibs/unix/listen_unix.c create mode 100644 otherlibs/unix/listen_win32.c delete mode 100644 otherlibs/unix/lockf.c create mode 100644 otherlibs/unix/lockf_unix.c create mode 100644 otherlibs/unix/lockf_win32.c delete mode 100644 otherlibs/unix/lseek.c create mode 100644 otherlibs/unix/lseek_unix.c create mode 100644 otherlibs/unix/lseek_win32.c delete mode 100644 otherlibs/unix/mmap.c create mode 100644 otherlibs/unix/mmap_unix.c create mode 100644 otherlibs/unix/mmap_win32.c create mode 100644 otherlibs/unix/nonblock.c delete mode 100644 otherlibs/unix/open.c create mode 100644 otherlibs/unix/open_unix.c create mode 100644 otherlibs/unix/open_win32.c delete mode 100644 otherlibs/unix/pipe.c create mode 100644 otherlibs/unix/pipe_unix.c create mode 100644 otherlibs/unix/pipe_win32.c delete mode 100644 otherlibs/unix/read.c create mode 100644 otherlibs/unix/read_unix.c create mode 100644 otherlibs/unix/read_win32.c delete mode 100644 otherlibs/unix/readlink.c create mode 100644 otherlibs/unix/readlink_unix.c create mode 100644 otherlibs/unix/readlink_win32.c delete mode 100644 otherlibs/unix/realpath.c create mode 100644 otherlibs/unix/realpath_unix.c create mode 100644 otherlibs/unix/realpath_win32.c delete mode 100644 otherlibs/unix/rename.c create mode 100644 otherlibs/unix/rename_unix.c create mode 100644 otherlibs/unix/rename_win32.c delete mode 100644 otherlibs/unix/select.c create mode 100644 otherlibs/unix/select_unix.c create mode 100644 otherlibs/unix/select_win32.c delete mode 100644 otherlibs/unix/sendrecv.c create mode 100644 otherlibs/unix/sendrecv_unix.c create mode 100644 otherlibs/unix/sendrecv_win32.c delete mode 100644 otherlibs/unix/shutdown.c create mode 100644 otherlibs/unix/shutdown_unix.c create mode 100644 otherlibs/unix/shutdown_win32.c delete mode 100644 otherlibs/unix/sleep.c create mode 100644 otherlibs/unix/sleep_unix.c create mode 100644 otherlibs/unix/sleep_win32.c delete mode 100644 otherlibs/unix/socket.c create mode 100644 otherlibs/unix/socket_unix.c create mode 100644 otherlibs/unix/socket_win32.c delete mode 100644 otherlibs/unix/socketaddr.h delete mode 100644 otherlibs/unix/socketpair.c create mode 100644 otherlibs/unix/socketpair_unix.c create mode 100644 otherlibs/unix/socketpair_win32.c delete mode 100644 otherlibs/unix/sockopt.c create mode 100644 otherlibs/unix/sockopt_unix.c create mode 100644 otherlibs/unix/sockopt_win32.c create mode 100644 otherlibs/unix/startup.c delete mode 100644 otherlibs/unix/stat.c create mode 100644 otherlibs/unix/stat_unix.c create mode 100644 otherlibs/unix/stat_win32.c delete mode 100644 otherlibs/unix/symlink.c create mode 100644 otherlibs/unix/symlink_unix.c create mode 100644 otherlibs/unix/symlink_win32.c create mode 100644 otherlibs/unix/system.c delete mode 100644 otherlibs/unix/times.c create mode 100644 otherlibs/unix/times_unix.c create mode 100644 otherlibs/unix/times_win32.c delete mode 100644 otherlibs/unix/truncate.c create mode 100644 otherlibs/unix/truncate_unix.c create mode 100644 otherlibs/unix/truncate_win32.c delete mode 100644 otherlibs/unix/unix.ml create mode 100644 otherlibs/unix/unix_unix.ml create mode 100644 otherlibs/unix/unix_win32.ml delete mode 100644 otherlibs/unix/unixsupport.c delete mode 100644 otherlibs/unix/unixsupport.h create mode 100644 otherlibs/unix/unixsupport_unix.c create mode 100644 otherlibs/unix/unixsupport_win32.c delete mode 100644 otherlibs/unix/utimes.c create mode 100644 otherlibs/unix/utimes_unix.c create mode 100644 otherlibs/unix/utimes_win32.c create mode 100644 otherlibs/unix/windbug.c create mode 100644 otherlibs/unix/windbug.h create mode 100644 otherlibs/unix/windir.c create mode 100644 otherlibs/unix/winlist.c create mode 100644 otherlibs/unix/winlist.h create mode 100644 otherlibs/unix/winwait.c create mode 100644 otherlibs/unix/winworker.c create mode 100644 otherlibs/unix/winworker.h delete mode 100644 otherlibs/unix/write.c create mode 100644 otherlibs/unix/write_unix.c create mode 100644 otherlibs/unix/write_win32.c delete mode 100644 otherlibs/win32unix/.depend delete mode 100644 otherlibs/win32unix/Makefile delete mode 100644 otherlibs/win32unix/accept.c delete mode 100644 otherlibs/win32unix/bind.c delete mode 100644 otherlibs/win32unix/channels.c delete mode 100644 otherlibs/win32unix/close.c delete mode 100644 otherlibs/win32unix/close_on.c delete mode 100644 otherlibs/win32unix/connect.c delete mode 100644 otherlibs/win32unix/createprocess.c delete mode 100644 otherlibs/win32unix/dup.c delete mode 100644 otherlibs/win32unix/envir.c delete mode 100644 otherlibs/win32unix/errmsg.c delete mode 100644 otherlibs/win32unix/getpeername.c delete mode 100644 otherlibs/win32unix/getpid.c delete mode 100644 otherlibs/win32unix/getsockname.c delete mode 100644 otherlibs/win32unix/gettimeofday.c delete mode 100644 otherlibs/win32unix/isatty.c delete mode 100644 otherlibs/win32unix/link.c delete mode 100644 otherlibs/win32unix/listen.c delete mode 100644 otherlibs/win32unix/lockf.c delete mode 100644 otherlibs/win32unix/lseek.c delete mode 100644 otherlibs/win32unix/mmap.c delete mode 100644 otherlibs/win32unix/nonblock.c delete mode 100644 otherlibs/win32unix/open.c delete mode 100644 otherlibs/win32unix/pipe.c delete mode 100644 otherlibs/win32unix/read.c delete mode 100644 otherlibs/win32unix/readlink.c delete mode 100644 otherlibs/win32unix/realpath.c delete mode 100644 otherlibs/win32unix/rename.c delete mode 100644 otherlibs/win32unix/select.c delete mode 100644 otherlibs/win32unix/sendrecv.c delete mode 100644 otherlibs/win32unix/shutdown.c delete mode 100644 otherlibs/win32unix/sleep.c delete mode 100644 otherlibs/win32unix/socket.c delete mode 100644 otherlibs/win32unix/socketpair.c delete mode 100644 otherlibs/win32unix/sockopt.c delete mode 100644 otherlibs/win32unix/startup.c delete mode 100644 otherlibs/win32unix/stat.c delete mode 100644 otherlibs/win32unix/symlink.c delete mode 100644 otherlibs/win32unix/system.c delete mode 100644 otherlibs/win32unix/times.c delete mode 100644 otherlibs/win32unix/truncate.c delete mode 100644 otherlibs/win32unix/unix.ml delete mode 100644 otherlibs/win32unix/unixsupport.c delete mode 100644 otherlibs/win32unix/unixsupport.h delete mode 100644 otherlibs/win32unix/utimes.c delete mode 100644 otherlibs/win32unix/windbug.c delete mode 100644 otherlibs/win32unix/windbug.h delete mode 100644 otherlibs/win32unix/windir.c delete mode 100644 otherlibs/win32unix/winlist.c delete mode 100644 otherlibs/win32unix/winlist.h delete mode 100644 otherlibs/win32unix/winwait.c delete mode 100644 otherlibs/win32unix/winworker.c delete mode 100644 otherlibs/win32unix/winworker.h delete mode 100644 otherlibs/win32unix/write.c create mode 100644 parsing/unit_info.ml create mode 100644 parsing/unit_info.mli create mode 100644 runtime/HACKING.adoc delete mode 100644 runtime/Makefile create mode 100644 runtime/addrmap.c delete mode 100644 runtime/arm.S create mode 100644 runtime/blake2.c create mode 100644 runtime/caml/addrmap.h create mode 100644 runtime/caml/atomic_refcount.h create mode 100644 runtime/caml/blake2.h create mode 100644 runtime/caml/camlatomic.h delete mode 100644 runtime/caml/compact.h delete mode 100644 runtime/caml/compatibility.h delete mode 100644 runtime/caml/eventlog.h delete mode 100644 runtime/caml/exec.h create mode 100644 runtime/caml/exec.h.in create mode 100644 runtime/caml/fiber.h create mode 100644 runtime/caml/frame_descriptors.h delete mode 100644 runtime/caml/freelist.h create mode 100644 runtime/caml/gc_stats.h create mode 100644 runtime/caml/lf_skiplist.h create mode 100644 runtime/caml/platform.h create mode 100644 runtime/caml/runtime_events.h create mode 100644 runtime/caml/shared_heap.h delete mode 100644 runtime/caml/signals_machdep.h create mode 100644 runtime/caml/sizeclasses.h delete mode 100644 runtime/caml/stacks.h create mode 100644 runtime/caml/sync.h create mode 100644 runtime/caml/tsan.h delete mode 100644 runtime/caml/ui.h delete mode 100644 runtime/compact.c delete mode 100644 runtime/eventlog.c create mode 100644 runtime/fiber.c create mode 100644 runtime/frame_descriptors.c delete mode 100644 runtime/freelist.c create mode 100644 runtime/gc_stats.c delete mode 100644 runtime/gen_domain_state32_inc.awk delete mode 100644 runtime/gen_domain_state64_inc.awk create mode 100755 runtime/gen_primsc.sh delete mode 100644 runtime/i386.S delete mode 100644 runtime/i386nt.asm create mode 100644 runtime/lf_skiplist.c create mode 100644 runtime/platform.c create mode 100644 runtime/prng.c create mode 100644 runtime/roots.c delete mode 100644 runtime/roots_byt.c delete mode 100644 runtime/roots_nat.c create mode 100644 runtime/runtime_events.c create mode 100644 runtime/shared_heap.c delete mode 100644 runtime/signals_byt.c delete mode 100644 runtime/signals_osdep.h delete mode 100644 runtime/stacks.c create mode 100644 runtime/sync.c create mode 100644 runtime/sync_posix.h create mode 100644 runtime/tsan.c create mode 100644 runtime/zstd.c create mode 100644 stdlib/META.in delete mode 100644 stdlib/camlinternalAtomic.ml delete mode 100644 stdlib/camlinternalAtomic.mli create mode 100644 stdlib/condition.ml create mode 100644 stdlib/condition.mli create mode 100644 stdlib/domain.ml create mode 100644 stdlib/domain.mli create mode 100644 stdlib/dynarray.ml create mode 100644 stdlib/dynarray.mli create mode 100644 stdlib/effect.ml create mode 100644 stdlib/effect.mli delete mode 100644 stdlib/genlex.ml delete mode 100644 stdlib/genlex.mli create mode 100644 stdlib/mutex.ml create mode 100644 stdlib/mutex.mli delete mode 100644 stdlib/pervasives.ml rename {otherlibs/systhreads => stdlib}/semaphore.ml (100%) rename {otherlibs/systhreads => stdlib}/semaphore.mli (100%) create mode 100644 stdlib/std_exit.mli delete mode 100644 stdlib/stream.ml delete mode 100644 stdlib/stream.mli create mode 100644 stdlib/type.ml create mode 100644 stdlib/type.mli delete mode 100644 testsuite/lib/Makefile create mode 100644 testsuite/lib/lib.mli create mode 100644 testsuite/tests/afl-instrumentation/afl-fuzz-test.ml create mode 100755 testsuite/tests/afl-instrumentation/afl-fuzz-test.run create mode 100644 testsuite/tests/afl-instrumentation/afl-showmap-test.ml create mode 100755 testsuite/tests/afl-instrumentation/afl-showmap-test.run delete mode 100644 testsuite/tests/afl-instrumentation/afltest.ml delete mode 100755 testsuite/tests/afl-instrumentation/afltest.run create mode 100644 testsuite/tests/afl-instrumentation/has-afl-fuzz.sh create mode 100644 testsuite/tests/afl-instrumentation/readline.ml delete mode 100644 testsuite/tests/asmcomp/is_in_static_data.c delete mode 100644 testsuite/tests/asmcomp/is_static.ml delete mode 100644 testsuite/tests/asmcomp/is_static_flambda.ml delete mode 100644 testsuite/tests/asmcomp/is_static_flambda_dep.ml create mode 100644 testsuite/tests/asmcomp/prevent_fma.ml create mode 100644 testsuite/tests/asmcomp/run.ml create mode 100644 testsuite/tests/asmcomp/select_addr.ml create mode 100644 testsuite/tests/asmcomp/select_addr.reference delete mode 100644 testsuite/tests/asmcomp/simple_float_const.ml delete mode 100644 testsuite/tests/asmcomp/simple_float_const_opaque.ml delete mode 100644 testsuite/tests/asmcomp/static_float_array_flambda.ml delete mode 100644 testsuite/tests/asmcomp/static_float_array_flambda_opaque.ml create mode 100644 testsuite/tests/backtrace/backtrace_bounds_exn.ml create mode 100644 testsuite/tests/backtrace/backtrace_bounds_exn.reference create mode 100644 testsuite/tests/backtrace/backtrace_c_exn.ml create mode 100644 testsuite/tests/backtrace/backtrace_c_exn.reference create mode 100644 testsuite/tests/backtrace/backtrace_c_exn_.c create mode 100644 testsuite/tests/backtrace/backtrace_dynlink.flambda.reference create mode 100644 testsuite/tests/backtrace/backtrace_dynlink.ml create mode 100644 testsuite/tests/backtrace/backtrace_dynlink.reference create mode 100644 testsuite/tests/backtrace/backtrace_dynlink_plugin.ml create mode 100644 testsuite/tests/backtrace/backtrace_effects.ml create mode 100644 testsuite/tests/backtrace/backtrace_effects.reference create mode 100644 testsuite/tests/backtrace/backtrace_effects_nested.flambda.reference create mode 100644 testsuite/tests/backtrace/backtrace_effects_nested.ml create mode 100644 testsuite/tests/backtrace/backtrace_effects_nested.reference create mode 100644 testsuite/tests/backtrace/backtrace_systhreads.ml create mode 100644 testsuite/tests/backtrace/backtrace_systhreads.reference create mode 100644 testsuite/tests/backtrace/lazy.flambda.reference create mode 100644 testsuite/tests/backtrace/print_location.ml create mode 100644 testsuite/tests/backtrace/print_location.reference create mode 100644 testsuite/tests/badly-ordered-deps/lib.ml create mode 100644 testsuite/tests/badly-ordered-deps/main.bytecode.reference create mode 100644 testsuite/tests/badly-ordered-deps/main.ml create mode 100644 testsuite/tests/basic-modules/pr11186.ml create mode 100644 testsuite/tests/basic-more/labels_evaluation_order.ml create mode 100644 testsuite/tests/basic-more/labels_evaluation_order.reference create mode 100644 testsuite/tests/basic-more/safer_matching.ml create mode 100644 testsuite/tests/basic-more/safer_matching.reference delete mode 100644 testsuite/tests/basic-more/testrandom.ml delete mode 100644 testsuite/tests/basic-more/testrandom.reference create mode 100644 testsuite/tests/c-api/aligned_alloc.ml create mode 100644 testsuite/tests/c-api/aligned_alloc_stubs.c create mode 100644 testsuite/tests/c-api/external.ml create mode 100644 testsuite/tests/c-api/external_stubs.c create mode 100644 testsuite/tests/c-api/test_c_thread_has_lock.ml create mode 100644 testsuite/tests/c-api/test_c_thread_has_lock.reference create mode 100644 testsuite/tests/c-api/test_c_thread_has_lock_cstubs.c create mode 100644 testsuite/tests/c-api/test_c_thread_has_lock_systhread.ml create mode 100644 testsuite/tests/c-api/test_c_thread_has_lock_systhread.reference create mode 100644 testsuite/tests/callback/callback_effects_gc.ml create mode 100644 testsuite/tests/callback/minor_named.ml create mode 100644 testsuite/tests/callback/minor_named.reference create mode 100644 testsuite/tests/callback/minor_named_.c create mode 100644 testsuite/tests/callback/nested_fiber.ml create mode 100644 testsuite/tests/callback/nested_fiber.reference create mode 100644 testsuite/tests/callback/nested_fiber_.c create mode 100644 testsuite/tests/callback/stack_overflow.ml create mode 100644 testsuite/tests/callback/stack_overflow.reference create mode 100644 testsuite/tests/callback/stack_overflow_.c delete mode 100644 testsuite/tests/callback/tcallback.ml create mode 100644 testsuite/tests/callback/test1.ml create mode 100644 testsuite/tests/callback/test1.reference create mode 100644 testsuite/tests/callback/test1_.c create mode 100644 testsuite/tests/callback/test2.ml create mode 100644 testsuite/tests/callback/test2.reference create mode 100644 testsuite/tests/callback/test2_.c create mode 100644 testsuite/tests/callback/test3.ml create mode 100644 testsuite/tests/callback/test3.reference create mode 100644 testsuite/tests/callback/test3_.c create mode 100644 testsuite/tests/callback/test4.ml create mode 100644 testsuite/tests/callback/test4.reference create mode 100644 testsuite/tests/callback/test4_.c create mode 100644 testsuite/tests/callback/test5.ml create mode 100644 testsuite/tests/callback/test5.reference create mode 100644 testsuite/tests/callback/test5_.c create mode 100644 testsuite/tests/callback/test6.ml create mode 100644 testsuite/tests/callback/test6.reference create mode 100644 testsuite/tests/callback/test6_.c create mode 100644 testsuite/tests/callback/test7.ml create mode 100644 testsuite/tests/callback/test7.reference create mode 100644 testsuite/tests/callback/test7_.c create mode 100644 testsuite/tests/callback/test_finaliser_gc.ml create mode 100644 testsuite/tests/callback/test_finaliser_gc.reference create mode 100644 testsuite/tests/callback/test_signalhandler.ml create mode 100644 testsuite/tests/callback/test_signalhandler.reference create mode 100644 testsuite/tests/callback/test_signalhandler_.c create mode 100644 testsuite/tests/compaction/test_compact_full.ml create mode 100644 testsuite/tests/compaction/test_freelist_free.ml create mode 100644 testsuite/tests/effects/backtrace.ml create mode 100644 testsuite/tests/effects/backtrace.reference create mode 100644 testsuite/tests/effects/cmphash.ml create mode 100644 testsuite/tests/effects/cmphash.reference create mode 100644 testsuite/tests/effects/evenodd.ml create mode 100644 testsuite/tests/effects/evenodd.reference create mode 100644 testsuite/tests/effects/issue479.compilers.reference create mode 100644 testsuite/tests/effects/issue479.ml create mode 100644 testsuite/tests/effects/manylive.ml create mode 100644 testsuite/tests/effects/manylive.reference create mode 100644 testsuite/tests/effects/marshal.ml create mode 100644 testsuite/tests/effects/marshal.reference create mode 100644 testsuite/tests/effects/overflow.ml create mode 100644 testsuite/tests/effects/overflow.reference create mode 100644 testsuite/tests/effects/partial.ml create mode 100644 testsuite/tests/effects/partial.reference create mode 100644 testsuite/tests/effects/reperform.ml create mode 100644 testsuite/tests/effects/reperform.reference create mode 100644 testsuite/tests/effects/sched.ml create mode 100644 testsuite/tests/effects/sched.reference create mode 100644 testsuite/tests/effects/shallow_state.ml create mode 100644 testsuite/tests/effects/shallow_state.reference create mode 100644 testsuite/tests/effects/shallow_state_io.ml create mode 100644 testsuite/tests/effects/shallow_state_io.reference create mode 100644 testsuite/tests/effects/test1.ml create mode 100644 testsuite/tests/effects/test1.reference create mode 100644 testsuite/tests/effects/test10.ml create mode 100644 testsuite/tests/effects/test10.reference create mode 100644 testsuite/tests/effects/test11.ml create mode 100644 testsuite/tests/effects/test11.reference create mode 100644 testsuite/tests/effects/test2.ml create mode 100644 testsuite/tests/effects/test2.reference create mode 100644 testsuite/tests/effects/test3.ml create mode 100644 testsuite/tests/effects/test3.reference create mode 100644 testsuite/tests/effects/test4.ml create mode 100644 testsuite/tests/effects/test4.reference create mode 100644 testsuite/tests/effects/test5.ml create mode 100644 testsuite/tests/effects/test5.reference create mode 100644 testsuite/tests/effects/test6.ml create mode 100644 testsuite/tests/effects/test6.reference create mode 100644 testsuite/tests/effects/test_lazy.ml create mode 100644 testsuite/tests/effects/test_lazy.reference create mode 100644 testsuite/tests/effects/unhandled_effects.ml create mode 100644 testsuite/tests/effects/unhandled_unlinked.ml create mode 100644 testsuite/tests/effects/unhandled_unlinked.reference create mode 100644 testsuite/tests/effects/used_cont.ml create mode 100644 testsuite/tests/effects/used_cont.reference create mode 100644 testsuite/tests/frame-pointers/c_call.ml create mode 100644 testsuite/tests/frame-pointers/c_call.reference create mode 100644 testsuite/tests/frame-pointers/c_call_.c create mode 100644 testsuite/tests/frame-pointers/effects.ml create mode 100644 testsuite/tests/frame-pointers/effects.reference create mode 100644 testsuite/tests/frame-pointers/exception_handler.ml create mode 100644 testsuite/tests/frame-pointers/exception_handler.reference create mode 100644 testsuite/tests/frame-pointers/fp_backtrace.c create mode 100644 testsuite/tests/frame-pointers/reperform.ml create mode 100644 testsuite/tests/frame-pointers/reperform.reference create mode 100644 testsuite/tests/frame-pointers/stack_realloc.ml create mode 100644 testsuite/tests/frame-pointers/stack_realloc.reference create mode 100644 testsuite/tests/frame-pointers/stack_realloc2.ml create mode 100644 testsuite/tests/frame-pointers/stack_realloc2.reference create mode 100644 testsuite/tests/frame-pointers/stack_realloc_.c create mode 100644 testsuite/tests/gc-roots/globroots_parallel.ml create mode 100644 testsuite/tests/gc-roots/globroots_parallel.reference create mode 100644 testsuite/tests/gc-roots/globroots_parallel_spawn_burn.ml create mode 100644 testsuite/tests/gc-roots/globroots_parallel_spawn_burn.reference create mode 100644 testsuite/tests/gc-roots/globroots_sequential.ml rename testsuite/tests/gc-roots/{globroots.reference => globroots_sequential.reference} (100%) create mode 100644 testsuite/tests/hidden_includes/cant_reference_hidden.ocamlc.reference create mode 100644 testsuite/tests/hidden_includes/hidden_stays_hidden.ocamlc.reference create mode 100644 testsuite/tests/hidden_includes/liba/a.ml create mode 100644 testsuite/tests/hidden_includes/liba_alt/a.ml create mode 100644 testsuite/tests/hidden_includes/libb/b.ml create mode 100644 testsuite/tests/hidden_includes/libc/c1.ml create mode 100644 testsuite/tests/hidden_includes/libc/c2.ml create mode 100644 testsuite/tests/hidden_includes/libc/c3.ml create mode 100644 testsuite/tests/hidden_includes/libc/c4.ml create mode 100644 testsuite/tests/hidden_includes/libc/c5.ml create mode 100644 testsuite/tests/hidden_includes/not_included.ocamlc.reference create mode 100644 testsuite/tests/hidden_includes/test.ml create mode 100644 testsuite/tests/hidden_includes/wrong_include_order.ocamlc.reference delete mode 100644 testsuite/tests/instrumented-runtime/main.ml delete mode 100644 testsuite/tests/instrumented-runtime/main.run create mode 100644 testsuite/tests/lazy/lazy2.ml create mode 100644 testsuite/tests/lazy/lazy2.reference create mode 100644 testsuite/tests/lazy/lazy3.ml create mode 100644 testsuite/tests/lazy/lazy3.reference create mode 100644 testsuite/tests/lazy/lazy4.ml create mode 100644 testsuite/tests/lazy/lazy4.reference create mode 100644 testsuite/tests/lazy/lazy5.ml create mode 100644 testsuite/tests/lazy/lazy5.reference create mode 100644 testsuite/tests/lazy/lazy6.ml create mode 100644 testsuite/tests/lazy/lazy6.reference create mode 100644 testsuite/tests/lazy/lazy7.ml create mode 100644 testsuite/tests/lazy/lazy7.reference create mode 100644 testsuite/tests/lazy/lazy8.ml create mode 100644 testsuite/tests/lazy/lazy8.reference create mode 100644 testsuite/tests/lazy/minor_major_force.ml create mode 100644 testsuite/tests/lazy/minor_major_force.reference create mode 100644 testsuite/tests/letrec-check/partial_application.ml create mode 100644 testsuite/tests/letrec-compilation/modrec.ml create mode 100644 testsuite/tests/letrec-compilation/modrec.reference create mode 100644 testsuite/tests/letrec-compilation/pr12153_miscompilation_of_recursive_atoms.ml create mode 100644 testsuite/tests/lexing/newlines.ml create mode 100644 testsuite/tests/lf_skiplist/stubs.c create mode 100644 testsuite/tests/lf_skiplist/test.ml create mode 100644 testsuite/tests/lf_skiplist/test_parallel.ml create mode 100644 testsuite/tests/lib-bigarray/specialized.ml create mode 100644 testsuite/tests/lib-channels/bigarrays.ml create mode 100644 testsuite/tests/lib-channels/bigarrays.reference create mode 100644 testsuite/tests/lib-channels/close_in.ml create mode 100644 testsuite/tests/lib-channels/close_out.ml create mode 100644 testsuite/tests/lib-channels/input_lines.ml create mode 100644 testsuite/tests/lib-channels/refcounting.ml create mode 100644 testsuite/tests/lib-digest/blake2b_self_test.ml create mode 100644 testsuite/tests/lib-digest/blake2b_self_test.reference create mode 100644 testsuite/tests/lib-digest/blake2b_self_test_stubs.c create mode 100644 testsuite/tests/lib-digest/digests.ml create mode 100644 testsuite/tests/lib-domain/DLS_thread_safety.ml create mode 100644 testsuite/tests/lib-domain/DLS_thread_safety.reference create mode 100644 testsuite/tests/lib-dynarray/heap_sort.ml create mode 100644 testsuite/tests/lib-dynarray/test.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_0_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_0_0_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_0_0_0_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_0_0_0_1.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_0_0_0_2.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_0_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_0_0_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_1.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_0_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_1.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_2.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_2_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_3.ml create mode 100644 testsuite/tests/lib-dynlink-domains/Plugin_1_2_3_0.ml create mode 100644 testsuite/tests/lib-dynlink-domains/main.ml create mode 100644 testsuite/tests/lib-dynlink-domains/main.reference create mode 100644 testsuite/tests/lib-dynlink-domains/store.ml create mode 100644 testsuite/tests/lib-dynlink-domains/test_generator.ml mode change 100755 => 100644 testsuite/tests/lib-dynlink-initializers/test10_main.byte.reference delete mode 100644 testsuite/tests/lib-dynlink-native/packed1_client.ml delete mode 100644 testsuite/tests/lib-dynlink-pr9209/ocamltests create mode 100644 testsuite/tests/lib-filename/temp.ml create mode 100644 testsuite/tests/lib-format/domains.ml create mode 100644 testsuite/tests/lib-format/domains.reference create mode 100644 testsuite/tests/lib-format/mc_pr586_par.ml create mode 100644 testsuite/tests/lib-format/mc_pr586_par.reference create mode 100644 testsuite/tests/lib-format/mc_pr586_par2.ml create mode 100644 testsuite/tests/lib-format/mc_pr586_par2.reference create mode 100644 testsuite/tests/lib-format/print_array.ml create mode 100644 testsuite/tests/lib-format/print_array.reference create mode 100644 testsuite/tests/lib-marshal/compressed.ml create mode 100644 testsuite/tests/lib-marshal/compressed.reference create mode 100644 testsuite/tests/lib-marshal/intext_par.ml create mode 100644 testsuite/tests/lib-marshal/intext_par.reference create mode 100644 testsuite/tests/lib-marshal/intextaux_par.c delete mode 100644 testsuite/tests/lib-obj/reachable_words_np.ml create mode 100644 testsuite/tests/lib-random/compat_32_64.ml create mode 100644 testsuite/tests/lib-random/compat_32_64.reference create mode 100644 testsuite/tests/lib-random/defaultinit.ml create mode 100644 testsuite/tests/lib-random/defaultinit.reference delete mode 100644 testsuite/tests/lib-random/full_int.ml delete mode 100644 testsuite/tests/lib-random/full_int.reference create mode 100644 testsuite/tests/lib-random/parallel.ml create mode 100644 testsuite/tests/lib-random/parallel.reference delete mode 100644 testsuite/tests/lib-random/rand.ml create mode 100644 testsuite/tests/lib-random/selfinit.ml rename testsuite/tests/lib-random/{rand.reference => selfinit.reference} (100%) create mode 100644 testsuite/tests/lib-random/testvectors.ml create mode 100644 testsuite/tests/lib-random/testvectors.reference create mode 100644 testsuite/tests/lib-runtime-events/stubs.c create mode 100644 testsuite/tests/lib-runtime-events/test.ml create mode 100644 testsuite/tests/lib-runtime-events/test.reference create mode 100644 testsuite/tests/lib-runtime-events/test_caml.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml.reference create mode 100644 testsuite/tests/lib-runtime-events/test_caml_counters.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml_exception.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml_exception.reference create mode 100644 testsuite/tests/lib-runtime-events/test_caml_parallel.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml_reentry.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml_reentry.reference create mode 100644 testsuite/tests/lib-runtime-events/test_caml_runparams.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml_slot_reuse.ml create mode 100644 testsuite/tests/lib-runtime-events/test_caml_stubs_gc.ml create mode 100644 testsuite/tests/lib-runtime-events/test_compact.ml create mode 100644 testsuite/tests/lib-runtime-events/test_dropped_events.ml create mode 100644 testsuite/tests/lib-runtime-events/test_env_start.ml create mode 100644 testsuite/tests/lib-runtime-events/test_external.ml create mode 100644 testsuite/tests/lib-runtime-events/test_external_preserve.ml create mode 100644 testsuite/tests/lib-runtime-events/test_fork.ml create mode 100644 testsuite/tests/lib-runtime-events/test_instrumented.ml create mode 100644 testsuite/tests/lib-runtime-events/test_instrumented.reference create mode 100644 testsuite/tests/lib-runtime-events/test_user_event.ml create mode 100644 testsuite/tests/lib-runtime-events/test_user_event_signal.ml create mode 100644 testsuite/tests/lib-runtime-events/test_user_event_signal.reference create mode 100644 testsuite/tests/lib-runtime-events/test_user_event_unknown.ml create mode 100644 testsuite/tests/lib-runtime-events/test_user_event_unknown.reference delete mode 100644 testsuite/tests/lib-stdlib/pervasives_deprecated.ml create mode 100644 testsuite/tests/lib-str/parallel.ml create mode 100644 testsuite/tests/lib-str/parallel.reference delete mode 100644 testsuite/tests/lib-stream/count_concat_bug.ml delete mode 100644 testsuite/tests/lib-stream/count_concat_bug.reference delete mode 100644 testsuite/tests/lib-stream/mpr7769.ml delete mode 100644 testsuite/tests/lib-stream/mpr7769.reference delete mode 100644 testsuite/tests/lib-stream/mpr7769.txt create mode 100644 testsuite/tests/lib-sync/prodcons.ml create mode 100644 testsuite/tests/lib-sync/prodcons.reference create mode 100644 testsuite/tests/lib-sync/trylock.ml create mode 100644 testsuite/tests/lib-sync/trylock.reference create mode 100644 testsuite/tests/lib-sync/trylock2.ml create mode 100644 testsuite/tests/lib-sync/trylock2.reference create mode 100644 testsuite/tests/lib-systhreads/boundscheck.ml rename otherlibs/bigarray/empty.c => testsuite/tests/lib-systhreads/boundscheck.reference (100%) create mode 100644 testsuite/tests/lib-systhreads/multicore_lifecycle.ml create mode 100644 testsuite/tests/lib-systhreads/multicore_lifecycle.reference create mode 100644 testsuite/tests/lib-systhreads/test_c_thread_register.ml create mode 100644 testsuite/tests/lib-systhreads/test_c_thread_register.reference create mode 100644 testsuite/tests/lib-systhreads/test_c_thread_register_cstubs.c create mode 100644 testsuite/tests/lib-systhreads/testfork2.ml create mode 100644 testsuite/tests/lib-systhreads/testfork2.reference delete mode 100644 testsuite/tests/lib-threads/pr9971.ml create mode 100644 testsuite/tests/lib-unix/common/bigarrays.ml create mode 100644 testsuite/tests/lib-unix/common/bigarrays.reference create mode 100644 testsuite/tests/lib-unix/common/fork_cleanup.ml create mode 100644 testsuite/tests/lib-unix/common/fork_cleanup.reference create mode 100644 testsuite/tests/lib-unix/common/fork_cleanup_systhreads.ml create mode 100644 testsuite/tests/lib-unix/common/fork_cleanup_systhreads.reference create mode 100644 testsuite/tests/lib-unix/common/gethostbyaddr.ml create mode 100644 testsuite/tests/lib-unix/common/gethostbyaddr.reference create mode 100644 testsuite/tests/lib-unix/common/multicore_fork_domain_alone.ml create mode 100644 testsuite/tests/lib-unix/common/multicore_fork_domain_alone2.ml create mode 100644 testsuite/tests/lib-unix/win-channel-of/fd_of_channel.c create mode 100644 testsuite/tests/lib-unix/win-channel-of/parallel_channel_of.ml create mode 100644 testsuite/tests/lib-unix/win-createprocess/test.ml create mode 100644 testsuite/tests/lib-unix/win-symlink/parallel_symlink.ml create mode 100644 testsuite/tests/local-functions/non_local.compilers.reference create mode 100644 testsuite/tests/local-functions/non_local.ml create mode 100644 testsuite/tests/match-side-effects/contexts_1.ml create mode 100644 testsuite/tests/match-side-effects/contexts_2.ml create mode 100644 testsuite/tests/match-side-effects/contexts_3.ml create mode 100644 testsuite/tests/match-side-effects/partiality.ml create mode 100644 testsuite/tests/match-side-effects/test_contexts_code.ml create mode 100644 testsuite/tests/match-side-effects/test_contexts_results.ml create mode 100644 testsuite/tests/memory-model/.depend create mode 100644 testsuite/tests/memory-model/Makefile create mode 100644 testsuite/tests/memory-model/README.md create mode 100644 testsuite/tests/memory-model/barrier.ml create mode 100644 testsuite/tests/memory-model/barrier.mli create mode 100644 testsuite/tests/memory-model/forbidden.ml create mode 100644 testsuite/tests/memory-model/forbidden.reference create mode 100644 testsuite/tests/memory-model/hist.ml create mode 100644 testsuite/tests/memory-model/hist.mli create mode 100644 testsuite/tests/memory-model/opt.ml create mode 100644 testsuite/tests/memory-model/opt.mli create mode 100644 testsuite/tests/memory-model/outcome.ml create mode 100644 testsuite/tests/memory-model/outcome.mli create mode 100644 testsuite/tests/memory-model/publish.ml create mode 100644 testsuite/tests/memory-model/publish.reference create mode 100644 testsuite/tests/memory-model/run.ml create mode 100644 testsuite/tests/memory-model/run.mli create mode 100644 testsuite/tests/memory-model/shared.ml create mode 100644 testsuite/tests/memory-model/shared.mli create mode 100644 testsuite/tests/messages/spellcheck.ml delete mode 100644 testsuite/tests/misc/ephe_infix.ml delete mode 100644 testsuite/tests/misc/ephe_issue9391.ml delete mode 100644 testsuite/tests/misc/ephetest.ml delete mode 100644 testsuite/tests/misc/ephetest.reference delete mode 100644 testsuite/tests/misc/ephetest2.ml delete mode 100644 testsuite/tests/misc/ephetest2_new.ml delete mode 100644 testsuite/tests/misc/ephetest2_new.reference delete mode 100644 testsuite/tests/misc/ephetest3.ml delete mode 100644 testsuite/tests/misc/ephetest_new.ml delete mode 100644 testsuite/tests/misc/finaliser.ml create mode 100644 testsuite/tests/misc/gc_mark_stack_overflow.ml create mode 100644 testsuite/tests/misc/gc_mark_stack_overflow.reference delete mode 100644 testsuite/tests/misc/weaklifetime.ml delete mode 100644 testsuite/tests/misc/weaklifetime2.ml delete mode 100644 testsuite/tests/misc/weaktest.ml rename testsuite/tests/no-alias-deps/{b.cmi => b.cmi.in} (100%) create mode 100644 testsuite/tests/parallel/atomics.ml create mode 100644 testsuite/tests/parallel/atomics.reference create mode 100644 testsuite/tests/parallel/backup_thread.ml create mode 100644 testsuite/tests/parallel/backup_thread.reference create mode 100644 testsuite/tests/parallel/backup_thread_pipe.ml create mode 100644 testsuite/tests/parallel/backup_thread_pipe.reference create mode 100644 testsuite/tests/parallel/catch_break.ml create mode 100644 testsuite/tests/parallel/constpromote.ml create mode 100644 testsuite/tests/parallel/constpromote.reference create mode 100644 testsuite/tests/parallel/deadcont.ml create mode 100644 testsuite/tests/parallel/deadcont.reference create mode 100644 testsuite/tests/parallel/domain_dls.ml create mode 100644 testsuite/tests/parallel/domain_dls.reference create mode 100644 testsuite/tests/parallel/domain_dls2.ml create mode 100644 testsuite/tests/parallel/domain_dls2.reference create mode 100644 testsuite/tests/parallel/domain_id.ml create mode 100644 testsuite/tests/parallel/domain_id.reference create mode 100644 testsuite/tests/parallel/domain_parallel_spawn_burn.ml create mode 100644 testsuite/tests/parallel/domain_parallel_spawn_burn.reference create mode 100644 testsuite/tests/parallel/domain_parallel_spawn_burn_gc_set.ml create mode 100644 testsuite/tests/parallel/domain_parallel_spawn_burn_gc_set.reference create mode 100644 testsuite/tests/parallel/domain_serial_spawn_burn.ml create mode 100644 testsuite/tests/parallel/domain_serial_spawn_burn.reference create mode 100644 testsuite/tests/parallel/fib_threads.ml create mode 100644 testsuite/tests/parallel/fib_threads.reference create mode 100644 testsuite/tests/parallel/join.ml rename testsuite/tests/{misc/finaliser.reference => parallel/join.reference} (100%) create mode 100644 testsuite/tests/parallel/major_gc_wait_backup.ml create mode 100644 testsuite/tests/parallel/major_gc_wait_backup.reference create mode 100644 testsuite/tests/parallel/mctest.ml create mode 100644 testsuite/tests/parallel/mctest.reference create mode 100644 testsuite/tests/parallel/multicore_systhreads.ml create mode 100644 testsuite/tests/parallel/multicore_systhreads.reference create mode 100644 testsuite/tests/parallel/pingpong.ml create mode 100644 testsuite/tests/parallel/pingpong.reference create mode 100644 testsuite/tests/parallel/poll.ml create mode 100644 testsuite/tests/parallel/poll.reference create mode 100644 testsuite/tests/parallel/prodcons_domains.ml create mode 100644 testsuite/tests/parallel/prodcons_domains.reference create mode 100644 testsuite/tests/parallel/recommended_domain_count.ml create mode 100644 testsuite/tests/parallel/recommended_domain_count.reference create mode 100644 testsuite/tests/parallel/recommended_domain_count_cstubs.c create mode 100644 testsuite/tests/parallel/recommended_domain_count_unix.ml create mode 100644 testsuite/tests/parallel/recommended_domain_count_unix.reference create mode 100644 testsuite/tests/parallel/tak.ml create mode 100644 testsuite/tests/parallel/tak.reference create mode 100644 testsuite/tests/parallel/test_c_thread_register.ml create mode 100644 testsuite/tests/parallel/test_c_thread_register.reference create mode 100644 testsuite/tests/parallel/test_c_thread_register_cstubs.c create mode 100644 testsuite/tests/parallel/test_issue_11094.ml create mode 100644 testsuite/tests/parallel/test_issue_11094.reference create mode 100644 testsuite/tests/parse-errors/mismatch_struct_sig.compilers.reference create mode 100644 testsuite/tests/parse-errors/mismatch_struct_sig.ml create mode 100644 testsuite/tests/parsing/assert_location.ml create mode 100644 testsuite/tests/parsing/assert_location.reference create mode 100644 testsuite/tests/parsing/rawidents.ml create mode 100644 testsuite/tests/ppx-attributes/inline.ml create mode 100644 testsuite/tests/printing-types/existentials.ml create mode 100644 testsuite/tests/regression/pr11887/pr11887.ml delete mode 100644 testsuite/tests/runtime-errors/has-stackoverflow-detection.sh delete mode 100644 testsuite/tests/runtime-errors/stackoverflow.native.reference delete mode 100644 testsuite/tests/runtime-errors/stackoverflow.run delete mode 100644 testsuite/tests/runtime-naked-pointers/cstubs.c delete mode 100644 testsuite/tests/runtime-naked-pointers/np.ml delete mode 100644 testsuite/tests/runtime-naked-pointers/np1.ml delete mode 100644 testsuite/tests/runtime-naked-pointers/np2.ml delete mode 100755 testsuite/tests/runtime-naked-pointers/np2.run delete mode 100644 testsuite/tests/runtime-naked-pointers/np3.ml delete mode 100755 testsuite/tests/runtime-naked-pointers/np3.run delete mode 100644 testsuite/tests/runtime-naked-pointers/np4.ml delete mode 100755 testsuite/tests/runtime-naked-pointers/np4.run delete mode 100755 testsuite/tests/runtime-naked-pointers/runtest.sh create mode 100644 testsuite/tests/shape-index/auxiliaire.ml create mode 100644 testsuite/tests/shape-index/index.ml create mode 100644 testsuite/tests/shape-index/index.reference create mode 100644 testsuite/tests/shape-index/index_aliases.ml create mode 100644 testsuite/tests/shape-index/index_aliases.reference create mode 100644 testsuite/tests/shape-index/index_bindingops.ml create mode 100644 testsuite/tests/shape-index/index_bindingops.reference create mode 100644 testsuite/tests/shape-index/index_constrs.ml create mode 100644 testsuite/tests/shape-index/index_constrs.reference create mode 100644 testsuite/tests/shape-index/index_constrs_records.ml create mode 100644 testsuite/tests/shape-index/index_constrs_records.reference create mode 100644 testsuite/tests/shape-index/index_functor.ml create mode 100644 testsuite/tests/shape-index/index_functor.reference create mode 100644 testsuite/tests/shape-index/index_labels.ml create mode 100644 testsuite/tests/shape-index/index_labels.reference create mode 100644 testsuite/tests/shape-index/index_modules.ml create mode 100644 testsuite/tests/shape-index/index_modules.reference create mode 100644 testsuite/tests/shape-index/index_objects.ml create mode 100644 testsuite/tests/shape-index/index_objects.reference create mode 100644 testsuite/tests/shape-index/index_types.ml create mode 100644 testsuite/tests/shape-index/index_types.reference create mode 100644 testsuite/tests/shape-index/index_vb.ml create mode 100644 testsuite/tests/shape-index/index_vb.reference create mode 100644 testsuite/tests/shapes/aliases.ml create mode 100644 testsuite/tests/shapes/more_func.ml create mode 100644 testsuite/tests/shapes/nested_types.ml delete mode 100644 testsuite/tests/statmemprof/arrays_in_major.reference delete mode 100644 testsuite/tests/statmemprof/arrays_in_minor.reference delete mode 100644 testsuite/tests/statmemprof/intern.reference delete mode 100644 testsuite/tests/statmemprof/lists_in_minor.reference create mode 100644 testsuite/tests/syntactic-arity/alloc.compilers.reference create mode 100644 testsuite/tests/syntactic-arity/alloc.ml create mode 100644 testsuite/tests/syntactic-arity/alloc.reference create mode 100644 testsuite/tests/syntactic-arity/max_arity.compilers.reference create mode 100644 testsuite/tests/syntactic-arity/max_arity.ml create mode 100644 testsuite/tests/syntactic-arity/max_arity.reference create mode 100644 testsuite/tests/syntactic-arity/measure_arity.ml create mode 100644 testsuite/tests/syntactic-arity/measure_runtime_arity.ml create mode 100644 testsuite/tests/syntactic-arity/measure_runtime_arity.reference create mode 100644 testsuite/tests/syntactic-arity/syntactic_arity.ml create mode 100644 testsuite/tests/syntactic-arity/syntactic_arity.reference create mode 100644 testsuite/tests/syntactic-arity/warnings.ml create mode 100644 testsuite/tests/tmc/shortcut.ml create mode 100644 testsuite/tests/tmc/try_with.ml create mode 100644 testsuite/tests/tool-command-line/test-no-input-file.compilers.reference create mode 100644 testsuite/tests/tool-command-line/test-no-input-file.ml create mode 100644 testsuite/tests/tool-dumpobj/test.ml create mode 100644 testsuite/tests/tool-dumpobj/test.reference create mode 100644 testsuite/tests/tool-dumpobj/test.run create mode 100644 testsuite/tests/tool-lexyacc/csets.mll create mode 100644 testsuite/tests/tool-lexyacc/csets.reference create mode 100644 testsuite/tests/tool-lexyacc/parsecheck.mly create mode 100644 testsuite/tests/tool-ocamlc-locations/foo.ml create mode 100644 testsuite/tests/tool-ocamlc-locations/marshalled.compilers.reference create mode 100644 testsuite/tests/tool-ocamlc-locations/marshalled.ml create mode 100644 testsuite/tests/tool-ocamlc-locations/test.compilers.reference create mode 100644 testsuite/tests/tool-ocamlc-locations/test.ml create mode 100644 testsuite/tests/tool-ocamlc-locations/testloc.ml create mode 100644 testsuite/tests/tool-ocamlc-locations/trivpp.ml create mode 100644 testsuite/tests/tool-ocamlc-stop-after/stop_after_lambda.compilers.reference create mode 100644 testsuite/tests/tool-ocamlc-stop-after/stop_after_lambda.ml create mode 100644 testsuite/tests/tool-ocamldoc/Alert_toplevel.html.reference create mode 100644 testsuite/tests/tool-ocamldoc/Alert_toplevel.mli create mode 100644 testsuite/tests/tool-ocamldoc/Alert_toplevel2.html.reference create mode 100644 testsuite/tests/tool-ocamldoc/Alert_toplevel2.mli create mode 100644 testsuite/tests/tool-ocamldoc/Alerts.html.reference create mode 100644 testsuite/tests/tool-ocamldoc/Alerts.mli create mode 100644 testsuite/tests/tool-ocamldoc/Alerts_impl.html.reference create mode 100644 testsuite/tests/tool-ocamldoc/Alerts_impl.ml create mode 100644 testsuite/tests/tool-ocamldoc/Functions.html.reference create mode 100644 testsuite/tests/tool-ocamldoc/Functions.latex.reference create mode 100644 testsuite/tests/tool-ocamldoc/Functions.ml create mode 100644 testsuite/tests/tool-ocamlopt-stop-after/stop_after_lambda.compilers.reference create mode 100644 testsuite/tests/tool-ocamlopt-stop-after/stop_after_lambda.ml create mode 100644 testsuite/tests/tool-ocamltest-var-expansion/subst1.ml create mode 100644 testsuite/tests/tool-ocamltest-var-expansion/subst1.reference create mode 100644 testsuite/tests/tool-ocamltest-var-expansion/subst2.ml create mode 100644 testsuite/tests/tool-ocamltest-var-expansion/subst2.reference create mode 100644 testsuite/tests/tool-toplevel/install_printer.compilers.reference create mode 100644 testsuite/tests/tool-toplevel/install_printer.ml create mode 100644 testsuite/tests/tool-toplevel/multi_phrase_line.compilers.reference create mode 100644 testsuite/tests/tool-toplevel/multi_phrase_line.ml create mode 100644 testsuite/tests/tool-toplevel/pr9701.compilers.reference create mode 100644 testsuite/tests/tool-toplevel/pr9701.ml create mode 100644 testsuite/tests/translprim/comparison_optim.ml create mode 100644 testsuite/tests/translprim/comparison_optim.reference create mode 100644 testsuite/tests/tsan/array_elt.ml create mode 100644 testsuite/tests/tsan/array_elt.reference create mode 100644 testsuite/tests/tsan/array_elt.run create mode 100644 testsuite/tests/tsan/callbacks.c create mode 100644 testsuite/tests/tsan/exn_from_c.ml create mode 100644 testsuite/tests/tsan/exn_from_c.reference create mode 100644 testsuite/tests/tsan/exn_from_c.run create mode 100644 testsuite/tests/tsan/exn_in_callback.ml create mode 100644 testsuite/tests/tsan/exn_in_callback.reference create mode 100644 testsuite/tests/tsan/exn_in_callback.run create mode 100644 testsuite/tests/tsan/exn_reraise.ml create mode 100644 testsuite/tests/tsan/exn_reraise.reference create mode 100644 testsuite/tests/tsan/exn_reraise.run create mode 100755 testsuite/tests/tsan/filter-locations.sh create mode 100644 testsuite/tests/tsan/handlers_at_tail.ml create mode 100644 testsuite/tests/tsan/norace_atomics.ml create mode 100644 testsuite/tests/tsan/perform.ml create mode 100644 testsuite/tests/tsan/perform.reference create mode 100644 testsuite/tests/tsan/perform.run create mode 100644 testsuite/tests/tsan/raise_through_handler.ml create mode 100644 testsuite/tests/tsan/raise_through_handler.reference create mode 100644 testsuite/tests/tsan/raise_through_handler.run create mode 100644 testsuite/tests/tsan/record_field.ml create mode 100644 testsuite/tests/tsan/record_field.reference create mode 100644 testsuite/tests/tsan/record_field.run create mode 100644 testsuite/tests/tsan/reperform.ml create mode 100644 testsuite/tests/tsan/reperform.reference create mode 100644 testsuite/tests/tsan/reperform.run create mode 100644 testsuite/tests/tsan/unhandled.ml create mode 100644 testsuite/tests/tsan/unhandled.reference create mode 100644 testsuite/tests/tsan/unhandled.run create mode 100644 testsuite/tests/tsan/waitgroup.ml create mode 100644 testsuite/tests/tsan/waitgroup_stubs.c create mode 100644 testsuite/tests/typing-fstclassmod/scope_escape.ml create mode 100644 testsuite/tests/typing-gadts/packed-module-recasting.ml create mode 100644 testsuite/tests/typing-gadts/pr10348.ml create mode 100644 testsuite/tests/typing-gadts/pr11888.ml create mode 100644 testsuite/tests/typing-gadts/syntactic-arity.ml create mode 100644 testsuite/tests/typing-kind/kind_mismatch.ml create mode 100644 testsuite/tests/typing-misc/apply_non_function.ml create mode 100644 testsuite/tests/typing-misc/let_rec_approx.ml create mode 100644 testsuite/tests/typing-misc/open.ml create mode 100644 testsuite/tests/typing-misc/wellfounded11150.ml create mode 100644 testsuite/tests/typing-modules/nongen.ml create mode 100644 testsuite/tests/typing-modules/package_constraint.ml create mode 100644 testsuite/tests/typing-modules/struct_include_optimisation.ml create mode 100644 testsuite/tests/typing-modules/struct_include_optimisation.reference create mode 100644 testsuite/tests/typing-objects/class_2.ml create mode 100644 testsuite/tests/typing-objects/nongen.ml create mode 100644 testsuite/tests/typing-objects/pr11569.ml create mode 100644 testsuite/tests/typing-polyvariants-bugs/pr10664.ml create mode 100644 testsuite/tests/typing-polyvariants-bugs/pr10664.reference create mode 100644 testsuite/tests/typing-polyvariants-bugs/pr10664.reference~ create mode 100644 testsuite/tests/typing-polyvariants-bugs/pr10664a.ml create mode 100644 testsuite/tests/typing-recmod/pr6491.ml create mode 100644 testsuite/tests/typing-signatures/nondep_regression.ml create mode 100644 testsuite/tests/typing-signatures/regression_tsubst_error.ml create mode 100644 testsuite/tests/unwind/unwind_test.reference create mode 100644 testsuite/tests/utils/find_first_mono.ml create mode 100644 testsuite/tests/utils/find_first_mono.reference create mode 100644 testsuite/tests/warnings/marshall_for_w53.ml create mode 100644 testsuite/tests/warnings/w26_alias.ml create mode 100644 testsuite/tests/warnings/w44.ml create mode 100644 testsuite/tests/warnings/w47_ppwarning.compilers.reference create mode 100644 testsuite/tests/warnings/w47_ppwarning.ml create mode 100644 testsuite/tests/warnings/w53_marshalled.ml delete mode 100644 testsuite/tests/warnings/w68.compilers.reference delete mode 100644 testsuite/tests/warnings/w68.ml delete mode 100644 testsuite/tests/warnings/w68.reference rename testsuite/tests/{misc/ephe_infix_new.ml => weak-ephe-final/ephe_infix.ml} (100%) create mode 100644 testsuite/tests/weak-ephe-final/ephetest.ml rename testsuite/tests/{misc/ephetest_new.reference => weak-ephe-final/ephetest.reference} (100%) create mode 100644 testsuite/tests/weak-ephe-final/ephetest2.ml rename testsuite/tests/{misc => weak-ephe-final}/ephetest2.reference (100%) create mode 100644 testsuite/tests/weak-ephe-final/ephetest3.ml rename testsuite/tests/{misc => weak-ephe-final}/ephetest3.reference (100%) create mode 100644 testsuite/tests/weak-ephe-final/ephetest_par.ml rename testsuite/tests/{misc/weaklifetime.reference => weak-ephe-final/ephetest_par.reference} (100%) create mode 100644 testsuite/tests/weak-ephe-final/finaliser.ml create mode 100644 testsuite/tests/weak-ephe-final/finaliser.reference create mode 100644 testsuite/tests/weak-ephe-final/finaliser2.ml create mode 100644 testsuite/tests/weak-ephe-final/finaliser2.reference create mode 100644 testsuite/tests/weak-ephe-final/finaliser_handover.ml create mode 100644 testsuite/tests/weak-ephe-final/finaliser_handover.reference create mode 100644 testsuite/tests/weak-ephe-final/pr12001.ml create mode 100644 testsuite/tests/weak-ephe-final/pr12001.reference create mode 100644 testsuite/tests/weak-ephe-final/weaklifetime.ml create mode 100644 testsuite/tests/weak-ephe-final/weaklifetime.reference create mode 100644 testsuite/tests/weak-ephe-final/weaklifetime2.ml rename testsuite/tests/{misc => weak-ephe-final}/weaklifetime2.reference (100%) create mode 100644 testsuite/tests/weak-ephe-final/weaklifetime_par.ml create mode 100644 testsuite/tests/weak-ephe-final/weaklifetime_par.reference create mode 100644 testsuite/tests/weak-ephe-final/weaktest.ml rename testsuite/tests/{misc => weak-ephe-final}/weaktest.reference (100%) create mode 100644 testsuite/tests/weak-ephe-final/weaktest_par_load.ml delete mode 100644 testsuite/tools/Makefile delete mode 100644 testsuite/tools/asmgen_i386.S delete mode 100644 testsuite/tools/asmgen_i386nt.asm create mode 100644 testsuite/tools/codegen_main.mli create mode 100644 testsuite/tools/expect.ml create mode 100644 testsuite/tools/expect.mli delete mode 100644 testsuite/tools/expect_test.ml delete mode 100644 tools/.depend delete mode 100644 tools/Makefile create mode 100755 tools/bump-magic-numbers delete mode 100644 tools/caml_tex.ml create mode 100755 tools/ci/actions/check-no-ignored-files.sh create mode 100755 tools/ci/actions/check-parsetree-modified.sh mode change 100644 => 100755 tools/ci/appveyor/appveyor_build.sh create mode 100644 tools/cmpbyt.mli create mode 100644 tools/cvt_emit.mli create mode 100644 tools/dumpobj.mli delete mode 100644 tools/eventlog_metadata.in create mode 100644 tools/gdb_ocamlrun.py create mode 100644 tools/gen_sizeclasses.ml create mode 100644 tools/lintapidiff.mli create mode 100755 tools/list-globals create mode 100644 tools/make_opcodes.mli create mode 100644 tools/objinfo.mli create mode 100644 tools/ocamlcmt.mli create mode 100644 tools/ocamlcp.mli create mode 100644 tools/ocamlcp_common.ml create mode 100644 tools/ocamlcp_common.mli create mode 100644 tools/ocamldep.mli create mode 100644 tools/ocamlmklib.mli create mode 100644 tools/ocamlmktop.mli create mode 100644 tools/ocamloptp.mli create mode 100644 tools/ocamlprof.mli create mode 100644 tools/ocamltex.ml create mode 100644 tools/ocamltex.mli create mode 100644 tools/opnames.mli create mode 100644 tools/primreq.mli create mode 100644 tools/stripdebug.mli create mode 100755 tools/translate-all-tests create mode 100644 toplevel/expunge.mli create mode 100644 toplevel/topprinters.ml create mode 100644 toplevel/topprinters.mli create mode 100644 toplevel/topstart.mli create mode 100644 typing/cmt2annot.mli delete mode 100644 typing/rec_check.ml delete mode 100644 typing/rec_check.mli create mode 100644 typing/shape_reduce.ml create mode 100644 typing/shape_reduce.mli create mode 100644 typing/value_rec_check.ml create mode 100644 typing/value_rec_check.mli create mode 100644 typing/value_rec_types.mli delete mode 100644 utils/Makefile create mode 100644 utils/compression.ml create mode 100644 utils/compression.mli create mode 100644 utils/config.common.ml.in create mode 100644 utils/config.fixed.ml create mode 100644 utils/config.generated.ml.in delete mode 100644 utils/config.mlp delete mode 100644 yacc/Makefile diff --git a/.depend b/.depend index dfc878b3..2e7da09b 100644 --- a/.depend +++ b/.depend @@ -45,11 +45,32 @@ utils/clflags.cmx : \ utils/clflags.cmi : \ utils/profile.cmi \ utils/misc.cmi +utils/compression.cmo : \ + utils/compression.cmi +utils/compression.cmx : \ + utils/compression.cmi +utils/compression.cmi : +utils/config.common.cmo : +utils/config.common.cmx : +utils/config.fixed.cmo : +utils/config.fixed.cmx : +utils/config.generated.cmo : +utils/config.generated.cmx : utils/config.cmo : \ utils/config.cmi utils/config.cmx : \ utils/config.cmi utils/config.cmi : +utils/config_boot.cmo : \ + utils/config_boot.cmi +utils/config_boot.cmx : \ + utils/config_boot.cmi +utils/config_boot.cmi : +utils/config_main.cmo : \ + utils/config_main.cmi +utils/config_main.cmx : \ + utils/config_main.cmi +utils/config_main.cmi : utils/consistbl.cmo : \ utils/misc.cmi \ utils/consistbl.cmi @@ -254,12 +275,16 @@ parsing/asttypes.cmi : \ parsing/location.cmi parsing/attr_helper.cmo : \ parsing/parsetree.cmi \ + utils/misc.cmi \ parsing/location.cmi \ + parsing/builtin_attributes.cmi \ parsing/asttypes.cmi \ parsing/attr_helper.cmi parsing/attr_helper.cmx : \ parsing/parsetree.cmi \ + utils/misc.cmx \ parsing/location.cmx \ + parsing/builtin_attributes.cmx \ parsing/asttypes.cmi \ parsing/attr_helper.cmi parsing/attr_helper.cmi : \ @@ -272,7 +297,10 @@ parsing/builtin_attributes.cmo : \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + utils/clflags.cmi \ parsing/asttypes.cmi \ + parsing/ast_iterator.cmi \ + parsing/ast_helper.cmi \ parsing/builtin_attributes.cmi parsing/builtin_attributes.cmx : \ utils/warnings.cmx \ @@ -280,7 +308,10 @@ parsing/builtin_attributes.cmx : \ utils/misc.cmx \ parsing/longident.cmx \ parsing/location.cmx \ + utils/clflags.cmx \ parsing/asttypes.cmi \ + parsing/ast_iterator.cmx \ + parsing/ast_helper.cmx \ parsing/builtin_attributes.cmi parsing/builtin_attributes.cmi : \ parsing/parsetree.cmi \ @@ -370,6 +401,7 @@ parsing/parse.cmo : \ parsing/syntaxerr.cmi \ parsing/pprintast.cmi \ parsing/parser.cmi \ + utils/misc.cmi \ parsing/location.cmi \ parsing/lexer.cmi \ parsing/docstrings.cmi \ @@ -378,6 +410,7 @@ parsing/parse.cmx : \ parsing/syntaxerr.cmx \ parsing/pprintast.cmx \ parsing/parser.cmx \ + utils/misc.cmx \ parsing/location.cmx \ parsing/lexer.cmx \ parsing/docstrings.cmx \ @@ -393,6 +426,7 @@ parsing/parser.cmo : \ parsing/docstrings.cmi \ utils/clflags.cmi \ parsing/camlinternalMenhirLib.cmi \ + parsing/builtin_attributes.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ parsing/parser.cmi @@ -404,6 +438,7 @@ parsing/parser.cmx : \ parsing/docstrings.cmx \ utils/clflags.cmx \ parsing/camlinternalMenhirLib.cmx \ + parsing/builtin_attributes.cmx \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ parsing/parser.cmi @@ -421,15 +456,15 @@ parsing/pprintast.cmo : \ parsing/parsetree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + parsing/lexer.cmi \ parsing/asttypes.cmi \ - parsing/ast_helper.cmi \ parsing/pprintast.cmi parsing/pprintast.cmx : \ parsing/parsetree.cmi \ parsing/longident.cmx \ parsing/location.cmx \ + parsing/lexer.cmx \ parsing/asttypes.cmi \ - parsing/ast_helper.cmx \ parsing/pprintast.cmi parsing/pprintast.cmi : \ parsing/parsetree.cmi \ @@ -460,6 +495,21 @@ parsing/syntaxerr.cmx : \ parsing/syntaxerr.cmi parsing/syntaxerr.cmi : \ parsing/location.cmi +parsing/unit_info.cmo : \ + utils/warnings.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + utils/config.cmi \ + parsing/unit_info.cmi +parsing/unit_info.cmx : \ + utils/warnings.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + utils/config.cmx \ + parsing/unit_info.cmi +parsing/unit_info.cmi : typing/annot.cmi : \ parsing/location.cmi typing/btype.cmo : \ @@ -493,7 +543,8 @@ typing/cmt2annot.cmo : \ typing/env.cmi \ file_formats/cmt_format.cmi \ parsing/asttypes.cmi \ - typing/annot.cmi + typing/annot.cmi \ + typing/cmt2annot.cmi typing/cmt2annot.cmx : \ typing/types.cmx \ typing/typedtree.cmx \ @@ -507,7 +558,10 @@ typing/cmt2annot.cmx : \ typing/env.cmx \ file_formats/cmt_format.cmx \ parsing/asttypes.cmi \ - typing/annot.cmi + typing/annot.cmi \ + typing/cmt2annot.cmi +typing/cmt2annot.cmi : \ + file_formats/cmt_format.cmi typing/ctype.cmo : \ typing/types.cmi \ typing/type_immediacy.cmi \ @@ -575,6 +629,7 @@ typing/datarepr.cmi : \ typing/ident.cmi typing/env.cmo : \ utils/warnings.cmi \ + parsing/unit_info.cmi \ typing/types.cmi \ typing/subst.cmi \ typing/shape.cmi \ @@ -597,6 +652,7 @@ typing/env.cmo : \ typing/env.cmi typing/env.cmx : \ utils/warnings.cmx \ + parsing/unit_info.cmx \ typing/types.cmx \ typing/subst.cmx \ typing/shape.cmx \ @@ -619,6 +675,7 @@ typing/env.cmx : \ typing/env.cmi typing/env.cmi : \ utils/warnings.cmi \ + parsing/unit_info.cmi \ typing/types.cmi \ typing/subst.cmi \ typing/shape.cmi \ @@ -634,6 +691,7 @@ typing/envaux.cmo : \ typing/subst.cmi \ typing/printtyp.cmi \ typing/path.cmi \ + utils/misc.cmi \ parsing/location.cmi \ typing/ident.cmi \ typing/env.cmi \ @@ -643,6 +701,7 @@ typing/envaux.cmx : \ typing/subst.cmx \ typing/printtyp.cmx \ typing/path.cmx \ + utils/misc.cmx \ parsing/location.cmx \ typing/ident.cmx \ typing/env.cmx \ @@ -684,6 +743,7 @@ typing/includeclass.cmo : \ typing/types.cmi \ typing/printtyp.cmi \ typing/path.cmi \ + utils/misc.cmi \ typing/ctype.cmi \ parsing/builtin_attributes.cmi \ typing/includeclass.cmi @@ -691,6 +751,7 @@ typing/includeclass.cmx : \ typing/types.cmx \ typing/printtyp.cmx \ typing/path.cmx \ + utils/misc.cmx \ typing/ctype.cmx \ parsing/builtin_attributes.cmx \ typing/includeclass.cmi @@ -868,11 +929,13 @@ typing/mtype.cmi : \ typing/oprint.cmo : \ parsing/pprintast.cmi \ typing/outcometree.cmi \ + parsing/lexer.cmi \ parsing/asttypes.cmi \ typing/oprint.cmi typing/oprint.cmx : \ parsing/pprintast.cmx \ typing/outcometree.cmi \ + parsing/lexer.cmx \ parsing/asttypes.cmi \ typing/oprint.cmi typing/oprint.cmi : \ @@ -882,7 +945,6 @@ typing/outcometree.cmi : \ parsing/asttypes.cmi typing/parmatch.cmo : \ utils/warnings.cmi \ - typing/untypeast.cmi \ typing/types.cmi \ typing/typedtree.cmi \ typing/tast_iterator.cmi \ @@ -898,14 +960,11 @@ typing/parmatch.cmo : \ typing/ident.cmi \ typing/env.cmi \ typing/ctype.cmi \ - utils/config.cmi \ typing/btype.cmi \ parsing/asttypes.cmi \ - parsing/ast_helper.cmi \ typing/parmatch.cmi typing/parmatch.cmx : \ utils/warnings.cmx \ - typing/untypeast.cmx \ typing/types.cmx \ typing/typedtree.cmx \ typing/tast_iterator.cmx \ @@ -921,10 +980,8 @@ typing/parmatch.cmx : \ typing/ident.cmx \ typing/env.cmx \ typing/ctype.cmx \ - utils/config.cmx \ typing/btype.cmx \ parsing/asttypes.cmi \ - parsing/ast_helper.cmx \ typing/parmatch.cmi typing/parmatch.cmi : \ typing/types.cmi \ @@ -934,9 +991,11 @@ typing/parmatch.cmi : \ typing/env.cmi \ parsing/asttypes.cmi typing/path.cmo : \ + parsing/lexer.cmi \ typing/ident.cmi \ typing/path.cmi typing/path.cmx : \ + parsing/lexer.cmx \ typing/ident.cmx \ typing/path.cmi typing/path.cmi : \ @@ -969,30 +1028,32 @@ typing/patterns.cmi : \ parsing/asttypes.cmi typing/persistent_env.cmo : \ utils/warnings.cmi \ + parsing/unit_info.cmi \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ utils/lazy_backtrack.cmi \ utils/consistbl.cmi \ - utils/config.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ typing/persistent_env.cmi typing/persistent_env.cmx : \ utils/warnings.cmx \ + parsing/unit_info.cmx \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ utils/lazy_backtrack.cmx \ utils/consistbl.cmx \ - utils/config.cmx \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ typing/persistent_env.cmi typing/persistent_env.cmi : \ + parsing/unit_info.cmi \ typing/types.cmi \ utils/misc.cmi \ parsing/location.cmi \ + utils/load_path.cmi \ utils/lazy_backtrack.cmi \ utils/consistbl.cmi \ file_formats/cmi_format.cmi @@ -1057,11 +1118,14 @@ typing/printpat.cmi : \ parsing/asttypes.cmi typing/printtyp.cmo : \ utils/warnings.cmi \ + parsing/unit_info.cmi \ typing/types.cmi \ typing/type_immediacy.cmi \ typing/signature_group.cmi \ + typing/shape.cmi \ typing/primitive.cmi \ typing/predef.cmi \ + parsing/pprintast.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ typing/outcometree.cmi \ @@ -1079,11 +1143,14 @@ typing/printtyp.cmo : \ typing/printtyp.cmi typing/printtyp.cmx : \ utils/warnings.cmx \ + parsing/unit_info.cmx \ typing/types.cmx \ typing/type_immediacy.cmx \ typing/signature_group.cmx \ + typing/shape.cmx \ typing/primitive.cmx \ typing/predef.cmx \ + parsing/pprintast.cmx \ typing/path.cmx \ parsing/parsetree.cmi \ typing/outcometree.cmi \ @@ -1101,6 +1168,7 @@ typing/printtyp.cmx : \ typing/printtyp.cmi typing/printtyp.cmi : \ typing/types.cmi \ + typing/shape.cmi \ typing/path.cmi \ typing/outcometree.cmi \ parsing/longident.cmi \ @@ -1137,29 +1205,6 @@ typing/printtyped.cmx : \ typing/printtyped.cmi typing/printtyped.cmi : \ typing/typedtree.cmi -typing/rec_check.cmo : \ - typing/types.cmi \ - typing/typeopt.cmi \ - typing/typedtree.cmi \ - typing/primitive.cmi \ - typing/path.cmi \ - lambda/lambda.cmi \ - typing/ident.cmi \ - parsing/asttypes.cmi \ - typing/rec_check.cmi -typing/rec_check.cmx : \ - typing/types.cmx \ - typing/typeopt.cmx \ - typing/typedtree.cmx \ - typing/primitive.cmx \ - typing/path.cmx \ - lambda/lambda.cmx \ - typing/ident.cmx \ - parsing/asttypes.cmi \ - typing/rec_check.cmi -typing/rec_check.cmi : \ - typing/typedtree.cmi \ - typing/ident.cmi typing/shape.cmo : \ typing/path.cmi \ utils/misc.cmi \ @@ -1176,6 +1221,21 @@ typing/shape.cmi : \ typing/path.cmi \ utils/identifiable.cmi \ typing/ident.cmi +typing/shape_reduce.cmo : \ + typing/shape.cmi \ + utils/local_store.cmi \ + typing/ident.cmi \ + typing/env.cmi \ + typing/shape_reduce.cmi +typing/shape_reduce.cmx : \ + typing/shape.cmx \ + utils/local_store.cmx \ + typing/ident.cmx \ + typing/env.cmx \ + typing/shape_reduce.cmi +typing/shape_reduce.cmi : \ + typing/shape.cmi \ + typing/env.cmi typing/signature_group.cmo : \ typing/types.cmi \ typing/ident.cmi \ @@ -1242,30 +1302,44 @@ typing/subst.cmi : \ typing/ident.cmi typing/tast_iterator.cmo : \ typing/typedtree.cmi \ + parsing/parsetree.cmi \ + parsing/location.cmi \ typing/env.cmi \ parsing/asttypes.cmi \ + parsing/ast_iterator.cmi \ typing/tast_iterator.cmi typing/tast_iterator.cmx : \ typing/typedtree.cmx \ + parsing/parsetree.cmi \ + parsing/location.cmx \ typing/env.cmx \ parsing/asttypes.cmi \ + parsing/ast_iterator.cmx \ typing/tast_iterator.cmi typing/tast_iterator.cmi : \ typing/typedtree.cmi \ + parsing/location.cmi \ typing/env.cmi \ parsing/asttypes.cmi typing/tast_mapper.cmo : \ typing/typedtree.cmi \ + parsing/parsetree.cmi \ + parsing/location.cmi \ typing/env.cmi \ parsing/asttypes.cmi \ + parsing/ast_mapper.cmi \ typing/tast_mapper.cmi typing/tast_mapper.cmx : \ typing/typedtree.cmx \ + parsing/parsetree.cmi \ + parsing/location.cmx \ typing/env.cmx \ parsing/asttypes.cmi \ + parsing/ast_mapper.cmx \ typing/tast_mapper.cmi typing/tast_mapper.cmi : \ typing/typedtree.cmi \ + parsing/location.cmi \ typing/env.cmi \ parsing/asttypes.cmi typing/type_immediacy.cmo : \ @@ -1290,6 +1364,7 @@ typing/typeclass.cmo : \ typing/path.cmi \ parsing/parsetree.cmi \ typing/oprint.cmi \ + utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ typing/includeclass.cmi \ @@ -1318,6 +1393,7 @@ typing/typeclass.cmx : \ typing/path.cmx \ parsing/parsetree.cmi \ typing/oprint.cmx \ + utils/misc.cmx \ parsing/longident.cmx \ parsing/location.cmx \ typing/includeclass.cmx \ @@ -1345,17 +1421,19 @@ typing/typeclass.cmi : \ parsing/asttypes.cmi typing/typecore.cmo : \ utils/warnings.cmi \ + typing/value_rec_check.cmi \ + typing/untypeast.cmi \ typing/typetexp.cmi \ typing/types.cmi \ typing/typedtree.cmi \ typing/typedecl.cmi \ typing/subst.cmi \ typing/shape.cmi \ - typing/rec_check.cmi \ typing/printtyp.cmi \ typing/printpat.cmi \ typing/primitive.cmi \ typing/predef.cmi \ + parsing/pprintast.cmi \ typing/persistent_env.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ @@ -1377,17 +1455,19 @@ typing/typecore.cmo : \ typing/typecore.cmi typing/typecore.cmx : \ utils/warnings.cmx \ + typing/value_rec_check.cmx \ + typing/untypeast.cmx \ typing/typetexp.cmx \ typing/types.cmx \ typing/typedtree.cmx \ typing/typedecl.cmx \ typing/subst.cmx \ typing/shape.cmx \ - typing/rec_check.cmx \ typing/printtyp.cmx \ typing/printpat.cmx \ typing/primitive.cmx \ typing/predef.cmx \ + parsing/pprintast.cmx \ typing/persistent_env.cmx \ typing/path.cmx \ parsing/parsetree.cmi \ @@ -1423,6 +1503,7 @@ typing/typedecl.cmo : \ utils/warnings.cmi \ typing/typetexp.cmi \ typing/types.cmi \ + typing/typeopt.cmi \ typing/typedtree.cmi \ typing/typedecl_variance.cmi \ typing/typedecl_unboxed.cmi \ @@ -1430,6 +1511,7 @@ typing/typedecl.cmo : \ typing/typedecl_immediacy.cmi \ typing/type_immediacy.cmi \ typing/subst.cmi \ + typing/shape.cmi \ typing/printtyp.cmi \ typing/primitive.cmi \ typing/predef.cmi \ @@ -1440,6 +1522,7 @@ typing/typedecl.cmo : \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + lambda/lambda.cmi \ typing/includecore.cmi \ typing/ident.cmi \ typing/errortrace.cmi \ @@ -1458,6 +1541,7 @@ typing/typedecl.cmx : \ utils/warnings.cmx \ typing/typetexp.cmx \ typing/types.cmx \ + typing/typeopt.cmx \ typing/typedtree.cmx \ typing/typedecl_variance.cmx \ typing/typedecl_unboxed.cmx \ @@ -1465,6 +1549,7 @@ typing/typedecl.cmx : \ typing/typedecl_immediacy.cmx \ typing/type_immediacy.cmx \ typing/subst.cmx \ + typing/shape.cmx \ typing/printtyp.cmx \ typing/primitive.cmx \ typing/predef.cmx \ @@ -1475,6 +1560,7 @@ typing/typedecl.cmx : \ utils/misc.cmx \ parsing/longident.cmx \ parsing/location.cmx \ + lambda/lambda.cmx \ typing/includecore.cmx \ typing/ident.cmx \ typing/errortrace.cmx \ @@ -1495,6 +1581,7 @@ typing/typedecl.cmi : \ typing/typedecl_variance.cmi \ typing/typedecl_separability.cmi \ typing/typedecl_immediacy.cmi \ + typing/shape.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ parsing/longident.cmi \ @@ -1614,6 +1701,7 @@ typing/typedecl_variance.cmi : \ typing/env.cmi \ parsing/asttypes.cmi typing/typedtree.cmo : \ + typing/value_rec_types.cmi \ typing/types.cmi \ typing/shape.cmi \ typing/primitive.cmi \ @@ -1626,6 +1714,7 @@ typing/typedtree.cmo : \ parsing/asttypes.cmi \ typing/typedtree.cmi typing/typedtree.cmx : \ + typing/value_rec_types.cmi \ typing/types.cmx \ typing/shape.cmx \ typing/primitive.cmx \ @@ -1638,6 +1727,7 @@ typing/typedtree.cmx : \ parsing/asttypes.cmi \ typing/typedtree.cmi typing/typedtree.cmi : \ + typing/value_rec_types.cmi \ typing/types.cmi \ typing/shape.cmi \ typing/primitive.cmi \ @@ -1650,14 +1740,17 @@ typing/typedtree.cmi : \ parsing/asttypes.cmi typing/typemod.cmo : \ utils/warnings.cmi \ + parsing/unit_info.cmi \ typing/typetexp.cmi \ typing/types.cmi \ typing/typedtree.cmi \ + typing/typedecl_immediacy.cmi \ typing/typedecl.cmi \ typing/typecore.cmi \ typing/typeclass.cmi \ typing/subst.cmi \ typing/signature_group.cmi \ + typing/shape_reduce.cmi \ typing/shape.cmi \ typing/printtyp.cmi \ typing/path.cmi \ @@ -1673,9 +1766,8 @@ typing/typemod.cmo : \ typing/ident.cmi \ typing/env.cmi \ typing/ctype.cmi \ - utils/config.cmi \ file_formats/cmt_format.cmi \ - typing/cmt2annot.cmo \ + typing/cmt2annot.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ @@ -1685,14 +1777,17 @@ typing/typemod.cmo : \ typing/typemod.cmi typing/typemod.cmx : \ utils/warnings.cmx \ + parsing/unit_info.cmx \ typing/typetexp.cmx \ typing/types.cmx \ typing/typedtree.cmx \ + typing/typedecl_immediacy.cmx \ typing/typedecl.cmx \ typing/typecore.cmx \ typing/typeclass.cmx \ typing/subst.cmx \ typing/signature_group.cmx \ + typing/shape_reduce.cmx \ typing/shape.cmx \ typing/printtyp.cmx \ typing/path.cmx \ @@ -1708,7 +1803,6 @@ typing/typemod.cmx : \ typing/ident.cmx \ typing/env.cmx \ typing/ctype.cmx \ - utils/config.cmx \ file_formats/cmt_format.cmx \ typing/cmt2annot.cmx \ file_formats/cmi_format.cmx \ @@ -1719,6 +1813,7 @@ typing/typemod.cmx : \ parsing/asttypes.cmi \ typing/typemod.cmi typing/typemod.cmi : \ + parsing/unit_info.cmi \ typing/types.cmi \ typing/typedtree.cmi \ typing/typedecl.cmi \ @@ -1820,7 +1915,6 @@ typing/typetexp.cmo : \ typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ - utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ parsing/asttypes.cmi \ @@ -1841,7 +1935,6 @@ typing/typetexp.cmx : \ typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ - utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ parsing/asttypes.cmi \ @@ -1864,7 +1957,6 @@ typing/untypeast.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ - typing/env.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ typing/untypeast.cmi @@ -1875,7 +1967,6 @@ typing/untypeast.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ typing/ident.cmx \ - typing/env.cmx \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ typing/untypeast.cmi @@ -1886,8 +1977,36 @@ typing/untypeast.cmi : \ parsing/longident.cmi \ parsing/location.cmi \ parsing/asttypes.cmi -bytecomp/bytegen.cmo : \ +typing/value_rec_check.cmo : \ + typing/value_rec_types.cmi \ typing/types.cmi \ + typing/typeopt.cmi \ + typing/typedtree.cmi \ + typing/primitive.cmi \ + typing/path.cmi \ + utils/misc.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi \ + parsing/asttypes.cmi \ + typing/value_rec_check.cmi +typing/value_rec_check.cmx : \ + typing/value_rec_types.cmi \ + typing/types.cmx \ + typing/typeopt.cmx \ + typing/typedtree.cmx \ + typing/primitive.cmx \ + typing/path.cmx \ + utils/misc.cmx \ + lambda/lambda.cmx \ + typing/ident.cmx \ + parsing/asttypes.cmi \ + typing/value_rec_check.cmi +typing/value_rec_check.cmi : \ + typing/value_rec_types.cmi \ + typing/typedtree.cmi \ + typing/ident.cmi +typing/value_rec_types.cmi : +bytecomp/bytegen.cmo : \ lambda/switch.cmi \ typing/subst.cmi \ typing/primitive.cmi \ @@ -1903,7 +2022,6 @@ bytecomp/bytegen.cmo : \ parsing/asttypes.cmi \ bytecomp/bytegen.cmi bytecomp/bytegen.cmx : \ - typing/types.cmx \ lambda/switch.cmx \ typing/subst.cmx \ typing/primitive.cmx \ @@ -1943,36 +2061,34 @@ bytecomp/bytelibrarian.cmx : \ bytecomp/bytelibrarian.cmi bytecomp/bytelibrarian.cmi : bytecomp/bytelink.cmo : \ - utils/warnings.cmi \ bytecomp/symtable.cmi \ bytecomp/opcodes.cmi \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ bytecomp/instruct.cmi \ - typing/ident.cmi \ bytecomp/emitcode.cmi \ bytecomp/dll.cmi \ utils/consistbl.cmi \ utils/config.cmi \ + utils/compression.cmi \ file_formats/cmo_format.cmi \ utils/clflags.cmi \ utils/ccomp.cmi \ bytecomp/bytesections.cmi \ bytecomp/bytelink.cmi bytecomp/bytelink.cmx : \ - utils/warnings.cmx \ bytecomp/symtable.cmx \ bytecomp/opcodes.cmx \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ bytecomp/instruct.cmx \ - typing/ident.cmx \ bytecomp/emitcode.cmx \ bytecomp/dll.cmx \ utils/consistbl.cmx \ utils/config.cmx \ + utils/compression.cmx \ file_formats/cmo_format.cmi \ utils/clflags.cmx \ utils/ccomp.cmx \ @@ -1983,8 +2099,10 @@ bytecomp/bytelink.cmi : \ utils/misc.cmi \ file_formats/cmo_format.cmi bytecomp/bytepackager.cmo : \ + parsing/unit_info.cmi \ typing/typemod.cmi \ lambda/translmod.cmi \ + bytecomp/symtable.cmi \ typing/subst.cmi \ lambda/simplif.cmi \ lambda/printlambda.cmi \ @@ -1997,14 +2115,17 @@ bytecomp/bytepackager.cmo : \ typing/env.cmi \ bytecomp/emitcode.cmi \ utils/config.cmi \ + utils/compression.cmi \ file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytelink.cmi \ bytecomp/bytegen.cmi \ bytecomp/bytepackager.cmi bytecomp/bytepackager.cmx : \ + parsing/unit_info.cmx \ typing/typemod.cmx \ lambda/translmod.cmx \ + bytecomp/symtable.cmx \ typing/subst.cmx \ lambda/simplif.cmx \ lambda/printlambda.cmx \ @@ -2017,14 +2138,15 @@ bytecomp/bytepackager.cmx : \ typing/env.cmx \ bytecomp/emitcode.cmx \ utils/config.cmx \ + utils/compression.cmx \ file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytelink.cmx \ bytecomp/bytegen.cmx \ bytecomp/bytepackager.cmi bytecomp/bytepackager.cmi : \ - typing/ident.cmi \ - typing/env.cmi + typing/env.cmi \ + file_formats/cmo_format.cmi bytecomp/bytesections.cmo : \ utils/config.cmi \ bytecomp/bytesections.cmi @@ -2044,7 +2166,9 @@ bytecomp/dll.cmx : \ bytecomp/dll.cmi bytecomp/dll.cmi : bytecomp/emitcode.cmo : \ + parsing/unit_info.cmi \ lambda/translmod.cmi \ + bytecomp/symtable.cmi \ typing/primitive.cmi \ bytecomp/opcodes.cmi \ utils/misc.cmi \ @@ -2054,6 +2178,7 @@ bytecomp/emitcode.cmo : \ typing/ident.cmi \ typing/env.cmi \ utils/config.cmi \ + utils/compression.cmi \ file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytegen.cmi \ @@ -2061,7 +2186,9 @@ bytecomp/emitcode.cmo : \ parsing/asttypes.cmi \ bytecomp/emitcode.cmi bytecomp/emitcode.cmx : \ + parsing/unit_info.cmx \ lambda/translmod.cmx \ + bytecomp/symtable.cmx \ typing/primitive.cmx \ bytecomp/opcodes.cmx \ utils/misc.cmx \ @@ -2071,6 +2198,7 @@ bytecomp/emitcode.cmx : \ typing/ident.cmx \ typing/env.cmx \ utils/config.cmx \ + utils/compression.cmx \ file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytegen.cmx \ @@ -2078,6 +2206,7 @@ bytecomp/emitcode.cmx : \ parsing/asttypes.cmi \ bytecomp/emitcode.cmi bytecomp/emitcode.cmi : \ + parsing/unit_info.cmi \ utils/misc.cmi \ bytecomp/instruct.cmi \ typing/ident.cmi \ @@ -2146,8 +2275,6 @@ bytecomp/symtable.cmo : \ utils/config.cmi \ file_formats/cmo_format.cmi \ utils/clflags.cmi \ - bytecomp/bytesections.cmi \ - parsing/asttypes.cmi \ bytecomp/symtable.cmi bytecomp/symtable.cmx : \ lambda/runtimedef.cmx \ @@ -2161,22 +2288,23 @@ bytecomp/symtable.cmx : \ utils/config.cmx \ file_formats/cmo_format.cmi \ utils/clflags.cmx \ - bytecomp/bytesections.cmx \ - parsing/asttypes.cmi \ bytecomp/symtable.cmi bytecomp/symtable.cmi : \ - utils/misc.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ file_formats/cmo_format.cmi asmcomp/CSE.cmo : \ asmcomp/mach.cmi \ asmcomp/CSEgen.cmi \ - asmcomp/arch.cmo + asmcomp/arch.cmi \ + asmcomp/CSE.cmi asmcomp/CSE.cmx : \ asmcomp/mach.cmx \ asmcomp/CSEgen.cmx \ - asmcomp/arch.cmx + asmcomp/arch.cmx \ + asmcomp/CSE.cmi +asmcomp/CSE.cmi : \ + asmcomp/mach.cmi asmcomp/CSEgen.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -2212,12 +2340,22 @@ asmcomp/afl_instrument.cmi : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi asmcomp/arch.cmo : \ + asmcomp/x86_ast.cmi \ + lambda/lambda.cmi \ utils/config.cmi \ - utils/clflags.cmi + utils/clflags.cmi \ + asmcomp/arch.cmi asmcomp/arch.cmx : \ + asmcomp/x86_ast.cmi \ + lambda/lambda.cmx \ utils/config.cmx \ - utils/clflags.cmx + utils/clflags.cmx \ + asmcomp/arch.cmi +asmcomp/arch.cmi : \ + asmcomp/x86_ast.cmi \ + lambda/lambda.cmi asmcomp/asmgen.cmo : \ + parsing/unit_info.cmi \ lambda/translmod.cmi \ asmcomp/split.cmi \ asmcomp/spill.cmi \ @@ -2257,10 +2395,11 @@ asmcomp/asmgen.cmo : \ asmcomp/cmm.cmi \ utils/clflags.cmi \ middle_end/clambda.cmi \ - asmcomp/CSE.cmo \ + asmcomp/CSE.cmi \ middle_end/backend_intf.cmi \ asmcomp/asmgen.cmi asmcomp/asmgen.cmx : \ + parsing/unit_info.cmx \ lambda/translmod.cmx \ asmcomp/split.cmx \ asmcomp/spill.cmx \ @@ -2304,6 +2443,7 @@ asmcomp/asmgen.cmx : \ middle_end/backend_intf.cmi \ asmcomp/asmgen.cmi asmcomp/asmgen.cmi : \ + parsing/unit_info.cmi \ lambda/lambda.cmi \ asmcomp/emitaux.cmi \ asmcomp/cmm.cmi \ @@ -2337,6 +2477,7 @@ asmcomp/asmlibrarian.cmx : \ asmcomp/asmlibrarian.cmi asmcomp/asmlibrarian.cmi : asmcomp/asmlink.cmo : \ + asmcomp/thread_sanitizer.cmi \ lambda/runtimedef.cmi \ utils/profile.cmi \ utils/misc.cmi \ @@ -2355,6 +2496,7 @@ asmcomp/asmlink.cmo : \ asmcomp/asmgen.cmi \ asmcomp/asmlink.cmi asmcomp/asmlink.cmx : \ + asmcomp/thread_sanitizer.cmx \ lambda/runtimedef.cmx \ utils/profile.cmx \ utils/misc.cmx \ @@ -2376,6 +2518,7 @@ asmcomp/asmlink.cmi : \ utils/misc.cmi \ file_formats/cmx_format.cmi asmcomp/asmpackager.cmo : \ + parsing/unit_info.cmi \ typing/typemod.cmi \ lambda/translmod.cmi \ lambda/simplif.cmi \ @@ -2400,6 +2543,7 @@ asmcomp/asmpackager.cmo : \ asmcomp/asmgen.cmi \ asmcomp/asmpackager.cmi asmcomp/asmpackager.cmx : \ + parsing/unit_info.cmx \ typing/typemod.cmx \ lambda/translmod.cmx \ lambda/simplif.cmx \ @@ -2431,28 +2575,23 @@ asmcomp/branch_relaxation.cmo : \ asmcomp/mach.cmi \ asmcomp/linear.cmi \ asmcomp/cmm.cmi \ - asmcomp/branch_relaxation_intf.cmo \ + asmcomp/branch_relaxation_intf.cmi \ asmcomp/branch_relaxation.cmi asmcomp/branch_relaxation.cmx : \ utils/misc.cmx \ asmcomp/mach.cmx \ asmcomp/linear.cmx \ asmcomp/cmm.cmx \ - asmcomp/branch_relaxation_intf.cmx \ + asmcomp/branch_relaxation_intf.cmi \ asmcomp/branch_relaxation.cmi asmcomp/branch_relaxation.cmi : \ asmcomp/linear.cmi \ - asmcomp/branch_relaxation_intf.cmo -asmcomp/branch_relaxation_intf.cmo : \ + asmcomp/branch_relaxation_intf.cmi +asmcomp/branch_relaxation_intf.cmi : \ asmcomp/linear.cmi \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ - asmcomp/arch.cmo -asmcomp/branch_relaxation_intf.cmx : \ - asmcomp/linear.cmx \ - lambda/debuginfo.cmx \ - asmcomp/cmm.cmx \ - asmcomp/arch.cmx + asmcomp/arch.cmi asmcomp/cmm.cmo : \ utils/targetint.cmi \ utils/misc.cmi \ @@ -2460,7 +2599,6 @@ asmcomp/cmm.cmo : \ lambda/debuginfo.cmi \ middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo \ asmcomp/cmm.cmi asmcomp/cmm.cmx : \ utils/targetint.cmx \ @@ -2469,7 +2607,6 @@ asmcomp/cmm.cmx : \ lambda/debuginfo.cmx \ middle_end/backend_var.cmx \ parsing/asttypes.cmi \ - asmcomp/arch.cmx \ asmcomp/cmm.cmi asmcomp/cmm.cmi : \ utils/targetint.cmi \ @@ -2498,7 +2635,7 @@ asmcomp/cmm_helpers.cmo : \ middle_end/clambda.cmi \ middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/cmm_helpers.cmi asmcomp/cmm_helpers.cmx : \ utils/targetint.cmx \ @@ -2545,7 +2682,7 @@ asmcomp/cmm_invariants.cmx : \ asmcomp/cmm_invariants.cmi : \ asmcomp/cmm.cmi asmcomp/cmmgen.cmo : \ - typing/types.cmi \ + asmcomp/thread_sanitizer.cmi \ middle_end/printclambda_primitives.cmi \ typing/primitive.cmi \ utils/misc.cmi \ @@ -2561,11 +2698,10 @@ asmcomp/cmmgen.cmo : \ middle_end/clambda.cmi \ middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo \ asmcomp/afl_instrument.cmi \ asmcomp/cmmgen.cmi asmcomp/cmmgen.cmx : \ - typing/types.cmx \ + asmcomp/thread_sanitizer.cmx \ middle_end/printclambda_primitives.cmx \ typing/primitive.cmx \ utils/misc.cmx \ @@ -2581,7 +2717,6 @@ asmcomp/cmmgen.cmx : \ middle_end/clambda.cmx \ middle_end/backend_var.cmx \ parsing/asttypes.cmi \ - asmcomp/arch.cmx \ asmcomp/afl_instrument.cmx \ asmcomp/cmmgen.cmi asmcomp/cmmgen.cmi : \ @@ -2617,7 +2752,7 @@ asmcomp/comballoc.cmo : \ asmcomp/mach.cmi \ lambda/debuginfo.cmi \ utils/config.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/comballoc.cmi asmcomp/comballoc.cmx : \ asmcomp/reg.cmx \ @@ -2640,14 +2775,12 @@ asmcomp/dataflow.cmi : \ asmcomp/mach.cmi asmcomp/deadcode.cmo : \ asmcomp/reg.cmi \ - asmcomp/proc.cmi \ utils/numbers.cmi \ asmcomp/mach.cmi \ asmcomp/cmm.cmi \ asmcomp/deadcode.cmi asmcomp/deadcode.cmx : \ asmcomp/reg.cmx \ - asmcomp/proc.cmx \ utils/numbers.cmx \ asmcomp/mach.cmx \ asmcomp/cmm.cmx \ @@ -2675,7 +2808,7 @@ asmcomp/emit.cmo : \ asmcomp/cmm.cmi \ utils/clflags.cmi \ asmcomp/branch_relaxation.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/emit.cmi asmcomp/emit.cmx : \ asmcomp/x86_proc.cmx \ @@ -2707,14 +2840,16 @@ asmcomp/emitaux.cmo : \ asmcomp/emitenv.cmi \ lambda/debuginfo.cmi \ utils/config.cmi \ + middle_end/compilenv.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/emitaux.cmi asmcomp/emitaux.cmx : \ asmcomp/emitenv.cmi \ lambda/debuginfo.cmx \ utils/config.cmx \ + middle_end/compilenv.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ asmcomp/arch.cmx \ @@ -2773,8 +2908,8 @@ asmcomp/linear.cmi : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi asmcomp/linearize.cmo : \ + asmcomp/stackframe.cmi \ asmcomp/reg.cmi \ - asmcomp/proc.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ asmcomp/linear.cmi \ @@ -2782,8 +2917,8 @@ asmcomp/linearize.cmo : \ asmcomp/cmm.cmi \ asmcomp/linearize.cmi asmcomp/linearize.cmx : \ + asmcomp/stackframe.cmx \ asmcomp/reg.cmx \ - asmcomp/proc.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ asmcomp/linear.cmx \ @@ -2803,7 +2938,8 @@ asmcomp/linscan.cmx : \ asmcomp/proc.cmx \ asmcomp/interval.cmx \ asmcomp/linscan.cmi -asmcomp/linscan.cmi : +asmcomp/linscan.cmi : \ + asmcomp/interval.cmi asmcomp/liveness.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -2828,7 +2964,7 @@ asmcomp/mach.cmo : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/mach.cmi asmcomp/mach.cmx : \ asmcomp/reg.cmx \ @@ -2844,7 +2980,7 @@ asmcomp/mach.cmi : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo + asmcomp/arch.cmi asmcomp/polling.cmo : \ utils/numbers.cmi \ utils/misc.cmi \ @@ -2915,7 +3051,7 @@ asmcomp/printmach.cmo : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/printmach.cmi asmcomp/printmach.cmx : \ asmcomp/reg.cmx \ @@ -2931,7 +3067,8 @@ asmcomp/printmach.cmx : \ asmcomp/printmach.cmi asmcomp/printmach.cmi : \ asmcomp/reg.cmi \ - asmcomp/mach.cmi + asmcomp/mach.cmi \ + asmcomp/interval.cmi asmcomp/proc.cmo : \ asmcomp/x86_proc.cmi \ asmcomp/reg.cmi \ @@ -2939,7 +3076,7 @@ asmcomp/proc.cmo : \ asmcomp/mach.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/proc.cmi asmcomp/proc.cmx : \ asmcomp/x86_proc.cmx \ @@ -2971,7 +3108,7 @@ asmcomp/reload.cmo : \ asmcomp/mach.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/reload.cmi asmcomp/reload.cmx : \ asmcomp/reloadgen.cmx \ @@ -3003,7 +3140,7 @@ asmcomp/schedgen.cmo : \ asmcomp/linear.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/schedgen.cmi asmcomp/schedgen.cmx : \ asmcomp/reg.cmx \ @@ -3037,7 +3174,7 @@ asmcomp/selectgen.cmo : \ asmcomp/cmm.cmi \ middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/selectgen.cmi asmcomp/selectgen.cmx : \ asmcomp/reg.cmx \ @@ -3061,18 +3198,22 @@ asmcomp/selectgen.cmi : \ asmcomp/cmm.cmi \ middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo + asmcomp/arch.cmi asmcomp/selection.cmo : \ asmcomp/selectgen.cmi \ + asmcomp/reg.cmi \ asmcomp/proc.cmi \ + utils/misc.cmi \ asmcomp/mach.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/selection.cmi asmcomp/selection.cmx : \ asmcomp/selectgen.cmx \ + asmcomp/reg.cmx \ asmcomp/proc.cmx \ + utils/misc.cmx \ asmcomp/mach.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ @@ -3110,13 +3251,38 @@ asmcomp/split.cmx : \ asmcomp/split.cmi asmcomp/split.cmi : \ asmcomp/mach.cmi +asmcomp/stackframe.cmo : \ + asmcomp/stackframegen.cmi \ + asmcomp/mach.cmi \ + utils/config.cmi \ + asmcomp/stackframe.cmi +asmcomp/stackframe.cmx : \ + asmcomp/stackframegen.cmx \ + asmcomp/mach.cmx \ + utils/config.cmx \ + asmcomp/stackframe.cmi +asmcomp/stackframe.cmi : \ + asmcomp/stackframegen.cmi \ + asmcomp/mach.cmi +asmcomp/stackframegen.cmo : \ + asmcomp/mach.cmi \ + lambda/lambda.cmi \ + utils/clflags.cmi \ + asmcomp/stackframegen.cmi +asmcomp/stackframegen.cmx : \ + asmcomp/mach.cmx \ + lambda/lambda.cmx \ + utils/clflags.cmx \ + asmcomp/stackframegen.cmi +asmcomp/stackframegen.cmi : \ + asmcomp/mach.cmi asmcomp/strmatch.cmo : \ lambda/lambda.cmi \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ asmcomp/strmatch.cmi asmcomp/strmatch.cmx : \ lambda/lambda.cmx \ @@ -3129,6 +3295,22 @@ asmcomp/strmatch.cmx : \ asmcomp/strmatch.cmi : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi +asmcomp/thread_sanitizer.cmo : \ + lambda/debuginfo.cmi \ + asmcomp/cmm_helpers.cmi \ + asmcomp/cmm.cmi \ + middle_end/backend_var.cmi \ + parsing/asttypes.cmi \ + asmcomp/thread_sanitizer.cmi +asmcomp/thread_sanitizer.cmx : \ + lambda/debuginfo.cmx \ + asmcomp/cmm_helpers.cmx \ + asmcomp/cmm.cmx \ + middle_end/backend_var.cmx \ + parsing/asttypes.cmi \ + asmcomp/thread_sanitizer.cmi +asmcomp/thread_sanitizer.cmi : \ + asmcomp/cmm.cmi asmcomp/x86_ast.cmi : asmcomp/x86_dsl.cmo : \ asmcomp/x86_proc.cmi \ @@ -3166,6 +3348,7 @@ asmcomp/x86_proc.cmo : \ asmcomp/x86_ast.cmi \ utils/misc.cmi \ utils/config.cmi \ + middle_end/compilenv.cmi \ utils/clflags.cmi \ utils/ccomp.cmi \ asmcomp/x86_proc.cmi @@ -3173,6 +3356,7 @@ asmcomp/x86_proc.cmx : \ asmcomp/x86_ast.cmi \ utils/misc.cmx \ utils/config.cmx \ + middle_end/compilenv.cmx \ utils/clflags.cmx \ utils/ccomp.cmx \ asmcomp/x86_proc.cmi @@ -3596,6 +3780,7 @@ lambda/switch.cmx : \ lambda/switch.cmi : lambda/tmc.cmo : \ utils/warnings.cmi \ + utils/misc.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ @@ -3604,6 +3789,7 @@ lambda/tmc.cmo : \ lambda/tmc.cmi lambda/tmc.cmx : \ utils/warnings.cmx \ + utils/misc.cmx \ parsing/location.cmx \ lambda/lambda.cmx \ typing/ident.cmx \ @@ -3621,6 +3807,7 @@ lambda/translattribute.cmo : \ parsing/location.cmi \ lambda/lambda.cmi \ utils/config.cmi \ + parsing/builtin_attributes.cmi \ lambda/translattribute.cmi lambda/translattribute.cmx : \ utils/warnings.cmx \ @@ -3631,6 +3818,7 @@ lambda/translattribute.cmx : \ parsing/location.cmx \ lambda/lambda.cmx \ utils/config.cmx \ + parsing/builtin_attributes.cmx \ lambda/translattribute.cmi lambda/translattribute.cmi : \ typing/typedtree.cmi \ @@ -3638,12 +3826,14 @@ lambda/translattribute.cmi : \ parsing/location.cmi \ lambda/lambda.cmi lambda/translclass.cmo : \ + typing/value_rec_types.cmi \ typing/types.cmi \ typing/typeopt.cmi \ typing/typedtree.cmi \ lambda/translobj.cmi \ lambda/translcore.cmi \ typing/path.cmi \ + utils/misc.cmi \ lambda/matching.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ @@ -3655,12 +3845,14 @@ lambda/translclass.cmo : \ parsing/asttypes.cmi \ lambda/translclass.cmi lambda/translclass.cmx : \ + typing/value_rec_types.cmi \ typing/types.cmx \ typing/typeopt.cmx \ typing/typedtree.cmx \ lambda/translobj.cmx \ lambda/translcore.cmx \ typing/path.cmx \ + utils/misc.cmx \ lambda/matching.cmx \ parsing/location.cmx \ lambda/lambda.cmx \ @@ -3672,6 +3864,7 @@ lambda/translclass.cmx : \ parsing/asttypes.cmi \ lambda/translclass.cmi lambda/translclass.cmi : \ + typing/value_rec_types.cmi \ typing/typedtree.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ @@ -3679,6 +3872,7 @@ lambda/translclass.cmi : \ lambda/debuginfo.cmi \ parsing/asttypes.cmi lambda/translcore.cmo : \ + lambda/value_rec_compiler.cmi \ typing/types.cmi \ typing/typeopt.cmi \ typing/typedtree.cmi \ @@ -3690,11 +3884,8 @@ lambda/translcore.cmo : \ typing/primitive.cmi \ typing/predef.cmi \ typing/path.cmi \ - parsing/parsetree.cmi \ - typing/parmatch.cmi \ utils/misc.cmi \ lambda/matching.cmi \ - parsing/longident.cmi \ parsing/location.cmi \ lambda/lambda.cmi \ typing/ident.cmi \ @@ -3706,6 +3897,7 @@ lambda/translcore.cmo : \ parsing/asttypes.cmi \ lambda/translcore.cmi lambda/translcore.cmx : \ + lambda/value_rec_compiler.cmx \ typing/types.cmx \ typing/typeopt.cmx \ typing/typedtree.cmx \ @@ -3717,11 +3909,8 @@ lambda/translcore.cmx : \ typing/primitive.cmx \ typing/predef.cmx \ typing/path.cmx \ - parsing/parsetree.cmi \ - typing/parmatch.cmx \ utils/misc.cmx \ lambda/matching.cmx \ - parsing/longident.cmx \ parsing/location.cmx \ lambda/lambda.cmx \ typing/ident.cmx \ @@ -3742,6 +3931,7 @@ lambda/translcore.cmi : \ lambda/debuginfo.cmi \ parsing/asttypes.cmi lambda/translmod.cmo : \ + lambda/value_rec_compiler.cmi \ typing/types.cmi \ typing/typedtree.cmi \ lambda/translprim.cmi \ @@ -3764,6 +3954,7 @@ lambda/translmod.cmo : \ parsing/asttypes.cmi \ lambda/translmod.cmi lambda/translmod.cmx : \ + lambda/value_rec_compiler.cmx \ typing/types.cmx \ typing/typedtree.cmx \ lambda/translprim.cmx \ @@ -3862,67 +4053,111 @@ lambda/translprim.cmi : \ lambda/lambda.cmi \ typing/ident.cmi \ typing/env.cmi +lambda/value_rec_compiler.cmo : \ + typing/value_rec_types.cmi \ + typing/primitive.cmi \ + utils/misc.cmi \ + utils/lazy_backtrack.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi \ + lambda/debuginfo.cmi \ + parsing/asttypes.cmi \ + lambda/value_rec_compiler.cmi +lambda/value_rec_compiler.cmx : \ + typing/value_rec_types.cmi \ + typing/primitive.cmx \ + utils/misc.cmx \ + utils/lazy_backtrack.cmx \ + lambda/lambda.cmx \ + typing/ident.cmx \ + lambda/debuginfo.cmx \ + parsing/asttypes.cmi \ + lambda/value_rec_compiler.cmi +lambda/value_rec_compiler.cmi : \ + typing/value_rec_types.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi file_formats/cmi_format.cmo : \ typing/types.cmi \ utils/misc.cmi \ parsing/location.cmi \ utils/config.cmi \ + utils/compression.cmi \ file_formats/cmi_format.cmi file_formats/cmi_format.cmx : \ typing/types.cmx \ utils/misc.cmx \ parsing/location.cmx \ utils/config.cmx \ + utils/compression.cmx \ file_formats/cmi_format.cmi file_formats/cmi_format.cmi : \ typing/types.cmi \ utils/misc.cmi -file_formats/cmo_format.cmi : \ - utils/misc.cmi \ - lambda/lambda.cmi \ - typing/ident.cmi +file_formats/cmo_format.cmi : file_formats/cmt_format.cmo : \ + parsing/unit_info.cmi \ typing/types.cmi \ typing/typedtree.cmi \ typing/tast_mapper.cmi \ + typing/tast_iterator.cmi \ + typing/shape_reduce.cmi \ typing/shape.cmi \ + typing/predef.cmi \ + typing/path.cmi \ utils/misc.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ parsing/lexer.cmi \ + typing/ident.cmi \ typing/env.cmi \ utils/config.cmi \ + utils/compression.cmi \ file_formats/cmi_format.cmi \ utils/clflags.cmi \ + typing/btype.cmi \ file_formats/cmt_format.cmi file_formats/cmt_format.cmx : \ + parsing/unit_info.cmx \ typing/types.cmx \ typing/typedtree.cmx \ typing/tast_mapper.cmx \ + typing/tast_iterator.cmx \ + typing/shape_reduce.cmx \ typing/shape.cmx \ + typing/predef.cmx \ + typing/path.cmx \ utils/misc.cmx \ + parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ parsing/lexer.cmx \ + typing/ident.cmx \ typing/env.cmx \ utils/config.cmx \ + utils/compression.cmx \ file_formats/cmi_format.cmx \ utils/clflags.cmx \ + typing/btype.cmx \ file_formats/cmt_format.cmi file_formats/cmt_format.cmi : \ + parsing/unit_info.cmi \ typing/types.cmi \ typing/typedtree.cmi \ + typing/shape_reduce.cmi \ typing/shape.cmi \ utils/misc.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ + utils/load_path.cmi \ typing/env.cmi \ file_formats/cmi_format.cmi file_formats/cmx_format.cmi : \ utils/misc.cmi \ middle_end/flambda/export_info.cmi \ middle_end/clambda.cmi -file_formats/cmxs_format.cmi : \ - utils/misc.cmi +file_formats/cmxs_format.cmi : file_formats/linear_format.cmo : \ utils/misc.cmi \ parsing/location.cmi \ @@ -3954,7 +4189,6 @@ middle_end/closure/closure.cmo : \ typing/env.cmi \ lambda/debuginfo.cmi \ middle_end/convert_primitives.cmi \ - utils/config.cmi \ middle_end/compilenv.cmi \ utils/clflags.cmi \ middle_end/clambda_primitives.cmi \ @@ -3977,7 +4211,6 @@ middle_end/closure/closure.cmx : \ typing/env.cmx \ lambda/debuginfo.cmx \ middle_end/convert_primitives.cmx \ - utils/config.cmx \ middle_end/compilenv.cmx \ utils/clflags.cmx \ middle_end/clambda_primitives.cmx \ @@ -4167,7 +4400,6 @@ middle_end/flambda/closure_conversion.cmo : \ middle_end/flambda/flambda.cmi \ lambda/debuginfo.cmi \ middle_end/convert_primitives.cmi \ - utils/config.cmi \ middle_end/compilation_unit.cmi \ middle_end/flambda/base_types/closure_origin.cmi \ middle_end/flambda/base_types/closure_id.cmi \ @@ -4196,7 +4428,6 @@ middle_end/flambda/closure_conversion.cmx : \ middle_end/flambda/flambda.cmx \ lambda/debuginfo.cmx \ middle_end/convert_primitives.cmx \ - utils/config.cmx \ middle_end/compilation_unit.cmx \ middle_end/flambda/base_types/closure_origin.cmx \ middle_end/flambda/base_types/closure_id.cmx \ @@ -5187,7 +5418,6 @@ middle_end/flambda/invariant_params.cmi : \ middle_end/backend_intf.cmi middle_end/flambda/lift_code.cmo : \ middle_end/variable.cmi \ - utils/strongly_connected_components.cmi \ middle_end/flambda/base_types/mutable_variable.cmi \ lambda/lambda.cmi \ utils/int_replace_polymorphic_compare.cmi \ @@ -5197,7 +5427,6 @@ middle_end/flambda/lift_code.cmo : \ middle_end/flambda/lift_code.cmi middle_end/flambda/lift_code.cmx : \ middle_end/variable.cmx \ - utils/strongly_connected_components.cmx \ middle_end/flambda/base_types/mutable_variable.cmx \ lambda/lambda.cmx \ utils/int_replace_polymorphic_compare.cmx \ @@ -5258,22 +5487,18 @@ middle_end/flambda/lift_let_to_initialize_symbol.cmo : \ middle_end/variable.cmi \ middle_end/flambda/base_types/tag.cmi \ middle_end/symbol.cmi \ - middle_end/internal_variable_names.cmi \ utils/int_replace_polymorphic_compare.cmi \ middle_end/flambda/flambda_utils.cmi \ middle_end/flambda/flambda.cmi \ - lambda/debuginfo.cmi \ parsing/asttypes.cmi \ middle_end/flambda/lift_let_to_initialize_symbol.cmi middle_end/flambda/lift_let_to_initialize_symbol.cmx : \ middle_end/variable.cmx \ middle_end/flambda/base_types/tag.cmx \ middle_end/symbol.cmx \ - middle_end/internal_variable_names.cmx \ utils/int_replace_polymorphic_compare.cmx \ middle_end/flambda/flambda_utils.cmx \ middle_end/flambda/flambda.cmx \ - lambda/debuginfo.cmx \ parsing/asttypes.cmi \ middle_end/flambda/lift_let_to_initialize_symbol.cmi middle_end/flambda/lift_let_to_initialize_symbol.cmi : \ @@ -5466,6 +5691,7 @@ middle_end/flambda/simple_value_approx.cmo : \ middle_end/compilation_unit.cmi \ middle_end/flambda/base_types/closure_origin.cmi \ middle_end/flambda/base_types/closure_id.cmi \ + utils/clflags.cmi \ middle_end/flambda/allocated_const.cmi \ middle_end/flambda/simple_value_approx.cmi middle_end/flambda/simple_value_approx.cmx : \ @@ -5490,6 +5716,7 @@ middle_end/flambda/simple_value_approx.cmx : \ middle_end/compilation_unit.cmx \ middle_end/flambda/base_types/closure_origin.cmx \ middle_end/flambda/base_types/closure_id.cmx \ + utils/clflags.cmx \ middle_end/flambda/allocated_const.cmx \ middle_end/flambda/simple_value_approx.cmi middle_end/flambda/simple_value_approx.cmi : \ @@ -5903,6 +6130,7 @@ driver/compenv.cmx : \ driver/compenv.cmi : \ utils/clflags.cmi driver/compile.cmo : \ + parsing/unit_info.cmi \ typing/typedtree.cmi \ lambda/translmod.cmi \ lambda/simplif.cmi \ @@ -5917,6 +6145,7 @@ driver/compile.cmo : \ bytecomp/bytegen.cmi \ driver/compile.cmi driver/compile.cmx : \ + parsing/unit_info.cmx \ typing/typedtree.cmx \ lambda/translmod.cmx \ lambda/simplif.cmx \ @@ -5938,6 +6167,7 @@ driver/compile.cmi : \ utils/clflags.cmi driver/compile_common.cmo : \ utils/warnings.cmi \ + parsing/unit_info.cmi \ typing/typemod.cmi \ typing/typedtree.cmi \ typing/typecore.cmi \ @@ -5951,14 +6181,13 @@ driver/compile_common.cmo : \ utils/misc.cmi \ typing/includemod.cmi \ typing/env.cmi \ - utils/config.cmi \ driver/compmisc.cmi \ - driver/compenv.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ driver/compile_common.cmi driver/compile_common.cmx : \ utils/warnings.cmx \ + parsing/unit_info.cmx \ typing/typemod.cmx \ typing/typedtree.cmx \ typing/typecore.cmx \ @@ -5972,13 +6201,12 @@ driver/compile_common.cmx : \ utils/misc.cmx \ typing/includemod.cmx \ typing/env.cmx \ - utils/config.cmx \ driver/compmisc.cmx \ - driver/compenv.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ driver/compile_common.cmi driver/compile_common.cmi : \ + parsing/unit_info.cmi \ typing/typedtree.cmi \ parsing/parsetree.cmi \ typing/env.cmi @@ -6009,6 +6237,7 @@ driver/compmisc.cmx : \ utils/clflags.cmx \ driver/compmisc.cmi driver/compmisc.cmi : \ + utils/load_path.cmi \ typing/env.cmi \ utils/clflags.cmi driver/errors.cmo : \ @@ -6019,9 +6248,12 @@ driver/errors.cmx : \ driver/errors.cmi driver/errors.cmi : driver/main.cmo : \ - driver/maindriver.cmi + driver/maindriver.cmi \ + driver/main.cmi driver/main.cmx : \ - driver/maindriver.cmx + driver/maindriver.cmx \ + driver/main.cmi +driver/main.cmi : driver/main_args.cmo : \ utils/warnings.cmi \ utils/profile.cmi \ @@ -6073,6 +6305,7 @@ driver/maindriver.cmx : \ driver/maindriver.cmi driver/maindriver.cmi : driver/makedepend.cmo : \ + parsing/unit_info.cmi \ driver/pparse.cmi \ parsing/parsetree.cmi \ parsing/parser.cmi \ @@ -6086,6 +6319,7 @@ driver/makedepend.cmo : \ utils/clflags.cmi \ driver/makedepend.cmi driver/makedepend.cmx : \ + parsing/unit_info.cmx \ driver/pparse.cmx \ parsing/parsetree.cmi \ parsing/parser.cmx \ @@ -6100,6 +6334,7 @@ driver/makedepend.cmx : \ driver/makedepend.cmi driver/makedepend.cmi : driver/optcompile.cmo : \ + parsing/unit_info.cmi \ typing/typedtree.cmi \ lambda/translmod.cmi \ lambda/simplif.cmi \ @@ -6116,6 +6351,7 @@ driver/optcompile.cmo : \ asmcomp/asmgen.cmi \ driver/optcompile.cmi driver/optcompile.cmx : \ + parsing/unit_info.cmx \ typing/typedtree.cmx \ lambda/translmod.cmx \ lambda/simplif.cmx \ @@ -6144,9 +6380,12 @@ driver/opterrors.cmx : \ driver/opterrors.cmi driver/opterrors.cmi : driver/optmain.cmo : \ - driver/optmaindriver.cmi + driver/optmaindriver.cmi \ + driver/optmain.cmi driver/optmain.cmx : \ - driver/optmaindriver.cmx + driver/optmaindriver.cmx \ + driver/optmain.cmi +driver/optmain.cmi : driver/optmaindriver.cmo : \ utils/warnings.cmi \ utils/profile.cmi \ @@ -6165,7 +6404,7 @@ driver/optmaindriver.cmo : \ asmcomp/asmpackager.cmi \ asmcomp/asmlink.cmi \ asmcomp/asmlibrarian.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ driver/optmaindriver.cmi driver/optmaindriver.cmx : \ utils/warnings.cmx \ @@ -6217,17 +6456,20 @@ driver/pparse.cmx : \ driver/pparse.cmi : \ parsing/parsetree.cmi toplevel/expunge.cmo : \ + parsing/unit_info.cmi \ bytecomp/symtable.cmi \ - lambda/runtimedef.cmi \ utils/misc.cmi \ - typing/ident.cmi \ - bytecomp/bytesections.cmi + file_formats/cmo_format.cmi \ + bytecomp/bytesections.cmi \ + toplevel/expunge.cmi toplevel/expunge.cmx : \ + parsing/unit_info.cmx \ bytecomp/symtable.cmx \ - lambda/runtimedef.cmx \ utils/misc.cmx \ - typing/ident.cmx \ - bytecomp/bytesections.cmx + file_formats/cmo_format.cmi \ + bytecomp/bytesections.cmx \ + toplevel/expunge.cmi +toplevel/expunge.cmi : toplevel/genprintval.cmo : \ typing/types.cmi \ parsing/syntaxerr.cmi \ @@ -6270,7 +6512,9 @@ toplevel/genprintval.cmi : \ typing/outcometree.cmi \ typing/env.cmi toplevel/topcommon.cmo : \ + parsing/unit_info.cmi \ typing/typedtree.cmi \ + bytecomp/symtable.cmi \ parsing/printast.cmi \ typing/predef.cmi \ parsing/pprintast.cmi \ @@ -6292,12 +6536,15 @@ toplevel/topcommon.cmo : \ utils/config.cmi \ driver/compmisc.cmi \ driver/compenv.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ toplevel/topcommon.cmi toplevel/topcommon.cmx : \ + parsing/unit_info.cmx \ typing/typedtree.cmx \ + bytecomp/symtable.cmx \ parsing/printast.cmx \ typing/predef.cmx \ parsing/pprintast.cmx \ @@ -6319,6 +6566,7 @@ toplevel/topcommon.cmx : \ utils/config.cmx \ driver/compmisc.cmx \ driver/compenv.cmx \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ @@ -6332,12 +6580,14 @@ toplevel/topcommon.cmi : \ typing/outcometree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + utils/load_path.cmi \ typing/ident.cmi \ toplevel/genprintval.cmi \ typing/env.cmi toplevel/topdirs.cmo : \ utils/warnings.cmi \ typing/types.cmi \ + toplevel/topprinters.cmi \ toplevel/toploop.cmi \ toplevel/topeval.cmi \ typing/printtyp.cmi \ @@ -6362,6 +6612,7 @@ toplevel/topdirs.cmo : \ toplevel/topdirs.cmx : \ utils/warnings.cmx \ typing/types.cmx \ + toplevel/topprinters.cmx \ toplevel/toploop.cmx \ toplevel/topeval.cmi \ typing/printtyp.cmx \ @@ -6428,12 +6679,34 @@ toplevel/toploop.cmi : \ typing/outcometree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + utils/load_path.cmi \ typing/env.cmi toplevel/topmain.cmi : +toplevel/topprinters.cmo : \ + typing/types.cmi \ + typing/predef.cmi \ + typing/path.cmi \ + typing/ident.cmi \ + typing/ctype.cmi \ + parsing/asttypes.cmi \ + toplevel/topprinters.cmi +toplevel/topprinters.cmx : \ + typing/types.cmx \ + typing/predef.cmx \ + typing/path.cmx \ + typing/ident.cmx \ + typing/ctype.cmx \ + parsing/asttypes.cmi \ + toplevel/topprinters.cmi +toplevel/topprinters.cmi : \ + typing/types.cmi toplevel/topstart.cmo : \ - toplevel/topmain.cmi + toplevel/topmain.cmi \ + toplevel/topstart.cmi toplevel/topstart.cmx : \ - toplevel/topmain.cmi + toplevel/topmain.cmi \ + toplevel/topstart.cmi +toplevel/topstart.cmi : toplevel/trace.cmi : \ typing/types.cmi \ typing/path.cmi \ @@ -6449,6 +6722,7 @@ toplevel/byte/topeval.cmo : \ toplevel/topcommon.cmi \ bytecomp/symtable.cmi \ lambda/simplif.cmi \ + typing/shape_reduce.cmi \ typing/shape.cmi \ typing/printtyped.cmi \ typing/printtyp.cmi \ @@ -6458,7 +6732,6 @@ toplevel/byte/topeval.cmo : \ typing/persistent_env.cmi \ parsing/parsetree.cmi \ typing/outcometree.cmi \ - bytecomp/opcodes.cmi \ utils/misc.cmi \ bytecomp/meta.cmi \ parsing/location.cmi \ @@ -6484,6 +6757,7 @@ toplevel/byte/topeval.cmx : \ toplevel/topcommon.cmx \ bytecomp/symtable.cmx \ lambda/simplif.cmx \ + typing/shape_reduce.cmx \ typing/shape.cmx \ typing/printtyped.cmx \ typing/printtyp.cmx \ @@ -6493,7 +6767,6 @@ toplevel/byte/topeval.cmx : \ typing/persistent_env.cmx \ parsing/parsetree.cmi \ typing/outcometree.cmi \ - bytecomp/opcodes.cmx \ utils/misc.cmx \ bytecomp/meta.cmx \ parsing/location.cmx \ @@ -6521,7 +6794,6 @@ toplevel/byte/topmain.cmo : \ toplevel/topcommon.cmi \ typing/printtyp.cmi \ typing/path.cmi \ - utils/misc.cmi \ driver/main_args.cmi \ parsing/location.cmi \ typing/env.cmi \ @@ -6539,7 +6811,6 @@ toplevel/byte/topmain.cmx : \ toplevel/topcommon.cmx \ typing/printtyp.cmx \ typing/path.cmx \ - utils/misc.cmx \ driver/main_args.cmx \ parsing/location.cmx \ typing/env.cmx \ @@ -6590,6 +6861,7 @@ toplevel/native/topeval.cmo : \ toplevel/native/tophooks.cmi \ toplevel/topcommon.cmi \ lambda/simplif.cmi \ + typing/shape_reduce.cmi \ typing/shape.cmi \ typing/printtyped.cmi \ typing/printtyp.cmi \ @@ -6604,6 +6876,7 @@ toplevel/native/topeval.cmo : \ typing/includemod.cmi \ typing/ident.cmi \ typing/env.cmi \ + otherlibs/dynlink/dynlink.cmi \ utils/config.cmi \ driver/compmisc.cmi \ middle_end/compilenv.cmi \ @@ -6620,6 +6893,7 @@ toplevel/native/topeval.cmx : \ toplevel/native/tophooks.cmx \ toplevel/topcommon.cmx \ lambda/simplif.cmx \ + typing/shape_reduce.cmx \ typing/shape.cmx \ typing/printtyped.cmx \ typing/printtyp.cmx \ @@ -6634,6 +6908,7 @@ toplevel/native/topeval.cmx : \ typing/includemod.cmx \ typing/ident.cmx \ typing/env.cmx \ + otherlibs/dynlink/dynlink.cmi \ utils/config.cmx \ driver/compmisc.cmx \ middle_end/compilenv.cmx \ @@ -6650,6 +6925,7 @@ toplevel/native/tophooks.cmo : \ lambda/lambda.cmi \ middle_end/flambda/import_approx.cmi \ middle_end/flambda/flambda_middle_end.cmi \ + otherlibs/dynlink/dynlink.cmi \ utils/config.cmi \ middle_end/compilenv.cmi \ middle_end/closure/closure_middle_end.cmi \ @@ -6657,7 +6933,7 @@ toplevel/native/tophooks.cmo : \ middle_end/backend_intf.cmi \ asmcomp/asmlink.cmi \ asmcomp/asmgen.cmi \ - asmcomp/arch.cmo \ + asmcomp/arch.cmi \ toplevel/native/tophooks.cmi toplevel/native/tophooks.cmx : \ toplevel/topcommon.cmx \ @@ -6666,6 +6942,7 @@ toplevel/native/tophooks.cmx : \ lambda/lambda.cmx \ middle_end/flambda/import_approx.cmx \ middle_end/flambda/flambda_middle_end.cmx \ + otherlibs/dynlink/dynlink.cmi \ utils/config.cmx \ middle_end/compilenv.cmx \ middle_end/closure/closure_middle_end.cmx \ @@ -6682,7 +6959,6 @@ toplevel/native/topmain.cmo : \ toplevel/toploop.cmi \ toplevel/native/topeval.cmi \ toplevel/topcommon.cmi \ - utils/misc.cmi \ driver/main_args.cmi \ parsing/location.cmi \ driver/compmisc.cmi \ @@ -6693,7 +6969,6 @@ toplevel/native/topmain.cmx : \ toplevel/toploop.cmx \ toplevel/native/topeval.cmx \ toplevel/topcommon.cmx \ - utils/misc.cmx \ driver/main_args.cmx \ parsing/location.cmx \ driver/compmisc.cmx \ @@ -6712,3 +6987,2705 @@ toplevel/native/trace.cmi : \ typing/path.cmi \ parsing/longident.cmi \ typing/env.cmi +lex/common.cmo : \ + lex/syntax.cmi \ + lex/lexgen.cmi \ + lex/common.cmi +lex/common.cmx : \ + lex/syntax.cmx \ + lex/lexgen.cmx \ + lex/common.cmi +lex/common.cmi : \ + lex/syntax.cmi \ + lex/lexgen.cmi +lex/compact.cmo : \ + lex/table.cmi \ + lex/lexgen.cmi \ + lex/compact.cmi +lex/compact.cmx : \ + lex/table.cmx \ + lex/lexgen.cmx \ + lex/compact.cmi +lex/compact.cmi : \ + lex/lexgen.cmi +lex/cset.cmo : \ + lex/cset.cmi +lex/cset.cmx : \ + lex/cset.cmi +lex/cset.cmi : +lex/lexer.cmo : \ + lex/syntax.cmi \ + lex/parser.cmi \ + lex/lexer.cmi +lex/lexer.cmx : \ + lex/syntax.cmx \ + lex/parser.cmx \ + lex/lexer.cmi +lex/lexer.cmi : \ + lex/parser.cmi +lex/lexgen.cmo : \ + lex/table.cmi \ + lex/syntax.cmi \ + lex/cset.cmi \ + lex/lexgen.cmi +lex/lexgen.cmx : \ + lex/table.cmx \ + lex/syntax.cmx \ + lex/cset.cmx \ + lex/lexgen.cmi +lex/lexgen.cmi : \ + lex/syntax.cmi +lex/main.cmo : \ + lex/syntax.cmi \ + lex/parser.cmi \ + lex/outputbis.cmi \ + lex/output.cmi \ + lex/lexgen.cmi \ + lex/lexer.cmi \ + lex/cset.cmi \ + lex/compact.cmi \ + lex/common.cmi \ + lex/main.cmi +lex/main.cmx : \ + lex/syntax.cmx \ + lex/parser.cmx \ + lex/outputbis.cmx \ + lex/output.cmx \ + lex/lexgen.cmx \ + lex/lexer.cmx \ + lex/cset.cmx \ + lex/compact.cmx \ + lex/common.cmx \ + lex/main.cmi +lex/main.cmi : +lex/output.cmo : \ + lex/lexgen.cmi \ + lex/compact.cmi \ + lex/common.cmi \ + lex/output.cmi +lex/output.cmx : \ + lex/lexgen.cmx \ + lex/compact.cmx \ + lex/common.cmx \ + lex/output.cmi +lex/output.cmi : \ + lex/syntax.cmi \ + lex/lexgen.cmi \ + lex/compact.cmi \ + lex/common.cmi +lex/outputbis.cmo : \ + lex/lexgen.cmi \ + lex/common.cmi \ + lex/outputbis.cmi +lex/outputbis.cmx : \ + lex/lexgen.cmx \ + lex/common.cmx \ + lex/outputbis.cmi +lex/outputbis.cmi : \ + lex/syntax.cmi \ + lex/lexgen.cmi \ + lex/common.cmi +lex/parser.cmo : \ + lex/syntax.cmi \ + lex/cset.cmi \ + lex/parser.cmi +lex/parser.cmx : \ + lex/syntax.cmx \ + lex/cset.cmx \ + lex/parser.cmi +lex/parser.cmi : \ + lex/syntax.cmi +lex/syntax.cmo : \ + lex/cset.cmi \ + lex/syntax.cmi +lex/syntax.cmx : \ + lex/cset.cmx \ + lex/syntax.cmi +lex/syntax.cmi : \ + lex/cset.cmi +lex/table.cmo : \ + lex/table.cmi +lex/table.cmx : \ + lex/table.cmi +lex/table.cmi : +tools/cmpbyt.cmo : \ + bytecomp/bytesections.cmi \ + tools/cmpbyt.cmi +tools/cmpbyt.cmx : \ + bytecomp/bytesections.cmx \ + tools/cmpbyt.cmi +tools/cmpbyt.cmi : +tools/cvt_emit.cmo : \ + tools/cvt_emit.cmi +tools/cvt_emit.cmx : \ + tools/cvt_emit.cmi +tools/cvt_emit.cmi : +tools/dumpobj.cmo : \ + bytecomp/symtable.cmi \ + tools/opnames.cmi \ + bytecomp/opcodes.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + bytecomp/instruct.cmi \ + utils/config.cmi \ + utils/compression.cmi \ + file_formats/cmo_format.cmi \ + bytecomp/bytesections.cmi \ + tools/dumpobj.cmi +tools/dumpobj.cmx : \ + bytecomp/symtable.cmx \ + tools/opnames.cmx \ + bytecomp/opcodes.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + bytecomp/instruct.cmx \ + utils/config.cmx \ + utils/compression.cmx \ + file_formats/cmo_format.cmi \ + bytecomp/bytesections.cmx \ + tools/dumpobj.cmi +tools/dumpobj.cmi : +tools/eqparsetree.cmo : \ + parsing/parsetree.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ + parsing/asttypes.cmi +tools/eqparsetree.cmx : \ + parsing/parsetree.cmi \ + parsing/longident.cmx \ + parsing/location.cmx \ + parsing/asttypes.cmi +tools/gen_sizeclasses.cmo : +tools/gen_sizeclasses.cmx : +tools/lintapidiff.cmo : \ + parsing/unit_info.cmi \ + otherlibs/str/str.cmi \ + typing/printtyp.cmi \ + driver/pparse.cmi \ + typing/path.cmi \ + parsing/parsetree.cmi \ + parsing/parse.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + typing/ident.cmi \ + tools/lintapidiff.cmi +tools/lintapidiff.cmx : \ + parsing/unit_info.cmx \ + otherlibs/str/str.cmx \ + typing/printtyp.cmx \ + driver/pparse.cmx \ + typing/path.cmx \ + parsing/parsetree.cmi \ + parsing/parse.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + typing/ident.cmx \ + tools/lintapidiff.cmi +tools/lintapidiff.cmi : +tools/make_opcodes.cmo : \ + tools/make_opcodes.cmi +tools/make_opcodes.cmx : \ + tools/make_opcodes.cmi +tools/make_opcodes.cmi : +tools/objinfo.cmo : \ + typing/typedtree.cmi \ + bytecomp/symtable.cmi \ + middle_end/symbol.cmi \ + typing/shape_reduce.cmi \ + typing/shape.cmi \ + middle_end/printclambda.cmi \ + parsing/pprintast.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + middle_end/linkage_name.cmi \ + typing/ident.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/compilation_unit.cmi \ + file_formats/cmxs_format.cmi \ + file_formats/cmx_format.cmi \ + file_formats/cmt_format.cmi \ + file_formats/cmo_format.cmi \ + file_formats/cmi_format.cmi \ + bytecomp/bytesections.cmi \ + utils/binutils.cmi \ + tools/objinfo.cmi +tools/objinfo.cmx : \ + typing/typedtree.cmx \ + bytecomp/symtable.cmx \ + middle_end/symbol.cmx \ + typing/shape_reduce.cmx \ + typing/shape.cmx \ + middle_end/printclambda.cmx \ + parsing/pprintast.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + middle_end/linkage_name.cmx \ + typing/ident.cmx \ + middle_end/flambda/export_info.cmx \ + middle_end/compilation_unit.cmx \ + file_formats/cmxs_format.cmi \ + file_formats/cmx_format.cmi \ + file_formats/cmt_format.cmx \ + file_formats/cmo_format.cmi \ + file_formats/cmi_format.cmx \ + bytecomp/bytesections.cmx \ + utils/binutils.cmx \ + tools/objinfo.cmi +tools/objinfo.cmi : +tools/ocamlcmt.cmo : \ + typing/untypeast.cmi \ + typing/stypes.cmi \ + parsing/pprintast.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + typing/envaux.cmi \ + driver/compmisc.cmi \ + file_formats/cmt_format.cmi \ + typing/cmt2annot.cmi \ + utils/clflags.cmi \ + typing/annot.cmi \ + tools/ocamlcmt.cmi +tools/ocamlcmt.cmx : \ + typing/untypeast.cmx \ + typing/stypes.cmx \ + parsing/pprintast.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + typing/envaux.cmx \ + driver/compmisc.cmx \ + file_formats/cmt_format.cmx \ + typing/cmt2annot.cmx \ + utils/clflags.cmx \ + typing/annot.cmi \ + tools/ocamlcmt.cmi +tools/ocamlcmt.cmi : +tools/ocamlcp.cmo : \ + tools/ocamlcp_common.cmi \ + driver/main_args.cmi \ + tools/ocamlcp.cmi +tools/ocamlcp.cmx : \ + tools/ocamlcp_common.cmx \ + driver/main_args.cmx \ + tools/ocamlcp.cmi +tools/ocamlcp.cmi : +tools/ocamlcp_common.cmo : \ + driver/main_args.cmi \ + driver/compenv.cmi \ + tools/ocamlcp_common.cmi +tools/ocamlcp_common.cmx : \ + driver/main_args.cmx \ + driver/compenv.cmx \ + tools/ocamlcp_common.cmi +tools/ocamlcp_common.cmi : \ + driver/main_args.cmi +tools/ocamldep.cmo : \ + driver/makedepend.cmi \ + tools/ocamldep.cmi +tools/ocamldep.cmx : \ + driver/makedepend.cmx \ + tools/ocamldep.cmi +tools/ocamldep.cmi : +tools/ocamlmklib.cmo : \ + utils/misc.cmi \ + utils/config.cmi \ + tools/ocamlmklib.cmi +tools/ocamlmklib.cmx : \ + utils/misc.cmx \ + utils/config.cmx \ + tools/ocamlmklib.cmi +tools/ocamlmklib.cmi : +tools/ocamlmktop.cmo : \ + utils/config.cmi \ + utils/ccomp.cmi \ + tools/ocamlmktop.cmi +tools/ocamlmktop.cmx : \ + utils/config.cmx \ + utils/ccomp.cmx \ + tools/ocamlmktop.cmi +tools/ocamlmktop.cmi : +tools/ocamloptp.cmo : \ + tools/ocamlcp_common.cmi \ + driver/main_args.cmi \ + tools/ocamloptp.cmi +tools/ocamloptp.cmx : \ + tools/ocamlcp_common.cmx \ + driver/main_args.cmx \ + tools/ocamloptp.cmi +tools/ocamloptp.cmi : +tools/ocamlprof.cmo : \ + utils/warnings.cmi \ + parsing/parsetree.cmi \ + parsing/parse.cmi \ + parsing/location.cmi \ + tools/ocamlprof.cmi +tools/ocamlprof.cmx : \ + utils/warnings.cmx \ + parsing/parsetree.cmi \ + parsing/parse.cmx \ + parsing/location.cmx \ + tools/ocamlprof.cmi +tools/ocamlprof.cmi : +tools/ocamltex.cmo : \ + otherlibs/unix/unix.cmi \ + toplevel/toploop.cmi \ + parsing/syntaxerr.cmi \ + otherlibs/str/str.cmi \ + parsing/parsetree.cmi \ + parsing/parse.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + parsing/lexer.cmi \ + driver/compmisc.cmi \ + driver/compenv.cmi \ + utils/clflags.cmi \ + parsing/ast_iterator.cmi \ + parsing/ast_helper.cmi \ + tools/ocamltex.cmi +tools/ocamltex.cmx : \ + otherlibs/unix/unix.cmx \ + toplevel/toploop.cmx \ + parsing/syntaxerr.cmx \ + otherlibs/str/str.cmx \ + parsing/parsetree.cmi \ + parsing/parse.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + parsing/lexer.cmx \ + driver/compmisc.cmx \ + driver/compenv.cmx \ + utils/clflags.cmx \ + parsing/ast_iterator.cmx \ + parsing/ast_helper.cmx \ + tools/ocamltex.cmi +tools/ocamltex.cmi : +tools/opnames.cmo : \ + tools/opnames.cmi +tools/opnames.cmx : \ + tools/opnames.cmi +tools/opnames.cmi : +tools/primreq.cmo : \ + utils/misc.cmi \ + utils/config.cmi \ + file_formats/cmo_format.cmi \ + tools/primreq.cmi +tools/primreq.cmx : \ + utils/misc.cmx \ + utils/config.cmx \ + file_formats/cmo_format.cmi \ + tools/primreq.cmi +tools/primreq.cmi : +tools/profiling.cmo : \ + tools/profiling.cmi +tools/profiling.cmx : \ + tools/profiling.cmi +tools/profiling.cmi : +tools/stripdebug.cmo : \ + utils/misc.cmi \ + bytecomp/bytesections.cmi \ + tools/stripdebug.cmi +tools/stripdebug.cmx : \ + utils/misc.cmx \ + bytecomp/bytesections.cmx \ + tools/stripdebug.cmi +tools/stripdebug.cmi : +debugger/breakpoints.cmo : \ + debugger/symbols.cmi \ + debugger/pos.cmi \ + debugger/parameters.cmi \ + utils/misc.cmi \ + bytecomp/instruct.cmi \ + debugger/exec.cmi \ + debugger/events.cmi \ + debugger/debugger_config.cmi \ + debugger/debugcom.cmi \ + debugger/checkpoints.cmi \ + debugger/breakpoints.cmi +debugger/breakpoints.cmx : \ + debugger/symbols.cmx \ + debugger/pos.cmx \ + debugger/parameters.cmx \ + utils/misc.cmx \ + bytecomp/instruct.cmx \ + debugger/exec.cmx \ + debugger/events.cmx \ + debugger/debugger_config.cmx \ + debugger/debugcom.cmx \ + debugger/checkpoints.cmx \ + debugger/breakpoints.cmi +debugger/breakpoints.cmi : \ + debugger/events.cmi \ + debugger/debugcom.cmi +debugger/checkpoints.cmo : \ + debugger/primitives.cmi \ + debugger/int64ops.cmi \ + debugger/debugcom.cmi \ + debugger/checkpoints.cmi +debugger/checkpoints.cmx : \ + debugger/primitives.cmx \ + debugger/int64ops.cmx \ + debugger/debugcom.cmx \ + debugger/checkpoints.cmi +debugger/checkpoints.cmi : \ + debugger/primitives.cmi \ + debugger/debugcom.cmi +debugger/command_line.cmo : \ + debugger/unix_tools.cmi \ + otherlibs/unix/unix.cmi \ + parsing/unit_info.cmi \ + typing/types.cmi \ + debugger/time_travel.cmi \ + debugger/symbols.cmi \ + debugger/source.cmi \ + debugger/show_source.cmi \ + debugger/show_information.cmi \ + debugger/question.cmi \ + debugger/program_management.cmi \ + debugger/program_loading.cmi \ + debugger/printval.cmi \ + debugger/primitives.cmi \ + debugger/pos.cmi \ + debugger/parser_aux.cmi \ + debugger/parameters.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ + debugger/loadprinter.cmi \ + utils/load_path.cmi \ + debugger/int64ops.cmi \ + bytecomp/instruct.cmi \ + debugger/input_handling.cmi \ + debugger/history.cmi \ + debugger/frames.cmi \ + debugger/events.cmi \ + debugger/eval.cmi \ + typing/envaux.cmi \ + typing/env.cmi \ + debugger/debugger_parser.cmi \ + debugger/debugger_lexer.cmi \ + debugger/debugger_config.cmi \ + debugger/debugcom.cmi \ + driver/compmisc.cmi \ + debugger/checkpoints.cmi \ + debugger/breakpoints.cmi \ + debugger/command_line.cmi +debugger/command_line.cmx : \ + debugger/unix_tools.cmx \ + otherlibs/unix/unix.cmx \ + parsing/unit_info.cmx \ + typing/types.cmx \ + debugger/time_travel.cmx \ + debugger/symbols.cmx \ + debugger/source.cmx \ + debugger/show_source.cmx \ + debugger/show_information.cmx \ + debugger/question.cmx \ + debugger/program_management.cmx \ + debugger/program_loading.cmx \ + debugger/printval.cmx \ + debugger/primitives.cmx \ + debugger/pos.cmx \ + debugger/parser_aux.cmi \ + debugger/parameters.cmx \ + parsing/longident.cmx \ + parsing/location.cmx \ + debugger/loadprinter.cmx \ + utils/load_path.cmx \ + debugger/int64ops.cmx \ + bytecomp/instruct.cmx \ + debugger/input_handling.cmx \ + debugger/history.cmx \ + debugger/frames.cmx \ + debugger/events.cmx \ + debugger/eval.cmx \ + typing/envaux.cmx \ + typing/env.cmx \ + debugger/debugger_parser.cmx \ + debugger/debugger_lexer.cmx \ + debugger/debugger_config.cmx \ + debugger/debugcom.cmx \ + driver/compmisc.cmx \ + debugger/checkpoints.cmx \ + debugger/breakpoints.cmx \ + debugger/command_line.cmi +debugger/command_line.cmi : +debugger/debugcom.cmo : \ + debugger/primitives.cmi \ + utils/misc.cmi \ + debugger/int64ops.cmi \ + bytecomp/instruct.cmi \ + debugger/input_handling.cmi \ + debugger/debugcom.cmi +debugger/debugcom.cmx : \ + debugger/primitives.cmx \ + utils/misc.cmx \ + debugger/int64ops.cmx \ + bytecomp/instruct.cmx \ + debugger/input_handling.cmx \ + debugger/debugcom.cmi +debugger/debugcom.cmi : \ + debugger/primitives.cmi \ + bytecomp/instruct.cmi +debugger/debugger_config.cmo : \ + debugger/int64ops.cmi \ + debugger/debugger_config.cmi +debugger/debugger_config.cmx : \ + debugger/int64ops.cmx \ + debugger/debugger_config.cmi +debugger/debugger_config.cmi : +debugger/debugger_lexer.cmo : \ + debugger/debugger_parser.cmi \ + debugger/debugger_lexer.cmi +debugger/debugger_lexer.cmx : \ + debugger/debugger_parser.cmx \ + debugger/debugger_lexer.cmi +debugger/debugger_lexer.cmi : \ + debugger/debugger_parser.cmi +debugger/debugger_parser.cmo : \ + debugger/parser_aux.cmi \ + parsing/longident.cmi \ + debugger/int64ops.cmi \ + debugger/input_handling.cmi \ + debugger/debugcom.cmi \ + debugger/debugger_parser.cmi +debugger/debugger_parser.cmx : \ + debugger/parser_aux.cmi \ + parsing/longident.cmx \ + debugger/int64ops.cmx \ + debugger/input_handling.cmx \ + debugger/debugcom.cmx \ + debugger/debugger_parser.cmi +debugger/debugger_parser.cmi : \ + debugger/parser_aux.cmi \ + parsing/longident.cmi +debugger/eval.cmo : \ + typing/types.cmi \ + bytecomp/symtable.cmi \ + typing/subst.cmi \ + debugger/printval.cmi \ + typing/printtyp.cmi \ + typing/predef.cmi \ + typing/path.cmi \ + debugger/parser_aux.cmi \ + utils/misc.cmi \ + parsing/longident.cmi \ + bytecomp/instruct.cmi \ + typing/ident.cmi \ + debugger/frames.cmi \ + debugger/events.cmi \ + typing/env.cmi \ + debugger/debugcom.cmi \ + typing/ctype.cmi \ + typing/btype.cmi \ + debugger/eval.cmi +debugger/eval.cmx : \ + typing/types.cmx \ + bytecomp/symtable.cmx \ + typing/subst.cmx \ + debugger/printval.cmx \ + typing/printtyp.cmx \ + typing/predef.cmx \ + typing/path.cmx \ + debugger/parser_aux.cmi \ + utils/misc.cmx \ + parsing/longident.cmx \ + bytecomp/instruct.cmx \ + typing/ident.cmx \ + debugger/frames.cmx \ + debugger/events.cmx \ + typing/env.cmx \ + debugger/debugcom.cmx \ + typing/ctype.cmx \ + typing/btype.cmx \ + debugger/eval.cmi +debugger/eval.cmi : \ + typing/types.cmi \ + typing/path.cmi \ + debugger/parser_aux.cmi \ + parsing/longident.cmi \ + typing/ident.cmi \ + debugger/events.cmi \ + typing/env.cmi \ + debugger/debugcom.cmi +debugger/events.cmo : \ + parsing/location.cmi \ + bytecomp/instruct.cmi \ + debugger/events.cmi +debugger/events.cmx : \ + parsing/location.cmx \ + bytecomp/instruct.cmx \ + debugger/events.cmi +debugger/events.cmi : \ + bytecomp/instruct.cmi +debugger/exec.cmo : \ + debugger/exec.cmi +debugger/exec.cmx : \ + debugger/exec.cmi +debugger/exec.cmi : +debugger/frames.cmo : \ + debugger/symbols.cmi \ + utils/misc.cmi \ + bytecomp/instruct.cmi \ + debugger/events.cmi \ + debugger/debugcom.cmi \ + debugger/frames.cmi +debugger/frames.cmx : \ + debugger/symbols.cmx \ + utils/misc.cmx \ + bytecomp/instruct.cmx \ + debugger/events.cmx \ + debugger/debugcom.cmx \ + debugger/frames.cmi +debugger/frames.cmi : \ + debugger/events.cmi +debugger/history.cmo : \ + debugger/primitives.cmi \ + debugger/int64ops.cmi \ + debugger/debugger_config.cmi \ + debugger/checkpoints.cmi \ + debugger/history.cmi +debugger/history.cmx : \ + debugger/primitives.cmx \ + debugger/int64ops.cmx \ + debugger/debugger_config.cmx \ + debugger/checkpoints.cmx \ + debugger/history.cmi +debugger/history.cmi : +debugger/input_handling.cmo : \ + otherlibs/unix/unix.cmi \ + debugger/primitives.cmi \ + debugger/parameters.cmi \ + debugger/input_handling.cmi +debugger/input_handling.cmx : \ + otherlibs/unix/unix.cmx \ + debugger/primitives.cmx \ + debugger/parameters.cmx \ + debugger/input_handling.cmi +debugger/input_handling.cmi : \ + debugger/primitives.cmi +debugger/int64ops.cmo : \ + debugger/int64ops.cmi +debugger/int64ops.cmx : \ + debugger/int64ops.cmi +debugger/int64ops.cmi : +debugger/loadprinter.cmo : \ + parsing/unit_info.cmi \ + typing/types.cmi \ + toplevel/topprinters.cmi \ + bytecomp/symtable.cmi \ + debugger/printval.cmi \ + typing/printtyp.cmi \ + typing/path.cmi \ + utils/misc.cmi \ + parsing/longident.cmi \ + utils/load_path.cmi \ + typing/ident.cmi \ + typing/env.cmi \ + otherlibs/dynlink/dynlink.cmi \ + typing/ctype.cmi \ + file_formats/cmo_format.cmi \ + debugger/loadprinter.cmi +debugger/loadprinter.cmx : \ + parsing/unit_info.cmx \ + typing/types.cmx \ + toplevel/topprinters.cmx \ + bytecomp/symtable.cmx \ + debugger/printval.cmx \ + typing/printtyp.cmx \ + typing/path.cmx \ + utils/misc.cmx \ + parsing/longident.cmx \ + utils/load_path.cmx \ + typing/ident.cmx \ + typing/env.cmx \ + otherlibs/dynlink/dynlink.cmi \ + typing/ctype.cmx \ + file_formats/cmo_format.cmi \ + debugger/loadprinter.cmi +debugger/loadprinter.cmi : \ + parsing/longident.cmi \ + otherlibs/dynlink/dynlink.cmi +debugger/main.cmo : \ + debugger/unix_tools.cmi \ + otherlibs/unix/unix.cmi \ + debugger/time_travel.cmi \ + debugger/show_information.cmi \ + debugger/question.cmi \ + debugger/program_management.cmi \ + debugger/primitives.cmi \ + typing/persistent_env.cmi \ + debugger/parameters.cmi \ + utils/misc.cmi \ + utils/load_path.cmi \ + debugger/input_handling.cmi \ + debugger/frames.cmi \ + debugger/exec.cmi \ + debugger/debugger_config.cmi \ + utils/config.cmi \ + driver/compmisc.cmi \ + debugger/command_line.cmi \ + file_formats/cmi_format.cmi \ + utils/clflags.cmi \ + debugger/checkpoints.cmi \ + debugger/main.cmi +debugger/main.cmx : \ + debugger/unix_tools.cmx \ + otherlibs/unix/unix.cmx \ + debugger/time_travel.cmx \ + debugger/show_information.cmx \ + debugger/question.cmx \ + debugger/program_management.cmx \ + debugger/primitives.cmx \ + typing/persistent_env.cmx \ + debugger/parameters.cmx \ + utils/misc.cmx \ + utils/load_path.cmx \ + debugger/input_handling.cmx \ + debugger/frames.cmx \ + debugger/exec.cmx \ + debugger/debugger_config.cmx \ + utils/config.cmx \ + driver/compmisc.cmx \ + debugger/command_line.cmx \ + file_formats/cmi_format.cmx \ + utils/clflags.cmx \ + debugger/checkpoints.cmx \ + debugger/main.cmi +debugger/main.cmi : +debugger/ocamldebug_entry.cmo : \ + otherlibs/unix/unix.cmi \ + debugger/ocamldebug_entry.cmi +debugger/ocamldebug_entry.cmx : \ + otherlibs/unix/unix.cmx \ + debugger/ocamldebug_entry.cmi +debugger/ocamldebug_entry.cmi : +debugger/parameters.cmo : \ + utils/load_path.cmi \ + typing/envaux.cmi \ + debugger/debugger_config.cmi \ + utils/config.cmi \ + debugger/parameters.cmi +debugger/parameters.cmx : \ + utils/load_path.cmx \ + typing/envaux.cmx \ + debugger/debugger_config.cmx \ + utils/config.cmx \ + debugger/parameters.cmi +debugger/parameters.cmi : +debugger/parser_aux.cmi : \ + parsing/longident.cmi \ + debugger/debugcom.cmi +debugger/pos.cmo : \ + parsing/location.cmi \ + bytecomp/instruct.cmi \ + debugger/events.cmi \ + debugger/pos.cmi +debugger/pos.cmx : \ + parsing/location.cmx \ + bytecomp/instruct.cmx \ + debugger/events.cmx \ + debugger/pos.cmi +debugger/pos.cmi : \ + debugger/events.cmi +debugger/primitives.cmo : \ + otherlibs/unix/unix.cmi \ + debugger/primitives.cmi +debugger/primitives.cmx : \ + otherlibs/unix/unix.cmx \ + debugger/primitives.cmi +debugger/primitives.cmi : \ + otherlibs/unix/unix.cmi +debugger/printval.cmo : \ + typing/types.cmi \ + bytecomp/symtable.cmi \ + typing/printtyp.cmi \ + debugger/parser_aux.cmi \ + typing/outcometree.cmi \ + typing/oprint.cmi \ + toplevel/genprintval.cmi \ + typing/env.cmi \ + debugger/debugcom.cmi \ + debugger/printval.cmi +debugger/printval.cmx : \ + typing/types.cmx \ + bytecomp/symtable.cmx \ + typing/printtyp.cmx \ + debugger/parser_aux.cmi \ + typing/outcometree.cmi \ + typing/oprint.cmx \ + toplevel/genprintval.cmx \ + typing/env.cmx \ + debugger/debugcom.cmx \ + debugger/printval.cmi +debugger/printval.cmi : \ + typing/types.cmi \ + typing/path.cmi \ + debugger/parser_aux.cmi \ + typing/env.cmi \ + debugger/debugcom.cmi +debugger/program_loading.cmo : \ + debugger/unix_tools.cmi \ + otherlibs/unix/unix.cmi \ + debugger/primitives.cmi \ + debugger/parameters.cmi \ + debugger/input_handling.cmi \ + debugger/debugger_config.cmi \ + debugger/program_loading.cmi +debugger/program_loading.cmx : \ + debugger/unix_tools.cmx \ + otherlibs/unix/unix.cmx \ + debugger/primitives.cmx \ + debugger/parameters.cmx \ + debugger/input_handling.cmx \ + debugger/debugger_config.cmx \ + debugger/program_loading.cmi +debugger/program_loading.cmi : \ + debugger/primitives.cmi +debugger/program_management.cmo : \ + debugger/unix_tools.cmi \ + otherlibs/unix/unix.cmi \ + debugger/time_travel.cmi \ + debugger/symbols.cmi \ + debugger/question.cmi \ + debugger/program_loading.cmi \ + debugger/primitives.cmi \ + debugger/parameters.cmi \ + utils/load_path.cmi \ + debugger/int64ops.cmi \ + debugger/input_handling.cmi \ + debugger/history.cmi \ + typing/envaux.cmi \ + debugger/debugger_config.cmi \ + debugger/debugcom.cmi \ + driver/compmisc.cmi \ + debugger/breakpoints.cmi \ + debugger/program_management.cmi +debugger/program_management.cmx : \ + debugger/unix_tools.cmx \ + otherlibs/unix/unix.cmx \ + debugger/time_travel.cmx \ + debugger/symbols.cmx \ + debugger/question.cmx \ + debugger/program_loading.cmx \ + debugger/primitives.cmx \ + debugger/parameters.cmx \ + utils/load_path.cmx \ + debugger/int64ops.cmx \ + debugger/input_handling.cmx \ + debugger/history.cmx \ + typing/envaux.cmx \ + debugger/debugger_config.cmx \ + debugger/debugcom.cmx \ + driver/compmisc.cmx \ + debugger/breakpoints.cmx \ + debugger/program_management.cmi +debugger/program_management.cmi : +debugger/question.cmo : \ + debugger/primitives.cmi \ + debugger/input_handling.cmi \ + debugger/debugger_lexer.cmi \ + debugger/question.cmi +debugger/question.cmx : \ + debugger/primitives.cmx \ + debugger/input_handling.cmx \ + debugger/debugger_lexer.cmx \ + debugger/question.cmi +debugger/question.cmi : +debugger/show_information.cmo : \ + debugger/symbols.cmi \ + debugger/source.cmi \ + debugger/show_source.cmi \ + debugger/printval.cmi \ + debugger/parameters.cmi \ + utils/misc.cmi \ + bytecomp/instruct.cmi \ + debugger/frames.cmi \ + debugger/events.cmi \ + debugger/debugcom.cmi \ + debugger/checkpoints.cmi \ + debugger/breakpoints.cmi \ + debugger/show_information.cmi +debugger/show_information.cmx : \ + debugger/symbols.cmx \ + debugger/source.cmx \ + debugger/show_source.cmx \ + debugger/printval.cmx \ + debugger/parameters.cmx \ + utils/misc.cmx \ + bytecomp/instruct.cmx \ + debugger/frames.cmx \ + debugger/events.cmx \ + debugger/debugcom.cmx \ + debugger/checkpoints.cmx \ + debugger/breakpoints.cmx \ + debugger/show_information.cmi +debugger/show_information.cmi : \ + debugger/events.cmi +debugger/show_source.cmo : \ + debugger/source.cmi \ + debugger/primitives.cmi \ + debugger/parameters.cmi \ + parsing/location.cmi \ + bytecomp/instruct.cmi \ + debugger/events.cmi \ + debugger/debugger_config.cmi \ + debugger/show_source.cmi +debugger/show_source.cmx : \ + debugger/source.cmx \ + debugger/primitives.cmx \ + debugger/parameters.cmx \ + parsing/location.cmx \ + bytecomp/instruct.cmx \ + debugger/events.cmx \ + debugger/debugger_config.cmx \ + debugger/show_source.cmi +debugger/show_source.cmi : \ + bytecomp/instruct.cmi +debugger/source.cmo : \ + debugger/primitives.cmi \ + utils/misc.cmi \ + utils/load_path.cmi \ + debugger/debugger_config.cmi \ + debugger/source.cmi +debugger/source.cmx : \ + debugger/primitives.cmx \ + utils/misc.cmx \ + utils/load_path.cmx \ + debugger/debugger_config.cmx \ + debugger/source.cmi +debugger/source.cmi : +debugger/symbols.cmo : \ + bytecomp/symtable.cmi \ + debugger/program_loading.cmi \ + utils/misc.cmi \ + bytecomp/instruct.cmi \ + debugger/events.cmi \ + debugger/debugger_config.cmi \ + debugger/debugcom.cmi \ + debugger/checkpoints.cmi \ + bytecomp/bytesections.cmi \ + debugger/symbols.cmi +debugger/symbols.cmx : \ + bytecomp/symtable.cmx \ + debugger/program_loading.cmx \ + utils/misc.cmx \ + bytecomp/instruct.cmx \ + debugger/events.cmx \ + debugger/debugger_config.cmx \ + debugger/debugcom.cmx \ + debugger/checkpoints.cmx \ + bytecomp/bytesections.cmx \ + debugger/symbols.cmi +debugger/symbols.cmi : \ + bytecomp/instruct.cmi \ + debugger/events.cmi \ + debugger/debugcom.cmi +debugger/time_travel.cmo : \ + debugger/trap_barrier.cmi \ + debugger/symbols.cmi \ + debugger/question.cmi \ + debugger/program_loading.cmi \ + debugger/primitives.cmi \ + utils/misc.cmi \ + debugger/int64ops.cmi \ + bytecomp/instruct.cmi \ + debugger/input_handling.cmi \ + debugger/exec.cmi \ + debugger/events.cmi \ + debugger/debugger_config.cmi \ + debugger/debugcom.cmi \ + debugger/checkpoints.cmi \ + debugger/breakpoints.cmi \ + debugger/time_travel.cmi +debugger/time_travel.cmx : \ + debugger/trap_barrier.cmx \ + debugger/symbols.cmx \ + debugger/question.cmx \ + debugger/program_loading.cmx \ + debugger/primitives.cmx \ + utils/misc.cmx \ + debugger/int64ops.cmx \ + bytecomp/instruct.cmx \ + debugger/input_handling.cmx \ + debugger/exec.cmx \ + debugger/events.cmx \ + debugger/debugger_config.cmx \ + debugger/debugcom.cmx \ + debugger/checkpoints.cmx \ + debugger/breakpoints.cmx \ + debugger/time_travel.cmi +debugger/time_travel.cmi : \ + debugger/primitives.cmi +debugger/trap_barrier.cmo : \ + debugger/exec.cmi \ + debugger/debugcom.cmi \ + debugger/checkpoints.cmi \ + debugger/trap_barrier.cmi +debugger/trap_barrier.cmx : \ + debugger/exec.cmx \ + debugger/debugcom.cmx \ + debugger/checkpoints.cmx \ + debugger/trap_barrier.cmi +debugger/trap_barrier.cmi : \ + debugger/debugcom.cmi +debugger/unix_tools.cmo : \ + otherlibs/unix/unix.cmi \ + utils/misc.cmi \ + debugger/unix_tools.cmi +debugger/unix_tools.cmx : \ + otherlibs/unix/unix.cmx \ + utils/misc.cmx \ + debugger/unix_tools.cmi +debugger/unix_tools.cmi : \ + otherlibs/unix/unix.cmi +ocamldoc/odoc.cmo : \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_gen.cmi \ + ocamldoc/odoc_config.cmi \ + ocamldoc/odoc_args.cmi \ + ocamldoc/odoc_analyse.cmi \ + otherlibs/dynlink/dynlink.cmi \ + ocamldoc/odoc.cmi +ocamldoc/odoc.cmx : \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_info.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_gen.cmx \ + ocamldoc/odoc_config.cmx \ + ocamldoc/odoc_args.cmx \ + ocamldoc/odoc_analyse.cmx \ + otherlibs/dynlink/dynlink.cmi \ + ocamldoc/odoc.cmi +ocamldoc/odoc.cmi : +ocamldoc/odoc_analyse.cmo : \ + utils/warnings.cmi \ + parsing/unit_info.cmi \ + typing/types.cmi \ + typing/typemod.cmi \ + typing/typedtree.cmi \ + parsing/syntaxerr.cmi \ + driver/pparse.cmi \ + parsing/parse.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_text.cmi \ + ocamldoc/odoc_sig.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_merge.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_dep.cmi \ + ocamldoc/odoc_cross.cmi \ + ocamldoc/odoc_comments.cmi \ + ocamldoc/odoc_class.cmi \ + ocamldoc/odoc_ast.cmi \ + parsing/location.cmi \ + parsing/lexer.cmi \ + typing/env.cmi \ + driver/compmisc.cmi \ + utils/clflags.cmi \ + ocamldoc/odoc_analyse.cmi +ocamldoc/odoc_analyse.cmx : \ + utils/warnings.cmx \ + parsing/unit_info.cmx \ + typing/types.cmx \ + typing/typemod.cmx \ + typing/typedtree.cmx \ + parsing/syntaxerr.cmx \ + driver/pparse.cmx \ + parsing/parse.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_text.cmx \ + ocamldoc/odoc_sig.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_merge.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_dep.cmx \ + ocamldoc/odoc_cross.cmx \ + ocamldoc/odoc_comments.cmx \ + ocamldoc/odoc_class.cmx \ + ocamldoc/odoc_ast.cmx \ + parsing/location.cmx \ + parsing/lexer.cmx \ + typing/env.cmx \ + driver/compmisc.cmx \ + utils/clflags.cmx \ + ocamldoc/odoc_analyse.cmi +ocamldoc/odoc_analyse.cmi : \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_global.cmi +ocamldoc/odoc_args.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_texi.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_man.cmi \ + ocamldoc/odoc_latex.cmi \ + ocamldoc/odoc_html.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_gen.cmi \ + ocamldoc/odoc_dot.cmi \ + ocamldoc/odoc_config.cmi \ + driver/main_args.cmi \ + utils/config.cmi \ + driver/compenv.cmi \ + ocamldoc/odoc_args.cmi +ocamldoc/odoc_args.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_texi.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_man.cmx \ + ocamldoc/odoc_latex.cmx \ + ocamldoc/odoc_html.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_gen.cmx \ + ocamldoc/odoc_dot.cmx \ + ocamldoc/odoc_config.cmx \ + driver/main_args.cmx \ + utils/config.cmx \ + driver/compenv.cmx \ + ocamldoc/odoc_args.cmi +ocamldoc/odoc_args.cmi : \ + ocamldoc/odoc_gen.cmi +ocamldoc/odoc_ast.cmo : \ + parsing/unit_info.cmi \ + typing/types.cmi \ + typing/typedtree.cmi \ + typing/predef.cmi \ + typing/path.cmi \ + parsing/parsetree.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_sig.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_env.cmi \ + ocamldoc/odoc_class.cmi \ + parsing/location.cmi \ + typing/ident.cmi \ + typing/btype.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_ast.cmi +ocamldoc/odoc_ast.cmx : \ + parsing/unit_info.cmx \ + typing/types.cmx \ + typing/typedtree.cmx \ + typing/predef.cmx \ + typing/path.cmx \ + parsing/parsetree.cmi \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_sig.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_env.cmx \ + ocamldoc/odoc_class.cmx \ + parsing/location.cmx \ + typing/ident.cmx \ + typing/btype.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_ast.cmi +ocamldoc/odoc_ast.cmi : \ + typing/types.cmi \ + typing/typedtree.cmi \ + parsing/parsetree.cmi \ + ocamldoc/odoc_sig.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_module.cmi +ocamldoc/odoc_class.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_class.cmi +ocamldoc/odoc_class.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_class.cmi +ocamldoc/odoc_class.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_name.cmi +ocamldoc/odoc_comments.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_text.cmi \ + ocamldoc/odoc_see_lexer.cmi \ + ocamldoc/odoc_parser.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_merge.cmi \ + ocamldoc/odoc_lexer.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_cross.cmi \ + ocamldoc/odoc_comments_global.cmi \ + ocamldoc/odoc_comments.cmi +ocamldoc/odoc_comments.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_text.cmx \ + ocamldoc/odoc_see_lexer.cmx \ + ocamldoc/odoc_parser.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_merge.cmx \ + ocamldoc/odoc_lexer.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_cross.cmx \ + ocamldoc/odoc_comments_global.cmx \ + ocamldoc/odoc_comments.cmi +ocamldoc/odoc_comments.cmi : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_module.cmi +ocamldoc/odoc_comments_global.cmo : \ + ocamldoc/odoc_comments_global.cmi +ocamldoc/odoc_comments_global.cmx : \ + ocamldoc/odoc_comments_global.cmi +ocamldoc/odoc_comments_global.cmi : +ocamldoc/odoc_config.cmo : \ + utils/config.cmi \ + ocamldoc/odoc_config.cmi +ocamldoc/odoc_config.cmx : \ + utils/config.cmx \ + ocamldoc/odoc_config.cmi +ocamldoc/odoc_config.cmi : +ocamldoc/odoc_cross.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_search.cmi \ + ocamldoc/odoc_scan.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + utils/misc.cmi \ + ocamldoc/odoc_cross.cmi +ocamldoc/odoc_cross.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_search.cmx \ + ocamldoc/odoc_scan.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_class.cmx \ + utils/misc.cmx \ + ocamldoc/odoc_cross.cmi +ocamldoc/odoc_cross.cmi : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_module.cmi +ocamldoc/odoc_dag2html.cmo : \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_dag2html.cmi +ocamldoc/odoc_dag2html.cmx : \ + ocamldoc/odoc_info.cmx \ + ocamldoc/odoc_dag2html.cmi +ocamldoc/odoc_dag2html.cmi : \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_dep.cmo : \ + otherlibs/str/str.cmi \ + parsing/parsetree.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_print.cmi \ + ocamldoc/odoc_module.cmi \ + utils/misc.cmi \ + parsing/depend.cmi \ + ocamldoc/odoc_dep.cmi +ocamldoc/odoc_dep.cmx : \ + otherlibs/str/str.cmx \ + parsing/parsetree.cmi \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_print.cmx \ + ocamldoc/odoc_module.cmx \ + utils/misc.cmx \ + parsing/depend.cmx \ + ocamldoc/odoc_dep.cmi +ocamldoc/odoc_dep.cmi : \ + parsing/parsetree.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_module.cmi \ + utils/misc.cmi +ocamldoc/odoc_dot.cmo : \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_dot.cmi +ocamldoc/odoc_dot.cmx : \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_info.cmx \ + ocamldoc/odoc_dot.cmi +ocamldoc/odoc_dot.cmi : \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_env.cmo : \ + typing/types.cmi \ + typing/predef.cmi \ + typing/path.cmi \ + ocamldoc/odoc_name.cmi \ + typing/btype.cmi \ + ocamldoc/odoc_env.cmi +ocamldoc/odoc_env.cmx : \ + typing/types.cmx \ + typing/predef.cmx \ + typing/path.cmx \ + ocamldoc/odoc_name.cmx \ + typing/btype.cmx \ + ocamldoc/odoc_env.cmi +ocamldoc/odoc_env.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_name.cmi +ocamldoc/odoc_exception.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_exception.cmi +ocamldoc/odoc_exception.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_exception.cmi +ocamldoc/odoc_exception.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi +ocamldoc/odoc_extension.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_extension.cmi +ocamldoc/odoc_extension.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_name.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_extension.cmi +ocamldoc/odoc_extension.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi \ + parsing/asttypes.cmi +ocamldoc/odoc_gen.cmo : \ + ocamldoc/odoc_texi.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_man.cmi \ + ocamldoc/odoc_latex.cmi \ + ocamldoc/odoc_html.cmi \ + ocamldoc/odoc_dot.cmi \ + ocamldoc/odoc_gen.cmi +ocamldoc/odoc_gen.cmx : \ + ocamldoc/odoc_texi.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_man.cmx \ + ocamldoc/odoc_latex.cmx \ + ocamldoc/odoc_html.cmx \ + ocamldoc/odoc_dot.cmx \ + ocamldoc/odoc_gen.cmi +ocamldoc/odoc_gen.cmi : \ + ocamldoc/odoc_texi.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_man.cmi \ + ocamldoc/odoc_latex.cmi \ + ocamldoc/odoc_html.cmi \ + ocamldoc/odoc_dot.cmi +ocamldoc/odoc_global.cmo : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_config.cmi \ + utils/clflags.cmi \ + ocamldoc/odoc_global.cmi +ocamldoc/odoc_global.cmx : \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_config.cmx \ + utils/clflags.cmx \ + ocamldoc/odoc_global.cmi +ocamldoc/odoc_global.cmi : \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_html.cmo : \ + otherlibs/str/str.cmi \ + middle_end/flambda/parameter.cmi \ + ocamldoc/odoc_text.cmi \ + ocamldoc/odoc_ocamlhtml.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_dag2html.cmi \ + utils/misc.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_html.cmi +ocamldoc/odoc_html.cmx : \ + otherlibs/str/str.cmx \ + middle_end/flambda/parameter.cmx \ + ocamldoc/odoc_text.cmx \ + ocamldoc/odoc_ocamlhtml.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_info.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_dag2html.cmx \ + utils/misc.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_html.cmi +ocamldoc/odoc_html.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_dag2html.cmi \ + utils/misc.cmi +ocamldoc/odoc_info.cmo : \ + typing/printtyp.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_text.cmi \ + ocamldoc/odoc_str.cmi \ + ocamldoc/odoc_search.cmi \ + ocamldoc/odoc_scan.cmi \ + ocamldoc/odoc_print.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_dep.cmi \ + ocamldoc/odoc_config.cmi \ + ocamldoc/odoc_comments.cmi \ + ocamldoc/odoc_class.cmi \ + ocamldoc/odoc_analyse.cmi \ + parsing/location.cmi \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_info.cmx : \ + typing/printtyp.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_text.cmx \ + ocamldoc/odoc_str.cmx \ + ocamldoc/odoc_search.cmx \ + ocamldoc/odoc_scan.cmx \ + ocamldoc/odoc_print.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_dep.cmx \ + ocamldoc/odoc_config.cmx \ + ocamldoc/odoc_comments.cmx \ + ocamldoc/odoc_class.cmx \ + ocamldoc/odoc_analyse.cmx \ + parsing/location.cmx \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_info.cmi : \ + typing/types.cmi \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_search.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + parsing/location.cmi \ + parsing/asttypes.cmi +ocamldoc/odoc_latex.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_to_text.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_latex_style.cmi \ + ocamldoc/odoc_info.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_latex.cmi +ocamldoc/odoc_latex.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_to_text.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_latex_style.cmx \ + ocamldoc/odoc_info.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_latex.cmi +ocamldoc/odoc_latex.cmi : \ + typing/types.cmi \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_latex_style.cmo : \ + ocamldoc/odoc_latex_style.cmi +ocamldoc/odoc_latex_style.cmx : \ + ocamldoc/odoc_latex_style.cmi +ocamldoc/odoc_latex_style.cmi : +ocamldoc/odoc_lexer.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_parser.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_comments_global.cmi \ + ocamldoc/odoc_lexer.cmi +ocamldoc/odoc_lexer.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_parser.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_comments_global.cmx \ + ocamldoc/odoc_lexer.cmi +ocamldoc/odoc_lexer.cmi : \ + ocamldoc/odoc_parser.cmi +ocamldoc/odoc_man.cmo : \ + otherlibs/str/str.cmi \ + middle_end/flambda/parameter.cmi \ + ocamldoc/odoc_str.cmi \ + ocamldoc/odoc_print.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_info.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_man.cmi +ocamldoc/odoc_man.cmx : \ + otherlibs/str/str.cmx \ + middle_end/flambda/parameter.cmx \ + ocamldoc/odoc_str.cmx \ + ocamldoc/odoc_print.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_info.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_man.cmi +ocamldoc/odoc_man.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_merge.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + ocamldoc/odoc_merge.cmi +ocamldoc/odoc_merge.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_class.cmx \ + ocamldoc/odoc_merge.cmi +ocamldoc/odoc_merge.cmi : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_module.cmi +ocamldoc/odoc_messages.cmo : \ + otherlibs/str/str.cmi \ + utils/config.cmi \ + ocamldoc/odoc_messages.cmi +ocamldoc/odoc_messages.cmx : \ + otherlibs/str/str.cmx \ + utils/config.cmx \ + ocamldoc/odoc_messages.cmi +ocamldoc/odoc_messages.cmi : +ocamldoc/odoc_misc.cmo : \ + otherlibs/unix/unix.cmi \ + typing/types.cmi \ + typing/predef.cmi \ + typing/path.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_messages.cmi \ + parsing/longident.cmi \ + typing/btype.cmi \ + ocamldoc/odoc_misc.cmi +ocamldoc/odoc_misc.cmx : \ + otherlibs/unix/unix.cmx \ + typing/types.cmx \ + typing/predef.cmx \ + typing/path.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_messages.cmx \ + parsing/longident.cmx \ + typing/btype.cmx \ + ocamldoc/odoc_misc.cmi +ocamldoc/odoc_misc.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + parsing/longident.cmi \ + parsing/asttypes.cmi +ocamldoc/odoc_module.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + utils/misc.cmi \ + ocamldoc/odoc_module.cmi +ocamldoc/odoc_module.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_class.cmx \ + utils/misc.cmx \ + ocamldoc/odoc_module.cmi +ocamldoc/odoc_module.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + utils/misc.cmi +ocamldoc/odoc_name.cmo : \ + parsing/unit_info.cmi \ + otherlibs/str/str.cmi \ + typing/path.cmi \ + ocamldoc/odoc_misc.cmi \ + typing/ident.cmi \ + ocamldoc/odoc_name.cmi +ocamldoc/odoc_name.cmx : \ + parsing/unit_info.cmx \ + otherlibs/str/str.cmx \ + typing/path.cmx \ + ocamldoc/odoc_misc.cmx \ + typing/ident.cmx \ + ocamldoc/odoc_name.cmi +ocamldoc/odoc_name.cmi : \ + typing/path.cmi \ + parsing/longident.cmi \ + typing/ident.cmi +ocamldoc/odoc_ocamlhtml.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_ocamlhtml.cmi +ocamldoc/odoc_ocamlhtml.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_ocamlhtml.cmi +ocamldoc/odoc_ocamlhtml.cmi : +ocamldoc/odoc_parameter.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_parameter.cmi +ocamldoc/odoc_parameter.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_parameter.cmi +ocamldoc/odoc_parameter.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_parser.cmo : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_comments_global.cmi \ + ocamldoc/odoc_parser.cmi +ocamldoc/odoc_parser.cmx : \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_comments_global.cmx \ + ocamldoc/odoc_parser.cmi +ocamldoc/odoc_parser.cmi : \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_print.cmo : \ + typing/types.cmi \ + typing/printtyp.cmi \ + typing/btype.cmi \ + ocamldoc/odoc_print.cmi +ocamldoc/odoc_print.cmx : \ + typing/types.cmx \ + typing/printtyp.cmx \ + typing/btype.cmx \ + ocamldoc/odoc_print.cmi +ocamldoc/odoc_print.cmi : \ + typing/types.cmi +ocamldoc/odoc_scan.cmo : \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + ocamldoc/odoc_scan.cmi +ocamldoc/odoc_scan.cmx : \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_class.cmx \ + ocamldoc/odoc_scan.cmi +ocamldoc/odoc_scan.cmi : \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi +ocamldoc/odoc_search.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + ocamldoc/odoc_search.cmi +ocamldoc/odoc_search.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_class.cmx \ + ocamldoc/odoc_search.cmi +ocamldoc/odoc_search.cmi : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi +ocamldoc/odoc_see_lexer.cmo : \ + ocamldoc/odoc_parser.cmi \ + ocamldoc/odoc_see_lexer.cmi +ocamldoc/odoc_see_lexer.cmx : \ + ocamldoc/odoc_parser.cmx \ + ocamldoc/odoc_see_lexer.cmi +ocamldoc/odoc_see_lexer.cmi : \ + ocamldoc/odoc_parser.cmi +ocamldoc/odoc_sig.cmo : \ + parsing/unit_info.cmi \ + typing/types.cmi \ + typing/typedtree.cmi \ + parsing/parsetree.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_merge.cmi \ + ocamldoc/odoc_global.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_env.cmi \ + ocamldoc/odoc_class.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ + typing/ident.cmi \ + typing/ctype.cmi \ + typing/btype.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_sig.cmi +ocamldoc/odoc_sig.cmx : \ + parsing/unit_info.cmx \ + typing/types.cmx \ + typing/typedtree.cmx \ + parsing/parsetree.cmi \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_merge.cmx \ + ocamldoc/odoc_global.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_env.cmx \ + ocamldoc/odoc_class.cmx \ + parsing/longident.cmx \ + parsing/location.cmx \ + typing/ident.cmx \ + typing/ctype.cmx \ + typing/btype.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_sig.cmi +ocamldoc/odoc_sig.cmi : \ + typing/types.cmi \ + typing/typedtree.cmi \ + parsing/parsetree.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_env.cmi \ + ocamldoc/odoc_class.cmi \ + parsing/location.cmi +ocamldoc/odoc_str.cmo : \ + typing/types.cmi \ + typing/printtyp.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_print.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_str.cmi +ocamldoc/odoc_str.cmx : \ + typing/types.cmx \ + typing/printtyp.cmx \ + ocamldoc/odoc_value.cmx \ + ocamldoc/odoc_type.cmx \ + ocamldoc/odoc_print.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_extension.cmx \ + ocamldoc/odoc_exception.cmx \ + ocamldoc/odoc_class.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_str.cmi +ocamldoc/odoc_str.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_value.cmi \ + ocamldoc/odoc_type.cmi \ + ocamldoc/odoc_extension.cmi \ + ocamldoc/odoc_exception.cmi \ + ocamldoc/odoc_class.cmi +ocamldoc/odoc_test.cmo : \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_gen.cmi \ + ocamldoc/odoc_args.cmi \ + ocamldoc/odoc_test.cmi +ocamldoc/odoc_test.cmx : \ + ocamldoc/odoc_info.cmx \ + ocamldoc/odoc_gen.cmx \ + ocamldoc/odoc_args.cmx \ + ocamldoc/odoc_test.cmi +ocamldoc/odoc_test.cmi : +ocamldoc/odoc_texi.cmo : \ + typing/types.cmi \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_to_text.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_info.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_texi.cmi +ocamldoc/odoc_texi.cmx : \ + typing/types.cmx \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_to_text.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_info.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_texi.cmi +ocamldoc/odoc_texi.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_text.cmo : \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_text_parser.cmi \ + ocamldoc/odoc_text_lexer.cmi \ + ocamldoc/odoc_text.cmi +ocamldoc/odoc_text.cmx : \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_text_parser.cmx \ + ocamldoc/odoc_text_lexer.cmx \ + ocamldoc/odoc_text.cmi +ocamldoc/odoc_text.cmi : \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_text_lexer.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_text_parser.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_text_lexer.cmi +ocamldoc/odoc_text_lexer.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_text_parser.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_text_lexer.cmi +ocamldoc/odoc_text_lexer.cmi : \ + ocamldoc/odoc_text_parser.cmi +ocamldoc/odoc_text_parser.cmo : \ + otherlibs/str/str.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_misc.cmi \ + ocamldoc/odoc_text_parser.cmi +ocamldoc/odoc_text_parser.cmx : \ + otherlibs/str/str.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_misc.cmx \ + ocamldoc/odoc_text_parser.cmi +ocamldoc/odoc_text_parser.cmi : \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_to_text.cmo : \ + otherlibs/str/str.cmi \ + middle_end/flambda/parameter.cmi \ + ocamldoc/odoc_str.cmi \ + ocamldoc/odoc_module.cmi \ + ocamldoc/odoc_messages.cmi \ + ocamldoc/odoc_info.cmi \ + ocamldoc/odoc_to_text.cmi +ocamldoc/odoc_to_text.cmx : \ + otherlibs/str/str.cmx \ + middle_end/flambda/parameter.cmx \ + ocamldoc/odoc_str.cmx \ + ocamldoc/odoc_module.cmx \ + ocamldoc/odoc_messages.cmx \ + ocamldoc/odoc_info.cmx \ + ocamldoc/odoc_to_text.cmi +ocamldoc/odoc_to_text.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_info.cmi +ocamldoc/odoc_type.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_name.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_type.cmi +ocamldoc/odoc_type.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_name.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_type.cmi +ocamldoc/odoc_type.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_name.cmi \ + parsing/asttypes.cmi +ocamldoc/odoc_types.cmo : \ + ocamldoc/odoc_messages.cmi \ + parsing/location.cmi \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_types.cmx : \ + ocamldoc/odoc_messages.cmx \ + parsing/location.cmx \ + ocamldoc/odoc_types.cmi +ocamldoc/odoc_types.cmi : \ + parsing/location.cmi +ocamldoc/odoc_value.cmo : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_name.cmi \ + ocamldoc/odoc_misc.cmi \ + parsing/asttypes.cmi \ + ocamldoc/odoc_value.cmi +ocamldoc/odoc_value.cmx : \ + typing/types.cmx \ + ocamldoc/odoc_types.cmx \ + ocamldoc/odoc_parameter.cmx \ + ocamldoc/odoc_name.cmx \ + ocamldoc/odoc_misc.cmx \ + parsing/asttypes.cmi \ + ocamldoc/odoc_value.cmi +ocamldoc/odoc_value.cmi : \ + typing/types.cmi \ + ocamldoc/odoc_types.cmi \ + ocamldoc/odoc_parameter.cmi \ + ocamldoc/odoc_name.cmi +ocamltest/actions.cmo : \ + ocamltest/variables.cmi \ + ocamltest/result.cmi \ + ocamltest/environments.cmi \ + ocamltest/actions.cmi +ocamltest/actions.cmx : \ + ocamltest/variables.cmx \ + ocamltest/result.cmx \ + ocamltest/environments.cmx \ + ocamltest/actions.cmi +ocamltest/actions.cmi : \ + ocamltest/variables.cmi \ + ocamltest/result.cmi \ + ocamltest/environments.cmi +ocamltest/actions_helpers.cmo : \ + ocamltest/variables.cmi \ + otherlibs/unix/unix.cmi \ + ocamltest/strace.cmi \ + ocamltest/run_command.cmi \ + ocamltest/result.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/modifier_parser.cmi \ + ocamltest/filecompare.cmi \ + ocamltest/environments.cmi \ + ocamltest/builtin_variables.cmi \ + ocamltest/actions.cmi \ + ocamltest/actions_helpers.cmi +ocamltest/actions_helpers.cmx : \ + ocamltest/variables.cmx \ + otherlibs/unix/unix.cmx \ + ocamltest/strace.cmx \ + ocamltest/run_command.cmx \ + ocamltest/result.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/modifier_parser.cmx \ + ocamltest/filecompare.cmx \ + ocamltest/environments.cmx \ + ocamltest/builtin_variables.cmx \ + ocamltest/actions.cmx \ + ocamltest/actions_helpers.cmi +ocamltest/actions_helpers.cmi : \ + ocamltest/variables.cmi \ + ocamltest/result.cmi \ + ocamltest/environments.cmi \ + ocamltest/actions.cmi +ocamltest/builtin_actions.cmo : \ + otherlibs/unix/unix.cmi \ + ocamltest/result.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/environments.cmi \ + ocamltest/builtin_variables.cmi \ + ocamltest/actions_helpers.cmi \ + ocamltest/actions.cmi \ + ocamltest/builtin_actions.cmi +ocamltest/builtin_actions.cmx : \ + otherlibs/unix/unix.cmx \ + ocamltest/result.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/environments.cmx \ + ocamltest/builtin_variables.cmx \ + ocamltest/actions_helpers.cmx \ + ocamltest/actions.cmx \ + ocamltest/builtin_actions.cmi +ocamltest/builtin_actions.cmi : \ + ocamltest/actions.cmi +ocamltest/builtin_variables.cmo : \ + ocamltest/variables.cmi \ + ocamltest/builtin_variables.cmi +ocamltest/builtin_variables.cmx : \ + ocamltest/variables.cmx \ + ocamltest/builtin_variables.cmi +ocamltest/builtin_variables.cmi : \ + ocamltest/variables.cmi +ocamltest/environments.cmo : \ + ocamltest/variables.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/environments.cmi +ocamltest/environments.cmx : \ + ocamltest/variables.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/environments.cmi +ocamltest/environments.cmi : \ + ocamltest/variables.cmi +ocamltest/filecompare.cmo : \ + ocamltest/run_command.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/filecompare.cmi +ocamltest/filecompare.cmx : \ + ocamltest/run_command.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/filecompare.cmi +ocamltest/filecompare.cmi : +ocamltest/main.cmo : \ + ocamltest/variables.cmi \ + otherlibs/unix/unix.cmi \ + ocamltest/tsl_semantics.cmi \ + ocamltest/tsl_parser.cmi \ + ocamltest/tsl_lexer.cmi \ + ocamltest/tsl_ast.cmi \ + ocamltest/translate.cmi \ + ocamltest/tests.cmi \ + ocamltest/result.cmi \ + ocamltest/options.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocaml_actions.cmi \ + parsing/location.cmi \ + ocamltest/environments.cmi \ + ocamltest/builtin_variables.cmi \ + ocamltest/actions_helpers.cmi \ + ocamltest/actions.cmi \ + ocamltest/main.cmi +ocamltest/main.cmx : \ + ocamltest/variables.cmx \ + otherlibs/unix/unix.cmx \ + ocamltest/tsl_semantics.cmx \ + ocamltest/tsl_parser.cmx \ + ocamltest/tsl_lexer.cmx \ + ocamltest/tsl_ast.cmx \ + ocamltest/translate.cmx \ + ocamltest/tests.cmx \ + ocamltest/result.cmx \ + ocamltest/options.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocaml_actions.cmx \ + parsing/location.cmx \ + ocamltest/environments.cmx \ + ocamltest/builtin_variables.cmx \ + ocamltest/actions_helpers.cmx \ + ocamltest/actions.cmx \ + ocamltest/main.cmi +ocamltest/main.cmi : +ocamltest/modifier_parser.cmo : \ + ocamltest/variables.cmi \ + ocamltest/tsl_lexer.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/environments.cmi \ + ocamltest/modifier_parser.cmi +ocamltest/modifier_parser.cmx : \ + ocamltest/variables.cmx \ + ocamltest/tsl_lexer.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/environments.cmx \ + ocamltest/modifier_parser.cmi +ocamltest/modifier_parser.cmi : \ + ocamltest/environments.cmi +ocamltest/ocaml_actions.cmo : \ + ocamltest/result.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/ocaml_variables.cmi \ + ocamltest/ocaml_toplevels.cmi \ + ocamltest/ocaml_tools.cmi \ + ocamltest/ocaml_modifiers.cmi \ + ocamltest/ocaml_flags.cmi \ + ocamltest/ocaml_filetypes.cmi \ + ocamltest/ocaml_files.cmi \ + ocamltest/ocaml_directories.cmi \ + ocamltest/ocaml_compilers.cmi \ + ocamltest/ocaml_commands.cmi \ + ocamltest/ocaml_backends.cmi \ + utils/misc.cmi \ + ocamltest/filecompare.cmi \ + ocamltest/environments.cmi \ + utils/config.cmi \ + file_formats/cmo_format.cmi \ + utils/clflags.cmi \ + ocamltest/builtin_variables.cmi \ + ocamltest/actions_helpers.cmi \ + ocamltest/actions.cmi \ + ocamltest/ocaml_actions.cmi +ocamltest/ocaml_actions.cmx : \ + ocamltest/result.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/ocaml_variables.cmx \ + ocamltest/ocaml_toplevels.cmx \ + ocamltest/ocaml_tools.cmx \ + ocamltest/ocaml_modifiers.cmx \ + ocamltest/ocaml_flags.cmx \ + ocamltest/ocaml_filetypes.cmx \ + ocamltest/ocaml_files.cmx \ + ocamltest/ocaml_directories.cmx \ + ocamltest/ocaml_compilers.cmx \ + ocamltest/ocaml_commands.cmx \ + ocamltest/ocaml_backends.cmx \ + utils/misc.cmx \ + ocamltest/filecompare.cmx \ + ocamltest/environments.cmx \ + utils/config.cmx \ + file_formats/cmo_format.cmi \ + utils/clflags.cmx \ + ocamltest/builtin_variables.cmx \ + ocamltest/actions_helpers.cmx \ + ocamltest/actions.cmx \ + ocamltest/ocaml_actions.cmi +ocamltest/ocaml_actions.cmi : \ + ocamltest/actions.cmi +ocamltest/ocaml_backends.cmo : \ + ocamltest/ocaml_backends.cmi +ocamltest/ocaml_backends.cmx : \ + ocamltest/ocaml_backends.cmi +ocamltest/ocaml_backends.cmi : +ocamltest/ocaml_commands.cmo : \ + ocamltest/ocaml_files.cmi \ + ocamltest/ocaml_commands.cmi +ocamltest/ocaml_commands.cmx : \ + ocamltest/ocaml_files.cmx \ + ocamltest/ocaml_commands.cmi +ocamltest/ocaml_commands.cmi : +ocamltest/ocaml_compilers.cmo : \ + ocamltest/variables.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocaml_variables.cmi \ + ocamltest/ocaml_tools.cmi \ + ocamltest/ocaml_files.cmi \ + ocamltest/ocaml_commands.cmi \ + ocamltest/ocaml_backends.cmi \ + ocamltest/builtin_variables.cmi \ + ocamltest/ocaml_compilers.cmi +ocamltest/ocaml_compilers.cmx : \ + ocamltest/variables.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocaml_variables.cmx \ + ocamltest/ocaml_tools.cmx \ + ocamltest/ocaml_files.cmx \ + ocamltest/ocaml_commands.cmx \ + ocamltest/ocaml_backends.cmx \ + ocamltest/builtin_variables.cmx \ + ocamltest/ocaml_compilers.cmi +ocamltest/ocaml_compilers.cmi : \ + ocamltest/variables.cmi \ + ocamltest/ocaml_tools.cmi \ + ocamltest/ocaml_backends.cmi +ocamltest/ocaml_directories.cmo : \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/ocaml_directories.cmi +ocamltest/ocaml_directories.cmx : \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/ocaml_directories.cmi +ocamltest/ocaml_directories.cmi : +ocamltest/ocaml_files.cmo : \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/ocaml_directories.cmi \ + ocamltest/ocaml_files.cmi +ocamltest/ocaml_files.cmx : \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/ocaml_directories.cmx \ + ocamltest/ocaml_files.cmi +ocamltest/ocaml_files.cmi : +ocamltest/ocaml_filetypes.cmo : \ + ocamltest/ocamltest_config.cmi \ + ocamltest/ocaml_backends.cmi \ + ocamltest/ocaml_filetypes.cmi +ocamltest/ocaml_filetypes.cmx : \ + ocamltest/ocamltest_config.cmx \ + ocamltest/ocaml_backends.cmx \ + ocamltest/ocaml_filetypes.cmi +ocamltest/ocaml_filetypes.cmi : \ + ocamltest/ocaml_backends.cmi +ocamltest/ocaml_flags.cmo : \ + ocamltest/ocaml_variables.cmi \ + ocamltest/ocaml_files.cmi \ + ocamltest/ocaml_directories.cmi \ + ocamltest/ocaml_backends.cmi \ + ocamltest/environments.cmi \ + ocamltest/ocaml_flags.cmi +ocamltest/ocaml_flags.cmx : \ + ocamltest/ocaml_variables.cmx \ + ocamltest/ocaml_files.cmx \ + ocamltest/ocaml_directories.cmx \ + ocamltest/ocaml_backends.cmx \ + ocamltest/environments.cmx \ + ocamltest/ocaml_flags.cmi +ocamltest/ocaml_flags.cmi : \ + ocamltest/ocaml_backends.cmi \ + ocamltest/environments.cmi +ocamltest/ocaml_modifiers.cmo : \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/ocaml_variables.cmi \ + ocamltest/environments.cmi \ + ocamltest/ocaml_modifiers.cmi +ocamltest/ocaml_modifiers.cmx : \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/ocaml_variables.cmx \ + ocamltest/environments.cmx \ + ocamltest/ocaml_modifiers.cmi +ocamltest/ocaml_modifiers.cmi : \ + ocamltest/environments.cmi +ocamltest/ocaml_tests.cmo : \ + ocamltest/tests.cmi \ + ocamltest/ocamltest_config.cmi \ + ocamltest/ocaml_actions.cmi \ + ocamltest/builtin_actions.cmi \ + ocamltest/actions_helpers.cmi \ + ocamltest/ocaml_tests.cmi +ocamltest/ocaml_tests.cmx : \ + ocamltest/tests.cmx \ + ocamltest/ocamltest_config.cmx \ + ocamltest/ocaml_actions.cmx \ + ocamltest/builtin_actions.cmx \ + ocamltest/actions_helpers.cmx \ + ocamltest/ocaml_tests.cmi +ocamltest/ocaml_tests.cmi : \ + ocamltest/tests.cmi +ocamltest/ocaml_tools.cmo : \ + ocamltest/variables.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocaml_variables.cmi \ + ocamltest/ocaml_files.cmi \ + ocamltest/environments.cmi \ + ocamltest/actions_helpers.cmi \ + ocamltest/ocaml_tools.cmi +ocamltest/ocaml_tools.cmx : \ + ocamltest/variables.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocaml_variables.cmx \ + ocamltest/ocaml_files.cmx \ + ocamltest/environments.cmx \ + ocamltest/actions_helpers.cmx \ + ocamltest/ocaml_tools.cmi +ocamltest/ocaml_tools.cmi : \ + ocamltest/variables.cmi \ + ocamltest/environments.cmi +ocamltest/ocaml_toplevels.cmo : \ + ocamltest/variables.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocaml_variables.cmi \ + ocamltest/ocaml_tools.cmi \ + ocamltest/ocaml_files.cmi \ + ocamltest/ocaml_compilers.cmi \ + ocamltest/ocaml_commands.cmi \ + ocamltest/ocaml_backends.cmi \ + ocamltest/ocaml_toplevels.cmi +ocamltest/ocaml_toplevels.cmx : \ + ocamltest/variables.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocaml_variables.cmx \ + ocamltest/ocaml_tools.cmx \ + ocamltest/ocaml_files.cmx \ + ocamltest/ocaml_compilers.cmx \ + ocamltest/ocaml_commands.cmx \ + ocamltest/ocaml_backends.cmx \ + ocamltest/ocaml_toplevels.cmi +ocamltest/ocaml_toplevels.cmi : \ + ocamltest/variables.cmi \ + ocamltest/ocaml_tools.cmi \ + ocamltest/ocaml_compilers.cmi \ + ocamltest/ocaml_backends.cmi +ocamltest/ocaml_variables.cmo : \ + ocamltest/variables.cmi \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/ocaml_variables.cmi +ocamltest/ocaml_variables.cmx : \ + ocamltest/variables.cmx \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/ocaml_variables.cmi +ocamltest/ocaml_variables.cmi : \ + ocamltest/variables.cmi +ocamltest/ocamltest_config.cmo : \ + ocamltest/ocamltest_config.cmi +ocamltest/ocamltest_config.cmx : \ + ocamltest/ocamltest_config.cmi +ocamltest/ocamltest_config.cmi : +ocamltest/ocamltest_stdlib.cmo : \ + ocamltest/ocamltest_unix.cmi \ + ocamltest/ocamltest_config.cmi \ + utils/misc.cmi \ + ocamltest/ocamltest_stdlib.cmi +ocamltest/ocamltest_stdlib.cmx : \ + ocamltest/ocamltest_unix.cmx \ + ocamltest/ocamltest_config.cmx \ + utils/misc.cmx \ + ocamltest/ocamltest_stdlib.cmi +ocamltest/ocamltest_stdlib.cmi : \ + ocamltest/ocamltest_unix.cmi \ + utils/misc.cmi +ocamltest/ocamltest_unix.cmo : \ + otherlibs/unix/unix.cmi \ + ocamltest/ocamltest_unix.cmi +ocamltest/ocamltest_unix.cmx : \ + otherlibs/unix/unix.cmx \ + ocamltest/ocamltest_unix.cmi +ocamltest/ocamltest_unix.cmi : +ocamltest/ocamltest_unix_dummy.cmo : +ocamltest/ocamltest_unix_dummy.cmx : +ocamltest/ocamltest_unix_real.cmo : \ + otherlibs/unix/unix.cmi +ocamltest/ocamltest_unix_real.cmx : \ + otherlibs/unix/unix.cmx +ocamltest/options.cmo : \ + ocamltest/variables.cmi \ + ocamltest/translate.cmi \ + ocamltest/tests.cmi \ + ocamltest/actions.cmi \ + ocamltest/options.cmi +ocamltest/options.cmx : \ + ocamltest/variables.cmx \ + ocamltest/translate.cmx \ + ocamltest/tests.cmx \ + ocamltest/actions.cmx \ + ocamltest/options.cmi +ocamltest/options.cmi : \ + ocamltest/translate.cmi +ocamltest/result.cmo : \ + ocamltest/result.cmi +ocamltest/result.cmx : \ + ocamltest/result.cmi +ocamltest/result.cmi : +ocamltest/run_command.cmo : \ + ocamltest/ocamltest_stdlib.cmi \ + ocamltest/run_command.cmi +ocamltest/run_command.cmx : \ + ocamltest/ocamltest_stdlib.cmx \ + ocamltest/run_command.cmi +ocamltest/run_command.cmi : +ocamltest/strace.cmo : \ + ocamltest/variables.cmi \ + ocamltest/strace.cmi +ocamltest/strace.cmx : \ + ocamltest/variables.cmx \ + ocamltest/strace.cmi +ocamltest/strace.cmi : \ + ocamltest/variables.cmi +ocamltest/tests.cmo : \ + ocamltest/result.cmi \ + ocamltest/actions.cmi \ + ocamltest/tests.cmi +ocamltest/tests.cmx : \ + ocamltest/result.cmx \ + ocamltest/actions.cmx \ + ocamltest/tests.cmi +ocamltest/tests.cmi : \ + ocamltest/result.cmi \ + ocamltest/environments.cmi \ + ocamltest/actions.cmi +ocamltest/translate.cmo : \ + ocamltest/tsl_semantics.cmi \ + ocamltest/tsl_parser.cmi \ + ocamltest/tsl_lexer.cmi \ + ocamltest/tsl_ast.cmi \ + parsing/location.cmi \ + ocamltest/translate.cmi +ocamltest/translate.cmx : \ + ocamltest/tsl_semantics.cmx \ + ocamltest/tsl_parser.cmx \ + ocamltest/tsl_lexer.cmx \ + ocamltest/tsl_ast.cmx \ + parsing/location.cmx \ + ocamltest/translate.cmi +ocamltest/translate.cmi : +ocamltest/tsl_ast.cmo : \ + parsing/location.cmi \ + ocamltest/tsl_ast.cmi +ocamltest/tsl_ast.cmx : \ + parsing/location.cmx \ + ocamltest/tsl_ast.cmi +ocamltest/tsl_ast.cmi : \ + parsing/location.cmi +ocamltest/tsl_lexer.cmo : \ + ocamltest/tsl_parser.cmi \ + ocamltest/tsl_lexer.cmi +ocamltest/tsl_lexer.cmx : \ + ocamltest/tsl_parser.cmx \ + ocamltest/tsl_lexer.cmi +ocamltest/tsl_lexer.cmi : \ + ocamltest/tsl_parser.cmi +ocamltest/tsl_parser.cmo : \ + ocamltest/tsl_ast.cmi \ + parsing/location.cmi \ + ocamltest/tsl_parser.cmi +ocamltest/tsl_parser.cmx : \ + ocamltest/tsl_ast.cmx \ + parsing/location.cmx \ + ocamltest/tsl_parser.cmi +ocamltest/tsl_parser.cmi : \ + ocamltest/tsl_ast.cmi +ocamltest/tsl_semantics.cmo : \ + ocamltest/variables.cmi \ + ocamltest/tsl_ast.cmi \ + ocamltest/tests.cmi \ + parsing/location.cmi \ + ocamltest/environments.cmi \ + ocamltest/actions.cmi \ + ocamltest/tsl_semantics.cmi +ocamltest/tsl_semantics.cmx : \ + ocamltest/variables.cmx \ + ocamltest/tsl_ast.cmx \ + ocamltest/tests.cmx \ + parsing/location.cmx \ + ocamltest/environments.cmx \ + ocamltest/actions.cmx \ + ocamltest/tsl_semantics.cmi +ocamltest/tsl_semantics.cmi : \ + ocamltest/tsl_ast.cmi \ + ocamltest/tests.cmi \ + ocamltest/environments.cmi \ + ocamltest/actions.cmi +ocamltest/variables.cmo : \ + ocamltest/variables.cmi +ocamltest/variables.cmx : \ + ocamltest/variables.cmi +ocamltest/variables.cmi : +testsuite/lib/lib.cmo : \ + testsuite/lib/lib.cmi +testsuite/lib/lib.cmx : \ + testsuite/lib/lib.cmi +testsuite/lib/lib.cmi : +testsuite/lib/testing.cmo : \ + testsuite/lib/testing.cmi +testsuite/lib/testing.cmx : \ + testsuite/lib/testing.cmi +testsuite/lib/testing.cmi : +testsuite/tools/codegen_main.cmo : \ + utils/profile.cmi \ + testsuite/tools/parsecmmaux.cmi \ + testsuite/tools/parsecmm.cmi \ + testsuite/tools/lexcmm.cmi \ + asmcomp/emitaux.cmi \ + asmcomp/emit.cmi \ + middle_end/compilenv.cmi \ + utils/clflags.cmi \ + asmcomp/asmgen.cmi \ + testsuite/tools/codegen_main.cmi +testsuite/tools/codegen_main.cmx : \ + utils/profile.cmx \ + testsuite/tools/parsecmmaux.cmx \ + testsuite/tools/parsecmm.cmx \ + testsuite/tools/lexcmm.cmx \ + asmcomp/emitaux.cmx \ + asmcomp/emit.cmx \ + middle_end/compilenv.cmx \ + utils/clflags.cmx \ + asmcomp/asmgen.cmx \ + testsuite/tools/codegen_main.cmi +testsuite/tools/codegen_main.cmi : +testsuite/tools/expect.cmo : \ + utils/warnings.cmi \ + toplevel/toploop.cmi \ + parsing/printast.cmi \ + parsing/pprintast.cmi \ + parsing/parsetree.cmi \ + parsing/parse.cmi \ + utils/misc.cmi \ + driver/main_args.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + driver/compmisc.cmi \ + driver/compenv.cmi \ + utils/clflags.cmi \ + typing/btype.cmi \ + parsing/asttypes.cmi \ + parsing/ast_mapper.cmi \ + testsuite/tools/expect.cmi +testsuite/tools/expect.cmx : \ + utils/warnings.cmx \ + toplevel/toploop.cmx \ + parsing/printast.cmx \ + parsing/pprintast.cmx \ + parsing/parsetree.cmi \ + parsing/parse.cmx \ + utils/misc.cmx \ + driver/main_args.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + driver/compmisc.cmx \ + driver/compenv.cmx \ + utils/clflags.cmx \ + typing/btype.cmx \ + parsing/asttypes.cmi \ + parsing/ast_mapper.cmx \ + testsuite/tools/expect.cmi +testsuite/tools/expect.cmi : \ + parsing/location.cmi +testsuite/tools/lexcmm.cmo : \ + testsuite/tools/parsecmm.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + lambda/lambda.cmi \ + testsuite/tools/lexcmm.cmi +testsuite/tools/lexcmm.cmx : \ + testsuite/tools/parsecmm.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + lambda/lambda.cmx \ + testsuite/tools/lexcmm.cmi +testsuite/tools/lexcmm.cmi : \ + testsuite/tools/parsecmm.cmi +testsuite/tools/parsecmm.cmo : \ + testsuite/tools/parsecmmaux.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + lambda/lambda.cmi \ + lambda/debuginfo.cmi \ + utils/config.cmi \ + asmcomp/cmm.cmi \ + parsing/asttypes.cmi \ + asmcomp/arch.cmi \ + testsuite/tools/parsecmm.cmi +testsuite/tools/parsecmm.cmx : \ + testsuite/tools/parsecmmaux.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + lambda/lambda.cmx \ + lambda/debuginfo.cmx \ + utils/config.cmx \ + asmcomp/cmm.cmx \ + parsing/asttypes.cmi \ + asmcomp/arch.cmx \ + testsuite/tools/parsecmm.cmi +testsuite/tools/parsecmm.cmi : \ + parsing/location.cmi \ + lambda/lambda.cmi \ + asmcomp/cmm.cmi +testsuite/tools/parsecmmaux.cmo : \ + parsing/location.cmi \ + lambda/lambda.cmi \ + lambda/debuginfo.cmi \ + middle_end/backend_var.cmi \ + testsuite/tools/parsecmmaux.cmi +testsuite/tools/parsecmmaux.cmx : \ + parsing/location.cmx \ + lambda/lambda.cmx \ + lambda/debuginfo.cmx \ + middle_end/backend_var.cmx \ + testsuite/tools/parsecmmaux.cmi +testsuite/tools/parsecmmaux.cmi : \ + parsing/location.cmi \ + lambda/debuginfo.cmi \ + middle_end/backend_var.cmi diff --git a/.depend.menhir b/.depend.menhir index 3b9e6e09..67a4e60e 100644 --- a/.depend.menhir +++ b/.depend.menhir @@ -1,11 +1,28 @@ -parsing/parser.cmo : parsing/syntaxerr.cmi parsing/parsetree.cmi \ - parsing/longident.cmi parsing/location.cmi parsing/docstrings.cmi \ - utils/clflags.cmi parsing/asttypes.cmi parsing/ast_helper.cmi \ +parsing/parser.cmo : \ + parsing/syntaxerr.cmi \ + parsing/parsetree.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ + parsing/docstrings.cmi \ + utils/clflags.cmi \ + parsing/builtin_attributes.cmi \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmi \ parsing/parser.cmi -parsing/parser.cmx : parsing/syntaxerr.cmx parsing/parsetree.cmi \ - parsing/longident.cmx parsing/location.cmx parsing/docstrings.cmx \ - utils/clflags.cmx parsing/asttypes.cmi parsing/ast_helper.cmx \ +parsing/parser.cmx : \ + parsing/syntaxerr.cmx \ + parsing/parsetree.cmi \ + parsing/longident.cmx \ + parsing/location.cmx \ + parsing/docstrings.cmx \ + utils/clflags.cmx \ + parsing/builtin_attributes.cmx \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmx \ parsing/parser.cmi -parsing/parser.cmi : parsing/parsetree.cmi parsing/location.cmi \ +parsing/parser.cmi : \ + parsing/parsetree.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ parsing/docstrings.cmi -parsing/parser.ml parsing/parser.mli: parsing/ast_helper.cmi parsing/asttypes.cmi utils/clflags.cmi parsing/docstrings.cmi parsing/location.cmi parsing/longident.cmi parsing/parsetree.cmi parsing/syntaxerr.cmi +parsing/parser.ml parsing/parser.mli: parsing/ast_helper.cmi parsing/asttypes.cmi parsing/builtin_attributes.cmi utils/clflags.cmi parsing/docstrings.cmi parsing/location.cmi parsing/longident.cmi parsing/parsetree.cmi parsing/syntaxerr.cmi diff --git a/.gitattributes b/.gitattributes index 4ac00cad..0693c28c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -22,7 +22,6 @@ # Binary files /boot/ocamlc binary /boot/ocamllex binary -/boot/ocamldep binary *.gif binary *.png binary *.tfm binary @@ -42,7 +41,7 @@ # the lines involved in the conflict, which is arguably worse #/Changes merge=union -# No header for text files (would be too obtrusive). +# No header for text and META files (would be too obtrusive). *.md typo.missing-header README* typo.missing-header VERSION typo.missing-header @@ -50,17 +49,21 @@ VERSION typo.missing-header api_docgen/*.mld typo.missing-header api_docgen/alldoc.tex typo.missing-header tools/mantis2gh_stripped.csv typo.missing-header +META.in typo.missing-header -*.adoc typo.long-line=may +# Hyperlinks and other markup features cause long lines +*.adoc typo.long-line=may typo.very-long-line=may +*.md typo.long-line=may typo.very-long-line=may # Github templates and scripts lack headers, have long lines /.github/** typo.missing-header typo.long-line=may typo.very-long-line=may /.mailmap typo.long-line typo.missing-header typo.non-ascii -/.merlin typo.missing-header +/CONTRIBUTING.md typo.non-ascii=may +/README.adoc typo.non-ascii=may +/README.win32.adoc typo.non-ascii=may /Changes typo.utf8 typo.missing-header /release-info/News typo.utf8 typo.missing-header -/INSTALL typo.missing-header /LICENSE typo.very-long-line typo.missing-header # tools/ci/appveyor/appveyor_build.cmd only has missing-header because # dra27 too lazy to update check-typo to interpret Cmd-style comments! @@ -72,6 +75,9 @@ tools/mantis2gh_stripped.csv typo.missing-header .depend typo.prune /.depend.menhir typo.prune +# These can be fixed at some point +/tools/*.py typo.long-line + # Makefiles may contain tabs Makefile* typo.makefile-whitespace=may @@ -88,27 +94,21 @@ configure typo.prune ocaml-variants.opam typo.prune -emacs/*.el typo.long-line=may -emacs/caml.el typo.long-line=may typo.missing-header -emacs/COPYING typo.prune -emacs/ocamltags.in typo.non-printing - ocamldoc/** typo.long-line=may ocamldoc/Changes.txt typo.missing-header ocamldoc/ocamldoc.sty typo.missing-header ocamldoc/odoc_index.html typo.missing-header -otherlibs/win32unix/readlink.c typo.long-line -otherlibs/win32unix/stat.c typo.long-line -otherlibs/win32unix/symlink.c typo.long-line +otherlibs/unix/readlink_win32.c typo.long-line +otherlibs/unix/stat_win32.c typo.long-line +otherlibs/unix/symlink_win32.c typo.long-line runtime/sak.c typo.non-ascii -runtime/caml/compatibility.h typo.very-long-line stdlib/hashbang typo.white-at-eol typo.missing-lf testsuite/tests/** typo.missing-header typo.long-line=may -testsuite/tests/lib-bigarray-2/bigarrf.f typo.tab +testsuite/tests/lib-bigarray-2/bigarrf.f typo.tab linguist-language=Fortran testsuite/tests/lib-unix/win-stat/fakeclock.c typo.missing-header=false testsuite/tests/misc-unsafe/almabench.ml typo.long-line testsuite/tests/tool-toplevel/strings.ml typo.utf8 @@ -117,8 +117,8 @@ testsuite/tests/asmgen/immediates.cmm typo.very-long-line testsuite/tests/generated-parse-errors/errors.* typo.very-long-line testsuite/tools/*.S typo.missing-header testsuite/tools/*.asm typo.missing-header -testsuite/typing typo.missing-header testsuite/tests/messages/highlight_tabs.ml typo.tab +testsuite/tests/tool-toplevel/multi_phrase_line.ml typo.very-long-line # prune testsuite reference files testsuite/tests/**/*.reference typo.prune @@ -126,18 +126,18 @@ testsuite/tests/**/*.reference typo.prune # Expect tests with overly long lines of expected output testsuite/tests/parsing/docstrings.ml typo.very-long-line +# Generated test with overly long ocamltest description +testsuite/tests/lib-dynlink-domains/main.ml typo.very-long-line + # The normalisation tests have very specific line endings which mustn't be # corrupted by git. testsuite/tests/tool-ocamltest/norm*.reference binary tools/magic typo.missing-header -tools/eventlog_metadata.in typo.missing-header # TODO we should fix the long-line errors in yacc/*.c /yacc/*.[ch] typo.very-long-line=may -menhir-bench.bash typo.missing-header typo.utf8 - # bootstrap files produced by Menhir /boot/menhir/** typo.long-line=may typo.very-long-line=may /boot/menhir/** typo.missing-header=may @@ -148,7 +148,7 @@ menhir-bench.bash typo.missing-header typo.utf8 *.sh text eol=lf *.sh.in text eol=lf *.awk text eol=lf -*.m4 text eol=lf +*.m4 text eol=lf linguist-language=M4Sugar # ocamltest hooks which are used in the testsuite *.check-program-output text eol=lf @@ -156,49 +156,57 @@ menhir-bench.bash typo.missing-header typo.utf8 /tools/ci/appveyor/appveyor_build.cmd text eol=crlf -aclocal.m4 typo.tab +Makefile* linguist-language=Makefile +*.c linguist-language=C +*.h linguist-language=C +*.h.in linguist-language=C +*.hva linguist-language=TeX +*.ml linguist-language=OCaml +*.ml? linguist-language=OCaml +*.mld linguist-documentation +*.ml*.in linguist-language=OCaml +*.tbl linguist-language=C + +aclocal.m4 typo.tab -linguist-vendored linguist-language=M4Sugar configure.ac text eol=lf -build-aux/compile text eol=lf -build-aux/config.guess text eol=lf -build-aux/config.sub text eol=lf -build-aux/install text eol=lf -build-aux/missing text eol=lf -ocamldoc/remove_DEBUG text eol=lf -ocamltest/getocamloptdefaultflags text eol=lf -ocamltest/ocamltest.org typo.long-line=may typo.missing-header +# These scripts are all parts of autoconf and are tagged linguist-generated +# to suppress inclusion in PR diffs. +build-aux/compile linguist-generated text eol=lf +build-aux/config.guess linguist-generated text eol=lf +build-aux/config.sub linguist-generated text eol=lf +build-aux/install-sh linguist-generated text eol=lf +build-aux/ltmain.sh linguist-generated text eol=lf +build-aux/missing linguist-generated text eol=lf +build-aux/*.m4 linguist-vendored +build-aux/ocaml_version.m4 -linguist-vendored linguist-language=M4Sugar +ocamltest/OCAMLTEST.org typo.long-line=may typo.missing-header stdlib/Compflags text eol=lf -stdlib/sharpbang text eol=lf +stdlib/hashbang -text tools/autogen text eol=lf -tools/ci/inria/remove-sinh-primitive.patch text eol=lf +tools/bump-magic-numbers eol=lf typo.long-line +tools/ci/inria/bootstrap/remove-sinh-primitive.patch -text +tools/ci/inria/bootstrap/script text eol=lf +tools/ci/inria/dune-build/script text eol=lf +tools/ci/inria/launch text eol=lf +tools/ci/inria/light text eol=lf +tools/ci/inria/main text eol=lf +tools/ci/inria/other-configs/script text eol=lf +tools/ci/inria/sanitizers/script text eol=lf +tools/ci/inria/step-by-step-build/script text eol=lf tools/check-typo text eol=lf tools/check-symbol-names text eol=lf -tools/ci-build text eol=lf tools/msvs-promote-path text eol=lf -tools/gdb-macros text eol=lf +tools/gdb-macros text eol=lf linguist-language=GDB tools/magic text eol=lf -tools/make-opcodes text eol=lf -tools/make-package-macosx text eol=lf -tools/ocaml-objcopy-macosx text eol=lf tools/ocamlsize text eol=lf tools/pre-commit-githook text eol=lf -tools/markdown-add-pr-links.sh text eol=lf -runtime/caml/compatibility.h typo.long-line=may - -# These are all Perl scripts, so may not actually require this -manual/tools/caml-tex text eol=lf -manual/tools/format-intf text eol=lf -manual/tools/htmlcut text eol=lf -manual/tools/htmltbl text eol=lf -manual/tools/htmlthread text eol=lf -manual/tools/texexpand text eol=lf +runtime/caml/sizeclasses.h typo.missing-header # Tests which include references spanning multiple lines fail with \r\n # endings, so use \n endings only, even on Windows. -testsuite/tests/backtrace/names.ml text eol=lf testsuite/tests/basic-modules/anonymous.ml text eol=lf testsuite/tests/formatting/test_locations.ml text eol=lf testsuite/tests/functors/functors.ml text eol=lf -testsuite/tests/lib-dynlink-initializers/test10_main.ml text eol=lf testsuite/tests/parsing/attributes.ml text eol=lf testsuite/tests/parsing/extensions.ml text eol=lf testsuite/tests/parsing/hash_ambiguity.ml text eol=lf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 338a60b1..03d95cc5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,93 +1,204 @@ name: Build -on: [push, pull_request] +on: + push: + branches: + - '4.**' + - '5.**' + - 'trunk' + pull_request: + +# Restrict the GITHUB_TOKEN +permissions: {} + +# List of test directories for the debug-s4096 and linux-O0 jobs. +# These directories are selected because of their tendencies to reach corner +# cases in the runtime system. +env: + PARALLEL_TESTS: parallel callback gc-roots weak-ephe-final + +# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency +# Concurrent workflows are grouped by the PR or branch that triggered them +# (github.ref) and the name of the workflow (github.workflow). The +# 'cancel-in-progress' option then make sure that only one workflow is running +# at a time. This doesn't prevent new jobs from running, rather it cancels +# already running jobs before scheduling new jobs. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name == 'pull_request' || github.sha }} + cancel-in-progress: true jobs: - no-naked-pointers: - runs-on: ubuntu-latest +# This job will do the initial build of the compiler (on linux), with flambda on. +# We then upload the compiler tree as a build artifact to enable re-use in +# subsequent jobs. + build: + runs-on: 'ubuntu-latest' + outputs: + manual_changed: ${{ steps.manual.outputs.manual_changed }} steps: - - name: Checkout - uses: actions/checkout@v2 - - name: configure tree - run: ./configure --disable-naked-pointers --disable-stdlib-manpages --disable-dependency-generation --enable-ocamltest - - name: Build - run: | - make -j world.opt - - name: Run the testsuite - run: | - make -C testsuite USE_RUNTIME=d all - i386-static: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Check for manual changes + id: manual + run: >- + tools/ci/actions/check-manual-modified.sh + '${{ github.ref }}' + '${{ github.event_name }}' + '${{ github.event.pull_request.base.ref }}' + '${{ github.event.pull_request.base.sha }}' + '${{ github.event.pull_request.head.ref }}' + '${{ github.event.pull_request.head.sha }}' + '${{ github.event.ref }}' + '${{ github.event.before }}' + '${{ github.event.ref }}' + '${{ github.event.after }}' + '${{ github.event.repository.full_name }}' + - name: Configure tree + run: | + MAKE_ARG=-j CONFIG_ARG='--enable-flambda --enable-cmm-invariants --enable-dependency-generation --enable-native-toplevel' OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh configure + - name: Build + run: | + MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh build + - name: Prepare Artifact + run: tar --zstd -cf /tmp/sources.tar.zstd . + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: compiler + path: /tmp/sources.tar.zstd + retention-days: 1 + +# Full testsuite run, and other sanity checks +# "extra" testsuite runs, reusing the previously built compiler tree. +# debug: running the full testsuite with the +# debug runtime and minor heap verification. +# debug-s4096: select testsuite run with the debug runtime and a small +# minor heap. + normal: + name: ${{ matrix.name }} + needs: build runs-on: ubuntu-latest + strategy: + matrix: + include: + - id: normal + name: normal + dependencies: texlive-latex-extra texlive-fonts-recommended hevea sass + - id: debug + name: extra (debug) + - id: debug-s4096 + name: extra (debug-s4096) + steps: + - name: Download Artifact + uses: actions/download-artifact@v3 + with: + name: compiler + - name: Unpack Artifact + run: | + tar --zstd -xf sources.tar.zstd + rm -f sources.tar.zstd + - name: Packages + if: matrix.dependencies != '' + run: | + sudo apt-get update -y && sudo apt-get install -y ${{ matrix.dependencies }} + - name: Run the testsuite + if: matrix.id == 'normal' + run: | + MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh test + - name: Run the testsuite (debug runtime) + if: matrix.id == 'debug' + env: + OCAMLRUNPARAM: v=0,V=1 + USE_RUNTIME: d + run: | + bash -cxe "SHOW_TIMINGS=1 tools/ci/actions/runner.sh test" + - name: Run the testsuite (s=4096, debug runtime) + if: matrix.id == 'debug-s4096' + env: + OCAMLRUNPARAM: s=4096,v=0 + USE_RUNTIME: d + run: | + for dir in $PARALLEL_TESTS; do \ + bash -cxe "SHOW_TIMINGS=1 tools/ci/actions/runner.sh test_prefix $dir"; \ + done + - name: Build API Documentation + if: matrix.id == 'normal' + run: | + MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh api-docs + - name: Install + if: matrix.id == 'normal' + run: | + MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh install + - name: Build the manual + if: matrix.id == 'normal' && needs.build.outputs.manual_changed == 'true' + run: | + MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh manual + - name: Other checks + if: matrix.id == 'normal' + run: | + MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh other-checks + +# MacOS build+testsuite run, and Linux O0 run. + others: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + - name: linux-O0 + os: ubuntu-latest + config_arg: CFLAGS='-O0' + - name: macos + os: macos-latest steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Packages - run: | - sudo apt-get update -y && sudo apt-get install -y gcc-multilib gfortran-multilib - - name: configure tree - run: | - XARCH=i386 CONFIG_ARG='--disable-stdlib-manpages --disable-shared --enable-cmm-invariants' bash -xe tools/ci/actions/runner.sh configure - - name: Build - run: | - bash -xe tools/ci/actions/runner.sh build - - name: Run the testsuite - run: | - bash -xe tools/ci/actions/runner.sh test - - name: Install - run: | - bash -xe tools/ci/actions/runner.sh install - - name: Other checks - run: | - bash -xe tools/ci/actions/runner.sh other-checks - full-flambda: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: OS Dependencies + if: runner.os == 'MacOS' + run: brew install parallel + - name: configure tree + run: | + CONFIG_ARG='${{ matrix.config_arg }}' MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh configure + - name: Build + run: | + MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh build + - name: Run the testsuite + if: ${{ matrix.name != 'linux-O0' }} + run: | + bash -c 'SHOW_TIMINGS=1 tools/ci/actions/runner.sh test' + - name: Run the testsuite (linux-O0) + if: ${{ matrix.name == 'linux-O0' }} + env: + OCAMLRUNPARAM: v=0,V=1 + USE_RUNTIME: d + run: | + for dir in $PARALLEL_TESTS; do \ + bash -cxe "SHOW_TIMINGS=1 tools/ci/actions/runner.sh test_prefix $dir"; \ + done + + i386: runs-on: ubuntu-latest + container: + image: debian:12 + options: --platform linux/i386 --user root steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 50 - - name: Packages - run: | - sudo apt-get update -y && sudo apt-get install -y texlive-latex-extra texlive-fonts-recommended hevea sass - # Ensure that make distclean can be run from an empty tree - - name: distclean - run: | - MAKE_ARG=-j make distclean - - name: configure tree - run: | - MAKE_ARG=-j XARCH=x64 CONFIG_ARG='--enable-flambda --enable-cmm-invariants --enable-dependency-generation --enable-native-toplevel' OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh configure - - name: Build - run: | - MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh build - - name: Run the testsuite - run: | - MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh test - - name: Build API Documentation - run: | - MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh api-docs - - name: Install - run: | - MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh install - - name: Check for manual changes - id: manual - run: >- - tools/ci/actions/check-manual-modified.sh - '${{ github.ref }}' - '${{ github.event_name }}' - '${{ github.event.pull_request.base.ref }}' - '${{ github.event.pull_request.base.sha }}' - '${{ github.event.pull_request.head.ref }}' - '${{ github.event.pull_request.head.sha }}' - '${{ github.event.ref }}' - '${{ github.event.before }}' - '${{ github.event.ref }}' - '${{ github.event.after }}' - '${{ github.event.repository.full_name }}' - - name: Build the manual - run: | - MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh manual - # Temporarily disabled 23-Apr-2021 while Dune isn't building - if: steps.manual.outputs.changed == 'disabled' - - name: Other checks - run: | - MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh other-checks + - name: OS Dependencies + run: | + apt-get update + apt-get install -y git gcc make parallel + - name: Checkout + # See https://github.com/actions/checkout/issues/334 + uses: actions/checkout@v1 + - name: configure tree + run: | + MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh configure + - name: Build + run: | + MAKE_ARG=-j bash -xe tools/ci/actions/runner.sh build + - name: Run the testsuite + run: | + bash -xe tools/ci/actions/runner.sh test diff --git a/.github/workflows/hygiene.yml b/.github/workflows/hygiene.yml index e76ba6b9..777a6b4e 100644 --- a/.github/workflows/hygiene.yml +++ b/.github/workflows/hygiene.yml @@ -1,9 +1,20 @@ name: Hygiene on: push: + branches: + - '4.**' + - '5.**' + - 'trunk' pull_request: types: [opened, synchronize, reopened, labeled, unlabeled] +# Restrict the GITHUB_TOKEN +permissions: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: hygiene: name: Checks @@ -17,22 +28,38 @@ jobs: # context variable. if: failure() - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 50 + persist-credentials: false - name: Changes updated run: >- tools/ci/actions/check-changes-modified.sh + '${{ github.event.pull_request.issue_url }}' '${{ github.ref }}' 'pull_request' '${{ github.event.pull_request.base.ref }}' '${{ github.event.pull_request.base.sha }}' '${{ github.event.pull_request.head.ref }}' '${{ github.event.pull_request.head.sha }}' - if: >- - !contains(github.event.pull_request.labels.*.name, 'no-change-entry-needed') - && github.event_name == 'pull_request' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: github.event_name == 'pull_request' + + - name: Parsetree updated + run: >- + tools/ci/actions/check-parsetree-modified.sh + '${{ github.event.pull_request.issue_url }}' + '${{ github.ref }}' + 'pull_request' + '${{ github.event.pull_request.base.ref }}' + '${{ github.event.pull_request.base.sha }}' + '${{ github.event.pull_request.head.ref }}' + '${{ github.event.pull_request.head.sha }}' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: github.event_name == 'pull_request' - name: configure correctly generated run: >- @@ -49,6 +76,10 @@ jobs: '${{ github.event.after }}' if: ${{ always() }} + - name: Check that no ignored files have been committed + run: tools/ci/actions/check-no-ignored-files.sh + if: ${{ always() }} + - name: check-typo revered run: >- tools/ci/actions/check-typo.sh diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 27d63bfd..bed161e3 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -6,10 +6,13 @@ on: jobs: stale: runs-on: ubuntu-latest + permissions: + issues: write steps: - - uses: actions/stale@v3 + - uses: actions/stale@v8 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: 'This issue has been open one year with no activity. Consequently, it is being marked with the "stale" label. What this means is that the issue will be automatically closed in 30 days unless more comments are added or the "stale" label is removed. Comments that provide new information on the issue are especially welcome: is it still reproducible? did it appear in other contexts? how critical is it? etc.' days-before-stale: 366 days-before-close: 30 + exempt-issue-labels: 'bug' diff --git a/.gitignore b/.gitignore index f3a839fe..240a51e5 100644 --- a/.gitignore +++ b/.gitignore @@ -37,9 +37,11 @@ _ocamltestd *.odoc .merlin _build +META # local to root directory +/.dep /Makefile.build_config /Makefile.config /autom4te.cache @@ -48,6 +50,7 @@ _build /ocaml-*.cache /config.log /config.status +/configure~ /flexlink.opt /libtool /ocamlc.opt @@ -61,18 +64,20 @@ _build # specific files and patterns in sub-directories /asmcomp/emit.ml +/asmcomp/arch.mli /asmcomp/arch.ml /asmcomp/proc.ml /asmcomp/selection.ml /asmcomp/reload.ml /asmcomp/scheduling.ml /asmcomp/CSE.ml +/asmcomp/stackframe.ml /boot/ocamlrun -/boot/ocamlruns -/boot/camlheader +/boot/runtime-launch-info /boot/ocamlc.opt -/boot/flexlink.byte + +/byte/** /bytecomp/opcodes.ml /bytecomp/opcodes.mli @@ -80,6 +85,7 @@ _build /debugger/debugger_lexer.ml /debugger/debugger_parser.ml /debugger/debugger_parser.mli +/debugger/debugger_parser.output /debugger/ocamldebug /emacs/ocamltags @@ -95,10 +101,82 @@ _build /lex/ocamllex /lex/ocamllex.opt /lex/parser.output - +/manual/src/allfiles.tex +/manual/src/biblio.tex +/manual/src/foreword.tex +/manual/src/version.tex +/manual/src/warnings.etex +/manual/src/warnings.tex +/manual/src/foreword.htex +/manual/src/manual.html +/manual/src/webman +/manual/src/ifocamldoc.tex +/manual/src/cmds/*.tex +/manual/src/cmds/*.htex +/manual/src/cmds/warnings.etex /manual/src/cmds/warnings-help.etex +/manual/src/html_processing/.sass-cache +/manual/src/html_processing/camlp-streams +/manual/src/html_processing/dune +/manual/src/html_processing/markup.ml +/manual/src/html_processing/uchar +/manual/src/html_processing/uutf +/manual/src/html_processing/lambdasoup +/manual/src/html_processing/ocaml-re /manual/src/html_processing/src/common.ml +/manual/src/htmlman/*.html +/manual/src/htmlman/*.haux +/manual/src/htmlman/*.hind +/manual/src/htmlman/compilerlibref +/manual/src/htmlman/highlight.pack.js +/manual/src/htmlman/katex.min.css +/manual/src/htmlman/katex.min.js +/manual/src/htmlman/libref +/manual/src/htmlman/fonts/KaTeX* +/manual/src/htmlman/manual.hmanual +/manual/src/htmlman/manual.hmanual.kwd +/manual/src/htmlman/manual.css +/manual/src/htmlman/odoc.css +/manual/src/htmlman/*.htoc +/manual/src/htmlman/*.svg +/manual/src/infoman/*.haux +/manual/src/infoman/*.hind +/manual/src/infoman/*.info*.gz +/manual/src/infoman/*.info.body* +/manual/src/infoman/ocaml.hocaml.kwd +/manual/src/library/*.tex +/manual/src/library/*.htex +/manual/src/library/ocamldoc.out +/manual/src/library/ocamldoc.sty +/manual/src/library/compiler_libs.txt +/manual/src/refman/*.tex +/manual/src/refman/*.htex +/manual/src/refman/extensions/*.tex +/manual/src/refman/extensions/*.htex +/manual/src/texstuff/*.aux +/manual/src/texstuff/*.dvi +/manual/src/texstuff/*.idx +/manual/src/texstuff/*.ilg +/manual/src/texstuff/*.ind +/manual/src/texstuff/*.log +/manual/src/texstuff/*.toc +/manual/src/texstuff/*.ipr +/manual/src/texstuff/*.txt +/manual/src/texstuff/*.pdf +/manual/src/texstuff/*.ps +/manual/src/texstuff/manual.out +/manual/src/textman/manual.txt +/manual/src/textman/manual.hmanual.kwd +/manual/src/textman/*.haux +/manual/src/textman/*.hind +/manual/src/textman/*.htoc +/manual/src/tutorials/*.tex +/manual/src/tutorials/*.htex /manual/src/warnings-help.etex +/manual/tests/cross-reference-checker +/manual/tools/transf.ml +/manual/tools/texquote2 +/manual/tools/transf /api_docgen/build /api_docgen/odoc/build @@ -117,11 +195,7 @@ _build /ocamldoc/odoc_text_parser.ml /ocamldoc/odoc_text_parser.mli /ocamldoc/*.output -/ocamldoc/test_stdlib -/ocamldoc/test_latex -/ocamldoc/test -/ocamltest/.dep /ocamltest/ocamltest /ocamltest/ocamltest.opt /ocamltest/ocamltest_config.ml @@ -129,10 +203,12 @@ _build /ocamltest/tsl_lexer.ml /ocamltest/tsl_parser.ml /ocamltest/tsl_parser.mli +/ocamltest/tsl_parser.output /ocamltest/ocamltest.html +/opt/** + /otherlibs/*/.dep -/otherlibs/dynlink/extract_crc /otherlibs/dynlink/dynlink_platform_intf.mli /otherlibs/dynlink/byte/dynlink.mli /otherlibs/dynlink/native/dynlink.mli @@ -140,38 +216,7 @@ _build /otherlibs/dynlink/dynlink_compilerlibs/*.ml /otherlibs/dynlink/dynlink_compilerlibs/*.mli /otherlibs/dynlink/dynlink_compilerlibs/.depend -/otherlibs/threads/marshal.mli -/otherlibs/threads/stdlib.mli -/otherlibs/threads/unix.mli -/otherlibs/win32unix/unixLabels.ml* -/otherlibs/win32unix/unix.mli -/otherlibs/win32unix/access.c -/otherlibs/win32unix/addrofstr.c -/otherlibs/win32unix/chdir.c -/otherlibs/win32unix/chmod.c -/otherlibs/win32unix/cst2constr.c -/otherlibs/win32unix/cstringv.c -/otherlibs/win32unix/execv.c -/otherlibs/win32unix/execve.c -/otherlibs/win32unix/execvp.c -/otherlibs/win32unix/exit.c -/otherlibs/win32unix/getaddrinfo.c -/otherlibs/win32unix/getcwd.c -/otherlibs/win32unix/gethost.c -/otherlibs/win32unix/gethostname.c -/otherlibs/win32unix/getnameinfo.c -/otherlibs/win32unix/getproto.c -/otherlibs/win32unix/getserv.c -/otherlibs/win32unix/gmtime.c -/otherlibs/win32unix/mmap_ba.c -/otherlibs/win32unix/putenv.c -/otherlibs/win32unix/rmdir.c -/otherlibs/win32unix/socketaddr.c -/otherlibs/win32unix/strofaddr.c -/otherlibs/win32unix/time.c -/otherlibs/win32unix/unlink.c -/otherlibs/win32unix/fsync.c -/otherlibs/win32unix/mkdir.c +/otherlibs/unix/unix.ml /parsing/parser.ml /parsing/parser.mli @@ -186,12 +231,14 @@ _build /parsing/camlinternalMenhirLib.ml /parsing/camlinternalMenhirLib.mli +/runtime/domain_state.inc /runtime/caml/jumptbl.h /runtime/caml/m.h /runtime/caml/s.h /runtime/primitives -/runtime/primitives.new +/runtime/primitives*.new /runtime/prims.c +/runtime/caml/exec.h /runtime/caml/opnames.h /runtime/caml/version.h /runtime/ocamlrun @@ -199,20 +246,16 @@ _build /runtime/ocamlruni /runtime/ld.conf /runtime/.gdb_history -/runtime/.dep /runtime/build_config.h /runtime/sak -/runtime/domain_state32.inc -/runtime/domain_state64.inc -/stdlib/camlheader -/stdlib/target_camlheader -/stdlib/camlheader[di] -/stdlib/target_camlheader[di] -/stdlib/camlheader_ur +/stdlib/runtime.info +/stdlib/runtime-launch-info /stdlib/labelled-* /stdlib/caml /stdlib/sys.ml +/stdlib/target_runtime.info +/stdlib/target_runtime-launch-info /testsuite/**/*.result /testsuite/**/*.opt_result @@ -225,12 +268,12 @@ _build /testsuite/_retries - /testsuite/tools/codegen -/testsuite/tools/expect_test +/testsuite/tools/expect /testsuite/tools/lexcmm.ml /testsuite/tools/parsecmm.ml /testsuite/tools/parsecmm.mli +/testsuite/tools/parsecmm.output /tools/ocamldep /tools/ocamldep.opt @@ -239,7 +282,6 @@ _build /tools/opnames.ml /tools/dumpobj /tools/dumpobj.opt -/tools/dumpapprox /tools/ocamlobjinfo /tools/ocamlobjinfo.opt /tools/cvt_emit @@ -253,8 +295,6 @@ _build /tools/ocamlmktop.opt /tools/primreq /tools/primreq.opt -/tools/ocamldumpobj -/tools/keywords /tools/ocamlmklib /tools/ocamlmklib.opt /tools/ocamlcmt @@ -265,8 +305,9 @@ _build /tools/stripdebug.opt /tools/make_opcodes /tools/make_opcodes.ml -/tools/caml-tex +/tools/ocamltex /tools/eventlog_metadata +/tools/lintapidiff.opt /toplevel/byte/topeval.mli /toplevel/byte/trace.mli @@ -275,6 +316,12 @@ _build /toplevel/native/trace.mli /toplevel/native/topmain.mli +/utils/config_boot.ml +/utils/config_boot.mli +/utils/config.common.ml +/utils/config.generated.ml +/utils/config_main.ml +/utils/config_main.mli /utils/config.ml /utils/domainstate.ml /utils/domainstate.mli diff --git a/.gitmodules b/.gitmodules index dca1e0d2..67c9558a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "flexdll"] path = flexdll - url = https://github.com/alainfrisch/flexdll.git + url = https://github.com/ocaml/flexdll.git diff --git a/.mailmap b/.mailmap index 08c772e0..465449ba 100644 --- a/.mailmap +++ b/.mailmap @@ -43,6 +43,8 @@ Armaël Guéneau Edwin Török Edwin Török Edwin Török +Enguerrand Decorne +Fabrice Buoro ### Approved Approvers @@ -114,6 +116,7 @@ Thomas Leonard Adrien Nader Sébastien Hinderer Sébastien Hinderer +Sébastien Hinderer Gabriel Scherer Immanuel Litzroth Jacques Le Normand @@ -133,6 +136,9 @@ Wilfred Hughes John Skaller Eduardo Rafael Runhang Li +Dmitrii Kosarev +Samuel Hym +B. Szilvasy # These contributors prefer to be referred to pseudonymously whitequark diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..5a915b87 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,7 @@ +# Code of Conduct + +This project has adopted the [OCaml Code of Conduct](https://github.com/ocaml/code-of-conduct/blob/main/CODE_OF_CONDUCT.md). + +# Enforcement + +This project follows the OCaml Code of Conduct [enforcement policy](https://github.com/ocaml/code-of-conduct/blob/main/CODE_OF_CONDUCT.md#enforcement). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6663229e..1e187be1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,17 +15,13 @@ how to build the compiler distribution from sources. See ## Contribution -Modifying its sources is far from the only way to contribute to the +Modifying the sources is far from the only way to contribute to the OCaml distribution. Bug reports (in particular when they come with a reproducible example), simple typos or clarifications in the documentation also help, and help evaluating and integrating existing change proposals also help. Providing good answers on the discussion forums, or asking the good questions that highlight deficiencies in -existing documentations, also help. We currently have more -contributors willing to propose changes than contributors willing to -review other people's changes, so more eyes on the existing change -requests is a good way to increase the integration bandwidth of -external contributions. +existing documentations, also help. There are also many valuable ways to contribute to the wider OCaml ecosystem that do not involve changes to the OCaml distribution. @@ -60,6 +56,40 @@ https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-creat significantly delay the inclusion of an otherwise perfectly ok contribution. +### Maintainers + +The current list of maintainers is as follows: + +- @alainfrisch Alain Frisch +- @Armael Armaël Guéneau +- @avsm Anil Madhavapeddy +- @chambart Pierre Chambart +- @damiendoligez Damien Doligez +- @dra27 David Allsopp +- @Engil Enguerrand +- @garrigue Jacques Garrigue +- @gasche Gabriel Scherer +- @jhjourdan Jacques-Henri Jourdan +- @kayceesrk KC Sivaramakrishnan +- @let-def Frédéric Bour +- @lpw25 Leo White +- @lthls Vincent Laviron +- @maranget Luc Maranget +- @mshinwell Mark Shinwell +- @nojb Nicolás Ojeda Bär +- @Octachron Florian Angeletti +- @sadiqj Sadiq Jaffer +- @shindere Sébastien Hinderer +- @stedolan Stephen Dolan +- @trefis Thomas Refis +- @xavierleroy Xavier Leroy +- @yallop Jeremy Yallop + + + ## Coding guidelines @@ -89,101 +119,17 @@ preserving the code semantics. ## Test you must. -Whenever applicable, merge requests must come with tests -exercising the affected features: regression tests for bug fixes, -and correctness tests for new features (including corner cases and -failure cases). For regression tests, testing other aspects of the -feature (in particular, related edge cases) that are not currently -covered is a good way to catch other instances of bugs -- this did -happen several times in the past. Warnings and errors should also -be tested. - -Tests go in the sub-directories of `testsuite/tests`. Running -`make all` in `testsuite/` runs all tests (this takes -a few minutes), and you can use `make one DIR=tests/foo` to run -the tests of a specific sub-directory. There are many kind of tests -already, so the easiest way to start is to extend or copy an -existing test. - -In general, running a test produces one (or several) `.result` file, -that are compared to one (or several) `.reference` file present in the -repository; the test succeeds if they are identical. If your patch -breaks a test, diffing the `.result` and `.reference` file is a way to -see what went wrong. Some reasonable compiler changes affect the -compiler output in way that make those outputs differ (for example -slight modifications of warning or error messages may break all tests -checking warnings). If you are positive that the new `.result` file -is correct (and that the change in behavior does not endanger -backward compatibility), you can replace the old `.reference` file -with it. Finally, when adding new tests, do not forget to include your -`.reference` files (but not `.result`) in the versioned repository. - -Testing is also a way to make sure reviewers see working -(and failing) examples of the feature you fix, extend or -introduce, rather than just an abstract description of it. +Whenever applicable, merge requests must come with tests exercising +the affected features: regression tests for bug fixes, and correctness +tests for new features (including corner cases and +failure cases). Warnings and errors should also be tested. +See [testsuite/HACKING.adoc](testsuite/HACKING.adoc) for details on +how to write tests and run the testsuite. -### Run tests before sending a PR - -You should run all the tests before creating the merge request or -pushing new commits (even if Travis will also do it for you): `make -tests` (this takes a few minutes). - -Unfortunately some of the `lib-threads` test are non-deterministic -and fail once in a while (it's hard to test these well). If they -consistently break after your change, you should investigate, but if -you only see a transient failure once and your change has no reason -to affect threading, it's probably not your fault. - - -### Benchmarking - -If your contribution can impact the performance of the code generated -by the native compiler, you can use the infrastructure that the -flambda team put together to benchmark the compiler to assess the -consequences of your contribution. It has two main accessible parts: - -- The website that hosts benchmarks results, at -[http://bench.flambda.ocamlpro.com/](http://bench.flambda.ocamlpro.com/). -It exposes two ways to compare compilers: the first, under the header -`Plot a given benchmark`, allows to select a benchmark and -see graphs plotting the evolution of the performance of the different -compilers over time. The second, under `Compare two runs`, allows -to get an overview of the differences between a reference compiler -(selected using the `ref` button) and a compiler under test (using -the `tst` button). Clicking on the `Compare` button at the bottom -right of the page will create a new page containing summaries and -raw data comparing the selected runs. - -- The git repository containing the data about which benchmarks -to run, on which compilers, at [https://github.com/OCamlPro/ocamlbench-repo]( -https://github.com/OCamlPro/ocamlbench-repo). This needs to be a valid -opam 2.0 repository, and contains the benchmarks as normal packages -and the compilers as versions of the package `ocaml-variants`. -To add a compiler to the list, you must have a publicly accessible -version of your branch (if you're making a pull request again the -compiler, you should have a branch on github that was used to make -the pull request, that you can use for this purpose). -Then, you should make a pull request against `ocamlbench-repo` -that adds a repertory in the `packages/ocaml-variants` sub-folder -which contains a single `opam` file. The contents of the file -should be inspired from the other files already present, with -the main points of interest being the `url` field, which should -point to your branch, the `build` field that should be adapted -if the features that you want to benchmark depend on configure-time -options, and the `setenv` field that can be used to pass compiler -options via the `OCAMLPARAM` environment variable. -The `trunk+flambda+opt` compiler, for instance, both uses a -`configure` option and sets the `OCAMLPARAM` variable. -The folder you add has to be named `ocaml-variants.%VERSION%+%DESCR%`, -where `%VERSION%` is the version that will be used by opam to -check compatibility with the opam packages that are needed for the -benchmarks, and `%DESCR%` should be a short description of the feature -you're benchmarking (if you're making a pull request against `ocaml`, -you can use the PR number in the description, e.g. `+gpr0000`). -Once your pull request is merged, it will likely take a few hours -until the benchmark server picks up the new definition and again -up to a few hours before the results are available on the results page. +Adding tests is also a way to make sure reviewers see working +(and failing) examples of the feature you fix, extend or +introduce, rather than just an abstract description of it. ## Description of the proposed change @@ -193,9 +139,14 @@ up to a few hours before the results are available on the results page. The description of the merge request must contain a precise explanation of the proposed change. -Before going in the implementation details, you should include -a summary of the change, and a high-level description of the design -of the proposed change, with example use-cases. +Before going into the implementation details, you should include +a summary of the change, a justification of why it is beneficial, and +a high-level description of the design of the proposed change with +example use cases. + +Changes have a cost, they require review work and may accidentally +introduce new bugs. Communicating as clearly as you can the benefits +of your PR will reassure and motivate potential reviewers. ### In the patches @@ -381,6 +332,59 @@ the compiler is the balance between the increased complexity of the compiler code and the expected benefits of the benchmark. Contributors are asked to bear this in mind when making submissions. +## Collective maintenance + +Proposing changes to the OCaml compiler contribution generates +"maintenance work" for other people. Maintenance work includes, for +example: + +- reviewing Pull Requests or language change proposals, + +- considering change suggestions and giving feedback to turn them into + actionable issues, + +- implementing bug fixes or feature requests of general interest, + +- improving the documentation of the tools or other usability aspects, + +- or documenting or clarifying the codebase to preserve and improve + our ability to change it in the future. + +Doing this collective maintenance work is a selfless task, and we +typically have much fewer people willing to to do it than people +willing to submit new language features or generally evolve the +codebase for their own specific needs. Without a collective effort to +participate, we end up with a handful of people doing the vast +majority of this collective maintenance work. This is exhausting, does +not scale, and slows down the pace of improvement of the compiler +distribution. + +To keep a healthy open source project, we need the total maintenance +work performed by all contributors to scale proportionally with the +total demand for maintenance work they generate. This can only work if +as many contributors as possible perform some (possibly small) amount of +maintenance work: collective maintenance. One could use the metaphor +of a shared house: things work well when most people, not just a few +people, participate to the house chores. + +If your contributions generate maintenance work for others -- in +particular, if you spend a substantial effort working on a change to +the language or compiler codebase meant to be eventually proposed +upstream -- we expect that you will spend a fraction of your +contribution time on maintenance tasks, typically on the parts of the +compiler codebase that you are already working on. This approach is +good for the project, and also for you: helping maintain the codebase +will improve the quality of your own contributions, and the social +ties created by infrequent collaboration with other contributors will +be useful when submitting your own work. + +Note: we have been asked whether groups of contributors could balance +maintenance work at the level of the whole group, rather than +individual contributors -- for example a company where some frequent +OCaml contributors would do less maintenance and others would do more +to compensate. Yes, that sounds reasonable, but also harder to balance +than encouraging everyone to play nice individually. + ## Contributor License Agreement We distinguish two kind of contributions: diff --git a/Changes b/Changes index a91fe1ec..208d5e86 100644 --- a/Changes +++ b/Changes @@ -1,16 +1,2418 @@ -OCaml 4.14.1 (20 December 2022) +OCaml 5.2.0 +------------ + +(Changes that can break existing programs are marked with a "*") + +### Restored and new backends: + +- #12276, #12601: native-code compilation for POWER (64 bits, little-endian) + (Xavier Leroy, review by KC Sivaramakrishnan, Anil Madhavapeddy, + and Stephen Dolan) + +- #12667: extend the latter to POWER 64 bits, big-endian, ELFv2 ABI + (A. Wilcox, review by Xavier Leroy) + +### Language features: + +- #12295, #12568: Give `while true' a polymorphic type, similarly to + `assert false' + (Jeremy Yallop, review by Nicolás Ojeda Bär and Gabriel Scherer, + suggestion by Rodolphe Lepigre and John Whitington) + +- #12315: Use type annotations from arguments in let rec + (Stephen Dolan, review by Gabriel Scherer) + +- #11252, RFC 27: Support raw identifier syntax \#foo + (Stephen Dolan, review by David Allsopp, Gabriel Scherer and Olivier Nicole) + +- #12044: Add local module open syntax for types. + ``` + module A = struct + type t = int + type r = unit + type s = string + end + + type example = A.(t * r * s) + ``` + (Alistair O'Brien, review by Gabriel Scherer, Nicolás Ojeda Bär + and Florian Angeletti) + +- #12456: Document the incompatibility between effects on the one + hand, and `caml_callback` and asynchronous callbacks (signal + handlers, finalisers, memprof callbacks...) on the other hand. + (Guillaume Munch-Maccagnoni, review by KC Sivaramakrishnan) + +- #12375: allow use of [@untagged] for all immediate types like char, bool, + and variant with only constant constructors. + (Christophe Raffalli, review by Gabriel Scherer) + +* #12502: the compiler now normalizes the newline sequence \r\n to + a single \n character during lexing, to guarantee that the semantics + of newlines in string literals is not modified by Windows tools + transforming \n into \r\n in source files. + Warning 29 [eol-in-string] is not emitted anymore, as the normalization + gives a more robust semantics to newlines in string literals. + (Gabriel Scherer and Damien Doligez, review by Daniel Bünzli, David + Allsopp, Andreas Rossberg, Xavier Leroy, report by Andreas Rossberg) + +- #13130: minor fixes to pprintast for raw identifiers and local module open + syntax for types. + (Chet Murthy, review by Gabriel Scherer) + +### Type system: + +- #12313, #11799: Do not re-build as-pattern type when a ground type annotation + is given. This allows to work around problems with GADTs in as-patterns. + (Jacques Garrigue, report by Leo White, review by Gabriel Scherer) + +### Runtime system: + +- #12193: Re-introduce GC compaction for shared pools + Adds a parallel compactor for the shared pools (which contain major heap + blocks sized less than 128 words). Explicit only for now, on calls to + `Gc.compact`. + (Sadiq Jaffer, Nick Barnes, review by Anil Madhavapeddy, Damien Doligez, + David Allsopp, Miod Vallat, Artem Pianykh, Stephen Dolan, Mark Shinwell + and KC Sivaramakrishnan) + +- #12850: Update Gc.quick_stat data at the end of major cycles and compaction + This PR adds an additional caml_collect_gc_stats_sample_stw to the major heap + cycling stw. This means that Gc.quick_stat now actually reflects the state of + the heap after a major cycle or compaction. + (Sadiq Jaffer, review by Miod Vallat and Gabriel Scherer) + +- #12859: Ensure Gc.compact does a full major before the compactor runs + (Sadiq Jaffer, review by Leo White, Mark Shinwell, Gabriel Scherer, + Josh Berdine, David Allsopp and KC Sivaramakrishnan) + +- #10111: Increase the detail of location information for debugging events to + allow the end line number and character offset to be reported. + (David Allsopp, review by Nick Barnes, Enguerrand Decorne and Stephen Dolan) + +- #10403, #12202: introduce `caml_ext_table_add_noexc` that does not + raise `Out_of_memory` exceptions and use it inside the blocking sections + of `caml_read_directory`. Also, check for overflows in ext table sizes. + (Xavier Leroy, report by Arseniy Alekseyev, review by Gabriel Scherer) + +- #11332, #12702: make sure `Bool_val(v)` has type `bool` in C++ + (Xavier Leroy, report by ygrek, review by Gabriel Scherer) + +- #12772, #12787: Avoid using _Bool in public headers for the sake of C++ + compatibility + (Guillaume Munch-Maccagnoni, report by KC Sivaramakrishnan, review + by Xavier Leroy and KC Sivaramakrishnan) + +- #12223: Constify constructors and flags tables in C code. Now these + tables will go in the readonly segment, where they belong. + (Antonin Décimo, review by Gabriel Scherer and Xavier Leroy) + +- #12234: make instrumented time calculation more thread-safe on macOS. + (Anil Madhavapeddy, review by Daniel Bünzli and Xavier Leroy) + +- #12235, #12468: introduce and use the `CAMLnoret` macro as + a lighter alternative to `CAMLnoreturn_start` / `CAMLnoreturn_end`. + Implement it so as to conform with C11, C23, C++11, C++17. + (Xavier Leroy and Dhruv Maroo, with help from Antonin Décimo, review by + Gabriel Scherer and David Allsopp) + +- #12275: caml/stack.h: more abstract macros to describe OCaml stacks and + how to traverse them, supporting more stack layouts. + (Xavier Leroy, review by KC Sivaramakrishnan and Fabrice Buoro) + +- #12268: deliver `Out_of_memory` exception if domain creation fails + due to memory resource exhaustion. It was previous always a `Failure`. + (Anil Madhavapeddy, review by David Allsopp) + +- #12300, #12314: Discard out_channel buffered data on permanent I/O error + (Xavier Leroy, report by Török Edwin, review by Anil Madhavapeddy + and Nicolás Ojeda Bär) + +- #11386: Simplifications and fixes to multicore systhreads implementation. + (Guillaume Munch-Maccagnoni, review by Anil Madhavapeddy and KC + Sivaramakrishnan) + +- #12875, #12879, #12882: Execute preemptive systhread switching as a + delayed pending action. This ensures that one can reason within the + FFI that no mutation happens on the same domain when allocating on + the OCaml heap from C, consistently with OCaml 4. This also fixes + further bugs with the multicore systhreads implementation. + (Guillaume Munch-Maccagnoni, bug reports and suggestion by Mark + Shinwell, review by Nick Barnes and Stephen Dolan) + +- #12876: Port ThreadSanitizer support to Linux on POWER + (Miod Vallat, review by Tim McGilchrist) + +- #12408: `Domain.spawn` no longer leaks its functional argument for + the whole duration of the children domain lifetime. + (Guillaume Munch-Maccagnoni, review by Gabriel Scherer) + +- #12409: Fix unsafety and deadlocks should an asynchronous exception + arise at specific locations during domain creation and shutdown. + (Guillaume Munch-Maccagnoni, review by Gabriel Scherer) + +- #12114: Add ThreadSanitizer support + (Fabrice Buoro and Olivier Nicole, based on an initial work by Anmol Sahoo, + review by Damien Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Luc + Maranget, Guillaume Munch-Maccagnoni, Gabriel Scherer) + +- #11911, #12381: Restore statmemprof functionality in part + (API changes in Gc.Memprof). (Nick Barnes) + +- #12430: Simplify dynamic bytecode loading in Meta.reify_bytecode + (Stephen Dolan, review by Sébastien Hinderer, Vincent Laviron and Xavier + Leroy) + +- #12489: Fix an error-handling bug in caml_alloc_sprintf + (Stephen Dolan, report by Chris Casinghino, review by Jeremy Yallop + and Xavier Leroy) + +- #11307: Finish adapting the implementation of asynchronous actions for + multicore: soundness, liveness, and performance issues. + Do not crash if a signal handler is called from an unregistered C + thread, and other possible soundness issues. Prevent issues where join + on other domains could make the toplevel unresponsible to Ctrl-C. Avoid + needless repeated polling in C code when callbacks cannot run + immediately. + (Guillaume Munch-Maccagnoni, review by Enguerrand Decorne, Xavier + Leroy, and KC Sivaramakrishnan) + +- #12634: Simplify TSan backtrace bookkeeping upon raise + (Olivier Nicole and Fabrice Buoro, review by Gabriel Scherer) + +* #12686: Some primitives had the wrong types to be callable from the bytecode + interpreter. Either fix their types, mark them as `CAMLexport` instead of + `CAMLprim`, or remove them entirely if no longer used. + (Xavier Leroy, review by David Allsopp) + +- #12700, continuing #11763 and trying to address #12660: + Use the correct types for primitives when generating the table of primitives + used by ocamlrun. + (Xavier Leroy, motivation, review and improvements by Antonin Décimo) + +- #12345, #12710: Fix issues with finaliser orphaning at domain termination + (KC Sivaramakrishnan, report by Gabriel Scherer, review by Gabriel Scherer, + Sadiq Jaffer and Fabrice Buoro) + +- #12599: Refactor Dynlink startup to avoid parsing bytecode sections twice + (Stephen Dolan, review by David Allsopp, Hugo Heuzard, Damien Doligez and + Xavier Leroy) + +- #12678, #12898: free channel buffers on close rather than on finalization + (Damien Doligez, review by Jan Midtgaard and Gabriel Scherer, report + by Jan Midtgaard) + +- #12681: Fix TSan false positives due to volatile write handling + (Olivier Nicole, Fabrice Buoro and Anmol Sahoo, review by Luc Maranget, + Gabriel Scherer, Hernan Ponce de Leon and Xavier Leroy) + +- #12743: Use pthread_sigmask instead of sigprocmask + Updates usage of sigprocmask to pthread_sigmask in otherlibs/unix. + (Max Slater, review by Miod Vallat and Xavier Leroy) + +- #12769: Unify MSVC and MinGW-w64 code paths, by always using WinAPI + directly. + (David Allsopp, Antonin Décimo, and Samuel Hym, review by Nicolas + Ojeda Bar) + +- #11911, #12382, #12383: Restore statmemprof functionality in part + (backtrace buffers, per-thread and per-domain data structures). + (Nick Barnes, review by Gabriel Scherer, Fabrice Buoro, Sadiq + Jaffer, and Guillaume Munch-Maccagnoni). + +- #12735: Store both ends of the stack chain in continuations + (Leo White, review by Miod Vallat and KC Sivaramakrishnan) + +- #12746: Simplify and clean up TSan annotations + (Olivier Nicole, review by Miod Vallat and Fabrice Buoro) + +- #12809: Add ThreadSanitizer support to FreeBSD/amd64 + (Miod Vallat, review by Gabriel Scherer) + +- #12810: Port ThreadSanitizer support to Linux and macOS on arm64 + (Miod Vallat, review by Tim McGilchrist) + +- #12811: Define and use the CAMLthread_local macro for TLS variables. + (Antonin Décimo and Samuel Hym, review by Miod Vallat and Xavier Leroy) + +- #12814: More detailed failure messages from `input_value` and `Marshal.from_*` + (Xavier Leroy, review by Stephen Dolan and Anil Madhavapeddy) + +- #12815: Correctly format multi-line locations in exception backtraces, in the + style that the compiler driver uses. + (David Allsopp, review by Gabriel Scherer) + +- #12773, #12830, #12834: Rewrite `caml_c_thread_(un)register` to fix + various bugs. + (Guillaume Munch-Maccagnoni, reported by Miod Vallat, suggested by + Hari Hara Naveen S, reviewed by Fabrice Buoro, Gabriel Scherer and + Miod Vallat) + +- #12886: Reinitialize IO mutexes after fork + (Max Slater, review by Guillaume Munch-Maccagnoni and Xavier Leroy) + +- #12907: Port ThreadSanitizer support to Linux on RiscV + (Miod Vallat, review by Nicolás Ojeda Bär and Fabrice Buoro) + +- #12915: Port ThreadSanitizer support to Linux on s390x + (Miod Vallat, review by Tim McGilchrist) + +- #12934: Fix data races between marking and sweeping functions + (Olivier Nicole, suggested by Stephen Dolan, review by Gabriel Scherer, + Miod Vallat and Damien Doligez) + +### Code generation and optimizations: + +- #11239: on x86-64 and RISC-V, reduce alignment of OCaml stacks from 16 to 8. + This reduces stack usage. It's only C stacks that require 16-alignment. + (Xavier Leroy, review by Gabriel Scherer and Stephen Dolan) + +- #12311: on POWER, 32-bit FP numbers stored in memory (e.g. in bigarrays) + were not correctly rounded sometimes. + (Xavier Leroy, review by Anil Madhavapeddy and Tim McGilchrist) + +- #12551, #12608, #12782, #12596: Overhaul of recursive value compilation. + Non-function recursive bindings are now forbidden from Lambda onwards, + and compiled using a new Value_rec_compiler module. + (Vincent Laviron and Lunia Ayanides, review by Gabriel Scherer, + Stefan Muenzel and Nathanaëlle Courant) + +- #1809, #12181: rewrite `compare x y op 0` to `x op y` when values are integers + (Xavier Clerc, Stefan Muenzel, review by Gabriel Scherer and Vincent Laviron) + +- #12825: disable common subexpression elimination for atomic loads... again. + (Gabriel Scherer, review by KC Sivaramakrishnan, Xavier Leroy + and Vincent Laviron, report by Vesa Karvonen) + +### Standard library: + +- #12716: Add `Format.pp_print_nothing` function. + (Léo Andrès, review by Gabriel Scherer and Nicolás Ojeda Bär) + +- #11563: Add the Dynarray module to the stdlib. Dynamic arrays are + arrays whose length can be changed by adding or removing elements at + the end, similar to 'vectors' in C++ or Rust. + (Gabriel Scherer, Simon Cruanes and Florian Angeletti, review by + Daniel Bünzli, Guillaume Munch-Maccagnoni, Clément Allain, + Damien Doligez, Wiktor Kuchta and Pieter Goetschalckx) + +* #6732, #12423: Make Buffer.add_substitute surjective and fix its + documentation. + (Damien Doligez, review by Antonin Décimo) + +* #10775, #12499: Half-precision floating-point elements in Bigarray. + (Anton Yabchinskiy, review by Xavier Leroy and Nicolás Ojeda Bär) + +- #11517, #12477: Expose pp_infinity in interface of the format module, and + check that margin is less than pp_infinity when setting or checking geometry. + (Janith Petangoda, reported by Simmo Saan, reviewed by Florian Angeletti, + Simmo Saan, Josh Berdine and Gabriel Scherer) + +- #12217: Add `Array.shuffle`. + (Daniel Bünzli, review by Nicolás Ojeda Bär, David Allsopp and Alain Frisch) + +- #12212: Add cache-aligned constructor for atomics. The patch ensures that + all allocations (of the right size) in the shared heap are aligned. + (Bartosz Modelski with Gabriel Scherer, Guillaume Munch-Maccagnoni, + Xavier Leroy, review by Alain Frisch, Anil Madhavapeddy, Gabriel Scherer, + Guillaume Munch-Maccagnoni, KC Sivaramakrishnan, Stefan Muenzel, + Xavier Leroy) + +- #12307: Add BLAKE2b hashing and an MD5 submodule to the Digest module. + (Xavier Leroy, review by Olivier Nicole, Gabriel Scherer, Wiktor Kuchta, + Daniel Bünzli, David Allsopp) + +- #12365: Add In_channel.input_bigarray, In_channel.really_input_bigarray, + Out_channel.output_bigarray, Unix.read_bigarray, Unix.write_bigarray, + Unix.single_write_bigarray. + (Nicolás Ojeda Bär, review by Jeremy Yallop, Xavier Leroy, Gabriel Scherer, + David Allsopp) + +- #12455: Add `Array.init_matrix`, `Float.Array.make_matrix`, + `Float.Array.init_matrix`. + (Glen Mével, review by Xavier Leroy, Gabriel Scherer, Jeremy Yallop, + Nicolas Ojeda Bar) + +* #12455: `Array.make_matrix dimx dimy f` now raises `Invalid_argument` + when `dimx = 0 && dimy < 0` This was already specified but not enforced. + (Glen Mével, report by Jeremy Yallop, review by Nicolas Ojeda Bar) + +- #12459: Add `Random.int_in_range`, `Random.int32_in_range`, + `Random.int64_in_range`, `Random.nativeint_in_range`, + and their counterpart in `Random.State`. + (Glen Mével and Xavier Leroy, review by Gabriel Scherer, Xavier Leroy, + Florian Angeletti) + +- #12459: `Random`: restore compatibility between 32-bit integers (JavaScript) + and 63-bit integers (64-bit OCaml). + For `Random.full_int` this was guaranteed in 4.14 but wrongly removed in 5.0. + (Xavier Leroy, review by Glen Mével) + +- #12511: Minor performance improvements and cleanups in the implementation + of modules Int32, Int64, and Nativeint + (Xavier Leroy, review by Gabriel Scherer and Daniel Bünzli) + +- #12558: Adapt GC alarms for multicore and fix their documentation. + (Guillaume Munch-Maccagnoni, review by KC Sivaramakrishnan + and Gabriel Scherer) + +- #12625: Remove the Closure module from Obj + (Vincent Laviron, review by Xavier Leroy) + +- #12758, #12998: Remove the `Marshal.Compression` flag to the + `Marshal.to_*` functions. The compilers are still able to use + ZSTD compression for compilation artefacts. + This is a forward port and clean-up of the emergency fix that was introduced + in OCaml 5.1.1 by #12734. + (Xavier Leroy, review by Damien Doligez) + +- #12784: Fix computation of minor-heap allocation in Gc.counters() + and Gc.allocated_bytes(). (Nick Barnes, review by Gabriel Scherer) + +- #12770: Add `Fun.compose`. + (Justin Frank, review by Nicolás Ojeda Bär, Daniel Bünzli and Jeremy Yallop) + +- #12845: Add `{In,Out}_channel.is_binary_mode` as the dual of + `set_binary_mode`. This function was previously only available in the internal + C API. + (David Allsopp, review by Nicolás Ojeda Bär and Xavier Leroy) + +### Other libraries: + +- #12213: Dynlink library, improve legibility of error messages + (Samuel Hym, review by Gabriel Scherer and Nicolás Ojeda Bär) + +* #12686: Runtime_events library, C API: define + `caml_runtime_events_{start,pause,resume}` as returning `void` + instead of `value`. + (Xavier Leroy, review by David Allsopp) + +### Tools: + +- #12340: testsuite: collect known issues with current -short-paths + implementation for existential types + (Florian Angeletti, Samuel Hym, review by Florian Angeletti and Thomas Refis) + +- #12147: ocamllex: Allow carriage returns at the end of line directives. + (SeungCheol Jung, review by Nicolás Ojeda Bär) + +- #12260: Fix invalid_argument on some external or module aliases in ocamlnat + (Fabian Hemmer, review by Vincent Laviron) + +- #12185: New script language for ocamltest. + (Damien Doligez with Florian Angeletti, Sébastien Hinderer, Gabriel Scherer, + review by Sébastien Hinderer and Gabriel Scherer) + +- #12371: ocamltest: fix recursive expansion of variables. + (Antonin Décimo, Damien Doligez, review by Sébastien Hinderer, + Damien Doligez, Gabriel Scherer, and Xavier Leroy) + +* #12497, #12613: Make ocamlc/ocamlopt fail with an error when no + input files are specified to build an executable. + (Antonin Décimo, review by Sébastien Hinderer) + +- #12576: ocamldep: various refactors. + (Antonin Décimo, review by Florian Angeletti, Gabriel Scherer, and Léo Andrès) + +- #12615: ocamldoc: get rid of the odoc_literate and odoc_todo generators. + (Sébaistien Hinderer, review by Gabriel Scherer and Florian Angeletti) + +- #12624: Use $XDG_CONFIG_DIRS in addition to $XDG_CONFIG_HOME when searching + for init.ml and use this to extend init.ml support to the toplevel when + running on Windows. + (David Allsopp, report by Jonah Beckford, review by Nicolás Ojeda Bär and + Antonin Décimo) + +- #12688: Setting the env variable `NO_COLOR` with an empty value no longer + has effects. Previously, setting `NO_COLOR` with any value, including + the empty value, would disable colors (unless `OCAML_COLOR` is also set). + After this change, the user must set `NO_COLOR` with an non-empty value + to disable colors. This reflects a specification clarification/change + from the upstream website at https://no-color.org. + (Favonia, review by Gabriel Scherer) + +- #12744: ocamltest: run tests in recursive subdirs more eagerly + (Nick Roberts, review by Nicolás Ojeda Bär) + +- #12901, 12908: ocamllex: add overflow checks to prevent generating incorrect + lexers; use unsigned numbers in the table encoding when possible. + (Vincent Laviron, report by Edwin Török, review by Xavier Leroy) + +### Manual and documentation: + +- #12338: clarification of the documentation of process related function in + the unix module regarding the first element of args and shell's pid. + (Christophe Raffalli, review by Florian Angeletti) + +- #12473: Document in runtime/memory.c our current understanding of + accesses to the OCaml heap from the C runtime code -- the problem + of hybrid programs mixing two memory models. + (Gabriel Scherer and Guillaume Munch-Maccagnoni, review by Olivier + Nicole and Xavier Leroy) + +- #12694: Document in runtime/tsan.c the TSan instrumentation choices and the + consequences with regard to the memory model. + (Olivier Nicole, review by Miod Vallat, Gabriel Scherer, Guillaume + Munch-Maccagnoni and Fabrice Buoro) + +- #12802: Add manual chapter about ThreadSanitizer support + (Olivier Nicole, review by Miod Vallat, Sebastien Hinderer, Fabrice Buoro, + Gabriel Scherer and KC Sivaramakrishnan) + +- #12819: Clarify which runtime interactions are allowed in custom ops + (Basile Clément, review by Guillaume Munch-Maccagnoni and Xavier Leroy) + +- #12840: manual: update runtime tracing chapter for custom events (ex #12335) + (Lucas Pluvinage, Sadiq Jaffer and Olivier Nicole, review by Gabriel Scherer, + David Allsopp, Tim McGilchrist and Thomas Leonard) + +- #13066, update OCAMLRUNPARAM documentation for the stack size parameter l + (Florian Angeletti, review by Nicolás Ojeda Bär, Tim McGilchrist, and + Miod Vallat) + +- #13078: update Format tutorial on structural boxes to mention alignment + questions. + (Edwin Török, review by Florian Angeletti) + +- #13092: document the existence of the `[@@poll error]` built-in attribute + (Florian Angeletti, review by Gabriel Scherer) + +### Compiler user-interface and warnings: + +* #10613, #12405: Simplify the values used for the system variable (`system:` in + `ocamlopt -config` or the `Config.system` constant). In particular, s390x and + ppc64 now report "linux" instead of "elf"; all variants of 32-bit ARM on Linux + now report "linux"; OpenBSD now reports "openbsd" instead of "bsd" for 32-bit + ARM; FreeBSD, NetBSD and OpenBSD now report the same value for both x86_64 and + x86_32; x86_32 systems matching *bsd but not freebsd*, netbsd* or openbsd* + are no longer identified (as on x86_64); x86_32 Linux now reports "linux" + instead of "linux_elf". + (David Allsopp, request by Kate Deplaix, review by Sébastien Hinderer and + Xavier Leroy) + +- #11989, #12246, RFC 31: New flag, -H, to allow for transitive dependencies + without including them in the initial environment. + (Chris Casinghino, François Bobot, and Gabriel Scherer, review by Leo White + and Stefan Muenzel, RFC by François Bobot) + +- #12247: configure: --disable-ocamldebug can now be used instead + of --disable-debugger (which remains available for compatibility) + (Gabriel Scherer, review by Damien Doligez and Sébastien Hinderer) + +- #12199: improve the error message for non-overriding `inherit!` + (Florian Angeletti, review by Jules Aguillon) + +- #12210: uniform style for inline code in compiler messages + (Florian Angeletti, review by Gabriel Scherer) + +* #12278, #:12325: Remove the OCAML_FLEXLINK environment variable from the + compiler drivers. This environment variable was previously used as part of the + FlexDLL bootstrap procedure and existed solely for that purpose. Its removal + greatly simplifies both the build system and testsuite machinery. + (David Allsopp, review by Sébastien Hinderer) + +- #12347: error messages: always report missing polyvariant tags + (Florian Angeletti, report by Tianbo Hao, review by Gabriel Scherer) + +- #12224, specialized error message when trying to apply non-functor + module (e.g `module M = Int(Int)`) + (Florian Angeletti, review by Gabriel Scherer) + +- #12451: Warning 53 (misplaced attributes) now works for all attributes. + (Chris Casinghino, review by Florian Angeletti) + +- #12622: Give hints about existential types appearing in error messages + (Leo White, review by Gabriel Scherer and Florian Angeletti) + +- #12671: When a class type parameter or class parameter does not match, + identify which parameter in the error message, instead of saying + "A type parameter" or "A parameter". + (Stefan Muenzel, review by Gabriel Scherer) + +- #12679: Add more detail to the error message and manual in case of + invalid module type substitutions. + (Stefan Muenzel, review by Gabriel Scherer and Florian Angeletti) + +- #12750: Display the command executed to extract primitives in + `ocamlc -verbose`. + (David Allsopp, review by Nicolás Ojeda Bär) + +- #12777: Add details about the actual and expected method types to the method + mismatch error messages. + (Javier Chávarri, review by Gabriel Scherer and Florian Angeletti) + +* #12942: Fix an line ordering in some module inclusion error messages + (Nick Roberts, review by Florian Angeletti, report by Carl Eastlund) + +### Internal/compiler-libs changes: + +- #12639: parsing: Attach a location to the RHS of Ptyp_alias + and improve the 'alias type mismatch' error message. + (Jules Aguillon, review by Florian Angeletti) + +- #12447: Remove 32-bit targets from X86_proc.system + (Masanori Ogino, review by David Allsopp) + +- #12216, #12248: Prevent reordering of atomic loads during instruction + scheduling. This is for reference, as instruction scheduling is currently + unused in OCaml 5. + (Xavier Leroy, report by Luc Maranget and KC Sivaramakrishnan, + review by Nicolás Ojeda Bär) + +- #12025: Split Typecore.unify_pat_types into two + to avoid unnecessary references to the environment in type_pat + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #12031: Use dedicated types to represent names of compilation units + and predefined exceptions in CMO files. + (Sébastien Hinderer, review by Florian Angeletti, Thomas Refis, + Gabriel Scherer, Vincent Laviron, Pierre Chambart, Luke Maurer, + Hugo Heuzard, Xavier Leroy and Damien Doligez) + +- #12109: Pack parameters to unification in unification_environment + (Takafumi Saikawa and Jacques Garrigue, review by Richard Eisenberg) + +- #12331, #12361: Pack the unification data for pattern checking in Typecore + (Takafumi Saikawa and Jacques Garrigue, + review by Gabriel Scherer, Thomas Refis and Florian Angeletti) + +- #12229: Remove global mutable state for typechecking patterns + in Typecore in favor of local mutable state. + (Nick Roberts, review by Takafumi Saikawa) + +- #12236, #12386, #12391, #12496, #12673: Use syntax as sole determiner of arity + This changes function arity to be based solely on the source program's + parsetree. Previously, the heuristic for arity had more subtle heuristics + that involved type information about patterns. Function arity is important + because it determines when a pattern match's effects run and is an input + into the fast path for function application. + + This change affects tooling: it changes the function constructs in parsetree + and typedtree. + + See https://github.com/ocaml/RFCs/pull/32 for the original RFC. + + (Nick Roberts; review by Richard Eisenberg, Leo White, and Gabriel Scherer; + RFC by Stephen Dolan) + +- #12542: Minor bugfix to #12236: restore dropped call to `instance` + (Nick Roberts, review by Jacques Garrigue) + +- #12242: Move the computation of stack frame parameters to a separate + `Stackframe` module, and save the parameters in the results of the + `Linearize` pass + (Xavier Leroy, review by KC Sivaramakrishnan and Mark Shinwell) + +- #12442: document jump summaries in the pattern-matching compiler + (Gabriel Scherer and Thomas Refis, review by Florian Angeletti + and Vincent Laviron) + +- #12446, #12792: remove the hooks machinery around channel locking + in runtime/io.c + (Gabriel Scherer, review by Xavier Leroy) + +- #12389, #12544, #12984, #12987: centralize the handling of metadata for + compilation units and artifacts in preparation for better unicode support for + OCaml source files. + (Florian Angeletti, review by Vincent Laviron and Gabriel Scherer) + +- #12532, #12553: improve readability of the pattern-matching debug output + (Gabriel Scherer, review by Thomas Refis) + +- #12537: Use C11/C++11 standard static assertion. + (Antonin Décimo, review by Sebastien Hinderer, Xavier Leroy, + and KC Sivaramakrishnan) + +- #12169: runtime: document and enforce naming conventions around STW sections. + (Gabriel Scherer, review by Enguerrand Decorne, Miod Vallat, B. Szilvasy + and Nick Barnes, report by KC Sivaramakrishnan) + +- #12669 : Clean up some global state handling in schedgen + (Stefan Muenzel, review by Miod Vallat and Gabriel Scherer) + +- #12640: Make the module separator used in symbol names configurable + (Miod Vallat, review by Hugo Heuzard and Xavier Leroy) + +- #12691 : Clean up Ctype.expand_abbrev_gen and + rename Env.add_local_type to add_local_constraint + (Takafumi Saikawa and Jacques Garrigue, review by Florian Angeletti) + +- #12786 : Clean up the algorithm of Ctype.limited_generalize + (Takafumi Saikawa and Jacques Garrigue, review by Gabriel Scherer) + +- #10691: Ast_mapper, Ast_iterator: add functions directive_argument, + toplevel_directive and toplevel_phrase. + (Guillaume Petiot, review by Gabriel Scherer and Kate Deplaix) + +- #12764: Move all installable headers in `caml/` sub-directories. + (Antonin Décimo, review by Gabriel Scherer and David Allsopp) + +- #12508 : Add compiler-side support for project-wide occurrences in Merlin, by + generating index tables of all identifier occurrences. This extra data in .cmt + files is only added when the new flag -bin-annot-occurrences is passed. + (Ulysse Gérard, Nathanaëlle Courant, suggestions by Gabriel Scherer and Thomas + Refis, review by Florian Angeletti, Gabriel Scherer and Thomas Refis) + +- #12914: Slightly change the s390x assembly dialect in order to build with + Clang's integrated assembler. + (Miod Vallat, review by Gabriel Scherer) + +- #13001: do not read_back entire shapes to get aliases' uids when building the + usages index + (Ulysse Gérard, review by Gabriel Scherer and Nathanaëlle Courant) + +### Build system: + +- #12198, #12321, #12586, #12616, #12706, #13048: continue the merge of the + sub-makefiles into the root Makefile started with #11243, #11248, + #11268, #11420 and #11675. + (Sébastien Hinderer, review by David Allsopp and Florian Angeletti) + +- #12569, #12570: remove 'otherlibraries' as a prerequisite for 'runtop'; + use 'runtop-with-otherlibs' to use a library from otherlibs/ + (Gabriel Scherer, review by Sébastien Hinderer, suggestion by David Allsopp) + +- #12652: Make magic numbers easier to bump and duplicate. + (Sébastien Hinderer, review by Antonin Décimo, David Allsopp and Florian + Angeletti) + +* #12751: --with-target-bindir configure option implemented. This option + refers to the location of the runtime binaries on the target system for a + cross-compiler and is embedded in executables produced by ocamlc. It does + not affect the bytecode executables installed as part of the build. The old + mechanism `make TARGET_BINDIR=..` no longer works. + (David Allsopp, review by Damien Doligez, Xavier Leroy and Olivier Nicole) + +- #12768, #13030: Detect mingw-w64 coupling with GCC or LLVM, detect clang-cl, + and fix C compiler feature detection on macOS. + (Antonin Décimo, review by Miod Vallat and Sébastien Hinderer) + +### Bug fixes: + +- #10652, #12720: fix evaluation order in presence of optional arguments + (Jacques Garrigue, report by Leo White, review by Vincent Laviron) + +- #12595, #12597: fix a race in `caml_clear_gc_stats_sample` + (Gabriel Scherer, review by B. Szilvasy, report by B. Szilvasy) + +- #12580: Fix location of alias pattern variables. + (Chris Casinghino, review Gabriel Scherer, report by Milo Davis) + +- #12583: Add a closing event for when `EV_MAJOR_EPHE_MARK` is complete + (Sudha Parimala, review by Gabriel Scherer) + +- #12566: caml_output_value_to_malloc wrongly uses `caml_stat_alloc` + instead of `malloc` since 4.06, breaking (in pooled mode) user code + that uses `free` on the result. Symmetrically, + caml_input_value_from_malloc should use `free`. + (Gabriel Scherer, review by Xavier Leroy and Enguerrand Decorne, + report by Ido Yariv) + +- #12490: Unix: protect the popen_processes hashtable with a mutex + (Gabriel Scherer, report by Olivier Nicole, review by Xavier Leroy) + +- #11931: Fix tricky typing bug with type substitutions + (Stephen Dolan, review by Leo White and Jacques Garrigue) + +- #12037, #12171: Fix get_extern_state potential NULL dereference. + (Alexander Skvortsov, report by Török Edwin, + design by Gabriel Scherer, Xavier Leroy) + +- #12635: Fix get_intern_state potential NULL dereference. + (Antonin Décimo, review by KC Sivaramakrishnan) + +- #12032, #12059: Bug fixes related to compilation of recursive definitions + (Vincent Laviron, report by Victoire Noizet, review by Gabriel Scherer) + +* #12145: Loopy constraints cause ocamlc to loop. + Fixed by completely removing the call to `update_type` in + `Typedecl.transl_type_decl`, as the expansion is already checked by + `check_regularity`. As a result, recursion is more polymorphic, + which may cause some (essentially wrong) type declarations to have + unbound type variables, and some constraints unrelated to the concrete + type to be ignored (see tests/typing-misc/constraints.ml). + (Jacques Garrigue, report by Richard Eisenberg, review by Leo White) + +- #12207, #12222: Make closure computation linear in the number of recursive + functions instead of quadratic + (Vincent Laviron, report by François Pottier, review by Nathanaëlle Courant + and Gabriel Scherer) + +- #11040, #12591: fix a data race in major_gc.c + (Gabriel Scherer, review by Guillaume Munch-Maccagnoni + and KC Sivaramakrishnan, report by Sadiq Jaffer) + +- #12238, #12403, #12698: read input files in one go to avoid source reprinting + issues. + (Gabriel Scherer, report by Mike Spivey and Vincent Laviron, review by + Nicolás Ojeda Bär, Xavier Leroy and Jeremy Yallop) + +- #12334, #12368: Bad error message with mutually recursive abbreviations + (Jacques Garrigue, report by Richard Eisenberg, review by Gabriel Scherer + and Richard Eisenberg) + +- #12401: `seek_in` and `seek_out` sometimes returned normally when given + negative offsets, instead of failing. Now both functions should consistently + raise `Sys_error` in this case. + (Nicolás Ojeda Bär, review by Gabriel Scherer) + +- #12267: Fix stack alignment computation + (Miod Vallat, report by Jan Midtgaard, review by Gabriel Scherer) + +- #12395, #12404: Fix thread-unsafety in the fallback implementation of + `Unix.create_process` (the one used when `posix_spawnp` is unavailable) + (Xavier Leroy, report by Chris Vine, review by Nicolás Ojeda Bär) + +- #12949: open shadowing mistriggers + (Gabriel Scherer, review by Florian Angeletti, report by Andreas Rossberg) + +- #12526: Honor `ocaml.inline always` attribute on functions with + optional arguments and default values in the Closure backend + (Alain Frisch, review by Vincent Laviron) + +- #12677, #12889: make Domain.DLS thread-safe + (Gabriel Scherer, review by Olivier Nicole and Damien Doligez, + report by Vesa Karvonen) + +- #12561: Fix crash when combining TSan and frame-pointers + (Fabrice Buoro and Olivier Nicole, report by Jan Midtgaard, review by Miod + Vallat and Gabriel Scherer) + +- #12482: Rework bounds checking code in the POWER backend + (Miod Vallat and Xavier Leroy, report by Jan Midtgaard, review by + KC Sivaramakrishnan) + +- #12528, #12703: Avoid pointer arithmetic overflow in Tag_val macro + (very likely harmless, but can trigger alarms) + (Xavier Leroy, report by Sam Goldman, review by Guillaume Munch-Maccagnoni) + +- #12593: TSan should handle Effect.Unhandled correctly + (Fabrice Buoro and Olivier Nicole, report by Jan Midtgaard and Miod Vallat, + review by Gabriel Scherer) + +- #12684: fix locations filename in AST produced by the `-pp` option + (Gabriel Scherer, review by Florian Angeletti) + +- #12714: check whether macros are defined before using them to ensure + that the headers can always be used in code which turns on -Wundef + (or equivalent). + (Antonin Décimo, review by Miod Vallat, Gabriel Scherer, + Xavier Leroy, and David Allsopp) + +- #12726: fix segmentation fault under Windows when executing a bytecode file if + the runtime (`ocamlrun.exe`) cannot be found. + (Vadim Zborovskii, Nicolás Ojeda Bär, report by Vadim Zborovskii, review by + David Allsopp) + +- #12727, #12730: fix bug with value let-rec and labelled applications + (Vincent Laviron, review by Gabriel Scherer) + +* #12751: Always keep within the 128 character limit for shebang lines. Previous + fix in #8622 handled building the compiler with a long prefix; this patch + extends this to the bytecode executables emitted by that compiler. + (David Allsopp, review by Damien Doligez, Xavier Leroy and Olivier Nicole) + +- #12755: Fix data race on global pools arrays of pool_freelist + (Fabrice Buoro and Olivier Nicole, review by Gabriel Scherer) + +- #12796, #12801: Fix memory corruption in caml_unix_alloc_sockaddr + (Thomas Leonard, review by Nicolás Ojeda Bär) + +- #12737: Fix data races in minor_gc.c and caml_natdynlink_open + (Olivier Nicole, review by Stefan Muenzel, Miod Vallat, Guillaume + Munch-Maccagnoni, Gabriel Scherer and Xavier Leroy) + +- #12831: Fix call to caml_call_realloc_stack for s390x in PIC mode + (Vincent Laviron, report by Jerry James, review by Miod Vallat) + +* #12837: Show non-generalizable type parameters in type definitions + Changes type of type parameters in outcometree.mli. + (Jacques Garrigue, review by Richard Eisenberg) + +- #12897: fix locking bugs in Runtime_events + (Gabriel Scherer and Thomas Leonard, + review by Olivier Nicole, Vincent Laviron and Damien Doligez, + report by Thomas Leonard) + +- #12851: Fix race between runtime events teardown and event emission + (Olivier Nicole, review by Miod Vallat and Gabriel Scherer) + +- #12860: Fix an assertion that wasn't taking into account the possibility of an + ephemeron pointing at static data. + (Mark Shinwell, review by Gabriel Scherer and KC Sivaramakrishnan) + +- #12861: Fix a possible crash in the `threads` library. + (Mark Shinwell, review by Gabriel Scherer and KC Sivaramakrishnan) + +- #11040, #12894: Silence false data race observed between caml_shared_try_alloc + and oldify. Introduces macros to call tsan annotations which help annotate + a ``happens before'' relationship. + (Hari Hara Naveen S and Olivier Nicole, + review by Gabriel Scherer and Miod Vallat) + +- #12958: Fix tail-modulo-cons compilation of try-with, && and || + expressions. + (Gabriel Scherer and Nicolás Ojeda Bär, report by Sylvain Boilard, review by + Gabriel Scherer) + +- #12919: Fix register corruption in caml_callback2_asm on s390x. + (Miod Vallat, review by Gabriel Scherer) + +- #12924, #12930: Rework package constraint checking to improve interaction with + immediacy + (Chris Casinghino and Florian Angeletti, review by Florian Angeletti and + Richard Eisenberg) + +- #12969: Fix a data race in caml_darken_cont + (Fabrice Buoro and Olivier Nicole, review by Gabriel Scherer and Miod Vallat) + +- #12971, #12974: fix an uncaught Ctype.Escape exception on some + invalid programs forming recursive types. + (Gabriel Scherer, review by Florian Angeletti, report by Neven Villani) + +- #13019: Remove linking instructions for the Unix library from threads.cma + (this was done for threads.cmxa in OCaml 3.11). Eliminates warnings from + new lld when using threads.cma of duplicated libraries. + (David Allsopp, review by Nicolás Ojeda Bär) + +- #13058: Add TSan instrumentation to caml_call_gc(), since it may raise + exceptions. + (Fabrice Buoro, Olivier Nicole, Gabriel Scherer and Miod Vallat) + +- #13079: Save and restore frame pointer across Iextcall on ARM64 + (Tim McGilchrist, review by KC Sivaramakrishnan and Miod Vallat) + +- #13094: Fix undefined behavior of left-shifting a negative number. + (Antonin Décimo, review by Miod Vallat and Nicolás Ojeda Bär) + +OCaml 5.1.1 (8 December 2023) +---------------------------- + +### Standard library: + +* #12562, #12734, #12783: Remove the `Marshal.Compression` flag to the + `Marshal.to_*` functions introduced in 5.1 by #12006, as it cannot + be implemented without risking to link -lzstd with all + ocamlopt-generated executables. The compilers are still able to use + ZSTD compression for compilation artefacts. + (Xavier Leroy and David Allsopp, report by Kate Deplaix, review by + Nicolás Ojeda Bär, Kate Deplaix, and Damien Doligez). + +### Bug fixes: + +- #11800, #12707: fix an assertion race condition in `install_backup_thread` + (Jan Midtgaard, review by Gabriel Scherer) + +- #12318: GC: simplify the meaning of custom_minor_max_size: blocks with + out-of-heap memory above this limit are now allocated directly in + the major heap. + (Damien Doligez, report by Stephen Dolan, review by Gabriel Scherer) + +- #12439: Finalize and collect dead custom blocks during minor collection + (Damien Doligez, review by Xavier Leroy, Gabriel Scherer and KC + Sivaramakrishnan) + +- #12486, #12535: Fix delivery of unhandled effect exceptions on amd64 with + --enable-frame-pointers + (Miod Vallat, report by Jan Midtgaard, review by Gabriel Scherer) + +- #12581, #12609: Fix error on uses of packed modules outside their pack + to correctly handle nested packs + (Vincent Laviron, report by Javier Chávarri, review by Pierre Chambart) + +- #12590, #12595: Move `caml_collect_gc_stats_sample` in + `caml_empty_minor_heap_promote` before barrier arrival. + (B. Szilvasy, review by Gabriel Scherer) + +- #12623, fix the computation of variance composition + (Florian Angeletti, report by Vesa Karvonen, review by Gabriel Scherer) + +- #12645, #12649 fix error messages for cyclic type definitions in presence of + the `-short-paths` flag. + (Florian Angeletti, report by Vesa Karvonen, review by Gabriel Scherer) + +- #12712, #12742: fix an assertion boundary case in `caml_reset_young_limit` + (Jan Midtgaard, review by Guillaume Munch-Maccagnoni and KC Sivaramakrishnan) + +- #12713, #12715: disable common subexpression elimination for atomic loads + (Gabriel Scherer and Vincent Laviron, + review by Vincent Laviron, KC Sivaramakrishnan and Xavier Leroy, + report by Vesa Karvonen and Carine Morel) + +- #12757: Fix ocamlnat (native toplevel) by registering frametables correctly + (Stephen Dolan, Nick Barnes and Mark Shinwell, + review by Vincent Laviron and Sébastien Hinderer) + +- #12791: `extern` is applied to definitions of `caml_builtin_cprim` + and `caml_names_of_builtin_cprim` when linking bytecode '-custom' + executables with a C++ linker. + (Shayne Fletcher, review by Antonin Décimo and Xavier Leroy) + +- #12491, #12493, #12500, #12754: Do not change GC pace when creating + sub-arrays of bigarrays + (Xavier Leroy, report by Ido Yariv, analysis by Gabriel Scherer, + review by Gabriel Scherer and Fabrice Buoro) + +OCaml 5.1.0 (14 September 2023) +------------------------------- + +### Restored backends + +- #11418, #11708: RISC-V multicore support. + (Nicolás Ojeda Bär, review by KC Sivaramakrishnan) + +- #11712, #12258, #12261: s390x / IBM Z multicore support: + OCaml & C stack separation; dynamic stack size checks; fiber and + effects support. + (Aleksei Nikiforov, with help from Vincent Laviron and Xavier Leroy, + additional suggestions by Luc Maranget, + review by the same and KC Sivaramakrishnan) + +- #11642: Restore Cygwin port. Add GC messages for address space reservations + when OCAMLRUNPARAM option v includes 0x1000. + (David Allsopp, review by Xavier Leroy, Guillaume Munch-Maccagnoni + and Gabriel Scherer) + +### Standard library: + +- #12006, #12064: Add `Marshal.Compression` flag to `Marshal.to_*` functions. + When this flag is explicitly set, marshaled data is compressed using ZSTD. + On some practical examples, the marshalled output became three times smaller + at no noticeable cost on the marshalling time. + (Xavier Leroy, review by Edwin Török and Gabriel Scherer, fix by Damien + Doligez) + +- #10464: Add List.is_empty. + (Craig Ferguson, review by David Allsopp) + +- #11848: Add `List.find_mapi`, + `List.find_index: ('a -> bool) -> 'a list -> int option`, + `Seq.find_mapi`, `Seq.find_index`, `Array.find_mapi`, `Array.find_index`, + `Float.Array.find_opt`, `Float.Array.find_index`, `Float.Array.find_map`, + `Float.Array.find_mapi`. + (Sima Kinsart, review by Daniel Bünzli and Nicolás Ojeda Bär) + +- #11410: Add Set.to_list, Map.to_list, Map.of_list, + `Map.add_to_list: key -> 'a -> 'a list t -> 'a list t`. + (Daniel Bünzli, review by Nicolás Ojeda Bär and Gabriel Scherer) + +- #11836, #11837: Add `Array.map_inplace`, `Array.mapi_inplace`, + `Float.Array.mapi_inplace` and `Float.Array.mapi_inplace`. + (Léo Andrès, review by Gabriel Scherer, KC Sivaramakrishnan and + Nicolás Ojeda Bär) + +- #10967: Add Filename.temp_dir. + (David Turner, review by Anil Madhavapeddy, Valentin Gatien-Baron, Nicolás + Ojeda Bär, Gabriel Scherer, and Daniel Bünzli) + +- #11246: Add "hash" and "seeded_hash" functions to Bool, Int, Char, Float, + Int32, Int64, and Nativeint. + (Nicolás Ojeda Bär, review by Xavier Leroy and Gabriel Scherer) + +- #11488: Add `Mutex.protect: Mutex.t -> (unit -> 'a) -> 'a` + for resource-safe critical sections protected by a mutex. + (Simon Cruanes, review by Gabriel Scherer, Xavier Leroy, + Guillaume Munch-Maccagnoni) + +- #11581: Add type equality witness + `type (_, _) eq = Equal: ('a, 'a) eq` + in a new module Stdlib.Type. + (Nicolás Ojeda Bär, review by Daniel Bünzli, Jacques Garrigue, Florian + Angeletti, Alain Frisch, Gabriel Scherer, Jeremy Yallop and Xavier Leroy) + +- #11843: Add `In_channel.input_lines` and `In_channel.fold_lines`. + (Xavier Leroy, review by Nicolás Ojeda Bär and Wiktor Kuchta). + +- #11856, #11859: Using TRMC, the following `Stdlib` functions are now + tail-recursive: + Stdlib.(@), List.append, + List.concat_map. + (Jeremy Yallop, review by Daniel Bünzli, Anil Madhavapeddy, Nicolás Ojeda Bär, + Gabriel Scherer, and Bannerets) + +- #11362, #11402: Using TRMC, the following `Stdlib` functions are now + tail-recursive: + List.map, List.mapi, List.map2, + List.filter, List.filteri, List.filter_map, + List.init, + List.of_seq. + (Nicolás Ojeda Bär, review by Xavier Leroy and Gabriel Scherer) + + +- #11878, #11965: Prevent seek_in from marking buffer data as valid after + closing the channel. This could lead to inputting uninitialized bytes. + (Samuel Hym, review by Xavier Leroy and Olivier Nicole) + +- #11128: Add In_channel.isatty, Out_channel.isatty. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Florian Angeletti) + +- #10859: Add `Format.pp_print_iter` and `Format.pp_print_array`. + (Léo Andrès and Daniel Bünzli, review by David Allsopp and Hugo Heuzard) + +- #10789: Add `Stack.drop` + (Léo Andrès, review by Gabriel Scherer) + +* #10899: Change Stdlib.nan from signaling NaN to quiet NaN. + (Greta Yorsh, review by Xavier Leroy, Guillaume Melquiond and + Gabriel Scherer) + +- #11026, #11667, #11858: Rename the type of the accumulator + of fold functions to 'acc: + fold_left : ('acc -> 'a -> 'acc) -> 'acc -> 'a list -> 'acc + fold_right : ('a -> 'acc -> 'acc) -> 'a list -> 'acc -> 'acc + fold_left_map : ('acc -> 'a -> 'acc * 'b) -> 'acc -> 'a list -> 'acc * 'b list + ... + (Valentin Gatien-Baron and François Berenger, + review by Gabriel Scherer and Nicolás Ojeda Bär) + +- #11354: Hashtbl.find_all is now tail-recursive. + (Fermín Reig, review by Gabriel Scherer) + +- #11500: Make Hashtbl.mem non-allocating. + (Simmo Saan, review by Nicolás Ojeda Bär) + +- #11412: Add Sys.is_regular_file + (Xavier Leroy, review by Anil Madhavapeddy, Nicolás Ojeda Bär, David Allsopp) + +- #11322, #11329: serialization functions Random.State.{of,to}_binary_string + between Random.State.t and string + (Gabriel Scherer, report by Yotam Barnoy, + review by Daniel Bünzli, Damien Doligez, Hugo Heuzard and Xavier Leroy) + +- #11830: Add Type.Id with + `val provably_equal : 'a Type.Id.t -> 'b Type.Id.t -> ('a, 'b) Type.eq option` + (Daniel Bünzli, review by Jeremy Yallop, Gabriel Scherer, Wiktor Kuchta, + Nicolás Ojeda Bär) + +- #12184, #12320: Sys.rename Windows fixes on directory corner cases. + (Jan Midtgaard, review by Anil Madhavapeddy) + +* #11565: Enable -strict-formats by default. Some incorrect format + specifications (for `printf`) where silently ignored and now fail. + Those new failures occur at compile-time, except if you use advanced + format features like `%(...%)` that parse format strings dynamically. + Pass -no-strict-formats to revert to the previous lenient behavior. + (Nicolás Ojeda Bär, review by David Allsopp) + +### Installation size + + Specific efforts have been made during this release to reduce the filesystem +size of installed artifacts of the compiler distribution. +The installation size of 5.1 is 272 MiB compared to 521 MiB for 5.0. +Some of those changes will benefit all OCaml packages. + +- ocaml/RFCs#23, #12006: use compressed marshaled format from #12006 for .cmi, + .cmt, .cmti files, and for debug info in .cmo and .cma files, resulting in + major reduction in size. + (Xavier Leroy, review by Edwin Török and Gabriel Scherer, + RFC by Simon Cruanes) + +- #11981: Reduce size of OCaml installations by removing debugging information + from installed bytecode executables. It is no longer possible to + run ocamldebug over these installed bytecode executables, nor to get + exception backtraces for them. + (Xavier Leroy, review by David Allsopp, report by Fabrice Le Fessant) + +* #11993: install only bytecode executables for the `ocamlmklib`, `ocamlcmt`, + `ocamlprof`, `ocamlcp`, `ocamloptp`, and `ocamlmktop` tools, but no + native-code executables. A tool like `ocamlmklib` for example is now + installed directly to `$BINDIR/ocamlmklib`; `ocamlmklib.byte` and + `ocamlmklib.opt` are no longer installed to `$BINDIR`. + (Xavier Leroy, review by Gabriel Scherer) + +### Runtime system: + +- #11589, #11903: Modify the GC pacing code to make sure the GC keeps + up with allocations in the presence of idle domains. + (Damien Doligez and Stephen Dolan, report by Florian Angeletti, + review by KC Sivaramakrishnan and Sadiq Jaffer) + +- #11743: Speed up weak array operations + (KC Sivaramakrishnan, review by François Bobot and Sadiq Jaffer) + +- #12131: Simplify implementation of weak hash sets, fixing a + performance regression. (Nick Barnes, review by François Bobot, + Alain Frisch and Damien Doligez). + +- #11474, #11998, #12065: Add support for user-defined events in the runtime + event tracing system. + (Lucas Pluvinage, review by Sadiq Jaffer, Guillaume Munch-Maccagnoni, + Enguerrand Decorne, Gabriel Scherer and Anil Madhavapeddy) + +- #11827, #12249: Restore prefetching for GC marking + (Fabrice Buoro and Stephen Dolan, review by Gabriel Scherer and Sadiq Jaffer) + +- #11144: Restore frame-pointers support for amd64 + (Fabrice Buoro, review by Frédéric Bour and KC Sivaramakrishnan) + +- #11935: Load frametables of dynlink'd modules in batch + (Stephen Dolan, review by David Allsopp and Guillaume Munch-Maccagnoni) + +- #11284, #12525: Use compression of entries scheme when pruning mark stack. + Can decrease memory usage for some workloads, otherwise should be + unobservable. + (Tom Kelly, review by Sabine Schmaltz, Sadiq Jaffer and Damien Doligez) + +* #11865, #11868, #11876: Clarify that the operations of a custom + block must never access the OCaml runtime. The previous + documentation only mentioned the main illicit usages. In particular, + since OCaml 5.0, it is no longer safe to call + `caml_remove_global_root` or `caml_remove_generational_global_root` + from within the C finalizer of a custom block, or within the + finalization function passed to `caml_alloc_final`. As a workaround, + such a finalization operation can be registered with `Gc.finalize` + instead, which guarantees to run the finalizer at a safe point. + (Report by Timothy Bourke, discussion by Yotam Barnoy, Timothy + Bourke, Sadiq Jaffer, Xavier Leroy, Guillaume Munch-Maccagnoni, and + Gabriel Scherer) + +- #12130: Fix multicore crashes with weak hash sets. Fixes #11934. + (Nick Barnes, review by François Bobot) + +- #12099: Add ocamlrund option, -events, to produce a trace of + debug events during bytecode interpretation. Fixes #12098. + (Richard L Ford, review by Gabriel Scherer) + +- #12001: Fix book keeping for last finalisers during the minor cycle + (KC Sivaramakrishnan and Enguerrand Decorne, report by Guillaume Bury + and Vincent Laviron, review by Sadiq Jaffer and KC Sivaramakrishnan) + +- #11919: New runtime events counters for major heap stats and minor heap + resizing. + (Sadiq Jaffer, review by Gabriel Scherer and David Allsopp) + +- #11287, #11872, #11955: Clean up reserved header bits (once used for + Spacetime profiling). + (Nick Barnes, review by Gabriel Scherer and Damien Doligez) + +- #11750: Decouple major slice from minor GC. + (KC Sivaramakrishnan, review by Sadiq Jaffer, Guillaume Munch-Maccagnoni and + Damien Doligez) + +- #11796: protect lazy computation of code fragment digest by a mutex. + This makes the thread sanitizer happier, and avoids duplicating + the hashing work. + (Gabriel Scherer, review by Xavier Leroy, report by Olivier Nicole) + +- #11137: new `Unsafe_store_tag(val, new_tag)` macro to stop using + `Tag_val(val)` as lvalue. + (Gabriel Scherer, review by Xavier Leroy, Guillaume Munch-Maccagnoni + and Nicolás Ojeda Bär) + +- #11880: Restore the correct sigmask in systhreads. + (Christiano Haesbaert, review by Guillaume Munch-Maccagnoni and + Sébastien Hinderer) + +- #11881: Fix thread-unsafety of registration of operations for "custom" + values. + (Guillaume Munch-Maccagnoni, review by Gabriel Scherer and KC + Sivaramakrishnan) + +- #11980: fix quadratic behavior in natdynlink by using a STW section + for frame-descriptor updates. + (Gabriel Scherer, review by Sadiq Jaffer, report by André Maroneze + for Frama-C and Guillaume Melquiond for Coq) + +- #12121: unrooted implementations of caml_callback*_exn + (Gabriel Scherer, review by KC Sivaramakrishnan and Xavier Leroy) + +- #3921, #12039, #12128: poll for signals in long-running polymorphic + comparisons. + (B. Szilvasy, Gabriel Scherer and Xavier Leroy, review by + Stefan Muenzel, Guillaume Munch-Maccagnoni and Damien Doligez) + +- #12231: Support MinGW-w64 11.0 winpthreads library, where the macro + to set up to get flexdll working changed + (David Allsopp and Samuel Hym, light review by Xavier Leroy) + +* #12512: Add volatile casts to FFI macros to enforce memory model (technically + a breaking change although no opam package seemed broken by it.) + (Olivier Nicole, suggested by Guillaume Munch-Maccagnoni, review by Gabriel + Scherer and Xavier Leroy) + +### Language features: + +* #11694: Add short syntax for generative functor types `() -> ...` + (Jeremy Yallop, review by Gabriel Scherer, Nicolás Ojeda Bär, + Jacques Garrigue) + + +* #11457: Remove old polymorphic variant syntax. + With ``type t = [ `A | `B ]``, one could use the syntax `#t` in types, + where it means the same thing as `[< t]`, and in patterns, where it means + ``(`A | `B)``. The use of `#t` in types for polymorphic variants + was deprecated since 2001, and is now removed. The syntax remains available + in patterns, or for objects -- when `t` is a class type. + (Stefan Muenzel, review by Gabriel Scherer and Jacques Garrigue) + +* #11984: Add dedicated syntax for generative functor application. + Previously, OCaml did not distinguish between `F ()` and + `F (struct end)`, even though the latter looks applicative. Instead, + the decision between generative and applicative functor application + was made based on the type of `F`. With this patch, we now distinguish + these two application forms; writing `F (struct end)` for a generative + functor leads to new warning 73. + (Frédéric Bour and Richard Eisenberg, review by Florian Angeletti) + + +- #9975, #11365: Make empty types (`type t = |`) immediate. + (Antal Spector-Zabusky, review by Gabriel Scherer) + +### Type system: + +* #6941, #11187, #12483: prohibit using classes through recursive modules + inheriting or including a class belonging to a mutually-recursive module + would previous behave incorrectly, and now results in a clean error. + (Leo White, review by Gabriel Scherer and Florian Angeletti) + +* #12189, #12211: anonymous row variables in explicitly polymorphic type + annotation, e.g. `'a. [< X of 'a ] -> 'a`, are now implicitly + universally quantified (in other words, the example above is now read + as `'a 'r. ([< X of 'a ] as 'r) -> 'a`). + (Florian Angeletti and Gabriel Scherer, review by Jacques Garrigue) + +### Code generation and optimizations: + +- #11967: Remove traces of Obj.truncate, which allows some mutable + loads to become immutable. + (Nick Barnes, review by Vincent Laviron and KC Sivaramakrishnan) + +- #9945, #10883: Turn boolean-result float comparisons into primitive operations + Uses the architecture's elementary operations for float comparisons, + when available, rather than branching and then setting the return value. + (Stefan Muenzel, review by Stephen Dolan, Alain Frisch and Vincent Laviron) + +- #8998, #11321, #11430: change mangling of OCaml long identifiers + from `camlModule__name_NNN` to `camlModule.name_NNN`. The previous + mangling schema, using `__`, was ambiguous. + (Xavier Leroy, report by sliquister and Michael Bacarella, + review by Gabriel Scherer) + +- #10834: The -safer-matching option disables type-based optimizations of + pattern-matching compilation. This allows to produce a match failure if + a pattern-matching was wrongly assumed to be exhaustive. Since the + exhaustiveness check for GADTs has had bugs in the past, it may be + useful if you need extra security with GADTs. + (Jacques Garrigue, review by Gabriel Scherer) + +- #11102: Speed up register allocation by permanently spilling registers + (Stephen Dolan, review by Xavier Leroy) + +- #11383: Restrict the local function optimisation to forbid moving code + inside a sub-function + (Vincent Laviron, review by Gabriel Scherer) + +- #11686: Better spilling heuristic for the Linear Scan allocator for more + efficient stack usage. + (Nicolás Ojeda Bär, Gabriel Scherer, Alain Frisch, review by Gabriel Scherer, + Alain Frisch and Nathanaëlle Courant) + +- #11904: Remove arm, i386 native-code backends that were already + disabled at configuration time. + (Nicolás Ojeda Bär, review by Stephen Dolan, Anil Madhavapeddy, and Xavier + Leroy) + +- #11134: Optimise 'include struct' in more cases + (Stephen Dolan, review by Leo White and Vincent Laviron) + +### Other libraries: + +- #11374: Remove pointer cast to a type with stricter alignment requirements + in Windows implementation of Unix.gettimeofday. Windows implementations of + caml_unix_map_file, caml_unix_lseek and caml_unix_lseek_64 now release the + runtime lock. Windows implementation of caml_unix_lockf modernised and + simplified. Where possible, 64 bit integers are used instead of LARGE_INTEGER + structs. + (David Allsopp, review by Jonah Beckford and Xavier Leroy) + +- #11475: Make Unix terminal interface bindings domain-safe + (Olivier Nicole and Xavier Leroy, review by Xavier Leroy) + +- #11775: Unix.write on a non-blocking socket under Windows will return normally + if the write blocks after some data has already been written (as otherwise + there is no way of knowing how much data has been written before + blocking). The same behaviour was already present under Unix. + (Nicolás Ojeda Bär, review by David Allsopp) + +* #11991: Unix on Windows: map ERROR_TOO_MANY_LINKS to EMLINK. + (Nicolás Ojeda Bär) + +- #12067: Document Windows specific meanings of `Unix.process_status` + type + (Samuel Hym, review by David Allsopp) + +- #12072: Document and test that Sys.rename works over directories too + (Jan Midtgaard, review by Anil Madhavapeddy and Xavier Leroy) + +### Tools: + +- #11889, #11978: ocamldoc: handle injectivity annotations and wildcards in type + parameters. + (Florian Angeletti, report by Wiktor Kuchta, review by Jules Aguillon) + +- #11787: Fix GDB scripts to work with OCaml 5's heap layout. (Nick + Barnes) + +- #11772: fix ocamlyacc's handling of raw string literals + (Demi Marie Obenour) + +- #9290: Add a directive to switch off debugging in toplevel. + This allows to see optimized bytecode with -dlambda. + (Jacques Garrigue, review by Gabriel Scherer) + +- #11166: ocamllex: the union of two character sets "cset1 | cset2" can now be + used in any context where a character set is expected. + (Nicolás Ojeda Bär, Martin Jambon, review by Sébastien Hinderer) + +- #11718: ocamlyacc: OCaml-style comments are now supported, in addition to + the C-style comments already supported. The syntax is the same as that used + in OCaml code. + (Demi Marie Obenour, review by Damien Doligez) + +- #11728: ocamlyacc: generate line directives for %type declarations + (Demi Marie Obenour, review by Damien Doligez) + +- #11773: ocamlyacc: Do not allow quoted literals (such as 'a' or "bc") + in a token name or %type declaration. Previously such literals were + accepted by ocamlyacc, but produced malformed OCaml that was rejected + by the compiler. + (Demi Marie Obenour, review by Gabriel Scherer) + +- #11774: ocamlyacc: fail if there is an I/O error + (Demi Marie Obenour, review by Gabriel Scherer) + +- #11973: Add support for postfixed mingw host triplets + (Romain Beauxis) + +- #12165: ocamldoc, use standard doctype to avoid quirk mode. + (Florian Angeletti, review by Gabriel Scherer) + +### Manual and documentation: + +- #11476: Add examples in documentation of Hashtbl, Queue, Atomic, Format + (Simon Cruanes, review by Yotam Barnoy, Gabriel Scherer, Daniel Bünzli, + Ulugbek Abdullaev, and Nicolás Ojeda Bär) + +- #11883, #11884: Update documentation for In_channel and Out_channel + with examples and sections to group related functions. + (Kiran Gopinathan, review by Daniel Bünzli and Xavier Leroy) + + +- #12095, #12097: Put the sample code of the user's manual and reference + documentation of the standard library under the CC0 1.0 Universal + (CC0 1.0) Public Domain Dedication license. + +- #11892: Document the semantic differences of Unix.exec* between Unix and + Windows. + (Boris Yakobowski, review by Daniel Bünzli, Gabriel Scherer and Nicolás Ojeda + Bär) + +- #9430, #11291: Document the general desugaring rules for binding operators. + (Gabriel Scherer, review by Nicolás Ojeda Bär) + +- #11481: Fix the type of Unix.umask to Unix.file_perm -> Unix.file_perm + (Favonia, review by Sébastien Hinderer) + +- #11514: Document ocamltest builtin variables and actions + (Olivier Nicole, review by Sébastien Hinderer) + +- #11676: Fix missing since annotation in the `Sys` and `Format` modules + (Github user Bukolab99, review by Florian Angeletti) + +- #12028: Update format documentation to make it clearer that + `pp_print_newline` flushes its newline + (Florian Angeletti, review by Gabriel Scherer) + +- #12201: in the tutorial on modules, replace priority queue example by + a simpler example based on FIFO queues. + (Xavier Leroy, review by Anil Madhavapeddy and Nicolás Ojeda Bär). + +- #12352: Fix a typo in the documentation of Arg.write_arg + (Christophe Raffalli, review by Florian Angeletti) + +- #7179, #11894: correct the description of CAMLreturn and CAMLreturn0 in + the Interfacing C page and memory.h file. + (Dong An, review by Guillaume Munch-Maccagnoni and Olivier Nicole ) + +### Compiler user-interface and warnings: + +- #10647: Show hints for the "undefined global" error in the toplevel + (Wiktor Kuchta, review by Gabriel Scherer) + +- #12116: Don't suggest to insert a semicolon when the type is not unit + (Jules Aguillon, review by Florian Angeletti) + +- #11679: Improve the error message about too many arguments to a function + (Jules Aguillon, review by Gabriel Scherer and Florian Angeletti) + +- #10009: Improve the error reported by mismatched struct/sig and =/: in module + and module type bindings. + (Jules Aguillon, review by Gabriel Scherer) + +- #11530: Include kinds in kind mismatch error message. + "Error: This variant or record definition does not match that of type M.t + The original is abstract, but this is a record". + (Leonhard Markert, review by Gabriel Scherer and Florian Angeletti) + +- #11646: Add colors to error message hints. + (Christiana Anthony, review by Florian Angeletti) + +- #11235, #11864: usage warnings for constructors and fields can now be disabled + on field-by-field or constructor-by-constructor basis + (Florian Angeletti, review by Gabriel Scherer) + +- #11888: Improve the error message when type variables cannot be deduced from + the type parameters: + Before: + "Error: In this definition, a type variable cannot be deduced + from the type parameters." + After: + "Error: In the GADT constructor + T : 'a -> 'a s t + the type variable 'a cannot be deduced from the type parameters." + (Stefan Muenzel, review by Florian Angeletti and Gabriel Scherer) + + +- #10818: Preserve integer literal formatting in type hint. + (Leonhard Markert, review by Gabriel Scherer and Florian Angeletti) + +- #11338: Turn some partial application warnings into hints. + (Leo White, review by Stephen Dolan) + +- #10931: Improve warning 14 (illegal backslash) with a better explanation + of the causes and how to fix it. + (David Allsopp, Florian Angeletti, Lucas De Angelis, Gabriel Scherer, + review by Nicolás Ojeda Bär, Florian Angeletti, David Allsopp and + Gabriel Scherer) + +- #10911: Improve the location reported by parenthesized assert expressions + (Fabian Hemmer, review by Gabriel Scherer) + +- #1391, #7645, #3922: Add an early error when compiling different + modules with mismatching -for-pack + (Pierre Chambart and Vincent Laviron, review by Mark Shinwell) + +- #11297: Report "unclosed" error when "done" is missing in a "do .. done" + construct. + (Nicolás Ojeda Bär, review by Gabriel Scherer) + +- #11635, #5461, #10564: turn warning 31 (Module_linked_twice) into a hard error + for ocamlc — this was already an error with ocamlopt. + (Hugo Heuzard, review by Valentin Gatien-Baron and Gabriel Scherer) + +- #11653: Add the -no-absname option to ocamlc, ocamlopt and ocamldep. + (Abiola Abdulsalam, review by Sébastien Hinderer and Florian Angeletti) + +- #11696: Add the -no-g option to ocamlc and ocamlopt. + (Abiola Abdulsalam, review by Sébastien Hinderer, Nicolás Ojeda Bär and + Florian Angeletti) + +- #11722: clearer error messages on non-well-founded type definitions + (Gabriel Scherer, review by Jacques Garrigue) + +- #11819: make the `native_compiler` and `native_dynlink` configuration + variables available through ocamlc -config. + (Sébastien Hinderer, review by Gabriel Scherer and David Allsopp) + +- #8602, #11863: Add -stop-after lambda flag option + (Douglas Smith and Dmitrii Kosarev, review by Gabriel Scherer) + +- #11910: Simplify naming convention for shadowed or ephemeral identifiers in + error messages (eg: `Illegal shadowing of included type t/2 by t`) + (Florian Angeletti, review by Jules Aguillon) + +- #12024: insert a blank line between separate compiler messages + (Gabriel Scherer, review by Florian Angeletti, report by David Wong) + +- #12088, #9265, #11949: ocamldebug: fix confusing repeating behavior + on blank lines within source scripts + (Damien Doligez, review by Gabriel Scherer, report by Gaëtan Gilbert) + +- #12107: use aliases to mark weak row variables: `_[< ... ]`, `< _..>`, `_#ct` + are now rendered as `[< ...] as '_weak1`, `< .. > as '_weak1`, + and `#ct as '_weak1`. + (Florian Angeletti, suggestion by Stefan Muenzel, review by Gabriel Scherer) + +- #12051: Improve the error messages when type variables cannot be generalized + (Stefan Muenzel, review by Florian Angeletti) + +* #12094: Trigger warning 5 (ignored-partial-application) when the scrutinee of + a pattern matching is of arrow type and all cases match wildcard or exception + patterns. + (Nicolás Ojeda Bär, review by Gabriel Scherer) + +### Internal/compiler-libs changes: + +- #11018, #11869: Clean up Types.Variance, adding a description of + the lattice used, and defining explicitly composition. + (Jacques Garrigue, review by Gabriel Scherer and Jeremy Yallop) + +- #11536: Introduce wrapper functions for level management + ([Ctype.with_level], etc) and for type variable scoping + ([Typetexp.with_local_type_variable_scope]). + The older API ([Ctype.(begin_def,end_def)], [Typetexp.(narrow,widen)], etc.) + is now removed. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #11601, #11612, #11628, #11613, #11623, #12120 : Clean up some + global state handling in emitcode, bytepackager, bytegen, + bytesections, spill. + (Hugo Heuzard, Stefan Muenzel, review by Vincent Laviron, Gabriel Scherer + and Nathanaëlle Courant) + +- #12119, #12188, #12191: mirror type constraints on value binding in the + parsetree: + the constraint `typ` in `let pat : typ = exp` is now directly stored + in the value binding node in the parsetree. + (Florian Angeletti, review by Richard Eisenberg) + +- #11912: Refactoring handling of scoped type variables + (Richard Eisenberg, review by Gabriel Scherer and Florian Angeletti) + + +- #11691, #11706: use __asm__ instead of asm for strict ISO C conformance + (Xavier Leroy, report by Gregg Reynolds , review by Sadiq Jaffer) + +- #11693: Remove use of C99 Variable Length Arrays (VLAs) in the runtime. + (David Allsopp, review by Xavier Leroy, Guillaume Munch-Maccagnoni, + Stefan Muenzel and Gabriel Scherer) + +- #12138: Generalise interface for BUILD_PATH_PREFIX_MAP mapping. + Absolute paths are now rewritten too. + (Richard L Ford, suggestions and review by Gabriel Scherer) + +- #10512: explain the compilation strategy for switches on constructors + (Gabriel Scherer, review by Vincent Laviron) + +- #11990: Improve comments and macros around frame descriptors. + (Nick Barnes, review by Gabriel Scherer) + +- #11847, #11849, #11851, #11898: small refactorings in the type checker + (Gabriel Scherer, review by Nicolás Ojeda Bär) + +- #11027: Separate typing counter-examples from type_pat into retype_pat; + type_pat is no longer in CPS. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #11286, #11515: disambiguate identifiers by using how recently they have + been bound in the current environment + (Florian Angeletti, review by Gabriel Scherer) + +- #11364: Allow `make -C testsuite promote` to take `TEST` and `LIST` variables + (Antal Spector-Zabusky, review by Gabriel Scherer and David Allsopp) + +- #11446: document switch compilation (lambda/switch.ml) + (Gabriel Scherer, review by Luc Maranget and Vincent Laviron) + +- #11568: Encode inline record types in Path.t + (Leo White and Hyunggyu Jang, review by Gabriel Scherer) + +- #11569: Remove hash type encoding + (Hyunggyu Jang, review by Gabriel Scherer and Florian Angeletti) + +- #11627: use return values instead of globals for linear scan intervals + (Stefan Muenzel, review by Nicolás Ojeda Bär) + +- #11634: Dll.open_dll now properly handles opening for execution while already + opened for checking + (Hugo Heuzard, review by Nicolás Ojeda Bär) + +* #11745, #12358: Debugger and toplevels: embed printer types rather than + reading their representations from topdirs.cmi at runtime. + This change also removes the ocamlmktop initialization module introduced + in #11382 which was no longer useful. + This change breaks toplevel scripts relying on the visibility of `Topdirs` + in the initial toplevel environment without loading `topfind`. + Since the opam default `.ocamlinit` file loads `topfind`, it is expected + that only scripts run with `ocaml -noinit` are affected. + For those scripts, accessing `Topdirs` now requires the `compiler-libs` + directory to be added to the toplevel search path with + ``` + #directory "+compiler-libs";; + ```` + as was already the case for the other modules in the toplevel interface + library. + (Sébastien Hinderer, review by Florian Angeletti, Nicolás Ojeda Bär and + Gabriel Scherer) + +- #11615: remove global variables form asmcomp/linearize.ml + (Stefan Muenzel, review by Nicolás Ojeda Bär + +- #10856: Add location, attribute(s) visitors to Tast_mapper/Tast_iterator + (Yan Dong, review by Nicolás Ojeda Bär and Gabriel Scherer) + +- #11933: Use the correct machtype when reading the code pointer from closures + (Nathanaëlle Courant, review by Gabriel Scherer and Vincent Laviron) + +- #11972: refactor runtime/frame_descriptors.c + in preparation for quadratic-time fix + (Gabriel Scherer, review by Enguerrand Decorne) + +- #11997: translate structured constants into their Obj.t representation + at compile time rather than link time. Changes the way dumpobj prints + these constants because their representation becomes untyped. + (Sébastien Hinderer, review by Xavier Leroy, Nicolás Ojeda Bär and + Hugo Heuzard) + +- #12011: remove Ctype.reified_var_counter + (Takafumi Saikawa and Jacques Garrigue, review by Gabriel Scherer) + +- #12012: move calls to Typetexp.TyVarEnv.reset inside with_local_level etc. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #12034: a logarithmic algorithm to find the next free variable + (Gabriel Scherer, review by Stefan Muenzel) + +- #12092: remove Lev_module_definition from lambda + (Nick Roberts, review by Gabriel Scherer) + +- #12117: Remove arity-interrupting elaboration of module unpacks + (Nick Roberts, review by Richard Eisenberg and Jacques Garrigue) + +- #12118: stop storing names of predefined exceptions in the + cu_required_globals field of compilation unit descriptors. + (Sébastien Hinderer, review by Vincent Laviron) + +- #12125: Add Misc.print_see_manual and modify [@manual_ref] to accept + lists for simpler printing of manual references + (Stefan Muenzel, review by Florian Angeletti) + +### Build system: + +- #11844: Reduce verbosity of `make` logs by printing program invocations in + shorthand (eg `OCAMLC foo.cmo`). Setting `V=1` recovers the old style (with + full command-lines). + (Xavier Leroy, Nicolás Ojeda Bär, review by Sébastien Hinderer) + + +- #11243, #11248, #11268, #11420, #11675: merge the sub-makefiles into + the root Makefile. + (Sébastien Hinderer, review by David Allsopp and Florian Angeletti) + +- #11828: Compile otherlibs/ C stubs in two version for native and bytecode + (Olivier Nicole, review by Sébastien Hinderer and Xavier Leroy) + +- #12265: Stop adding -lexecinfo to cclibs (leftover debugging code from the + multicore project). Harden the feature probe for -lm in configure so -lm is + only added if strictly necessary. configure.ac now correctly propagates + library flags for the Windows ports, allowing Windows OCaml to be configured + with ZSTD support. + (David Allsopp, review by Sébastien Hinderer) + +### Bug fixes: + +- #8813, #12029: In the toplevel, let the user type several phrases in one line + (Damien Doligez, report by Daniel Bünzli, review by Gabriel Scherer and + Wiktor Kuchta) + +- #12062: fix runtime events consumer: when events are dropped they shouldn't be + parsed. (Lucas Pluvinage) + +- #12132: Fix overcounting of minor collections in GC stats. + (Damien Doligez, review by Gabriel Scherer) + +- #12017: Re-register finaliser only after calling user alarm in Gc.create_alarm + (Fabrice Buoro, report by Sam Goldman, review by Guillaume Munch-Maccagnoni) + +- #11887, #11893: Code duplication in pattern-matching compilation + (Vincent Laviron, report par Greta Yorsh, review by Luc Maranget and + Gabriel Scherer) + +- #10664, #11600: Unsoundness in the typing of polymorphic methods + involving polymorphic variants + (Jacques Garrigue, report by Mike Shulman, review by Gabriel Scherer) + +- #11302, #11412: `ocamlc` and `ocamlopt` should not remove generated files + when they are not regular files. + (Xavier Leroy, report by Thierry Martinez, review by + Anil Madhavapeddy, Nicolás Ojeda Bär, David Allsopp) + +- #10348, #10560, #11561: Expand GADT equations lazily during unification to + avoid ambiguity + (Jacques Garrigue, review by Leo White) + +- #11436: Fix wrong stack backtrace for out-of-bound exceptions raised + by leaf functions. + (Tom Kelly and Xavier Leroy, review by Mark Shinwell) + +- #11450, #12018: Fix erroneous functor error messages that were too eager to + cast `struct end` functor arguments as unit modules in `F(struct end)`. + (Florian Angeletti, review by Gabriel Scherer) + +- #11643: Add missing test declaration to float_compare test, so that it will + run. + (Stefan Muenzel, review by David Allsopp) + +- #11630: Use correct location when reporting record labels with non-existent + paths. + (Nicolás Ojeda Bär, report by Jason Gross, review by Gabriel Scherer) + +- #11727: Ensure push_defaults can push past module patterns, fixing an + currying optimisation accidentally disabled by #10340. + (Stephen Dolan, review by Gabriel Scherer) + +- #11771: Use a more relaxed mode for unification in Ctype.subst + (Leo White, review by Jacques Garrigue and Gabriel Scherer) + +- #11803, #11808: on x86, the destination of an integer comparison must be + a register, it cannot be a stack slot. + (Vincent Laviron, review by Xavier Leroy, report by + Emilio Jesús Gallego Arias) + +- #11809: Protect Parmatch.pats_of_type from missing cmis + (Jacques Garrigue, review by Stephen Dolan and Gabriel Scherer) + +- #11824: Fix a crash when calling `ocamlrun -b` + (Florian Angeletti, review by Sébastien Hinderer) + +- #11815: Marshalling continuations raises invalid argument exception. + (Jérôme Vouillon, review by Nicolás Ojeda Bär, Stephen Dolan and + Hugo Heuzard) + +- #11846: Mark rbx as destroyed at C call for Win64 (mingw-w64 and Cygwin64). + Reserve the shadow store for the ABI in the c_stack_link struct instead of + explictly when calling C functions. This simultaneously reduces the number of + stack pointer manipulations and also fixes a bug when calling noalloc + functions where the shadow store was not being reserved. + (David Allsopp, report by Vesa Karvonen, review by Xavier Leroy and + KC Sivaramakrishnan) + +- #11850: When stopping before the `emit` phase (using `-stop-after`), an empty + temporary assembly file is no longer left in the file system. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Xavier Leroy) + +- #11866: Fix the result of `caml_read_directory()` on non-existent paths. + (Andrei Paskevich and Charlène Gros, review by David Allsopp and + Nicolás Ojeda Bär) + +- #11879: Bugfix for Ctype.nondep_type + (Stephen Dolan, review by Gabriel Scherer) + +- #12004: Don't ignore function attributes on lambdas with locally abstract + types. + (Chris Casinghino, review by Gabriel Scherer) + +- #12037: Fix some data races by using volatile when necessary + (Fabrice Buoro and Olivier Nicole, review by Guillaume Munch-Maccagnoni, + Gabriel Scherer and Luc Maranget) + +- #12046: Flush stderr when tracing the parser + (Hugo Heuzard, review by David Allsopp and Nicolás Ojeda Bär) + +- #12061, #12063: don't add inconsistent equalities when computing + high-level error messages for functor applications and inclusions. + (Florian Angeletti, review by Gabriel Scherer) + +- #12075: auto-detect whether `ar` support @FILE arguments at + configure-time to avoid using this feature with toolchains + that do not support it (eg FreeBSD/Darwin). + (Nicolás Ojeda Bär, review by Xavier Leroy, David Allsopp, Javier + Chávarri, Anil Madhavapeddy) + +- #12103, 12104: fix a concurrency memory-safety bug in Buffer + (Gabriel Scherer, review by Florian Angeletti, report by Samuel Hym) + +- #12112: Fix caml_callback{2,3}_exn when used with effect handlers. + (Lucas Pluvinage, review by Gabriel Scherer, David Allsopp and Xavier Leroy) + +- #12134: Use ghost location for nodes created when handling defaults in + optional arguments. + (Paul-Elliot Anglès d'Auriac, review by Gabriel Scherer) + +- #12153: Fix segfault in bytecode programs involving recursive value + definitions of values of size 0 + (Vincent Laviron, Xavier Leroy, Gabriel Scherer, + review by Xavier Leroy, report by Nick Roberts) + +- #12162: Fix miscompilation on amd64 backends involving integer overflows + (Vincent Laviron and Greta Yorsh, review by Stefan Muenzel) + +- #12170: fix pthread_geaffinity_np configure check for android + (David Allsopp, review by Sébastien Hinderer) + +- #12178: Fix runtime events consumer poll function returning an invalid value + instead of an OCaml integer value. (Lucas Pluvinage) + +- #12252: Fix shared library build error on RISC-V. + (Edwin Török, review by Nicolás Ojeda Bär and Xavier Leroy) + +- #12255, #12256: Handle large signal numbers correctly (Nick Barnes, + review by David Allsopp). + +- #12277: ARM64, fix a potential assembler error for very large functions by + emitting stack reallocation code before the body of the function. + (Xavier Leroy, review by KC Sivaramakrishnan) + +- #12253, #12342: Fix infinite loop in signal handling. + (Guillaume Munch-Maccagnoni, report by Thomas Leonard, review by + KC Sivaramakrishnan and Sadiq Jaffer) + +- #12445: missing GC root registrations in runtime/io.c + (Gabriel Scherer, review by Xavier Leroy and Jeremy Yallop) + +- #12481, #12505: Fix incorrect initialization of array expressions + `[|e1;...;eN|]` when `N` is large enough to require major heap allocation. + (Xavier Leroy, report by Andrey Popp, analysis by KC Sivaramakrishnan + and Vincent Laviron, review by Gabriel Scherer) + +- #11150, #11207, #11936: Avoid recomputation in Typedecl.check_wellfounded + (Jacques Garrigue, report by Boris Yakobowski, review by Gabriel Scherer) + +- #11186, #11188: Fix composition of coercions with aliases + (Vincent Laviron, report and review by Leo White) + +- #12486: Fix delivery of unhandled effect exceptions on s390x + (Miod Vallat, report by Jan Midtgaard, review by Vincent Laviron and Xavier + Leroy) + +OCaml 5.0.0 (15 December 2022) +------------------------------ + +- #10831: Multicore OCaml + (Enguerrand Decorne, Stephen Dolan, Tom Kelly, Sadiq Jaffer, + Anil Madhavapeddy, Sudha Parimala, KC Sivaramakrishnan, + Leo White, the Tarides multicore team, + review by Florian Angeletti, Damien Doligez, Xavier Leroy, + Guillaume Munch-Maccagnoni, Olivier Nicole, Nicolás Ojeda Bär, + Gabriel Scherer, the OCaml core development team, and many + other valued reviewers.) + +### Language features: + +### Runtime system: + +- #11400: Runtime events counters fixes + Fixes mismatch between OCaml and C APIs, removes events from 4.x that + are not present in the 5.0 GC and adds some missing probes. + (Sadiq Jaffer, review by Gabriel Scherer, Florian Angeletti) + +- #11368: Runtime events buffer size OCAMLRUNPARAMS fix + The runtime events buffer size can now be set via the 'e' OCAMLRUNPARAM. + This is previously mistakenly enabled/disabled tracing instead. + (Sadiq Jaffer, review by KC Sivaramakrishnan, David Allsopp, Damien Doligez) + +- #11308: Add environment variable to preserve runtime_events after exit + If the environment variable OCAML_RUNTIME_EVENTS_PRESERVE exists then the + runtime will not remove the runtime events ring buffers at exit. This + makes tracing very short running programs more reliable. + (Sadiq Jaffer, review by KC Sivaramakrishnan) + +- #10964: Ring-buffer based runtime tracing (runtime_events) + Runtime_events is a very low overhead runtime tracing system designed for + continuous monitoring of OCaml applications. + (Sadiq Jaffer, review by Anil Madhavapeddy, Enguerrand Decorne, + Richard Warburton, Gabriel Scherer, Sabine Schmaltz, Florian Angeletti, + Patrick Ferris, Tom Kelly) + +* #10723: do not use `-flat-namespace` linking for macOS. + (Carlo Cabrera, review by Damien Doligez) + +* #10863, #10933: Remove support for old, unprefixed C runtime function names + such as `alloc`. The new names prefixed with `caml_` must be used instead, + such as `caml_alloc`. Consequently, it is no longer needed to define + `CAML_NAME_SPACE` to avoid bringing unprefixed names into scope: this is now + the default behavior. + (Nicolás Ojeda Bär, review by Xavier Leroy) + +- #10902: Do not register empty code fragments in natdynlink. + (David Allsopp, review by Xavier Leroy and Damien Doligez) + +- #10965: `caml_fatal_error_hook`, GC timing hooks, and + `caml_scan_roots_hook` are now atomic variables. Restore GC timing + hooks in multicore. + (Guillaume Munch-Maccagnoni, review by Enguerrand Decorne, Xavier + Leroy, Gabriel Scherer, and KC Sivaramakrishnan) + +- #11209: Add a public and thread-safe timing hook running at domain + termination, after this domain has stopped running any OCaml code: + `caml_domain_terminated_hook`. This can be useful for implementing + domain-local state in C. + (Guillaume Munch-Maccagnoni, review by Xavier Leroy and Gabriel + Scherer) + +- #10875, #11731: Add option to allocate fiber stacks and sigaltstacks with + mmap(MAP_STACK) instead of malloc. This is exposed via a configure + --enable-mmap-map-stack option, and is enabled by default on OpenBSD where + it is mandatory. + (Anil Madhavapeddy, review by Gabriel Scherer, Tom Kelly, + Michael Hendricks and KC Sivaramakrishnan). + +- #10950: Do not use mmap to allocate Caml_state. + In order to reduce virtual memory usage, we dynamically allocate + the domain_state structure. + (Enguerrand Decorne, KC Sivaramakrishnan and Tom Kelly, + review by Anil Madhavapeddy and Gabriel Scherer) + +- #11010: Use strerror_r for reentrant error string conversion. + (Anil Madhavapeddy and Xavier Leroy, review by same and Edwin Török) + +- #11002, #11066, #11086: Do not use Begin_roots/End_roots macros in + the runtime system. Also fix a missing root registration in the + implementation of Unix.write on Windows. + (Nicolás Ojeda Bär, Daniel Bünzli and Antonin Décimo, + review by Xavier Leroy and David Allsopp) + +- #11022: Track GC work for all managed bigarray allocations + (Stephen Dolan, report by Andrew Hunter, review by Damien Doligez) + +- #10802: Use 4.12 value macros and helpers in C code + (Antonin Décimo, review by Gabriel Scherer) + +- #11105: Fix handling of fiber stack cache with multiple domains + (Jon Ludlam, KC Sivaramakrishnan and Tom Kelly) + +- #11054: Respect user provided maximum stack space + Make sure the stack we initially request is sized accordingly to + the user provided settings. tmc/stack_space is also updated by + this PR in order to account for this change. + (Enguerrand Decorne, report by Jon Ludlam, + review by Tom Kelly, KC Sivaramakrishnan and Gabriel Scherer) + +- #11238: Increase the default limit for the stack size to 128 Mi words, + i.e. 1 Gib for 64-bit platforms and 512 Mib for 32-bit platforms. + (Xavier Leroy, review by Sébastien Hinderer) + +* #11295: An ISO C 2011 compliant compiler, including full support for atomic + types, is now required to build the OCaml runtime system. + (Xavier Leroy, review by David Allsopp and Sébastien Hinderer) + +- #10915, #11039, #11057, #11095, #11190: Implement quality treatment for + asynchronous actions in multicore. Reimplement the old behaviour of + `caml_process_pending*` for multicore. + (Guillaume Munch-Maccagnoni, review by Sadiq Jaffer and Gabriel Scherer) + +- #11303: Ensure that GC is not invoked from bounds check failures + (Stephen Dolan, review by Sadiq Jaffer and Xavier Leroy) + +- #11304: Fix data race on Windows file descriptors + (Olivier Nicole and Xavier Leroy, review by Xavier Leroy, David Allsopp, + and Sadiq Jaffer) + +* #11337: pass 'flags' metadata to root scanners, to optimize stack + scanning in the bytecode interpreter. + Changes the interface of user-provided root-scanning hooks. + (Gabriel Scherer, review by Xavier Leroy, + Guillaume Munch-Maccagnoni, Sadiq Jaffer and Tom Kelly) + +* #11255: in the C interface, `&Field(v, i)` now has type `volatile value *` + instead of `value *` in OCaml 4. This makes the memory model + for mixed OCaml/C code better defined, but can cause warnings or type + errors in user C code. + (KC Sivaramakrishnan, review by Xavier Leroy, Gabriel Scherer and + Guillaume Munch-Maccagnoni, additional discussions with Stephen + Dolan and Luc Maranget) + +- #5299, #4787, #11138, #11272, #11506: To help debugging, `Caml_state` + now dynamically checks that the domain lock is held, and fails + otherwise (with a fatal error at most entry points of the C API, or + systematically in debug mode). A new variable `Caml_state_opt` is + introduced, and is `NULL` when the domain lock is not held. This + allows to test from C code if the current thread holds the lock of + its domain. + (Guillaume Munch-Maccagnoni, review by Florian Angeletti, Damien + Doligez, Sadiq Jaffer, Xavier Leroy, and Gabriel Scherer) + +- #11223: The serialization format of custom blocks changed in 4.08, + but the deserializer would still support the pre-4.08 format. OCaml + 5.x removed support for this old format; provide a clear error message + in this case. + (Hugo Heuzard, review by Gabriel Scherer) + +- #11504, #11522: Use static allocation in `caml_make_float_vect` in + no-flat-float-array mode, it's more efficient and avoids a a race condition + (Xavier Leroy, report by Guillaume Munch-Maccagnoni, review by David Allsopp) + +- #11652: Fix benign off-by-one error in Windows implementation of caml_mem_map. + (David Allsopp, review by Gabriel Scherer) + +- #11669, #11704: Fix construction of Effect.Unhandled exceptions in the + bytecode interpreter. + (David Allsopp and Xavier Leroy, report by Samuel Hym, review by Xavier Leroy + and Gabriel Scherer) + +### Code generation and optimizations: + +- #10972: ARM64 multicore support: OCaml & C stack separation; + dynamic stack size checks; fiber and effects support. + (Tom Kelly and Xavier Leroy, review by KC Sivaramakrishnan, Xavier Leroy, + Guillaume Munch-Maccagnoni, Eduardo Rafael, Stephen Dolan and + Gabriel Scherer) + +### Standard library: + +- #10742: Use LXM as the pseudo-random number generator for module Random. + Add `Random.State.split` and `Random.split` to "split" a PRNG off + another PRNG. + (Xavier Leroy, review by Gabriel Scherer and Hugo Heuzard) + +* #10867, #11345: Remove deprecated values: Array.create, Array.make_float, + Array.create_matrix, Bytes.uppercase, Bytes.lowercase, Bytes.capitalize, + Bytes.uncapitalize, Char.lowercase, Char.uppercase, Filename.temp_dir_name, + Int32.format, Int64.format, Nativeint.format, Format.bprintf, Format.kprintf, + Format.set_all_formatter_output_functions, + Format.get_all_formatter_output_functions, + Format.pp_set_all_formatter_output_functions, + Format.pp_get_all_formatter_output_functions, Format.pp_open_tag, + Format.pp_close_tag, Format.open_tag, Format.close_tag, + Format.formatter_tag_functions, Format.pp_set_formatter_tag_functions, + Format.pp_get_formatter_tag_functions, Format.set_formatter_tag_functions, + Format.get_formatter_tag_functions, Gc (mutability of the fields of type + Gc.control), Lazy.lazy_from_fun, Lazy.lazy_from_val, Lazy.lazy_is_val, + Obj.set_tag, Obj.truncate, Obj.final_tag, Obj.extension_constructor, + Obj.extension_name, Obj.extension_id, Scanf.stdib, Scanf.fscanf, + Scanf.kfscanf, Stdlib.( & ), Stdlib.( or ), String.set, String.copy, + String.fill, String.unsafe_set, String.unsafe_fill, String.uppercase, + String.lowercase, String.capitalize, String.uncapitalize, Thread.kill, + Thread.wait_write, Thread.wait_read, the whole ThreadUnix module, the + infix operator (.[]<-). + (Nicolás Ojeda Bär, review by Damien Doligez) + +* #10896: Remove Stream, Genlex and Pervasives. Also remove legacy standalone + bigarray library (the Bigarray module is now part of the standard library). + (Nicolás Ojeda Bär, review by Kate Deplaix and Anil Madhavapeddy) + +- #10921: Use getentropy, when available, to seed the generator during + `Random.self_init` + (Michael Hendricks, review by Gabriel Scherer, Xavier Leroy, and + Anil Madhavapeddy) + +* #10924: Add deprecated attribute to Printexc.catch, Printf.kprintf and + Unix.SO_ERROR. + (Nicolás Ojeda Bär, review by Damien Doligez) + +- #10986: Add Scanf.sscanf_opt, Scanf.bscanf_opt and Scanf.scanf_opt. + (Nicolás Ojeda Bär, review by Florian Angeletti and Gabriel Scherer) + +* #11157: Rename "hash" in the "Hashtbl.SeededHashedType" signature to + "seeded_hash". This allows defining both seeded and unseeded hash functions in + the same module. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Xavier Leroy) + +- #8878: Add String.hash and String.seeded_hash. + (Tom Kelly, review by Alain Frisch and Nicolás Ojeda Bär) + +- #11279, #11585, #11742: ensure that the unsafe Buffer code + remains memory-safe in concurrent settings. + Unsynchronized access to Buffer is a programming error and may + result in wrong behavior, but it should preserve memory-safety. + (Florian Angeletti and Gabriel Scherer, review by Gabriel Scherer + and Vincent Laviron, report by David Allsopp) + + +### Other libraries: + +* #9071, #9100, #10935: Reimplement `Thread.exit()` as raising the + exception `Thread.Exit`, and mark `Thread.exit` as deprecated. + The new implementation changes the behavior compared with + the OCaml 4 implementation. For example, the new implementation + causes `Fun.finally` finalizers to be run and catch-all exception + handlers to prevent termination. + (Jacques-Henri Jourdan and Xavier Leroy, review by Damien Doligez, + Guillaume Munch-Maccagnoni, Gabriel Scherer, and Enguerrand Decorne) + +- #11034: Dynlink library, add a global lock to make dynlinking + thread-safe. + (Florian Angeletti, review by Gabriel Scherer) + +- #11087: deprecate Thread.wait_timed_read, Thread.wait_timed_write, + Thread.select, Thread.wait_pid. The same functionality is available in the + Unix module. + (Nicolás Ojeda Bär, review by Anil Madhavapeddy) + +- #11309, #11424, #11427, #11545: Add Domain.recommended_domain_count. + (Christiano Haesbaert, Konstantin Belousov, review by David Allsopp, + KC Sivaramakrishnan, Gabriel Scherer, Nicolás Ojeda Bär) + +- #11461, #11466: Fix gethostbyaddr for IPv6 arguments and make it domain-safe + (Olivier Nicole, Nicolás Ojeda Bär, David Allsopp and Xavier Leroy, + review by the same) + +- #11479: Make Unix.symlink domain-safe on Windows + (Olivier Nicole, review by Xavier Leroy and David Allsopp) + +### Tools: + +* #11004: Litmus tests for checking the implementation of the + memory model. + (Luc Maranget, review by Gabriel Scherer and Xavier Leroy) + +- #11024: Handle alerts in ocamldoc. + The alert `[@@alert deprecated]` is handled specifically and it's no longer + needed to duplicate the deprecated annotation (the alert for the compiler and + the tag for the documentation). Every other alerts also appear in the + documentation. + (Jules Aguillon, review by Florian Angeletti) + +- #11065: Port the bytecode debugger to 5.0, adding support for effect handlers. + (Damien Doligez and @fabbing, review by @fabbing and Xavier Leroy) + +- #11079: Add the -nobanners option to dumpobj. + (Sébastien Hinderer, review by Gabriel Scherer and Vincent Laviron) + +- #11100: Fix ocamltest to make sure failed tests are not counted as + "unexpected error". + (Damien Doligez, review by Sébastien Hinderer) + +- #11245: Merge the common code of ocamlcp and ocamloptp into a single module. + (David Allsopp, review by Sébastien Hinderer) + +- #11382: OCamlmktop use a new initialization module "OCamlmktop_init" to + preserve backward-compatibility with user-module provided modules that install + toplevel printers. + (Florian Angeletti, review by Gabriel Scherer and David Allsopp) + +### Manual and documentation: + +- #11058: runtime/HACKING.adoc tips on debugging the runtime + (Gabriel Scherer, review by Enguerrand Decorne and Nicolás Ojeda Bär) + +- #11093: Add an effect handlers tutorial + (KC Sivaramakrishnan, review by François Pottier, Gabriel Scherer, François + Bobot and Wiktor Kuchta) + +- #11192: Better documentation for condition variables. + (François Pottier, review by Luc Maranget, Xavier Leroy, and Wiktor Kuchta) + +- #11093: Add tutorials on parallelism features and the relaxed memory model + (KC Sivaramakrishnan, review by Damien Doligez, Anil Madhavapeddy, Gabriel + Scherer, Thomas Leonard, Tom Ridge, Xavier Leroy, Luc Maranget, Fabrice + Buoro, Olivier Nicole, Guillaume Munch-Maccagnoni, Jacques-Henri Jourdan) + +- #11640, #11647: Add missing options to the man pages: + flambda commonly-used options, and negative options (`-no-rectypes`, ... ). + (Amandine Nangah, review by David Allsopp, Florian Angeletti, + Sébastien Hinderer, and Vincent Laviron) + +- #11676: Fix missing since annotation in the `Sys` and `Format` modules + (Github user Bukolab99, review by Florian Angeletti) + +- #11813: Make new multicore chapters easier to discover, and emphasize impact + on C bindings. + (Edwin Török, review by KC Sivaramakrishnan, and Florian Angeletti) + +### Compiler user-interface and warnings: + +- #9140, #11131: New command-line flag -nocwd to not include implicit + the current directory to the load path. + (Thomas Roglin, review by Gabriel Scherer and Nicolás Ojeda Bär) + +- #11089: Add 'since ' information to compiler warnings. + (André Maroneze, review by Florian Angeletti and Gabriel Scherer) + +- #10909: Disable warning 59 (assignment to immutable blocks) unless flambda + invariant checks are enabled. + (Vincent Laviron, review by Gabriel Scherer) + +- #10981, #11276: Implement a -cmi-file option for ocamlc and ocamlopt. + (Sébastien Hinderer, review by Damien Doligez, Daniel Bünzli and + Florian Angeletti) + +* #11049: Stop padding 1-digit compiler minor version numbers. + (So for instance OCaml 5.0 rather than 5.00) + (Sébastien Hinderer, review by David Allsopp, Florian Angeletti and + Xavier Leroy) + +- #11253: Deprecate `ocaml script` and `ocamlnat` script where `script` has no + extension and is an implicit basename. + (David Allsopp, review by Florian Angeletti and Sébastien Hinderer) + +### Internal/compiler-libs changes: + +- #10878, #10909: restore flambda after the Multicore merge. + (Vincent Laviron, review by Gabriel Scherer and Xavier Leroy) + +- #10864, #10888: restore afl-fuzz mode for sequential programs. + (Jan Midtgaard, review by Xavier Leroy and Gabriel Scherer) + +- #11008, #11047: rework GC statistics in the Multicore runtime + (Gabriel Scherer, review by Enguerrand Decorne) + +- #11058: basic debugging documentation in runtime/HACKING.adoc + (Gabriel Scherer, review by Enguerrand Decorne and Nicolás Ojeda Bär) + +- #11199: Stop installing topdirs.cmi twice. The toplevel now reads topdirs.cmi + from +compiler-libs, as the debugger does. + (David Allsopp, review by Sébastien Hinderer) + +- #11007, #11399: META files for the stdlib, compiler-libs and other libraries + (unix, dynlink, str, runtime_events, threads, ocamldoc) are now installed + along with the compiler. + (David Allsopp, Florian Angeletti, Nicolás Ojeda Bär and Sébastien Hinderer, + review by Daniel Bünzli, Kate Deplaix, Anil Madhavapeddy and Gabriel Scherer) + +### Build system: + +* #10893: Remove configuration options --disable-force-safe-string and + DEFAULT_STRING=unsafe as well as --enable-force-safe-string and + DEFAULT_STRING=safe which are now the default unconditionally. + (Kate Deplaix, review by Gabriel Scherer and David Allsopp) + +- #11092: Build native-code compilers on OpenBSD/aarch64. + (Christopher Zimmermann, review by Anil Madhavapeddy) + +- #11126: Build system: make it possible to choose which ocamldep + (and flags) to use when computing dependencies for the compiler. + Add a -no-slash option to ocamldep to let users override -slash. + (Sébastien Hinderer, review by David Allsopp) + +- #11147: Factorize the stdlib-related compilation flags. Make it + possible to control them consistently through the STDLIBFLAGS + build variable. Make sure ocamldoc and ocamllex get compiled and + linked with debugging information (-g). + (Sébastien Hinderer, review by Gabriel Scherer) + +- #11149: Make the bootstrap process reproducible on systems with non-big-endian + floating point. If the boot/ artefacts are up-to-date, this means that running + make bootstrap on any platform should not change the images in boot/ and paves + the way for automated testing that the bootstrap is repeatable. + (David Allsopp, review by Damien Doligez and Sébastien Hinderer) + +- #11160: otherlibs: merge win32unix into unix. + (Sébastien Hinderer, review by David Allsopp, Nicolás Ojeda Bär, + Xavier Leroy, Vincent Laviron and Antonin Décimo) + +* #11198, #11298: Install the Dynlink, Str and Unix libraries to individual + subdirectories of LIBDIR. The compiler, debugger and toplevel automatically + add `-I +lib` if required, but display an alert. + (David Allsopp, review by Florian Angeletti, Nicolás Ojeda Bär, + Valentin Gatien-Baron and Sébastien Hinderer) + +- #11200: Install ocamlprof's Profiling runtime module to a +profiling, + removing it from the default namespace. + (David Allsopp, review by Sébastien Hinderer) + +- #11294: Switch minimum required autoconf to 2.71. + (David Allsopp, review by Xavier Leroy) + +- #11097: Build native-code compilers on NetBSD/aarch64 + (Kate Deplaix, review by Anil Madhavapeddy) + +### Bug fixes: + +- #10790: don't drop variance and injectivity annotations when pretty printing + `with` constraints (for example, `with type +!'a t = ...`). + (Florian Angeletti, report by Luke Maurer, review by Matthew Ryan and + Gabriel Scherer) + +- #11167: Fix memory leak from signal stack. + (Antoni Żewierżejew, review by Gabriel Scherer and Enguerrand Decorne) + +- #11112: harden -use-runtime against spaces or quotes in the provided path + (Gabriel Scherer, report by Brahima Dibassi, review by David Allsopp) + +- #11068, #11070: Fix typo in function name given in Unix_error exception for + Unix.readlink on Windows. + (David Allsopp, report by Xia Li-yao) + +- #10807: Don't duplicate standard handles in the child process + spawned by win32unix Unix.create_process if the handles were already + inheritable. Fix broken signalling of EOF on standard handles if + they were already inheritable. + (Antonin Décimo, review by Xavier Leroy and Nicolás Ojeda Bär) + +- #10868: Fix off-by-1 bug when initializing frame hashtables + (Jonah Beckford, review by Tom Kelly, Nicolás Ojeda Bär and + KC Sivaramakrishnan) + +- #11077: Make dumpobj compatible with absence of naked pointer support + (Olivier Nicole and Jan Midtgaard, review by Gabriel Scherer) + +- #11111: fix fork() usage in ocamltest C code. + When calling fork() from C code with the Multicore runtime active, + one needs to call caml_atfork_hook() on the forked child before it + can use the OCaml runtime. + (Gabriel Scherer, review by Xavier Leroy, report by Brahima Dibassi) + +- #10809: Use the WSA_FLAG_NO_HANDLE_INHERIT on Windows when creating + sockets with WSASocket if the cloexec (non-inheritable) parameter is + true. Fixes a race condition where a child process could inherit the + socket and deadlock the parent. + (Antonin Décimo, review by Xavier Leroy) + +- #11289, #11405: fix some leaks on systhread termination + (Fabrice Buoro, Enguerrand Decorne, Gabriel Scherer, + review by Xavier Leroy and Florian Angeletti, report by Romain Beauxis) + +- #11314, #11416: fix non-informative error message for module inclusion + (Florian Angeletti, report by Thierry Martinez, review by Gabriel Scherer) + +- #11358, #11379: Refactor the initialization of bytecode threading, + This avoids a "dangling pointer" warning of GCC 12.1. + (Xavier Leroy, report by Armaël Guéneau, review by Gabriel Scherer) + +- #11387, module type with constraints no longer crash the compiler in presence + of both shadowing warnings and the `-bin-annot` compiler flag. + (Florian Angeletti, report by Christophe Raffalli, review by Gabriel Scherer) + +- #11482, #11542: Fix random crash in large closure allocation + (Damien Doligez, report by Thierry Martinez and Vincent Laviron, review by + Xavier Leroy) + +- #11508, #11509: make Bytes.escaped domain-safe + (Christiano Haesbaert and Gabriel Scherer, + review by Xavier Leroy, + report by Jan Midtgaard and Tom Kelly) + +- #11576: Fix bug in Bigarray.Genarray.init in the the case of zero-dimensional + arrays. + (Nicolás Ojeda Bär, Jeremy Yallop, report by Masayuki Takeda, review by Jeremy + Yallop and Florian Angeletti) + +- #11587: Prevent integer comparison from being used on pointers + (Vincent Laviron, review by Gabriel Scherer) + +- #11662, #11673: fix a memory leak when using Dynlink, + the bug was only present in development version of OCaml 5. + (Stephen Dolan, report by Andre Maroneze, review by Gabriel Scherer) + + +OCaml 4.14 maintenance version ------------------------------ +### Runtime system: + +- #11764, #12577: Add prototypes to old-style C function definitions + and declarations. + (Antonin Décimo, review by Xavier Leroy and Nick Barnes) + +- #11763, #11759, #11861, #12509, #12577: Use strict prototypes on primitives. + (Antonin Décimo, review by Xavier Leroy, David Allsopp, Sébastien + Hinderer and Nick Barnes) + +### Build system: + +- #11590: Allow installing to a destination path containing spaces. + (Élie Brami, review by Sébastien Hinderer and David Allsopp) + +- #12372: Pass option -no-execute-only to the linker for OpenBSD >= 7.3 + so that code sections remain readable, as needed for closure marshaling. + (Xavier Leroy and Anil Madhavapeddy, review by Anil Madhavapeddy and + Sébastien Hinderer) + +- #12903: Disable control flow integrity on OpenBSD >= 7.4 to avoid + illegal instruction errors on certain CPUs. + (Michael Hendricks, review by Miod Vallat) + ### Bug fixes: -- #11803, #11808: on x86, the destination of an integer comparison must be - a register, it cannot be a stack slot. - (Vincent Laviron, review by Xavier Leroy, report by - Emilio Jesús Gallego Arias) +- #12878: fix incorrect treatment of injectivity for private recursive types. + (Jeremy Yallop, review by Gabriel Scherer and Jacques Garrigue) +- #12971, #12974: fix an uncaught Ctype.Escape exception on some + invalid programs forming recursive types. + (Gabriel Scherer, review by Florian Angeletti, report by Neven Villani) -OCaml 4.14.1 ------------------------------ +- #12264, #12289: Fix compact_allocate to avoid a pathological case + that causes very slow compaction. + (Damien Doligez, report by Arseniy Alekseyev, review by Sadiq Jaffer) + +* #10845 Emit frametable size on amd64 BSD (OpenBSD, FreeBSD, NetBSD) systems + (emitted for Linux in #8805) + (Hannes Mehnert, review by Nicolás Ojeda Bär) + + +OCaml 4.14.1 (20 December 2022) +------------------------------ ### Compiler user-interface and warnings: @@ -43,17 +2445,6 @@ OCaml 4.14.1 (David Allsopp and Nicolás Ojeda Bär, review by Nicolás Ojeda Bär and Sébastien Hinderer) -- #11314, #11416: fix non-informative error message for module inclusion - (Florian Angeletti, report by Thierry Martinez, review by Gabriel Scherer) - -- #11358, #11379: Refactor the initialization of bytecode threading, - This avoids a "dangling pointer" warning of GCC 12.1. - (Xavier Leroy, report by Armaël Guéneau, review by Gabriel Scherer) - -- #11387, module type with constraints no longer crash the compiler in presence - of both shadowing warnings and the `-bin-annot` compiler flag. - (Florian Angeletti, report by Christophe Raffalli, review by Gabriel Scherer) - - #11392, #11392: assertion failure with -rectypes and external definitions (Gabriel Scherer, review by Florian Angeletti, report by Dmitrii Kosarev) @@ -91,109 +2482,70 @@ OCaml 4.14.1 - #11533, #11534: follow synonyms again in #show_module_type (this had stopped working in 4.14.0) - (Gabriel Scherer, review by Jacques Garrigue, report by Yaron Minsky) + (Gabriel Scherer, review by Jacques Garrigue and Florian Angeletti, + report by Yaron Minsky) - #11768, #11788: Fix crash at start-up of bytecode programs in no-naked-pointers mode caused by wrong initialization of caml_global_data (Xavier Leroy, report by Etienne Millon, review by Gabriel Scherer) +- #11803, #11808: on x86, the destination of an integer comparison must be + a register, it cannot be a stack slot. + (Vincent Laviron, review by Xavier Leroy, report by + Emilio Jesús Gallego Arias) OCaml 4.14.0 (28 March 2022) ---------------------------- -### Language features (highlights): - -- #10437: Allow explicit binders for type variables. - (Stephen Dolan, review by Leo White) - -- #181, #9760, #10740: opt-in tail-modulo-cons (TMC) transformation - let[@tail_mod_cons] rec map f li = ... - (Frédéric Bour, Gabriel Scherer, Basile Clément, - review by Basile Clément and Pierre Chambart, - tested by Konstantin Romanov) - -### Runtime system (highlights): - -- #10195, #10680: Speed up GC by prefetching during marking - (Stephen Dolan, review by Xavier Leroy, Guillaume Munch-Maccagnoni, - Jacques-Henri Jourdan, Damien Doligez and Leo White) - -### Code generation and optimizations (highlights): - -- #10595: Tail calls with up to 64 arguments are guaranteed to be compiled - as tail calls. To this end, memory locations in the domain state - are used for passing arguments that do not fit in registers. - (Xavier Leroy, review by Vincent Laviron) - -### Standard library (highlights): - -* #10710: Add UTF tools, codecs and validations to the Uchar, Bytes and - String modules. - (Daniel Bünzli, review by Florian Angeletti, Nicolás Ojeda Bär, Alain - Frisch and Gabriel Scherer) - -* #10482: mark the Stream and Genlex modules as deprecated, in preparation - for a future removal. These modules (without deprecation alert) - are now provided by the camlp-streams library. - (Xavier Leroy, review by Nicolás Ojeda Bär) - -- #10545: Add In_channel and Out_channel modules. - (Nicolás Ojeda Bär, review by Daniel Bünzli, Simon Cruanes, Gabriel Scherer, - Guillaume Munch-Maccagnoni, Alain Frisch and Xavier Leroy) - -### Compiler user-interface and warnings (highlights) - -- #10328, #10780: Give more precise error when disambiguation could not - possibly work. - (Leo White, review by Gabriel Scherer and Florian Angeletti) - -- #10361: Improve error messages for mismatched record and variant - definitions. - (Florian Angeletti, review by Gabriel Radanne and Gabriel Scherer) - -- #10407: Produce more detailed error messages that contain full error traces - when module inclusion fails. - (Antal Spector-Zabusky, review by Florian Angeletti) - -### Internal/compiler-libs changes (highlights): - -- #10718, #11012: Add "Shape" information to the cmt files. Shapes are an - abstraction of modules that can be used by external tooling to perform - definition-aware operations. - (Ulysse Gérard, Thomas Refis and Leo White, review by Florian Angeletti) - ### Language features: - #10462: Add attribute to produce a compiler error for polls. (Sadiq Jaffer, review by Mark Shinwell, Stephen Dolan and Guillaume Munch-Maccagnoni) +- #10437: Allow explicit binders for type variables. + (Stephen Dolan, review by Leo White) + - #10441: Remove unnecessary parentheses surrounding immediate objects. Allow 'object ... end # f', 'f object ... end', etc. (Yan Dong, review by Nicolás Ojeda Bär, Florian Angeletti and Gabriel Scherer) +- #181, #9760, #10740: opt-in tail-modulo-cons (TMC) transformation + let[@tail_mod_cons] rec map f li = ... + (Frédéric Bour, Gabriel Scherer, Basile Clément, + review by Basile Clément and Pierre Chambart, + tested by Konstantin Romanov) + ### Runtime system: * #9391, #9424: Fix failed assertion in runtime due to ephemerons *set_* and *blit_* function during Mark phase (François Bobot, reported by Stephen Dolan, reviewed by Damien Doligez) +- #10195, #10680: Speed up GC by prefetching during marking + (Stephen Dolan, review by Xavier Leroy, Guillaume Munch-Maccagnoni, + Jacques-Henri Jourdan, Damien Doligez and Leo White) + - #10549: Stack overflow detection and naked pointers checking for ARM64 (Xavier Leroy, review by Stephen Dolan) -* #10675, #10937: Emit deprecation warnings when old C runtime function names +* #10675: Emit deprecation warnings when old C runtime function names are used. This will break C stub code that uses these old names and treats warnings as errors. The workaround is to use the new names. (Xavier Leroy and David Allsopp, review by Sébastien Hinderer and Damien Doligez) -- #10698, #10726, #10891: Free the alternate signal stack when the main OCaml +- #10698, #10726: Free the alternate signal stack when the main OCaml code or an OCaml thread stops (Xavier Leroy, review by David Allsopp and Damien Doligez) - #10730, 10731: Fix bug in `Obj.reachable_words` causing a slowdown when called multiple time (Alain Frisch, report by ygrek, review by Xavier Leroy) +- #10926: Rename the two internal Windows Unicode functions with `caml_` prefix + instead of `win_`. + (David Allsopp, review by Kate Deplaix, Damien Doligez and Xavier Leroy) + ### Code generation and optimizations: - #10578: Increase the number of integer registers used for @@ -205,6 +2557,11 @@ OCaml 4.14.0 (28 March 2022) and long register allocation times. (Xavier Leroy, report by Edwin Török, review by Nicolás Ojeda Bär) +- #10595: Tail calls with up to 64 arguments are guaranteed to be compiled + as tail calls. To this end, memory locations in the domain state + are used for passing arguments that do not fit in registers. + (Xavier Leroy, review by Vincent Laviron) + - #10681: Enforce boolean conditions for the native backend (Vincent Laviron, review by Gabriel Scherer) @@ -219,6 +2576,11 @@ OCaml 4.14.0 (28 March 2022) ### Standard library: +* #10710: Add UTF tools, codecs and validations to the Uchar, Bytes and + String modules. + (Daniel Bünzli, review by Florian Angeletti, Nicolás Ojeda Bär, Alain + Frisch and Gabriel Scherer) + * #10622: Annotate `Uchar.t` with immediate attribute (Hongbo Zhang, reivew by Gabriel Scherer and Nicolás Ojeda Bär) @@ -226,6 +2588,11 @@ OCaml 4.14.0 (28 March 2022) is actually a suffix of `name` and raises Invalid_argument otherwise. (Xavier Leroy, report by whitequark, review by David Allsopp) +* #10482: mark the Stream and Genlex modules as deprecated, in preparation + for a future removal. These modules (without deprecation alert) + are now provided by the camlp-streams library. + (Xavier Leroy, review by Nicolás Ojeda Bär) + - #10526: add Random.bits32, Random.bits64, Random.nativebits (Xavier Leroy, review by Gabriel Scherer and François Bobot) @@ -234,6 +2601,10 @@ OCaml 4.14.0 (28 March 2022) by the functions from module Marshal) (François Pottier, review by Gabriel Scherer and Kate Deplaix) +- #10545: Add In_channel and Out_channel modules. + (Nicolás Ojeda Bär, review by Daniel Bünzli, Simon Cruanes, Gabriel Scherer, + Guillaume Munch-Maccagnoni, Alain Frisch and Xavier Leroy) + - #10538: add Out_channel.set_buffered and Out_channel.is_buffered to control the buffering mode of output channels. (Nicolás Ojeda Bär, review by John Whitington, Daniel Bünzli, David Allsopp @@ -241,7 +2612,7 @@ OCaml 4.14.0 (28 March 2022) * #10583, #10998: Add over 40 new functions in Seq. (François Pottier and Simon Cruanes, review by Nicolás Ojeda Bär, - Daniel Bünzli, Naëla Courant, Craig Ferguson, Wiktor Kuchta, + Daniel Bünzli, Nathanaëlle Courant, Craig Ferguson, Wiktor Kuchta, Xavier Leroy, Guillaume Munch-Maccagnoni, Raphaël Proust, Gabriel Scherer and Thierry Martinez) @@ -265,8 +2636,8 @@ OCaml 4.14.0 (28 March 2022) OCaml. (Damien Doligez, review by Stephen Dolan) -* #10922: Add deprecation warnings on {Int32,Int64,Nativeint}.format. - (Nicolás Ojeda Bär, review by Xavier Leroy and Florian Angeletti) +- #10786: The implementation of Complex.norm now uses Float.hypot. + (Christophe Troestler, review by David Allsopp and Xavier Leroy) ### Other libraries: @@ -282,13 +2653,22 @@ OCaml 4.14.0 (28 March 2022) WSADuplicateSocket on sockets instead of DuplicateHandle. (Antonin Décimo, review by Xavier Leroy and Nicolás Ojeda Bär) +* #10926, #11336: Ensure all C functions in the Unix library are prefixed with + `caml_`. + (David Allsopp, review by Kate Deplaix, Damien Doligez and Xavier Leroy) + - #10951: Introduce the Thread.Exit exception as an alternative way to terminate threads prematurely. This alternative way will become - the standard way in 5.00. + the standard way in 5.0. (Xavier Leroy, review by Florian Angeletti) ### Tools: +- #9701: Release bytecode only after collecting backtrace information + for exceptions, same for dynamic loaded code compiled from toplevel on + ocamlnat. + (Renato Alencar, reported by Krzysztof Leśniak, reviewed by Gabriel Scherer) + - #10839: Fix regression of #show when printing class type (Élie Brami, review by Florian Angeletti) @@ -344,7 +2724,7 @@ OCaml 4.14.0 (28 March 2022) (Dong An, review by Xavier Leroy and David Allsopp) - #10397: Document exceptions raised by Unix module functions on Windows - (Martin Jambon, review by Daniel Bünzli, David Alsopp, Damien Doligez, + (Martin Jambon, review by Daniel Bünzli, David Allsopp, Damien Doligez, Xavier Leroy, and Florian Angeletti) - #10589: Fix many typos (excess/inconsistent spaces) in the HTML manual. @@ -372,6 +2752,18 @@ OCaml 4.14.0 (28 March 2022) ### Compiler user-interface and warnings: +- #10328, #10780: Give more precise error when disambiguation could not + possibly work. + (Leo White, review by Gabriel Scherer and Florian Angeletti) + +- #10361: Improve error messages for mismatched record and variant + definitions. + (Florian Angeletti, review by Gabriel Radanne and Gabriel Scherer) + +- #10407: Produce more detailed error messages that contain full error traces + when module inclusion fails. + (Antal Spector-Zabusky, review by Florian Angeletti) + - #10531: add naked_pointers to ocamlc -config exporting NAKED_POINTERS from Makefile.config. (Damien Doligez, review by Mark Shinwell and Gabriel Scherer) @@ -495,15 +2887,17 @@ OCaml 4.14.0 (28 March 2022) (David Allsopp and Nathan Rebours, review by Louis Gesbert, Nicolás Ojeda Bär and Gabriel Scherer) +- #10718, #11012: Add "Shape" information to the cmt files. Shapes are an + abstraction of modules that can be used by external tooling to perform + definition-aware operations. + (Ulysse Gérard, Thomas Refis and Leo White, review by Florian Angeletti) + - #10742: strong call-by-need reduction for shapes (Gabriel Scherer and Nathanaëlle Courant, review by Florian Angeletti, Ulysse Gérard and Thomas Refis) ### Build system: -- #10828 Build native-code compilers on OpenBSD/aarch64 - (Christopher Zimmermann) - - #10835 Disable DT_TEXTREL warnings on x86 32 bit architecture by passing -Wl,-z,notext in mksharedlib and mkmaindll. Fixes relocation issues, reported in #9800, making local patches in Debian, Alpine, and FreeBSD superfluous. @@ -528,6 +2922,9 @@ OCaml 4.14.0 (28 March 2022) (Xavier Leroy, report by Rehan Malak, review by Gabriel Scherer and Vincent Laviron) +- #10364: Improve detection of ambiguity in case bodies. + (Jacques Garrigue, review by Thomas Refis) + - #10473: Add CFI directives to RISC-V runtime and asmcomp. This allows stacktraces to work in gdb through C and OCaml calls. (Edwin Török, review by Nicolás Ojeda Bär and Xavier Leroy) @@ -717,7 +3114,7 @@ OCaml 4.13.0 (24 September 2021) A mostly-internal change that preserves more information in errors during type checking; most significantly, it split the errors from unification, moregen, and type equality into three different types. - (Antal Spector-Zabusky and Mekhrubon Tuarev, review by Leo White, + (Antal Spector-Zabusky and Mekhrubon Turaev, review by Leo White, Florian Angeletti, and Jacques Garrigue) - #9994: Make Types.type_expr a private type, and abstract marking mechanism @@ -819,7 +3216,7 @@ OCaml 4.13.0 (24 September 2021) - #1400: Add an optional invariants check on Cmm, which can be activated with the -dcmm-invariants flag - (Vincent Laviron, with help from Sebastien Hinderer, review by Stephen Dolan + (Vincent Laviron, with help from Sébastien Hinderer, review by Stephen Dolan and David Allsopp) - #9562, #367: Allow CSE of immutable loads across stores @@ -855,7 +3252,7 @@ OCaml 4.13.0 (24 September 2021) - #9487, #9489: Add Random.full_int which allows 62-bit bounds on 64-bit systems. - (David Allsopp, request by Francois Berenger, review by Xavier Leroy and + (David Allsopp, request by François Berenger, review by Xavier Leroy and Damien Doligez) - #9961: Add Array.fold_left_map. @@ -1007,7 +3404,7 @@ OCaml 4.13.0 (24 September 2021) (Gabriel Scherer, review by Thomas Refis and Florian Angeletti) - #9827: Replace references with functions arguments in Simplif - (Anukriti Kumar, review by Vincent Laviron and David Allsop) + (Anukriti Kumar, review by Vincent Laviron and David Allsopp) - #10007: Driver.compile_common: when typing a .ml file, return the compilation unit signature (inferred or from the .cmi) in addition @@ -1164,8 +3561,8 @@ OCaml 4.13.0 (24 September 2021) when the systhreads library is loaded. (David Allsopp, report by Anton Bachin, review by Xavier Leroy) -- #8575, #10362: Surprising interaction between polymorphic variants and - constructor disambiguation. +- #8575, #10362: Surprising interaction between polymorphic variants + and constructor disambiguation. (Jacques Garrigue, report and review by Thomas Refis) - #8917, #8929, #9889, #10219: fix printing of nested recursive definitions @@ -1233,7 +3630,7 @@ OCaml 4.13.0 (24 September 2021) (Xavier Leroy, report by Richard Bornat, review by Stephen Dolan and Mark Shinwell) -- #10371: no longer generatd useless `.cds` file when using +- #10371: Stop generating useless `.cds` file when using `-output-complete-exe`. (Nicolás Ojeda Bär, review by David Allsopp) @@ -1382,8 +3779,8 @@ OCaml 4.12.0 (24 February 2021) I/O locks are not held while it runs. A polling point was removed from caml_leave_blocking_section, and one added to caml_raise. (Stephen Dolan, review by Goswin von Brederlow, Xavier Leroy, Damien - Doligez, Anil Madhavapeddy, Guillaume Munch-Maccagnoni and Jacques- - Henri Jourdan) + Doligez, Anil Madhavapeddy, Guillaume Munch-Maccagnoni + and Jacques-Henri Jourdan) * #5154, #9569, #9734: Add `Val_none`, `Some_val`, `Is_none`, `Is_some`, `caml_alloc_some`, and `Tag_some`. As these macros are sometimes defined by @@ -1517,7 +3914,7 @@ OCaml 4.12.0 (24 February 2021) - #10050: update {PUSH,}OFFSETCLOSURE* bytecode instructions to match new representation for closures - (Nathanaël Courant, review by Xavier Leroy) + (Nathanaëlle Courant, review by Xavier Leroy) - #9728: Take advantage of the new closure representation to simplify the compaction algorithm and remove its dependence on the page table @@ -1816,7 +4213,7 @@ OCaml 4.12.0 (24 February 2021) report by Alex Fedoseev through Hongbo Zhang) - #9514: optimize pattern-matching exhaustivity analysis in the single-row case - (Gabriel Scherer, review by Stephen DOlan) + (Gabriel Scherer, review by Stephen Dolan) - #9442: refactor the implementation of the [@tailcall] attribute to allow for a structured attribute payload @@ -1849,7 +4246,7 @@ OCaml 4.12.0 (24 February 2021) not low (Chet Murthy, review by Florian Angeletti) - #9590: fix pprint of extension constructors (and exceptions) that rebind - (Chet Murthy, review by octachron@) + (Chet Murthy, review by Florian Angeletti) - #9963: Centralized tracking of frontend's global state (Frédéric Bour and Thomas Refis, review by Gabriel Scherer) @@ -1907,7 +4304,7 @@ OCaml 4.12.0 (24 February 2021) - #7902, #9556: Type-checker infers recursive type, even though -rectypes is off. - (Jacques Garrigue, report by Francois Pottier, review by Leo White) + (Jacques Garrigue, report by François Pottier, review by Leo White) - #8746: Hashtbl: Restore ongoing traversal status after filter_map_inplace (Mehdi Bouaziz, review by Alain Frisch) @@ -2313,7 +4710,7 @@ OCaml 4.11.0 (19 August 2020) (Glenn Slotte, review by Florian Angeletti) - #9410, #9422: replaced naive fibonacci example with gcd - (Anukriti Kumar, review by San Vu Ngoc, Florian Angeletti, Léo Andrès) + (Anukriti Kumar, review by San Vũ Ngọc, Florian Angeletti, Léo Andrès) - #9541: Add a documentation page for the instrumented runtime; additional changes to option names in the instrumented runtime. @@ -2411,7 +4808,7 @@ OCaml 4.11.0 (19 August 2020) Caml_inline to stop abuse of the inline keyword on MSVC and to help ensure that only static inline is used in the codebase (erroneous instance in runtime/win32.c removed). - (David Allsopp, review by Oliver Andrieu and Xavier Leroy) + (David Allsopp, review by Olivier Andrieu and Xavier Leroy) - #8934: Stop relying on location to track usage (Thomas Refis, review by Gabriel Radanne) @@ -2860,7 +5257,7 @@ OCaml 4.10.0 (21 February 2020) (Florian Angeletti, report by Anton Kochkov, review by Gabriel Scherer) - #9101: add links to section anchor before the section title, - make the name of those anchor explicits. + make the name of those anchor explicit. (Florian Angeletti, review by Daniel Bünzli, Sébastien Hinderer, and Gabriel Scherer) @@ -2944,7 +5341,7 @@ OCaml 4.10.0 (21 February 2020) locate an `.ocamlinit` file. Reads an `$XDG_CONFIG_HOME/ocaml/init.ml` file before trying to lookup `~/.ocamlinit`. On Windows the behaviour is unchanged. - (Daniel C. Bünzli, review by David Allsopp, Armaël Guéneau and + (Daniel Bünzli, review by David Allsopp, Armaël Guéneau and Nicolás Ojeda Bär) - #9113: ocamldoc: fix the rendering of multi-line code blocks @@ -2952,7 +5349,7 @@ OCaml 4.10.0 (21 February 2020) (Gabriel Scherer, review by Florian Angeletti) - #9127, #9130: ocamldoc: fix the formatting of closing brace in record types. - (David Allsopp, report by San Vu Ngoc) + (David Allsopp, report by San Vũ Ngọc) - #9181: make objinfo work on Cygwin and look for the caml_plugin_header symbol in both the static and the dynamic symbol tables. @@ -3259,7 +5656,7 @@ OCaml 4.09.0 (19 September 2019) - #2112: Fix Thread.yield unfairness with busy threads yielding to each other. (Andrew Hunter, review by Jacques-Henri Jourdan, Spiros Eliopoulos, Stephen - Weeks, & Mark Shinwell) + Weeks, Mark Shinwell) - #7903, #2306: Make Thread.delay interruptible by signals again (Xavier Leroy, review by Jacques-Henri Jourdan and Edwin Török) @@ -3721,7 +6118,7 @@ OCaml 4.08.0 (13 June 2019) ### Other libraries: - #2533, #1839, #1949: added Unix.fsync - (Francois Berenger, Nicolás Ojeda Bär, review by Daniel Bünzli, David Allsopp + (François Berenger, Nicolás Ojeda Bär, review by Daniel Bünzli, David Allsopp and ygrek) - #1792, #7794: Add Unix.open_process_args{,_in,_out,_full} similar to @@ -4497,7 +6894,7 @@ OCaml 4.07.0 (10 July 2018) - #7528, #1500: add a Format.pp_set_geometry function to avoid memory effects in set_margin and set_max_indent. (Florian Angeletti, review by Richard Bonichon, Gabriel Radanne, - Gabiel Scherer and Pierre Weis) + Gabriel Scherer and Pierre Weis) - #7690, #1528: fix the float_of_string function for hexadecimal floats with very large values of the exponent. @@ -4651,15 +7048,15 @@ OCaml 4.07.0 (10 July 2018) (Hugo Heuzard, reviewed by Nicolás Ojeda Bär) - #1627: Reduce cmx sizes by sharing variable names (Flambda only). - (Fuyong Quah, Leo White, review by Xavier Clerc) + (Fu Yong Quah, Leo White, review by Xavier Clerc) - #1665: reduce the size of cmx files in classic mode by dropping the bodies of functions that will not be inlined. - (Fuyong Quah, review by Leo White and Pierre Chambart) + (Fu Yong Quah, review by Leo White and Pierre Chambart) - #1666: reduce the size of cmx files in classic mode by dropping the bodies of functions that cannot be reached from the module block. - (Fuyong Quah, review by Leo White and Pierre Chambart) + (Fu Yong Quah, review by Leo White and Pierre Chambart) - #1686: Turn off by default flambda invariants checks. (Pierre Chambart) @@ -5495,7 +7892,7 @@ OCaml 4.06.0 (3 Nov 2017): - #1012: ocamlyacc, fix parsing of raw strings and nested comments, as well as the handling of ' characters in identifiers. - (Demi Obenour) + (Demi Marie Obenour) - #1045: ocamldep, add a "-shared" option to generate dependencies for native plugin files (i.e. .cmxs files) @@ -6015,7 +8412,7 @@ OCaml 4.05.0 (13 Jul 2017): - #7279, #710: `Weak.get_copy` `Ephemeron.*_copy` doesn't copy custom blocks anymore - (François Bobot, Alain Frisch, bug reported by Martin R. Neuhäußer, + (François Bobot, Alain Frisch, report by Martin R. Neuhäußer, review by Thomas Braibant and Damien Doligez) * #7500, #1081: Remove Uchar.dump @@ -6677,7 +9074,7 @@ OCaml 4.04.0 (4 Nov 2016): - #427: Obj.is_block is now an inlined OCaml function instead of a C external. This should be faster. - (Demi Obenour) + (Demi Marie Obenour) - #580: Optimize immutable float records (Pierre Chambart, review by Mark Shinwell) @@ -6819,7 +9216,7 @@ OCaml 4.04.0 (4 Nov 2016): * #512, #587: Installed `ocamlc`, `ocamlopt`, and `ocamllex` are now the native-code versions of the tools, if those versions were built. - (Demi Obenour) + (Demi Marie Obenour) - #525: fix build on OpenIndiana (Sergey Avseyev, review by Damien Doligez) @@ -7121,9 +9518,9 @@ OCaml 4.03.0 (25 Apr 2016): (Alain Frisch) - #6943: native-code generator for POWER/PowerPC 64 bits, both in - big-endian (ppc64) and little-endian (ppc64le) configuration. - (Xavier Leroy, with inspiration from RedHat's unofficial ppc64 and ppc64le - ports) + big-endian (ppc64) and little-endian (ppc64le) configuration, + inspired from RedHat's unofficial ppc64 and ppc64le ports + (Xavier Leroy) - #6979: better code generation in x86-32 backend for copying floats to the stack @@ -7241,7 +9638,7 @@ OCaml 4.03.0 (25 Apr 2016): settings that are currently the default: `-alias-deps`, `-app-funct`, `-no-keep-docs`, `-no-keep-locs`, `-no-principal`, `-no-rectypes`, `-no-strict-formats` - (Demi Obenour) + (Demi Marie Obenour) - #545: use reraise to preserve backtrace on `match .. with exception e -> raise e` @@ -7838,7 +10235,7 @@ OCaml 4.03.0 (25 Apr 2016): - #220: minor -dsource error on recursive modules (Hongbo Zhang) -- #228: fix a dangling internal pointer in (bytecode )debug_info +- #228: fix a dangling internal pointer in (bytecode) debug_info (Gabriel Scherer and Mark Shinwell and Xavier Leroy) - #233: Make CamlinternalMod.init_mod robust to optimization @@ -8190,7 +10587,7 @@ Bug fixes: (Jacques Garrigue, report by David Sheets) - #6768: Typechecker overflow the stack on cyclic type (Jacques Garrigue, report by user 'darktenaibre') -- #6770: (duplicate of #6686) +- #6770: duplicate of #6686 - #6772: asmrun/signals_asm.c doesn't compile on NetBSD/i386 (Kenji Tokudome) - #6775: Digest.file leaks file descriptor on error @@ -9137,7 +11534,6 @@ Tools: - #6030: Improve performance of -annot (Guillaume Melquiond, Alain Frisch) - OCaml 4.00.1 (5 Oct 2012): -------------------------- @@ -11649,7 +14045,7 @@ Objective Caml 2.00 (19 Aug 1998): - Check for overflow when generating the tables for the automaton. - Error messages in generated .ml file now point to .mll source. - Added "let = " to name regular expressions - (inspired by Christian Lindig's patch). + (inspired by Christian Lindig). * ocamlyacc: - Better error recovery in presence of EOF tokens. diff --git a/HACKING.adoc b/HACKING.adoc index a197adea..3860a3f0 100644 --- a/HACKING.adoc +++ b/HACKING.adoc @@ -27,7 +27,7 @@ not have this which causes some important development things to be disabled + ---- ./configure -make +make -j 4 ---- If you are on a release build and need development options, you can add `--enable-ocamltest` (to allow running the testsuite) and `--enable-warn-error` @@ -127,13 +127,28 @@ link:typing/HACKING.adoc[]. === Runtime system +The low-level routines that OCaml programs use during their execution: +garbage collection, interaction with the operating system +(IO in particular), low-level primitives to manipulate some OCaml data +structures, etc. Mostly implemented in C, with some rare bits of +assembly code in architecture-specific files. The "includes" +corresponding to the `.c` files are in the link:runtime/caml[] +subdirectory. + +Some files are only used by bytecode programs, some only used by +native-compiled programs, but most of the runtime code is +common. (See link:runtime/Makefile[] for the list of common, +bytecode-only and native-only source files.) + +See link:runtime/HACKING.adoc[]. + === Libraries link:stdlib/[]:: The standard library. Each file is largely independent and should not need further knowledge. link:otherlibs/[]:: External libraries such as `unix`, `threads`, -`dynlink`, `str` and `bigarray`. +`dynlink` and `str`. Instructions for building the full reference manual are provided in link:manual/README.md[]. However, if you only modify the documentation @@ -237,8 +252,7 @@ work locally) by pinning: ---- opam switch create my-switch-name --empty -# Replace $VERSION by the trunk version -opam pin add ocaml-variants.$VERSION+branch git+https://$REPO#branch +opam pin add ocaml-variants git+https://$REPO#branch ---- ==== Incremental builds with `opam` @@ -377,13 +391,15 @@ You can also run `make install` manually, which will not trigger a recompilation, but will not remove the previous version either and can mess with `opam`'s tracking of installed files. -=== Useful Makefile targets +=== Useful Makefile targets and options Besides the targets listed in link:INSTALL.adoc[] for build and installation, the following targets may be of use: `make runtop` :: builds and runs the ocaml toplevel of the distribution (optionally uses `rlwrap` for readline+history support) + (use `make runtop-with-otherlibs` if you need `Unix` or other + `otherlibs/` libraries) `make natruntop`:: builds and runs the native ocaml toplevel (experimental) `make partialclean`:: Clean the OCaml files but keep the compiled C files. @@ -392,6 +408,10 @@ installation, the following targets may be of use: `make -C testsuite parallel`:: see link:testsuite/HACKING.adoc[] +You can use `make foo V=1` to build the target foo and show full +commands instead of abbreviated names like OCAMLC, etc. This can be +useful to know the flags to use to manually rebuild a file. + Additionally, there are some developer specific targets in link:Makefile.dev[]. These targets are automatically available when working in a Git clone of the repository, but are not available from a tarball. @@ -534,7 +554,7 @@ machine, you can use the configuration values and run command taken from link:tools/ci/actions/runner.sh[]: ---- -XARCH=x64 bash -ex tools/ci/actions/runner.sh configure +bash -ex tools/ci/actions/runner.sh configure ---- The link:.github/workflows/hygiene.yml[] script supports other kinds of @@ -566,7 +586,7 @@ the following environment variables, which should be set in link:appveyor.yml[]: `world`, `opt`, `opt.opt` targets. The `C` build is a fast test used to build just enough of the tree to cover the C sources (it's used to test old MSVC compilers). -- `SDK`. Defaults to Visual Studio 2015. Specifies the exact command to run +- `SDK`. Defaults to Visual Studio 2022. Specifies the exact command to run to set-up the Microsoft build environment. - `CYGWIN_DIST`. Default: `64`. Either `64` or `32`, selects 32-bit or 64-bit Cygwin as the build environment. diff --git a/INSTALL.adoc b/INSTALL.adoc index 08d67ebb..ed29bf01 100644 --- a/INSTALL.adoc +++ b/INSTALL.adoc @@ -24,7 +24,7 @@ ** For Windows + To produce native Windows executables from OCaml sources, you need to use - the MSVC or Mingw-w64 ports of OCaml, described in file + the MSVC or MinGW-w64 ports of OCaml, described in file https://github.com/ocaml/ocaml/blob/trunk/README.win32.adoc[README.win32.adoc]. + For a more Unix-like experience, you can use WSL, the https://aka.ms/wsl[Windows Subsystem for Linux], or the @@ -38,6 +38,9 @@ * If you do not have write access to `/tmp`, you should set the environment variable `TMPDIR` to the name of some other temporary directory. +* The zstd library is used for compression of marshaled data. The option + `--without-zstd` may be passed to `configure` in order to disable it. + == Prerequisites (special cases) * Under Cygwin, the `gcc-core` package is required. `flexdll` is also necessary diff --git a/Makefile b/Makefile index 0e92785d..71d41cd2 100644 --- a/Makefile +++ b/Makefile @@ -16,41 +16,26 @@ # The main Makefile ROOTDIR = . -# NOTE: it is important that OCAMLLEX is defined *before* Makefile.common -# gets included, so that its definition here takes precedence -# over the one there. +# NOTE: it is important that the OCAMLDEP and OCAMLLEX variables +# are defined *before* Makefile.common gets included, so that +# their local definitions here take precedence over their +# general shared definitions in Makefile.common. OCAMLLEX ?= $(BOOT_OCAMLLEX) include Makefile.common +include Makefile.best_binaries .PHONY: defaultentry -ifeq "$(NATIVE_COMPILER)" "true" -defaultentry: world.opt -else -defaultentry: world -endif - -ifeq "$(UNIX_OR_WIN32)" "win32" -LN = cp -else -LN = ln -sf -endif +defaultentry: $(DEFAULT_BUILD_TARGET) include stdlib/StdlibModules -CAMLC=$(BOOT_OCAMLC) -g -nostdlib -I boot -use-prims runtime/primitives -CAMLOPT=$(OCAMLRUN) ./ocamlopt$(EXE) -g -nostdlib -I stdlib -I otherlibs/dynlink -ARCHES=amd64 i386 arm arm64 power s390x riscv -INCLUDES=-I utils -I parsing -I typing -I bytecomp -I file_formats \ - -I lambda -I middle_end -I middle_end/closure \ - -I middle_end/flambda -I middle_end/flambda/base_types \ - -I asmcomp \ - -I driver -I toplevel - -COMPFLAGS=-strict-sequence -principal -absname \ - -w +a-4-9-40-41-42-44-45-48-66-70 \ - -warn-error +a \ - -bin-annot -safe-string -strict-formats $(INCLUDES) -LINKFLAGS= +CAMLC = $(BOOT_OCAMLC) $(BOOT_STDLIBFLAGS) -use-prims runtime/primitives +CAMLOPT=$(OCAMLRUN) ./ocamlopt$(EXE) $(STDLIBFLAGS) -I otherlibs/dynlink +ARCHES=amd64 arm64 power s390x riscv +VPATH = utils parsing typing bytecomp file_formats lambda middle_end \ + middle_end/closure middle_end/flambda middle_end/flambda/base_types \ + asmcomp driver toplevel tools $(addprefix otherlibs/, $(ALL_OTHERLIBS)) +INCLUDES = $(addprefix -I ,$(VPATH)) ifeq "$(strip $(NATDYNLINKOPTS))" "" OCAML_NATDYNLINKOPTS= @@ -58,79 +43,572 @@ else OCAML_NATDYNLINKOPTS = -ccopt "$(NATDYNLINKOPTS)" endif -CAMLDEP=$(OCAMLRUN) boot/ocamlc -depend -DEPFLAGS=-slash -DEPINCLUDES=$(INCLUDES) +OC_OCAMLDEPDIRS = $(VPATH) -OCAMLDOC_OPT=$(WITH_OCAMLDOC:=.opt) -OCAMLTEST_OPT=$(WITH_OCAMLTEST:=.opt) +# This list is passed to expunge, which accepts both uncapitalized and +# capitalized module names. +PERVASIVES=$(STDLIB_MODULES) outcometree topprinters topdirs toploop -BYTESTART=driver/main.cmo +LIBFILES=stdlib.cma std_exit.cmo *.cmi $(HEADER_NAME) -OPTSTART=driver/optmain.cmo +COMPLIBDIR=$(LIBDIR)/compiler-libs -TOPLEVELSTART=toplevel/topstart.cmo +TOPINCLUDES=$(addprefix -I otherlibs/,$(filter-out %threads,$(OTHERLIBRARIES))) -TOPLEVELINIT=toplevel/toploop.cmo +expunge := expunge$(EXE) -# This list is passed to expunge, which accepts both uncapitalized and -# capitalized module names. -PERVASIVES=$(STDLIB_MODULES) outcometree topdirs toploop +# Targets and dependencies for the compilerlibs/*.{cma,cmxa} archives + +utils_SOURCES = $(addprefix utils/, \ + config.mli config.ml \ + build_path_prefix_map.mli build_path_prefix_map.ml \ + misc.mli misc.ml \ + identifiable.mli identifiable.ml \ + numbers.mli numbers.ml \ + arg_helper.mli arg_helper.ml \ + local_store.mli local_store.ml \ + load_path.mli load_path.ml \ + clflags.mli clflags.ml \ + profile.mli profile.ml \ + terminfo.mli terminfo.ml \ + ccomp.mli ccomp.ml \ + warnings.mli warnings.ml \ + consistbl.mli consistbl.ml \ + strongly_connected_components.mli strongly_connected_components.ml \ + targetint.mli targetint.ml \ + int_replace_polymorphic_compare.mli int_replace_polymorphic_compare.ml \ + domainstate.mli domainstate.ml \ + binutils.mli binutils.ml \ + lazy_backtrack.mli lazy_backtrack.ml \ + diffing.mli diffing.ml \ + diffing_with_keys.mli diffing_with_keys.ml \ + compression.mli compression.ml) + +parsing_SOURCES = $(addprefix parsing/, \ + location.mli location.ml \ + unit_info.mli unit_info.ml \ + asttypes.mli \ + longident.mli longident.ml \ + parsetree.mli \ + docstrings.mli docstrings.ml \ + syntaxerr.mli syntaxerr.ml \ + ast_helper.mli ast_helper.ml \ + ast_iterator.mli ast_iterator.ml \ + builtin_attributes.mli builtin_attributes.ml \ + camlinternalMenhirLib.mli camlinternalMenhirLib.ml \ + parser.mly \ + lexer.mll \ + pprintast.mli pprintast.ml \ + parse.mli parse.ml \ + printast.mli printast.ml \ + ast_mapper.mli ast_mapper.ml \ + attr_helper.mli attr_helper.ml \ + ast_invariants.mli ast_invariants.ml \ + depend.mli depend.ml) + +typing_SOURCES = \ + typing/annot.mli \ + typing/value_rec_types.mli \ + typing/ident.mli typing/ident.ml \ + typing/path.mli typing/path.ml \ + typing/primitive.mli typing/primitive.ml \ + typing/type_immediacy.mli typing/type_immediacy.ml \ + typing/outcometree.mli \ + typing/shape.mli typing/shape.ml \ + typing/types.mli typing/types.ml \ + typing/btype.mli typing/btype.ml \ + typing/oprint.mli typing/oprint.ml \ + typing/subst.mli typing/subst.ml \ + typing/predef.mli typing/predef.ml \ + typing/datarepr.mli typing/datarepr.ml \ + file_formats/cmi_format.mli file_formats/cmi_format.ml \ + typing/persistent_env.mli typing/persistent_env.ml \ + typing/env.mli typing/env.ml \ + typing/errortrace.mli typing/errortrace.ml \ + typing/typedtree.mli typing/typedtree.ml \ + typing/signature_group.mli typing/signature_group.ml \ + typing/printtyped.mli typing/printtyped.ml \ + typing/ctype.mli typing/ctype.ml \ + typing/printtyp.mli typing/printtyp.ml \ + typing/includeclass.mli typing/includeclass.ml \ + typing/mtype.mli typing/mtype.ml \ + typing/envaux.mli typing/envaux.ml \ + typing/includecore.mli typing/includecore.ml \ + typing/tast_iterator.mli typing/tast_iterator.ml \ + typing/tast_mapper.mli typing/tast_mapper.ml \ + typing/stypes.mli typing/stypes.ml \ + typing/shape_reduce.mli typing/shape_reduce.ml \ + file_formats/cmt_format.mli file_formats/cmt_format.ml \ + typing/cmt2annot.mli typing/cmt2annot.ml \ + typing/untypeast.mli typing/untypeast.ml \ + typing/includemod.mli typing/includemod.ml \ + typing/includemod_errorprinter.mli typing/includemod_errorprinter.ml \ + typing/typetexp.mli typing/typetexp.ml \ + typing/printpat.mli typing/printpat.ml \ + typing/patterns.mli typing/patterns.ml \ + typing/parmatch.mli typing/parmatch.ml \ + typing/typedecl_properties.mli typing/typedecl_properties.ml \ + typing/typedecl_variance.mli typing/typedecl_variance.ml \ + typing/typedecl_unboxed.mli typing/typedecl_unboxed.ml \ + typing/typedecl_immediacy.mli typing/typedecl_immediacy.ml \ + typing/typedecl_separability.mli typing/typedecl_separability.ml \ + typing/typeopt.mli typing/typeopt.ml \ + typing/typedecl.mli typing/typedecl.ml \ + typing/value_rec_check.mli typing/value_rec_check.ml \ + typing/typecore.mli typing/typecore.ml \ + typing/typeclass.mli typing/typeclass.ml \ + typing/typemod.mli typing/typemod.ml + +lambda_SOURCES = $(addprefix lambda/, \ + debuginfo.mli debuginfo.ml \ + lambda.mli lambda.ml \ + printlambda.mli printlambda.ml \ + switch.mli switch.ml \ + matching.mli matching.ml \ + value_rec_compiler.mli value_rec_compiler.ml \ + translobj.mli translobj.ml \ + translattribute.mli translattribute.ml \ + translprim.mli translprim.ml \ + translcore.mli translcore.ml \ + translclass.mli translclass.ml \ + translmod.mli translmod.ml \ + tmc.mli tmc.ml \ + simplif.mli simplif.ml \ + runtimedef.mli runtimedef.ml) + +comp_SOURCES = \ + file_formats/cmo_format.mli \ + file_formats/cmx_format.mli \ + file_formats/cmxs_format.mli \ + bytecomp/meta.mli bytecomp/meta.ml \ + bytecomp/opcodes.mli bytecomp/opcodes.ml \ + bytecomp/bytesections.mli bytecomp/bytesections.ml \ + bytecomp/dll.mli bytecomp/dll.ml \ + bytecomp/symtable.mli bytecomp/symtable.ml \ + driver/pparse.mli driver/pparse.ml \ + driver/compenv.mli driver/compenv.ml \ + driver/main_args.mli driver/main_args.ml \ + driver/compmisc.mli driver/compmisc.ml \ + driver/makedepend.mli driver/makedepend.ml \ + driver/compile_common.mli driver/compile_common.ml +# All file format descriptions (including cmx{,s}) are in the +# ocamlcommon library so that ocamlobjinfo can depend on them. + +ocamlcommon_SOURCES = \ + $(utils_SOURCES) $(parsing_SOURCES) $(typing_SOURCES) \ + $(lambda_SOURCES) $(comp_SOURCES) + +ocamlbytecomp_SOURCES = \ + bytecomp/instruct.mli bytecomp/instruct.ml \ + bytecomp/bytegen.mli bytecomp/bytegen.ml \ + bytecomp/printinstr.mli bytecomp/printinstr.ml \ + bytecomp/emitcode.mli bytecomp/emitcode.ml \ + bytecomp/bytelink.mli bytecomp/bytelink.ml \ + bytecomp/bytelibrarian.mli bytecomp/bytelibrarian.ml \ + bytecomp/bytepackager.mli bytecomp/bytepackager.ml \ + driver/errors.mli driver/errors.ml \ + driver/compile.mli driver/compile.ml \ + driver/maindriver.mli driver/maindriver.ml + +intel_SOURCES = \ + x86_ast.mli \ + x86_proc.mli x86_proc.ml \ + x86_dsl.mli x86_dsl.ml \ + x86_gas.mli x86_gas.ml \ + x86_masm.mli x86_masm.ml + +asmcomp_SOURCES = \ + $(addprefix asmcomp/, $(arch_specific_SOURCES)) \ + asmcomp/arch.mli asmcomp/arch.ml \ + asmcomp/cmm.mli asmcomp/cmm.ml \ + asmcomp/printcmm.mli asmcomp/printcmm.ml \ + asmcomp/reg.mli asmcomp/reg.ml \ + asmcomp/mach.mli asmcomp/mach.ml \ + asmcomp/proc.mli asmcomp/proc.ml \ + asmcomp/strmatch.mli asmcomp/strmatch.ml \ + asmcomp/cmmgen_state.mli asmcomp/cmmgen_state.ml \ + asmcomp/cmm_helpers.mli asmcomp/cmm_helpers.ml \ + asmcomp/afl_instrument.mli asmcomp/afl_instrument.ml \ + asmcomp/thread_sanitizer.mli asmcomp/thread_sanitizer.ml \ + asmcomp/cmmgen.mli asmcomp/cmmgen.ml \ + asmcomp/cmm_invariants.mli asmcomp/cmm_invariants.ml \ + asmcomp/interval.mli asmcomp/interval.ml \ + asmcomp/printmach.mli asmcomp/printmach.ml \ + asmcomp/dataflow.mli asmcomp/dataflow.ml \ + asmcomp/polling.mli asmcomp/polling.ml \ + asmcomp/selectgen.mli asmcomp/selectgen.ml \ + asmcomp/selection.mli asmcomp/selection.ml \ + asmcomp/comballoc.mli asmcomp/comballoc.ml \ + asmcomp/CSEgen.mli asmcomp/CSEgen.ml \ + asmcomp/CSE.mli asmcomp/CSE.ml \ + asmcomp/liveness.mli asmcomp/liveness.ml \ + asmcomp/spill.mli asmcomp/spill.ml \ + asmcomp/split.mli asmcomp/split.ml \ + asmcomp/interf.mli asmcomp/interf.ml \ + asmcomp/coloring.mli asmcomp/coloring.ml \ + asmcomp/linscan.mli asmcomp/linscan.ml \ + asmcomp/reloadgen.mli asmcomp/reloadgen.ml \ + asmcomp/reload.mli asmcomp/reload.ml \ + asmcomp/deadcode.mli asmcomp/deadcode.ml \ + asmcomp/stackframegen.mli asmcomp/stackframegen.ml \ + asmcomp/stackframe.mli asmcomp/stackframe.ml \ + asmcomp/linear.mli asmcomp/linear.ml \ + asmcomp/printlinear.mli asmcomp/printlinear.ml \ + asmcomp/linearize.mli asmcomp/linearize.ml \ + file_formats/linear_format.mli file_formats/linear_format.ml \ + asmcomp/schedgen.mli asmcomp/schedgen.ml \ + asmcomp/scheduling.mli asmcomp/scheduling.ml \ + asmcomp/branch_relaxation.mli asmcomp/branch_relaxation.ml \ + asmcomp/emitaux.mli asmcomp/emitaux.ml \ + asmcomp/emit.mli asmcomp/emit.ml \ + asmcomp/asmgen.mli asmcomp/asmgen.ml \ + asmcomp/asmlink.mli asmcomp/asmlink.ml \ + asmcomp/asmlibrarian.mli asmcomp/asmlibrarian.ml \ + asmcomp/asmpackager.mli asmcomp/asmpackager.ml \ + driver/opterrors.mli driver/opterrors.ml \ + driver/optcompile.mli driver/optcompile.ml \ + driver/optmaindriver.mli driver/optmaindriver.ml + +# Files under middle_end/ are not to reference files under asmcomp/. +# This ensures that the middle end can be linked (e.g. for objinfo) even when +# the native code compiler is not present for some particular target. + +middle_end_closure_SOURCES = $(addprefix middle_end/closure/, \ + closure.mli closure.ml \ + closure_middle_end.mli closure_middle_end.ml) + +# Owing to dependencies through [Compilenv], which would be +# difficult to remove, some of the lower parts of Flambda (anything that is +# saved in a .cmx file) have to be included in the [MIDDLE_END] stanza, below. +middle_end_flambda_SOURCES = \ +$(addprefix middle_end/flambda/, \ + import_approx.mli import_approx.ml \ + lift_code.mli lift_code.ml \ + closure_conversion_aux.mli closure_conversion_aux.ml \ + closure_conversion.mli closure_conversion.ml \ + initialize_symbol_to_let_symbol.mli initialize_symbol_to_let_symbol.ml \ + lift_let_to_initialize_symbol.mli lift_let_to_initialize_symbol.ml \ + find_recursive_functions.mli find_recursive_functions.ml \ + invariant_params.mli invariant_params.ml \ + inconstant_idents.mli inconstant_idents.ml \ + alias_analysis.mli alias_analysis.ml \ + lift_constants.mli lift_constants.ml \ + share_constants.mli share_constants.ml \ + simplify_common.mli simplify_common.ml \ + remove_unused_arguments.mli remove_unused_arguments.ml \ + remove_unused_closure_vars.mli remove_unused_closure_vars.ml \ + remove_unused_program_constructs.mli remove_unused_program_constructs.ml \ + simplify_boxed_integer_ops.mli simplify_boxed_integer_ops.ml \ + simplify_primitives.mli simplify_primitives.ml \ + inlining_stats_types.mli inlining_stats_types.ml \ + inlining_stats.mli inlining_stats.ml \ + inline_and_simplify_aux.mli inline_and_simplify_aux.ml \ + inlining_decision_intf.mli \ + remove_free_vars_equal_to_args.mli remove_free_vars_equal_to_args.ml \ + extract_projections.mli extract_projections.ml \ + augment_specialised_args.mli augment_specialised_args.ml \ + unbox_free_vars_of_closures.mli unbox_free_vars_of_closures.ml \ + unbox_specialised_args.mli unbox_specialised_args.ml \ + unbox_closures.mli unbox_closures.ml \ + inlining_transforms.mli inlining_transforms.ml \ + inlining_decision.mli inlining_decision.ml \ + inline_and_simplify.mli inline_and_simplify.ml \ + ref_to_variables.mli ref_to_variables.ml \ + flambda_invariants.mli flambda_invariants.ml \ + traverse_for_exported_symbols.mli traverse_for_exported_symbols.ml \ + build_export_info.mli build_export_info.ml \ + closure_offsets.mli closure_offsets.ml \ + un_anf.mli un_anf.ml \ + flambda_to_clambda.mli flambda_to_clambda.ml \ + flambda_middle_end.mli flambda_middle_end.ml \ + simplify_boxed_integer_ops_intf.mli) + +ocamlmiddleend_SOURCES = \ +$(addprefix middle_end/, \ + internal_variable_names.mli internal_variable_names.ml \ + linkage_name.mli linkage_name.ml \ + compilation_unit.mli compilation_unit.ml \ + variable.mli variable.ml \ + $(addprefix flambda/base_types/, \ + closure_element.mli closure_element.ml \ + closure_id.mli closure_id.ml) \ + symbol.mli symbol.ml \ + backend_var.mli backend_var.ml \ + clambda_primitives.mli clambda_primitives.ml \ + printclambda_primitives.mli printclambda_primitives.ml \ + clambda.mli clambda.ml \ + printclambda.mli printclambda.ml \ + semantics_of_primitives.mli semantics_of_primitives.ml \ + convert_primitives.mli convert_primitives.ml \ + $(addprefix flambda/, \ + $(addprefix base_types/, \ + id_types.mli id_types.ml \ + export_id.mli export_id.ml \ + tag.mli tag.ml \ + mutable_variable.mli mutable_variable.ml \ + set_of_closures_id.mli set_of_closures_id.ml \ + set_of_closures_origin.mli set_of_closures_origin.ml \ + closure_origin.mli closure_origin.ml \ + var_within_closure.mli var_within_closure.ml \ + static_exception.mli static_exception.ml) \ + pass_wrapper.mli pass_wrapper.ml \ + allocated_const.mli allocated_const.ml \ + parameter.mli parameter.ml \ + projection.mli projection.ml \ + flambda.mli flambda.ml \ + flambda_iterators.mli flambda_iterators.ml \ + flambda_utils.mli flambda_utils.ml \ + freshening.mli freshening.ml \ + effect_analysis.mli effect_analysis.ml \ + inlining_cost.mli inlining_cost.ml \ + simple_value_approx.mli simple_value_approx.ml \ + export_info.mli export_info.ml \ + export_info_for_pack.mli export_info_for_pack.ml) \ + compilenv.mli compilenv.ml \ + backend_intf.mli) \ + $(middle_end_closure_SOURCES) \ + $(middle_end_flambda_SOURCES) + +ocamloptcomp_SOURCES = $(ocamlmiddleend_SOURCES) $(asmcomp_SOURCES) + +ocamltoplevel_SOURCES = $(addprefix toplevel/, \ + genprintval.mli genprintval.ml \ + topcommon.mli topcommon.ml \ + native/tophooks.mli native/tophooks.ml \ + byte/topeval.mli byte/topeval.ml \ + native/topeval.mli native/topeval.ml \ + byte/trace.mli byte/trace.ml \ + native/trace.mli native/trace.ml \ + toploop.mli toploop.ml \ + topprinters.mli topprinters.ml \ + topdirs.mli topdirs.ml \ + byte/topmain.mli byte/topmain.ml \ + native/topmain.mli native/topmain.ml) + +TOPLEVEL_SHARED_MLIS = topeval.mli trace.mli topmain.mli +TOPLEVEL_SHARED_CMIS = $(TOPLEVEL_SHARED_MLIS:%.mli=%.cmi) +TOPLEVEL_SHARED_ARTEFACTS = $(TOPLEVEL_SHARED_MLIS) $(TOPLEVEL_SHARED_CMIS) + +$(addprefix toplevel/byte/, $(TOPLEVEL_SHARED_CMIS)):\ +toplevel/byte/%.cmi: toplevel/%.cmi + cp $< toplevel/$*.mli $(@D) + +$(addprefix toplevel/native/, $(TOPLEVEL_SHARED_CMIS)):\ +toplevel/native/%.cmi: toplevel/%.cmi + cp $< toplevel/$*.mli $(@D) + +beforedepend:: + cd toplevel ; cp $(TOPLEVEL_SHARED_MLIS) byte/ + cd toplevel ; cp $(TOPLEVEL_SHARED_MLIS) native/ -LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader +partialclean:: + cd toplevel/byte ; rm -f $(TOPLEVEL_SHARED_ARTEFACTS) + cd toplevel/native ; rm -f $(TOPLEVEL_SHARED_ARTEFACTS) -COMPLIBDIR=$(LIBDIR)/compiler-libs +ALL_CONFIG_CMO = utils/config_main.cmo utils/config_boot.cmo -TOPINCLUDES=$(addprefix -I otherlibs/,$(filter-out %threads,$(OTHERLIBRARIES))) -ifeq "$(UNIX_OR_WIN32)" "unix" -EXTRAPATH= -else -EXTRAPATH = PATH="otherlibs/win32unix:$(PATH)" -endif +utils/config_%.mli: utils/config.mli + cp $^ $@ +beforedepend:: utils/config_main.mli utils/config_boot.mli -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" - COLDSTART_DEPS = - BOOT_FLEXLINK_CMD = -else - COLDSTART_DEPS = boot/ocamlruns$(EXE) - BOOT_FLEXLINK_CMD = \ - FLEXLINK_CMD="../boot/ocamlruns$(EXE) ../boot/flexlink.byte$(EXE)" -endif +$(addprefix compilerlibs/ocamlcommon., cma cmxa): \ + OC_COMMON_LINKFLAGS += -linkall -expunge := expunge$(EXE) +COMPRESSED_MARSHALING_FLAGS=-cclib -lcomprmarsh \ + $(patsubst %, -ccopt %, $(filter-out -l%,$(ZSTD_LIBS))) \ + $(patsubst %, -cclib %, $(filter -l%,$(ZSTD_LIBS))) \ + +compilerlibs/ocamlcommon.cmxa: \ + OC_NATIVE_LINKFLAGS += $(COMPRESSED_MARSHALING_FLAGS) + +compilerlibs/ocamlcommon.cmxa: stdlib/libcomprmarsh.$(A) + +partialclean:: + rm -f compilerlibs/ocamlcommon.cma + +partialclean:: + rm -f compilerlibs/ocamlcommon.cmxa \ + compilerlibs/ocamlcommon.a compilerlibs/ocamlcommon.lib + + +partialclean:: + rm -f compilerlibs/ocamlbytecomp.cma + +partialclean:: + rm -f compilerlibs/ocamlbytecomp.cmxa \ + compilerlibs/ocamlbytecomp.a compilerlibs/ocamlbytecomp.lib + + +partialclean:: + rm -f compilerlibs/ocamlmiddleend.cma \ + compilerlibs/ocamlmiddleend.cmxa \ + compilerlibs/ocamlmiddleend.a \ + compilerlibs/ocamlmiddleend.lib + + +partialclean:: + rm -f compilerlibs/ocamloptcomp.cma + +partialclean:: + rm -f compilerlibs/ocamloptcomp.cmxa \ + compilerlibs/ocamloptcomp.a compilerlibs/ocamloptcomp.lib + + +compilerlibs/ocamltoplevel.cma: VPATH += toplevel/byte +partialclean:: + rm -f compilerlibs/ocamltoplevel.cma -# targets for the compilerlibs/*.{cma,cmxa} archives -include compilerlibs/Makefile.compilerlibs +compilerlibs/ocamltoplevel.cmxa: VPATH += toplevel/native +partialclean:: + rm -f compilerlibs/ocamltoplevel.cmxa \ + compilerlibs/ocamltoplevel.a compilerlibs/ocamltoplevel.lib # The configuration file -utils/config.ml: utils/config.mlp Makefile.config utils/Makefile - $(MAKE) -C utils config.ml +utils/config.ml: \ + utils/config_$(if $(filter true,$(IN_COREBOOT_CYCLE)),boot,main).ml + $(V_GEN)cp $< $@ +utils/config_boot.ml: utils/config.fixed.ml utils/config.common.ml + $(V_GEN)cat $^ > $@ + +utils/config_main.ml: utils/config.generated.ml utils/config.common.ml + $(V_GEN)cat $^ > $@ .PHONY: reconfigure reconfigure: ac_read_git_config=true ./configure $(CONFIGURE_ARGS) utils/domainstate.ml: utils/domainstate.ml.c runtime/caml/domain_state.tbl - $(CPP) -I runtime/caml $< > $@ + $(V_GEN)$(CPP) -I runtime/caml $< > $@ utils/domainstate.mli: utils/domainstate.mli.c runtime/caml/domain_state.tbl - $(CPP) -I runtime/caml $< > $@ + $(V_GEN)$(CPP) -I runtime/caml $< > $@ -configure: configure.ac aclocal.m4 build-aux/ocaml_version.m4 tools/autogen - tools/autogen +configure: tools/autogen configure.ac aclocal.m4 build-aux/ocaml_version.m4 + $< .PHONY: partialclean partialclean:: - rm -f utils/config.ml utils/domainstate.ml utils/domainstate.mli + rm -f utils/config.ml \ + utils/config_main.ml utils/config_main.mli \ + utils/config_boot.ml utils/config_boot.mli \ + utils/domainstate.ml utils/domainstate.mli .PHONY: beforedepend -beforedepend:: utils/config.ml utils/domainstate.ml utils/domainstate.mli +beforedepend:: \ + utils/config.ml utils/config_boot.ml utils/config_main.ml \ + utils/domainstate.ml utils/domainstate.mli + +ocamllex_PROGRAMS = $(addprefix lex/,ocamllex ocamllex.opt) + +ocamlyacc_PROGRAM = yacc/ocamlyacc + +# Tools to be compiled to native and bytecode, then installed +TOOLS_TO_INSTALL_NAT = ocamldep ocamlobjinfo + +# Tools to be compiled to bytecode only, then installed +TOOLS_TO_INSTALL_BYT = \ + ocamlcmt ocamlprof ocamlcp ocamlmklib ocamlmktop + +ifeq "$(NATIVE_COMPILER)" "true" +TOOLS_TO_INSTALL_BYT += ocamloptp +endif + +# Clean should remove tools/ocamloptp etc. unconditionally because +# the configuration is not available during clean so we don't +# know whether they have been configured / built or not +clean:: + rm -f $(addprefix tools/ocamlopt,p p.opt p.exe p.opt.exe) + +TOOLS_NAT = $(TOOLS_TO_INSTALL_NAT) +TOOLS_BYT = $(TOOLS_TO_INSTALL_BYT) dumpobj primreq stripdebug cmpbyt + +TOOLS_NAT_PROGRAMS = $(addprefix tools/,$(TOOLS_NAT)) +TOOLS_BYT_PROGRAMS = $(addprefix tools/,$(TOOLS_BYT)) + +TOOLS_MODULES = tools/profiling + +# C programs + +C_PROGRAMS = $(ocamlyacc_PROGRAM) + +$(foreach PROGRAM, $(C_PROGRAMS),\ + $(eval $(call PROGRAM_SYNONYM,$(PROGRAM)))) + +# OCaml programs that are compiled in both bytecode and native code + +OCAML_PROGRAMS = ocamlc ocamlopt lex/ocamllex $(TOOLS_NAT_PROGRAMS) \ + ocamldoc/ocamldoc ocamltest/ocamltest -programs := expunge ocaml ocamlc ocamlc.opt ocamlnat ocamlopt ocamlopt.opt +$(foreach PROGRAM, $(OCAML_PROGRAMS),\ + $(eval $(call OCAML_PROGRAM,$(PROGRAM)))) -$(foreach program, $(programs), $(eval $(call PROGRAM_SYNONYM,$(program)))) +# OCaml programs that are compiled only in bytecode +# Note: the bytecode toplevel, ocaml, is a bytecode program but at the +# moment it's a special one, because it needs to be expunged, so we +# cannot declare it as we do for other bytecode-only programs. +# We have to use dedicated rules to build it + +OCAML_BYTECODE_PROGRAMS = expunge \ + $(TOOLS_BYT_PROGRAMS) \ + $(addprefix tools/, cvt_emit make_opcodes ocamltex) \ + $(OPTIONAL_BYTECODE_TOOLS) + +$(foreach PROGRAM, $(OCAML_BYTECODE_PROGRAMS),\ + $(eval $(call OCAML_BYTECODE_PROGRAM,$(PROGRAM)))) + +# OCaml programs that are compiled only in native code + +OCAML_NATIVE_PROGRAMS = \ + ocamlnat tools/lintapidiff.opt $(OPTIONAL_NATIVE_TOOLS) + +$(foreach PROGRAM, $(OCAML_NATIVE_PROGRAMS),\ + $(eval $(call OCAML_NATIVE_PROGRAM,$(PROGRAM)))) + +# OCaml libraries that are compiled in both bytecode and native code + +# List of compilerlibs + +COMPILERLIBS = $(addprefix compilerlibs/, \ + ocamlbytecomp \ + ocamlcommon \ + ocamlmiddleend \ + ocamloptcomp \ + ocamltoplevel) + +# Since the compiler libraries are necessarily compiled with boot/ocamlc, +# make sure they *always are*, even when rebuilding a program compiled +# with ./ocamlc (e.g. ocamltex) + +$(COMPILERLIBS:=.cma): \ + CAMLC = $(BOOT_OCAMLC) $(BOOT_STDLIBFLAGS) -use-prims runtime/primitives + +# The following dependency ensures that the two versions of the +# configuration module (the one for the bootstrap compiler and the +# one for the compiler to be installed) are compiled. This is to make +# sure these two versions remain in sync with each other + +compilerlibs/ocamlcommon.cma: $(ALL_CONFIG_CMO) + +OCAML_LIBRARIES = $(COMPILERLIBS) $(OPTIONAL_LIBRARIES) + +$(foreach LIBRARY, $(OCAML_LIBRARIES),\ + $(eval $(call OCAML_LIBRARY,$(LIBRARY)))) + +# OCaml libraries that are compiled only in bytecode + +OCAML_BYTECODE_LIBRARIES = + +$(foreach LIBRARY, $(OCAML_BYTECODE_LIBRARIES),\ + $(eval $(call OCAML_BYTECODE_LIBRARY,$(LIBRARY)))) + +# OCaml libraries that are compiled only in native code + +OCAML_NATIVE_LIBRARIES = + +$(foreach LIBRARY, $(OCAML_NATIVE_LIBRARIES),\ + $(eval $(call OCAML_NATIVE_LIBRARY,$(LIBRARY)))) USE_RUNTIME_PRIMS = -use-prims ../runtime/primitives USE_STDLIB = -nostdlib -I ../stdlib @@ -138,46 +616,61 @@ USE_STDLIB = -nostdlib -I ../stdlib FLEXDLL_OBJECTS = \ flexdll_$(FLEXDLL_CHAIN).$(O) flexdll_initer_$(FLEXDLL_CHAIN).$(O) FLEXLINK_BUILD_ENV = \ + MSVCC_ROOT= \ MSVC_DETECT=0 OCAML_CONFIG_FILE=../Makefile.config \ CHAINS=$(FLEXDLL_CHAIN) ROOTDIR=.. +FLEXDLL_SOURCES = \ + $(addprefix $(FLEXDLL_SOURCE_DIR)/, flexdll.c flexdll_initer.c flexdll.h) \ + $(wildcard $(FLEXDLL_SOURCE_DIR)/*.ml*) -boot/ocamlruns$(EXE): - $(MAKE) -C runtime ocamlruns$(EXE) - cp runtime/ocamlruns$(EXE) boot/ocamlruns$(EXE) +$(BYTE_BINDIR) $(OPT_BINDIR): + $(MKDIR) $@ -# Start up the system from the distribution compiler -# The process depends on whether FlexDLL is also being bootstrapped. -# Normal procedure: -# - Build the runtime -# - Build the standard library using runtime/ocamlrun -# FlexDLL procedure: -# - Build ocamlruns -# - Build the standard library using boot/ocamlruns -# - Build flexlink and FlexDLL support objects -# - Build the runtime -# runtime/ocamlrun is then installed to boot/ocamlrun and the stdlib artefacts -# are copied to boot/ -.PHONY: coldstart -coldstart: $(COLDSTART_DEPS) -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" - $(MAKE) -C runtime all - $(MAKE) -C stdlib \ - OCAMLRUN='$$(ROOTDIR)/runtime/ocamlrun$(EXE)' \ - CAMLC='$$(BOOT_OCAMLC) $(USE_RUNTIME_PRIMS)' all -else - $(MAKE) -C stdlib OCAMLRUN='$$(ROOTDIR)/boot/ocamlruns$(EXE)' \ - CAMLC='$$(BOOT_OCAMLC)' all - $(MAKE) -C $(FLEXDLL_SOURCES) $(FLEXLINK_BUILD_ENV) \ - OCAMLRUN='$$(ROOTDIR)/boot/ocamlruns$(EXE)' NATDYNLINK=false \ +flexlink.byte$(EXE): $(FLEXDLL_SOURCES) + rm -f $(FLEXDLL_SOURCE_DIR)/flexlink.exe + $(MAKE) -C $(FLEXDLL_SOURCE_DIR) $(FLEXLINK_BUILD_ENV) \ + OCAMLRUN='$$(ROOTDIR)/boot/ocamlrun$(EXE)' NATDYNLINK=false \ OCAMLOPT='$(value BOOT_OCAMLC) $(USE_RUNTIME_PRIMS) $(USE_STDLIB)' \ flexlink.exe support - mv $(FLEXDLL_SOURCES)/flexlink.exe boot/flexlink.byte$(EXE) - cp $(addprefix $(FLEXDLL_SOURCES)/, $(FLEXDLL_OBJECTS)) boot/ - $(MAKE) -C runtime $(BOOT_FLEXLINK_CMD) all -endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" - cp runtime/ocamlrun$(EXE) boot/ocamlrun$(EXE) - cd boot; rm -f $(LIBFILES) - cd stdlib; cp $(LIBFILES) ../boot + cp $(FLEXDLL_SOURCE_DIR)/flexlink.exe $@ + +partialclean:: + rm -f flexlink.byte flexlink.byte.exe + +$(BYTE_BINDIR)/flexlink$(EXE): \ + boot/ocamlrun$(EXE) flexlink.byte$(EXE) | $(BYTE_BINDIR) + rm -f $@ +# Start with a copy to ensure that the result is always executable + cp boot/ocamlrun$(EXE) $@ + cat flexlink.byte$(EXE) >> $@ + cp $(addprefix $(FLEXDLL_SOURCE_DIR)/, $(FLEXDLL_OBJECTS)) $(BYTE_BINDIR) + +partialclean:: + rm -f $(BYTE_BINDIR)/flexlink $(BYTE_BINDIR)/flexlink.exe + +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" +# The recipe for runtime/ocamlruns$(EXE) also produces runtime/primitives +boot/ocamlrun$(EXE): runtime/ocamlruns$(EXE) + +$(foreach runtime, ocamlrun ocamlrund ocamlruni, \ + $(eval runtime/$(runtime)$(EXE): | $(BYTE_BINDIR)/flexlink$(EXE))) + +tools/checkstack$(EXE): | $(BYTE_BINDIR)/flexlink$(EXE) +else +boot/ocamlrun$(EXE): runtime/ocamlrun$(EXE) runtime/primitives +endif + +# $< refers to runtime/ocamlruns when bootstrapping flexlink and +# runtime/ocamlrun otherwise (see above). +boot/ocamlrun$(EXE): + cp $< $@ + +# Start up the system from the distribution compiler +.PHONY: coldstart +coldstart: boot/ocamlrun$(EXE) runtime/libcamlrun.$(A) + $(MAKE) -C stdlib OCAMLRUN='$$(ROOTDIR)/$<' USE_BOOT_OCAMLC=true all + rm -f $(addprefix boot/, libcamlrun.$(A) $(LIBFILES)) + cp $(addprefix stdlib/, $(LIBFILES)) boot cd boot; $(LN) ../runtime/libcamlrun.$(A) . # Recompile the core system using the bootstrap compiler @@ -193,12 +686,21 @@ core: coldstart # Check if fixpoint reached -CMPBYT := $(OCAMLRUN) tools/cmpbyt$(EXE) +# We use tools/cmpbyt because it has better error reporting, but cmp could also +# be used. +CMPCMD ?= $(OCAMLRUN) tools/cmpbyt$(EXE) .PHONY: compare compare: - @if $(CMPBYT) boot/ocamlc ocamlc$(EXE) \ - && $(CMPBYT) boot/ocamllex lex/ocamllex$(EXE); \ +# The core system has to be rebuilt after bootstrap anyway, so strip ocamlc +# and ocamllex, which means the artefacts should be identical. + mv ocamlc$(EXE) ocamlc.tmp + $(OCAMLRUN) tools/stripdebug -all ocamlc.tmp ocamlc$(EXE) + mv lex/ocamllex$(EXE) ocamllex.tmp + $(OCAMLRUN) tools/stripdebug -all ocamllex.tmp lex/ocamllex$(EXE) + rm -f ocamllex.tmp ocamlc.tmp + @if $(CMPCMD) boot/ocamlc ocamlc$(EXE) \ + && $(CMPCMD) boot/ocamllex lex/ocamllex$(EXE); \ then echo "Fixpoint reached, bootstrap succeeded."; \ else \ echo "Fixpoint not reached, try one more bootstrapping cycle."; \ @@ -223,8 +725,9 @@ promote-cross: promote-common # Promote the newly compiled system to the rank of bootstrap compiler # (Runs on the new runtime, produces code for the new runtime) .PHONY: promote -promote: PROMOTE = $(OCAMLRUN) tools/stripdebug +promote: PROMOTE = $(OCAMLRUN) tools/stripdebug -all promote: promote-common + rm -f boot/ocamlrun$(EXE) cp runtime/ocamlrun$(EXE) boot/ocamlrun$(EXE) # Compile the native-code compiler @@ -251,44 +754,57 @@ ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" $(MAKE) flexlink.opt$(EXE) endif $(MAKE) ocamlc.opt - $(MAKE) otherlibraries $(WITH_DEBUGGER) $(WITH_OCAMLDOC) \ - $(WITH_OCAMLTEST) +# TODO: introduce OPTIONAL_LIBRARIES and OPTIONAL_TOOLS variables to be +# computed at configure time to keep track of which tools and libraries +# need to be built + $(MAKE) otherlibraries $(WITH_DEBUGGER) $(OCAMLDOC_TARGET) \ + $(OCAMLTEST_TARGET) $(MAKE) ocamlopt.opt $(MAKE) otherlibrariesopt - $(MAKE) ocamllex.opt ocamltoolsopt ocamltoolsopt.opt $(OCAMLDOC_OPT) \ - $(OCAMLTEST_OPT) ocamlnat -ifeq "$(WITH_OCAMLDOC)-$(STDLIB_MANPAGES)" "ocamldoc-true" + $(MAKE) ocamllex.opt ocamltoolsopt ocamltoolsopt.opt \ + $(OCAMLDOC_OPT_TARGET) \ + $(OCAMLTEST_OPT_TARGET) othertools ocamlnat +ifeq "$(build_libraries_manpages)" "true" $(MAKE) manpages endif # Core bootstrapping cycle .PHONY: coreboot +ifeq "$(FLAT_FLOAT_ARRAY)" "true" coreboot: # Promote the new compiler but keep the old runtime # This compiler runs on boot/ocamlrun and produces bytecode for # runtime/ocamlrun $(MAKE) promote-cross # Rebuild ocamlc and ocamllex (run on runtime/ocamlrun) +# utils/config.ml will have the fixed bootstrap configuration $(MAKE) partialclean - $(MAKE) ocamlc ocamllex ocamltools + $(MAKE) IN_COREBOOT_CYCLE=true ocamlc ocamllex ocamltools # Rebuild the library (using runtime/ocamlrun ./ocamlc) $(MAKE) library-cross # Promote the new compiler and the new runtime $(MAKE) OCAMLRUN=runtime/ocamlrun$(EXE) promote # Rebuild the core system +# utils/config.ml must still have the fixed bootstrap configuration $(MAKE) partialclean - $(MAKE) core + $(MAKE) IN_COREBOOT_CYCLE=true core # Check if fixpoint reached $(MAKE) compare +else +coreboot: + $(error Cannot bootstrap when configured with \ +--disable-flat-float-array) +endif # Recompile the system using the bootstrap compiler .PHONY: all all: coreall $(MAKE) ocaml - $(MAKE) otherlibraries $(WITH_DEBUGGER) $(WITH_OCAMLDOC) \ - $(WITH_OCAMLTEST) -ifeq "$(WITH_OCAMLDOC)-$(STDLIB_MANPAGES)" "ocamldoc-true" + $(MAKE) otherlibraries $(WITH_DEBUGGER) $(OCAMLDOC_TARGET) \ + $(OCAMLTEST_TARGET) + $(MAKE) othertools +ifeq "$(build_libraries_manpages)" "true" $(MAKE) manpages endif @@ -297,6 +813,9 @@ endif # Never mind, just do make bootstrap to reach fixpoint again. .PHONY: bootstrap bootstrap: coreboot +# utils/config.ml must be restored to config.status's configuration +# lex/ocamllex$(EXE) was stripped in order to compare it + rm -f utils/config.ml lex/ocamllex$(EXE) $(MAKE) all # Compile everything the first time @@ -317,24 +836,7 @@ world.opt: checknative .PHONY: flexdll flexlink flexlink.opt -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" -flexdll flexlink flexlink.opt: - @echo It is no longer necessary to bootstrap FlexDLL with a separate - @echo make invocation. Simply place the sources for FlexDLL in a - @echo sub-directory. - @echo This can either be done by downloading a source tarball from - @echo \ https://github.com/alainfrisch/flexdll/releases - @if [ -d .git ]; then \ - echo or by checking out the flexdll submodule with; \ - echo \ git submodule update --init; \ - else \ - echo or by cloning the git repository; \ - echo \ git clone https://github.com/alainfrisch/flexdll.git; \ - fi - @echo "Then pass --with-flexdll= to configure and build as normal." - @false - -else +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" .PHONY: flexdll flexdll: flexdll/Makefile @@ -354,19 +856,42 @@ else FLEXLINK_OCAMLOPT=../ocamlopt.opt$(EXE) endif -flexlink.opt$(EXE): - $(MAKE) -C $(FLEXDLL_SOURCES) $(FLEXLINK_BUILD_ENV) \ - OCAML_FLEXLINK='$(value OCAMLRUN) $$(ROOTDIR)/boot/flexlink.byte$(EXE)' \ - OCAMLOPT="$(FLEXLINK_OCAMLOPT) -nostdlib -I ../stdlib" flexlink.exe - mv $(FLEXDLL_SOURCES)/flexlink.exe $@ +flexlink.opt$(EXE): \ + $(FLEXDLL_SOURCES) | $(BYTE_BINDIR)/flexlink$(EXE) $(OPT_BINDIR) + rm -f $(FLEXDLL_SOURCE_DIR)/flexlink.exe + $(MAKE) -C $(FLEXDLL_SOURCE_DIR) $(FLEXLINK_BUILD_ENV) \ + OCAMLOPT='$(FLEXLINK_OCAMLOPT) -nostdlib -I ../stdlib' flexlink.exe + cp $(FLEXDLL_SOURCE_DIR)/flexlink.exe $@ + rm -f $(OPT_BINDIR)/flexlink$(EXE) + cd $(OPT_BINDIR); $(LN) $(call ROOT_FROM, $(OPT_BINDIR))/$@ flexlink$(EXE) + cp $(addprefix $(BYTE_BINDIR)/, $(FLEXDLL_OBJECTS)) $(OPT_BINDIR) partialclean:: - rm -f flexlink.opt$(EXE) -endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" + rm -f flexlink.opt$(EXE) $(OPT_BINDIR)/flexlink$(EXE) + +else + +flexdll flexlink flexlink.opt: + @echo It is no longer necessary to bootstrap FlexDLL with a separate + @echo make invocation. Simply place the sources for FlexDLL in a + @echo sub-directory. + @echo This can either be done by downloading a source tarball from + @echo \ https://github.com/ocaml/flexdll/releases + @if [ -d .git ]; then \ + echo or by checking out the flexdll submodule with; \ + echo \ git submodule update --init; \ + else \ + echo or by cloning the git repository; \ + echo \ git clone https://github.com/ocaml/flexdll.git; \ + fi + @echo "Then pass --with-flexdll= to configure and build as normal." + @false + +endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" INSTALL_COMPLIBDIR = $(DESTDIR)$(COMPLIBDIR) INSTALL_FLEXDLLDIR = $(INSTALL_LIBDIR)/flexdll -FLEXDLL_MANIFEST = default$(filter-out _i386,_$(ARCH)).manifest +FLEXDLL_MANIFEST = default_$(ARCH).manifest DOC_FILES=\ Changes \ @@ -374,235 +899,7 @@ DOC_FILES=\ README.win32.adoc \ LICENSE -# Installation -.PHONY: install -install: - $(MKDIR) "$(INSTALL_BINDIR)" - $(MKDIR) "$(INSTALL_LIBDIR)" - $(MKDIR) "$(INSTALL_STUBLIBDIR)" - $(MKDIR) "$(INSTALL_COMPLIBDIR)" - $(MKDIR) "$(INSTALL_DOCDIR)" - $(MAKE) -C runtime install - $(INSTALL_PROG) ocaml$(EXE) "$(INSTALL_BINDIR)" -ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - $(INSTALL_PROG) ocamlc$(EXE) "$(INSTALL_BINDIR)/ocamlc.byte$(EXE)" -endif - $(MAKE) -C stdlib install -ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - $(INSTALL_PROG) lex/ocamllex$(EXE) \ - "$(INSTALL_BINDIR)/ocamllex.byte$(EXE)" -endif - $(INSTALL_PROG) yacc/ocamlyacc$(EXE) "$(INSTALL_BINDIR)" - $(INSTALL_DATA) \ - utils/*.cmi \ - parsing/*.cmi \ - typing/*.cmi \ - bytecomp/*.cmi \ - file_formats/*.cmi \ - lambda/*.cmi \ - driver/*.cmi \ - toplevel/*.cmi \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - toplevel/byte/*.cmi \ - "$(INSTALL_COMPLIBDIR)" -ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" - $(INSTALL_DATA) \ - utils/*.cmt utils/*.cmti utils/*.mli \ - parsing/*.cmt parsing/*.cmti parsing/*.mli \ - typing/*.cmt typing/*.cmti typing/*.mli \ - file_formats/*.cmt file_formats/*.cmti file_formats/*.mli \ - lambda/*.cmt lambda/*.cmti lambda/*.mli \ - bytecomp/*.cmt bytecomp/*.cmti bytecomp/*.mli \ - driver/*.cmt driver/*.cmti driver/*.mli \ - toplevel/*.cmt toplevel/*.cmti toplevel/*.mli \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - toplevel/byte/*.cmt \ - "$(INSTALL_COMPLIBDIR)" -endif - $(INSTALL_DATA) \ - compilerlibs/*.cma \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - $(BYTESTART) $(TOPLEVELSTART) \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_PROG) $(expunge) "$(INSTALL_LIBDIR)" - $(INSTALL_DATA) \ - toplevel/topdirs.cmi \ - "$(INSTALL_LIBDIR)" -ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" - $(INSTALL_DATA) \ - toplevel/topdirs.cmt \ - toplevel/topdirs.cmti toplevel/topdirs.mli \ - "$(INSTALL_LIBDIR)" -endif - $(MAKE) -C tools install -ifeq "$(UNIX_OR_WIN32)" "unix" # Install manual pages only on Unix - $(MAKE) -C man install -endif - for i in $(OTHERLIBRARIES); do \ - $(MAKE) -C otherlibs/$$i install || exit $$?; \ - done -ifneq "$(WITH_OCAMLDOC)" "" - $(MAKE) -C ocamldoc install -endif -ifeq "$(WITH_OCAMLDOC)-$(STDLIB_MANPAGES)" "ocamldoc-true" - $(MAKE) -C api_docgen install -endif - if test -n "$(WITH_DEBUGGER)"; then \ - $(MAKE) -C debugger install; \ - fi -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" -ifeq "$(TOOLCHAIN)" "msvc" - $(INSTALL_DATA) $(FLEXDLL_SOURCES)/$(FLEXDLL_MANIFEST) \ - "$(INSTALL_BINDIR)/" -endif -ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - $(INSTALL_PROG) \ - boot/flexlink.byte$(EXE) "$(INSTALL_BINDIR)/flexlink.byte$(EXE)" -endif # ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - $(MKDIR) "$(INSTALL_FLEXDLLDIR)" - $(INSTALL_DATA) $(addprefix stdlib/flexdll/, $(FLEXDLL_OBJECTS)) \ - "$(INSTALL_FLEXDLLDIR)" -endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" - $(INSTALL_DATA) Makefile.config "$(INSTALL_LIBDIR)" - $(INSTALL_DATA) $(DOC_FILES) "$(INSTALL_DOCDIR)" -ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - if test -f ocamlopt$(EXE); then $(MAKE) installopt; else \ - cd "$(INSTALL_BINDIR)"; \ - $(LN) ocamlc.byte$(EXE) ocamlc$(EXE); \ - $(LN) ocamllex.byte$(EXE) ocamllex$(EXE); \ - (test -f flexlink.byte$(EXE) && \ - $(LN) flexlink.byte$(EXE) flexlink$(EXE)) || true; \ - fi -else - if test -f ocamlopt$(EXE); then $(MAKE) installopt; fi -endif - -# Installation of the native-code compiler -.PHONY: installopt -installopt: - $(MAKE) -C runtime installopt -ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - $(INSTALL_PROG) ocamlopt$(EXE) "$(INSTALL_BINDIR)/ocamlopt.byte$(EXE)" -endif - $(MAKE) -C stdlib installopt - $(INSTALL_DATA) \ - middle_end/*.cmi \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - middle_end/closure/*.cmi \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - middle_end/flambda/*.cmi \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - middle_end/flambda/base_types/*.cmi \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - asmcomp/*.cmi \ - "$(INSTALL_COMPLIBDIR)" -ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" - $(INSTALL_DATA) \ - middle_end/*.cmt middle_end/*.cmti \ - middle_end/*.mli \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - middle_end/closure/*.cmt middle_end/closure/*.cmti \ - middle_end/closure/*.mli \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - middle_end/flambda/*.cmt middle_end/flambda/*.cmti \ - middle_end/flambda/*.mli \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - middle_end/flambda/base_types/*.cmt \ - middle_end/flambda/base_types/*.cmti \ - middle_end/flambda/base_types/*.mli \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - asmcomp/*.cmt asmcomp/*.cmti \ - asmcomp/*.mli \ - "$(INSTALL_COMPLIBDIR)" -endif - $(INSTALL_DATA) \ - $(OPTSTART) \ - "$(INSTALL_COMPLIBDIR)" -ifneq "$(WITH_OCAMLDOC)" "" - $(MAKE) -C ocamldoc installopt -endif - for i in $(OTHERLIBRARIES); do \ - $(MAKE) -C otherlibs/$$i installopt || exit $$?; \ - done -ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" - if test -f ocamlopt.opt$(EXE); then $(MAKE) installoptopt; else \ - cd "$(INSTALL_BINDIR)"; \ - $(LN) ocamlc.byte$(EXE) ocamlc$(EXE); \ - $(LN) ocamlopt.byte$(EXE) ocamlopt$(EXE); \ - $(LN) ocamllex.byte$(EXE) ocamllex$(EXE); \ - (test -f flexlink.byte$(EXE) && \ - $(LN) flexlink.byte$(EXE) flexlink$(EXE)) || true; \ - fi -else - if test -f ocamlopt.opt$(EXE); then $(MAKE) installoptopt; fi -endif - $(MAKE) -C tools installopt - -.PHONY: installoptopt -installoptopt: - $(INSTALL_PROG) ocamlc.opt$(EXE) "$(INSTALL_BINDIR)" - $(INSTALL_PROG) ocamlopt.opt$(EXE) "$(INSTALL_BINDIR)" - $(INSTALL_PROG) lex/ocamllex.opt$(EXE) "$(INSTALL_BINDIR)" - cd "$(INSTALL_BINDIR)"; \ - $(LN) ocamlc.opt$(EXE) ocamlc$(EXE); \ - $(LN) ocamlopt.opt$(EXE) ocamlopt$(EXE); \ - $(LN) ocamllex.opt$(EXE) ocamllex$(EXE) -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" - $(INSTALL_PROG) flexlink.opt$(EXE) "$(INSTALL_BINDIR)" - cd "$(INSTALL_BINDIR)"; \ - $(LN) flexlink.opt$(EXE) flexlink$(EXE) -endif - $(INSTALL_DATA) \ - utils/*.cmx parsing/*.cmx typing/*.cmx bytecomp/*.cmx \ - toplevel/*.cmx toplevel/native/*.cmx \ - toplevel/native/tophooks.cmi \ - file_formats/*.cmx \ - lambda/*.cmx \ - driver/*.cmx asmcomp/*.cmx middle_end/*.cmx \ - middle_end/closure/*.cmx \ - middle_end/flambda/*.cmx \ - middle_end/flambda/base_types/*.cmx \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - compilerlibs/*.cmxa compilerlibs/*.$(A) \ - "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - $(BYTESTART:.cmo=.cmx) $(BYTESTART:.cmo=.$(O)) \ - $(OPTSTART:.cmo=.cmx) $(OPTSTART:.cmo=.$(O)) \ - $(TOPLEVELSTART:.cmo=.$(O)) \ - "$(INSTALL_COMPLIBDIR)" -ifeq "$(INSTALL_OCAMLNAT)" "true" - $(INSTALL_PROG) ocamlnat$(EXE) "$(INSTALL_BINDIR)" -endif - -# Installation of the *.ml sources of compiler-libs -.PHONY: install-compiler-sources -install-compiler-sources: -ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" - $(INSTALL_DATA) \ - utils/*.ml parsing/*.ml typing/*.ml bytecomp/*.ml driver/*.ml \ - file_formats/*.ml \ - lambda/*.ml \ - toplevel/*.ml toplevel/byte/*.ml \ - middle_end/*.ml middle_end/closure/*.ml \ - middle_end/flambda/*.ml middle_end/flambda/base_types/*.ml \ - asmcomp/*.ml \ - asmcmp/debug/*.ml \ - "$(INSTALL_COMPLIBDIR)" -endif - -# Run all tests +# Run all tests .PHONY: tests tests: @@ -625,65 +922,92 @@ clean:: # The clean target clean:: partialclean - rm -f $(programs) $(programs:=.exe) + rm -f configure~ + rm -f $(C_PROGRAMS) $(C_PROGRAMS:=.exe) + rm -f $(OCAML_PROGRAMS) $(OCAML_PROGRAMS:=.exe) + rm -f $(OCAML_PROGRAMS:=.opt) $(OCAML_PROGRAMS:=.opt.exe) + rm -f $(OCAML_BYTECODE_PROGRAMS) $(OCAML_BYTECODE_PROGRAMS:=.exe) + rm -f $(OCAML_NATIVE_PROGRAMS) $(OCAML_NATIVE_PROGRAMS:=.exe) # The bytecode compiler -ocamlc$(EXE): compilerlibs/ocamlcommon.cma \ - compilerlibs/ocamlbytecomp.cma $(BYTESTART) - $(CAMLC) $(LINKFLAGS) -compat-32 -o $@ $^ +ocamlc_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) + +ocamlc_SOURCES = driver/main.mli driver/main.ml + +ocamlc$(EXE): OC_BYTECODE_LINKFLAGS += -compat-32 -g partialclean:: - rm -rf ocamlc$(EXE) + rm -f ocamlc ocamlc.exe ocamlc.opt ocamlc.opt.exe # The native-code compiler -ocamlopt$(EXE): compilerlibs/ocamlcommon.cma compilerlibs/ocamloptcomp.cma \ - $(OPTSTART) - $(CAMLC) $(LINKFLAGS) -o $@ $^ +ocamlopt_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamloptcomp) + +ocamlopt_SOURCES = driver/optmain.mli driver/optmain.ml + +ocamlopt$(EXE): OC_BYTECODE_LINKFLAGS += -g partialclean:: - rm -f ocamlopt$(EXE) + rm -f ocamlopt ocamlopt.exe ocamlopt.opt ocamlopt.opt.exe # The toplevel -ocaml_dependencies := \ - compilerlibs/ocamlcommon.cma \ - compilerlibs/ocamlbytecomp.cma \ - compilerlibs/ocamltoplevel.cma $(TOPLEVELSTART) +# At the moment, the toplevel can't be built with the general build macros +# because its build involves calling expunge. We thus give its build +# rules explicitly until the day expunge can hopefully be removed. + +ocaml_LIBRARIES = \ + $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp ocamltoplevel) + +ocaml_CMA_FILES = $(ocaml_LIBRARIES:=.cma) + +ocaml_SOURCES = toplevel/topstart.mli toplevel/topstart.ml + +ocaml_CMO_FILES = toplevel/topstart.cmo .INTERMEDIATE: ocaml.tmp -ocaml.tmp: $(ocaml_dependencies) - $(CAMLC) $(LINKFLAGS) -I toplevel/byte -linkall -o $@ $^ +ocaml.tmp: OC_BYTECODE_LINKFLAGS += -I toplevel/byte -linkall -g +ocaml.tmp: $(ocaml_CMA_FILES) $(ocaml_CMO_FILES) + $(V_LINKC)$(LINK_BYTECODE_PROGRAM) -o $@ $^ +$(eval $(call PROGRAM_SYNONYM,ocaml)) ocaml$(EXE): $(expunge) ocaml.tmp - - $(OCAMLRUN) $^ $@ $(PERVASIVES) + - $(V_GEN)$(OCAMLRUN) $^ $@ $(PERVASIVES) partialclean:: - rm -f ocaml$(EXE) + rm -f ocaml ocaml.exe # Use TOPFLAGS to pass additional flags to the bytecode or native toplevel # when running make runtop or make natruntop TOPFLAGS ?= -OC_TOPFLAGS = -nostdlib -I stdlib -I toplevel -noinit $(TOPINCLUDES) $(TOPFLAGS) +OC_TOPFLAGS = $(STDLIBFLAGS) -I toplevel -noinit $(TOPINCLUDES) $(TOPFLAGS) + +RUN_OCAML = $(RLWRAP) $(OCAMLRUN) ./ocaml$(EXE) $(OC_TOPFLAGS) +RUN_OCAMLNAT = $(RLWRAP) ./ocamlnat$(EXE) $(OC_TOPFLAGS) -# Note: Beware that, since this rule begins with a coldstart, both +# Note: Beware that, since these rules begin with a coldstart, both # boot/ocamlrun and runtime/ocamlrun will be the same when the toplevel # is run. .PHONY: runtop -runtop: - $(MAKE) coldstart +runtop: coldstart + $(MAKE) ocamlc + $(MAKE) ocaml + @$(RUN_OCAML) + +.PHONY: runtop-with-otherlibs +runtop-with-otherlibs: coldstart $(MAKE) ocamlc $(MAKE) otherlibraries $(MAKE) ocaml - @$(EXTRAPATH) $(RLWRAP) $(OCAMLRUN) ./ocaml$(EXE) $(OC_TOPFLAGS) + @$(RUN_OCAML) .PHONY: natruntop natruntop: $(MAKE) core $(MAKE) opt $(MAKE) ocamlnat - @$(FLEXLINK_ENV) $(EXTRAPATH) $(RLWRAP) ./ocamlnat$(EXE) $(OC_TOPFLAGS) + @$(RUN_OCAMLNAT) # Native dynlink @@ -697,34 +1021,11 @@ partialclean:: beforedepend:: parsing/lexer.ml -# The bytecode compiler compiled with the native-code compiler - -ocamlc.opt$(EXE): compilerlibs/ocamlcommon.cmxa \ - compilerlibs/ocamlbytecomp.cmxa $(BYTESTART:.cmo=.cmx) - $(CAMLOPT_CMD) $(LINKFLAGS) -o $@ $^ -cclib "$(BYTECCLIBS)" - -partialclean:: - rm -f ocamlc.opt$(EXE) - -# The native-code compiler compiled with itself - -ocamlopt.opt$(EXE): \ - compilerlibs/ocamlcommon.cmxa \ - compilerlibs/ocamloptcomp.cmxa \ - $(OPTSTART:.cmo=.cmx) - $(CAMLOPT_CMD) $(LINKFLAGS) -o $@ $^ - -partialclean:: - rm -f ocamlopt.opt$(EXE) - # The predefined exceptions and primitives -runtime/primitives: - $(MAKE) -C runtime primitives - lambda/runtimedef.ml: lambda/generate_runtimedef.sh runtime/caml/fail.h \ runtime/primitives - $^ > $@ + $(V_GEN)$^ > $@ partialclean:: rm -f lambda/runtimedef.ml @@ -733,6 +1034,9 @@ beforedepend:: lambda/runtimedef.ml # Choose the right machine-dependent files +asmcomp/arch.mli: asmcomp/$(ARCH)/arch.mli + cd asmcomp; $(LN) $(ARCH)/arch.mli . + asmcomp/arch.ml: asmcomp/$(ARCH)/arch.ml cd asmcomp; $(LN) $(ARCH)/arch.ml . @@ -751,120 +1055,560 @@ asmcomp/reload.ml: asmcomp/$(ARCH)/reload.ml asmcomp/scheduling.ml: asmcomp/$(ARCH)/scheduling.ml cd asmcomp; $(LN) $(ARCH)/scheduling.ml . +asmcomp/stackframe.ml: asmcomp/$(ARCH)/stackframe.ml + cd asmcomp; $(LN) $(ARCH)/stackframe.ml . + # Preprocess the code emitters +cvt_emit = tools/cvt_emit$(EXE) -cvt_emit := tools/cvt_emit$(EXE) +beforedepend:: tools/cvt_emit.ml asmcomp/emit.ml: asmcomp/$(ARCH)/emit.mlp $(cvt_emit) - echo \# 1 \"$(ARCH)/emit.mlp\" > $@ + $(V_GEN)echo \# 1 \"asmcomp/$(ARCH)/emit.mlp\" > $@ && \ $(OCAMLRUN) $(cvt_emit) < $< >> $@ \ || { rm -f $@; exit 2; } partialclean:: - rm -f asmcomp/emit.ml + rm -f asmcomp/emit.ml tools/cvt_emit.ml beforedepend:: asmcomp/emit.ml -$(cvt_emit): tools/cvt_emit.mll - $(MAKE) -C tools cvt_emit +cvt_emit_LIBRARIES = +cvt_emit_SOURCES = tools/cvt_emit.mli tools/cvt_emit.mll # The "expunge" utility -$(expunge): compilerlibs/ocamlcommon.cma compilerlibs/ocamlbytecomp.cma \ - toplevel/expunge.cmo - $(CAMLC) $(LINKFLAGS) -o $@ $^ +expunge_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) + +expunge_SOURCES = toplevel/expunge.mli toplevel/expunge.ml partialclean:: - rm -f $(expunge) + rm -f expunge expunge.exe + +# The runtime system + +## Lists of source files + +runtime_COMMON_C_SOURCES = \ + addrmap \ + afl \ + alloc \ + array \ + backtrace \ + bigarray \ + blake2 \ + callback \ + codefrag \ + compare \ + custom \ + debugger \ + domain \ + dynlink \ + extern \ + fiber \ + finalise \ + floats \ + gc_ctrl \ + gc_stats \ + globroots \ + hash \ + intern \ + ints \ + io \ + lexing \ + lf_skiplist \ + main \ + major_gc \ + md5 \ + memory \ + memprof \ + meta \ + minor_gc \ + misc \ + obj \ + parsing \ + platform \ + printexc \ + prng \ + roots \ + runtime_events \ + shared_heap \ + signals \ + skiplist \ + startup_aux \ + str \ + sync \ + sys \ + $(TSAN_NATIVE_RUNTIME_C_SOURCES) \ + $(UNIX_OR_WIN32) \ + weak + +runtime_BYTECODE_ONLY_C_SOURCES = \ + backtrace_byt \ + fail_byt \ + fix_code \ + interp \ + startup_byt \ + zstd +runtime_BYTECODE_C_SOURCES = \ + $(runtime_COMMON_C_SOURCES:%=runtime/%.c) \ + $(runtime_BYTECODE_ONLY_C_SOURCES:%=runtime/%.c) + +runtime_NATIVE_ONLY_C_SOURCES = \ + backtrace_nat \ + clambda_checks \ + dynlink_nat \ + fail_nat \ + frame_descriptors \ + startup_nat \ + signals_nat +runtime_NATIVE_C_SOURCES = \ + $(runtime_COMMON_C_SOURCES:%=runtime/%.c) \ + $(runtime_NATIVE_ONLY_C_SOURCES:%=runtime/%.c) + +## Header files generated by configure +runtime_CONFIGURED_HEADERS = \ + $(addprefix runtime/caml/, exec.h m.h s.h version.h) + +## Header files generated by make +runtime_BUILT_HEADERS = $(addprefix runtime/, \ + caml/opnames.h caml/jumptbl.h build_config.h) + +## Targets to build and install + +runtime_PROGRAMS = runtime/ocamlrun$(EXE) +runtime_BYTECODE_STATIC_LIBRARIES = $(addprefix runtime/, \ + ld.conf libcamlrun.$(A)) +runtime_BYTECODE_SHARED_LIBRARIES = +runtime_NATIVE_STATIC_LIBRARIES = \ + runtime/libasmrun.$(A) runtime/libcomprmarsh.$(A) +runtime_NATIVE_SHARED_LIBRARIES = + +ifeq "$(RUNTIMED)" "true" +runtime_PROGRAMS += runtime/ocamlrund$(EXE) +runtime_BYTECODE_STATIC_LIBRARIES += runtime/libcamlrund.$(A) +runtime_NATIVE_STATIC_LIBRARIES += runtime/libasmrund.$(A) +endif + +ifeq "$(INSTRUMENTED_RUNTIME)" "true" +runtime_PROGRAMS += runtime/ocamlruni$(EXE) +runtime_BYTECODE_STATIC_LIBRARIES += runtime/libcamlruni.$(A) +runtime_NATIVE_STATIC_LIBRARIES += runtime/libasmruni.$(A) +endif + +ifeq "$(UNIX_OR_WIN32)" "unix" +ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" +runtime_BYTECODE_STATIC_LIBRARIES += runtime/libcamlrun_pic.$(A) +runtime_BYTECODE_SHARED_LIBRARIES += runtime/libcamlrun_shared.$(SO) +runtime_NATIVE_STATIC_LIBRARIES += runtime/libasmrun_pic.$(A) +runtime_NATIVE_SHARED_LIBRARIES += runtime/libasmrun_shared.$(SO) +endif +endif -# The runtime system for the bytecode compiler +## List of object files for each target -$(SAK): - $(MAKE) -C runtime sak$(EXE) +libcamlrun_OBJECTS = $(runtime_BYTECODE_C_SOURCES:.c=.b.$(O)) -.PHONY: runtime -runtime: stdlib/libcamlrun.$(A) +libcamlrun_non_shared_OBJECTS = \ + $(subst $(UNIX_OR_WIN32).b.$(O),$(UNIX_OR_WIN32)_non_shared.b.$(O), \ + $(libcamlrun_OBJECTS)) -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" -runtime: $(addprefix stdlib/flexdll/, $(FLEXDLL_OBJECTS)) -stdlib/flexdll/flexdll%.$(O): $(FLEXDLL_SOURCES)/flexdll%.$(O) | stdlib/flexdll - cp $< $@ -stdlib/flexdll: +libcamlrund_OBJECTS = $(runtime_BYTECODE_C_SOURCES:.c=.bd.$(O)) \ + runtime/instrtrace.bd.$(O) + +libcamlruni_OBJECTS = $(runtime_BYTECODE_C_SOURCES:.c=.bi.$(O)) + +libcamlrunpic_OBJECTS = $(runtime_BYTECODE_C_SOURCES:.c=.bpic.$(O)) + +libasmrun_OBJECTS = \ + $(runtime_NATIVE_C_SOURCES:.c=.n.$(O)) $(runtime_ASM_OBJECTS) + +libasmrund_OBJECTS = \ + $(runtime_NATIVE_C_SOURCES:.c=.nd.$(O)) $(runtime_ASM_OBJECTS:.$(O)=.d.$(O)) + +libasmruni_OBJECTS = \ + $(runtime_NATIVE_C_SOURCES:.c=.ni.$(O)) $(runtime_ASM_OBJECTS:.$(O)=.i.$(O)) + +libasmrunpic_OBJECTS = $(runtime_NATIVE_C_SOURCES:.c=.npic.$(O)) \ + $(runtime_ASM_OBJECTS:.$(O)=_libasmrunpic.$(O)) + +libcomprmarsh_OBJECTS = runtime/zstd.npic.$(O) + +## General (non target-specific) assembler and compiler flags + +runtime_CPPFLAGS = -DCAMLDLLIMPORT= -DIN_CAML_RUNTIME +ocamlrund_CPPFLAGS = -DDEBUG +ocamlruni_CPPFLAGS = -DCAML_INSTR + +## Runtime targets + +.PHONY: runtime-all +runtime-all: \ + $(runtime_BYTECODE_STATIC_LIBRARIES) $(runtime_BYTECODE_SHARED_LIBRARIES) \ + $(runtime_PROGRAMS) $(SAK) + +.PHONY: runtime-allopt +ifeq "$(NATIVE_COMPILER)" "true" +runtime-allopt: \ + $(runtime_NATIVE_STATIC_LIBRARIES) $(runtime_NATIVE_SHARED_LIBRARIES) +else +runtime-allopt: + $(error The build has been configured with --disable-native-compiler) +endif + +## Generated non-object files + +runtime/ld.conf: $(ROOTDIR)/Makefile.config + $(V_GEN)echo "$(STUBLIBDIR)" > $@ && \ + echo "$(LIBDIR)" >> $@ + +runtime/primitives: runtime/gen_primitives.sh $(runtime_BYTECODE_C_SOURCES) + $(V_GEN)runtime/gen_primitives.sh $@ $(runtime_BYTECODE_C_SOURCES) + +runtime/prims.c: runtime/gen_primsc.sh runtime/primitives + $(V_GEN)runtime/gen_primsc.sh \ + runtime/primitives $(runtime_BYTECODE_C_SOURCES) \ + > $@ + +runtime/caml/opnames.h : runtime/caml/instruct.h + $(V_GEN)tr -d '\r' < $< | \ + sed -e '/\/\*/d' \ + -e '/^#/d' \ + -e 's/enum /static char * names_of_/' \ + -e 's/{$$/[] = {/' \ + -e 's/\([[:upper:]][[:upper:]_0-9]*\)/"\1"/g' > $@ + +# runtime/caml/jumptbl.h is required only if you have GCC 2.0 or later +runtime/caml/jumptbl.h : runtime/caml/instruct.h + $(V_GEN)tr -d '\r' < $< | \ + sed -n -e '/^ /s/ \([A-Z]\)/ \&\&lbl_\1/gp' \ + -e '/^}/q' > $@ + +# These are provided as a temporary shim to allow cross-compilation systems +# to supply a host C compiler and different flags and a linking macro. +SAK_CC ?= $(CC) +SAK_CFLAGS ?= $(OC_CFLAGS) $(CFLAGS) $(OC_CPPFLAGS) $(CPPFLAGS) +SAK_LINK ?= $(MKEXE_VIA_CC) + +$(SAK): runtime/sak.$(O) + $(V_MKEXE)$(call SAK_LINK,$@,$^) + +runtime/sak.$(O): runtime/sak.c runtime/caml/misc.h runtime/caml/config.h + $(V_CC)$(SAK_CC) -c $(SAK_CFLAGS) $(OUTPUTOBJ)$@ $< + +C_LITERAL = $(shell $(SAK) encode-C-literal '$(1)') + +runtime/build_config.h: $(ROOTDIR)/Makefile.config $(SAK) + $(V_GEN)echo '/* This file is generated from $(ROOTDIR)/Makefile.config */' > $@ && \ + echo '#define OCAML_STDLIB_DIR $(call C_LITERAL,$(LIBDIR))' >> $@ && \ + echo '#define HOST "$(HOST)"' >> $@ + +## Runtime libraries and programs + +runtime/ocamlrun$(EXE): runtime/prims.$(O) runtime/libcamlrun.$(A) + $(V_MKEXE)$(MKEXE) -o $@ $^ $(BYTECCLIBS) + +runtime/ocamlruns$(EXE): runtime/prims.$(O) runtime/libcamlrun_non_shared.$(A) + $(V_MKEXE)$(call MKEXE_VIA_CC,$@,$^ $(BYTECCLIBS)) + +runtime/libcamlrun.$(A): $(libcamlrun_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libcamlrun_non_shared.$(A): $(libcamlrun_non_shared_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/ocamlrund$(EXE): runtime/prims.$(O) runtime/libcamlrund.$(A) + $(V_MKEXE)$(MKEXE) $(MKEXEDEBUGFLAG) -o $@ $^ $(BYTECCLIBS) + +runtime/libcamlrund.$(A): $(libcamlrund_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/ocamlruni$(EXE): runtime/prims.$(O) runtime/libcamlruni.$(A) + $(V_MKEXE)$(MKEXE) -o $@ $^ $(INSTRUMENTED_RUNTIME_LIBS) $(BYTECCLIBS) + +runtime/libcamlruni.$(A): $(libcamlruni_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libcamlrun_pic.$(A): $(libcamlrunpic_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libcamlrun_shared.$(SO): $(libcamlrunpic_OBJECTS) + $(V_MKDLL)$(MKDLL) -o $@ $^ $(BYTECCLIBS) + +runtime/libasmrun.$(A): $(libasmrun_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libasmrund.$(A): $(libasmrund_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libasmruni.$(A): $(libasmruni_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libasmrun_pic.$(A): $(libasmrunpic_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +runtime/libasmrun_shared.$(SO): $(libasmrunpic_OBJECTS) + $(V_MKDLL)$(MKDLL) -o $@ $^ $(NATIVECCLIBS) + +runtime/libcomprmarsh.$(A): $(libcomprmarsh_OBJECTS) + $(V_MKLIB)$(call MKLIB,$@, $^) + +## Runtime target-specific preprocessor and compiler flags + +runtime/%.$(O): OC_CPPFLAGS += $(runtime_CPPFLAGS) +$(DEPDIR)/runtime/%.$(D): OC_CPPFLAGS += $(runtime_CPPFLAGS) + +runtime/%.bd.$(O): OC_CPPFLAGS += $(ocamlrund_CPPFLAGS) +$(DEPDIR)/runtime/%.bd.$(D): OC_CPPFLAGS += $(ocamlrund_CPPFLAGS) + +runtime/%.bi.$(O): OC_CPPFLAGS += $(ocamlruni_CPPFLAGS) +$(DEPDIR)/runtime/%.bi.$(D): OC_CPPFLAGS += $(ocamlruni_CPPFLAGS) + +runtime/%.bpic.$(O): OC_CFLAGS += $(SHAREDLIB_CFLAGS) + +runtime/%.n.$(O): OC_CFLAGS += $(OC_NATIVE_CFLAGS) +runtime/%.n.$(O): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) +$(DEPDIR)/runtime/%.n.$(D): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) + +runtime/%.nd.$(O): OC_CFLAGS += $(OC_NATIVE_CFLAGS) +runtime/%.nd.$(O): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) $(ocamlrund_CPPFLAGS) +$(DEPDIR)/runtime/%.nd.$(D): \ + OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) $(ocamlrund_CPPFLAGS) + +runtime/%.ni.$(O): OC_CFLAGS += $(OC_NATIVE_CFLAGS) +runtime/%.ni.$(O): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) $(ocamlruni_CPPFLAGS) +$(DEPDIR)/runtime/%.ni.$(D): \ + OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) $(ocamlruni_CPPFLAGS) + +runtime/%.npic.$(O): OC_CFLAGS += $(OC_NATIVE_CFLAGS) $(SHAREDLIB_CFLAGS) +runtime/%.npic.$(O): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) +$(DEPDIR)/runtime/%.npic.$(D): OC_CPPFLAGS += $(OC_NATIVE_CPPFLAGS) + +## Compilation of runtime C files + +# The COMPILE_C_FILE macro below receives as argument the pattern +# that corresponds to the name of the generated object file +# (without the extension, which is added by the macro) +define COMPILE_C_FILE +ifeq "$(COMPUTE_DEPS)" "true" +ifneq "$(1)" "%" +# -MG would ensure that the dependencies are generated even if the files listed +# in $$(runtime_BUILT_HEADERS) haven't been assembled yet. However, +# this goes subtly wrong if the user has the headers installed, +# as gcc will pick up a dependency on those instead and the local +# ones will not be generated. For this reason, we don't use -MG and +# instead include $(runtime_BUILT_HEADERS) in the order only dependencies +# to ensure that they exist before dependencies are computed. +$(DEPDIR)/$(1).$(D): runtime/%.c | $(DEPDIR)/runtime $(runtime_BUILT_HEADERS) + $$(V_CCDEPS)$$(DEP_CC) $$(OC_CPPFLAGS) $$(CPPFLAGS) $$< -MT \ + 'runtime/$$*$(subst runtime/%,,$(1)).$(O)' -MF $$@ +endif # ifneq "$(1)" "%" +$(1).$(O): $(2).c +else +$(1).$(O): $(2).c \ + $(runtime_CONFIGURED_HEADERS) $(runtime_BUILT_HEADERS) \ + $(RUNTIME_HEADERS) +endif # ifeq "$(COMPUTE_DEPS)" "true" + $$(V_CC)$$(CC) -c $$(OC_CFLAGS) $$(CFLAGS) $$(OC_CPPFLAGS) $$(CPPFLAGS) \ + $$(OUTPUTOBJ)$$@ $$< +endef + +$(DEPDIR)/runtime: $(MKDIR) $@ + +runtime_OBJECT_TYPES = % %.b %.bd %.bi %.bpic +ifeq "$(NATIVE_COMPILER)" "true" +runtime_OBJECT_TYPES += %.n %.nd %.ni %.np %.npic +endif + +$(foreach runtime_OBJECT_TYPE, $(runtime_OBJECT_TYPES), \ + $(eval $(call COMPILE_C_FILE,runtime/$(runtime_OBJECT_TYPE),runtime/%))) + +runtime/$(UNIX_OR_WIN32)_non_shared.%.$(O): \ + OC_CPPFLAGS += -DBUILDING_LIBCAMLRUNS + +$(eval $(call COMPILE_C_FILE,runtime/$(UNIX_OR_WIN32)_non_shared.%, \ + runtime/$(UNIX_OR_WIN32))) + +$(foreach runtime_OBJECT_TYPE,$(subst %,,$(runtime_OBJECT_TYPES)), \ + $(eval \ + runtime/dynlink$(runtime_OBJECT_TYPE).$(O): $(ROOTDIR)/Makefile.config)) + +## Compilation of runtime assembly files + +ASPP_ERROR = \ + { echo "If your assembler produced syntax errors, it is probably";\ + echo "unhappy with the preprocessor. Check your assembler, or";\ + echo "try producing $*.o by hand.";\ + exit 2; } +runtime/%.o: runtime/%.S + $(V_ASM)$(ASPP) $(OC_ASPPFLAGS) -o $@ $< || $(ASPP_ERROR) + +runtime/%.d.o: runtime/%.S + $(V_ASM)$(ASPP) $(OC_ASPPFLAGS) $(ocamlrund_CPPFLAGS) -o $@ $< || $(ASPP_ERROR) + +runtime/%.i.o: runtime/%.S + $(V_ASM)$(ASPP) $(OC_ASPPFLAGS) $(ocamlruni_CPPFLAGS) -o $@ $< || $(ASPP_ERROR) + +runtime/%_libasmrunpic.o: runtime/%.S + $(V_ASM)$(ASPP) $(OC_ASPPFLAGS) $(SHAREDLIB_CFLAGS) -o $@ $< + +runtime/domain_state.inc: runtime/caml/domain_state.tbl + $(V_GEN)$(CPP) $< > $@ + +runtime/amd64nt.obj: runtime/amd64nt.asm runtime/domain_state.inc + $(V_ASM)$(ASM)$@ $< + +runtime/amd64nt.d.obj: runtime/amd64nt.asm runtime/domain_state.inc + $(V_ASM)$(ASM)$@ $(ocamlrund_CPPFLAGS) $< + +runtime/amd64nt.i.obj: runtime/amd64nt.asm runtime/domain_state.inc + $(V_ASM)$(ASM)$@ $(ocamlruni_CPPFLAGS) $< + +runtime/%_libasmrunpic.obj: runtime/%.asm + $(V_ASM)$(ASM)$@ $< + +## Runtime dependencies + +runtime_DEP_FILES := $(addsuffix .b, \ + $(basename $(runtime_BYTECODE_C_SOURCES) runtime/instrtrace)) +ifeq "$(NATIVE_COMPILER)" "true" +runtime_DEP_FILES += $(addsuffix .n, $(basename $(runtime_NATIVE_C_SOURCES))) +endif +runtime_DEP_FILES += $(addsuffix d, $(runtime_DEP_FILES)) \ + $(addsuffix i, $(runtime_DEP_FILES)) \ + $(addsuffix pic, $(runtime_DEP_FILES)) +runtime_DEP_FILES := $(addsuffix .$(D), $(runtime_DEP_FILES)) + +ifeq "$(COMPUTE_DEPS)" "true" +include $(addprefix $(DEPDIR)/, $(runtime_DEP_FILES)) endif +.PHONY: runtime +runtime: stdlib/libcamlrun.$(A) + .PHONY: makeruntime -makeruntime: - $(MAKE) -C runtime $(BOOT_FLEXLINK_CMD) all -runtime/libcamlrun.$(A): makeruntime ; -stdlib/libcamlrun.$(A): runtime/libcamlrun.$(A) +makeruntime: runtime-all +stdlib/libcamlrun.$(A): runtime-all cd stdlib; $(LN) ../runtime/libcamlrun.$(A) . clean:: - $(MAKE) -C runtime clean + rm -f $(addprefix runtime/, *.o *.obj *.a *.lib *.so *.dll ld.conf) + rm -f $(addprefix runtime/, ocamlrun ocamlrund ocamlruni ocamlruns sak) + rm -f $(addprefix runtime/, \ + ocamlrun.exe ocamlrund.exe ocamlruni.exe ocamlruns.exe sak.exe) + rm -f runtime/primitives runtime/primitives*.new runtime/prims.c \ + $(runtime_BUILT_HEADERS) + rm -f runtime/domain_state.inc + rm -rf $(DEPDIR) rm -f stdlib/libcamlrun.a stdlib/libcamlrun.lib -otherlibs_all := bigarray dynlink \ - str systhreads unix win32unix -subdirs := debugger lex ocamldoc ocamltest stdlib tools \ - $(addprefix otherlibs/, $(otherlibs_all)) \ - -.PHONY: alldepend -alldepend: depend - for dir in $(subdirs); do \ - $(MAKE) -C $$dir depend || exit; \ - done - -# The runtime system for the native-code compiler - .PHONY: runtimeopt runtimeopt: stdlib/libasmrun.$(A) .PHONY: makeruntimeopt -makeruntimeopt: - $(MAKE) -C runtime $(BOOT_FLEXLINK_CMD) allopt -runtime/libasmrun.$(A): makeruntimeopt ; -stdlib/libasmrun.$(A): runtime/libasmrun.$(A) - cp $< $@ +makeruntimeopt: runtime-allopt +stdlib/libasmrun.$(A): runtime-allopt + cd stdlib; $(LN) ../runtime/libasmrun.$(A) . +stdlib/libcomprmarsh.$(A): runtime/libcomprmarsh.$(A) + cd stdlib; $(LN) ../runtime/libcomprmarsh.$(A) . + clean:: rm -f stdlib/libasmrun.a stdlib/libasmrun.lib + rm -f stdlib/libcomprmarsh.a stdlib/libcomprmarsh.lib + +# Dependencies + +subdirs = stdlib $(addprefix otherlibs/, $(ALL_OTHERLIBS)) + +.PHONY: alldepend +alldepend: depend + for dir in $(subdirs); do \ + $(MAKE) -C $$dir depend || exit; \ + done # The standard library .PHONY: library library: ocamlc - $(MAKE) -C stdlib $(BOOT_FLEXLINK_CMD) all + $(MAKE) -C stdlib all .PHONY: library-cross library-cross: - $(MAKE) -C stdlib \ - $(BOOT_FLEXLINK_CMD) OCAMLRUN=../runtime/ocamlrun$(EXE) all + $(MAKE) -C stdlib OCAMLRUN=../runtime/ocamlrun$(EXE) all .PHONY: libraryopt libraryopt: - $(MAKE) -C stdlib $(BOOT_FLEXLINK_CMD) allopt + $(MAKE) -C stdlib allopt partialclean:: $(MAKE) -C stdlib clean -# The lexer and parser generators +# The lexer generator + +ocamllex_LIBRARIES = + +ocamllex_SOURCES = $(addprefix lex/,\ + cset.mli cset.ml \ + syntax.mli syntax.ml \ + parser.mly \ + lexer.mli lexer.mll \ + table.mli table.ml \ + lexgen.mli lexgen.ml \ + compact.mli compact.ml \ + common.mli common.ml \ + output.mli output.ml \ + outputbis.mli outputbis.ml \ + main.mli main.ml) + +.PHONY: lex-all +lex-all: lex/ocamllex + +.PHONY: lex-allopt +lex-allopt: lex/ocamllex.opt .PHONY: ocamllex ocamllex: ocamlyacc - $(MAKE) -C lex all + $(MAKE) lex-all .PHONY: ocamllex.opt ocamllex.opt: ocamlopt - $(MAKE) -C lex allopt + $(MAKE) lex-allopt + +lex/ocamllex$(EXE): OC_BYTECODE_LINKFLAGS += -compat-32 partialclean:: - $(MAKE) -C lex clean + rm -f lex/*.cm* lex/*.o lex/*.obj \ + $(ocamllex_PROGRAMS) $(ocamllex_PROGRAMS:=.exe) \ + lex/parser.ml lex/parser.mli lex/parser.output \ + lex/lexer.ml + +beforedepend:: lex/parser.ml lex/parser.mli lex/lexer.ml + +# The ocamlyacc parser generator + +ocamlyacc_OTHER_MODULES = $(addprefix yacc/,\ + closure error lalr lr0 main mkpar output reader skeleton symtab \ + verbose warshall) + +ocamlyacc_MODULES = $(ocamlyacc_WSTR_MODULE) $(ocamlyacc_OTHER_MODULES) + +ocamlyacc_OBJECTS = $(ocamlyacc_MODULES:=.$(O)) + +# Do not compile assertions in ocamlyacc +ocamlyacc_CPPFLAGS = -DNDEBUG .PHONY: ocamlyacc -ocamlyacc: - $(MAKE) -C yacc $(BOOT_FLEXLINK_CMD) all +ocamlyacc: $(ocamlyacc_PROGRAM)$(EXE) + +$(ocamlyacc_PROGRAM)$(EXE): $(ocamlyacc_OBJECTS) + $(V_MKEXE)$(MKEXE) -o $@ $^ clean:: - $(MAKE) -C yacc clean + rm -f $(ocamlyacc_MODULES:=.o) $(ocamlyacc_MODULES:=.obj) + +$(ocamlyacc_OTHER_MODULES:=.$(O)): yacc/defs.h + +$(ocamlyacc_OTHER_MODULES:=.$(O)): OC_CPPFLAGS += $(ocamlyacc_CPPFLAGS) # The Menhir-generated parser @@ -889,9 +1633,9 @@ include Makefile.menhir # generated parser.ml. parsing/camlinternalMenhirLib.ml: boot/menhir/menhirLib.ml - cp $< $@ + $(V_GEN)cp $< $@ parsing/camlinternalMenhirLib.mli: boot/menhir/menhirLib.mli - echo '[@@@ocaml.warning "-67"]' > $@ + $(V_GEN)echo '[@@@ocaml.warning "-67"]' > $@ && \ cat $< >> $@ # Copy parsing/parser.ml from boot/ @@ -906,9 +1650,9 @@ parsing/parser.ml: $(PARSER_DEPS) ifeq "$(OCAML_DEVELOPMENT_VERSION)" "true" @-tools/check-parser-uptodate-or-warn.sh endif - sed "s/MenhirLib/CamlinternalMenhirLib/g" $< > $@ + $(V_GEN)sed "s/MenhirLib/CamlinternalMenhirLib/g" $< > $@ parsing/parser.mli: boot/menhir/parser.mli - sed "s/MenhirLib/CamlinternalMenhirLib/g" $< > $@ + $(V_GEN)sed "s/MenhirLib/CamlinternalMenhirLib/g" $< > $@ beforedepend:: parsing/camlinternalMenhirLib.ml \ parsing/camlinternalMenhirLib.mli \ @@ -919,39 +1663,286 @@ partialclean:: partialclean-menhir # OCamldoc +# First define the odoc_info library used to build OCamldoc + +odoc_info_SOURCES = $(addprefix ocamldoc/,\ + odoc_config.mli odoc_config.ml \ + odoc_messages.mli odoc_messages.ml \ + odoc_global.mli odoc_global.ml \ + odoc_types.mli odoc_types.ml \ + odoc_misc.mli odoc_misc.ml \ + odoc_text_parser.mly \ + odoc_text_lexer.mli odoc_text_lexer.mll \ + odoc_text.mli odoc_text.ml \ + odoc_name.mli odoc_name.ml \ + odoc_parameter.mli odoc_parameter.ml \ + odoc_value.mli odoc_value.ml \ + odoc_type.mli odoc_type.ml \ + odoc_extension.mli odoc_extension.ml \ + odoc_exception.mli odoc_exception.ml \ + odoc_class.mli odoc_class.ml \ + odoc_module.mli odoc_module.ml \ + odoc_print.mli odoc_print.ml \ + odoc_str.mli odoc_str.ml \ + odoc_comments_global.mli odoc_comments_global.ml \ + odoc_parser.mly \ + odoc_lexer.mli odoc_lexer.mll \ + odoc_see_lexer.mli odoc_see_lexer.mll \ + odoc_env.mli odoc_env.ml \ + odoc_merge.mli odoc_merge.ml \ + odoc_sig.mli odoc_sig.ml \ + odoc_ast.mli odoc_ast.ml \ + odoc_search.mli odoc_search.ml \ + odoc_scan.mli odoc_scan.ml \ + odoc_cross.mli odoc_cross.ml \ + odoc_comments.mli odoc_comments.ml \ + odoc_dep.mli odoc_dep.ml \ + odoc_analyse.mli odoc_analyse.ml \ + odoc_info.mli odoc_info.ml) + +ocamldoc_LIBRARIES = \ + compilerlibs/ocamlcommon \ + $(addprefix otherlibs/,\ + unix/unix \ + str/str \ + dynlink/dynlink) \ + ocamldoc/odoc_info + +ocamldoc_SOURCES = $(addprefix ocamldoc/,\ + odoc_dag2html.mli odoc_dag2html.ml \ + odoc_to_text.mli odoc_to_text.ml \ + odoc_ocamlhtml.mli odoc_ocamlhtml.mll \ + odoc_html.mli odoc_html.ml \ + odoc_man.mli odoc_man.ml \ + odoc_latex_style.mli odoc_latex_style.ml \ + odoc_latex.mli odoc_latex.ml \ + odoc_texi.mli odoc_texi.ml \ + odoc_dot.mli odoc_dot.ml \ + odoc_gen.mli odoc_gen.ml \ + odoc_args.mli odoc_args.ml \ + odoc.mli odoc.ml) + +# OCamldoc files to install (a subset of what is built) + +OCAMLDOC_LIBMLIS = $(addprefix ocamldoc/,$(addsuffix .mli,\ + odoc_dep odoc_dot odoc_extension odoc_html odoc_info odoc_latex \ + odoc_latex_style odoc_man odoc_messages odoc_ocamlhtml odoc_parameter \ + odoc_texi odoc_text_lexer odoc_to_text odoc_type odoc_value)) +OCAMLDOC_LIBCMIS=$(OCAMLDOC_LIBMLIS:.mli=.cmi) +OCAMLDOC_LIBCMTS=$(OCAMLDOC_LIBMLIS:.mli=.cmt) $(OCAMLDOC_LIBMLIS:.mli=.cmti) + +ocamldoc/%: CAMLC = $(BEST_OCAMLC) $(STDLIBFLAGS) + +ocamldoc/%: CAMLOPT = $(BEST_OCAMLOPT) $(STDLIBFLAGS) + .PHONY: ocamldoc -ocamldoc: ocamlc ocamlyacc ocamllex otherlibraries - $(MAKE) -C ocamldoc all +ocamldoc: ocamldoc/ocamldoc$(EXE) ocamldoc/odoc_test.cmo + +ocamldoc/ocamldoc$(EXE): ocamlc ocamlyacc ocamllex .PHONY: ocamldoc.opt -ocamldoc.opt: ocamlc.opt ocamlyacc ocamllex - $(MAKE) -C ocamldoc opt.opt +ocamldoc.opt: ocamldoc/ocamldoc.opt$(EXE) + +ocamldoc/ocamldoc.opt$(EXE): ocamlopt ocamlyacc ocamllex # OCamltest -ocamltest: ocamlc ocamlyacc ocamllex otherlibraries - $(MAKE) -C ocamltest all -ocamltest.opt: ocamlc.opt ocamlyacc ocamllex - $(MAKE) -C ocamltest allopt +ifeq "$(build_ocamltest)" "true" + +# Libraries ocamltest depends on + +ocamltest_LIBRARIES = \ + $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) \ + $(unix_library) + +# List of source files from which ocamltest is compiled +# (all the different sorts of files are derived from this) + +# ocamltest has two components: its core and the OCaml "plugin" +# which is actually built into the tool but clearly separated from its core + +ocamltest_CORE = \ + run_$(UNIX_OR_WIN32).c run_stubs.c \ + ocamltest_config.ml.in ocamltest_config.mli \ + ocamltest_unix.mli ocamltest_unix.ml \ + ocamltest_stdlib.mli ocamltest_stdlib.ml \ + run_command.mli run_command.ml \ + filecompare.mli filecompare.ml \ + variables.mli variables.ml \ + environments.mli environments.ml \ + result.mli result.ml \ + actions.mli actions.ml \ + tests.mli tests.ml \ + strace.mli strace.ml \ + tsl_ast.mli tsl_ast.ml \ + tsl_parser.mly \ + tsl_lexer.mli tsl_lexer.mll \ + modifier_parser.mli modifier_parser.ml \ + tsl_semantics.mli tsl_semantics.ml \ + builtin_variables.mli builtin_variables.ml \ + actions_helpers.mli actions_helpers.ml \ + builtin_actions.mli builtin_actions.ml \ + translate.mli translate.ml + +ocamltest_ocaml_PLUGIN = \ + ocaml_backends.mli ocaml_backends.ml \ + ocaml_filetypes.mli ocaml_filetypes.ml \ + ocaml_variables.mli ocaml_variables.ml \ + ocaml_modifiers.mli ocaml_modifiers.ml \ + ocaml_directories.mli ocaml_directories.ml \ + ocaml_files.mli ocaml_files.ml \ + ocaml_flags.mli ocaml_flags.ml \ + ocaml_commands.mli ocaml_commands.ml \ + ocaml_tools.mli ocaml_tools.ml \ + ocaml_compilers.mli ocaml_compilers.ml \ + ocaml_toplevels.mli ocaml_toplevels.ml \ + ocaml_actions.mli ocaml_actions.ml \ + ocaml_tests.mli ocaml_tests.ml + +ocamltest_SOURCES = $(addprefix ocamltest/, \ + $(ocamltest_CORE) $(ocamltest_ocaml_PLUGIN) \ + options.mli options.ml \ + main.mli main.ml) + +$(eval $(call COMPILE_C_FILE,ocamltest/%.b,ocamltest/%)) +$(eval $(call COMPILE_C_FILE,ocamltest/%.n,ocamltest/%)) + +ifeq "$(COMPUTE_DEPS)" "true" +include $(addprefix $(DEPDIR)/, $(ocamltest_C_FILES:.c=.$(D))) +endif -partialclean:: - $(MAKE) -C ocamltest clean +ocamltest_DEP_FILES = $(addprefix $(DEPDIR)/, $(ocamltest_C_FILES:.c=.$(D))) -# Documentation +$(ocamltest_DEP_FILES): | $(DEPDIR)/ocamltest -.PHONY: html_doc -html_doc: ocamldoc - $(MAKE) -C api_docgen html +$(DEPDIR)/ocamltest: + $(MKDIR) $@ -.PHONY: manpages -manpages: - $(MAKE) -C api_docgen man +$(ocamltest_DEP_FILES): $(DEPDIR)/ocamltest/%.$(D): ocamltest/%.c + $(V_CCDEPS)$(DEP_CC) $(OC_CPPFLAGS) $(CPPFLAGS) $< -MT '$*.$(O)' -MF $@ -partialclean:: - $(MAKE) -C ocamldoc clean +ocamltest/%: CAMLC = $(BEST_OCAMLC) $(STDLIBFLAGS) -partialclean:: - $(MAKE) -C api_docgen clean +ocamltest/%: CAMLOPT = $(BEST_OCAMLOPT) $(STDLIBFLAGS) + +ocamltest: ocamltest/ocamltest$(EXE) \ + testsuite/lib/lib.cmo testsuite/lib/testing.cma testsuite/tools/expect$(EXE) + +testsuite/lib/%: VPATH += testsuite/lib + +testing_SOURCES = testsuite/lib/testing.mli testsuite/lib/testing.ml +testing_LIBRARIES = + +$(addprefix testsuite/lib/testing., cma cmxa): \ + OC_COMMON_LINKFLAGS += -linkall + +testsuite/tools/%: VPATH += testsuite/tools + +expect_SOURCES = $(addprefix testsuite/tools/,expect.mli expect.ml) +expect_LIBRARIES = $(addprefix compilerlibs/,\ + ocamlcommon ocamlbytecomp ocamltoplevel) + +testsuite/tools/expect$(EXE): OC_BYTECODE_LINKFLAGS += -linkall + +codegen_SOURCES = $(addprefix testsuite/tools/,\ + parsecmmaux.mli parsecmmaux.ml \ + parsecmm.mly \ + lexcmm.mli lexcmm.mll \ + codegen_main.mli codegen_main.ml) +codegen_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamloptcomp) + +# The asmgen tests are not ported to MSVC64 yet, so make sure +# to compile the arch specific module they require only if necessary +ifeq "$(CCOMPTYPE)-$(ARCH)" "msvc-amd64" +asmgen_OBJECT = +else +asmgen_MODULE = testsuite/tools/asmgen_$(ARCH) +asmgen_SOURCE = $(asmgen_MODULE).S +asmgen_OBJECT = $(asmgen_MODULE).$(O) +$(asmgen_OBJECT): $(asmgen_SOURCE) + $(V_ASM)$(ASPP) $(OC_ASPPFLAGS) -o $@ $< || $(ASPP_ERROR) +endif + +ocamltest/ocamltest$(EXE): OC_BYTECODE_LINKFLAGS += -custom + +ocamltest/ocamltest$(EXE): ocamlc ocamlyacc ocamllex + +ocamltest.opt: ocamltest/ocamltest.opt$(EXE) \ + testsuite/lib/testing.cmxa $(asmgen_OBJECT) testsuite/tools/codegen$(EXE) + +ocamltest/ocamltest.opt$(EXE): ocamlopt ocamlyacc ocamllex + +# ocamltest does _not_ want to have access to the Unix interface by default, +# to ensure functions and types are only used via Ocamltest_stdlib.Unix +# (see #9797) +ocamltest/%: \ + VPATH := $(filter-out $(unix_directory), $(VPATH)) + +# Ocamltest_unix and the linking of the executable itself should include the +# Unix library, if it's being built. +ocamltest/ocamltest_unix.% \ +ocamltest/ocamltest$(EXE) ocamltest/ocamltest.opt$(EXE): \ + VPATH += $(unix_directory) + +# For flambda mode, it is necessary for Ocamltest_unix to be compiled with +# -opaque to prevent errors compiling the other modules of ocamltest. +ocamltest/ocamltest_unix.%: \ + OC_COMMON_COMPFLAGS += -opaque +else # ifeq "$(build_ocamltest)" "true" +ocamltest_TARGETS = ocamltest ocamltest.opt +.PHONY: $(ocamltest_TARGETS) +$(ocamltest_TARGETS): + @echo ocamltest is disabled + @echo To build it, run configure again with --enable-ocamltest + @false +endif # ifeq "$(build_ocamltest)" "true" + +partialclean:: + rm -f ocamltest/ocamltest ocamltest/ocamltest.exe + rm -f ocamltest/ocamltest.opt ocamltest/ocamltest.opt.exe + rm -f $(addprefix ocamltest/,*.o *.obj *.cm*) + rm -f $(patsubst %.mll,%.ml, $(wildcard ocamltest/*.mll)) + rm -f $(patsubst %.mly,%.ml, $(wildcard ocamltest/*.mly)) + rm -f $(patsubst %.mly,%.mli, $(wildcard ocamltest/*.mly)) + rm -f $(patsubst %.mly,%.output, $(wildcard ocamltest/*.mly)) + rm -f ocamltest/ocamltest.html + rm -f $(addprefix testsuite/lib/*.,cm* o obj a lib) + rm -f $(addprefix testsuite/tools/*.,cm* o obj a lib) + rm -f testsuite/tools/codegen testsuite/tools/codegen.exe + rm -f testsuite/tools/expect testsuite/tools/expect.exe + rm -f testsuite/tools/lexcmm.ml + rm -f $(addprefix testsuite/tools/parsecmm., ml mli output) + +# Documentation + +.PHONY: html_doc +html_doc: ocamldoc + $(MAKE) -C api_docgen html + +.PHONY: manpages +manpages: + $(MAKE) -C api_docgen man + +partialclean:: + rm -f ocamldoc/\#*\# + rm -f ocamldoc/*.cm[aiotx] ocamldoc/*.cmxa ocamldoc/*.cmti \ + ocamldoc/*.a ocamldoc/*.lib ocamldoc/*.o ocamldoc/*.obj + rm -f ocamldoc/odoc_parser.output ocamldoc/odoc_text_parser.output + rm -f ocamldoc/odoc_lexer.ml ocamldoc/odoc_text_lexer.ml \ + ocamldoc/odoc_see_lexer.ml ocamldoc/odoc_ocamlhtml.ml + rm -f ocamldoc/odoc_parser.ml ocamldoc/odoc_parser.mli \ + ocamldoc/odoc_text_parser.ml ocamldoc/odoc_text_parser.mli + +partialclean:: + $(MAKE) -C api_docgen clean + +# The OCamltest manual + +.PHONY: ocamltest-manual +ocamltest-manual: ocamltest/ocamltest.html + +ocamltest/ocamltest.html: ocamltest/ocamltest.org + pandoc -s --toc -N -f org -t html -o $@ $< # The extra libraries @@ -963,6 +1954,10 @@ otherlibraries: ocamltools otherlibrariesopt: $(MAKE) -C otherlibs allopt +otherlibs/unix/unix.cmxa: otherlibrariesopt +otherlibs/dynlink/dynlink.cmxa: otherlibrariesopt +otherlibs/str/str.cmxa: otherlibrariesopt + partialclean:: $(MAKE) -C otherlibs partialclean @@ -971,17 +1966,103 @@ clean:: # The replay debugger -.PHONY: ocamldebugger -ocamldebugger: ocamlc ocamlyacc ocamllex otherlibraries - $(MAKE) -C debugger all +ocamldebug_LIBRARIES = compilerlibs/ocamlcommon \ + $(addprefix otherlibs/,unix/unix dynlink/dynlink) + +# The following dependencies are necessary at the moment, because the +# root Makefile does not know yet how to build the other libraries +# Once their build will happen in this root Makefile, too, it will become +# possible to get rid of these dependencies + +otherlibs/unix/unix.cma: otherlibraries +otherlibs/dynlink/dynlink.cma: otherlibraries +otherlibs/str/str.cma: otherlibraries + +debugger/%: VPATH += otherlibs/unix otherlibs/dynlink + +ocamldebug_COMPILER_SOURCES = $(addprefix toplevel/, \ + genprintval.mli genprintval.ml \ + topprinters.mli topprinters.ml) + +# The modules listed in the following variable are packed into ocamldebug.cmo + +ocamldebug_DEBUGGER_SOURCES = $(addprefix debugger/,\ + int64ops.mli int64ops.ml \ + primitives.mli primitives.ml \ + unix_tools.mli unix_tools.ml \ + debugger_config.mli debugger_config.ml \ + parameters.mli parameters.ml \ + debugger_lexer.mli debugger_lexer.mll \ + input_handling.mli input_handling.ml \ + question.mli question.ml \ + debugcom.mli debugcom.ml \ + exec.mli exec.ml \ + source.mli source.ml \ + pos.mli pos.ml \ + checkpoints.mli checkpoints.ml \ + events.mli events.ml \ + program_loading.mli program_loading.ml \ + symbols.mli symbols.ml \ + breakpoints.mli breakpoints.ml \ + trap_barrier.mli trap_barrier.ml \ + history.mli history.ml \ + printval.mli printval.ml \ + show_source.mli show_source.ml \ + time_travel.mli time_travel.ml \ + program_management.mli program_management.ml \ + frames.mli frames.ml \ + eval.mli eval.ml \ + show_information.mli show_information.ml \ + loadprinter.mli loadprinter.ml \ + debugger_parser.mly \ + command_line.mli command_line.ml \ + main.mli main.ml) + +ocamldebug_DEBUGGER_OBJECTS = \ + $(patsubst %.ml, %.cmo, \ + $(patsubst %.mll, %.cmo, \ + $(patsubst %.mly, %.cmo, \ + $(filter-out %.mli, $(ocamldebug_DEBUGGER_SOURCES))))) + +ocamldebug_SOURCES = \ + $(ocamldebug_COMPILER_SOURCES) \ + $(addprefix debugger/, \ + ocamldebug.ml \ + ocamldebug_entry.mli ocamldebug_entry.ml) + +debugger/%: OC_BYTECODE_LINKFLAGS = -linkall + +debugger/%: CAMLC = $(BEST_OCAMLC) $(STDLIBFLAGS) + +.PHONY: ocamldebug ocamldebugger +ocamldebug: debugger/ocamldebug$(EXE) +ocamldebugger: debugger/ocamldebug$(EXE) +# the 'ocamldebugger' target is an alias of 'ocamldebug' for +# backward-compatibility with old ./configure scripts; it can be +# removed after most contributors have re-run ./configure once, for +# example after 5.2 is branched + +debugger/ocamldebug$(EXE): ocamlc ocamlyacc ocamllex + +$(ocamldebug_DEBUGGER_OBJECTS): OC_COMMON_COMPFLAGS += -for-pack ocamldebug +debugger/ocamldebug.cmo: $(ocamldebug_DEBUGGER_OBJECTS) + $(V_OCAMLC)$(CAMLC) $(OC_COMMON_COMPFLAGS) -pack -o $@ $^ + +debugger/ocamldebug_entry.cmo: debugger/ocamldebug.cmo -partialclean:: - $(MAKE) -C debugger clean +clean:: + rm -f debugger/ocamldebug debugger/ocamldebug.exe + rm -f debugger/debugger_lexer.ml + rm -f $(addprefix debugger/debugger_parser.,ml mli output) + +beforedepend:: debugger/debugger_lexer.ml + +beforedepend:: debugger/debugger_parser.ml debugger/debugger_parser.mli # Check that the native-code compiler is supported .PHONY: checknative checknative: -ifneq "$(NATIVE_COMPILER)" "true" +ifeq "$(NATIVE_COMPILER)" "false" $(error The source tree was configured with --disable-native-compiler!) else ifeq "$(ARCH)" "none" @@ -999,7 +2080,7 @@ checkstack: tools/checkstack$(EXE) .INTERMEDIATE: tools/checkstack$(EXE) tools/checkstack.$(O) tools/checkstack$(EXE): tools/checkstack.$(O) - $(MAKE) -C tools $(BOOT_FLEXLINK_CMD) checkstack$(EXE) + $(V_MKEXE)$(MKEXE) $(OUTPUTEXE)$@ $< else checkstack: @ @@ -1007,36 +2088,228 @@ endif # Lint @since and @deprecated annotations +lintapidiff_LIBRARIES = \ + $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) \ + otherlibs/str/str +lintapidiff_SOURCES = tools/lintapidiff.mli tools/lintapidiff.ml + +tools/lintapidiff.opt$(EXE): VPATH += otherlibs/str + VERSIONS=$(shell git tag|grep '^[0-9]*.[0-9]*.[0-9]*$$'|grep -v '^[12].') .PHONY: lintapidiff -lintapidiff: - $(MAKE) -C tools lintapidiff.opt +lintapidiff: tools/lintapidiff.opt$(EXE) git ls-files -- 'otherlibs/*/*.mli' 'stdlib/*.mli' |\ grep -Ev internal\|obj\|stdLabels\|moreLabels |\ tools/lintapidiff.opt $(VERSIONS) # Tools +TOOLS_BYTECODE_TARGETS = \ + $(TOOLS_NAT_PROGRAMS) $(TOOLS_BYT_PROGRAMS) $(TOOLS_MODULES:=.cmo) + +TOOLS_NATIVE_TARGETS = $(TOOLS_MODULES:=.cmx) + +TOOLS_OPT_TARGETS = $(TOOLS_NAT_PROGRAMS:=.opt) + .PHONY: ocamltools -ocamltools: ocamlc ocamllex compilerlibs/ocamlmiddleend.cma - $(MAKE) -C tools all +ocamltools: ocamlc ocamllex + $(MAKE) tools-all + +.PHONY: tools-all +tools-all: $(TOOLS_BYTECODE_TARGETS) + +.PHONY: tools-allopt +tools-allopt: $(TOOLS_NATIVE_TARGETS) + +.PHONY: tools-allopt.opt +tools-allopt.opt: $(TOOLS_OPT_TARGETS) .PHONY: ocamltoolsopt ocamltoolsopt: ocamlopt - $(MAKE) -C tools opt + $(MAKE) tools-allopt .PHONY: ocamltoolsopt.opt -ocamltoolsopt.opt: ocamlc.opt ocamllex.opt compilerlibs/ocamlmiddleend.cmxa - $(MAKE) -C tools opt.opt +ocamltoolsopt.opt: ocamlc.opt ocamllex.opt + $(MAKE) tools-allopt.opt + +# Tools that require a full ocaml distribution: otherlibs and toplevel + +OTHER_TOOLS = + +ocamltex = tools/ocamltex$(EXE) + +ifeq "$(build_ocamltex)" "true" +OTHER_TOOLS += $(ocamltex) +endif + +.PHONY: othertools +othertools: $(OTHER_TOOLS) partialclean:: - $(MAKE) -C tools clean + for prefix in cm* dll so lib a obj; do \ + rm -f tools/*.$$prefix; \ + done + +# The dependency generator + +ocamldep_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) +ocamldep_SOURCES = tools/ocamldep.mli tools/ocamldep.ml + +tools/ocamldep$(EXE): OC_BYTECODE_LINKFLAGS += -compat-32 + +# The profiler + +ocamlprof_LIBRARIES = +ocamlprof_SOURCES = \ + config.mli config.ml \ + build_path_prefix_map.mli build_path_prefix_map.ml \ + misc.mli misc.ml \ + identifiable.mli identifiable.ml \ + numbers.mli numbers.ml \ + arg_helper.mli arg_helper.ml \ + local_store.mli local_store.ml \ + load_path.mli load_path.ml \ + clflags.mli clflags.ml \ + terminfo.mli terminfo.ml \ + warnings.mli warnings.ml \ + location.mli location.ml \ + longident.mli longident.ml \ + docstrings.mli docstrings.ml \ + syntaxerr.mli syntaxerr.ml \ + ast_helper.mli ast_helper.ml \ + ast_iterator.mli ast_iterator.ml \ + builtin_attributes.mli builtin_attributes.ml \ + camlinternalMenhirLib.mli camlinternalMenhirLib.ml \ + parser.mli parser.ml \ + lexer.mli lexer.ml \ + pprintast.mli pprintast.ml \ + parse.mli parse.ml \ + ocamlprof.mli ocamlprof.ml + +ocamlcp_ocamloptp_SOURCES = \ + config.mli config.ml \ + build_path_prefix_map.mli build_path_prefix_map.ml \ + misc.mli misc.ml \ + profile.mli profile.ml \ + warnings.mli warnings.ml \ + identifiable.mli identifiable.ml \ + numbers.mli numbers.ml \ + arg_helper.mli arg_helper.ml \ + local_store.mli local_store.ml \ + load_path.mli load_path.ml \ + clflags.mli clflags.ml \ + terminfo.mli terminfo.ml \ + location.mli location.ml \ + ccomp.mli ccomp.ml \ + compenv.mli compenv.ml \ + main_args.mli main_args.ml \ + ocamlcp_common.mli ocamlcp_common.ml + +ocamlcp_LIBRARIES = +ocamlcp_SOURCES = $(ocamlcp_ocamloptp_SOURCES) ocamlcp.mli ocamlcp.ml + +ocamloptp_LIBRARIES = +ocamloptp_SOURCES = $(ocamlcp_ocamloptp_SOURCES) ocamloptp.mli ocamloptp.ml + +# To help building mixed-mode libraries (OCaml + C) +ocamlmklib_LIBRARIES = +ocamlmklib_SOURCES = \ + config.ml \ + build_path_prefix_map.ml \ + misc.ml \ + ocamlmklib.mli ocamlmklib.ml + +# To make custom toplevels + +ocamlmktop_LIBRARIES = +ocamlmktop_SOURCES = \ + config.mli config.ml \ + build_path_prefix_map.mli build_path_prefix_map.ml \ + misc.mli misc.ml \ + identifiable.mli identifiable.ml \ + numbers.mli numbers.ml \ + arg_helper.mli arg_helper.ml \ + local_store.mli local_store.ml \ + load_path.mli load_path.ml \ + clflags.mli clflags.ml \ + profile.mli profile.ml \ + ccomp.mli ccomp.ml \ + ocamlmktop.mli ocamlmktop.ml + +# Reading cmt files + +ocamlcmt_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) +ocamlcmt_SOURCES = tools/ocamlcmt.mli tools/ocamlcmt.ml + +# The bytecode disassembler + +dumpobj_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) +dumpobj_SOURCES = $(addprefix tools/, \ + opnames.mli opnames.ml \ + dumpobj.mli dumpobj.ml) + +make_opcodes = tools/make_opcodes$(EXE) + +make_opcodes_LIBRARIES = +make_opcodes_SOURCES = tools/make_opcodes.mli tools/make_opcodes.mll + +tools/opnames.ml: runtime/caml/instruct.h $(make_opcodes) + $(V_GEN)$(NEW_OCAMLRUN) $(make_opcodes) -opnames < $< > $@ + +clean:: + rm -f $(addprefix tools/,opnames.ml make_opcodes.ml) + +beforedepend:: $(addprefix tools/,opnames.ml make_opcodes.ml) + +# Display info on compiled files + +ocamlobjinfo_LIBRARIES = \ + $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp ocamlmiddleend) +ocamlobjinfo_SOURCES = tools/objinfo.mli tools/objinfo.ml + +# Scan object files for required primitives + +primreq_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) +primreq_SOURCES = tools/primreq.mli tools/primreq.ml + +# Copy a bytecode executable, stripping debug info + +stripdebug_LIBRARIES = \ + $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) +stripdebug_SOURCES = tools/stripdebug.mli tools/stripdebug.ml + +# Compare two bytecode executables +cmpbyt_LIBRARIES = $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp) +cmpbyt_SOURCES = tools/cmpbyt.mli tools/cmpbyt.ml + +# Scan latex files, and run ocaml code examples + +ocamltex_LIBRARIES = \ + $(addprefix compilerlibs/,ocamlcommon ocamlbytecomp ocamltoplevel) \ + $(addprefix otherlibs/,str/str unix/unix) +ocamltex_SOURCES = tools/ocamltex.mli tools/ocamltex.ml + +# ocamltex uses str.cma and unix.cma and so must be compiled with +# $(ROOTDIR)/ocamlc rather than with $(ROOTDIR)/boot/ocamlc since the boot +# compiler does not necessarily have the correct shared library +# configuration. +# Note: the following definitions apply to all the prerequisites +# of ocamltex. +$(ocamltex): CAMLC = $(OCAMLRUN) $(ROOTDIR)/ocamlc$(EXE) $(STDLIBFLAGS) +$(ocamltex): OC_COMMON_LINKFLAGS += -linkall +$(ocamltex): VPATH += $(addprefix otherlibs/,str unix) + +tools/ocamltex.cmo: OC_COMMON_COMPFLAGS += -no-alias-deps + +# we need str and unix which depend on the bytecode version of other tools +# thus we use the othertools target ## Test compilation of backend-specific parts ARCH_SPECIFIC =\ - asmcomp/arch.ml asmcomp/proc.ml asmcomp/CSE.ml asmcomp/selection.ml \ - asmcomp/scheduling.ml asmcomp/reload.ml + asmcomp/arch.mli asmcomp/arch.ml asmcomp/proc.ml asmcomp/CSE.ml \ + asmcomp/selection.ml asmcomp/scheduling.ml asmcomp/reload.ml \ + asmcomp/stackframe.ml partialclean:: rm -f $(ARCH_SPECIFIC) @@ -1068,27 +2341,26 @@ endif # The native toplevel -ocamlnat_dependencies := \ - compilerlibs/ocamlcommon.cmxa \ - compilerlibs/ocamloptcomp.cmxa \ - compilerlibs/ocamlbytecomp.cmxa \ - otherlibs/dynlink/dynlink.cmxa \ - compilerlibs/ocamltoplevel.cmxa \ - $(TOPLEVELSTART:.cmo=.cmx) +ocamlnat_LIBRARIES = \ + compilerlibs/ocamlcommon compilerlibs/ocamloptcomp \ + compilerlibs/ocamlbytecomp otherlibs/dynlink/dynlink \ + compilerlibs/ocamltoplevel -ocamlnat$(EXE): $(ocamlnat_dependencies) - $(CAMLOPT_CMD) $(LINKFLAGS) -linkall -I toplevel/native -o $@ $^ +ocamlnat_SOURCES = $(ocaml_SOURCES) -toplevel/topdirs.cmx: toplevel/topdirs.ml - $(CAMLOPT_CMD) $(COMPFLAGS) $(OPTCOMPFLAGS) -I toplevel/native -c $< +ocamlnat$(EXE): OC_NATIVE_LINKFLAGS += -linkall -I toplevel/native -$(TOPLEVELINIT:.cmo=.cmx): $(TOPLEVELINIT:.cmo=.ml) \ - toplevel/native/topeval.cmx - $(CAMLOPT_CMD) $(COMPFLAGS) $(OPTCOMPFLAGS) -I toplevel/native -c $< +COMPILE_NATIVE_MODULE = \ + $(CAMLOPT) $(OC_COMMON_COMPFLAGS) -I $(@D) $(INCLUDES) \ + $(OC_NATIVE_COMPFLAGS) -$(TOPLEVELSTART:.cmo=.cmx): $(TOPLEVELSTART:.cmo=.ml) \ - toplevel/native/topmain.cmx - $(CAMLOPT_CMD) $(COMPFLAGS) $(OPTCOMPFLAGS) -I toplevel/native -c $< + +toplevel/topdirs.cmx toplevel/toploop.cmx $(ocamlnat_CMX_FILES): \ + OC_NATIVE_COMPFLAGS += -I toplevel/native + +toplevel/toploop.cmx: toplevel/native/topeval.cmx + +$(ocamlnat_CMX_FILES): toplevel/native/topmain.cmx partialclean:: rm -f ocamlnat ocamlnat.exe @@ -1097,16 +2369,11 @@ toplevel/native/topeval.cmx: otherlibs/dynlink/dynlink.cmxa # The numeric opcodes -make_opcodes := tools/make_opcodes$(EXE) - bytecomp/opcodes.ml: runtime/caml/instruct.h $(make_opcodes) - $(NEW_OCAMLRUN) $(make_opcodes) -opcodes < $< > $@ + $(V_GEN)$(NEW_OCAMLRUN) $(make_opcodes) -opcodes < $< > $@ bytecomp/opcodes.mli: bytecomp/opcodes.ml - $(CAMLC) -i $< > $@ - -$(make_opcodes): tools/make_opcodes.mll - $(MAKE) -C tools make_opcodes + $(V_GEN)$(CAMLC) -i $< > $@ partialclean:: rm -f bytecomp/opcodes.ml @@ -1121,50 +2388,348 @@ endif # Default rules %.cmo: %.ml - $(CAMLC) $(COMPFLAGS) -c $< -I $(@D) + $(V_OCAMLC)$(CAMLC) $(OC_COMMON_COMPFLAGS) -I $(@D) $(INCLUDES) -c $< %.cmi: %.mli - $(CAMLC) $(COMPFLAGS) -c $< + $(V_OCAMLC)$(CAMLC) $(OC_COMMON_COMPFLAGS) -I $(@D) $(INCLUDES) -c $< %.cmx: %.ml - $(CAMLOPT) $(COMPFLAGS) $(OPTCOMPFLAGS) -c $< -I $(@D) + $(V_OCAMLOPT)$(COMPILE_NATIVE_MODULE) -c $< partialclean:: for d in utils parsing typing bytecomp asmcomp middle_end file_formats \ lambda middle_end/closure middle_end/flambda \ middle_end/flambda/base_types \ - driver toplevel toplevel/byte toplevel/native tools; do \ + driver toplevel toplevel/byte toplevel/native tools debugger; do \ rm -f $$d/*.cm[ioxt] $$d/*.cmti $$d/*.annot $$d/*.s $$d/*.asm \ $$d/*.o $$d/*.obj $$d/*.so $$d/*.dll; \ done .PHONY: depend depend: beforedepend - (for d in utils parsing typing bytecomp asmcomp middle_end \ + $(V_GEN)for d in utils parsing typing bytecomp asmcomp middle_end \ lambda file_formats middle_end/closure middle_end/flambda \ middle_end/flambda/base_types \ - driver toplevel toplevel/byte toplevel/native; \ + driver toplevel toplevel/byte toplevel/native lex tools debugger \ + ocamldoc ocamltest testsuite/lib testsuite/tools; \ do \ - $(CAMLDEP) $(DEPFLAGS) -I $$d $(DEPINCLUDES) $$d/*.mli $$d/*.ml \ + $(OCAMLDEP) $(OC_OCAMLDEPFLAGS) -I $$d $(INCLUDES) \ + $(OCAMLDEPFLAGS) $$d/*.mli $$d/*.ml \ || exit; \ - done) > .depend + done > .depend .PHONY: distclean distclean: clean + if [ -f flexdll/Makefile ]; then $(MAKE) -C flexdll distclean MSVC_DETECT=0; fi $(MAKE) -C manual distclean - $(MAKE) -C runtime distclean + rm -f ocamldoc/META + rm -f $(addprefix ocamltest/,ocamltest_config.ml ocamltest_unix.ml) + $(MAKE) -C otherlibs distclean + rm -f $(runtime_CONFIGURED_HEADERS) $(MAKE) -C stdlib distclean - rm -f boot/ocamlrun boot/ocamlrun.exe boot/camlheader \ - boot/ocamlruns boot/ocamlruns.exe \ - boot/flexlink.byte boot/flexlink.byte.exe \ + $(MAKE) -C testsuite distclean + rm -f tools/eventlog_metadata tools/*.bak + rm -f utils/config.common.ml utils/config.generated.ml + rm -f compilerlibs/META + rm -f boot/ocamlrun boot/ocamlrun.exe boot/$(HEADER_NAME) \ boot/flexdll_*.o boot/flexdll_*.obj \ boot/*.cm* boot/libcamlrun.a boot/libcamlrun.lib boot/ocamlc.opt rm -f Makefile.config Makefile.build_config - rm -rf autom4te.cache flexdll-sources + rm -rf autom4te.cache flexdll-sources $(BYTE_BUILD_TREE) $(OPT_BUILD_TREE) rm -f config.log config.status libtool - rm -f tools/eventlog_metadata - rm -f tools/*.bak - rm -f testsuite/_log* + +# Installation +.PHONY: install +install: + $(MKDIR) "$(INSTALL_BINDIR)" + $(MKDIR) "$(INSTALL_LIBDIR)" + $(MKDIR) "$(INSTALL_STUBLIBDIR)" + $(MKDIR) "$(INSTALL_COMPLIBDIR)" + $(MKDIR) "$(INSTALL_DOCDIR)" + $(MKDIR) "$(INSTALL_INCDIR)" + $(MKDIR) "$(INSTALL_LIBDIR_PROFILING)" + $(INSTALL_PROG) $(runtime_PROGRAMS) "$(INSTALL_BINDIR)" + $(INSTALL_DATA) $(runtime_BYTECODE_STATIC_LIBRARIES) \ + "$(INSTALL_LIBDIR)" +ifneq "$(runtime_BYTECODE_SHARED_LIBRARIES)" "" + $(INSTALL_PROG) $(runtime_BYTECODE_SHARED_LIBRARIES) \ + "$(INSTALL_LIBDIR)" +endif + $(INSTALL_DATA) runtime/caml/domain_state.tbl runtime/caml/*.h \ + "$(INSTALL_INCDIR)" + $(INSTALL_PROG) ocaml$(EXE) "$(INSTALL_BINDIR)" +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(call INSTALL_STRIPPED_BYTE_PROG,\ + ocamlc$(EXE),"$(INSTALL_BINDIR)/ocamlc.byte$(EXE)") +endif + $(MAKE) -C stdlib install +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(INSTALL_PROG) lex/ocamllex$(EXE) \ + "$(INSTALL_BINDIR)/ocamllex.byte$(EXE)" + for i in $(TOOLS_TO_INSTALL_NAT); \ + do \ + $(INSTALL_PROG) "tools/$$i$(EXE)" "$(INSTALL_BINDIR)/$$i.byte$(EXE)";\ + if test -f "tools/$$i".opt$(EXE); then \ + $(INSTALL_PROG) "tools/$$i.opt$(EXE)" "$(INSTALL_BINDIR)" && \ + (cd "$(INSTALL_BINDIR)" && $(LN) "$$i.opt$(EXE)" "$$i$(EXE)"); \ + else \ + (cd "$(INSTALL_BINDIR)" && $(LN) "$$i.byte$(EXE)" "$$i$(EXE)"); \ + fi; \ + done +else + for i in $(TOOLS_TO_INSTALL_NAT); \ + do \ + if test -f "tools/$$i".opt$(EXE); then \ + $(INSTALL_PROG) "tools/$$i.opt$(EXE)" "$(INSTALL_BINDIR)"; \ + (cd "$(INSTALL_BINDIR)" && $(LN) "$$i.opt$(EXE)" "$$i$(EXE)"); \ + fi; \ + done +endif + for i in $(TOOLS_TO_INSTALL_BYT); \ + do \ + $(INSTALL_PROG) "tools/$$i$(EXE)" "$(INSTALL_BINDIR)";\ + done + $(INSTALL_PROG) $(ocamlyacc_PROGRAM)$(EXE) "$(INSTALL_BINDIR)" + $(INSTALL_DATA) \ + utils/*.cmi \ + parsing/*.cmi \ + typing/*.cmi \ + bytecomp/*.cmi \ + file_formats/*.cmi \ + lambda/*.cmi \ + driver/*.cmi \ + toplevel/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + toplevel/byte/*.cmi \ + "$(INSTALL_COMPLIBDIR)" +ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" + $(INSTALL_DATA) \ + utils/*.cmt utils/*.cmti utils/*.mli \ + parsing/*.cmt parsing/*.cmti parsing/*.mli \ + typing/*.cmt typing/*.cmti typing/*.mli \ + file_formats/*.cmt file_formats/*.cmti file_formats/*.mli \ + lambda/*.cmt lambda/*.cmti lambda/*.mli \ + bytecomp/*.cmt bytecomp/*.cmti bytecomp/*.mli \ + driver/*.cmt driver/*.cmti driver/*.mli \ + toplevel/*.cmt toplevel/*.cmti toplevel/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + toplevel/byte/*.cmt \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + tools/profiling.cmt tools/profiling.cmti \ + "$(INSTALL_LIBDIR_PROFILING)" +endif + $(INSTALL_DATA) \ + compilerlibs/*.cma compilerlibs/META \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + $(ocamlc_CMO_FILES) $(ocaml_CMO_FILES) \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_PROG) $(expunge) "$(INSTALL_LIBDIR)" +# If installing over a previous OCaml version, ensure some modules are removed +# from the previous installation. + rm -f "$(INSTALL_LIBDIR)"/topdirs.cm* "$(INSTALL_LIBDIR)/topdirs.mli" + rm -f "$(INSTALL_LIBDIR)"/profiling.cm* "$(INSTALL_LIBDIR)/profiling.$(O)" + $(INSTALL_DATA) \ + tools/profiling.cmi tools/profiling.cmo \ + "$(INSTALL_LIBDIR_PROFILING)" +ifeq "$(UNIX_OR_WIN32)" "unix" # Install manual pages only on Unix + $(MAKE) -C man install +endif + for i in $(OTHERLIBRARIES); do \ + $(MAKE) -C otherlibs/$$i install || exit $$?; \ + done +ifeq "$(build_ocamldoc)" "true" + $(MKDIR) "$(INSTALL_LIBDIR)/ocamldoc" + $(INSTALL_PROG) $(OCAMLDOC) "$(INSTALL_BINDIR)" + $(INSTALL_DATA) \ + ocamldoc/ocamldoc.hva ocamldoc/*.cmi ocamldoc/odoc_info.cma \ + ocamldoc/META \ + "$(INSTALL_LIBDIR)/ocamldoc" + $(INSTALL_DATA) \ + $(OCAMLDOC_LIBCMIS) \ + "$(INSTALL_LIBDIR)/ocamldoc" +ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" + $(INSTALL_DATA) \ + $(OCAMLDOC_LIBMLIS) $(OCAMLDOC_LIBCMTS) \ + "$(INSTALL_LIBDIR)/ocamldoc" +endif +endif +ifeq "$(build_libraries_manpages)" "true" + $(MAKE) -C api_docgen install +endif + if test -n "$(WITH_DEBUGGER)"; then \ + $(INSTALL_PROG) debugger/ocamldebug$(EXE) "$(INSTALL_BINDIR)"; \ + fi +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" +ifeq "$(TOOLCHAIN)" "msvc" + $(INSTALL_DATA) $(FLEXDLL_SOURCE_DIR)/$(FLEXDLL_MANIFEST) \ + "$(INSTALL_BINDIR)/" +endif +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(INSTALL_PROG) \ + flexlink.byte$(EXE) "$(INSTALL_BINDIR)" +endif # ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(MKDIR) "$(INSTALL_FLEXDLLDIR)" + $(INSTALL_DATA) $(addprefix $(BYTE_BINDIR)/, $(FLEXDLL_OBJECTS)) \ + "$(INSTALL_FLEXDLLDIR)" +endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" + $(INSTALL_DATA) Makefile.config "$(INSTALL_LIBDIR)" + $(INSTALL_DATA) $(DOC_FILES) "$(INSTALL_DOCDIR)" +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + if test -f ocamlopt$(EXE); then $(MAKE) installopt; else \ + cd "$(INSTALL_BINDIR)"; \ + $(LN) ocamlc.byte$(EXE) ocamlc$(EXE); \ + $(LN) ocamllex.byte$(EXE) ocamllex$(EXE); \ + (test -f flexlink.byte$(EXE) && \ + $(LN) flexlink.byte$(EXE) flexlink$(EXE)) || true; \ + fi +else + if test -f ocamlopt$(EXE); then $(MAKE) installopt; fi +endif + +# Installation of the native-code compiler +.PHONY: installopt +installopt: + $(INSTALL_DATA) $(runtime_NATIVE_STATIC_LIBRARIES) "$(INSTALL_LIBDIR)" +ifneq "$(runtime_NATIVE_SHARED_LIBRARIES)" "" + $(INSTALL_PROG) $(runtime_NATIVE_SHARED_LIBRARIES) "$(INSTALL_LIBDIR)" +endif +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(call INSTALL_STRIPPED_BYTE_PROG,\ + ocamlopt$(EXE),"$(INSTALL_BINDIR)/ocamlopt.byte$(EXE)") +endif + $(MAKE) -C stdlib installopt + $(INSTALL_DATA) \ + middle_end/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/closure/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/base_types/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + asmcomp/*.cmi \ + "$(INSTALL_COMPLIBDIR)" +ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" + $(INSTALL_DATA) \ + middle_end/*.cmt middle_end/*.cmti \ + middle_end/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/closure/*.cmt middle_end/closure/*.cmti \ + middle_end/closure/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/*.cmt middle_end/flambda/*.cmti \ + middle_end/flambda/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/base_types/*.cmt \ + middle_end/flambda/base_types/*.cmti \ + middle_end/flambda/base_types/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + asmcomp/*.cmt asmcomp/*.cmti \ + asmcomp/*.mli \ + "$(INSTALL_COMPLIBDIR)" +endif + $(INSTALL_DATA) \ + $(ocamlopt_CMO_FILES) \ + "$(INSTALL_COMPLIBDIR)" +ifeq "$(build_ocamldoc)" "true" + $(MKDIR) "$(INSTALL_LIBDIR)/ocamldoc" + $(INSTALL_PROG) $(OCAMLDOC_OPT) "$(INSTALL_BINDIR)" + $(INSTALL_DATA) \ + $(OCAMLDOC_LIBCMIS) \ + "$(INSTALL_LIBDIR)/ocamldoc" +ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" + $(INSTALL_DATA) \ + $(OCAMLDOC_LIBMLIS) $(OCAMLDOC_LIBCMTS) \ + "$(INSTALL_LIBDIR)/ocamldoc" +endif + $(INSTALL_DATA) \ + ocamldoc/ocamldoc.hva ocamldoc/*.cmx ocamldoc/odoc_info.$(A) \ + ocamldoc/odoc_info.cmxa \ + "$(INSTALL_LIBDIR)/ocamldoc" +endif + for i in $(OTHERLIBRARIES); do \ + $(MAKE) -C otherlibs/$$i installopt || exit $$?; \ + done +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + if test -f ocamlopt.opt$(EXE); then $(MAKE) installoptopt; else \ + cd "$(INSTALL_BINDIR)"; \ + $(LN) ocamlc.byte$(EXE) ocamlc$(EXE); \ + $(LN) ocamlopt.byte$(EXE) ocamlopt$(EXE); \ + $(LN) ocamllex.byte$(EXE) ocamllex$(EXE); \ + (test -f flexlink.byte$(EXE) && \ + $(LN) flexlink.byte$(EXE) flexlink$(EXE)) || true; \ + fi +else + if test -f ocamlopt.opt$(EXE); then $(MAKE) installoptopt; fi +endif + $(INSTALL_DATA) \ + tools/profiling.cmx tools/profiling.$(O) \ + "$(INSTALL_LIBDIR_PROFILING)" + +.PHONY: installoptopt +installoptopt: + $(INSTALL_PROG) ocamlc.opt$(EXE) "$(INSTALL_BINDIR)" + $(INSTALL_PROG) ocamlopt.opt$(EXE) "$(INSTALL_BINDIR)" + $(INSTALL_PROG) lex/ocamllex.opt$(EXE) "$(INSTALL_BINDIR)" + cd "$(INSTALL_BINDIR)"; \ + $(LN) ocamlc.opt$(EXE) ocamlc$(EXE); \ + $(LN) ocamlopt.opt$(EXE) ocamlopt$(EXE); \ + $(LN) ocamllex.opt$(EXE) ocamllex$(EXE) +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" + $(INSTALL_PROG) flexlink.opt$(EXE) "$(INSTALL_BINDIR)" + cd "$(INSTALL_BINDIR)"; \ + $(LN) flexlink.opt$(EXE) flexlink$(EXE) +endif + $(INSTALL_DATA) \ + utils/*.cmx parsing/*.cmx typing/*.cmx bytecomp/*.cmx \ + toplevel/*.cmx toplevel/native/*.cmx \ + toplevel/native/tophooks.cmi \ + file_formats/*.cmx \ + lambda/*.cmx \ + driver/*.cmx asmcomp/*.cmx middle_end/*.cmx \ + middle_end/closure/*.cmx \ + middle_end/flambda/*.cmx \ + middle_end/flambda/base_types/*.cmx \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + compilerlibs/*.cmxa compilerlibs/*.$(A) \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + $(ocamlc_CMX_FILES) $(ocamlc_CMX_FILES:.cmx=.$(O)) \ + $(ocamlopt_CMX_FILES) $(ocamlopt_CMX_FILES:.cmx=.$(O)) \ + $(ocamlnat_CMX_FILES:.cmx=.$(O)) \ + "$(INSTALL_COMPLIBDIR)" +ifeq "$(INSTALL_OCAMLNAT)" "true" + $(INSTALL_PROG) ocamlnat$(EXE) "$(INSTALL_BINDIR)" +endif + +# Installation of the *.ml sources of compiler-libs +.PHONY: install-compiler-sources +install-compiler-sources: +ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" + $(INSTALL_DATA) \ + utils/*.ml parsing/*.ml typing/*.ml bytecomp/*.ml driver/*.ml \ + file_formats/*.ml \ + lambda/*.ml \ + toplevel/*.ml toplevel/byte/*.ml \ + middle_end/*.ml middle_end/closure/*.ml \ + middle_end/flambda/*.ml middle_end/flambda/base_types/*.ml \ + asmcomp/*.ml \ + asmcmp/debug/*.ml \ + "$(INSTALL_COMPLIBDIR)" +endif include .depend @@ -1180,3 +2745,11 @@ config.status: @echo " make install" @echo "should work." @false + +# We need to express that all the CMX files depend on the native compiler, +# so that they get invalidated and rebuilt when the compiler is updated +# This dependency must appear after all the definitions of the +# _SOURCES variable so that GNU make's secondary expansion mechanism works +# This is why this dependency is kept at the very end of this file + +$(ALL_CMX_FILES): ocamlopt$(EXE) diff --git a/Makefile.best_binaries b/Makefile.best_binaries index 4f05f698..d77cc1a6 100644 --- a/Makefile.best_binaries +++ b/Makefile.best_binaries @@ -57,3 +57,28 @@ BEST_OCAMLDEP := $(strip $(if \ $(call check_not_stale,boot/ocamlc,ocamlc.opt$(EXE)))), \ $(ROOTDIR)/ocamlc.opt$(EXE) -depend, \ $(BOOT_OCAMLC) -depend)) + +OCAMLDOC = $(ROOTDIR)/ocamldoc/ocamldoc$(EXE) +OCAMLDOC_OPT = $(ROOTDIR)/ocamldoc/ocamldoc.opt$(EXE) + +ifeq "$(TARGET)" "$(HOST)" + ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" + OCAMLDOC_RUN_BYTE = $(NEW_OCAMLRUN) -I $(ROOTDIR)/otherlibs/unix \ + -I $(ROOTDIR)/otherlibs/str $(OCAMLDOC) + else + # if shared-libraries are not supported, unix.cma and str.cma + # are compiled with -custom, so ocamldoc also uses -custom, + # and (ocamlrun ocamldoc) does not work. + OCAMLDOC_RUN_BYTE = $(OCAMLDOC) + endif +else + OCAMLDOC_RUN_BYTE = $(NEW_OCAMLRUN) $(OCAMLDOC) +endif + +OCAMLDOC_RUN_OPT = $(OCAMLDOC_OPT) + +ifeq "$(wildcard $(OCAMLDOC_OPT))" "" + OCAMLDOC_RUN = $(OCAMLDOC_RUN_BYTE) +else + OCAMLDOC_RUN = $(OCAMLDOC_RUN_OPT) +endif diff --git a/Makefile.build_config.in b/Makefile.build_config.in index 4d6705d2..4df7f517 100644 --- a/Makefile.build_config.in +++ b/Makefile.build_config.in @@ -19,11 +19,43 @@ # OCaml's build system and so itself includes Makefile.config. It assumes that # $(ROOTDIR) has been defined. +# This variable is added to prevent double-inclusion of this Makefile by +# Makefile.config_if_required. override is used as this has highest $(origin ) +# priority (including over make BUILD_CONFIG_INCLUDED) +override BUILD_CONFIG_INCLUDED = + include $(ROOTDIR)/Makefile.config INSTALL ?= @INSTALL@ -p INSTALL_DATA ?= @INSTALL_DATA@ INSTALL_PROG ?= @INSTALL_PROGRAM@ +# Whether to build certain libraries and tools + +build_ocamldebug = @build_ocamldebug@ + +build_ocamldoc = @build_ocamldoc@ +build_libraries_manpages = @build_libraries_manpages@ + +OCAMLDOC_TARGET = @ocamldoc_target@ +OCAMLTEST_TARGET = @ocamltest_target@ + +OCAMLDOC_OPT_TARGET = @ocamldoc_opt_target@ +OCAMLTEST_OPT_TARGET = @ocamltest_opt_target@ + +build_ocamltest = @build_ocamltest@ + +build_ocamltex = @build_ocamltex@ + +lib_dynlink = @lib_dynlink@ +lib_runtime_events = @lib_runtime_events@ +lib_str = @lib_str@ +lib_systhreads = @lib_systhreads@ +lib_unix = @lib_unix@ + +OPTIONAL_LIBRARIES = @optional_libraries@ +OPTIONAL_BYTECODE_TOOLS = @optional_bytecode_tools@ +OPTIONAL_NATIVE_TOOLS = @optional_native_tools@ + # Whether to install the native toplevel (ocamlnat) INSTALL_OCAMLNAT = @install_ocamlnat@ @@ -31,23 +63,112 @@ INSTALL_OCAMLNAT = @install_ocamlnat@ DEP_CC=@DEP_CC@ -MM COMPUTE_DEPS=@compute_deps@ -# This is munged into utils/config.ml, not overridable by other parts of -# the build system. +# Build-system flags to use to compile C files +OC_CFLAGS=@oc_cflags@ +OC_CPPFLAGS=-I$(ROOTDIR)/runtime @oc_cppflags@ + +# The following variable defines flags to be passed to the C preprocessor +# when compiling C files to be linked with native code. This includes +# the native runtime itself and can also include the stub code around +# C libraries when it needs to be different from the one used to +# link with bytecode. + +# These flags should be passed *in addition* to those in OC_CPPFLAGS, they +# should not replace them. + +OC_NATIVE_CPPFLAGS=-DNATIVE_CODE @native_cppflags@ + +# Same as above, for CFLAGS +OC_NATIVE_CFLAGS=@native_cflags@ + +# Additional link-time options +# To support dynamic loading of shared libraries (they need to look at +# our own symbols): +OC_LDFLAGS=@oc_ldflags@ OC_DLL_LDFLAGS=@oc_dll_ldflags@ +OC_EXE_LDFLAGS=@oc_exe_ldflags@ + +MKEXE_VIA_CC=\ + $(CC) $(OC_EXE_LDFLAGS) $(OC_CFLAGS) $(CFLAGS) @mkexe_via_cc_ldflags@ + +# Which tool to use to display differences between files +DIFF=@DIFF@ +# Which flags to pass to the diff tool +DIFF_FLAGS=@DIFF_FLAGS@ # The rlwrap command (for the *runtop targets) RLWRAP=@rlwrap@ +# The best sed which is available (GNU sed if available) +SED=@SED@ + # Which document generator: odoc or ocamldoc? DOCUMENTATION_TOOL=@documentation_tool@ DOCUMENTATION_TOOL_CMD=@documentation_tool_cmd@ # The location of the FlexDLL sources to use (usually provided as the flexdll # Git submodule) -FLEXDLL_SOURCES=@flexdir@ +FLEXDLL_SOURCE_DIR=@flexdll_source_dir@ BOOTSTRAPPING_FLEXDLL=@bootstrapping_flexdll@ ### Where to install documentation PACKAGE_TARNAME = @PACKAGE_TARNAME@ datarootdir = @datarootdir@ DOCDIR=@docdir@ + +unix_directory = @unix_directory@ +unix_library = @unix_library@ + +# Which make target to build, depending on whether the native compiler +# has been enabled or not during the configuration stage + +DEFAULT_BUILD_TARGET = @default_build_target@ + +# Flags to use when compiling and linking OCaml programs + +# The names of the variables below take the form XXX_YYY_ZZZ where +# +# XXX is one of OC, OCAML or the lower-case name of a module. The OC prefix +# is for private variables (i.e. reserved by the compiler's build system), +# the OCAML prefix is used for variables users can define to add their +# own flags and the module-name prefix is for flags that apply only +# to one module. +# +# YYY refers to the backend. At the moment, it can take the values +# COMMON for the flags shared by all the backends, BYTECODE or NATIVE +# (other backends may be added in the future). +# +# ZZZ is either COMPFLAGS (compile-time flags) or LINKFLAGS (link-time flags). +# Countrary to the C convention wrt. CFLAGS and LDFLAGS, the flags in the +# COMPFLAGS category are not passed at link time, so if a flag is needed +# at both stages, like e.g. -g, it should be added to both +# XXX_YYY_COMPFLAGS and XXX_YYY_LINKFLAGS. + +OC_COMMON_COMPFLAGS = -g -strict-sequence -principal -absname \ + -w +a-4-9-40-41-42-44-45-48 -warn-error +a -bin-annot \ + -strict-formats +OC_COMMON_LINKFLAGS = $(INCLUDES) + +OC_BYTECODE_LINKFLAGS = + +OC_NATIVE_COMPFLAGS = @oc_native_compflags@ + +OC_NATIVE_LINKFLAGS = -g + +# Platform-dependent command to create symbolic links +LN = @ln@ + +# Platform-dependent assembler files to use to build the runtime +runtime_ASM_OBJECTS = $(addprefix runtime/,@runtime_asm_objects@) + +# Platform-dependent module for ocamlyacc +ocamlyacc_WSTR_MODULE = @ocamlyacc_wstr_module@ + +# Architecture-specific modules, if any +arch_specific_SOURCES = @arch_specific_SOURCES@ + +# ThreadSanitizer support enabled +TSAN=@tsan@ +# Contains TSan-specific runtime files, or nothing if TSan support is +# disabled +TSAN_NATIVE_RUNTIME_C_SOURCES = @tsan_native_runtime_c_sources@ diff --git a/Makefile.common b/Makefile.common index 43068151..986f6c39 100644 --- a/Makefile.common +++ b/Makefile.common @@ -27,11 +27,67 @@ MKDIR=mkdir -p EMPTY := # $(SPACE) contains a single space SPACE := $(EMPTY) $(EMPTY) +# $( ) suppresses warning from the alignments in the V_ macros below +$(SPACE) := + +ifeq "$(UNIX_OR_WIN32)" "win32" +DIR_SEP := \$ # There must a space following the $ +CONVERT_PATH = $(subst /,$(DIR_SEP),$(strip $(1))) +else +DIR_SEP = / +CONVERT_PATH = $(strip $(1)) +endif + +V ?= 0 + +ifeq "$(V)" "0" + +V_CC = @$(info $ CC $@) +V_CCDEPS = @$(info $ CCDEPS $@) +V_OCAMLC = @$(info $ OCAMLC $@) +V_OCAMLOPT = @$(info $ OCAMLOPT $@) +V_GEN = @$(info $ GEN $@) +V_LINKC = @$(info $ LINKC $@) +V_LINKOPT = @$(info $ LINKOPT $@) +V_MKEXE = @$(info $ MKEXE $@) +V_MKLIB = @$(info $ MKLIB $@) +V_MKDLL = @$(info $ MKDLL $@) +V_OCAMLLEX = @$(info $ OCAMLLEX $@) +V_OCAMLYACC = @$(info $ OCAMLYACC $@) +V_OCAMLDEP = @$(info $ OCAMLDEP $@) +V_ASM = @$(info $ ASM $@) +V_OCAMLMKLIB = @$(info $ OCAMLMKLIB $@) +V_OCAMLDOC = @$(info $ OCAMLDOC $@) +V_ODOC = @$(info $ ODOC $@) + +else + +V_CC = +V_CCDEPS = +V_OCAMLC = +V_OCAMLOPT = +V_GEN = +V_LINKC = +V_LINKOPT = +V_MKEXE = +V_MKLIB = +V_MKDLL = +V_OCAMLLEX = +V_OCAMLYACC = +V_OCAMLDEP = +V_ASM = +V_OCAMLMKLIB = +V_OCAMLDOC = +V_ODOC = + +endif DESTDIR ?= INSTALL_BINDIR := $(DESTDIR)$(BINDIR) INSTALL_LIBDIR := $(DESTDIR)$(LIBDIR) +INSTALL_INCDIR=$(INSTALL_LIBDIR)/caml INSTALL_STUBLIBDIR := $(DESTDIR)$(STUBLIBDIR) +INSTALL_LIBDIR_PROFILING = $(INSTALL_LIBDIR)/profiling INSTALL_MANDIR := $(DESTDIR)$(MANDIR) INSTALL_PROGRAMS_MAN_DIR := $(DESTDIR)$(PROGRAMS_MAN_DIR) INSTALL_LIBRARIES_MAN_DIR := $(DESTDIR)$(LIBRARIES_MAN_DIR) @@ -39,6 +95,8 @@ INSTALL_DOCDIR := $(DESTDIR)$(DOCDIR) FLEXDLL_SUBMODULE_PRESENT := $(wildcard $(ROOTDIR)/flexdll/Makefile) +IN_COREBOOT_CYCLE ?= false + # Variables used to represent the OCaml runtime system # Most of the time, boot/ocamlrun and runtime/ocamlrun are the same. # However, under some circumstances it is important to be able to @@ -49,6 +107,10 @@ FLEXDLL_SUBMODULE_PRESENT := $(wildcard $(ROOTDIR)/flexdll/Makefile) OCAMLRUN ?= $(ROOTDIR)/boot/ocamlrun$(EXE) NEW_OCAMLRUN ?= $(ROOTDIR)/runtime/ocamlrun$(EXE) +# Standard library flags +STDLIBFLAGS ?= -nostdlib -I $(ROOTDIR)/stdlib +BOOT_STDLIBFLAGS ?= -nostdlib -I $(ROOTDIR)/boot + TEST_BOOT_OCAMLC_OPT = $(shell \ test $(ROOTDIR)/boot/ocamlc.opt -nt $(ROOTDIR)/boot/ocamlc; \ echo $$?) @@ -60,62 +122,46 @@ else BOOT_OCAMLC = $(OCAMLRUN) $(ROOTDIR)/boot/ocamlc endif -ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" - FLEXLINK_ENV = - CAMLOPT_CMD = $(CAMLOPT) - OCAMLOPT_CMD = $(OCAMLOPT) - MKLIB_CMD = $(MKLIB) - ocamlc_cmd = $(ocamlc) - ocamlopt_cmd = $(ocamlopt) -else -ifeq "$(wildcard $(ROOTDIR)/flexlink.opt$(EXE))" "" - FLEXLINK_ENV = \ - OCAML_FLEXLINK="$(ROOTDIR)/boot/ocamlrun$(EXE) \ - $(ROOTDIR)/boot/flexlink.byte$(EXE)" -else - FLEXLINK_ENV = \ - OCAML_FLEXLINK="$(ROOTDIR)/flexlink.opt$(EXE) -I $(ROOTDIR)/stdlib/flexdll" -endif # ifeq "$(wildcard $(ROOTDIR)/flexlink.opt$(EXE))" "" - CAMLOPT_CMD = $(FLEXLINK_ENV) $(CAMLOPT) - OCAMLOPT_CMD = $(FLEXLINK_ENV) $(OCAMLOPT) - MKLIB_CMD = $(FLEXLINK_ENV) $(MKLIB) - ocamlc_cmd = $(FLEXLINK_ENV) $(ocamlc) - ocamlopt_cmd = $(FLEXLINK_ENV) $(ocamlopt) -endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" +BOOT_OCAMLDEP = $(BOOT_OCAMLC) -depend -OPTCOMPFLAGS= -ifeq "$(FUNCTION_SECTIONS)" "true" -OPTCOMPFLAGS += -function-sections -endif +# Takes an implicit path and converts it to a path expression which returns to +# the current directory. e.g. $(call ROOT_FROM, foo/bar/) expands to ../.. +REMOVE_SLASH = $(strip $(patsubst %/,%, $(1))) +ROOT_FROM = \ + $(subst $(SPACE),/,$(patsubst %,..,$(subst /, ,$(call REMOVE_SLASH, $(1))))) + +BYTE_BUILD_TREE = byte +OPT_BUILD_TREE = opt -# Escape special characters in the argument string. -# There are four characters that need escaping: -# - backslash and ampersand, which are special in the replacement text -# of sed's "s" command -# - exclamation mark, which is the delimiter we use for sed's "s" command -# - single quote, which interferes with shell quoting. We are inside -# single quotes already, so the proper escape is '\'' -# (close single quotation, insert single quote character, -# reopen single quotation). -SED_ESCAPE=$(subst ','\'',$(subst !,\!,$(subst &,\&,$(subst \,\\,$1)))) +BYTE_BINDIR = $(BYTE_BUILD_TREE)/bin +OPT_BINDIR = $(OPT_BUILD_TREE)/bin + +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" + override REAL_ROOT_DIR := $(realpath $(ROOTDIR)) +ifeq "$(filter $(REAL_ROOT_DIR)/$(BYTE_BINDIR), $(subst :, ,$(PATH)))" "" + export PATH := \ + $(REAL_ROOT_DIR)/$(OPT_BINDIR):$(REAL_ROOT_DIR)/$(BYTE_BINDIR):$(PATH) +endif + undefine REAL_ROOT_DIR +endif -# Escape special characters in an OCaml string literal "..." -# There are two: backslash and double quote. -OCAML_ESCAPE=$(subst ",\",$(subst \,\\,$1)) +# List of other libraries +ALL_OTHERLIBS = dynlink str systhreads unix runtime_events -# SUBST generates the sed substitution for the variable *named* in $1 -SUBST=-e 's!%%$1%%!$(call SED_ESCAPE,$($1))!' +# Flags to pass to the C preprocessor when preprocessing assembly files +OC_ASPPFLAGS=$(OC_CPPFLAGS) $(OC_NATIVE_CPPFLAGS) -# SUBST_STRING does the same, for a variable that occurs between "..." -# in config.mlp. Thus, backslashes and double quotes must be escaped. -SUBST_STRING=-e 's!%%$1%%!$(call SED_ESCAPE,$(call OCAML_ESCAPE,$($1)))!' +OPTCOMPFLAGS= +ifeq "$(FUNCTION_SECTIONS)" "true" +OPTCOMPFLAGS += -function-sections +endif # The rule to compile C files # This rule is similar to GNU make's implicit rule, except that it is more # general (it supports both .o and .obj) -ifneq "$(COMPUTE_DEPS)" "false" +ifeq "$(COMPUTE_DEPS)" "true" RUNTIME_HEADERS := REQUIRED_HEADERS := else @@ -125,7 +171,7 @@ REQUIRED_HEADERS := $(RUNTIME_HEADERS) $(wildcard *.h) endif %.$(O): %.c $(REQUIRED_HEADERS) - $(CC) -c $(OC_CFLAGS) $(CFLAGS) $(OC_CPPFLAGS) $(CPPFLAGS) \ + $(V_CC)$(CC) -c $(OC_CFLAGS) $(CFLAGS) $(OC_CPPFLAGS) $(CPPFLAGS) \ $(OUTPUTOBJ)$@ $< $(DEPDIR): @@ -140,6 +186,19 @@ $(1): $(1)$(EXE) endif endef # PROGRAM_SYNONYM +# Definitions related to ocamldep + +# Default value for OCAMLDEP +# In those directories where this needs to be overridden, the overriding +# should take place *before* Makefile.common is included. + +OCAMLDEP ?= $(BEST_OCAMLDEP) +OCAMLDEPFLAGS ?= +OC_OCAMLDEPFLAGS = -slash +OC_OCAMLDEPDIRS = +OCAMLDEP_CMD = $(OCAMLDEP) $(OC_OCAMLDEPFLAGS) \ + $(addprefix -I ,$(OC_OCAMLDEPDIRS)) $(OCAMLDEPFLAGS) + # Lexer generation BOOT_OCAMLLEX ?= $(OCAMLRUN) $(ROOTDIR)/boot/ocamllex @@ -153,25 +212,240 @@ OCAMLLEX ?= $(BEST_OCAMLLEX) OCAMLLEXFLAGS ?= -q %.ml: %.mll - $(OCAMLLEX) $(OCAMLLEXFLAGS) $< + $(V_OCAMLLEX)$(OCAMLLEX) $(OCAMLLEXFLAGS) $< # Parser generation OCAMLYACC ?= $(ROOTDIR)/yacc/ocamlyacc$(EXE) -OCAMLYACCFLAGS ?= +OCAMLYACCFLAGS ?= --strict -v %.ml %.mli: %.mly - $(OCAMLYACC) $(OCAMLYACCFLAGS) $< + $(V_OCAMLYACC)$(OCAMLYACC) $(OCAMLYACCFLAGS) $< SAK = $(ROOTDIR)/runtime/sak$(EXE) -# stdlib/StdlibModules cannot be include'd unless $(SAK) has been built. These -# two rules add that dependency. They have to be pattern rules since -# Makefile.common is included before default targets. -$(ROOTDIR)/%/sak$(EXE): - $(MAKE) -C $(ROOTDIR)/$* sak$(EXE) - -ifneq "$(REQUIRES_CONFIGURATION)" "" -$(ROOTDIR)/%/StdlibModules: $(SAK) ; -endif +# Used with the Microsoft toolchain to merge generated manifest files into +# executables +if_file_exists = ( test ! -f $(1) || $(2) && rm -f $(1) ) +MERGEMANIFESTEXE = $(call if_file_exists, $(1).manifest, \ + mt -nologo -outputresource:$(1) -manifest $(1).manifest) + +# Macros and rules to compile OCaml programs and libraries + +# The following variable is used to accumulate a list of all the CMX +# files that get built. Is is then used in the root Makefile to express +# the dependency on all these files on the native compiler, so that +# they get rebuilt if the native compiler is updated + +ALL_CMX_FILES = + +# We use secondary expansion here so that variables like +# foo_LIBRARIES and foo_SOURCES can be defined after the calls +# to the macros below. Without secondary expansion, those variables +# would have to be defined before the calls to OCAML_BYTECODE_PROGRAM etc. + +.SECONDEXPANSION: + +# Definitions that are common to both programs and libraries + +define _OCAML_COMMON_BASE +$(basename $(notdir $(1)))_C_FILES = \ + $$(filter %.c, $$($(basename $(notdir $(1)))_SOURCES)) +$(basename $(notdir $(1)))_MLI_FILES = \ + $$(filter %.mli, \ + $$(subst .mly,.mli,\ + $$($(basename $(notdir $(1)))_SOURCES))) +$(basename $(notdir $(1)))_CMI_FILES = \ + $$(subst .mli,.cmi,$$($(basename $(notdir $(1)))_MLI_FILES)) +$(basename $(notdir $(1)))_ML_FILES = \ + $$(filter %.ml, \ + $$(subst .ml.in,.ml,$$(subst .mll,.ml,$$(subst .mly,.ml,\ + $$($(basename $(notdir $(1)))_SOURCES))))) +$(basename $(notdir $(1)))_MLL_FILES = \ + $$(filter %.mll, \ + $$($(basename $(notdir $(1)))_SOURCES)) +$(basename $(notdir $(1)))_MLY_FILES = \ + $$(filter %.mly, \ + $$($(basename $(notdir $(1)))_SOURCES)) +$(basename $(notdir $(1)))_SECONDARY_FILES = \ + $$(patsubst %.mll,%.ml, $$($(basename $(notdir $(1)))_MLL_FILES)) \ + $$(patsubst %.mly,%.mli, $$($(basename $(notdir $(1)))_MLY_FILES)) \ + $$(patsubst %.mly,%.ml, $$($(basename $(notdir $(1)))_MLY_FILES)) +.SECONDARY: $$$$($(basename $(notdir $(1)))_SECONDARY_FILES) +beforedepend:: $$$$($(basename $(notdir $(1)))_SECONDARY_FILES) +$(basename $(notdir $(1)))_GENERATED_FILES = \ + $$($(basename $(notdir $(1)))_SECONDARY_FILES) \ + $$(patsubst %.mly,%.output, $$($(basename $(notdir $(1)))_MLY_FILES)) +endef # _OCAML_COMMON_BASE + +# Macros to build OCaml programs + +# Each program foo is characterised by the foo_LIBRARIES and foo_SOURCES +# variables. The following macros provide the infrastructure to build foo +# from the object files whose names are derived from these two +# varialbes. In particular, the following macros define several +# variables whose names are prefixed with foo_ to compute the +# different lists of files used to build foo. + +# The first macro, _OCAML_PROGRAM_BASE, is a private macro (hence the _ at the +# beginning of its name) which defines foo_ variables common to both +# bytecode and native programs. The next two macros, OCAML_BYTECODE_PROGRAM +# and OCAML_NATIVE_PROGRAM are used to define programs that are provided +# only in bytecode or native form, respectively. Programs provided +# in both forms should use OCAML_PROGRAM. + +define _OCAML_PROGRAM_BASE +$(eval $(call _OCAML_COMMON_BASE,$(1))) +endef # _OCAML_PROGRAM_BASE + +LINK_BYTECODE_PROGRAM =\ + $(CAMLC) $(OC_COMMON_LINKFLAGS) $(OC_BYTECODE_LINKFLAGS) + +# The _OCAML_BYTECODE_PROGRAM macro defines a bytecode program but assuming +# that _OCAML_PROGRAM_BASE has already been called. Its public counterpart +# does not rely on this assumption and rather does call _OCAML_PROGRAM_BASE +# itself. + +define _OCAML_BYTECODE_PROGRAM +$(eval $(call PROGRAM_SYNONYM,$(1))) +$(basename $(notdir $(1)))_CMA_FILES = \ + $$(patsubst %,%.cma, $$($(basename $(notdir $(1)))_LIBRARIES)) +$(basename $(notdir $(1)))_BO_FILES = \ + $$(patsubst %.c,%.b.$(O), $$($(basename $(notdir $(1)))_C_FILES)) +$(basename $(notdir $(1)))_CMO_FILES = \ + $$(patsubst %.ml,%.cmo, $$($(basename $(notdir $(1)))_ML_FILES)) +$(basename $(notdir $(1)))_BCOBJS = \ + $$($(basename $(notdir $(1)))_CMA_FILES) \ + $$($(basename $(notdir $(1)))_BO_FILES) \ + $$($(basename $(notdir $(1)))_CMO_FILES) +$(1)$(EXE): $$$$($(basename $(notdir $(1)))_BCOBJS) + $$(V_LINKC)$$(LINK_BYTECODE_PROGRAM) -o $$@ \ + $$($(basename $(notdir $(1)))_BCOBJS) +endef # _OCAML_BYTECODE_PROGRAM + +define OCAML_BYTECODE_PROGRAM +$(eval $(call _OCAML_PROGRAM_BASE,$(1))) +$(eval $(call _OCAML_BYTECODE_PROGRAM,$(1))) +endef # OCAML_BYTECODE_PROGRAM + +LINK_NATIVE_PROGRAM =\ + $(CAMLOPT) $(OC_COMMON_LINKFLAGS) $(OC_NATIVE_LINKFLAGS) + +define _OCAML_NATIVE_PROGRAM +$(eval $(call PROGRAM_SYNONYM,$(1))) +$(basename $(notdir $(1)))_CMXA_FILES = \ + $$(patsubst %,%.cmxa, $$($(basename $(notdir $(1)))_LIBRARIES)) +$(basename $(notdir $(1)))_NO_FILES = \ + $$(patsubst %.c,%.n.$(O), $$($(basename $(notdir $(1)))_C_FILES)) +$(basename $(notdir $(1)))_CMX_FILES = \ + $$(patsubst %.ml,%.cmx, $$($(basename $(notdir $(1)))_ML_FILES)) +ALL_CMX_FILES += $$($(basename $(notdir $(1)))_CMX_FILES) +$(basename $(notdir $(1)))_NCOBJS = \ + $$($(basename $(notdir $(1)))_CMXA_FILES) \ + $$($(basename $(notdir $(1)))_NO_FILES) \ + $$($(basename $(notdir $(1)))_CMX_FILES) +$(1)$(EXE): $$$$($(basename $(notdir $(1)))_NCOBJS) + $$(V_LINKOPT)$$(LINK_NATIVE_PROGRAM) -o $$@ \ + $$($(basename $(notdir $(1)))_NCOBJS) +endef # _OCAML_NATIVE_PROGRAM + +define OCAML_NATIVE_PROGRAM +$(eval $(call _OCAML_PROGRAM_BASE,$(1))) +$(eval $(call _OCAML_NATIVE_PROGRAM,$(1))) +endef # OCAML_NATIVE_PROGRAM + +define OCAML_PROGRAM +$(eval $(call _OCAML_PROGRAM_BASE,$(1))) +$(eval $(call _OCAML_BYTECODE_PROGRAM,$(1))) +$(eval $(call _OCAML_NATIVE_PROGRAM,$(1).opt)) +endef # OCAML_PROGRAM + +# Macros for OCaml libraries, similar to those for OCaml programs + +define _OCAML_LIBRARY_BASE +$(eval $(call _OCAML_COMMON_BASE,$(1))) +endef # _OCAML_LIBRARY_BASE + +LINK_BYTECODE_LIBRARY =\ + $(CAMLC) $(OC_COMMON_LINKFLAGS) $(OC_BYTECODE_LINKFLAGS) + +# The _OCAML_BYTECODE_LIBRARY macro defines a bytecode library but assuming +# that _OCAML_LIBRARY_BASE has already been called. Its public counterpart +# does not rely on this assumption and rather does call _OCAML_LIBRARY_BASE +# itself. + +define _OCAML_BYTECODE_LIBRARY +$(basename $(notdir $(1)))_BYTE_CMI_FILES = \ + $$(foreach F,$$($(basename $(notdir $(1)))_CMI_FILES),\ + $$(if $$(findstring /native/,$$(F)),,$$(F))) +$(basename $(notdir $(1)))_BO_FILES = \ + $$(patsubst %.c,%.b.$(O), $$($(basename $(notdir $(1)))_C_FILES)) +$(basename $(notdir $(1)))_CMO_FILES = \ + $$(patsubst %.ml,%.cmo, \ + $$(foreach F,$$($(basename $(notdir $(1)))_ML_FILES),\ + $$(if $$(findstring /native/,$$(F)),,$$(F)))) +$(basename $(notdir $(1)))_BCOBJS = \ + $$($(basename $(notdir $(1)))_BO_FILES) \ + $$($(basename $(notdir $(1)))_CMO_FILES) +$(1).cma: \ + $$$$($(basename $(notdir $(1)))_BYTE_CMI_FILES) \ + $$$$($(basename $(notdir $(1)))_BCOBJS) + $$(V_LINKC)$$(LINK_BYTECODE_LIBRARY) -a -o $$@ \ + $$($(basename $(notdir $(1)))_BCOBJS) +endef # _OCAML_BYTECODE_LIBRARY + +define OCAML_BYTECODE_LIBRARY +$(eval $(call _OCAML_LIBRARY_BASE,$(1))) +$(eval $(call _OCAML_BYTECODE_LIBRARY,$(1))) +endef # OCAML_BYTECODE_LIBRARY + +LINK_NATIVE_LIBRARY =\ + $(CAMLOPT) $(OC_COMMON_LINKFLAGS) $(OC_NATIVE_LINKFLAGS) + +define _OCAML_NATIVE_LIBRARY +$(basename $(notdir $(1)))_NATIVE_CMI_FILES = \ + $$(foreach F,$$($(basename $(notdir $(1)))_CMI_FILES),\ + $$(if $$(findstring /byte/,$$(F)),,$$(F))) +$(basename $(notdir $(1)))_NO_FILES = \ + $$(patsubst %.c,%.n.$(O), $$($(basename $(notdir $(1)))_C_FILES)) +$(basename $(notdir $(1)))_CMX_FILES = \ + $$(patsubst %.ml,%.cmx, \ + $$(foreach F,$$($(basename $(notdir $(1)))_ML_FILES),\ + $$(if $$(findstring /byte/,$$(F)),,$$(F)))) +ALL_CMX_FILES += $$($(basename $(notdir $(1)))_CMX_FILES) +$(basename $(notdir $(1)))_NCOBJS = \ + $$($(basename $(notdir $(1)))_NO_FILES) \ + $$($(basename $(notdir $(1)))_CMX_FILES) +$(1).cmxa: \ + $$$$($(basename $(notdir $(1)))_NATIVE_CMI_FILES) \ + $$$$($(basename $(notdir $(1)))_NCOBJS) + $$(V_LINKOPT)$$(LINK_NATIVE_LIBRARY) -a -o $$@ \ + $$($(basename $(notdir $(1)))_NCOBJS) +endef # _OCAML_NATIVE_LIBRARY + +define OCAML_NATIVE_LIBRARY +$(eval $(call _OCAML_LIBRARY_BASE,$(1))) +$(eval $(call _OCAML_NATIVE_LIBRARY,$(1))) +endef # OCAML_NATIVE_LIBRARY + +define OCAML_LIBRARY +$(eval $(call _OCAML_LIBRARY_BASE,$(1))) +$(eval $(call _OCAML_BYTECODE_LIBRARY,$(1))) +$(eval $(call _OCAML_NATIVE_LIBRARY,$(1))) +endef # OCAML_LIBRARY + +# Installing a bytecode executable, with debug information removed +define INSTALL_STRIPPED_BYTE_PROG +$(OCAMLRUN) $(ROOTDIR)/tools/stripdebug $(1) $(1).tmp \ +&& $(INSTALL_PROG) $(1).tmp $(2) \ +&& rm $(1).tmp +endef # INSTALL_STRIPPED_BYTE_PROG + +# ocamlc has several mechanisms for linking a bytecode image to the runtime +# which executes it. The exact mechanism depends on the platform and the precise +# location of the runtime. The boot compiler (boot/ocamlc) therefore needs this +# additional information, which comes from the stdlib build and is copied into +# boot/ as part of coldstart. See read_runtime_launch_info in +# bytecomp/bytelink.ml for further details. +HEADER_NAME = runtime-launch-info diff --git a/Makefile.config.in b/Makefile.config.in index 4badb74c..559738f6 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -24,7 +24,7 @@ OCAML_VERSION_MINOR=@OCAML_VERSION_MINOR@ OCAML_VERSION_PATCHLEVEL=@OCAML_VERSION_PATCHLEVEL@ OCAML_VERSION_EXTRA=@OCAML_VERSION_EXTRA@ -## The EMPTY variable, used in other definitions +## The EMPTY variable, used in other definitions to preserve spaces EMPTY= ## Arguments passed to the configure script @@ -59,15 +59,6 @@ MANDIR=@mandir@ PROGRAMS_MAN_DIR=$(MANDIR)/man1 LIBRARIES_MAN_DIR=$(MANDIR)/man3 -### Do #! scripts work on your system? -### Beware: on some systems (e.g. SunOS 4), this will work only if -### the string "#!$(BINDIR)/ocamlrun" is less than 32 characters long. -### In doubt, set HASHBANGSCRIPTS to false. -SHEBANGSCRIPTS=@shebangscripts@ -LONG_SHEBANG=@long_shebang@ -# For compatibility -HASHBANGSCRIPTS:=$(SHEBANGSCRIPTS) - ### Path to the libtool script LIBTOOL = $(TOP_BUILDDIR)/libtool @@ -78,11 +69,6 @@ CC=@CC@ CC_HAS_DEBUG_PREFIX_MAP=@cc_has_debug_prefix_map@ AS_HAS_DEBUG_PREFIX_MAP=@as_has_debug_prefix_map@ -### Additional link-time options -# To support dynamic loading of shared libraries (they need to look at -# our own symbols): -OC_LDFLAGS=@oc_ldflags@ - LDFLAGS?=@LDFLAGS@ ### How to invoke the C preprocessor through the C compiler @@ -96,7 +82,7 @@ O=@OBJEXT@ EXT_OBJ=.@OBJEXT@ ### How to tell the C compiler to output an object file -OUTPUTOBJ=@outputobj@ +OUTPUTOBJ=@outputobj@$(EMPTY) ### Extension of static libraries A=@libext@ @@ -164,34 +150,24 @@ INSTALL_BYTECODE_PROGRAMS=@install_bytecode_programs@ ### Which libraries to compile and install # Currently available: -# bigarray Large, multidimensional numerical arrays -# (legacy support: this library is now part of the -# Standard Library) # dynlink Dynamic linking (bytecode and native) # (win32)unix Unix system calls # str Regular expressions and high-level string processing # systhreads Same as threads, requires POSIX threads OTHERLIBRARIES=@otherlibraries@ -### Link-time options to ocamlc or ocamlopt for linking with POSIX threads -# Needed for the "systhreads" package -PTHREAD_LIBS=@PTHREAD_LIBS@ -PTHREAD_CAML_LIBS=$(addprefix -cclib ,$(PTHREAD_LIBS)) - UNIX_OR_WIN32=@unix_or_win32@ -UNIXLIB=@unixlib@ INSTALL_SOURCE_ARTIFACTS=@install_source_artifacts@ -OC_CFLAGS=@oc_cflags@ -CFLAGS?=@CFLAGS@ -OC_CPPFLAGS=@oc_cppflags@ -CPPFLAGS?=@CPPFLAGS@ +CFLAGS=@CFLAGS@ +CPPFLAGS=@CPPFLAGS@ OCAMLC_CFLAGS=@ocamlc_cflags@ OCAMLC_CPPFLAGS=@ocamlc_cppflags@ -BYTECCLIBS=@bytecclibs@ +ZSTD_LIBS=@zstd_libs@ +BYTECCLIBS=@zstd_libs@ @cclibs@ EXE=@exeext@ -OUTPUTEXE=@outputexe@ +OUTPUTEXE=@outputexe@$(EMPTY) SUPPORTS_SHARED_LIBRARIES=@supports_shared_libraries@ MKSHAREDLIBRPATH=@mksharedlibrpath@ DYNLINKOPTS=@DLLIBS@ @@ -203,80 +179,56 @@ MKLIB=@mklib@ # two drivers should be identical. OCAMLOPT_CFLAGS=@ocamlc_cflags@ OCAMLOPT_CPPFLAGS=@ocamlc_cppflags@ -NATIVECCLIBS=@nativecclibs@ +NATIVECCLIBS=@cclibs@ SYSTHREAD_SUPPORT=@systhread_support@ -PACKLD=@PACKLD@ -FLEXDLL_CHAIN=@flexdll_chain@ -EXTRALIBS=@extralibs@ +PACKLD=@PACKLD@$(EMPTY) CCOMPTYPE=@ccomptype@ TOOLCHAIN=@toolchain@ CMXS=@cmxs@ -# On Windows, MKDLL, MKEXE and MKMAINDLL must ultimately be equivalent to -# $(FLEXLINK_CMD) $(FLEXLINK_FLAGS) [-exe|-maindll] -# or OCAML_FLEXLINK overriding will not work (see utils/config.mlp) +FLEXDLL_CHAIN=@flexdll_chain@ MKEXE=@mkexe@ -MKDLL=@mksharedlib@ +MKDLL=@mkdll@ MKMAINDLL=@mkmaindll@ - MKEXEDEBUGFLAG=@mkexedebugflag@ + RUNTIMED=@debug_runtime@ INSTRUMENTED_RUNTIME=@instrumented_runtime@ INSTRUMENTED_RUNTIME_LIBS=@instrumented_runtime_libs@ WITH_DEBUGGER=@with_debugger@ -WITH_CAMLTEX=@with_camltex@ -WITH_OCAMLDOC=@ocamldoc@ -WITH_OCAMLTEST=@ocamltest@ ASM_CFI_SUPPORTED=@asm_cfi_supported@ WITH_FRAME_POINTERS=@frame_pointers@ -WITH_PROFINFO=@profinfo@ -PROFINFO_WIDTH=@profinfo_width@ +HEADER_RESERVED_BITS=@reserved_header_bits@ WITH_FPIC=@fpic@ TARGET=@target@ HOST=@host@ FLAMBDA=@flambda@ WITH_FLAMBDA_INVARIANTS=@flambda_invariants@ WITH_CMM_INVARIANTS=@cmm_invariants@ -FORCE_SAFE_STRING=@force_safe_string@ -DEFAULT_SAFE_STRING=@default_safe_string@ +FORCE_SAFE_STRING=true +DEFAULT_SAFE_STRING=true WINDOWS_UNICODE=@windows_unicode@ AFL_INSTRUMENT=@afl@ FLAT_FLOAT_ARRAY=@flat_float_array@ FUNCTION_SECTIONS=@function_sections@ AWK=@AWK@ -STDLIB_MANPAGES=@stdlib_manpages@ -NAKED_POINTERS=@naked_pointers@ - -### Native command to build ocamlrun.exe - -ifeq "$(TOOLCHAIN)" "msvc" - MERGEMANIFESTEXE=test ! -f $(1).manifest \ - || mt -nologo -outputresource:$(1) -manifest $(1).manifest \ - && rm -f $(1).manifest - MKEXE_USING_COMPILER=$(CC) $(OC_CFLAGS) $(CFLAGS) $(OUTPUTEXE)$(1) $(2) \ - /link /subsystem:console $(OC_LDFLAGS) $(LDFLAGS) && ($(MERGEMANIFESTEXE)) -else - MKEXE_USING_COMPILER=$(CC) $(OC_CFLAGS) $(CFLAGS) $(OC_LDFLAGS) $(LDFLAGS) \ - $(OUTPUTEXE)$(1) $(2) -endif # ifeq "$(TOOLCHAIN)" "msvc" - -FLEXLINK_FLAGS=@flexlink_flags@ -FLEXLINK_CMD=flexlink -FLEXLINK=$(FLEXLINK_CMD) $(FLEXLINK_FLAGS) +NAKED_POINTERS=false # Deprecated variables -## Variables renamed in OCaml 4.13 +## Variables deprecated since OCaml 5.2 -RUNTIMEI=$(INSTRUMENTED_RUNTIME) +STDLIB_MANPAGES=@build_libraries_manpages@ +WITH_OCAMLDOC=@with_ocamldoc@ +WITH_OCAMLTEST=@ocamltest@ +SHEBANGSCRIPTS=@shebangscripts@ +HASHBANGSCRIPTS=$(SHEBANGSCRIPTS) + +## Variables deprecated since OCaml 5.0 -### pthread-related variables +UNIXLIB=unix -PTHREAD_LINK=$(PTHREAD_LIBS) -PTHREAD_CAML_LINK=$(PTHREAD_CAML_LIBS) +## Variables renamed in OCaml 4.13 -### It is expected that the value of PTHREAD_LINK changes between OCaml -### 4.12 and 4.13. Indeed, for OCaml 4.12 most of the time the variable -### contained -lpthread. From 4.13 onward it will most of the time be -### empty since we have -pthread in CFLAGS which implies -lpthread. +RUNTIMEI=$(INSTRUMENTED_RUNTIME) diff --git a/Makefile.config_if_required b/Makefile.config_if_required index a25ffeb6..2f249600 100644 --- a/Makefile.config_if_required +++ b/Makefile.config_if_required @@ -24,5 +24,7 @@ REQUIRES_CONFIGURATION := $(strip \ $(filter-out $(CLEAN_TARGET_NAMES) configure, $(MAKECMDGOALS))) ifneq "$(REQUIRES_CONFIGURATION)" "" +ifneq "$(origin BUILD_CONFIG_INCLUDED)" "override" include $(ROOTDIR)/Makefile.build_config endif +endif diff --git a/Makefile.menhir b/Makefile.menhir index c46fcaa0..139894d3 100644 --- a/Makefile.menhir +++ b/Makefile.menhir @@ -76,7 +76,7 @@ MENHIRBASICFLAGS := \ MENHIRFLAGS := \ $(MENHIRBASICFLAGS) \ --infer \ - --ocamlc "$(CAMLC) $(COMPFLAGS)" \ + --ocamlc "$(call CONVERT_PATH, $(CAMLC)) $(OC_COMMON_COMPFLAGS) $(INCLUDES)" \ --fixed-exception \ --table \ --strategy simplified \ @@ -105,12 +105,12 @@ promote-menhir: parsing/parser.mly # an incompatible version of menhirLib, which would fail at # compile-time. +boot/menhir: + @$(MKDIR) $@ + .PHONY: import-menhirLib -import-menhirLib: - @ mkdir -p boot/menhir - @ cp \ - $(addprefix `$(MENHIR) --suggest-menhirLib`/menhirLib.,ml mli) \ - boot/menhir +import-menhirLib: | boot/menhir + @cp $(addprefix $(shell $(MENHIR) --suggest-menhirLib)/menhirLib.,ml mli) $| ## demote-menhir @@ -159,12 +159,13 @@ clean-menhir: partialclean-menhir ## depend-menhir +# The following rule depends on the OCAMLDEP_CMD variable defined in +# Makefile.common, so it can only be invoked from the main (root) Makefile + .PHONY: depend-menhir depend-menhir: - $(MENHIR) --depend --ocamldep "$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES)" \ - parsing/parser.mly > .depend.menhir -# this rule depends on the variables CAMLDEP, DEPFLAGS, DEPINCLUDES -# defined in Makefile, so it can only be invoked from the main Makefile + $(MENHIR) --depend --ocamldep "$(OCAMLDEP_CMD)" \ + parsing/parser.mly > .depend.menhir include .depend.menhir diff --git a/README.adoc b/README.adoc index fb293bb2..078bd745 100644 --- a/README.adoc +++ b/README.adoc @@ -1,5 +1,28 @@ +=== ⚠️ CAUTION + +The developer team released OCaml 5.0.0 in December 2022. This release sports a +full rewrite of its runtime system for shared-memory parallel programming using +domains and native support for concurrent programming using effect handlers. + +Owing to the large number of changes, the initial 5.0 release is more +experimental than usual. It is recommended that all users wanting a stable +release use the 4.14 release which will continue to be supported and updated +while 5.x reaches feature and stability parity. Similarly, if you need one of +the ports not yet supported in the 5.0 release you must use the 4.14 release. + +The initial release of OCaml 5.0 only supports the native compiler under ARM64 +and x86-64 architectures under Linux, macOS and the BSDs. On Windows, only the +MinGW-w64 port is supported in OCaml 5.0 and the Cygwin port is restored in 5.1. +On Linux, native code support for RISC-V and s390x/IBM Z will be available in +OCaml 5.1 and on Power in 5.2. + +❗ From OCaml 5.0 onwards, native compilation is available only on 64-bit +systems. Native compilation on 32-bit systems is no longer available, nor +are there plans to bring it back. The bytecode compiler will continue to work on +all architectures. + |===== -| Branch `trunk` | Branch `4.12` | Branch `4.11` | Branch `4.10` +| Branch `trunk` | Branch `5.1` | Branch `5.0` | Branch `4.14` | image:https://github.com/ocaml/ocaml/workflows/Build/badge.svg?branch=trunk["Github CI Build Status (trunk branch)", link="https://github.com/ocaml/ocaml/actions?query=workflow%3ABuild"] @@ -7,17 +30,17 @@ link="https://github.com/ocaml/ocaml/actions?query=workflow%3AHygiene"] image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=trunk&svg=true["AppVeyor Build Status (trunk branch)", link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://github.com/ocaml/ocaml/workflows/main/badge.svg?branch=4.12["Github CI Build Status (4.12 branch)", - link="https://github.com/ocaml/ocaml/actions?query=workflow%3Amain"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.12&svg=true["AppVeyor Build Status (4.12 branch)", +| image:https://github.com/ocaml/ocaml/workflows/Build/badge.svg?branch=5.1["Github CI Build Status (5.1 branch)", + link="https://github.com/ocaml/ocaml/actions?query=workflow%3ABuild"] + image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=5.1&svg=true["AppVeyor Build Status (5.1 branch)", link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.11["TravisCI Build Status (4.11 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.11&svg=true["AppVeyor Build Status (4.11 branch)", +| image:https://github.com/ocaml/ocaml/workflows/Build/badge.svg?branch=5.0["Github CI Build Status (5.0 branch)", + link="https://github.com/ocaml/ocaml/actions?query=workflow%3ABuild"] + image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=5.0&svg=true["AppVeyor Build Status (5.0 branch)", link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.10["TravisCI Build Status (4.10 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.10&svg=true["AppVeyor Build Status (4.10 branch)", +| image:https://github.com/ocaml/ocaml/workflows/Build/badge.svg?branch=4.14["Github CI Build Status (4.14 branch)", + link="https://github.com/ocaml/ocaml/actions?query=workflow%3ABuild"] + image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.14&svg=true["AppVeyor Build Status (4.14 branch)", link="https://ci.appveyor.com/project/avsm/ocaml"] |===== @@ -46,12 +69,9 @@ compiler currently runs on the following platforms: |==== | | Tier 1 (actively maintained) | Tier 2 (maintained when possible) -| x86 64 bits | Linux, macOS, Windows, FreeBSD | NetBSD, OpenBSD -| x86 32 bits | Linux, Windows | FreeBSD, NetBSD, OpenBSD -| ARM 64 bits | Linux, macOS | FreeBSD -| ARM 32 bits | Linux | FreeBSD, NetBSD, OpenBSD -| Power 64 bits | Linux | -| Power 32 bits | Linux | +| x86 64 bits | Linux, macOS, Windows, FreeBSD | NetBSD, OpenBSD, OmniOS (Solaris) +| ARM 64 bits | Linux, macOS | FreeBSD, OpenBSD, NetBSD +| Power 64 bits | Linux (little-endian, ABIv2) | Linux (big-endian, ABIv2) | RISC-V 64 bits | Linux | | IBM Z (s390x) | Linux | |==== @@ -63,7 +83,7 @@ the compiler may work under other operating systems with little work. == Copyright All files marked "Copyright INRIA" in this distribution are -Copyright (C) 1996-2021 Institut National de Recherche en Informatique et +Copyright (C) 1996-2023 Institut National de Recherche en Informatique et en Automatique (INRIA) and distributed under the conditions stated in file LICENSE. @@ -101,10 +121,6 @@ You can subscribe and access list archives via the Web interface at https://sympa.inria.fr/sympa/subscribe/caml-list -An alternative archive of the mailing list is also available at - -https://inbox.ocaml.org/ - There also exist other mailing lists, chat channels, and various other forums around the internet for getting in touch with the OCaml and ML family language community. These can be accessed at @@ -129,13 +145,18 @@ link:CONTRIBUTING.md[]. == Separately maintained components Some libraries and tools which used to be part of the OCaml distribution are -now maintained separately. Please use the issue trackers at their respective -new homes: - -- https://github.com/ocaml/graphics/issues[The Graphics library] (removed in OCaml 4.09) -- https://github.com/ocaml/num/issues[The Num library] (removed in OCaml 4.06) -- https://github.com/ocaml/ocamlbuild/issues[The OCamlbuild tool] (removed in OCaml 4.03) -- https://github.com/camlp4/camlp4/issues[The camlp4 tool] (removed in OCaml 4.02) -- https://github.com/garrigue/labltk/issues[The LablTk library] (removed in OCaml 4.02) -- https://github.com/ocaml/dbm/issues[The CamlDBM library] (removed in OCaml 4.00) -- https://github.com/xavierleroy/ocamltopwin/issues[The OCamlWinTop Windows toplevel] (removed in OCaml 4.00) +now maintained separately and distributed as OPAM packages. +Please use the issue trackers at their respective new homes: + +|==== +| Library | Removed since | OPAM package + +| https://github.com/ocaml/camlp-streams/issues[The Stream and Genlex standard library modules] | OCaml 5.0 | `camlp-streams` +| https://github.com/ocaml/graphics/issues[The Graphics library] | OCaml 4.09 | `graphics` +| https://github.com/ocaml/num/issues[The Num library] | OCaml 4.06 | `num` +| https://github.com/ocaml/ocamlbuild/issues[The OCamlbuild tool] | OCaml 4.03 | `ocamlbuild` +| https://github.com/camlp4/camlp4/issues[The camlp4 tool] | OCaml 4.02 | `camlp4` +| https://github.com/garrigue/labltk/issues[The LablTk library] | OCaml 4.02 | `labltk` +| https://github.com/ocaml/dbm/issues[The CamlDBM library] | OCaml 4.00 | `dbm` +| https://github.com/xavierleroy/ocamltopwin/issues[The OCamlWinTop Windows toplevel] | OCaml 4.00 | none +|===== diff --git a/README.win32.adoc b/README.win32.adoc index 410a8eef..901d3c30 100644 --- a/README.win32.adoc +++ b/README.win32.adoc @@ -1,3 +1,20 @@ +=== ⚠️ CAUTION + +The developer team is currently preparing the release of OCaml 5.0. This release +sports a full rewrite of its runtime system for shared-memory parallel +programming using domains and native support for concurrent programming using +effect handlers. + +Owing to the large number of changes, the initial 5.0 release will be more +experimental than usual. It is recommended that all users wanting a stable +release use the 4.14 release which will continue to be supported and updated +while 5.0 reaches feature and stability parity. Similarly, if you need one of +the ports not yet supported in the 5.0 release you must use the 4.14 release. + +The MSVC port is presently not supported, but will hopefully be added back in +later releases. On 32-bit systems, only the bytecode compiler is supported. +Native-code support for these 32-bit systems is under discussion. + = Release notes for the Microsoft Windows ports of OCaml = :toc: macro @@ -5,13 +22,13 @@ There are no fewer than three ports of OCaml for Microsoft Windows, each available in 32 and 64-bit versions: - native Windows, built with the Microsoft C/C++ Optimizing Compiler - - native Windows, built using the Mingw-w64 version of GCC + - native Windows, built using the MinGW-w64 version of GCC - Cygwin (http://www.cygwin.com[www.cygwin.com]) Here is a summary of the main differences between these ports: |===== -| | Native Microsoft | Native Mingw-w64 | Cygwin +| | Native Microsoft | Native MinGW-w64 | Cygwin 4+^| Third-party software required | for base bytecode system | none | none | none | for `ocamlc -custom` | Microsoft Visual C++ | Cygwin | Cygwin @@ -27,14 +44,14 @@ Here is a summary of the main differences between these ports: [[tb1]] (*):: Executables generated by the native GCC package in Cygwin are linked with the Cygwin DLL and require this to be distributed with your programs. -Executables generated by Microsoft Visual C++ or the Mingw-w64 compilers (even +Executables generated by Microsoft Visual C++ or the MinGW-w64 compilers (even when run in Cygwin as `i686-w64-mingw32-gcc` or `x86_64-w64-mingw32-gcc`) are not linked against this DLL. Prior to Cygwin 2.5.2 (the Cygwin version can be obtained with `uname -r`) the Cygwin DLL is distributed under the GPL, requiring any programs linked with it to be distributed under a compatible licence. Since version 2.5.2, the Cygwin DLL is distributed under the LGPLv3 with a static linking exception meaning that, like executables generated by Microsoft Visual -C++ or the Mingw-w64 compilers, generated executables may be distributed under +C++ or the MinGW-w64 compilers, generated executables may be distributed under terms of your choosing. [[tb2]] @@ -45,7 +62,7 @@ Cygwin aims to provide a Unix-like environment on Windows, and the build procedure for it is the same as for other flavours of Unix. See link:INSTALL.adoc[] for full instructions. -The native ports require Windows XP or later and naturally the 64-bit versions +The native ports require Windows Vista or later and naturally the 64-bit versions need a 64-bit edition of Windows (note that this is both to run *and* build). The two native Windows ports have to be built differently, and the remainder of @@ -67,7 +84,7 @@ Unless you are also compiling the Cygwin port of OCaml, you do not need the [[bmflex]] In addition to Cygwin, FlexDLL must also be installed, which is available from -https://github.com/alainfrisch/flexdll. A binary distribution is available; +https://github.com/ocaml/flexdll. A binary distribution is available; instructions on how to build FlexDLL from sources, including how to bootstrap FlexDLL and OCaml are given <>. Unless you bootstrap FlexDLL, you will need to ensure that the directory to which you @@ -88,13 +105,12 @@ C code (`ocamlc -custom`) require a Microsoft Visual C/C++ Compiler and the `flexlink` tool (see <>). Any edition (including Express/Community editions) of Microsoft Visual Studio -2005 or later may be used to provide the required Windows headers and the C +2008 or later may be used to provide the required Windows headers and the C compiler. Additionally, some older Microsoft Windows SDKs include the Visual C/C++ Compiler as well as the Build Tools for Visual Studio. |===== | | `cl` Version | Express | SDK/Build Tools -| Visual Studio 2005 | 14.00.x.x | 32-bit only <> | | Visual Studio 2008 | 15.00.x.x | 32-bit only | Windows SDK 7.0 also provides 32/64-bit compilers | Visual Studio 2010 | 16.00.x.x | 32-bit only | Windows SDK 7.1 also provides 32/64-bit compilers | Visual Studio 2012 | 17.00.x.x | 32/64-bit | @@ -102,13 +118,9 @@ Visual C/C++ Compiler as well as the Build Tools for Visual Studio. | Visual Studio 2015 | 19.00.x.x | 32/64-bit | Build Tools for Visual Studio 2015 also provides 32/64-bit compilers | Visual Studio 2017 | 19.10.x.x | 32/64-bit | Build Tools for Visual Studio 2017 also provides 32/64-bit compilers | Visual Studio 2019 | 19.20.x.x | 32/64-bit | Build Tools for Visual Studio 2019 also provides 32/64-bit compilers +| Visual Studio 2022 | 19.37.x.x | 32/64-bit | Build Tools for Visual Studio 2022 also provides 32/64-bit compilers |===== -[[vs1]] -(*):: Visual C++ 2005 Express Edition does not provide an assembler; this can be - downloaded separately from - https://www.microsoft.com/en-gb/download/details.aspx?id=12654 - === COMPILATION FROM THE SOURCES The command-line tools must be compiled from the Unix source distribution @@ -137,7 +149,7 @@ for 32-bit or: SetEnv /Release /x64 -for 64-bit. For Visual Studio 2005-2013, you need to use one of the shortcuts in +for 64-bit. For Visual Studio 2008-2013, you need to use one of the shortcuts in the "Visual Studio Tools" program group under the main program group for the version of Visual Studio you installed. For Visual Studio 2015 and 2017, you need to use the shortcuts in the "Windows Desktop Command Prompts" (2015) or @@ -146,7 +158,7 @@ need to use the shortcuts in the "Windows Desktop Command Prompts" (2015) or Unlike `SetEnv` for the Windows SDK, the architecture is selected by using a different shortcut, rather than by running a command. -For Visual Studio 2005-2010, excluding version-specific prefixes, these are +For Visual Studio 2008-2010, excluding version-specific prefixes, these are named "Command Prompt" for 32-bit and "x64 Cross Tools Command Prompt" or "x64 Win64 Command Prompt" for 64-bit. It does not matter whether you use a "Cross Tools" or "Win64" version for x64, this simply refers to whether the @@ -155,11 +167,11 @@ work with OCaml. For Visual Studio 2012 and 2013, both x86 and x64 Command Prompt shortcuts indicate if they are the "Native Tools" or "Cross Tools" versions. Visual Studio -2015 and 2017 make the shortcuts even clearer by including the full name of the -architecture. +2015, 2017, and 2022 make the shortcuts even clearer by including the full name +of the architecture. -The Build Tools for Visual Studio 2015 and 2017 provide shortcuts similar to -the ones of their respective Visual Studio version. +The Build Tools for Visual Studio 2015, 2017, and 2022 provide shortcuts similar +to the ones of their respective Visual Studio version. You cannot at present use a cross-compiler to compile 64-bit OCaml on 32-bit Windows. @@ -168,7 +180,7 @@ Once you have started a Command Prompt, you can verify that you have the compiler you are expecting simply by running: cl - Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x86 + Microsoft (R) C/C++ Optimizing Compiler Version 19.37.32825 for x64 ... You then need to start Cygwin from this Command Prompt. Assuming you have @@ -221,9 +233,9 @@ your `~/.bashrc` file. * The Microsoft Visual C/C++ compiler does not implement "computed gotos", and therefore generates inefficient code for `runtime/interp.c`. Consequently, the performance of bytecode programs is about 2/3 of that obtained under - Unix/GCC, Cygwin or Mingw-w64 on similar hardware. + Unix/GCC, Cygwin or MinGW-w64 on similar hardware. -* Libraries available in this port: `bigarray`, `dynlink`, `num`, +* Libraries available in this port: `dynlink`, `num`, `str`, `threads`, and large parts of `unix`. * The replay debugger is partially supported (no reverse execution). @@ -234,19 +246,19 @@ The initial port of Caml Special Light (the ancestor of OCaml) to Windows NT was done by Kevin Gallo at Microsoft Research, who kindly contributed his changes to the OCaml project. -== Mingw-w64 Ports +== MinGW-w64 Ports === REQUIREMENTS The native-code compiler (`ocamlopt`) and static linking of OCaml bytecode with -C code (`ocamlc -custom`) require the appropriate Mingw-w64 gcc and the -`flexlink` tool (see <>). Mingw-w64 gcc is provided by the +C code (`ocamlc -custom`) require the appropriate MinGW-w64 gcc and the +`flexlink` tool (see <>). MinGW-w64 gcc is provided by the `mingw64-i686-gcc-core` package for 32-bit and the `mingw64-x86_64-gcc-core` package for 64-bit. - The Cygwin version of flexdll does not work with this port. - - The standalone mingw toolchain from the Mingw-w64 project + - The standalone mingw toolchain from the MinGW-w64 project (http://mingw-w64.org/) is not supported. Please use the version packaged in Cygwin instead. @@ -277,7 +289,7 @@ After installing, you will need to ensure that `ocamlopt` (or `ocamlc -custom`) can access the C compiler. You can do this either by using OCaml from Cygwin's bash or by adding Cygwin's bin directory (e.g. `C:\cygwin\bin`) to your `PATH`. -* Libraries available in this port: `bigarray`, `dynlink`, `num`, +* Libraries available in this port: `dynlink`, `num`, `str`, `threads`, and large parts of `unix`. * The replay debugger is partially supported (no reverse execution). @@ -296,10 +308,10 @@ You must extract the FlexDLL sources for Version 0.35 or later in the directory done in one of three ways: * Extracting the sources from a tarball from - https://github.com/alainfrisch/flexdll/releases + https://github.com/ocaml/flexdll/releases * Cloning the git repository by running: + - git clone https://github.com/alainfrisch/flexdll.git + git clone https://github.com/ocaml/flexdll.git * If you are compiling from a git clone of the OCaml repository, instead of using a sources tarball, you can run: diff --git a/VERSION b/VERSION index 4d777f22..e4f27f17 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ -4.14.1 +5.2.0 # Starting with OCaml 4.14, although the version string that appears above is # still correct and this file can thus still be used to figure it out, diff --git a/aclocal.m4 b/aclocal.m4 index addb0d8b..cb73385d 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -26,6 +26,7 @@ m4_include([build-aux/ltoptions.m4]) m4_include([build-aux/ltsugar.m4]) m4_include([build-aux/ltversion.m4]) m4_include([build-aux/lt~obsolete.m4]) +m4_include([build-aux/ax_check_compile_flag.m4]) # Macros from the autoconf macro archive m4_include([build-aux/ax_func_which_gethostbyname_r.m4]) @@ -46,8 +47,19 @@ AC_DEFUN([OCAML_CC_VENDOR], [ [AC_LANG_SOURCE([ #if defined(_MSC_VER) msvc _MSC_VER +# if defined(__clang_major__) && defined(__clang_minor__) + clang __clang_major__ __clang_minor__ +# endif #elif defined(__INTEL_COMPILER) icc __INTEL_COMPILER +#elif defined(__MINGW32__) +#include <_mingw_mac.h> +mingw __MINGW64_VERSION_MAJOR __MINGW64_VERSION_MINOR +# if defined(__clang_major__) && defined(__clang_minor__) + clang __clang_major__ __clang_minor__ +# elif defined(__GNUC__) && defined(__GNUC_MINOR__) + gcc __GNUC__ __GNUC_MINOR__ +# endif #elif defined(__clang_major__) && defined(__clang_minor__) clang __clang_major__ __clang_minor__ #elif defined(__GNUC__) && defined(__GNUC_MINOR__) @@ -60,11 +72,14 @@ sunc __SUNPRO_C __SUNPRO_C unknown #endif] )], - [AC_CACHE_VAL([ocaml_cv_cc_vendor], - [ocaml_cv_cc_vendor=`grep ['^[a-z]'] conftest.i | tr -s ' ' '-' \ - | tr -d '\r'`])], + [AC_CACHE_VAL([ocaml_cv_cc_vendor2], + [ocaml_cv_cc_vendor2=`sed -e '/^#/d' conftest.i | tr -s '[:space:]' '-' \ + | sed -e 's/^-//' -e 's/-$//'`]) + # Domain of values was changed in #12768, so the cache key became different + # from the variable + ocaml_cc_vendor="$ocaml_cv_cc_vendor2"], [AC_MSG_FAILURE([unexpected preprocessor failure])]) - AC_MSG_RESULT([$ocaml_cv_cc_vendor]) + AC_MSG_RESULT([$ocaml_cc_vendor]) ]) AC_DEFUN([OCAML_SIGNAL_HANDLERS_SEMANTICS], [ @@ -249,6 +264,30 @@ camlPervasives__loop_1128: AC_MSG_RESULT([no])])]) ])]) +AC_DEFUN([OCAML_MMAP_SUPPORTS_MAP_STACK], [ + AC_MSG_CHECKING([whether mmap supports MAP_STACK]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +#include + +int main (int argc, char *argv[]){ + void *block; + block = mmap (NULL, 4096, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_STACK, + -1, 0); + if (block == MAP_FAILED) + return 1; + return 0; +} + ]])], + [has_mmap_map_stack=true + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([no assumed])]) +]) + AC_DEFUN([OCAML_MMAP_SUPPORTS_HUGE_PAGES], [ AC_MSG_CHECKING([whether mmap supports huge pages]) AC_RUN_IFELSE( @@ -298,16 +337,16 @@ int main (int argc, char *argv[]){ ]) AC_DEFUN([OCAML_CHECK_LIBUNWIND], [ - SAVED_CFLAGS="$CFLAGS" + SAVED_CPPFLAGS="$CPPFLAGS" SAVED_LDFLAGS="$LDFLAGS" - CFLAGS="$CFLAGS $libunwind_include_flags" - LDFLAGS="$LDFLAGS $libunwind_link_flags" + CPPFLAGS="$CPPFLAGS $libunwind_cppflags" + LDFLAGS="$LDFLAGS $libunwind_ldflags" AC_CHECK_HEADER([libunwind.h], [AC_DEFINE([HAS_LIBUNWIND]) libunwind_available=true], [libunwind_available=false]) LDFLAGS="$SAVED_LDFLAGS" - CFLAGS="$SAVED_CFLAGS" + CPPFLAGS="$SAVED_CPPFLAGS" ]) AC_DEFUN([OCAML_TEST_FLEXLINK], [ @@ -416,7 +455,7 @@ int main (void) { AS_CASE([$enable_imprecise_c99_float_ops,$target], [no,*], [hard_error=true], [yes,*], [hard_error=false], - [*,x86_64-w64-mingw32], [hard_error=false], + [*,x86_64-w64-mingw32*], [hard_error=false], [hard_error=true]) AS_IF([test x"$hard_error" = "xtrue"], [AC_MSG_ERROR(m4_normalize([ @@ -425,7 +464,7 @@ int main (void) { [AC_MSG_WARN(m4_normalize([ round does not work; emulation enabled]))])], [AS_CASE([$target], - [x86_64-w64-mingw32],[AC_MSG_RESULT([cross-compiling; assume not])], + [x86_64-w64-mingw32*],[AC_MSG_RESULT([cross-compiling; assume not])], [AC_MSG_RESULT([cross-compiling; assume yes]) AC_DEFINE([HAS_WORKING_ROUND])])]) ]) @@ -468,9 +507,9 @@ int main (void) { AS_CASE([$enable_imprecise_c99_float_ops,$target], [no,*], [hard_error=true], [yes,*], [hard_error=false], - [*,x86_64-w64-mingw32|*,x86_64-*-cygwin*], [hard_error=false], - [AS_CASE([$ocaml_cv_cc_vendor], - [msvc-*], [AS_IF([test "${ocaml_cv_cc_vendor#msvc-}" -lt 1920 ], + [*,x86_64-w64-mingw32*|*,x86_64-*-cygwin*], [hard_error=false], + [AS_CASE([$ocaml_cc_vendor], + [msvc-*], [AS_IF([test "${ocaml_cc_vendor#msvc-}" -lt 1920 ], [hard_error=false], [hard_error=true])], [hard_error=true])]) @@ -481,8 +520,56 @@ int main (void) { [AC_MSG_WARN(m4_normalize([ fma does not work; emulation enabled]))])], [AS_CASE([$target], - [x86_64-w64-mingw32|x86_64-*-cygwin*], + [x86_64-w64-mingw32*|x86_64-*-cygwin*], [AC_MSG_RESULT([cross-compiling; assume not])], [AC_MSG_RESULT([cross-compiling; assume yes]) AC_DEFINE([HAS_WORKING_FMA])])]) ]) + +# Computes a suitable id to insert in quoted strings to ensure that all OCaml +# quoted strings generated by configure cannot be "escaped". The ID takes the +# form {o*|string|o*}. +AC_DEFUN([OCAML_QUOTED_STRING_ID], [ + # Go through ac_subst_vars and put all the values to be substituted in + # $all_values. + QS='' + all_values='' + for name in $ac_subst_vars; do + eval "value=\$${name}" + all_values="$all_values $value" + done + + # Keep adding 'o' to $QS until |$QS} doesn't appear in any substitution. + test_string='' + while test "x${test_string}" != "x${all_values}"; do + test_string="$all_values" + eval "test_string=\"\${test_string##*\|${QS}\}}\"" + if test "x${test_string}" != "x${all_values}"; then + QS="o${QS}" + fi + done +]) + +AC_DEFUN([OCAML_CC_SUPPORTS_ATOMIC], [ + AC_MSG_CHECKING([whether the C compiler supports _Atomic types]) + saved_LIBS="$LIBS" + LIBS="$LIBS $1" + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + #include + #include + int main(void) + { + _Atomic int64_t n; + int m; + int * _Atomic p = &m; + atomic_store_explicit(&n, 123, memory_order_release); + * atomic_exchange(&p, 0) = 45; + return atomic_load_explicit(&n, memory_order_acquire); + } + ]])], + [cc_supports_atomic=true + AC_MSG_RESULT([yes])], + [cc_supports_atomic=false + AC_MSG_RESULT([no])]) + LIBS="$saved_LIBS" +]) diff --git a/api_docgen/Format_tutorial.mld b/api_docgen/Format_tutorial.mld index d19655ea..73f11dc9 100644 --- a/api_docgen/Format_tutorial.mld +++ b/api_docgen/Format_tutorial.mld @@ -233,7 +233,7 @@ is enough room on the line, whereas with structural boxes each break hint will lead to a new line. For instance, when printing "\[(---\[(----\[(---b)\]b)\]b)\]", where "b" is a break hint without extra indentation ([print_cut ()]). If "\[" means opening of a packing "hov" box -({!Format.open_hovbox}), "\[(---\[(----\[(---b)\]b)\]b)\]" is printed as +({!Format.open_hovbox} 1), "\[(---\[(----\[(---b)\]b)\]b)\]" is printed as follows: {[ @@ -242,11 +242,35 @@ follows: (---))) ]} -If we replace the packing boxes by structural boxes ({!Format.open_box}), each +If we replace the packing boxes by structural boxes ({!Format.open_box} 1), each break hint that precedes a closing parenthesis can show the boxes structure, if it leads to a new line; hence "\[(---\[(----\[(---b)\]b)\]b)\]" is printed like this: +{[ +(--- + (---- + (--- + ) + ) + ) +]} + +Each break hint increases indentation by one, both for opening and closing +parenthesis, because the parenthesis are just characters and don't have special +meaning for the formatter. +Notice that the closing parenthesis is not vertically aligned with the opening +parenthesis. + +We can line up the opening and closing parenthesis vertically in two ways: + +- by using a break hint "b" with negative indentation that matches the opening + indentation of the box `@;<0 -1>`, canceling it. +- by using an additional box, and making all boxes and break hints use + no indentation: "\[(\[---\[(\[----\[(\[---\]b)\]\]b)\]\]b)\]" + +In both cases the output would be this: + {[ (--- (---- @@ -265,6 +289,10 @@ When writing a pretty-printing routine, follow these simple rules: + Never hesitate to open a box. + Output many break hints, otherwise the pretty-printer is in a bad situation where it tries to do its best, which is always "worse than your bad". ++ Break hints with negative indentation should only be used when you are sure +that you don't exceed the indentation of the opening box (e.g. both part of +the same function and an exact match). Exceeding the indentation of the opening +box is not compositional. + Do not try to force spacing using explicit spaces in the character strings. For each space you want in the output emit a break hint ([print_space ()]), unless you explicitly don't want the line to be broken here. For instance, diff --git a/api_docgen/Makefile.common b/api_docgen/Makefile.common index 2a5e7e30..f3c84653 100644 --- a/api_docgen/Makefile.common +++ b/api_docgen/Makefile.common @@ -23,8 +23,7 @@ DOC_COMPILERLIBS_DIRS= $(addprefix $(ROOTDIR)/,\ parsing utils typing bytecomp driver file_formats lambda) DOC_STDLIB_DIRS = $(addprefix $(ROOTDIR)/, stdlib \ - otherlibs/str otherlibs/$(UNIXLIB) otherlibs/dynlink \ - otherlibs/systhreads) + $(addprefix otherlibs/,$(ALL_OTHERLIBS))) .PHONY: all all: html pdf man @@ -43,12 +42,12 @@ build/latex/alldoc.pdf: build/latex/stdlib_input.tex \ build/latex/compilerlibs_input.tex | build/latex/ifocamldoc.tex build/Compiler_libs.mld: $(DOCGEN)/Compiler_libs.pre.mld | build/ - cp $< $@ && echo "{!modules:$(compilerlibref_C)}" >> $@ + $(V_GEN)cp $< $@ && echo "{!modules:$(compilerlibref_C)}" >> $@ build/latex/ifocamldoc.tex: $(ROOTDIR)/Makefile.config | build/latex build/latex/alldoc.tex:$(DOCGEN)/alldoc.tex | build/latex - cp $< $@ + $(V_GEN)cp $< $@ build/%.mld: $(DOCGEN)/%.mld | build/ - cp $< $@ + $(V_GEN)cp $< $@ diff --git a/api_docgen/Makefile.docfiles b/api_docgen/Makefile.docfiles index 14a3b183..ce0406e3 100644 --- a/api_docgen/Makefile.docfiles +++ b/api_docgen/Makefile.docfiles @@ -26,44 +26,40 @@ define capitalize $(foreach m,$(1),$(call capitalize_one,$m)) endef -define sort -$(shell $(BEST_OCAMLDEP) -sort $(1)) -endef - - +runtime_events_MLIS := runtime_events.mli str_MLIS := str.mli unix_MLIS := unix.mli unixLabels.mli dynlink_MLIS := dynlink.mli thread_MLIS := \ - thread.mli condition.mli mutex.mli event.mli \ - threadUnix.mli semaphore.mli + thread.mli event.mli -STDLIB=$(filter-out stdlib__Pervasives, $(STDLIB_MODULES)) +STDLIB=$(STDLIB_MODULES) -stdlib_UNPREFIXED=$(filter-out pervasives, $(STDLIB_MODULE_BASENAMES)) +stdlib_UNPREFIXED=$(STDLIB_MODULE_BASENAMES) otherlibref := $(dynlink_MLIS:%.mli=%) -ifneq "$(filter str,$(OTHERLIBRARIES))" "" +ifeq "$(lib_str)" "true" otherlibref += $(str_MLIS:%.mli=%) endif -ifneq "$(filter %unix,$(OTHERLIBRARIES))" "" +ifeq "$(lib_unix)" "true" otherlibref += $(unix_MLIS:%.mli=%) endif -ifneq "$(filter systhreads,$(OTHERLIBRARIES))" "" +ifeq "$(lib_systhreads)" "true" otherlibref += $(thread_MLIS:%.mli=%) endif -libref_EXTRA=stdlib__pervasives +ifeq "$(lib_runtime_events)" "true" +otherlibref += $(runtime_events_MLIS:%.mli=%) +endif + libref_TEXT=Ocaml_operators Format_tutorial -libref_C=$(call capitalize,$(libref) $(libref_EXTRA)) +libref_C=$(call capitalize,$(libref)) -PARSING_MLIS := $(call sort, \ - $(notdir $(wildcard $(ROOTDIR)/parsing/*.mli))\ -) -UTILS_MLIS := $(call sort,$(notdir $(wildcard $(ROOTDIR)/utils/*.mli))) +PARSING_MLIS := $(notdir $(wildcard $(ROOTDIR)/parsing/*.mli)) +UTILS_MLIS := $(notdir $(wildcard $(ROOTDIR)/utils/*.mli)) DRIVER_MLIS := pparse.mli compilerlibref_MLIS= \ @@ -74,8 +70,20 @@ compilerlibref=$(compilerlibref_MLIS:%.mli=%) compilerlibref_TEXT=Compiler_libs compilerlibref_C=$(call capitalize,$(compilerlibref)) -ALL_LIBREF= $(libref_TEXT:%=libref/%) $(libref:%=libref/%) +ALL_LIBREF= \ + $(sort $(libref_TEXT:%=libref/%)) \ + $(sort $(filter-out libref/camlinternal%, $(libref:%=libref/%))) \ + $(sort $(filter libref/camlinternal%, $(libref:%=libref/%))) + ALL_COMPILERLIBREF= \ $(compilerlibref_TEXT:%=compilerlibref/%) \ $(compilerlibref:%=compilerlibref/%) +# Note that the output of $(wildcard ...) is sorted alphabetically. +# The compilerlibs index will be thus be sorted first by category: +# - text documentation +# - parsing modules +# - utils modules +# - driver modules +# And then alphabetically inside each category. + ALL_DOC= $(ALL_LIBREF) $(ALL_COMPILERLIBREF) diff --git a/api_docgen/alldoc.tex b/api_docgen/alldoc.tex index 2027c366..1bda6b43 100644 --- a/api_docgen/alldoc.tex +++ b/api_docgen/alldoc.tex @@ -9,33 +9,14 @@ \usepackage{textcomp} \else \usepackage{changepage} -\usepackage{longtable} \usepackage{listings} -\newcommand{\ocamlcodefragment}[1]{{\ttfamily\setlength{\parindent}{0cm}% -\raggedright#1}} -\newcommand{\ocamlinlinecode}[1]{{\ttfamily#1}} -\newcommand{\bold}[1]{{\bfseries#1}} -\newenvironment{ocamlexception}{\bfseries}{} -\newenvironment{ocamlextension}{\bfseries}{} -\newenvironment{ocamlarrow}{} - -\newcommand{\ocamltag}[2]{\begin{ocaml#1}#2\end{ocaml#1}} -\newenvironment{ocamlkeyword}{\bfseries}{} -\newenvironment{ocamlconstructor}{\bfseries}{} -\newenvironment{ocamltype-var}{\itshape\ttfamily}{} - +\newcommand{\ocamlkeyword}{\bfseries} \newcommand{\ocamlhighlight}{\bfseries\uline} \newcommand{\ocamlerror}{\bfseries} \newcommand{\ocamlwarning}{\bfseries} - -\definecolor{lightgray}{gray}{0.97} \definecolor{gray}{gray}{0.5} \newcommand{\ocamlcomment}{\color{gray}\normalfont\small} \newcommand{\ocamlstring}{\color{gray}\bfseries} -\newenvironment{ocamlindent}{\begin{adjustwidth}{2em}{0pt}}{\end{adjustwidth}} -\newenvironment{ocamltabular}[2][l]{\begin{tabular}{#2}}% -{\end{tabular}} - \lstnewenvironment{ocamlcodeblock}{ \lstset{ backgroundcolor = \color{lightgray}, @@ -57,7 +38,22 @@ literate={'"'}{\textquotesingle "\textquotesingle}3 {'\\"'}{\textquotesingle \textbackslash"\textquotesingle}4, } -}{} + }{} +\newcommand{\ocamltag}[2]{\begin{ocaml#1}#2\end{ocaml#1}} +\newcommand{\ocamlcodefragment}[1]{{\ttfamily\setlength{\parindent}{0cm}% +\raggedright#1}} +\newcommand{\ocamlinlinecode}[1]{{\ttfamily#1}} +\newenvironment{ocamlarrow}{}{} +\newenvironment{ocamlexception}{\bfseries}{} +\newenvironment{ocamlextension}{\bfseries}{} +\newenvironment{ocamlconstructor}{\bfseries}{} +\newenvironment{ocamltype-var}{\itshape\ttfamily}{} +\definecolor{lightgray}{gray}{0.97} +\definecolor{gray}{gray}{0.5} +\newenvironment{ocamlindent}{\begin{adjustwidth}{2em}{0pt}}{\end{adjustwidth}} +\newenvironment{ocamltabular}[1]{\begin{tabular}{#1}}% +{\end{tabular}} +\newcommand{\bold}[1]{{\bfseries#1}} \fi \ifocamldoc @@ -78,12 +74,8 @@ \chapter{Str} \docitem{libref}{Str.tex} \chapter{Thread} -\docitem{libref}{Condition.tex} \docitem{libref}{Event.tex} -\docitem{libref}{Mutex.tex} \docitem{libref}{Thread.tex} -\docitem{libref}{ThreadUnix.tex} -\docitem{libref}{Semaphore.tex} \chapter{Unix} \docitem{libref}{UnixLabels.tex} \docitem{libref}{Unix.tex} diff --git a/api_docgen/ocamldoc/Makefile b/api_docgen/ocamldoc/Makefile index 6af89ab4..5b1f8946 100644 --- a/api_docgen/ocamldoc/Makefile +++ b/api_docgen/ocamldoc/Makefile @@ -15,7 +15,6 @@ # Used by included Makefiles ROOTDIR = ../.. include ../Makefile.common -include ../../ocamldoc/Makefile.best_ocamldoc vpath %.mli ../../stdlib $(DOC_COMPILERLIBS_DIRS) $(DOC_STDLIB_DIRS) @@ -38,56 +37,56 @@ ALL_MAN= $(ALL_DOC:%=build/man/%.3o) ALL_LATEX= $(ALL_DOC:%=build/latex/%.tex) build/latex/ifocamldoc.tex: | build/latex - printf '\\newif\\ifocamldoc\\ocamldoctrue\n' > $@ + $(V_GEN)printf '\\newif\\ifocamldoc\\ocamldoctrue\n' > $@ $(libref:%=build/libref/%.odoc): build/libref/%.odoc: %.mli | build/libref - $(OCAMLDOC_RUN) -nostdlib -hide Stdlib -lib Stdlib \ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -nostdlib -hide Stdlib -lib Stdlib \ -pp \ "$(AWK) -v ocamldoc=true -f ../../stdlib/expand_module_aliases.awk" \ - $(DOC_STDLIB_INCLUDES) $< -dump $@ + $(DOC_STDLIB_INCLUDES) -hide-warnings $< -dump $@ $(compilerlibref:%=build/compilerlibref/%.odoc):\ build/compilerlibref/%.odoc: %.mli | build/compilerlibref - $(OCAMLDOC_RUN) -nostdlib -hide Stdlib \ - $(DOC_ALL_INCLUDES) $< -dump $@ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -nostdlib -hide Stdlib \ + $(DOC_ALL_INCLUDES) -hide-warnings $< -dump $@ $(compilerlibref_TEXT:%=build/compilerlibref/%.odoc):\ build/compilerlibref/%.odoc: build/%.mld | build/compilerlibref - $(OCAMLDOC_RUN) $(DOC_ALL_INCLUDES) -text $< -dump $@ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -hide-warnings $(DOC_ALL_INCLUDES) -text $< -dump $@ $(libref_TEXT:%=build/libref/%.odoc):\ build/libref/%.odoc: build/%.mld | build/libref - $(OCAMLDOC_RUN) $(DOC_STDLIB_INCLUDES) -text $< -dump $@ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -hide-warnings $(DOC_STDLIB_INCLUDES) -text $< -dump $@ ALL_COMPILED_DOC=$(ALL_DOC:%=build/%.odoc) build/man/Stdlib.3o: $(ALL_COMPILED_DOC) | build/man - $(OCAMLDOC_RUN) -man -d build/man -man-mini \ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -man -d build/man -man-mini \ -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ $(addprefix -load , $(ALL_COMPILED_DOC)) HTML_OPTIONS= -charset="utf8" -colorize-code -nonavbar build/html/libref/Stdlib.html: $(ALL_LIBREF:%=build/%.odoc) | build/html/libref - $(OCAMLDOC_RUN) -html -d build/html/libref \ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -html -d build/html/libref \ $(HTML_OPTIONS) \ -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ $(addprefix -load , $(ALL_LIBREF:%=build/%.odoc)) build/html/compilerlibref/Compiler_libs.html: \ $(ALL_COMPILERLIBREF:%=build/%.odoc) | build/html/compilerlibref - $(OCAMLDOC_RUN) -html -d build/html/compilerlibref \ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -html -d build/html/compilerlibref \ -nostdlib -hide Stdlib -t "OCaml compiler library" \ $(HTML_OPTIONS) \ -intro build/Compiler_libs.mld \ $(addprefix -load , $(ALL_COMPILERLIBREF:%=build/%.odoc)) build/texi/stdlib.texi: $(ALL_COMPILED_DOC) | build/texi - $(OCAMLDOC_RUN) -texi -o $@ \ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -texi -o $@ \ -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ $(addprefix -load , $(ALL_COMPILED_DOC)) build/latex/Stdlib.tex: $(ALL_COMPILED_DOC) | build/latex - $(OCAMLDOC_RUN) -latex -o build/latex/all.tex \ + $(V_OCAMLDOC)$(OCAMLDOC_RUN) -latex -o build/latex/all.tex \ -hide Stdlib -lib Stdlib $(DOC_ALL_INCLUDES) \ -sepfiles \ -latextitle "1,subsection*" \ @@ -111,13 +110,13 @@ $(filter-out stdlib.mli camlinternal%,$(stdlib_UNPREFIXED)),\ \\input{$(call capitalize,$(module)).tex}\ ) build/latex/stdlib_input.tex: | build/latex - echo $(stdlib_INPUT) > $@ + $(V_GEN)echo $(stdlib_INPUT) > $@ compilerlibs_INPUT=$(foreach module,\ $(filter-out camlinternal%,$(compilerlibref)),\ \\input{$(call capitalize,$(module)).tex}) build/latex/compilerlibs_input.tex: | build/latex - echo $(compilerlibs_INPUT) > $@ + $(V_GEN)echo $(compilerlibs_INPUT) > $@ .PHONY: install install: diff --git a/api_docgen/odoc/Makefile b/api_docgen/odoc/Makefile index 5fc75b5c..c40ed778 100644 --- a/api_docgen/odoc/Makefile +++ b/api_docgen/odoc/Makefile @@ -42,7 +42,7 @@ endef # define the right conditional for the manual build/latex/ifocamldoc.tex: | build/latex - printf '\\newif\\ifocamldoc\\ocamldocfalse\n' > $@ + $(V_GEN)printf '\\newif\\ifocamldoc\\ocamldocfalse\n' > $@ # \input{} all modules in the stdlib for the latex api manual @@ -52,10 +52,10 @@ $(filter-out stdlib camlinternal%, $(STDLIB:stdlib__%=%)),\ ) build/latex/stdlib_input.tex: | build/latex - echo $(stdlib_INPUT)> $@ + $(V_GEN)echo $(stdlib_INPUT)> $@ build/latex/compilerlibs_input.tex: | build/latex - echo $(compilerlibref_C:%=\\input{compilerlibref/%})> $@ + $(V_GEN)echo $(compilerlibref_C:%=\\input{compilerlibref/%})> $@ # The build process for odoc has 3 phases: # 1. generation of internal individual documentation files (.odoc) @@ -65,26 +65,26 @@ build/latex/compilerlibs_input.tex: | build/latex # rules for the mld files $(libref_TEXT:%=build/libref/page-%.odoc): build/libref/page-%.odoc: build/%.mld | build/libref - $(odoc) compile -I build/libref --package libref $< -o $@ + $(V_ODOC)$(odoc) compile -I build/libref --package libref $< -o $@ $(compilerlibref_TEXT:%=build/compilerlibref/page-%.odoc):\ build/compilerlibref/page-%.odoc: build/%.mld | build/compilerlibref - $(odoc) compile -I build/libref --package compilerlibref $< -o $@ + $(V_ODOC)$(odoc) compile -I build/libref --package compilerlibref $< -o $@ # rules for the stdlib and otherlibs .doc files $(libref:%=build/libref/%.odoc):\ build/libref/%.odoc: %.cmti | build/libref - $(odoc) compile -I build/libref --package libref $< -o $@ + $(V_ODOC)$(odoc) compile -I build/libref --package libref $< -o $@ -# pervasives is handled separatedly due to the lack of cmti file +# pervasives is handled separately due to the lack of cmti file $(libref_EXTRA:%=build/libref/%.odoc):build/libref/%.odoc:%.cmt - $(odoc) compile -I build/libref --package libref $< -o $@ + $(V_ODOC)$(odoc) compile -I build/libref --package libref $< -o $@ # rules for the compilerlib documentation $(compilerlibref:%=build/compilerlibref/%.odoc):\ build/compilerlibref/%.odoc: %.cmti $(libref:%=build/libref/%.odoc) \ | build/compilerlibref - $(odoc) compile -I build/libref -I build/compilerlibref \ + $(V_ODOC)$(odoc) compile -I build/libref -I build/compilerlibref \ --package compilerlibref $< -o $@ ALL_TEXT = $(libref_TEXT:%=libref/%) $(compilerlibref_TEXT:%=compilerlibref/%) @@ -101,11 +101,11 @@ ALL_PAGED_DOC = $(TARGET_UNITS) $(ALL_PAGE_TEXT) # the individual file dependencies %.odocl:%.odoc \ | $(ALL_PAGED_DOC:%=build/%.odoc) - $(odoc) link -I build/libref -I build/compilerlibref $(ODOC_LINK_ARGS) $< + $(V_ODOC)$(odoc) link -I build/libref -I build/compilerlibref $(ODOC_LINK_ARGS) $< %.odocl:%.odoc \ | $(ALL_PAGED_DOC:%=build/%.odoc) - $(odoc) link -I build/libref -I build/compilerlibref $(ODOC_LINK_ARGS) $< + $(V_ODOC)$(odoc) link -I build/libref -I build/compilerlibref $(ODOC_LINK_ARGS) $< build/libref/stdlib.odocl: ODOC_LINK_ARGS+=--open="" @@ -125,15 +125,15 @@ html: build/libref/index.html.stamp build/compilerlibref/index.html.stamp # Html rules $(ALL_HTML): %.html.stamp: %.odocl | build/html - $(odoc) html-generate --output-dir build/html $< + $(V_ODOC)$(odoc) html-generate --output-dir build/html $< touch $@ build/html/odoc.css: | build/html - $(odoc) support-files --output-dir build/html + $(V_ODOC)$(odoc) support-files --output-dir build/html $(build/libref.html.stamp build/compilerlibref.html.stamp): %.html.stamp: %.mld | build/ - $(odoc) html-generate --output-dir build/html $< + $(V_ODOC)$(odoc) html-generate --output-dir build/html $< touch $@ # Html indexes for the api documentation diff --git a/appveyor.yml b/appveyor.yml index 719be706..2c351715 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,11 +12,17 @@ #* * #************************************************************************** +branches: + only: + - /4\.*/ + - /5\.*/ + - trunk + # Compile the 64 bits version platform: - x64 -image: Visual Studio 2015 +image: Visual Studio 2022 # Do a shallow clone of the repo to speed up the build clone_depth: 1 @@ -26,21 +32,22 @@ environment: CYG_ROOT: C:/cygwin64 CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ CYG_CACHE: C:/cygwin64/var/cache/setup - FLEXDLL_VERSION: 0.39 + FLEXDLL_VERSION: 0.43 OCAMLRUNPARAM: v=0,b FORCE_CYGWIN_UPGRADE: 0 BUILD_MODE: world.opt matrix: - - PORT: mingw32 + - PORT: mingw64 BOOTSTRAP_FLEXDLL: true - - PORT: msvc64 - BOOTSTRAP_FLEXDLL: false - BUILD_MODE: steps - - PORT: msvc32 - BOOTSTRAP_FLEXDLL: false - BUILD_MODE: C - SDK: |- - "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x86 +# OCaml 5.0 does not yet support MSVC +# - PORT: msvc64 +# BOOTSTRAP_FLEXDLL: false +# BUILD_MODE: steps +# - PORT: msvc32 +# BOOTSTRAP_FLEXDLL: false +# BUILD_MODE: C +# SDK: |- +# "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x86 matrix: fast_finish: true diff --git a/asmcomp/CSE.mli b/asmcomp/CSE.mli new file mode 100644 index 00000000..df667dfd --- /dev/null +++ b/asmcomp/CSE.mli @@ -0,0 +1,18 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Sebastien Hinderer, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2022 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Common interface to all architecture-specific CSE modules *) + +val fundecl : Mach.fundecl -> Mach.fundecl diff --git a/asmcomp/CSEgen.ml b/asmcomp/CSEgen.ml index 2f54a35c..35048ec6 100644 --- a/asmcomp/CSEgen.ml +++ b/asmcomp/CSEgen.ml @@ -226,19 +226,29 @@ method class_of_operation op = | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ | Iextcall _ | Iopaque -> assert false (* treated specially *) | Istackoffset _ -> Op_other - | Iload(_,_,mut) -> Op_load mut + | Iload { mutability; is_atomic } -> + (* #12173: disable CSE for atomic loads. + #12825: atomic loads cannot be treated as Op_other + because they update our view / the frontier of the + non-atomic locations, so past non-atomic (mutable) loads + may be not be valid anymore. + We conservatively tread them as non-initializing stores. + *) + if is_atomic then Op_store true + else Op_load mutability | Istore(_,_,asg) -> Op_store asg | Ialloc _ | Ipoll _ -> assert false (* treated specially *) | Iintop(Icheckbound) -> Op_checkbound | Iintop _ -> Op_pure | Iintop_imm(Icheckbound, _) -> Op_checkbound | Iintop_imm(_, _) -> Op_pure - | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf + | Icompf _ | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Ifloatofint | Iintoffloat -> Op_pure | Ispecific _ -> Op_other + | Idls_get -> Op_load Mutable + | Ireturn_addr -> Op_load Immutable (* Operations that are so cheap that it isn't worth factoring them. *) - method is_cheap_operation op = match op with | Iconst_int _ -> true @@ -304,8 +314,7 @@ method private cse n i = (* This operation was computed earlier. *) (* Are there registers that hold the results computed earlier? *) begin match find_regs_containing n1 vres with - | Some res when (not (self#is_cheap_operation op)) - && (not (Proc.regs_are_volatile res)) -> + | Some res when (not (self#is_cheap_operation op)) -> (* We can replace res <- op args with r <- move res, provided res are stable (non-volatile) registers. If the operation is very cheap to compute, e.g. diff --git a/asmcomp/afl_instrument.ml b/asmcomp/afl_instrument.ml index c493a250..6d23311c 100644 --- a/asmcomp/afl_instrument.ml +++ b/asmcomp/afl_instrument.ml @@ -42,13 +42,19 @@ let rec with_afl_logging b dbg = let afl_area = V.create_local "shared_mem" in let op oper args = Cop (oper, args, dbg) in Clet(VP.create afl_area, - op (Cload (Word_int, Asttypes.Mutable)) [afl_area_ptr dbg], - Clet(VP.create cur_pos, op Cxor [op (Cload (Word_int, Asttypes.Mutable)) + op (Cload ({memory_chunk=Word_int; + mutability=Asttypes.Mutable; + is_atomic=false})) [afl_area_ptr dbg], + Clet(VP.create cur_pos, op Cxor [op (Cload {memory_chunk=Word_int; + mutability=Asttypes.Mutable; + is_atomic=false}) [afl_prev_loc dbg]; Cconst_int (cur_location, dbg)], Csequence( op (Cstore(Byte_unsigned, Assignment)) [op Cadda [Cvar afl_area; Cvar cur_pos]; - op Cadda [op (Cload (Byte_unsigned, Asttypes.Mutable)) + op Cadda [op (Cload {memory_chunk=Byte_unsigned; + mutability=Asttypes.Mutable; + is_atomic=false}) [op Cadda [Cvar afl_area; Cvar cur_pos]]; Cconst_int (1, dbg)]], op (Cstore(Word_int, Assignment)) @@ -91,7 +97,7 @@ and instrument = function (* these are base cases and have no logging *) | Cconst_int _ | Cconst_natint _ | Cconst_float _ - | Cconst_symbol _ + | Cconst_symbol _ | Creturn_addr | Cvar _ as c -> c let instrument_function c dbg = @@ -101,10 +107,8 @@ let instrument_initialiser c dbg = (* Each instrumented module calls caml_setup_afl at initialisation, which is a no-op on the second and subsequent calls *) - with_afl_logging - (Csequence - (Cop (Cextcall ("caml_setup_afl", typ_int, [], false), - [Cconst_int (0, dbg ())], - dbg ()), - c)) - (dbg ()) + Csequence + (Cop (Cextcall ("caml_setup_afl", typ_int, [], false), + [Cconst_int (0, dbg ())], + dbg ()), + with_afl_logging c (dbg ())) diff --git a/asmcomp/amd64/CSE.ml b/asmcomp/amd64/CSE.ml index b473e7b2..ef6d8f6e 100644 --- a/asmcomp/amd64/CSE.ml +++ b/asmcomp/amd64/CSE.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/amd64/CSE.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/amd64/arch.ml b/asmcomp/amd64/arch.ml index 0d0c5406..335edfdb 100644 --- a/asmcomp/amd64/arch.ml +++ b/asmcomp/amd64/arch.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/amd64/arch.ml" (**************************************************************************) (* *) (* OCaml *) @@ -151,3 +152,21 @@ let operation_is_pure = function (* Specific operations that can raise *) let operation_can_raise _ = false + +open X86_ast + +(* Certain float conditions aren't represented directly in the opcode for + float comparison, so we have to swap the arguments. The swap information + is also needed downstream because one of the arguments is clobbered. *) +let float_cond_and_need_swap cond = + match (cond : Lambda.float_comparison) with + | CFeq -> EQf, false + | CFneq -> NEQf, false + | CFlt -> LTf, false + | CFnlt -> NLTf, false + | CFgt -> LTf, true + | CFngt -> NLTf, true + | CFle -> LEf, false + | CFnle -> NLEf, false + | CFge -> LEf, true + | CFnge -> NLEf, true diff --git a/asmcomp/amd64/arch.mli b/asmcomp/amd64/arch.mli new file mode 100644 index 00000000..ef988a0f --- /dev/null +++ b/asmcomp/amd64/arch.mli @@ -0,0 +1,81 @@ +# 2 "asmcomp/amd64/arch.mli" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 2000 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Machine-specific command-line options *) + +val command_line_options : (string * Arg.spec * string) list + +(* Specific operations for the AMD64 processor *) + +type addressing_mode = + Ibased of string * int (* symbol + displ *) + | Iindexed of int (* reg + displ *) + | Iindexed2 of int (* reg + reg + displ *) + | Iscaled of int * int (* reg * scale + displ *) + | Iindexed2scaled of int * int (* reg + reg * scale + displ *) + +type specific_operation = + Ilea of addressing_mode (* "lea" gives scaled adds *) + | Istore_int of nativeint * addressing_mode * bool + (* Store an integer constant *) + | Ioffset_loc of int * addressing_mode (* Add a constant to a location *) + | Ifloatarithmem of float_operation * addressing_mode + (* Float arith operation with memory *) + | Ibswap of int (* endianness conversion *) + | Isqrtf (* Float square root *) + | Ifloatsqrtf of addressing_mode (* Float square root from memory *) + | Isextend32 (* 32 to 64 bit conversion with sign + extension *) + | Izextend32 (* 32 to 64 bit conversion with zero + extension *) + +and float_operation = + Ifloatadd | Ifloatsub | Ifloatmul | Ifloatdiv + +val big_endian : bool + +val size_addr : int + +val size_int : int + +val size_float : int + +val allow_unaligned_access : bool + +val division_crashes_on_overflow : bool + +val identity_addressing : addressing_mode + +val offset_addressing : addressing_mode -> int -> addressing_mode + +val num_args_addressing : addressing_mode -> int + +val print_addressing : + (Format.formatter -> 'a -> unit) -> addressing_mode -> + Format.formatter -> 'a array -> unit + +val print_specific_operation : + (Format.formatter -> 'a -> unit) -> specific_operation -> + Format.formatter -> 'a array -> unit + +val win64 : bool + +val operation_is_pure : specific_operation -> bool + +val operation_can_raise : specific_operation -> bool + +val float_cond_and_need_swap + : Lambda.float_comparison -> X86_ast.float_condition * bool diff --git a/asmcomp/amd64/emit.mlp b/asmcomp/amd64/emit.mlp index 6831a085..619ce9c3 100644 --- a/asmcomp/amd64/emit.mlp +++ b/asmcomp/amd64/emit.mlp @@ -1,4 +1,3 @@ -# 2 "asmcomp/amd64/emit.mlp" (**************************************************************************) (* *) (* OCaml *) @@ -63,20 +62,29 @@ let cfi_endproc () = let cfi_adjust_cfa_offset n = if Config.asm_cfi_supported then D.cfi_adjust_cfa_offset n +let cfi_remember_state () = + if Config.asm_cfi_supported then D.cfi_remember_state () + +let cfi_restore_state () = + if Config.asm_cfi_supported then D.cfi_restore_state () + +let cfi_def_cfa_register reg = + if Config.asm_cfi_supported then D.cfi_def_cfa_register reg + let emit_debug_info dbg = emit_debug_info_gen dbg D.file D.loc let fp = Config.with_frame_pointers +let stack_threshold_size = Config.stack_threshold * 8 (* bytes *) + let frame_size env = (* includes return address *) - if env.f.fun_frame_required then begin - let sz = - (env.stack_offset - + 8 * (env.f.fun_num_stack_slots.(0) + env.f.fun_num_stack_slots.(1)) - + 8 - + (if fp then 8 else 0)) - in Misc.align sz 16 - end else + if env.f.fun_frame_required then + env.stack_offset + + 8 * (env.f.fun_num_stack_slots.(0) + env.f.fun_num_stack_slots.(1)) + + 8 + + (if fp then 8 else 0) + else env.stack_offset + 8 let slot_offset env loc cl = @@ -453,7 +461,6 @@ let emit_instr env fallthrough i = match i.desc with | Lend -> () | Lprologue -> - assert (env.f.fun_prologue_required); if fp then begin I.push rbp; cfi_adjust_cfa_offset 8; @@ -525,26 +532,30 @@ let emit_instr env fallthrough i = end end end - | Lop(Iextcall { func; alloc; }) -> + | Lop(Iextcall { func; alloc; stack_ofs }) -> add_used_symbol func; - if alloc then begin + if stack_ofs > 0 then begin + I.mov rsp r13; + I.lea (mem64 QWORD stack_ofs RSP) r12; + load_symbol_addr func rax; + emit_call "caml_c_call_stack_args"; + record_frame env i.live (Dbg_other i.dbg); + end else if alloc then begin load_symbol_addr func rax; emit_call "caml_c_call"; record_frame env i.live (Dbg_other i.dbg); - if system <> S_win64 then begin - - (* In amd64.S, "caml_c_call" tail-calls the C function (in order to - produce nicer backtraces), so we need to restore r15 manually after - it returns (note that this increases code size). - - In amd64nt.asm (used for Win64), "caml_c_call" invokes the C - function via a regular call, and restores r15 itself, thus avoiding - the code size increase. *) - - I.mov (domain_field Domainstate.Domain_young_ptr) r15 - end end else begin - emit_call func + I.mov rsp rbx; + cfi_remember_state (); + cfi_def_cfa_register "rbx"; + (* NB: gdb has asserts on contiguous stacks that mean it + will not unwind through this unless we were to tag this + calling frame with cfi_signal_frame in it's definition. *) + I.mov (domain_field Domainstate.Domain_c_stack) rsp; + + emit_call func; + I.mov rbx rsp; + cfi_restore_state (); end | Lop(Istackoffset n) -> if n < 0 @@ -554,27 +565,27 @@ let emit_instr env fallthrough i = if n <> 0 then cfi_adjust_cfa_offset n; env.stack_offset <- env.stack_offset + n - | Lop(Iload(chunk, addr, _mut)) -> + | Lop(Iload { memory_chunk; addressing_mode; _ }) -> let dest = res i 0 in - begin match chunk with + begin match memory_chunk with | Word_int | Word_val -> - I.mov (addressing addr QWORD i 0) dest + I.mov (addressing addressing_mode QWORD i 0) dest | Byte_unsigned -> - I.movzx (addressing addr BYTE i 0) dest + I.movzx (addressing addressing_mode BYTE i 0) dest | Byte_signed -> - I.movsx (addressing addr BYTE i 0) dest + I.movsx (addressing addressing_mode BYTE i 0) dest | Sixteen_unsigned -> - I.movzx (addressing addr WORD i 0) dest + I.movzx (addressing addressing_mode WORD i 0) dest | Sixteen_signed -> - I.movsx (addressing addr WORD i 0) dest; + I.movsx (addressing addressing_mode WORD i 0) dest; | Thirtytwo_unsigned -> - I.mov (addressing addr DWORD i 0) (res32 i 0) + I.mov (addressing addressing_mode DWORD i 0) (res32 i 0) | Thirtytwo_signed -> - I.movsxd (addressing addr DWORD i 0) dest + I.movsxd (addressing addressing_mode DWORD i 0) dest | Single -> - I.cvtss2sd (addressing addr REAL4 i 0) dest + I.cvtss2sd (addressing addressing_mode REAL4 i 0) dest | Double -> - I.movsd (addressing addr REAL8 i 0) dest + I.movsd (addressing addressing_mode REAL8 i 0) dest end | Lop(Istore(chunk, addr, _)) -> begin match chunk with @@ -679,6 +690,12 @@ let emit_instr env fallthrough i = | Lop(Iintop_imm(op, n)) -> (* We have i.arg.(0) = i.res.(0) *) instr_for_intop op (int n) (res i 0) + | Lop(Icompf cmp) -> + let cond, need_swap = float_cond_and_need_swap cmp in + let a0, a1 = if need_swap then arg i 1, arg i 0 else arg i 0, arg i 1 in + I.cmpsd cond a1 a0; + I.movd a0 (res i 0); + I.neg (res i 0) | Lop(Inegf) -> I.xorpd (mem64_rip OWORD (emit_symbol "caml_negf_mask")) (res i 0) | Lop(Iabsf) -> @@ -720,6 +737,11 @@ let emit_instr env fallthrough i = I.movsxd (arg32 i 0) (res i 0) | Lop(Ispecific(Izextend32)) -> I.mov (arg32 i 0) (res32 i 0) + | Lop (Idls_get) -> + I.mov (domain_field Domainstate.Domain_dls_root) (res i 0) + | Lop (Ireturn_addr) -> + let offset = frame_size env - 8 in + I.mov (mem64 QWORD offset RSP) (res i 0) | Lreloadretaddr -> () | Lreturn -> @@ -823,12 +845,12 @@ let emit_instr env fallthrough i = load_label_addr lbl_handler r11; I.push r11; cfi_adjust_cfa_offset 8; - I.push (domain_field Domainstate.Domain_exception_pointer); + I.push (domain_field Domainstate.Domain_exn_handler); cfi_adjust_cfa_offset 8; - I.mov rsp (domain_field Domainstate.Domain_exception_pointer); + I.mov rsp (domain_field Domainstate.Domain_exn_handler); env.stack_offset <- env.stack_offset + 16; | Lpoptrap -> - I.pop (domain_field Domainstate.Domain_exception_pointer); + I.pop (domain_field Domainstate.Domain_exn_handler); cfi_adjust_cfa_offset (-8); I.add (int 8) rsp; cfi_adjust_cfa_offset (-8); @@ -836,15 +858,14 @@ let emit_instr env fallthrough i = | Lraise k -> begin match k with | Lambda.Raise_regular -> - I.mov (int 0) (domain_field Domainstate.Domain_backtrace_pos); emit_call "caml_raise_exn"; record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_reraise -> - emit_call "caml_raise_exn"; + emit_call "caml_reraise_exn"; record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_notrace -> - I.mov (domain_field Domainstate.Domain_exception_pointer) rsp; - I.pop (domain_field Domainstate.Domain_exception_pointer); + I.mov (domain_field Domainstate.Domain_exn_handler) rsp; + I.pop (domain_field Domainstate.Domain_exn_handler); I.pop r11; I.jmp r11 end @@ -858,6 +879,7 @@ let rec emit_all env fallthrough i = let all_functions = ref [] + (* Emission of a function declaration *) let fundecl fundecl = @@ -876,9 +898,41 @@ let fundecl fundecl = D.label (emit_symbol fundecl.fun_name); emit_debug_info fundecl.fun_dbg; cfi_startproc (); + if !Clflags.runtime_variant = "d" then + emit_call "caml_assert_stack_invariants"; + let max_frame_size = + frame_size env + fundecl.fun_extra_stack_used in + let handle_overflow = + if fundecl.fun_contains_nontail_calls + || max_frame_size >= stack_threshold_size then begin + let overflow = new_label () and ret = new_label () in + let threshold_offset = Domainstate.stack_ctx_words * 8 + stack_threshold_size in + I.lea (mem64 NONE (-(max_frame_size + threshold_offset)) RSP) r10; + I.cmp (domain_field Domainstate.Domain_current_stack) r10; + I.jb (label overflow); + def_label ret; + Some (overflow, ret) + end else None + in emit_all env true fundecl.fun_body; List.iter emit_call_gc env.call_gc_sites; emit_call_bound_errors env; + begin match handle_overflow with + | None -> () + | Some (overflow,ret) -> begin + def_label overflow; + (* Pass the desired frame size on the stack, since all of the + argument-passing registers may be in use. + Also serves to align the stack properly before the call *) + I.push (int (Config.stack_threshold + max_frame_size / 8)); + cfi_adjust_cfa_offset 8; + (* measured in words *) + emit_call "caml_call_realloc_stack"; + I.pop r10; (* ignored *) + cfi_adjust_cfa_offset (-8); + I.jmp (label ret) + end + end; if fundecl.fun_frame_required then begin let n = (frame_size env) - 8 - (if fp then 8 else 0) in if n <> 0 @@ -1020,7 +1074,7 @@ let end_assembly() = efa_string = (fun s -> D.bytes (s ^ "\000")) }; - if system = S_linux then begin + if system = S_linux || system = S_freebsd || system = S_netbsd || system = S_openbsd then begin let frametable = emit_symbol (Compilenv.make_symbol (Some "frametable")) in D.size frametable (ConstSub (ConstThis, ConstLabel frametable)) end; diff --git a/asmcomp/amd64/proc.ml b/asmcomp/amd64/proc.ml index b7047a1e..97e55e80 100644 --- a/asmcomp/amd64/proc.ml +++ b/asmcomp/amd64/proc.ml @@ -235,7 +235,7 @@ let win64_float_external_arguments = let win64_loc_external_arguments arg = let loc = Array.make (Array.length arg) Reg.dummy in let reg = ref 0 - and ofs = ref 32 in + and ofs = ref 0 in for i = 0 to Array.length arg - 1 do match arg.(i) with | Val | Int | Addr as ty -> @@ -284,22 +284,21 @@ let dwarf_register_numbers ~reg_class = let stack_ptr_dwarf_register_number = 7 -(* Volatile registers: none *) - -let regs_are_volatile _rs = false - (* Registers destroyed by operations *) let destroyed_at_c_call = + (* C calling conventions preserve rbx, but it is clobbered + by the code sequence used for C calls in emit.mlp, so it + is marked as destroyed. *) if win64 then - (* Win64: rbx, rbp, rsi, rdi, r12-r15, xmm6-xmm15 preserved *) + (* Win64: rsi, rdi, r12-r15, xmm6-xmm15 preserved *) Array.of_list(List.map phys_reg - [0;4;5;6;7;10;11; + [0;1;4;5;6;7;10;11;12; 100;101;102;103;104;105]) else - (* Unix: rbp, rbx, r12-r15 preserved *) + (* Unix: r12-r15 preserved *) Array.of_list(List.map phys_reg - [0;2;3;4;5;6;7;10;11; + [0;1;2;3;4;5;6;7;10;11; 100;101;102;103;104;105;106;107; 108;109;110;111;112;113;114;115]) @@ -310,9 +309,12 @@ let destroyed_at_alloc_or_poll = [| r11 |] let destroyed_at_oper = function - Iop(Icall_ind | Icall_imm _ | Iextcall { alloc = true; }) -> - all_phys_regs - | Iop(Iextcall { alloc = false; }) -> destroyed_at_c_call + Iop(Icall_ind | Icall_imm _) -> + all_phys_regs + | Iop(Iextcall {alloc; stack_ofs; }) -> + assert (stack_ofs >= 0); + if alloc || stack_ofs > 0 then all_phys_regs + else destroyed_at_c_call | Iop(Iintop(Idiv | Imod)) | Iop(Iintop_imm((Idiv | Imod), _)) -> [| rax; rdx |] | Iop(Istore(Single, _, _)) -> [| rxmm15 |] @@ -340,31 +342,28 @@ let safe_register_pressure = function Iextcall _ -> if win64 then if fp then 7 else 8 else 0 | _ -> if fp then 10 else 11 -let max_register_pressure = function +let max_register_pressure = + let consumes ~int ~float = + if fp + then [| 12 - int; 16 - float |] + else [| 13 - int; 16 - float |] + in + function Iextcall _ -> - if win64 then - if fp then [| 7; 10 |] else [| 8; 10 |] - else - if fp then [| 3; 0 |] else [| 4; 0 |] + if win64 + then consumes ~int:5 ~float:6 + else consumes ~int:9 ~float:16 | Iintop(Idiv | Imod) | Iintop_imm((Idiv | Imod), _) -> - if fp then [| 10; 16 |] else [| 11; 16 |] + consumes ~int:2 ~float:0 | Ialloc _ | Ipoll _ -> - if fp then [| 11 - num_destroyed_by_plt_stub; 16 |] - else [| 12 - num_destroyed_by_plt_stub; 16 |] + consumes ~int:(1 + num_destroyed_by_plt_stub) ~float:0 | Iintop(Icomp _) | Iintop_imm((Icomp _), _) -> - if fp then [| 11; 16 |] else [| 12; 16 |] + consumes ~int:1 ~float:0 | Istore(Single, _, _) -> - if fp then [| 12; 15 |] else [| 13; 15 |] - | _ -> if fp then [| 12; 16 |] else [| 13; 16 |] - -(* Layout of the stack frame *) - -let frame_required fd = - fp || fd.fun_contains_calls || - fd.fun_num_stack_slots.(0) > 0 || fd.fun_num_stack_slots.(1) > 0 - -let prologue_required fd = - frame_required fd + consumes ~int:0 ~float:1 + | Icompf _ -> + consumes ~int:0 ~float:1 + | _ -> consumes ~int:0 ~float:0 (* Calling the assembler *) diff --git a/asmcomp/amd64/reload.ml b/asmcomp/amd64/reload.ml index 9e3cadbe..3a607219 100644 --- a/asmcomp/amd64/reload.ml +++ b/asmcomp/amd64/reload.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/amd64/reload.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/amd64/scheduling.ml b/asmcomp/amd64/scheduling.ml index 2c4b072b..b50749ae 100644 --- a/asmcomp/amd64/scheduling.ml +++ b/asmcomp/amd64/scheduling.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/amd64/scheduling.ml" (**************************************************************************) (* *) (* OCaml *) @@ -13,7 +14,15 @@ (* *) (**************************************************************************) -open! Schedgen (* to create a dependency *) +(* The "open!" directive below is necessary because, although + this module does not actually depend on Schedgen in this backend, the + dependency exists in other backends and our build system requires + that all the backends have the same dependencies. + We thus have to use "open!" and disable the corresponding warning + only for this compilation unit. +*) + +open! Schedgen [@@warning "-66"] (* Scheduling is turned off because the processor schedules dynamically much better than what we could do. *) diff --git a/asmcomp/amd64/selection.ml b/asmcomp/amd64/selection.ml index 47e566b9..839edf7c 100644 --- a/asmcomp/amd64/selection.ml +++ b/asmcomp/amd64/selection.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/amd64/selection.ml" (**************************************************************************) (* *) (* OCaml *) @@ -30,38 +31,39 @@ type addressing_expr = | Ascaledadd of expression * expression * int let rec select_addr exp = + let default = (Alinear exp, 0) in match exp with Cconst_symbol (s, _) when not !Clflags.dlcode -> (Asymbol s, 0) - | Cop((Caddi | Caddv | Cadda), [arg; Cconst_int (m, _)], _) -> - let (a, n) = select_addr arg in (a, n + m) - | Cop(Csubi, [arg; Cconst_int (m, _)], _) -> - let (a, n) = select_addr arg in (a, n - m) + | Cop((Caddi | Caddv | Cadda), [arg; Cconst_int (m, _)], _) | Cop((Caddi | Caddv | Cadda), [Cconst_int (m, _); arg], _) -> - let (a, n) = select_addr arg in (a, n + m) + let (a, n) = select_addr arg in + if Misc.no_overflow_add n m then (a, n + m) else default + | Cop(Csubi, [arg; Cconst_int (m, _)], _) -> + let (a, n) = select_addr arg in + if Misc.no_overflow_sub n m then (a, n - m) else default | Cop(Clsl, [arg; Cconst_int((1|2|3 as shift), _)], _) -> begin match select_addr arg with - (Alinear e, n) -> (Ascale(e, 1 lsl shift), n lsl shift) - | _ -> (Alinear exp, 0) - end - | Cop(Cmuli, [arg; Cconst_int((2|4|8 as mult), _)], _) -> - begin match select_addr arg with - (Alinear e, n) -> (Ascale(e, mult), n * mult) - | _ -> (Alinear exp, 0) + | (Alinear e, n) when Misc.no_overflow_lsl n shift -> + (Ascale(e, 1 lsl shift), n lsl shift) + | _ -> default end + | Cop(Cmuli, [arg; Cconst_int((2|4|8 as mult), _)], _) | Cop(Cmuli, [Cconst_int((2|4|8 as mult), _); arg], _) -> begin match select_addr arg with - (Alinear e, n) -> (Ascale(e, mult), n * mult) - | _ -> (Alinear exp, 0) + | (Alinear e, n) when Misc.no_overflow_mul n mult -> + (Ascale(e, mult), n * mult) + | _ -> default end | Cop((Caddi | Caddv | Cadda), [arg1; arg2], _) -> begin match (select_addr arg1, select_addr arg2) with - ((Alinear e1, n1), (Alinear e2, n2)) -> + ((Alinear e1, n1), (Alinear e2, n2)) + when Misc.no_overflow_add n1 n2 -> (Aadd(e1, e2), n1 + n2) - | ((Alinear e1, n1), (Ascale(e2, scale), n2)) -> + | ((Alinear e1, n1), (Ascale(e2, scale), n2)) + | ((Ascale(e2, scale), n2), (Alinear e1, n1)) + when Misc.no_overflow_add n1 n2 -> (Ascaledadd(e1, e2, scale), n1 + n2) - | ((Ascale(e1, scale), n1), (Alinear e2, n2)) -> - (Ascaledadd(e2, e1, scale), n1 + n2) | (_, (Ascale(e2, scale), n2)) -> (Ascaledadd(arg1, e2, scale), n2) | ((Ascale(e1, scale), n1), _) -> @@ -69,8 +71,7 @@ let rec select_addr exp = | _ -> (Aadd(arg1, arg2), 0) end - | arg -> - (Alinear arg, 0) + | _ -> default (* Special constraints on operand and result registers *) @@ -112,6 +113,18 @@ let pseudoregs_for_operation op arg res = ([| rax; rcx |], [| rax |]) | Iintop(Imod) -> ([| rax; rcx |], [| rdx |]) + | Icompf cond -> + (* We need to temporarily store the result of the comparison in a + float register, but we don't want to clobber any of the inputs + if they would still be live after this operation -- so we + add a fresh register as both an input and output. We don't use + [destroyed_at_oper], because that forces us to choose a fixed + register, which makes it more likely an extra mov would be added + to transfer the argument to the fixed register. *) + let treg = Reg.create Float in + let _,is_swapped = float_cond_and_need_swap cond in + (if is_swapped then [| arg.(0); treg |] else [| treg; arg.(1) |]) + , [| res.(0); treg |] (* Other instructions are regular *) | _ -> raise Use_default @@ -203,7 +216,7 @@ method! select_operation op args dbg = self#select_floatarith false Idivf Ifloatdiv args | Cextcall("sqrt", _, _, false) -> begin match args with - [Cop(Cload ((Double as chunk), _), [loc], _dbg)] -> + [Cop(Cload {memory_chunk=(Double as chunk)}, [loc], _dbg)] -> let (addr, arg) = self#select_addressing chunk loc in (Ispecific(Ifloatsqrtf addr), [arg]) | [arg] -> @@ -251,11 +264,11 @@ method! select_operation op args dbg = method select_floatarith commutative regular_op mem_op args = match args with - [arg1; Cop(Cload ((Double as chunk), _), [loc2], _)] -> + [arg1; Cop(Cload {memory_chunk=(Double as chunk)}, [loc2], _)] -> let (addr, arg2) = self#select_addressing chunk loc2 in (Ispecific(Ifloatarithmem(mem_op, addr)), [arg1; arg2]) - | [Cop(Cload ((Double as chunk), _), [loc1], _); arg2] + | [Cop(Cload {memory_chunk=(Double as chunk)}, [loc1], _); arg2] when commutative -> let (addr, arg1) = self#select_addressing chunk loc1 in (Ispecific(Ifloatarithmem(mem_op, addr)), @@ -265,9 +278,6 @@ method select_floatarith commutative regular_op mem_op args = | _ -> assert false -method! mark_c_tailcall = - contains_calls := true - (* Deal with register constraints *) method! insert_op_debug env op dbg rs rd = diff --git a/asmcomp/amd64/stackframe.ml b/asmcomp/amd64/stackframe.ml new file mode 100644 index 00000000..c053b6e4 --- /dev/null +++ b/asmcomp/amd64/stackframe.ml @@ -0,0 +1,39 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +open Mach + +let trap_handler_size = 16 + +class stackframe = object + +inherit Stackframegen.stackframe_generic as super + +method trap_handler_size = trap_handler_size + +method! is_call = function + | Iop (Iintop (Icheckbound) | Iintop_imm(Icheckbound, _)) -> true + | insn -> super#is_call insn + +method! frame_required f contains_calls = + Config.with_frame_pointers || super#frame_required f contains_calls + +end + +let analyze f = + (new stackframe)#analyze f diff --git a/asmcomp/arm/CSE.ml b/asmcomp/arm/CSE.ml deleted file mode 100644 index bdd65975..00000000 --- a/asmcomp/arm/CSE.ml +++ /dev/null @@ -1,35 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) -(* *) -(* Copyright 2014 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* CSE for ARM *) - -open Arch -open Mach -open CSEgen - -class cse = object - -inherit cse_generic as super - -method! class_of_operation op = - match op with - | Ispecific(Ishiftcheckbound _) -> Op_checkbound - | Ispecific _ -> Op_pure - | _ -> super#class_of_operation op - -end - -let fundecl f = - (new cse)#fundecl f diff --git a/asmcomp/arm/NOTES.md b/asmcomp/arm/NOTES.md deleted file mode 100644 index 7a8ae671..00000000 --- a/asmcomp/arm/NOTES.md +++ /dev/null @@ -1,20 +0,0 @@ -# Supported platforms - -A great many variants of the ARM 32-bit architecture: -* Architecture versions: v4, v5, v5te, v6, v6t2, v7. - ARMv7 is the standard nowadays. -* Instruction encoding: classic ARM or Thumb or Thumb-2. -* Floating-point: software emulation, VFPv2, VFPv3-d16, VFP-v3. -* ABI: the standard EABI (with floats passed in integer registers) - or the EABI-HF variant (with floats passed in VFP registers). - -Debian architecture names: `armel` and `armhf`. - -# Reference documents - -* Instruction set architecture: - _ARM Architecture Reference Manual, ARMv7-A and ARMv7-R edition_. - Alternatively: - _ARM Architecture Reference Manual, ARMv8_, restricted to the AArch32 subset. -* Application binary interface: - _Procedure Call Standard for the ARM Architecture_ diff --git a/asmcomp/arm/arch.ml b/asmcomp/arm/arch.ml deleted file mode 100644 index ee4ca76d..00000000 --- a/asmcomp/arm/arch.ml +++ /dev/null @@ -1,276 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Benedikt Meurer, University of Siegen *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* Copyright 2012 Benedikt Meurer. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Specific operations for the ARM processor *) - -open Format - -type abi = EABI | EABI_HF -type arch = ARMv4 | ARMv5 | ARMv5TE | ARMv6 | ARMv6T2 | ARMv7 | ARMv8 -type fpu = Soft | VFPv2 | VFPv3_D16 | VFPv3 - -let abi = - match Config.system with - "linux_eabi" | "freebsd" -> EABI - | "linux_eabihf" | "netbsd" -> EABI_HF - | _ -> assert false - -let string_of_arch = function - ARMv4 -> "armv4" - | ARMv5 -> "armv5" - | ARMv5TE -> "armv5te" - | ARMv6 -> "armv6" - | ARMv6T2 -> "armv6t2" - | ARMv7 -> "armv7" - | ARMv8 -> "armv8" - -let string_of_fpu = function - Soft -> "soft" - | VFPv2 -> "vfpv2" - | VFPv3_D16 -> "vfpv3-d16" - | VFPv3 -> "vfpv3" - -(* Machine-specific command-line options *) - -let (arch, fpu, thumb) = - let (def_arch, def_fpu, def_thumb) = - begin match abi, Config.model with - (* Defaults for architecture, FPU and Thumb *) - EABI, "armv5" -> ARMv5, Soft, false - | EABI, "armv5te" -> ARMv5TE, Soft, false - | EABI, "armv6" -> ARMv6, Soft, false - | EABI, "armv6t2" -> ARMv6T2, Soft, false - | EABI, "armv7" -> ARMv7, Soft, false - | EABI, "armv8" -> ARMv8, Soft, false - | EABI, _ -> ARMv4, Soft, false - | EABI_HF, "armv6" -> ARMv6, VFPv2, false - | EABI_HF, "armv8" -> ARMv8, VFPv3, true - | EABI_HF, _ -> ARMv7, VFPv3_D16, true - end in - (ref def_arch, ref def_fpu, ref def_thumb) - -let farch spec = - arch := begin match spec with - "armv4" when abi <> EABI_HF -> ARMv4 - | "armv5" when abi <> EABI_HF -> ARMv5 - | "armv5te" when abi <> EABI_HF -> ARMv5TE - | "armv6" -> ARMv6 - | "armv6t2" -> ARMv6T2 - | "armv7" -> ARMv7 - | "armv8" -> ARMv8 - | spec -> raise (Arg.Bad ("wrong '-farch' option: " ^ spec)) - end - -let ffpu spec = - fpu := begin match spec with - "soft" when abi <> EABI_HF -> Soft - | "vfpv2" when abi = EABI_HF -> VFPv2 - | "vfpv3-d16" when abi = EABI_HF -> VFPv3_D16 - | "vfpv3" when abi = EABI_HF -> VFPv3 - | spec -> raise (Arg.Bad ("wrong '-ffpu' option: " ^ spec)) - end - -let command_line_options = - [ "-farch", Arg.String farch, - " Select the ARM target architecture" - ^ " (default: " ^ (string_of_arch !arch) ^ ")"; - "-ffpu", Arg.String ffpu, - " Select the floating-point hardware" - ^ " (default: " ^ (string_of_fpu !fpu) ^ ")"; - "-fPIC", Arg.Set Clflags.pic_code, - " Generate position-independent machine code"; - "-fno-PIC", Arg.Clear Clflags.pic_code, - " Generate position-dependent machine code"; - "-fthumb", Arg.Set thumb, - " Enable Thumb/Thumb-2 code generation" - ^ (if !thumb then " (default)" else ""); - "-fno-thumb", Arg.Clear thumb, - " Disable Thumb/Thumb-2 code generation" - ^ (if not !thumb then " (default" else "")] - -(* Addressing modes *) - -type addressing_mode = - Iindexed of int (* reg + displ *) - -(* We do not support the reg + shifted reg addressing mode, because - what we really need is reg + shifted reg + displ, - and this is decomposed in two instructions (reg + shifted reg -> tmp, - then addressing tmp + displ). *) - -(* Specific operations *) - -type specific_operation = - Ishiftarith of arith_operation * shift_operation * int - | Ishiftcheckbound of shift_operation * int - | Irevsubimm of int - | Imulhadd (* multiply high and add *) - | Imuladd (* multiply and add *) - | Imulsub (* multiply and subtract *) - | Inegmulf (* floating-point negate and multiply *) - | Imuladdf (* floating-point multiply and add *) - | Inegmuladdf (* floating-point negate, multiply and add *) - | Imulsubf (* floating-point multiply and subtract *) - | Inegmulsubf (* floating-point negate, multiply and subtract *) - | Isqrtf (* floating-point square root *) - | Ibswap of int (* endianness conversion *) - -and arith_operation = - Ishiftadd - | Ishiftsub - | Ishiftsubrev - | Ishiftand - | Ishiftor - | Ishiftxor - -and shift_operation = - Ishiftlogicalleft - | Ishiftlogicalright - | Ishiftarithmeticright - -(* Sizes, endianness *) - -let big_endian = false - -let size_addr = 4 -let size_int = 4 -let size_float = 8 - -let allow_unaligned_access = false - -(* Behavior of division *) - -let division_crashes_on_overflow = false - -(* Operations on addressing modes *) - -let identity_addressing = Iindexed 0 - -let offset_addressing (Iindexed n) delta = Iindexed(n + delta) - -let num_args_addressing (Iindexed _) = 1 - -(* Printing operations and addressing modes *) - -let print_addressing printreg addr ppf arg = - match addr with - | Iindexed n -> - printreg ppf arg.(0); - if n <> 0 then fprintf ppf " + %i" n - -let shiftop_name = function - | Ishiftlogicalleft -> "<<" - | Ishiftlogicalright -> ">>u" - | Ishiftarithmeticright -> ">>s" - -let print_specific_operation printreg op ppf arg = - match op with - Ishiftarith(op, shiftop, amount) -> - let (op1_name, op2_name) = match op with - Ishiftadd -> ("", "+") - | Ishiftsub -> ("", "-") - | Ishiftsubrev -> ("-", "+") - | Ishiftand -> ("", "&") - | Ishiftor -> ("", "|") - | Ishiftxor -> ("", "^") in - fprintf ppf "%s%a %s (%a %s %i)" - op1_name - printreg arg.(0) - op2_name - printreg arg.(1) - (shiftop_name shiftop) - amount - | Ishiftcheckbound(shiftop, amount) -> - fprintf ppf "check (%a %s %i) > %a" - printreg arg.(0) - (shiftop_name shiftop) - amount - printreg arg.(1) - | Irevsubimm n -> - fprintf ppf "%i %s %a" n "-" printreg arg.(0) - | Imulhadd -> - fprintf ppf "%a *h %a) + %a" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Imuladd -> - fprintf ppf "(%a * %a) + %a" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Imulsub -> - fprintf ppf "-(%a * %a) + %a" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Inegmulf -> - fprintf ppf "-f (%a *f %a)" - printreg arg.(0) - printreg arg.(1) - | Imuladdf -> - fprintf ppf "%a +f (%a *f %a)" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Inegmuladdf -> - fprintf ppf "%a -f (%a *f %a)" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Imulsubf -> - fprintf ppf "(-f %a) +f (%a *f %a)" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Inegmulsubf -> - fprintf ppf "(-f %a) -f (%a *f %a)" - printreg arg.(0) - printreg arg.(1) - printreg arg.(2) - | Isqrtf -> - fprintf ppf "sqrtf %a" - printreg arg.(0) - | Ibswap n -> - fprintf ppf "bswap%i %a" n - printreg arg.(0) - -(* Recognize immediate operands *) - -(* Immediate operands are 8-bit immediate values, zero-extended, - and rotated right by 0 ... 30 bits. - In Thumb/Thumb-2 mode we utilize 26 ... 30. *) - -let is_immediate n = - let n = ref n in - let s = ref 0 in - let m = if !thumb then 24 else 30 in - while (!s <= m && Int32.logand !n 0xffl <> !n) do - n := Int32.logor (Int32.shift_right_logical !n 2) (Int32.shift_left !n 30); - s := !s + 2 - done; - !s <= m - -(* Specific operations that are pure *) - -let operation_is_pure = function - | Ishiftcheckbound _ -> false - | _ -> true - -(* Specific operations that can raise *) - -let operation_can_raise = function - | Ishiftcheckbound _ -> true - | _ -> false diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp deleted file mode 100644 index 29d9c38e..00000000 --- a/asmcomp/arm/emit.mlp +++ /dev/null @@ -1,1027 +0,0 @@ -#2 "asmcomp/arm/emit.mlp" -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Benedikt Meurer, University of Siegen *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* Copyright 2012 Benedikt Meurer. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Emission of ARM assembly code *) - -open Misc -open Cmm -open Arch -open Proc -open Reg -open Mach -open Linear -open Emitaux -open Emitenv - -(* Output a label *) - -let emit_label lbl = - emit_string ".L"; emit_int lbl - -(* Symbols *) - -let emit_symbol s = - Emitaux.emit_symbol '$' s - -let emit_call s = - if !Clflags.dlcode || !Clflags.pic_code - then `bl {emit_symbol s}(PLT)` - else `bl {emit_symbol s}` - -let emit_jump s = - if !Clflags.dlcode || !Clflags.pic_code - then `b {emit_symbol s}(PLT)` - else `b {emit_symbol s}` - -(* Output a pseudo-register *) - -let emit_reg = function - {loc = Reg r} -> emit_string (register_name r) - | _ -> fatal_error "Emit_arm.emit_reg" - -let frame_size env = - let sz = - env.stack_offset + - 4 * env.f.fun_num_stack_slots.(0) + - 8 * env.f.fun_num_stack_slots.(1) + - 8 * env.f.fun_num_stack_slots.(2) + - (if env.f.fun_contains_calls then 4 else 0) - in Misc.align sz 8 - -let slot_offset env loc cl = - match loc with - Incoming n -> - assert (n >= 0); - frame_size env + n - | Local n -> - if cl = 0 - then env.stack_offset + n * 4 - else env.stack_offset + env.f.fun_num_stack_slots.(0) * 4 + n * 8 - | Outgoing n -> - assert (n >= 0); - n - | Domainstate _ -> assert false (* not a stack slot *) - -(* Output a stack reference *) - -let emit_stack env r = - match r.loc with - | Stack (Domainstate n) -> - let ofs = n + Domainstate.(idx_of_field Domain_extra_params) * 8 in - `[domain_state_ptr, #{emit_int ofs}]` - | Stack s -> - let ofs = slot_offset env s (register_class r) in - `[sp, #{emit_int ofs}]` - | _ -> fatal_error "Emit_arm.emit_stack" - -(* Output an addressing mode *) - -let emit_addressing addr r n = - match addr with - Iindexed ofs -> - `[{emit_reg r.(n)}, #{emit_int ofs}]` - -(* Record live pointers at call points *) - -let record_frame_label env live dbg = - let lbl = new_label () in - let live_offset = ref [] in - Reg.Set.iter - (function - | {typ = Val; loc = Reg r} -> - live_offset := ((r lsl 1) + 1) :: !live_offset - | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset env s (register_class reg) :: !live_offset - | {typ = Addr} as r -> - Misc.fatal_error ("bad GC root " ^ Reg.name r) - | _ -> ()) - live; - record_frame_descr ~label:lbl ~frame_size:(frame_size env) - ~live_offset:!live_offset dbg; - lbl - -let record_frame env live dbg = - let lbl = record_frame_label env live dbg in `{emit_label lbl}:` - -let emit_call_gc gc = - `{emit_label gc.gc_lbl}: {emit_call "caml_call_gc"}\n`; - `{emit_label gc.gc_frame_lbl}: b {emit_label gc.gc_return_lbl}\n` - -let bound_error_label env dbg = - if !Clflags.debug || env.bound_error_sites = [] then begin - let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in - env.bound_error_sites <- - { bd_lbl = lbl_bound_error; - bd_frame = lbl_frame; - } :: env.bound_error_sites; - lbl_bound_error - end else begin - let bd = List.hd env.bound_error_sites in bd.bd_lbl - end - -let emit_call_bound_error bd = - `{emit_label bd.bd_lbl}: {emit_call "caml_ml_array_bound_error"}\n`; - `{emit_label bd.bd_frame}:\n` - -(* Negate a comparison *) - -let negate_integer_comparison = function - | Isigned cmp -> Isigned(negate_integer_comparison cmp) - | Iunsigned cmp -> Iunsigned(negate_integer_comparison cmp) - -(* Names of various instructions *) - -let name_for_comparison = function - Isigned Ceq -> "eq" | Isigned Cne -> "ne" | Isigned Cle -> "le" - | Isigned Cge -> "ge" | Isigned Clt -> "lt" | Isigned Cgt -> "gt" - | Iunsigned Ceq -> "eq" | Iunsigned Cne -> "ne" | Iunsigned Cle -> "ls" - | Iunsigned Cge -> "cs" | Iunsigned Clt -> "cc" | Iunsigned Cgt -> "hi" - -let name_for_int_operation = function - (* Use adds,subs,... to enable 16-bit T1 encoding *) - Iadd -> "adds" - | Isub -> "subs" - | Imul -> "mul" - | Imulh -> "smmul" - | Iand -> "ands" - | Ior -> "orrs" - | Ixor -> "eors" - | Ilsl -> "lsls" - | Ilsr -> "lsrs" - | Iasr -> "asrs" - | _ -> assert false - -let name_for_shift_operation = function - Ishiftlogicalleft -> "lsl" - | Ishiftlogicalright -> "lsr" - | Ishiftarithmeticright -> "asr" - -(* General functional to decompose a non-immediate integer constant - into 8-bit chunks shifted left 0 ... 30 bits. *) - -let decompose_intconst n fn = - let i = ref n in - let shift = ref 0 in - let ninstr = ref 0 in - while !i <> 0l do - if Int32.logand (Int32.shift_right !i !shift) 3l = 0l then - shift := !shift + 2 - else begin - let bits = Int32.logand !i (Int32.shift_left 0xffl !shift) in - i := Int32.sub !i bits; - shift := !shift + 8; - incr ninstr; - fn bits - end - done; - !ninstr - -(* Load an integer constant into a register *) - -let emit_intconst dst n = - let nr = Int32.lognot n in - if is_immediate n then begin - (* Use movs here to enable 16-bit T1 encoding *) - ` movs {emit_reg dst}, #{emit_int32 n}\n`; 1 - end else if is_immediate nr then begin - ` mvn {emit_reg dst}, #{emit_int32 nr}\n`; 1 - end else if !arch > ARMv6 then begin - let nl = Int32.logand 0xffffl n in - let nh = Int32.logand 0xffffl (Int32.shift_right_logical n 16) in - if nh = 0l then begin - ` movw {emit_reg dst}, #{emit_int32 nl}\n`; 1 - end else if Int32.logand nl 0xffl = nl then begin - ` movs {emit_reg dst}, #{emit_int32 nl}\n`; - ` movt {emit_reg dst}, #{emit_int32 nh}\n`; 2 - end else begin - ` movw {emit_reg dst}, #{emit_int32 nl}\n`; - ` movt {emit_reg dst}, #{emit_int32 nh}\n`; 2 - end - end else begin - let first = ref true in - decompose_intconst n - (fun bits -> - if !first - (* Use movs,adds here to enable 16-bit T1 encoding *) - then ` movs {emit_reg dst}, #{emit_int32 bits} @ {emit_int32 n}\n` - else ` adds {emit_reg dst}, {emit_reg dst}, #{emit_int32 bits}\n`; - first := false) - end - -(* Adjust sp (up or down) by the given byte amount *) - -let emit_stack_adjustment n = - if n = 0 then 0 else begin - let instr = if n < 0 then "sub" else "add" in - let ninstr = decompose_intconst (Int32.of_int (abs n)) - (fun bits -> - ` {emit_string instr} sp, sp, #{emit_int32 bits}\n`) in - cfi_adjust_cfa_offset (-n); - ninstr - end - -(* Deallocate the stack frame before a return or tail call *) - -let output_epilogue env f = - let n = frame_size env in - if n > 0 then begin - let ninstr = emit_stack_adjustment n in - let ninstr = ninstr + f () in - (* reset CFA back cause function body may continue *) - cfi_adjust_cfa_offset n; - ninstr - end else - f () - -(* Label a floating-point literal *) -let float_literal env fl = - try - let x = List.find (fun x -> Int64.equal x.fl fl) env.float_literals in - x.lbl - with Not_found -> - let lbl = new_label() in - env.size_literals <- env.size_literals + 2; - env.float_literals <- { fl; lbl } :: env.float_literals; - lbl - -(* Label a GOTREL literal *) -let gotrel_literal env lbl_pic = - let lbl_got = new_label() in - env.size_literals <- env.size_literals + 1; - env.gotrel_literals <- { lbl_got; lbl_pic } :: env.gotrel_literals; - lbl_got - -(* Label a symbol literal *) -let symbol_literal env sym = - try - let sl = List.find (fun x -> String.equal x.sym sym) env.symbol_literals in - sl.lbl - with Not_found -> - let lbl = new_label() in - env.size_literals <- env.size_literals + 1; - env.symbol_literals <- { sym; lbl } :: env.symbol_literals; - lbl - -(* Add an offset computation *) -let offset_literal env dst src = - let lbl = new_label() in - env.size_literals <- env.size_literals + 1; - env.offset_literals <- { lbl; dst; src; } :: env.offset_literals; - lbl - -(* Emit all pending literals *) -let emit_literals env = - if env.float_literals <> [] then begin - ` .align 3\n`; - List.iter - (fun {fl; lbl} -> - `{emit_label lbl}:`; emit_float64_split_directive ".long" fl) - env.float_literals; - env.float_literals <- [] - end; - if env.symbol_literals <> [] then begin - let offset = if !thumb then 4 else 8 in - let suffix = if !Clflags.pic_code then "(GOT)" else "" in - ` .align 2\n`; - List.iter - (fun { lbl_got; lbl_pic } -> - `{emit_label lbl_pic}: .word _GLOBAL_OFFSET_TABLE_-({emit_label lbl_got}+{emit_int offset})\n`) - env.gotrel_literals; - List.iter - (fun { sym; lbl } -> - `{emit_label lbl}: .word {emit_symbol sym}{emit_string suffix}\n`) - env.symbol_literals; - env.gotrel_literals <- []; - env.symbol_literals <- [] - end; - if env.offset_literals <> [] then begin - (* Additions using the pc register read a value 4 or 8 bytes greater than - the instruction's address, depending on the Thumb setting. However in - Thumb mode we must follow interworking conventions and ensure that the - bottom bit of the pc value is set when reloaded from the trap frame. - Hence "3" not "4". *) - let offset = if !thumb then 3 else 8 in - ` .align 2\n`; - List.iter - (fun { lbl; dst; src; } -> - `{emit_label lbl}: .word {emit_label dst}-({emit_label src}+{emit_int offset})\n`) - env.offset_literals; - env.offset_literals <- [] - end; - env.size_literals <- 0 - -(* Emit code to load the address of a symbol *) - -let emit_load_symbol_addr env dst s = - if !Clflags.pic_code then begin - let lbl_pic = new_label() in - let lbl_got = gotrel_literal env lbl_pic in - let lbl_sym = symbol_literal env s in - (* Both r3 and r12 are marked as clobbered in PIC mode (cf. proc.ml), - so use r12 as temporary scratch register unless the destination is - r12, then we use r3 instead. *) - let tmp = if dst.loc = Reg 8 (*r12*) - then phys_reg 3 (*r3*) - else phys_reg 8 (*r12*) in - ` ldr {emit_reg tmp}, {emit_label lbl_got}\n`; - ` ldr {emit_reg dst}, {emit_label lbl_sym}\n`; - `{emit_label lbl_pic}: add {emit_reg tmp}, pc, {emit_reg tmp}\n`; - ` ldr {emit_reg dst}, [{emit_reg tmp}, {emit_reg dst}] @ {emit_symbol s}\n`; - 4 - end else if !arch > ARMv6 && not !Clflags.dlcode && env.f.fun_fast then begin - ` movw {emit_reg dst}, #:lower16:{emit_symbol s}\n`; - ` movt {emit_reg dst}, #:upper16:{emit_symbol s}\n`; - 2 - end else begin - let lbl = symbol_literal env s in - ` ldr {emit_reg dst}, {emit_label lbl} @ {emit_symbol s}\n`; - 1 - end - -(* Emit instructions that set [rd] to 1 if integer condition [cmp] holds - and set [rd] to 0 otherwise. *) - -let emit_set_condition cmp rd = - let compthen = name_for_comparison cmp in - let compelse = name_for_comparison (negate_integer_comparison cmp) in - if !arch < ARMv8 || not !thumb then begin - ` ite {emit_string compthen}\n`; - ` mov{emit_string compthen} {emit_reg rd}, #1\n`; - ` mov{emit_string compelse} {emit_reg rd}, #0\n`; - 3 - end else begin - (* T32 mode in ARMv8 deprecates general ITE blocks - and favors IT blocks containing only one 16-bit instruction. - mov , # is 16 bits if is R0...R7 - and fits in 8 bits. *) - let temp = - match rd.loc with - | Reg r when r < 8 -> rd (* can assign rd directly *) - | _ -> phys_reg 3 (* use r3 as temporary *) in - ` it {emit_string compthen}\n`; - ` mov{emit_string compthen} {emit_reg temp}, #1\n`; - ` it {emit_string compelse}\n`; - ` mov{emit_string compelse} {emit_reg temp}, #0\n`; - if temp.loc = rd.loc then 4 else begin - ` movs {emit_reg rd}, {emit_reg temp}\n`; 5 - end - end - -(* Emit code to load the address of a label in the lr register *) -let emit_load_handler_address env handler = - (* PIC code *) - let lbl_src = new_label() in - let lbl_offset = offset_literal env handler lbl_src in - ` ldr lr, {emit_label lbl_offset}\n`; - `{emit_label lbl_src}:\n`; - ` add lr, pc, lr\n`; - 2 - - -(* Output .text section directive, or named .text.caml. if enabled. *) - -let emit_named_text_section func_name = - if !Clflags.function_sections then begin - ` .section .text.caml.{emit_symbol func_name},{emit_string_literal "ax"},%progbits\n` - end - else - ` .text\n` - -(* Output the assembly code for an instruction *) - -let emit_instr env i = - emit_debug_info i.dbg; - match i.desc with - | Lend -> 0 - | Lprologue -> - assert (env.f.fun_prologue_required); - let n = frame_size env in - let num_instrs = - if n > 0 then begin - let num_instrs = emit_stack_adjustment (-n) in - if env.f.fun_contains_calls then begin - cfi_offset ~reg:14 (* lr *) ~offset:(-4); - ` str lr, [sp, #{emit_int(n - 4)}]\n`; - num_instrs + 1 - end else begin - num_instrs - end - end else begin - 0 - end - in - `{emit_label env.f.fun_tailrec_entry_point_label}:\n`; - num_instrs - | Lop(Imove | Ispill | Ireload) -> - let src = i.arg.(0) and dst = i.res.(0) in - if src.loc = dst.loc then 0 else begin - begin match (src, dst) with - {loc = Reg _; typ = Float}, {loc = Reg _} -> - ` fcpyd {emit_reg dst}, {emit_reg src}\n` - | {loc = Reg _}, {loc = Reg _} -> - ` mov {emit_reg dst}, {emit_reg src}\n` - | {loc = Reg _; typ = Float}, _ -> - ` fstd {emit_reg src}, {emit_stack env dst}\n` - | {loc = Reg _}, _ -> - ` str {emit_reg src}, {emit_stack env dst}\n` - | {typ = Float}, _ -> - ` fldd {emit_reg dst}, {emit_stack env src}\n` - | _ -> - ` ldr {emit_reg dst}, {emit_stack env src}\n` - end; 1 - end - | Lop(Iconst_int n) -> - emit_intconst i.res.(0) (Nativeint.to_int32 n) - | Lop(Iconst_float f) when !fpu = Soft -> - let high_bits = Int64.to_int32 (Int64.shift_right_logical f 32) - and low_bits = Int64.to_int32 f in - if is_immediate low_bits || is_immediate high_bits then begin - let ninstr_low = emit_intconst i.res.(0) low_bits - and ninstr_high = emit_intconst i.res.(1) high_bits in - ninstr_low + ninstr_high - end else begin - let lbl = float_literal env f in - ` ldr {emit_reg i.res.(0)}, {emit_label lbl}\n`; - ` ldr {emit_reg i.res.(1)}, {emit_label lbl} + 4\n`; - 2 - end - | Lop(Iconst_float f) when !fpu = VFPv2 -> - let lbl = float_literal env f in - ` fldd {emit_reg i.res.(0)}, {emit_label lbl}\n`; - 1 - | Lop(Iconst_float f) -> - let encode imm = - let sg = Int64.to_int (Int64.shift_right_logical imm 63) in - let ex = Int64.to_int (Int64.shift_right_logical imm 52) in - let ex = (ex land 0x7ff) - 1023 in - let mn = Int64.logand imm 0xfffffffffffffL in - if Int64.logand mn 0xffffffffffffL <> 0L || ex < -3 || ex > 4 - then - None - else begin - let mn = Int64.to_int (Int64.shift_right_logical mn 48) in - if mn land 0x0f <> mn then - None - else - let ex = ((ex + 3) land 0x07) lxor 0x04 in - Some((sg lsl 7) lor (ex lsl 4) lor mn) - end in - begin match encode f with - None -> - let lbl = float_literal env f in - ` fldd {emit_reg i.res.(0)}, {emit_label lbl}\n` - | Some imm8 -> - ` fconstd {emit_reg i.res.(0)}, #{emit_int imm8}\n` - end; 1 - | Lop(Iconst_symbol s) -> - emit_load_symbol_addr env i.res.(0) s - | Lop(Icall_ind) -> - if !arch >= ARMv5 then begin - ` blx {emit_reg i.arg.(0)}\n`; - `{record_frame env i.live (Dbg_other i.dbg)}\n`; 1 - end else begin - ` mov lr, pc\n`; - ` bx {emit_reg i.arg.(0)}\n`; - `{record_frame env i.live (Dbg_other i.dbg)}\n`; 2 - end - | Lop(Icall_imm { func; }) -> - ` {emit_call func}\n`; - `{record_frame env i.live (Dbg_other i.dbg)}\n`; 1 - | Lop(Itailcall_ind) -> - output_epilogue env begin fun () -> - if env.f.fun_contains_calls then - ` ldr lr, [sp, #{emit_int (-4)}]\n`; - ` bx {emit_reg i.arg.(0)}\n`; 2 - end - | Lop(Itailcall_imm { func; }) -> - if func = env.f.fun_name then begin - ` b {emit_label env.f.fun_tailrec_entry_point_label}\n`; 1 - end else begin - output_epilogue env begin fun () -> - if env.f.fun_contains_calls then - ` ldr lr, [sp, #{emit_int (-4)}]\n`; - ` {emit_jump func}\n`; 2 - end - end - | Lop(Iextcall { func; alloc = false; }) -> - ` {emit_call func}\n`; 1 - | Lop(Iextcall { func; alloc = true; }) -> - let ninstr = emit_load_symbol_addr env (phys_reg 7 (* r7 *)) func in - ` {emit_call "caml_c_call"}\n`; - `{record_frame env i.live (Dbg_other i.dbg)}\n`; - 1 + ninstr - | Lop(Istackoffset n) -> - assert (n mod 8 = 0); - let ninstr = emit_stack_adjustment (-n) in - env.stack_offset <- env.stack_offset + n; - ninstr - | Lop(Iload(Single, addr, _mut)) when !fpu >= VFPv2 -> - ` flds s14, {emit_addressing addr i.arg 0}\n`; - ` fcvtds {emit_reg i.res.(0)}, s14\n`; 2 - | Lop(Iload(Double, addr, _mut)) when !fpu = Soft -> - (* Use LDM or LDRD if possible *) - begin match i.res.(0), i.res.(1), addr with - {loc = Reg rt}, {loc = Reg rt2}, Iindexed 0 - when rt < rt2 -> - ` ldm {emit_reg i.arg.(0)}, \{{emit_reg i.res.(0)}, {emit_reg i.res.(1)}}\n`; 1 - | {loc = Reg rt}, {loc = Reg rt2}, addr - when !arch >= ARMv5TE && rt mod 2 == 0 && rt2 = rt + 1 -> - ` ldrd {emit_reg i.res.(0)}, {emit_reg i.res.(1)}, {emit_addressing addr i.arg 0}\n`; 1 - | _ -> - let addr' = offset_addressing addr 4 in - if i.res.(0).loc <> i.arg.(0).loc then begin - ` ldr {emit_reg i.res.(0)}, {emit_addressing addr i.arg 0}\n`; - ` ldr {emit_reg i.res.(1)}, {emit_addressing addr' i.arg 0}\n` - end else begin - ` ldr {emit_reg i.res.(1)}, {emit_addressing addr' i.arg 0}\n`; - ` ldr {emit_reg i.res.(0)}, {emit_addressing addr i.arg 0}\n` - end; 2 - end - | Lop(Iload(size, addr, _mut)) -> - let r = i.res.(0) in - let instr = - match size with - Byte_unsigned -> "ldrb" - | Byte_signed -> "ldrsb" - | Sixteen_unsigned -> "ldrh" - | Sixteen_signed -> "ldrsh" - | Double -> "fldd" - | _ (* 32-bit quantities *) -> "ldr" in - ` {emit_string instr} {emit_reg r}, {emit_addressing addr i.arg 0}\n`; 1 - | Lop(Istore(Single, addr, _)) when !fpu >= VFPv2 -> - ` fcvtsd s14, {emit_reg i.arg.(0)}\n`; - ` fsts s14, {emit_addressing addr i.arg 1}\n`; 2 - | Lop(Istore(Double, addr, _)) when !fpu = Soft -> - (* Use STM or STRD if possible *) - begin match i.arg.(0), i.arg.(1), addr with - {loc = Reg rt}, {loc = Reg rt2}, Iindexed 0 - when rt < rt2 -> - ` stm {emit_reg i.arg.(2)}, \{{emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}}\n`; 1 - | {loc = Reg rt}, {loc = Reg rt2}, addr - when !arch >= ARMv5TE && rt mod 2 == 0 && rt2 = rt + 1 -> - ` strd {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_addressing addr i.arg 2}\n`; 1 - | _ -> - let addr' = offset_addressing addr 4 in - ` str {emit_reg i.arg.(0)}, {emit_addressing addr i.arg 2}\n`; - ` str {emit_reg i.arg.(1)}, {emit_addressing addr' i.arg 2}\n`; 2 - end - | Lop(Istore(size, addr, _)) -> - let r = i.arg.(0) in - let instr = - match size with - Byte_unsigned - | Byte_signed -> "strb" - | Sixteen_unsigned - | Sixteen_signed -> "strh" - | Double -> "fstd" - | _ (* 32-bit quantities *) -> "str" in - ` {emit_string instr} {emit_reg r}, {emit_addressing addr i.arg 1}\n`; 1 - | Lop(Ialloc { bytes = n; dbginfo }) -> - let lbl_frame = - record_frame_label env i.live (Dbg_alloc dbginfo) - in - if env.f.fun_fast then begin - let ninstr = decompose_intconst - (Int32.of_int n) - (fun i -> - ` sub alloc_ptr, alloc_ptr, #{emit_int32 i}\n`) in - let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in - ` ldr {emit_reg i.res.(0)}, [domain_state_ptr, {emit_int offset}]\n`; - ` cmp alloc_ptr, {emit_reg i.res.(0)}\n`; - let lbl_call_gc = new_label() in - ` bcc {emit_label lbl_call_gc}\n`; - let lbl_after_alloc = new_label() in - `{emit_label lbl_after_alloc}:`; - ` add {emit_reg i.res.(0)}, alloc_ptr, #4\n`; - env.call_gc_sites <- - { gc_lbl = lbl_call_gc; - gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; - 4 + ninstr - end else begin - let ninstr = - begin match n with - 8 -> ` {emit_call "caml_alloc1"}\n`; 1 - | 12 -> ` {emit_call "caml_alloc2"}\n`; 1 - | 16 -> ` {emit_call "caml_alloc3"}\n`; 1 - | _ -> let ninstr = emit_intconst (phys_reg 7) (Int32.of_int n) in - ` {emit_call "caml_allocN"}\n`; 1 + ninstr - end in - `{emit_label lbl_frame}: add {emit_reg i.res.(0)}, alloc_ptr, #4\n`; - 1 + ninstr - end - | Lop(Ipoll { return_label }) -> - begin match return_label with - None -> 0 - | Some lbl -> ` b {emit_label lbl}\n`; 1 - end - | Lop(Iintop(Icomp cmp)) -> - ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - 1 + emit_set_condition cmp i.res.(0) - | Lop(Iintop_imm(Icomp cmp, n)) -> - ` cmp {emit_reg i.arg.(0)}, #{emit_int n}\n`; - 1 + emit_set_condition cmp i.res.(0) - | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label env i.dbg in - ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - ` bls {emit_label lbl}\n`; 2 - | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label env i.dbg in - ` cmp {emit_reg i.arg.(0)}, #{emit_int n}\n`; - ` bls {emit_label lbl}\n`; 2 - | Lop(Ispecific(Ishiftcheckbound(shiftop, n))) -> - let lbl = bound_error_label env i.dbg in - let op = name_for_shift_operation shiftop in - ` cmp {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}, {emit_string op} #{emit_int n}\n`; - ` bcs {emit_label lbl}\n`; 2 - | Lop(Iintop Imulh) when !arch < ARMv6 -> - ` smull r12, {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; 1 - | Lop(Ispecific Imulhadd) -> - ` smmla {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n`; 1 - | Lop(Iintop op) -> - let instr = name_for_int_operation op in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; 1 - | Lop(Iintop_imm(op, n)) -> - let instr = name_for_int_operation op in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, #{emit_int n}\n`; 1 - | Lop(Iabsf | Inegf as op) when !fpu = Soft -> - assert (i.res.(0).loc = i.arg.(0).loc); - let instr = (match op with - Iabsf -> "bic" - | Inegf -> "eor" - | _ -> assert false) in - ` {emit_string instr} {emit_reg i.res.(1)}, {emit_reg i.arg.(1)}, #0x80000000\n`; 1 - | Lop(Iabsf | Inegf | Ispecific Isqrtf as op) -> - let instr = (match op with - Iabsf -> "fabsd" - | Inegf -> "fnegd" - | Ispecific Isqrtf -> "fsqrtd" - | _ -> assert false) in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}\n`; 1 - | Lop(Ifloatofint) -> - ` fmsr s14, {emit_reg i.arg.(0)}\n`; - ` fsitod {emit_reg i.res.(0)}, s14\n`; 2 - | Lop(Iintoffloat) -> - ` ftosizd s14, {emit_reg i.arg.(0)}\n`; - ` fmrs {emit_reg i.res.(0)}, s14\n`; 2 - | Lop(Iopaque) -> - assert (i.arg.(0).loc = i.res.(0).loc); 0 - | Lop(Iaddf | Isubf | Imulf | Idivf | Ispecific Inegmulf as op) -> - let instr = (match op with - Iaddf -> "faddd" - | Isubf -> "fsubd" - | Imulf -> "fmuld" - | Idivf -> "fdivd" - | Ispecific Inegmulf -> "fnmuld" - | _ -> assert false) in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - 1 - | Lop(Ispecific(Imuladdf | Inegmuladdf | Imulsubf | Inegmulsubf as op)) -> - assert (i.res.(0).loc = i.arg.(0).loc); - let instr = (match op with - Imuladdf -> "fmacd" - | Inegmuladdf -> "fnmacd" - | Imulsubf -> "fmscd" - | Inegmulsubf -> "fnmscd" - | _ -> assert false) in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n`; - 1 - | Lop(Ispecific(Ishiftarith(op, shiftop, n))) -> - let instr = (match op with - Ishiftadd -> "add" - | Ishiftsub -> "sub" - | Ishiftsubrev -> "rsb" - | Ishiftand -> "and" - | Ishiftor -> "orr" - | Ishiftxor -> "eor") in - let op = name_for_shift_operation shiftop in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, \ - {emit_reg i.arg.(1)}, {emit_string op} #{emit_int n}\n`; 1 - | Lop(Ispecific(Irevsubimm n)) -> - ` rsb {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, #{emit_int n}\n`; 1 - | Lop(Ispecific(Imuladd | Imulsub as op)) -> - let instr = (match op with - Imuladd -> "mla" - | Imulsub -> "mls" - | _ -> assert false) in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n`; 1 - | Lop(Ispecific(Ibswap size)) -> - begin match size with - 16 -> - ` rev16 {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}\n`; - ` movt {emit_reg i.res.(0)}, #0\n`; 2 - | 32 -> - ` rev {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}\n`; 1 - | _ -> - assert false - end - | Lreloadretaddr -> - let n = frame_size env in - ` ldr lr, [sp, #{emit_int(n-4)}]\n`; 1 - | Lreturn -> - output_epilogue env begin fun () -> - ` bx lr\n`; 1 - end - | Llabel lbl -> - `{emit_label lbl}:\n`; 0 - | Lbranch lbl -> - ` b {emit_label lbl}\n`; 1 - | Lcondbranch(tst, lbl) -> - begin match tst with - Itruetest -> - ` cmp {emit_reg i.arg.(0)}, #0\n`; - ` bne {emit_label lbl}\n`; 2 - | Ifalsetest -> - ` cmp {emit_reg i.arg.(0)}, #0\n`; - ` beq {emit_label lbl}\n`; 2 - | Iinttest cmp -> - ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - let comp = name_for_comparison cmp in - ` b{emit_string comp} {emit_label lbl}\n`; 2 - | Iinttest_imm(cmp, n) -> - ` cmp {emit_reg i.arg.(0)}, #{emit_int n}\n`; - let comp = name_for_comparison cmp in - ` b{emit_string comp} {emit_label lbl}\n`; 2 - | Ifloattest cmp -> - let comp = - match cmp with - | CFeq -> "eq" - | CFneq -> "ne" - | CFlt -> "cc" - | CFnlt -> "cs" - | CFle -> "ls" - | CFnle -> "hi" - | CFgt -> "gt" - | CFngt -> "le" - | CFge -> "ge" - | CFnge -> "lt" - in - ` fcmpd {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - ` fmstat\n`; - ` b{emit_string comp} {emit_label lbl}\n`; 3 - | Ioddtest -> - ` tst {emit_reg i.arg.(0)}, #1\n`; - ` bne {emit_label lbl}\n`; 2 - | Ieventest -> - ` tst {emit_reg i.arg.(0)}, #1\n`; - ` beq {emit_label lbl}\n`; 2 - end - | Lcondbranch3(lbl0, lbl1, lbl2) -> - ` cmp {emit_reg i.arg.(0)}, #1\n`; - begin match lbl0 with - None -> () - | Some lbl -> ` blt {emit_label lbl}\n` - end; - begin match lbl1 with - None -> () - | Some lbl -> ` beq {emit_label lbl}\n` - end; - begin match lbl2 with - None -> () - | Some lbl -> ` bgt {emit_label lbl}\n` - end; - 4 - | Lswitch jumptbl -> - if !arch > ARMv6 && !thumb then begin - (* The Thumb-2 TBH instruction supports only forward branches, - so we need to generate appropriate trampolines for all labels - that appear before this switch instruction (PR#5623) *) - let tramtbl = Array.copy jumptbl in - ` tbh [pc, {emit_reg i.arg.(0)}, lsl #1]\n`; - for j = 0 to Array.length tramtbl - 1 do - let rec label i = - match i.desc with - Lend -> new_label() - | Llabel lbl when lbl = tramtbl.(j) -> lbl - | _ -> label i.next in - tramtbl.(j) <- label i.next; - ` .short ({emit_label tramtbl.(j)}-.)/2+{emit_int j}\n` - done; - let sz = ref (1 + (Array.length jumptbl + 1) / 2) in - (* Generate the necessary trampolines *) - for j = 0 to Array.length tramtbl - 1 do - if tramtbl.(j) <> jumptbl.(j) then begin - `{emit_label tramtbl.(j)}: b {emit_label jumptbl.(j)}\n`; - incr sz - end - done; - !sz - end else if not !Clflags.pic_code then begin - ` ldr pc, [pc, {emit_reg i.arg.(0)}, lsl #2]\n`; - ` nop\n`; - for j = 0 to Array.length jumptbl - 1 do - ` .word {emit_label jumptbl.(j)}\n` - done; - 2 + Array.length jumptbl - end else begin - (* Slightly slower, but position-independent *) - ` add pc, pc, {emit_reg i.arg.(0)}, lsl #2\n`; - ` nop\n`; - for j = 0 to Array.length jumptbl - 1 do - ` b {emit_label jumptbl.(j)}\n` - done; - 2 + Array.length jumptbl - end - | Lentertrap -> - 0 - | Ladjust_trap_depth { delta_traps } -> - (* each trap occupies 8 bytes on the stack *) - let delta = 8 * delta_traps in - cfi_adjust_cfa_offset delta; - env.stack_offset <- env.stack_offset + delta; 0 - | Lpushtrap { lbl_handler; } -> - let s = emit_load_handler_address env lbl_handler in - env.stack_offset <- env.stack_offset + 8; - ` push \{trap_ptr, lr}\n`; - cfi_adjust_cfa_offset 8; - ` mov trap_ptr, sp\n`; s + 2 - | Lpoptrap -> - ` pop \{trap_ptr, lr}\n`; - cfi_adjust_cfa_offset (-8); - env.stack_offset <- env.stack_offset - 8; 1 - | Lraise k -> - begin match k with - | Lambda.Raise_regular -> - let offset = Domainstate.(idx_of_field Domain_backtrace_pos) * 8 in - ` mov r12, #0\n`; - ` str r12, [domain_state_ptr, {emit_int offset}]\n`; - ` {emit_call "caml_raise_exn"}\n`; - `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n`; 3 - | Lambda.Raise_reraise -> - ` {emit_call "caml_raise_exn"}\n`; - `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n`; 1 - | Lambda.Raise_notrace -> - ` mov sp, trap_ptr\n`; - ` pop \{trap_ptr, pc}\n`; 2 - end - -(* Upper bound on the size of the code sequence for a Linear instruction, - in 32-bit words. *) - -let max_instruction_size i = - match i.desc with - | Lswitch jumptbl -> - if !arch > ARMv6 && !thumb - then 1 + (Array.length jumptbl + 1) / 2 + Array.length jumptbl - else 2 + Array.length jumptbl - | _ -> - 8 (* conservative upper bound; the true upper bound is probably 5 *) - -(* Emission of an instruction sequence *) - -let rec emit_all env ninstr fallthrough i = - (* ninstr = number of 32-bit code words emitted since last constant island *) - (* fallthrough is true if previous instruction can fall through *) - if i.desc = Lend then () else begin - (* Make sure literals not yet emitted remain addressable, - or emit them in a new constant island. *) - (* fldd can address up to +/-1KB, ldr can address up to +/-4KB *) - let limit = (if !fpu >= VFPv2 && env.float_literals <> [] - then 127 - else 511) in - let limit = limit - env.size_literals - max_instruction_size i in - let ninstr' = - if ninstr >= limit - 64 && not fallthrough then begin - emit_literals env; - 0 - end else if env.size_literals != 0 && ninstr >= limit then begin - let lbl = new_label() in - ` b {emit_label lbl}\n`; - emit_literals env; - `{emit_label lbl}:\n`; - 0 - end else - ninstr in - let n = emit_instr env i in - emit_all env (ninstr' + n) (has_fallthrough i.desc) i.next - end - -(* Emission of a function declaration *) - -let fundecl fundecl = - let env = mk_env fundecl in - emit_named_text_section fundecl.fun_name; - ` .align 2\n`; - ` .globl {emit_symbol fundecl.fun_name}\n`; - if !arch > ARMv6 && !thumb then - ` .thumb\n` - else - ` .arm\n`; - ` .type {emit_symbol fundecl.fun_name}, %function\n`; - `{emit_symbol fundecl.fun_name}:\n`; - emit_debug_info fundecl.fun_dbg; - cfi_startproc(); - emit_all env 0 true fundecl.fun_body; - emit_literals env; - List.iter emit_call_gc env.call_gc_sites; - List.iter emit_call_bound_error env.bound_error_sites; - cfi_endproc(); - ` .type {emit_symbol fundecl.fun_name}, %function\n`; - ` .size {emit_symbol fundecl.fun_name}, .-{emit_symbol fundecl.fun_name}\n` - -(* Emission of data *) - -let emit_item = function - Cglobal_symbol s -> ` .globl {emit_symbol s}\n`; - | Cdefine_symbol s -> `{emit_symbol s}:\n` - | Cint8 n -> ` .byte {emit_int n}\n` - | Cint16 n -> ` .short {emit_int n}\n` - | Cint32 n -> ` .long {emit_int32 (Nativeint.to_int32 n)}\n` - | Cint n -> ` .long {emit_int32 (Nativeint.to_int32 n)}\n` - | Csingle f -> emit_float32_directive ".long" (Int32.bits_of_float f) - | Cdouble f -> emit_float64_split_directive ".long" (Int64.bits_of_float f) - | Csymbol_address s -> ` .word {emit_symbol s}\n` - | Cstring s -> emit_string_directive " .ascii " s - | Cskip n -> if n > 0 then ` .space {emit_int n}\n` - | Calign n -> ` .align {emit_int(Misc.log2 n)}\n` - -let data l = - ` .data\n`; - List.iter emit_item l - -(* Beginning / end of an assembly file *) - -let begin_assembly() = - reset_debug_info(); - ` .file \"\"\n`; (* PR#7037 *) - ` .syntax unified\n`; - begin match !arch with - | ARMv4 -> ` .arch armv4t\n` - | ARMv5 -> ` .arch armv5t\n` - | ARMv5TE -> ` .arch armv5te\n` - | ARMv6 -> ` .arch armv6\n` - | ARMv6T2 -> ` .arch armv6t2\n` - | ARMv7 -> ` .arch armv7-a\n` - | ARMv8 -> ` .arch armv8-a\n` - end; - begin match !fpu with - Soft -> ` .fpu softvfp\n` - | VFPv2 -> ` .fpu vfpv2\n` - | VFPv3_D16 -> ` .fpu vfpv3-d16\n` - | VFPv3 -> ` .fpu vfpv3\n` - end; - `trap_ptr .req r8\n`; - `alloc_ptr .req r10\n`; - `domain_state_ptr .req r11\n`; - let lbl_begin = Compilenv.make_symbol (Some "data_begin") in - ` .data\n`; - ` .globl {emit_symbol lbl_begin}\n`; - `{emit_symbol lbl_begin}:\n`; - let lbl_begin = Compilenv.make_symbol (Some "code_begin") in - emit_named_text_section lbl_begin; - ` .globl {emit_symbol lbl_begin}\n`; - `{emit_symbol lbl_begin}:\n` - -let end_assembly () = - let lbl_end = Compilenv.make_symbol (Some "code_end") in - emit_named_text_section lbl_end; - ` .globl {emit_symbol lbl_end}\n`; - `{emit_symbol lbl_end}:\n`; - let lbl_end = Compilenv.make_symbol (Some "data_end") in - ` .data\n`; - ` .long 0\n`; (* PR#6329 *) - ` .globl {emit_symbol lbl_end}\n`; - `{emit_symbol lbl_end}:\n`; - ` .long 0\n`; - let lbl = Compilenv.make_symbol (Some "frametable") in - ` .globl {emit_symbol lbl}\n`; - `{emit_symbol lbl}:\n`; - emit_frames - { efa_code_label = (fun lbl -> - ` .type {emit_label lbl}, %function\n`; - ` .word {emit_label lbl}\n`); - efa_data_label = (fun lbl -> - ` .type {emit_label lbl}, %object\n`; - ` .word {emit_label lbl}\n`); - efa_8 = (fun n -> ` .byte {emit_int n}\n`); - efa_16 = (fun n -> ` .short {emit_int n}\n`); - efa_32 = (fun n -> ` .long {emit_int32 n}\n`); - efa_word = (fun n -> ` .word {emit_int n}\n`); - efa_align = (fun n -> ` .align {emit_int(Misc.log2 n)}\n`); - efa_label_rel = (fun lbl ofs -> - ` .word {emit_label lbl} - . + {emit_int32 ofs}\n`); - efa_def_label = (fun lbl -> `{emit_label lbl}:\n`); - efa_string = (fun s -> emit_string_directive " .asciz " s) }; - ` .type {emit_symbol lbl}, %object\n`; - ` .size {emit_symbol lbl}, .-{emit_symbol lbl}\n`; - begin match Config.system with - "linux_eabihf" | "linux_eabi" | "netbsd" -> - (* Mark stack as non-executable *) - ` .section .note.GNU-stack,\"\",%progbits\n` - | _ -> () - end diff --git a/asmcomp/arm/proc.ml b/asmcomp/arm/proc.ml deleted file mode 100644 index e7e34f36..00000000 --- a/asmcomp/arm/proc.ml +++ /dev/null @@ -1,363 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Benedikt Meurer, University of Siegen *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* Copyright 2012 Benedikt Meurer. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Description of the ARM processor *) - -open Misc -open Cmm -open Reg -open Arch -open Mach - -(* Instruction selection *) - -let word_addressed = false - -(* Registers available for register allocation *) - -(* Integer register map: - r0 - r3 general purpose (not preserved) - r4 - r7 general purpose (preserved) - r8 trap pointer (preserved) - r9 platform register, usually reserved - r10 allocation pointer (preserved) - r11 domain state pointer (preserved) - r12 intra-procedural scratch register (not preserved) - r13 stack pointer - r14 return address - r15 program counter - Floating-point register map (VFPv{2,3}): - d0 - d7 general purpose (not preserved) - d8 - d15 general purpose (preserved) - d16 - d31 general purpose (not preserved), VFPv3 only -*) - -let int_reg_name = - [| "r0"; "r1"; "r2"; "r3"; "r4"; "r5"; "r6"; "r7"; "r12" |] - -let float_reg_name = - [| "d0"; "d1"; "d2"; "d3"; "d4"; "d5"; "d6"; "d7"; - "d8"; "d9"; "d10"; "d11"; "d12"; "d13"; "d14"; "d15"; - "d16"; "d17"; "d18"; "d19"; "d20"; "d21"; "d22"; "d23"; - "d24"; "d25"; "d26"; "d27"; "d28"; "d29"; "d30"; "d31" |] - -(* We have three register classes: - 0 for integer registers - 1 for VFPv2 and VFPv3-D16 - 2 for VFPv3 - This way we can choose between VFPv2/VFPv3-D16 and VFPv3 - at (ocamlopt) runtime using command line switches. -*) - -let num_register_classes = 3 - -let register_class r = - match (r.typ, !fpu) with - | (Val | Int | Addr), _ -> 0 - | Float, VFPv2 -> 1 - | Float, VFPv3_D16 -> 1 - | Float, _ -> 2 - -let num_available_registers = - [| 9; 16; 32 |] - -let first_available_register = - [| 0; 100; 100 |] - -let register_name r = - if r < 100 then int_reg_name.(r) else float_reg_name.(r - 100) - -let rotate_registers = true - -(* Representation of hard registers by pseudo-registers *) - -let hard_int_reg = - let v = Array.make 9 Reg.dummy in - for i = 0 to 8 do - v.(i) <- Reg.at_location Int (Reg i) - done; - v - -let hard_float_reg = - let v = Array.make 32 Reg.dummy in - for i = 0 to 31 do - v.(i) <- Reg.at_location Float (Reg(100 + i)) - done; - v - -let all_phys_regs = - Array.append hard_int_reg hard_float_reg - -let phys_reg n = - if n < 100 then hard_int_reg.(n) else hard_float_reg.(n - 100) - -let stack_slot slot ty = - Reg.at_location ty (Stack slot) - -(* Calling conventions *) - -let size_domainstate_args = 64 * size_int - -let loc_int last_int make_stack int ofs = - if !int <= last_int then begin - let l = phys_reg !int in - incr int; l - end else begin - let l = stack_slot (make_stack !ofs) Int in - ofs := !ofs + size_int; l - end - -let loc_float last_float make_stack float ofs = - assert (abi = EABI_HF); - assert (!fpu >= VFPv2); - if !float <= last_float then begin - let l = phys_reg !float in - incr float; l - end else begin - ofs := Misc.align !ofs size_float; - let l = stack_slot (make_stack !ofs) Float in - ofs := !ofs + size_float; l - end - -let loc_int_pair last_int make_stack int ofs = - (* 64-bit quantities split across two registers must either be in a - consecutive pair of registers where the lowest numbered is an - even-numbered register; or in a stack slot that is 8-byte aligned. *) - int := Misc.align !int 2; - if !int <= last_int - 1 then begin - let reg_lower = phys_reg !int in - let reg_upper = phys_reg (1 + !int) in - int := !int + 2; - [| reg_lower; reg_upper |] - end else begin - let size_int64 = size_int * 2 in - ofs := Misc.align !ofs size_int64; - let stack_lower = stack_slot (make_stack !ofs) Int in - let stack_upper = stack_slot (make_stack (size_int + !ofs)) Int in - ofs := !ofs + size_int64; - [| stack_lower; stack_upper |] - end - -let calling_conventions first_int last_int first_float last_float - make_stack first_stack arg = - let loc = Array.make (Array.length arg) Reg.dummy in - let int = ref first_int in - let float = ref first_float in - let ofs = ref first_stack in - for i = 0 to Array.length arg - 1 do - match arg.(i) with - | Val | Int | Addr -> - loc.(i) <- loc_int last_int make_stack int ofs - | Float -> - loc.(i) <- loc_float last_float make_stack float ofs - done; - (loc, Misc.align (max 0 !ofs) 8) (* keep stack 8-aligned *) - -let incoming ofs = - if ofs >= 0 - then Incoming ofs - else Domainstate (ofs + size_domainstate_args) -let outgoing ofs = - if ofs >= 0 - then Outgoing ofs - else Domainstate (ofs + size_domainstate_args) -let not_supported _ofs = fatal_error "Proc.loc_results: cannot call" - -(* OCaml calling convention: - first integer args in r0...r7 - first float args in d0...d15 (EABI+VFP) - remaining args in domain state area, then on stack. - Return values in r0...r7 or d0...d15. *) - -let max_arguments_for_tailcalls = 8 (* in regs *) + 64 (* in domain state *) - -let loc_arguments arg = - calling_conventions 0 7 100 115 outgoing (- size_domainstate_args) arg - -let loc_parameters arg = - let (loc, _) = - calling_conventions 0 7 100 115 incoming (- size_domainstate_args) arg - in loc - -let loc_results res = - let (loc, _) = calling_conventions 0 7 100 115 not_supported 0 res in loc - -(* C calling convention: - first integer args in r0...r3 - first 64-bit integer args in r0-r1, r2-r3 - first float args in d0...d7 (EABI+VFP) - first float args in r0-r1, r2-r3 (soft FP) - remaining args on stack. - Return values in r0, r0-r1, or d0. *) - -let external_calling_conventions first_int last_int first_float last_float - make_stack ty_args = - let loc = Array.make (List.length ty_args) [| Reg.dummy |] in - let int = ref first_int in - let float = ref first_float in - let ofs = ref 0 in - List.iteri - (fun i ty_arg -> - match ty_arg with - | XInt | XInt32 -> - loc.(i) <- [| loc_int last_int make_stack int ofs |] - | XInt64 -> - loc.(i) <- loc_int_pair last_int make_stack int ofs - | XFloat -> - loc.(i) <- - (if abi = EABI_HF - then [| loc_float last_float make_stack float ofs |] - else loc_int_pair last_int make_stack int ofs)) - ty_args; - (loc, Misc.align !ofs 8) (* keep stack 8-aligned *) - -let loc_external_arguments ty_args = - external_calling_conventions 0 3 100 107 outgoing ty_args - -let loc_external_results res = - let (loc, _) = calling_conventions 0 1 100 100 not_supported 0 res - in loc - -let loc_exn_bucket = phys_reg 0 - -(* See "DWARF for the ARM architecture" available from developer.arm.com. *) - -let int_dwarf_reg_numbers = - [| 0; 1; 2; 3; 4; 5; 6; 7; 12 |] - -let float_dwarf_reg_numbers_legacy = - [| 64; 65; 66; 67; 68; 69; 70; 71; - 72; 73; 74; 75; 76; 77; 78; 79; - 80; 81; 82; 83; 84; 85; 86; 87; - 88; 89; 90; 91; 92; 93; 94; 95; - |] - -let float_dwarf_reg_numbers = - [| 256; 257; 258; 259; 260; 261; 262; 263; - 264; 265; 266; 267; 268; 269; 270; 271; - 272; 273; 274; 275; 276; 277; 278; 279; - 280; 281; 282; 283; 284; 285; 286; 287; - |] - -let dwarf_register_numbers ~reg_class = - match reg_class with - | 0 -> int_dwarf_reg_numbers - | 1 -> - (* Section 3.1 note 4 says that the "new" VFPv3 register numberings - (as per [float_dwarf_reg_numbers]) should be used for VFPv2 as well. - However we believe that for <= ARMv6 we should use the legacy VFPv2 - numberings. *) - if !arch <= ARMv6 then float_dwarf_reg_numbers_legacy - else float_dwarf_reg_numbers - | 2 -> float_dwarf_reg_numbers - | _ -> Misc.fatal_errorf "Bad register class %d" reg_class - -let stack_ptr_dwarf_register_number = 13 - -(* Volatile registers: none *) - -let regs_are_volatile _rs = false - -(* Registers destroyed by operations *) - -let destroyed_at_alloc = (* r0-r6, d0-d15 preserved *) - Array.of_list (List.map - phys_reg - [7;8; - 116;117;118;119;120;121;122;123; - 124;125;126;127;128;129;130;131]) - -let destroyed_at_c_call = - Array.of_list (List.map - phys_reg - (match abi with - EABI -> (* r4-r7 preserved *) - [0;1;2;3;8; - 100;101;102;103;104;105;106;107; - 108;109;110;111;112;113;114;115; - 116;117;118;119;120;121;122;123; - 124;125;126;127;128;129;130;131] - | EABI_HF -> (* r4-r7, d8-d15 preserved *) - [0;1;2;3;8; - 100;101;102;103;104;105;106;107; - 116;117;118;119;120;121;122;123; - 124;125;126;127;128;129;130;131])) - -let destroyed_at_oper = function - Iop(Icall_ind | Icall_imm _) - | Iop(Iextcall { alloc = true; _ }) -> - all_phys_regs - | Iop(Iextcall { alloc = false; _}) -> - destroyed_at_c_call - | Iop(Ialloc _) -> - destroyed_at_alloc - | Iop(Iconst_symbol _) when !Clflags.pic_code -> - [| phys_reg 3; phys_reg 8 |] (* r3 and r12 destroyed *) - | Iop(Iintop Imulh) when !arch < ARMv6 -> - [| phys_reg 8 |] (* r12 destroyed *) - | Iop(Iintop (Icomp _) | Iintop_imm(Icomp _, _)) - when !arch >= ARMv8 && !thumb -> - [| phys_reg 3 |] (* r3 destroyed *) - | Iop(Iintoffloat | Ifloatofint - | Iload(Single, _, _) | Istore(Single, _, _)) -> - [| phys_reg 107 |] (* d7 (s14-s15) destroyed *) - | _ -> [||] - -let destroyed_at_raise = all_phys_regs - -(* lr is destroyed at [Lreloadretaddr], but lr is not used for register - allocation, and thus does not need to (and indeed cannot) occur here. *) -let destroyed_at_reloadretaddr = [| |] - -(* Maximal register pressure *) - -let safe_register_pressure = function - Iextcall _ -> if abi = EABI then 0 else 4 - | Ialloc _ -> if abi = EABI then 0 else 7 - | Iconst_symbol _ when !Clflags.pic_code -> 7 - | Iintop Imulh when !arch < ARMv6 -> 8 - | _ -> 9 - -let max_register_pressure = function - Iextcall _ -> if abi = EABI then [| 4; 0; 0 |] else [| 4; 8; 8 |] - | Ialloc _ -> if abi = EABI then [| 7; 0; 0 |] else [| 7; 8; 8 |] - | Iconst_symbol _ when !Clflags.pic_code -> [| 7; 16; 32 |] - | Iintoffloat | Ifloatofint - | Iload(Single, _, _) | Istore(Single, _, _) -> [| 9; 15; 31 |] - | Iintop Imulh when !arch < ARMv6 -> [| 8; 16; 32 |] - | _ -> [| 9; 16; 32 |] - -(* Layout of the stack *) - -let frame_required fd = - let num_stack_slots = fd.fun_num_stack_slots in - fd.fun_contains_calls - || num_stack_slots.(0) > 0 - || num_stack_slots.(1) > 0 - || num_stack_slots.(2) > 0 - -let prologue_required fd = - frame_required fd - -(* Calling the assembler *) - -let assemble_file infile outfile = - Ccomp.command (Config.asm ^ " " ^ - (String.concat " " (Misc.debug_prefix_map_flags ())) ^ - " -o " ^ Filename.quote outfile ^ " " ^ Filename.quote infile) - - -let init () = () diff --git a/asmcomp/arm/reload.ml b/asmcomp/arm/reload.ml deleted file mode 100644 index 301ec112..00000000 --- a/asmcomp/arm/reload.ml +++ /dev/null @@ -1,57 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Arch -open Mach - -(* Reloading for the ARM *) - -class reload = object - -inherit Reloadgen.reload_generic as super - -method! reload_operation op arg res = - let ((arg', res') as argres') = super#reload_operation op arg res in - match op with - | Iintop Imul | Ispecific Imuladd -> - (* On ARM v4 and v5, module [Selection] adds a second, dummy - result to multiplication instructions (mul and muladd). This - second result is the same pseudoregister as the first - argument to the multiplication. As shown in MPR#7642, - reloading must maintain this invariant. Otherwise, the second - result and the first argument can end up in different registers, - and the second result can be used later, even though - it is not initialized. *) - if Array.length res' >= 2 then res'.(1) <- arg'.(0); - argres' - | Ispecific(Imuladdf | Inegmuladdf | Imulsubf | Inegmulsubf) -> - (* VFP float multiply-add instructions are "two-address" in the - sense that they must have [arg.(0) = res.(0)]. - Preserve this invariant. *) - (arg', [|arg'.(0)|]) - | Iabsf | Inegf when !fpu = Soft -> - (* Soft FP neg and abs also have a "two-address" constraint of sorts. - 64-bit floats are represented by pairs of 32-bit integers, - hence there are two arguments and two results. - The code emitter assumes [arg.(0) = res.(0)] but supports - [arg.(1)] and [res.(1)] being in different registers. *) - res'.(0) <- arg'.(0); - argres' - | _ -> - argres' -end - -let fundecl f num_stack_slots = - (new reload)#fundecl f num_stack_slots diff --git a/asmcomp/arm/scheduling.ml b/asmcomp/arm/scheduling.ml deleted file mode 100644 index e7fd744a..00000000 --- a/asmcomp/arm/scheduling.ml +++ /dev/null @@ -1,80 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Benedikt Meurer, University of Siegen *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* Copyright 2012 Benedikt Meurer. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Arch -open Mach - -(* Instruction scheduling for the ARM *) - -class scheduler = object - -inherit Schedgen.scheduler_generic as super - -(* Scheduling -- based roughly on the ARM11 (ARMv6) *) - -method oper_latency = function - (* Loads have a latency of two cycles in general *) - Iconst_symbol _ - | Iconst_float _ - | Iload(_, _, _) - | Ireload - | Ifloatofint (* mcr/mrc count as memory access *) - | Iintoffloat -> 2 - (* Multiplys have a latency of two cycles *) - | Iintop (Imul | Imulh) - | Ispecific(Imuladd | Imulsub | Imulhadd) -> 2 - (* VFP instructions *) - | Iaddf - | Isubf - | Idivf - | Imulf | Ispecific Inegmulf - | Ispecific(Imuladdf | Inegmuladdf | Imulsubf | Inegmulsubf) - | Ispecific Isqrtf - | Inegf | Iabsf when !fpu >= VFPv2 -> 2 - (* Everything else *) - | _ -> 1 - -method! is_checkbound = function - Ispecific(Ishiftcheckbound _) -> true - | op -> super#is_checkbound op - -(* Issue cycles. Rough approximations *) - -method oper_issue_cycles = function - Ialloc _ -> 4 - | Iintop(Ilsl | Ilsr | Iasr) -> 2 - | Iintop(Icomp _) - | Iintop_imm(Icomp _, _) -> 3 - | Iintop(Icheckbound) - | Iintop_imm(Icheckbound, _) -> 2 - | Ispecific(Ishiftcheckbound _) -> 3 - | Iintop(Imul | Imulh) - | Ispecific(Imuladd | Imulsub | Imulhadd) -> 2 - (* VFP instructions *) - | Iaddf - | Isubf -> 7 - | Imulf - | Ispecific Inegmulf -> 9 - | Ispecific(Imuladdf | Inegmuladdf | Imulsubf | Inegmulsubf) -> 17 - | Idivf - | Ispecific Isqrtf -> 27 - | Inegf | Iabsf | Iconst_float _ when !fpu >= VFPv2 -> 4 - (* Everything else *) - | _ -> 1 - -end - -let fundecl f = (new scheduler)#schedule_fundecl f diff --git a/asmcomp/arm/selection.ml b/asmcomp/arm/selection.ml deleted file mode 100644 index 12ea5808..00000000 --- a/asmcomp/arm/selection.ml +++ /dev/null @@ -1,332 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Benedikt Meurer, University of Siegen *) -(* *) -(* Copyright 1998 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* Copyright 2012 Benedikt Meurer. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Instruction selection for the ARM processor *) - -open Arch -open Proc -open Cmm -open Mach - -let is_offset chunk n = - match chunk with - (* VFPv{2,3} load/store have -1020 to 1020. Offset must be multiple of 4 *) - | Single | Double - when !fpu >= VFPv2 -> - n >= -1020 && n <= 1020 && n mod 4 = 0 - (* ARM load/store byte/word have -4095 to 4095 *) - | Byte_unsigned | Byte_signed - | Thirtytwo_unsigned | Thirtytwo_signed - | Word_int | Word_val | Single - when not !thumb -> - n >= -4095 && n <= 4095 - (* Thumb-2 load/store have -255 to 4095 *) - | _ when !arch > ARMv6 && !thumb -> - n >= -255 && n <= 4095 - (* Everything else has -255 to 255 *) - | _ -> - n >= -255 && n <= 255 - -let select_shiftop = function - Clsl -> Ishiftlogicalleft - | Clsr -> Ishiftlogicalright - | Casr -> Ishiftarithmeticright - | __-> assert false - -(* Special constraints on operand and result registers *) - -exception Use_default - -let r1 = phys_reg 1 -let r6 = phys_reg 6 -let r7 = phys_reg 7 - -let pseudoregs_for_operation op arg res = - match op with - (* For mul rd,rm,rs and mla rd,rm,rs,ra (pre-ARMv6) the registers rm - and rd must be different. We deal with this by pretending that rm - is also a result of the mul / mla operation. *) - Iintop Imul | Ispecific Imuladd when !arch < ARMv6 -> - (arg, [| res.(0); arg.(0) |]) - (* For smull rdlo,rdhi,rn,rm (pre-ARMv6) the registers rdlo, rdhi and rn - must be different. Also, rdlo (whose contents we discard) is always - forced to be r12 in proc.ml, which means that neither rdhi and rn can - be r12. To keep things simple, we force both of those two to specific - hard regs: rdhi in r6 and rn in r7. *) - | Iintop Imulh when !arch < ARMv6 -> - ([| r7; arg.(1) |], [| r6 |]) - (* Soft-float Iabsf and Inegf: arg.(0) and res.(0) must be the same *) - | Iabsf | Inegf when !fpu = Soft -> - ([|res.(0); arg.(1)|], res) - (* VFPv{2,3} Imuladdf...Inegmulsubf: arg.(0) and res.(0) must be the same *) - | Ispecific(Imuladdf | Inegmuladdf | Imulsubf | Inegmulsubf) -> - let arg' = Array.copy arg in - arg'.(0) <- res.(0); - (arg', res) - (* We use __aeabi_idivmod for Cmodi only, and hence we care only - for the remainder in r1, so fix up the destination register. *) - | Iextcall { func = "__aeabi_idivmod"; _ } -> - (arg, [|r1|]) - (* Other instructions are regular *) - | _ -> raise Use_default - -(* Instruction selection *) -class selector = object(self) - -inherit Selectgen.selector_generic as super - -method! regs_for tyv = - Reg.createv (if !fpu = Soft then begin - (* Expand floats into pairs of integer registers *) - (* CR mshinwell: we need to check this in conjunction with - the unboxed external functionality *) - let rec expand = function - [] -> [] - | Float :: tyl -> Int :: Int :: expand tyl - | ty :: tyl -> ty :: expand tyl in - Array.of_list (expand (Array.to_list tyv)) - end else begin - tyv - end) - -method! is_immediate op n = - match op with - | Iadd | Isub | Iand | Ior | Ixor | Icomp _ | Icheckbound -> - Arch.is_immediate (Int32.of_int n) - | _ -> - super#is_immediate op n - -method is_immediate_test _op n = - Arch.is_immediate (Int32.of_int n) - -method! is_simple_expr = function - (* inlined floating-point ops are simple if their arguments are *) - | Cop(Cextcall("sqrt", _, _, _), args, _) when !fpu >= VFPv2 -> - List.for_all self#is_simple_expr args - (* inlined byte-swap ops are simple if their arguments are *) - | Cop(Cextcall("caml_bswap16_direct", _, _, _), args, _) - when !arch >= ARMv6T2 -> - List.for_all self#is_simple_expr args - | Cop(Cextcall("caml_int32_direct_bswap", _, _, _), args, _) - when !arch >= ARMv6 -> - List.for_all self#is_simple_expr args - | e -> super#is_simple_expr e - -method! effects_of e = - match e with - | Cop(Cextcall("sqrt", _, _, _), args, _) when !fpu >= VFPv2 -> - Selectgen.Effect_and_coeffect.join_list_map args self#effects_of - | Cop(Cextcall("caml_bswap16_direct", _, _, _), args, _) - when !arch >= ARMv6T2 -> - Selectgen.Effect_and_coeffect.join_list_map args self#effects_of - | Cop(Cextcall("caml_int32_direct_bswap",_ ,_ , _), args, _) - when !arch >= ARMv6 -> - Selectgen.Effect_and_coeffect.join_list_map args self#effects_of - | e -> super#effects_of e - -method select_addressing chunk = function - | Cop((Cadda | Caddv), [arg; Cconst_int (n, _)], _) - when is_offset chunk n -> - (Iindexed n, arg) - | Cop((Cadda | Caddv as op), - [arg1; Cop(Caddi, [arg2; Cconst_int (n, _)], _)], dbg) - when is_offset chunk n -> - (Iindexed n, Cop(op, [arg1; arg2], dbg)) - | arg -> - (Iindexed 0, arg) - -method select_shift_arith op dbg arithop arithrevop args = - match args with - [arg1; Cop(Clsl | Clsr | Casr as op, [arg2; Cconst_int (n, _)], _)] - when n > 0 && n < 32 -> - (Ispecific(Ishiftarith(arithop, select_shiftop op, n)), [arg1; arg2]) - | [Cop(Clsl | Clsr | Casr as op, [arg1; Cconst_int (n, _)], _); arg2] - when n > 0 && n < 32 -> - (Ispecific(Ishiftarith(arithrevop, select_shiftop op, n)), [arg2; arg1]) - | args -> - begin match super#select_operation op args dbg with - (* Recognize multiply high and add *) - (Iintop Iadd, [Cop(Cmulhi, args, _); arg3]) - | (Iintop Iadd, [arg3; Cop(Cmulhi, args, _)]) as op_args - when !arch >= ARMv6 -> - begin match self#select_operation Cmulhi args dbg with - (Iintop Imulh, [arg1; arg2]) -> - (Ispecific Imulhadd, [arg1; arg2; arg3]) - | _ -> op_args - end - (* Recognize multiply and add *) - | (Iintop Iadd, [Cop(Cmuli, args, _); arg3]) - | (Iintop Iadd, [arg3; Cop(Cmuli, args, _)]) as op_args -> - begin match self#select_operation Cmuli args dbg with - (Iintop Imul, [arg1; arg2]) -> - (Ispecific Imuladd, [arg1; arg2; arg3]) - | _ -> op_args - end - (* Recognize multiply and subtract *) - | (Iintop Isub, [arg3; Cop(Cmuli, args, _)]) as op_args - when !arch > ARMv6 -> - begin match self#select_operation Cmuli args dbg with - (Iintop Imul, [arg1; arg2]) -> - (Ispecific Imulsub, [arg1; arg2; arg3]) - | _ -> op_args - end - | op_args -> op_args - end - -method private iextcall func ty_res ty_args = - Iextcall { func; ty_res; ty_args; alloc = false; } - -method! select_operation op args dbg = - match (op, args) with - (* Recognize special forms of add immediate / sub immediate *) - | ((Caddv | Cadda | Caddi), [arg; Cconst_int (n, _)]) - when n < 0 && Arch.is_immediate (Int32.of_int (-n)) -> - (Iintop_imm(Isub, -n), [arg]) - | (Csubi, [arg; Cconst_int (n, _)]) - when n < 0 && Arch.is_immediate (Int32.of_int (-n)) -> - (Iintop_imm(Iadd, -n), [arg]) - | (Csubi, [Cconst_int (n, _); arg]) - when Arch.is_immediate (Int32.of_int n) -> - (Ispecific(Irevsubimm n), [arg]) - (* Recognize special shift arithmetic *) - | ((Caddv | Cadda | Caddi as op), args) -> - self#select_shift_arith op dbg Ishiftadd Ishiftadd args - | (Csubi as op, args) -> - self#select_shift_arith op dbg Ishiftsub Ishiftsubrev args - | (Cand as op, args) -> - self#select_shift_arith op dbg Ishiftand Ishiftand args - | (Cor as op, args) -> - self#select_shift_arith op dbg Ishiftor Ishiftor args - | (Cxor as op, args) -> - self#select_shift_arith op dbg Ishiftxor Ishiftxor args - | (Ccheckbound, - [Cop(Clsl | Clsr | Casr as op, [arg1; Cconst_int (n, _)], _); arg2]) - when n > 0 && n < 32 -> - (Ispecific(Ishiftcheckbound(select_shiftop op, n)), [arg1; arg2]) - (* Turn integer division/modulus into runtime ABI calls *) - | (Cdivi, args) -> - (self#iextcall "__aeabi_idiv" typ_int [], args) - | (Cmodi, args) -> - (* See above for fix up of return register *) - (self#iextcall "__aeabi_idivmod" typ_int [], args) - (* Recognize 16-bit bswap instruction (ARMv6T2 because we need movt) *) - | (Cextcall("caml_bswap16_direct", _, _, _), args) when !arch >= ARMv6T2 -> - (Ispecific(Ibswap 16), args) - (* Recognize 32-bit bswap instructions (ARMv6 and above) *) - | (Cextcall("caml_int32_direct_bswap", _, _, _), args) - when !arch >= ARMv6 -> - (Ispecific(Ibswap 32), args) - (* Turn floating-point operations into runtime ABI calls for softfp *) - | (op, args) when !fpu = Soft -> self#select_operation_softfp op args dbg - (* Select operations for VFPv{2,3} *) - | (op, args) -> self#select_operation_vfpv3 op args dbg - -method private select_operation_softfp op args dbg = - match (op, args) with - (* Turn floating-point operations into runtime ABI calls *) - | (Caddf, args) -> - (self#iextcall "__aeabi_dadd" typ_float [XFloat;XFloat], args) - | (Csubf, args) -> - (self#iextcall "__aeabi_dsub" typ_float [XFloat;XFloat], args) - | (Cmulf, args) -> - (self#iextcall "__aeabi_dmul" typ_float [XFloat;XFloat], args) - | (Cdivf, args) -> - (self#iextcall "__aeabi_ddiv" typ_float [XFloat;XFloat], args) - | (Cfloatofint, args) -> - (self#iextcall "__aeabi_i2d" typ_float [XInt], args) - | (Cintoffloat, args) -> - (self#iextcall "__aeabi_d2iz" typ_int [XFloat], args) - | (Ccmpf comp, args) -> - let comp, func = - match comp with - | CFeq -> Cne, "__aeabi_dcmpeq" - | CFneq -> Ceq, "__aeabi_dcmpeq" - | CFlt -> Cne, "__aeabi_dcmplt" - | CFnlt -> Ceq, "__aeabi_dcmplt" - | CFle -> Cne, "__aeabi_dcmple" - | CFnle -> Ceq, "__aeabi_dcmple" - | CFgt -> Cne, "__aeabi_dcmpgt" - | CFngt -> Ceq, "__aeabi_dcmpgt" - | CFge -> Cne, "__aeabi_dcmpge" - | CFnge -> Ceq, "__aeabi_dcmpge" - in - (Iintop_imm(Icomp(Iunsigned comp), 0), - [Cop(Cextcall(func, typ_int, [XFloat;XFloat], false), - args, dbg)]) - (* Add coercions around loads and stores of 32-bit floats *) - | (Cload (Single, mut), args) -> - (self#iextcall "__aeabi_f2d" typ_float [XInt], - [Cop(Cload (Word_int, mut), args, dbg)]) - | (Cstore (Single, init), [arg1; arg2]) -> - let arg2' = - Cop(Cextcall("__aeabi_d2f", typ_int, [XFloat], false), - [arg2], dbg) in - self#select_operation (Cstore (Word_int, init)) [arg1; arg2'] dbg - (* Other operations are regular *) - | (op, args) -> super#select_operation op args dbg - -method private select_operation_vfpv3 op args dbg = - match (op, args) with - (* Recognize floating-point negate and multiply *) - (Cnegf, [Cop(Cmulf, args, _)]) -> - (Ispecific Inegmulf, args) - (* Recognize floating-point multiply and add *) - | (Caddf, [arg; Cop(Cmulf, args, _)]) - | (Caddf, [Cop(Cmulf, args, _); arg]) -> - (Ispecific Imuladdf, arg :: args) - (* Recognize floating-point negate, multiply and subtract *) - | (Csubf, [Cop(Cnegf, [arg], _); Cop(Cmulf, args, _)]) - | (Csubf, [Cop(Cnegf, [Cop(Cmulf, args, _)], _); arg]) -> - (Ispecific Inegmulsubf, arg :: args) - (* Recognize floating-point negate, multiply and add *) - | (Csubf, [arg; Cop(Cmulf, args, _)]) -> - (Ispecific Inegmuladdf, arg :: args) - (* Recognize multiply and subtract *) - | (Csubf, [Cop(Cmulf, args, _); arg]) -> - (Ispecific Imulsubf, arg :: args) - (* Recognize floating-point square root *) - | (Cextcall("sqrt", _, _, false), args) -> - (Ispecific Isqrtf, args) - (* Other operations are regular *) - | (op, args) -> super#select_operation op args dbg - -method! select_condition = function - (* Turn floating-point comparisons into runtime ABI calls *) - Cop(Ccmpf _ as op, args, dbg) when !fpu = Soft -> - begin match self#select_operation_softfp op args dbg with - (Iintop_imm(Icomp(Iunsigned Ceq), 0), [arg]) -> (Ifalsetest, arg) - | (Iintop_imm(Icomp(Iunsigned Cne), 0), [arg]) -> (Itruetest, arg) - | _ -> assert false - end - | expr -> - super#select_condition expr - -(* Deal with some register constraints *) - -method! insert_op_debug env op dbg rs rd = - try - let (rsrc, rdst) = pseudoregs_for_operation op rs rd in - self#insert_moves env rs rsrc; - self#insert_debug env (Iop op) dbg rsrc rdst; - self#insert_moves env rdst rd; - rd - with Use_default -> - super#insert_op_debug env op dbg rs rd - -end - -let fundecl ~future_funcnames f = - (new selector)#emit_fundecl ~future_funcnames f diff --git a/asmcomp/arm64/CSE.ml b/asmcomp/arm64/CSE.ml index 411e9ed4..708e3774 100644 --- a/asmcomp/arm64/CSE.ml +++ b/asmcomp/arm64/CSE.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/arm64/CSE.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/arm64/arch.ml b/asmcomp/arm64/arch.ml index b1a7c4d1..a46d59d9 100644 --- a/asmcomp/arm64/arch.ml +++ b/asmcomp/arm64/arch.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/arm64/arch.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/arm64/arch.mli b/asmcomp/arm64/arch.mli new file mode 100644 index 00000000..a84b5427 --- /dev/null +++ b/asmcomp/arm64/arch.mli @@ -0,0 +1,109 @@ +# 2 "asmcomp/arm64/arch.mli" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Benedikt Meurer, University of Siegen *) +(* *) +(* Copyright 2013 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2012 Benedikt Meurer. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Specific operations for the ARM processor, 64-bit mode *) + +val macosx : bool + +(* Machine-specific command-line options *) + +val command_line_options : (string * Arg.spec * string) list + +(* Addressing modes *) + +type addressing_mode = + | Iindexed of int (* reg + displ *) + | Ibased of string * int (* global var + displ *) + +(* We do not support the reg + shifted reg addressing mode, because + what we really need is reg + shifted reg + displ, + and this is decomposed in two instructions (reg + shifted reg -> tmp, + then addressing tmp + displ). *) + +(* Specific operations *) + +type cmm_label = int + (* Do not introduce a dependency to Cmm *) + +type specific_operation = + | Ifar_poll of { return_label: cmm_label option } + | Ifar_alloc of { bytes : int; dbginfo : Debuginfo.alloc_dbginfo } + | Ifar_intop_checkbound + | Ifar_intop_imm_checkbound of { bound : int; } + | Ishiftarith of arith_operation * int + | Ishiftcheckbound of { shift : int; } + | Ifar_shiftcheckbound of { shift : int; } + | Imuladd (* multiply and add *) + | Imulsub (* multiply and subtract *) + | Inegmulf (* floating-point negate and multiply *) + | Imuladdf (* floating-point multiply and add *) + | Inegmuladdf (* floating-point negate, multiply and add *) + | Imulsubf (* floating-point multiply and subtract *) + | Inegmulsubf (* floating-point negate, multiply and subtract *) + | Isqrtf (* floating-point square root *) + | Ibswap of int (* endianness conversion *) + | Imove32 (* 32-bit integer move *) + | Isignext of int (* sign extension *) + +and arith_operation = + Ishiftadd + | Ishiftsub + +(* Sizes, endianness *) + +val big_endian : bool + +val size_addr : int + +val size_int : int + +val size_float : int + +val allow_unaligned_access : bool + +(* Behavior of division *) + +val division_crashes_on_overflow : bool + +(* Operations on addressing modes *) + +val identity_addressing : addressing_mode + +val offset_addressing : addressing_mode -> int -> addressing_mode + +val num_args_addressing : addressing_mode -> int + +(* Printing operations and addressing modes *) + +val print_addressing : + (Format.formatter -> 'a -> unit) -> addressing_mode -> + Format.formatter -> 'a array -> unit + +val print_specific_operation : + (Format.formatter -> 'a -> unit) -> specific_operation -> + Format.formatter -> 'a array -> unit + +val is_logical_immediate : nativeint -> bool + +(* Specific operations that are pure *) + +val operation_is_pure : specific_operation -> bool + +(* Specific operations that can raise *) + +val operation_can_raise : specific_operation -> bool diff --git a/asmcomp/arm64/emit.mlp b/asmcomp/arm64/emit.mlp index d3012f3b..1816f8c3 100644 --- a/asmcomp/arm64/emit.mlp +++ b/asmcomp/arm64/emit.mlp @@ -1,4 +1,3 @@ -#2 "asmcomp/arm64/emit.mlp" (**************************************************************************) (* *) (* OCaml *) @@ -35,6 +34,8 @@ let reg_trap_ptr = phys_reg 23 (* x26 *) let reg_alloc_ptr = phys_reg 24 (* x27 *) let reg_tmp1 = phys_reg 26 (* x16 *) let reg_x8 = phys_reg 8 (* x8 *) +let reg_stack_arg_begin = phys_reg 17 (* x20 *) +let reg_stack_arg_end = phys_reg 18 (* x21 *) (* Output a label *) @@ -48,7 +49,7 @@ let emit_label lbl = let emit_symbol s = if macosx then emit_string "_"; - Emitaux.emit_symbol '$' s + Emitaux.emit_symbol s (* Object types *) @@ -84,7 +85,7 @@ let emit_wreg = function let initial_stack_offset f = 8 * f.fun_num_stack_slots.(0) + 8 * f.fun_num_stack_slots.(1) + - (if f.fun_contains_calls then 8 else 0) + (if f.fun_frame_required then 8 else 0) let frame_size env = let sz = @@ -273,7 +274,7 @@ let emit_stack_adjustment n = let output_epilogue env f = let n = frame_size env in - if env.f.fun_contains_calls then + if env.f.fun_frame_required then ` ldr x30, [sp, #{emit_int (n-8)}]\n`; if n > 0 then emit_stack_adjustment n; @@ -442,10 +443,10 @@ module BR = Branch_relaxation.Make (struct let prologue_size f = (if initial_stack_offset f > 0 then 2 else 0) - + (if f.fun_contains_calls then 1 else 0) + + (if f.fun_frame_required then 1 else 0) let epilogue_size f = - if f.fun_contains_calls then 3 else 2 + if f.fun_frame_required then 3 else 2 let instr_size f = function | Lend -> 0 @@ -460,12 +461,24 @@ module BR = Branch_relaxation.Make (struct | Lop (Itailcall_ind) -> epilogue_size f | Lop (Itailcall_imm { func; _ }) -> if func = f.fun_name then 1 else epilogue_size f - | Lop (Iextcall { alloc = false; }) -> 1 - | Lop (Iextcall { alloc = true; }) -> 3 + | Lop (Iextcall {alloc; stack_ofs} ) -> + if stack_ofs > 0 then 5 + else if alloc then 3 + else 5 | Lop (Istackoffset _) -> 2 - | Lop (Iload (size, addr, _)) | Lop (Istore (size, addr, _)) -> - let based = match addr with Iindexed _ -> 0 | Ibased _ -> 1 in - based + begin match size with Single -> 2 | _ -> 1 end + | Lop (Iload { memory_chunk; addressing_mode; is_atomic }) -> + let based = match addressing_mode with Iindexed _ -> 0 | Ibased _ -> 1 + and barrier = if is_atomic then 1 else 0 + and single = match memory_chunk with Single -> 2 | _ -> 1 in + based + barrier + single + | Lop (Istore (memory_chunk, addressing_mode, assignment)) -> + let based = match addressing_mode with Iindexed _ -> 0 | Ibased _ -> 1 + and barrier = + match memory_chunk, assignment with + | (Word_int | Word_val), true -> 1 + | _ -> 0 + and single = match memory_chunk with Single -> 2 | _ -> 1 in + based + barrier + single | Lop (Ialloc _) when f.fun_fast -> 5 | Lop (Ispecific (Ifar_alloc _)) when f.fun_fast -> 6 | Lop (Ipoll _) -> 3 @@ -477,6 +490,7 @@ module BR = Branch_relaxation.Make (struct | _ -> 1 + num_instructions_for_intconst (Nativeint.of_int num_bytes) end | Lop (Iintop (Icomp _)) -> 2 + | Lop (Icompf _) -> 2 | Lop (Iintop_imm (Icomp _, _)) -> 2 | Lop (Iintop (Icheckbound)) -> 2 | Lop (Ispecific (Ifar_intop_checkbound)) -> 3 @@ -498,6 +512,8 @@ module BR = Branch_relaxation.Make (struct | Lop (Ispecific (Ibswap _)) -> 1 | Lop (Ispecific Imove32) -> 1 | Lop (Ispecific (Isignext _)) -> 1 + | Lop (Idls_get) -> 1 + | Lop (Ireturn_addr) -> 1 | Lreloadretaddr -> 0 | Lreturn -> epilogue_size f | Llabel _ -> 0 @@ -523,7 +539,7 @@ module BR = Branch_relaxation.Make (struct | Lpoptrap -> 1 | Lraise k -> begin match k with - | Lambda.Raise_regular -> 2 + | Lambda.Raise_regular -> 1 | Lambda.Raise_reraise -> 1 | Lambda.Raise_notrace -> 4 end @@ -642,6 +658,19 @@ let emit_load_literal dst lbl = ` ldr {emit_reg dst}, [{emit_reg reg_tmp1}, #:lo12:{emit_label lbl}]\n` end + +let name_for_float_comparison = function + | CFeq -> "eq" + | CFneq -> "ne" + | CFlt -> "cc" + | CFnlt -> "cs" + | CFle -> "ls" + | CFnle -> "hi" + | CFgt -> "gt" + | CFngt -> "le" + | CFge -> "ge" + | CFnge -> "lt" + (* Output the assembly code for an instruction *) let emit_instr env i = @@ -649,11 +678,10 @@ let emit_instr env i = match i.desc with | Lend -> () | Lprologue -> - assert (env.f.fun_prologue_required); let n = frame_size env in if n > 0 then emit_stack_adjustment (-n); - if env.f.fun_contains_calls then begin + if env.f.fun_frame_required then begin cfi_offset ~reg:30 (* return address *) ~offset:(-8); ` str x30, [sp, #{emit_int (n-8)}]\n` end @@ -711,45 +739,75 @@ let emit_instr env i = ` b {emit_label env.f.fun_tailrec_entry_point_label}\n` else output_epilogue env (fun () -> ` b {emit_symbol func}\n`) - | Lop(Iextcall { func; alloc = false; }) -> - ` bl {emit_symbol func}\n` - | Lop(Iextcall { func; alloc = true; }) -> - emit_load_symbol_addr reg_x8 func; - ` bl {emit_symbol "caml_c_call"}\n`; - `{record_frame env i.live (Dbg_other i.dbg)}\n` + | Lop(Iextcall {func; alloc; stack_ofs}) -> + if stack_ofs > 0 then begin + ` mov {emit_reg reg_stack_arg_begin}, sp\n`; + ` add {emit_reg reg_stack_arg_end}, sp, #{emit_int (Misc.align stack_ofs 16)}\n`; + emit_load_symbol_addr reg_x8 func; + ` bl {emit_symbol "caml_c_call_stack_args"}\n`; + `{record_frame env i.live (Dbg_other i.dbg)}\n` + end else if alloc then begin + emit_load_symbol_addr reg_x8 func; + ` bl {emit_symbol "caml_c_call"}\n`; + `{record_frame env i.live (Dbg_other i.dbg)}\n` + end else begin + (* Push frame pointer (x29) onto stack and restore later. *) + ` str x29, [sp, -16]!\n`; + (* Store OCaml stack in the frame pointer register. *) + ` mov x29, sp\n`; + cfi_remember_state (); + cfi_def_cfa_register ~reg:29; + let offset = Domainstate.(idx_of_field Domain_c_stack) * 8 in + ` ldr {emit_reg reg_tmp1}, [{emit_reg reg_domain_state_ptr}, {emit_int offset}]\n`; + ` mov sp, {emit_reg reg_tmp1}\n`; + ` bl {emit_symbol func}\n`; + ` mov sp, x29\n`; + ` ldr x29, [sp], 16\n`; + cfi_restore_state () + end | Lop(Istackoffset n) -> assert (n mod 16 = 0); emit_stack_adjustment (-n); env.stack_offset <- env.stack_offset + n - | Lop(Iload(size, addr, _mut)) -> + | Lop(Iload { memory_chunk; addressing_mode; is_atomic }) -> + assert(memory_chunk = Word_int || memory_chunk = Word_val || is_atomic = false); let dst = i.res.(0) in let base = - match addr with + match addressing_mode with | Iindexed _ -> i.arg.(0) | Ibased(s, ofs) -> assert (not !Clflags.dlcode); (* see selection.ml *) ` adrp {emit_reg reg_tmp1}, {emit_symbol_offset s ofs}\n`; reg_tmp1 in - begin match size with + begin match memory_chunk with | Byte_unsigned -> - ` ldrb {emit_wreg dst}, {emit_addressing addr base}\n` + ` ldrb {emit_wreg dst}, {emit_addressing addressing_mode base}\n` | Byte_signed -> - ` ldrsb {emit_reg dst}, {emit_addressing addr base}\n` + ` ldrsb {emit_reg dst}, {emit_addressing addressing_mode base}\n` | Sixteen_unsigned -> - ` ldrh {emit_wreg dst}, {emit_addressing addr base}\n` + ` ldrh {emit_wreg dst}, {emit_addressing addressing_mode base}\n` | Sixteen_signed -> - ` ldrsh {emit_reg dst}, {emit_addressing addr base}\n` + ` ldrsh {emit_reg dst}, {emit_addressing addressing_mode base}\n` | Thirtytwo_unsigned -> - ` ldr {emit_wreg dst}, {emit_addressing addr base}\n` + ` ldr {emit_wreg dst}, {emit_addressing addressing_mode base}\n` | Thirtytwo_signed -> - ` ldrsw {emit_reg dst}, {emit_addressing addr base}\n` + ` ldrsw {emit_reg dst}, {emit_addressing addressing_mode base}\n` | Single -> - ` ldr s7, {emit_addressing addr base}\n`; + ` ldr s7, {emit_addressing addressing_mode base}\n`; ` fcvt {emit_reg dst}, s7\n` - | Word_int | Word_val | Double -> - ` ldr {emit_reg dst}, {emit_addressing addr base}\n` + | Word_int | Word_val -> + if is_atomic then begin + assert (addressing_mode = Iindexed 0); + ` dmb ishld\n`; + ` ldar {emit_reg dst}, [{emit_reg i.arg.(0)}]\n` + end else + ` ldr {emit_reg dst}, {emit_addressing addressing_mode base}\n` + | Double -> + ` ldr {emit_reg dst}, {emit_addressing addressing_mode base}\n` end - | Lop(Istore(size, addr, _)) -> + | Lop(Istore(size, addr, assignment)) -> + (* NB: assignments other than Word_int and Word_val do not follow the + Multicore OCaml memory model and so do not emit a barrier *) let src = i.arg.(0) in let base = match addr with @@ -768,7 +826,11 @@ let emit_instr env i = | Single -> ` fcvt s7, {emit_reg src}\n`; ` str s7, {emit_addressing addr base}\n`; - | Word_int | Word_val | Double -> + | Word_int | Word_val -> + (* memory model barrier for non-initializing store *) + if assignment then ` dmb ishld\n`; + ` str {emit_reg src}, {emit_addressing addr base}\n` + | Double -> ` str {emit_reg src}, {emit_addressing addr base}\n` end | Lop(Ialloc { bytes = n; dbginfo }) -> @@ -786,6 +848,10 @@ let emit_instr env i = | Lop(Iintop(Icomp cmp)) -> ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; ` cset {emit_reg i.res.(0)}, {emit_string (name_for_comparison cmp)}\n` + | Lop(Icompf cmp) -> + let comp = name_for_float_comparison cmp in + ` fcmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` cset {emit_reg i.res.(0)}, {emit_string comp}\n` | Lop(Iintop_imm(Icomp cmp, n)) -> emit_cmpimm i.arg.(0) n; ` cset {emit_reg i.res.(0)}, {emit_string (name_for_comparison cmp)}\n` @@ -830,10 +896,10 @@ let emit_instr env i = ` smulh {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` | Lop(Iintop op) -> let instr = name_for_int_operation op in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` + ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` | Lop(Iintop_imm(op, n)) -> let instr = name_for_int_operation op in - ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, #{emit_int n}\n` + ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, #{emit_int n}\n` | Lop(Ifloatofint | Iintoffloat | Iabsf | Inegf | Ispecific Isqrtf as op) -> let instr = (match op with | Ifloatofint -> "scvtf" @@ -890,6 +956,15 @@ let emit_instr env i = end | Lop(Ispecific(Isignext size)) -> ` sbfm {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, #0, #{emit_int (size - 1)}\n` + | Lop(Idls_get) -> + let offset = Domainstate.(idx_of_field Domain_dls_root) * 8 in + ` ldr {emit_reg i.res.(0)}, [{emit_reg reg_domain_state_ptr}, {emit_int offset}]\n` + | Lop(Ireturn_addr) -> + let n = frame_size env in + if env.f.fun_frame_required then + ` ldr {emit_reg i.res.(0)}, [sp, #{emit_int (n-8)}]\n` + else + ` mov {emit_reg i.res.(0)}, x30\n` | Lreloadretaddr -> () | Lreturn -> @@ -913,19 +988,7 @@ let emit_instr env i = let comp = name_for_comparison cmp in ` b.{emit_string comp} {emit_label lbl}\n` | Ifloattest cmp -> - let comp = - match cmp with - | CFeq -> "eq" - | CFneq -> "ne" - | CFlt -> "cc" - | CFnlt -> "cs" - | CFle -> "ls" - | CFnle -> "hi" - | CFgt -> "gt" - | CFngt -> "le" - | CFge -> "ge" - | CFnge -> "lt" - in + let comp = name_for_float_comparison cmp in ` fcmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; ` b.{emit_string comp} {emit_label lbl}\n` | Ioddtest -> @@ -988,12 +1051,10 @@ let emit_instr env i = | Lraise k -> begin match k with | Lambda.Raise_regular -> - let offset = Domainstate.(idx_of_field Domain_backtrace_pos) * 8 in - ` str xzr, [{emit_reg reg_domain_state_ptr}, {emit_int offset}]\n`; ` bl {emit_symbol "caml_raise_exn"}\n`; `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_reraise -> - ` bl {emit_symbol "caml_raise_exn"}\n`; + ` bl {emit_symbol "caml_reraise_exn"}\n`; `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_notrace -> ` mov sp, {emit_reg reg_trap_ptr}\n`; @@ -1015,22 +1076,55 @@ let fundecl fundecl = ` .align 3\n`; ` .globl {emit_symbol fundecl.fun_name}\n`; emit_symbol_type emit_symbol fundecl.fun_name "function"; + (* Dynamic stack checking *) + let stack_threshold_size = Config.stack_threshold * 8 in (* bytes *) + let max_frame_size = frame_size env + fundecl.fun_extra_stack_used in + let handle_overflow, stack_check_size = + if fundecl.fun_contains_nontail_calls + || max_frame_size >= stack_threshold_size then begin + let overflow = new_label () in + `{emit_label overflow}:\n`; + (* Pass the desired frame size on the stack, since all of the + argument-passing registers may be in use. *) + let s = (Config.stack_threshold + max_frame_size / 8) in + ` mov {emit_reg reg_tmp1}, #{emit_int s}\n`; + ` stp {emit_reg reg_tmp1}, x30, [sp, #-16]!\n`; + ` bl {emit_symbol "caml_call_realloc_stack"}\n`; + ` ldp {emit_reg reg_tmp1}, x30, [sp], #16\n`; + (* fall through function entry point *) + Some overflow, 5 + end else + None, 0 in `{emit_symbol fundecl.fun_name}:\n`; emit_debug_info fundecl.fun_dbg; cfi_startproc(); + begin match handle_overflow with + | None -> () + | Some overflow -> + let threshold_offset = Domainstate.stack_ctx_words * 8 + stack_threshold_size in + let f = max_frame_size + threshold_offset in + let offset = Domainstate.(idx_of_field Domain_current_stack) * 8 in + ` ldr {emit_reg reg_tmp1}, [{emit_reg reg_domain_state_ptr}, #{emit_int offset}]\n`; + emit_addimm reg_tmp1 reg_tmp1 f; + ` cmp sp, {emit_reg reg_tmp1}\n`; + ` bcc {emit_label overflow}\n` + end; let num_call_gc, num_check_bound = num_call_gc_and_check_bound_points env in let max_out_of_line_code_offset = - max_out_of_line_code_offset ~num_call_gc - ~num_check_bound + stack_check_size + + max_out_of_line_code_offset ~num_call_gc ~num_check_bound in + BR.relax fundecl ~max_out_of_line_code_offset; + emit_all env fundecl.fun_body; List.iter emit_call_gc env.call_gc_sites; List.iter emit_call_bound_error env.bound_error_sites; assert (List.length env.call_gc_sites = num_call_gc); assert (List.length env.bound_error_sites = num_check_bound); + cfi_endproc(); emit_symbol_type emit_symbol fundecl.fun_name "function"; emit_symbol_size fundecl.fun_name; @@ -1062,7 +1156,7 @@ let emit_item = function let data l = ` .data\n`; - ` .align 3\n`; + ` .align 3\n`; List.iter emit_item l (* Beginning / end of an assembly file *) @@ -1077,7 +1171,17 @@ let begin_assembly() = let lbl_begin = Compilenv.make_symbol (Some "code_begin") in emit_named_text_section lbl_begin; ` .globl {emit_symbol lbl_begin}\n`; - `{emit_symbol lbl_begin}:\n` + `{emit_symbol lbl_begin}:\n`; + (* we need to pad here to avoid collision for the unwind test between + the code_begin symbol and the first function. (See also #4690) + Alignment is needed to avoid linker warnings for + shared_startup__code_{begin,end} (e.g. tests/lib-dynlink-pr4839). + *) + if macosx then begin + ` nop\n`; + ` .align 3\n` + end; + () let end_assembly () = let lbl_end = Compilenv.make_symbol (Some "code_end") in diff --git a/asmcomp/arm64/proc.ml b/asmcomp/arm64/proc.ml index 4a921875..40fb6fb0 100644 --- a/asmcomp/arm64/proc.ml +++ b/asmcomp/arm64/proc.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/arm64/proc.ml" (**************************************************************************) (* *) (* OCaml *) @@ -248,13 +249,9 @@ let dwarf_register_numbers ~reg_class = let stack_ptr_dwarf_register_number = 31 -(* Volatile registers: none *) - -let regs_are_volatile _rs = false - (* Registers destroyed by operations *) -let destroyed_at_c_call = +let destroyed_at_c_noalloc_call = (* x19-x28, d8-d15 preserved *) Array.of_list (List.map phys_reg [0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15; @@ -263,14 +260,16 @@ let destroyed_at_c_call = 124;125;126;127;128;129;130;131]) let destroyed_at_oper = function - | Iop(Icall_ind | Icall_imm _) | Iop(Iextcall { alloc = true; }) -> + | Iop(Icall_ind | Icall_imm _) -> all_phys_regs - | Iop(Iextcall { alloc = false; }) -> - destroyed_at_c_call + | Iop(Iextcall {alloc; stack_ofs; }) -> + assert (stack_ofs >= 0); + if alloc || stack_ofs > 0 then all_phys_regs + else destroyed_at_c_noalloc_call | Iop(Ialloc _) | Iop(Ipoll _) -> [| reg_x8 |] | Iop( Iintoffloat | Ifloatofint - | Iload(Single, _, _) | Istore(Single, _, _)) -> + | Iload{memory_chunk=Single; _} | Istore(Single, _, _)) -> [| reg_d7 |] (* d7 / s7 destroyed *) | _ -> [||] @@ -289,18 +288,9 @@ let max_register_pressure = function | Iextcall _ -> [| 7; 8 |] (* 7 integer callee-saves, 8 FP callee-saves *) | Ialloc _ | Ipoll _ -> [| 22; 32 |] | Iintoffloat | Ifloatofint - | Iload(Single, _, _) | Istore(Single, _, _) -> [| 23; 31 |] + | Iload{memory_chunk=Single; _} | Istore(Single, _, _) -> [| 23; 31 |] | _ -> [| 23; 32 |] -(* Layout of the stack *) -let frame_required fd = - fd.fun_contains_calls - || fd.fun_num_stack_slots.(0) > 0 - || fd.fun_num_stack_slots.(1) > 0 - -let prologue_required fd = - frame_required fd - (* Calling the assembler *) let assemble_file infile outfile = diff --git a/asmcomp/arm64/reload.ml b/asmcomp/arm64/reload.ml index 7d27e076..945bdd4a 100644 --- a/asmcomp/arm64/reload.ml +++ b/asmcomp/arm64/reload.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/arm64/reload.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/arm64/scheduling.ml b/asmcomp/arm64/scheduling.ml index 86a3c616..0f99c702 100644 --- a/asmcomp/arm64/scheduling.ml +++ b/asmcomp/arm64/scheduling.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/arm64/scheduling.ml" (**************************************************************************) (* *) (* OCaml *) @@ -13,7 +14,15 @@ (* *) (**************************************************************************) -open! Schedgen (* to create a dependency *) +(* The "open!" directive below is necessary because, although + this module does not actually depend on Schedgen in this backend, the + dependency exists in other backends and our build system requires + that all the backends have the same dependencies. + We thus have to use "open!" and disable the corresponding warning + only for this compilation unit. +*) + +open! Schedgen [@@warning "-66"] (* Scheduling is turned off because the processor schedules dynamically much better than what we could do. *) diff --git a/asmcomp/arm64/selection.ml b/asmcomp/arm64/selection.ml index 7e46a621..b6ecfd9f 100644 --- a/asmcomp/arm64/selection.ml +++ b/asmcomp/arm64/selection.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/arm64/selection.ml" (**************************************************************************) (* *) (* OCaml *) @@ -168,6 +169,11 @@ method! select_operation op args dbg = (Ispecific (Isignext (64 - n)), [k]) | _ -> super#select_operation op args dbg end + (* Use trivial addressing mode for atomic loads *) + | Cload {memory_chunk; mutability; is_atomic = true} -> + (Iload {memory_chunk; addressing_mode = Iindexed 0; + mutability; is_atomic = true}, + args) (* Recognize floating-point negate and multiply *) | Cnegf -> begin match args with diff --git a/asmcomp/arm64/stackframe.ml b/asmcomp/arm64/stackframe.ml new file mode 100644 index 00000000..d165a207 --- /dev/null +++ b/asmcomp/arm64/stackframe.ml @@ -0,0 +1,32 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +open! Mach [@@warning "-66"] + +let trap_handler_size = 16 + +class stackframe = object + +inherit Stackframegen.stackframe_generic + +method trap_handler_size = trap_handler_size + +end + +let analyze f = + (new stackframe)#analyze f diff --git a/asmcomp/asmgen.ml b/asmcomp/asmgen.ml index 269711bc..ffdac2ac 100644 --- a/asmcomp/asmgen.ml +++ b/asmcomp/asmgen.ml @@ -113,9 +113,9 @@ let rec regalloc ~ppf_dump round fd = let num_stack_slots = if !use_linscan then begin (* Linear Scan *) - Interval.build_intervals fd; - if !dump_interval then Printmach.intervals ppf_dump (); - Linscan.allocate_registers() + let intervals = Interval.build_intervals fd in + if !dump_interval then Printmach.intervals ppf_dump intervals; + Linscan.allocate_registers intervals end else begin (* Graph Coloring *) Interf.build_graph fd; @@ -212,6 +212,11 @@ let compile_unit ~output_prefix ~asm_filename ~keep_asm ~obj_filename gen = let create_asm = should_emit () && (keep_asm || not !Emitaux.binary_backend_available) in Emitaux.create_asm_file := create_asm; + let remove_asm_file () = + (* if [should_emit ()] is [false] then no assembly is generated, + so the (empty) temporary file should be deleted. *) + if not create_asm || not keep_asm then remove_file asm_filename + in Misc.try_finally ~exceptionally:(fun () -> remove_file obj_filename) (fun () -> @@ -222,8 +227,7 @@ let compile_unit ~output_prefix ~asm_filename ~keep_asm ~obj_filename gen = write_linear output_prefix) ~always:(fun () -> if create_asm then close_out !Emitaux.output_channel) - ~exceptionally:(fun () -> - if create_asm && not keep_asm then remove_file asm_filename); + ~exceptionally:remove_asm_file; if should_emit () then begin let assemble_result = Profile.record "assemble" @@ -232,7 +236,7 @@ let compile_unit ~output_prefix ~asm_filename ~keep_asm ~obj_filename gen = if assemble_result <> 0 then raise(Error(Assembler_error asm_filename)); end; - if create_asm && not keep_asm then remove_file asm_filename + remove_asm_file () ) let end_gen_implementation ?toplevel ~ppf_dump @@ -296,14 +300,16 @@ let linear_gen_implementation filename = Profile.record "Emit" (List.iter emit_item) linear_unit_info.items; emit_end_assembly () -let compile_implementation_linear output_prefix ~progname = +let compile_implementation_linear target = + let output_prefix = Unit_info.prefix target in compile_unit ~output_prefix ~asm_filename:(asm_filename output_prefix) ~keep_asm:!keep_asm_file ~obj_filename:(output_prefix ^ ext_obj) (fun () -> - linear_gen_implementation progname) + linear_gen_implementation (Unit_info.source_file target)) (* Error report *) +module Style = Misc.Style let report_error ppf = function | Assembler_error file -> @@ -311,16 +317,16 @@ let report_error ppf = function Location.print_filename file | Mismatched_for_pack saved -> let msg = function - | None -> "without -for-pack" - | Some s -> "with -for-pack "^s + | None -> Format.dprintf "without %a" Style.inline_code "-for-pack" + | Some s -> Format.dprintf "with %a" Style.inline_code ("-for-pack " ^ s) in fprintf ppf - "This input file cannot be compiled %s: it was generated %s." + "This input file cannot be compiled %t: it was generated %t." (msg !Clflags.for_package) (msg saved) | Asm_generation(fn, err) -> fprintf ppf - "Error producing assembly code for function %s: %a" - fn Emitaux.report_error err + "Error producing assembly code for function %a: %a" + Style.inline_code fn Emitaux.report_error err let () = Location.register_error_of_exn diff --git a/asmcomp/asmgen.mli b/asmcomp/asmgen.mli index e7e280c9..12440893 100644 --- a/asmcomp/asmgen.mli +++ b/asmcomp/asmgen.mli @@ -34,7 +34,7 @@ val compile_implementation -> unit val compile_implementation_linear : - string -> progname:string -> unit + Unit_info.t -> unit val compile_phrase : ppf_dump:Format.formatter -> Cmm.phrase -> unit diff --git a/asmcomp/asmlibrarian.ml b/asmcomp/asmlibrarian.ml index ba1d06b2..72a03035 100644 --- a/asmcomp/asmlibrarian.ml +++ b/asmcomp/asmlibrarian.ml @@ -69,13 +69,14 @@ let create_archive file_list lib_name = then raise(Error(Archiver_error archive_name)); ) +module Style = Misc.Style open Format let report_error ppf = function | File_not_found name -> - fprintf ppf "Cannot find file %s" name + fprintf ppf "Cannot find file %a" Style.inline_code name | Archiver_error name -> - fprintf ppf "Error while creating the library %s" name + fprintf ppf "Error while creating the library %a" Style.inline_code name let () = Location.register_error_of_exn diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml index d9b5753d..2e10f823 100644 --- a/asmcomp/asmlink.ml +++ b/asmcomp/asmlink.ml @@ -48,16 +48,18 @@ let implementations_defined = ref ([] : (string * string) list) let cmx_required = ref ([] : string list) let check_consistency file_name unit crc = + begin try + let source = List.assoc unit.ui_name !implementations_defined in + raise (Error(Multiple_definition(unit.ui_name, file_name, source))) + with Not_found -> () + end; begin try List.iter (fun (name, crco) -> interfaces := name :: !interfaces; match crco with None -> () - | Some crc -> - if name = unit.ui_name - then Cmi_consistbl.set crc_interfaces name crc file_name - else Cmi_consistbl.check crc_interfaces name crc file_name) + | Some crc -> Cmi_consistbl.check crc_interfaces name crc file_name) unit.ui_imports_cmi with Cmi_consistbl.Inconsistency { unit_name = name; @@ -84,13 +86,8 @@ let check_consistency file_name unit crc = } -> raise(Error(Inconsistent_implementation(name, user, auth))) end; - begin try - let source = List.assoc unit.ui_name !implementations_defined in - raise (Error(Multiple_definition(unit.ui_name, file_name, source))) - with Not_found -> () - end; implementations := unit.ui_name :: !implementations; - Cmx_consistbl.set crc_implementations unit.ui_name crc file_name; + Cmx_consistbl.check crc_implementations unit.ui_name crc file_name; implementations_defined := (unit.ui_name, file_name) :: !implementations_defined; if unit.ui_symbol <> unit.ui_name then @@ -236,9 +233,22 @@ let make_startup_file ~ppf_dump units_list ~crc_interfaces = Emit.begin_assembly (); let name_list = List.flatten (List.map (fun (info,_,_) -> info.ui_defines) units_list) in - compile_phrase (Cmm_helpers.entry_point name_list); + let entry = Cmm_helpers.entry_point name_list in + let entry = + if Config.tsan then + match entry with + | Cfunction ({ fun_body; _ } as cf) -> + Cmm.Cfunction + { cf with fun_body = Thread_sanitizer.wrap_entry_exit fun_body } + | _ -> assert false + else + entry + in + compile_phrase entry; let units = List.map (fun (info,_,_) -> info) units_list in - List.iter compile_phrase (Cmm_helpers.generic_functions false units); + List.iter compile_phrase + (Cmm_helpers.emit_preallocated_blocks [] (* add gc_roots (for dynlink) *) + (Cmm_helpers.generic_functions false units)); Array.iteri (fun i name -> compile_phrase (Cmm_helpers.predef_exception i name)) Runtimedef.builtin_exceptions; @@ -263,7 +273,8 @@ let make_shared_startup_file ~ppf_dump units = Compilenv.reset "_shared_startup"; Emit.begin_assembly (); List.iter compile_phrase - (Cmm_helpers.generic_functions true (List.map fst units)); + (Cmm_helpers.emit_preallocated_blocks [] (* add gc_roots (for dynlink) *) + (Cmm_helpers.generic_functions true (List.map fst units))); compile_phrase (Cmm_helpers.plugin_header units); compile_phrase (Cmm_helpers.global_table @@ -313,9 +324,10 @@ let call_linker file_list startup_file output_name = and main_obj_runtime = !Clflags.output_complete_object in let files = startup_file :: (List.rev file_list) in - let files, c_lib = + let files, ldflags = if (not !Clflags.output_c_object) || main_dll || main_obj_runtime then files @ (List.rev !Clflags.ccobjs) @ runtime_lib (), + native_ldflags ^ " " ^ (if !Clflags.nopervasives || (main_obj_runtime && not main_dll) then "" else Config.native_c_libraries) else @@ -326,7 +338,7 @@ let call_linker file_list startup_file output_name = else if !Clflags.output_c_object then Ccomp.Partial else Ccomp.Exe in - let exitcode = Ccomp.call_linker mode output_name files c_lib in + let exitcode = Ccomp.call_linker mode output_name files ldflags in if not (exitcode = 0) then raise(Error(Linking_error exitcode)) @@ -373,61 +385,68 @@ let link ~ppf_dump objfiles output_name = (* Error report *) open Format +module Style = Misc.Style let report_error ppf = function | File_not_found name -> - fprintf ppf "Cannot find file %s" name + fprintf ppf "Cannot find file %a" Style.inline_code name | Not_an_object_file name -> fprintf ppf "The file %a is not a compilation unit description" - Location.print_filename name + (Style.as_inline_code Location.print_filename) name | Missing_implementations l -> let print_references ppf = function | [] -> () | r1 :: rl -> - fprintf ppf "%s" r1; - List.iter (fun r -> fprintf ppf ",@ %s" r) rl in + Style.inline_code ppf r1; + List.iter (fun r -> fprintf ppf ",@ %a" Style.inline_code r) rl in let print_modules ppf = List.iter (fun (md, rq) -> - fprintf ppf "@ @[%s referenced from %a@]" md - print_references rq) in + fprintf ppf "@ @[%a referenced from %a@]" + Style.inline_code md + print_references rq) in fprintf ppf "@[No implementations provided for the following modules:%a@]" print_modules l | Inconsistent_interface(intf, file1, file2) -> fprintf ppf "@[Files %a@ and %a@ make inconsistent assumptions \ - over interface %s@]" - Location.print_filename file1 - Location.print_filename file2 - intf + over interface %a@]" + (Style.as_inline_code Location.print_filename) file1 + (Style.as_inline_code Location.print_filename) file2 + Style.inline_code intf | Inconsistent_implementation(intf, file1, file2) -> fprintf ppf "@[Files %a@ and %a@ make inconsistent assumptions \ - over implementation %s@]" - Location.print_filename file1 - Location.print_filename file2 - intf + over implementation %a@]" + (Style.as_inline_code Location.print_filename) file1 + (Style.as_inline_code Location.print_filename) file2 + Style.inline_code intf | Assembler_error file -> - fprintf ppf "Error while assembling %a" Location.print_filename file + fprintf ppf "Error while assembling %a" + (Style.as_inline_code Location.print_filename) file | Linking_error exitcode -> fprintf ppf "Error during linking (exit code %d)" exitcode | Multiple_definition(modname, file1, file2) -> fprintf ppf - "@[Files %a@ and %a@ both define a module named %s@]" - Location.print_filename file1 - Location.print_filename file2 - modname + "@[Files %a@ and %a@ both define a module named %a@]" + (Style.as_inline_code Location.print_filename) file1 + (Style.as_inline_code Location.print_filename) file2 + Style.inline_code modname | Missing_cmx(filename, name) -> fprintf ppf "@[File %a@ was compiled without access@ \ - to the .cmx file@ for module %s,@ \ - which was produced by `ocamlopt -for-pack'.@ \ - Please recompile %a@ with the correct `-I' option@ \ - so that %s.cmx@ is found.@]" - Location.print_filename filename name - Location.print_filename filename - name + to the %a file@ for module %a,@ \ + which was produced by %a.@ \ + Please recompile %a@ with the correct %a option@ \ + so that %a@ is found.@]" + (Style.as_inline_code Location.print_filename) filename + Style.inline_code ".cmx" + Style.inline_code name + Style.inline_code "ocamlopt -for-pack" + (Style.as_inline_code Location.print_filename) filename + Style.inline_code "-I" + Style.inline_code (name^".cmx") let () = Location.register_error_of_exn diff --git a/asmcomp/asmpackager.ml b/asmcomp/asmpackager.ml index c7baa706..fa9de400 100644 --- a/asmcomp/asmpackager.ml +++ b/asmcomp/asmpackager.ml @@ -40,17 +40,21 @@ type pack_member = pm_kind: pack_member_kind } let read_member_info pack_path file = ( - let name = - String.capitalize_ascii(Filename.basename(chop_extensions file)) in + let unit_info = Unit_info.Artifact.from_filename file in + let name = Unit_info.Artifact.modname unit_info in let kind = - if Filename.check_suffix file ".cmi" then + if Unit_info.is_cmi unit_info then PM_intf else begin let (info, crc) = Compilenv.read_unit_info file in if info.ui_name <> name then raise(Error(Illegal_renaming(name, file, info.ui_name))); - if info.ui_symbol <> - (Compilenv.current_unit_infos()).ui_symbol ^ "__" ^ info.ui_name + let expected_symbol = + Printf.sprintf "%s%c%s" + (Compilenv.current_unit_infos()).ui_symbol Compilenv.symbol_separator + info.ui_name + in + if info.ui_symbol <> expected_symbol then raise(Error(Wrong_for_pack(file, pack_path))); Asmlink.check_consistency file info crc; Compilenv.cache_unit_info info; @@ -79,12 +83,13 @@ let check_units members = (* Make the .o file for the package *) -let make_package_object ~ppf_dump members targetobj targetname coercion - ~backend = - Profile.record_call (Printf.sprintf "pack(%s)" targetname) (fun () -> +let make_package_object ~ppf_dump members target coercion ~backend = + let pack_name = + Printf.sprintf "pack(%s)" (Unit_info.Artifact.modname target) in + Profile.record_call pack_name (fun () -> let objtemp = if !Clflags.keep_asm_file - then Filename.remove_extension targetobj ^ ".pack" ^ Config.ext_obj + then Unit_info.Artifact.prefix target ^ ".pack" ^ Config.ext_obj else (* Put the full name of the module in the temporary file name to avoid collisions with MSVC's link /lib in case of successive @@ -97,7 +102,8 @@ let make_package_object ~ppf_dump members targetobj targetname coercion | PM_intf -> None | PM_impl _ -> Some(Ident.create_persistent m.pm_name)) members in - let module_ident = Ident.create_persistent targetname in + let module_ident = + Ident.create_persistent @@ Unit_info.Artifact.modname target in let prefixname = Filename.remove_extension objtemp in let required_globals = Ident.Set.empty in let program, middle_end = @@ -117,8 +123,7 @@ let make_package_object ~ppf_dump members targetobj targetname coercion program, Flambda_middle_end.lambda_to_clambda else let main_module_block_size, code = - Translmod.transl_store_package components - (Ident.create_persistent targetname) coercion + Translmod.transl_store_package components module_ident coercion in let code = Simplif.simplify_lambda code in let program = @@ -141,7 +146,8 @@ let make_package_object ~ppf_dump members targetobj targetname coercion (fun m -> Filename.remove_extension m.pm_file ^ Config.ext_obj) (List.filter (fun m -> m.pm_kind <> PM_intf) members) in let exitcode = - Ccomp.call_linker Ccomp.Partial targetobj (objtemp :: objfiles) "" + Ccomp.call_linker Ccomp.Partial (Unit_info.Artifact.filename target) + (objtemp :: objfiles) "" in remove_file objtemp; if not (exitcode = 0) then raise(Error Linking_error) @@ -232,20 +238,20 @@ let build_package_cmx members cmxfile = ui_force_link = List.exists (fun info -> info.ui_force_link) units; ui_export_info; + ui_for_pack = None; } in Compilenv.write_unit_info pkg_infos cmxfile (* Make the .cmx and the .o for the package *) -let package_object_files ~ppf_dump files targetcmx - targetobj targetname coercion ~backend = +let package_object_files ~ppf_dump files target targetcmx coercion ~backend = let pack_path = match !Clflags.for_package with - | None -> targetname - | Some p -> p ^ "." ^ targetname in + | None -> Unit_info.Artifact.modname target + | Some p -> p ^ "." ^ Unit_info.Artifact.modname target in let members = map_left_right (read_member_info pack_path) files in check_units members; - make_package_object ~ppf_dump members targetobj targetname coercion ~backend; + make_package_object ~ppf_dump members target coercion ~backend; build_package_cmx members targetcmx (* The entry point *) @@ -257,41 +263,44 @@ let package_files ~ppf_dump initial_env files targetcmx ~backend = try Load_path.find f with Not_found -> raise(Error(File_not_found f))) files in - let prefix = chop_extensions targetcmx in - let targetcmi = prefix ^ ".cmi" in - let targetobj = Filename.remove_extension targetcmx ^ Config.ext_obj in - let targetname = String.capitalize_ascii(Filename.basename prefix) in + let cmx = Unit_info.Artifact.from_filename targetcmx in + let cmi = Unit_info.companion_cmi cmx in + let obj = Unit_info.companion_obj cmx in (* Set the name of the current "input" *) Location.input_name := targetcmx; (* Set the name of the current compunit *) - Compilenv.reset ?packname:!Clflags.for_package targetname; + Compilenv.reset ?packname:!Clflags.for_package + (Unit_info.Artifact.modname cmi); Misc.try_finally (fun () -> - let coercion = - Typemod.package_units initial_env files targetcmi targetname in - package_object_files ~ppf_dump files targetcmx targetobj targetname - coercion ~backend + let coercion = Typemod.package_units initial_env files cmi in + package_object_files ~ppf_dump files obj targetcmx coercion ~backend ) - ~exceptionally:(fun () -> remove_file targetcmx; remove_file targetobj) + ~exceptionally:(fun () -> + remove_file targetcmx; remove_file (Unit_info.Artifact.filename obj) + ) (* Error report *) open Format +module Style = Misc.Style let report_error ppf = function Illegal_renaming(name, file, id) -> fprintf ppf "Wrong file naming: %a@ contains the code for\ - @ %s when %s was expected" - Location.print_filename file name id + @ %a when %a was expected" + (Style.as_inline_code Location.print_filename) file + Style.inline_code name Style.inline_code id | Forward_reference(file, ident) -> - fprintf ppf "Forward reference to %s in file %a" ident - Location.print_filename file + fprintf ppf "Forward reference to %a in file %a" Style.inline_code ident + (Style.as_inline_code Location.print_filename) file | Wrong_for_pack(file, path) -> - fprintf ppf "File %a@ was not compiled with the `-for-pack %s' option" - Location.print_filename file path + fprintf ppf "File %a@ was not compiled with the %a option" + (Style.as_inline_code Location.print_filename) file + Style.inline_code ("-for-pack " ^ path) | File_not_found file -> - fprintf ppf "File %s not found" file + fprintf ppf "File %a not found" Style.inline_code file | Assembler_error file -> - fprintf ppf "Error while assembling %s" file + fprintf ppf "Error while assembling %a" Style.inline_code file | Linking_error -> fprintf ppf "Error during partial linking" diff --git a/asmcomp/branch_relaxation_intf.ml b/asmcomp/branch_relaxation_intf.mli similarity index 100% rename from asmcomp/branch_relaxation_intf.ml rename to asmcomp/branch_relaxation_intf.mli diff --git a/asmcomp/cmm.ml b/asmcomp/cmm.ml index ae62b4fd..b2783b59 100644 --- a/asmcomp/cmm.ml +++ b/asmcomp/cmm.ml @@ -86,7 +86,7 @@ type exttype = let machtype_of_exttype = function | XInt -> typ_int | XInt32 -> typ_int - | XInt64 -> if Arch.size_int = 4 then [|Int;Int|] else typ_int + | XInt64 -> typ_int | XFloat -> typ_float let machtype_of_exttype_list xtl = @@ -150,7 +150,10 @@ type memory_chunk = and operation = Capply of machtype | Cextcall of string * machtype * exttype list * bool - | Cload of memory_chunk * Asttypes.mutable_flag + | Cload of + { memory_chunk: memory_chunk + ; mutability: Asttypes.mutable_flag + ; is_atomic: bool } | Calloc | Cstore of memory_chunk * Lambda.initialization_or_assignment | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi @@ -165,6 +168,7 @@ and operation = | Craise of Lambda.raise_kind | Ccheckbound | Copaque + | Cdls_get type expression = Cconst_int of int * Debuginfo.t @@ -193,6 +197,7 @@ type expression = | Cexit of int * expression list | Ctrywith of expression * Backend_var.With_provenance.t * expression * Debuginfo.t + | Creturn_addr type codegen_option = | Reduce_code_size @@ -262,7 +267,8 @@ let iter_shallow_tail f = function | Cvar _ | Cassign _ | Ctuple _ - | Cop _ -> + | Cop _ + | Creturn_addr -> false let rec map_tail f = function @@ -298,6 +304,7 @@ let rec map_tail f = function | Cvar _ | Cassign _ | Ctuple _ + | Creturn_addr | Cop _ as c -> f c @@ -332,5 +339,6 @@ let map_shallow f = function | Cconst_float _ | Cconst_symbol _ | Cvar _ + | Creturn_addr as c -> c diff --git a/asmcomp/cmm.mli b/asmcomp/cmm.mli index f37aef03..ed4efc82 100644 --- a/asmcomp/cmm.mli +++ b/asmcomp/cmm.mli @@ -143,8 +143,12 @@ and operation = | Cextcall of string * machtype * exttype list * bool (** The [machtype] is the machine type of the result. The [exttype list] describes the unboxing types of the arguments. - An empty list means "all arguments are machine words [XInt]". *) - | Cload of memory_chunk * Asttypes.mutable_flag + An empty list means "all arguments are machine words [XInt]". + The boolean indicates whether the function may allocate. *) + | Cload of + { memory_chunk: memory_chunk + ; mutability: Asttypes.mutable_flag + ; is_atomic: bool } | Calloc | Cstore of memory_chunk * Lambda.initialization_or_assignment | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi @@ -163,6 +167,7 @@ and operation = It results in a bounds error if the index is greater than or equal to the bound. *) | Copaque (* Sys.opaque_identity *) + | Cdls_get (** Every basic block should have a corresponding [Debuginfo.t] for its beginning. *) @@ -194,6 +199,7 @@ and expression = | Cexit of int * expression list | Ctrywith of expression * Backend_var.With_provenance.t * expression * Debuginfo.t + | Creturn_addr (** Return address saved in the current call frame *) type codegen_option = | Reduce_code_size diff --git a/asmcomp/cmm_helpers.ml b/asmcomp/cmm_helpers.ml index 7ad42cea..44b3e092 100644 --- a/asmcomp/cmm_helpers.ml +++ b/asmcomp/cmm_helpers.ml @@ -40,6 +40,17 @@ let bind_nonvar name arg fn = let caml_black = Nativeint.shift_left (Nativeint.of_int 3) 8 (* cf. runtime/caml/gc.h *) +(* Loads *) + +let mk_load_immut memory_chunk = + Cload {memory_chunk; mutability=Immutable; is_atomic=false} + +let mk_load_mut memory_chunk = + Cload {memory_chunk; mutability=Mutable; is_atomic=false} + +let mk_load_atomic memory_chunk = + Cload {memory_chunk; mutability=Mutable; is_atomic=true} + (* Block headers. Meaning of the tag field: see stdlib/obj.ml *) let floatarray_tag dbg = Cconst_int (Obj.double_array_tag, dbg) @@ -524,7 +535,7 @@ let safe_divmod_bi mkop is_safe mkm1 c1 c2 bi dbg = bind "dividend" c1 (fun c1 -> let c = mkop c1 c2 is_safe dbg in if Arch.division_crashes_on_overflow - && (size_int = 4 || bi <> Primitive.Pint32) + && bi <> Primitive.Pint32 && not (is_different_from (-1) c2) then Cifthenelse(Cop(Ccmpi Cne, [c2; Cconst_int (-1, dbg)], dbg), @@ -569,20 +580,28 @@ let unbox_float dbg = | Some (Uconst_float x) -> Cconst_float (x, dbg) (* or keep _dbg? *) | _ -> - Cop(Cload (Double, Immutable), [cmm], dbg) + Cop(mk_load_immut Double, [cmm], dbg) end - | cmm -> Cop(Cload (Double, Immutable), [cmm], dbg) + | cmm -> Cop(mk_load_immut Double, [cmm], dbg) ) +(* Conversions for 16-bit floats *) + +let float_of_float16 dbg c = + Cop(Cextcall("caml_double_of_float16", typ_float, [XInt], false), [c], dbg) +let float16_of_float dbg c = + Cop(Cextcall("caml_float16_of_double", typ_int, [XFloat], false), [c], dbg) + (* Complex *) let box_complex dbg c_re c_im = Cop(Calloc, [alloc_floatarray_header 2 dbg; c_re; c_im], dbg) -let complex_re c dbg = Cop(Cload (Double, Immutable), [c], dbg) -let complex_im c dbg = Cop(Cload (Double, Immutable), - [Cop(Cadda, [c; Cconst_int (size_float, dbg)], dbg)], - dbg) +let complex_re c dbg = + Cop(mk_load_immut Double, [c], dbg) +let complex_im c dbg = + Cop(mk_load_immut Double, + [Cop(Cadda, [c; Cconst_int (size_float, dbg)], dbg)], dbg) (* Unit *) @@ -617,33 +636,36 @@ let rec remove_unit = function | Ctuple [] as c -> c | c -> Csequence(c, Ctuple []) -(* Access to block fields *) - let field_address ptr n dbg = if n = 0 then ptr else Cop(Cadda, [ptr; Cconst_int(n * size_addr, dbg)], dbg) -let get_field_gen mut ptr n dbg = - Cop(Cload (Word_val, mut), [field_address ptr n dbg], dbg) +let get_field_gen mutability ptr n dbg = + Cop(Cload {memory_chunk=Word_val; mutability; is_atomic=false}, + [field_address ptr n dbg], dbg) + +let get_field_codepointer mutability ptr n dbg = + Cop(Cload {memory_chunk=Word_int; mutability; is_atomic=false}, + [field_address ptr n dbg], dbg) let set_field ptr n newval init dbg = Cop(Cstore (Word_val, init), [field_address ptr n dbg; newval], dbg) -let non_profinfo_mask = - if Config.profinfo - then (1 lsl (64 - Config.profinfo_width)) - 1 - else 0 (* [non_profinfo_mask] is unused in this case *) - let get_header ptr dbg = - (* We cannot deem this as [Immutable] due to the presence of [Obj.truncate] - and [Obj.set_tag]. *) - Cop(Cload (Word_int, Mutable), + (* Headers can be mutated when forcing a lazy value. However, for all + purposes that the mutability tag currently serves in the compiler, header + loads can be marked as [Immutable], since the runtime should ensure that + there is no data race on headers. This saves performance with + ThreadSanitizer instrumentation by avoiding to instrument header loads. *) + Cop( + mk_load_immut Word_int, [Cop(Cadda, [ptr; Cconst_int(-size_int, dbg)], dbg)], dbg) -let get_header_without_profinfo ptr dbg = - if Config.profinfo then - Cop(Cand, [get_header ptr dbg; Cconst_int (non_profinfo_mask, dbg)], dbg) +let get_header_masked ptr dbg = + if Config.reserved_header_bits > 0 then + let header_mask = (1 lsl (64 - Config.reserved_header_bits)) - 1 + in Cop(Cand, [get_header ptr dbg; Cconst_int (header_mask, dbg)], dbg) else get_header ptr dbg @@ -655,11 +677,12 @@ let get_tag ptr dbg = Cop(Cand, [get_header ptr dbg; Cconst_int (255, dbg)], dbg) else (* If byte loads are efficient *) (* Same comment as [get_header] above *) - Cop(Cload (Byte_unsigned, Mutable), - [Cop(Cadda, [ptr; Cconst_int(tag_offset, dbg)], dbg)], dbg) + Cop( + mk_load_immut Byte_unsigned, + [Cop(Cadda, [ptr; Cconst_int(tag_offset, dbg)], dbg)], dbg) let get_size ptr dbg = - Cop(Clsr, [get_header_without_profinfo ptr dbg; Cconst_int (10, dbg)], dbg) + Cop(Clsr, [get_header_masked ptr dbg; Cconst_int (10, dbg)], dbg) (* Array indexing *) @@ -722,13 +745,13 @@ let array_indexing ?typ log2size ptr ofs dbg = Cconst_int((-1) lsl (log2size - 1), dbg)], dbg) let addr_array_ref arr ofs dbg = - Cop(Cload (Word_val, Mutable), + Cop(mk_load_mut Word_val, [array_indexing log2_size_addr arr ofs dbg], dbg) let int_array_ref arr ofs dbg = - Cop(Cload (Word_int, Mutable), + Cop(mk_load_mut Word_int, [array_indexing log2_size_addr arr ofs dbg], dbg) let unboxed_float_array_ref arr ofs dbg = - Cop(Cload (Double, Mutable), + Cop(mk_load_mut Double, [array_indexing log2_size_float arr ofs dbg], dbg) let float_array_ref arr ofs dbg = box_float dbg (unboxed_float_array_ref arr ofs dbg) @@ -763,11 +786,11 @@ let string_length exp dbg = dbg), Cop(Csubi, [Cvar tmp_var; - Cop(Cload (Byte_unsigned, Mutable), + Cop(mk_load_mut Byte_unsigned, [Cop(Cadda, [str; Cvar tmp_var], dbg)], dbg)], dbg))) let bigstring_length ba dbg = - Cop(Cload (Word_int, Mutable), [field_address ba 5 dbg], dbg) + Cop(mk_load_mut Word_int, [field_address ba 5 dbg], dbg) (* Message sending *) @@ -779,7 +802,7 @@ let lookup_tag obj tag dbg = let lookup_label obj lab dbg = bind "lab" lab (fun lab -> - let table = Cop (Cload (Word_val, Mutable), [obj], dbg) in + let table = Cop (mk_load_mut Word_val, [obj], dbg) in addr_array_ref table lab dbg) let call_cached_method obj tag cache pos args dbg = @@ -803,7 +826,7 @@ let make_alloc_generic set_fn dbg tag wordsize args = | e1::el -> Csequence(set_fn (Cvar id) (Cconst_int (idx, dbg)) e1 dbg, fill_fields (idx + 2) el) in Clet(VP.create id, - Cop(Cextcall("caml_alloc", typ_val, [], true), + Cop(Cextcall("caml_alloc_shr_check_gc", typ_val, [], true), [Cconst_int (wordsize, dbg); Cconst_int (tag, dbg)], dbg), fill_fields 1 args) end @@ -842,6 +865,7 @@ let curry_function_sym n = let bigarray_elt_size : Lambda.bigarray_kind -> int = function Pbigarray_unknown -> assert false + | Pbigarray_float16 -> 2 | Pbigarray_float32 -> 4 | Pbigarray_float64 -> 8 | Pbigarray_sint8 -> 1 @@ -872,7 +896,7 @@ let bigarray_indexing unsafe elt_kind layout b args dbg = bind "idx" arg (fun idx -> (* Load the untagged int bound for the given dimension *) let bound = - Cop(Cload (Word_int, Mutable), + Cop(mk_load_mut Word_int, [field_address b dim_ofs dbg], dbg) in let idxn = untag_int idx dbg in @@ -883,7 +907,7 @@ let bigarray_indexing unsafe elt_kind layout b args dbg = let rem = ba_indexing (dim_ofs + delta_ofs) delta_ofs argl in (* Load the untagged int bound for the given dimension *) let bound = - Cop(Cload (Word_int, Mutable), + Cop(mk_load_mut Word_int, [field_address b dim_ofs dbg], dbg) in if unsafe then add_int (mul_int (decr_int rem dbg) bound dbg) arg1 dbg @@ -910,11 +934,12 @@ let bigarray_indexing unsafe elt_kind layout b args dbg = bigarray_elt_size elt_kind in (* [array_indexing] can simplify the given expressions *) array_indexing ~typ:Addr (Misc.log2 elt_size) - (Cop(Cload (Word_int, Mutable), + (Cop(mk_load_mut Word_int, [field_address b 1 dbg], dbg)) offset dbg let bigarray_word_kind : Lambda.bigarray_kind -> memory_chunk = function Pbigarray_unknown -> assert false + | Pbigarray_float16 -> Sixteen_unsigned | Pbigarray_float32 -> Single | Pbigarray_float64 -> Double | Pbigarray_sint8 -> Byte_signed @@ -937,13 +962,13 @@ let bigarray_get unsafe elt_kind layout b args dbg = bind "addr" (bigarray_indexing unsafe elt_kind layout b args dbg) (fun addr -> bind "reval" - (Cop(Cload (kind, Mutable), [addr], dbg)) (fun reval -> + (Cop(mk_load_mut kind, [addr], dbg)) (fun reval -> bind "imval" - (Cop(Cload (kind, Mutable), + (Cop(mk_load_mut kind, [Cop(Cadda, [addr; Cconst_int (sz, dbg)], dbg)], dbg)) (fun imval -> box_complex dbg reval imval))) | _ -> - Cop(Cload (bigarray_word_kind elt_kind, Mutable), + Cop(mk_load_mut (bigarray_word_kind elt_kind), [bigarray_indexing unsafe elt_kind layout b args dbg], dbg)) @@ -967,12 +992,11 @@ let bigarray_set unsafe elt_kind layout b args newval dbg = [bigarray_indexing unsafe elt_kind layout b args dbg; newval], dbg)) -(* the three functions below assume either 32-bit or 64-bit words *) -let () = assert (size_int = 4 || size_int = 8) +(* the three functions below assume 64-bit words *) +let () = assert (size_int = 8) (* low_32 x is a value which agrees with x on at least the low 32 bits *) let rec low_32 dbg = function - | x when size_int = 4 -> x (* Ignore sign and zero extensions, which do not affect the low bits *) | Cop(Casr, [Cop(Clsl, [x; Cconst_int (32, _)], _); Cconst_int (32, _)], _) @@ -982,18 +1006,14 @@ let rec low_32 dbg = function Clet(id, e, low_32 dbg body) | x -> x -(* sign_extend_32 sign-extends values from 32 bits to the word size. - (if the word size is 32, this is a no-op) *) +(* sign_extend_32 sign-extends values from 32 bits to the word size. *) let sign_extend_32 dbg e = - if size_int = 4 then e else - Cop(Casr, [Cop(Clsl, [low_32 dbg e; Cconst_int(32, dbg)], dbg); - Cconst_int(32, dbg)], dbg) + Cop(Casr, [Cop(Clsl, [low_32 dbg e; Cconst_int(32, dbg)], dbg); + Cconst_int(32, dbg)], dbg) -(* zero_extend_32 zero-extends values from 32 bits to the word size. - (if the word size is 32, this is a no-op) *) +(* zero_extend_32 zero-extends values from 32 bits to the word size. *) let zero_extend_32 dbg e = - if size_int = 4 then e else - Cop(Cand, [low_32 dbg e; natint_const_untagged dbg 0xFFFFFFFFn], dbg) + Cop(Cand, [low_32 dbg e; natint_const_untagged dbg 0xFFFFFFFFn], dbg) (* Boxed integers *) @@ -1011,7 +1031,7 @@ let alloc_header_boxed_int (bi : Primitive.boxed_integer) = let box_int_gen dbg (bi : Primitive.boxed_integer) arg = let arg' = - if bi = Primitive.Pint32 && size_int = 8 then + if bi = Primitive.Pint32 then if big_endian then Cop(Clsl, [arg; Cconst_int (32, dbg)], dbg) else sign_extend_32 dbg arg @@ -1021,13 +1041,6 @@ let box_int_gen dbg (bi : Primitive.boxed_integer) arg = Cconst_symbol(operations_boxed_int bi, dbg); arg'], dbg) -let split_int64_for_32bit_target arg dbg = - bind "split_int64" arg (fun arg -> - let first = Cop (Cadda, [Cconst_int (size_int, dbg); arg], dbg) in - let second = Cop (Cadda, [Cconst_int (2 * size_int, dbg); arg], dbg) in - Ctuple [Cop (Cload (Thirtytwo_unsigned, Mutable), [first], dbg); - Cop (Cload (Thirtytwo_unsigned, Mutable), [second], dbg)]) - let alloc_matches_boxed_int bi ~hdr ~ops = match (bi : Primitive.boxed_integer), hdr, ops with | Pnativeint, Cconst_natint (hdr, _dbg), Cconst_symbol (sym, _) -> @@ -1043,26 +1056,25 @@ let alloc_matches_boxed_int bi ~hdr ~ops = let unbox_int dbg bi = let default arg = - if size_int = 4 && bi = Primitive.Pint64 then - split_int64_for_32bit_target arg dbg - else - Cop( - Cload((if bi = Primitive.Pint32 then Thirtytwo_signed else Word_int), - Immutable), - [Cop(Cadda, [arg; Cconst_int (size_addr, dbg)], dbg)], dbg) + let memory_chunk = if bi = Primitive.Pint32 + then Thirtytwo_signed else Word_int + in + Cop( + mk_load_immut memory_chunk, + [Cop(Cadda, [arg; Cconst_int (size_addr, dbg)], dbg)], dbg) in map_tail (function | Cop(Calloc, [hdr; ops; Cop(Clsl, [contents; Cconst_int (32, _)], _dbg')], _dbg) - when bi = Primitive.Pint32 && size_int = 8 && big_endian + when bi = Primitive.Pint32 && big_endian && alloc_matches_boxed_int bi ~hdr ~ops -> (* Force sign-extension of low 32 bits *) sign_extend_32 dbg contents | Cop(Calloc, [hdr; ops; contents], _dbg) - when bi = Primitive.Pint32 && size_int = 8 && not big_endian + when bi = Primitive.Pint32 && not big_endian && alloc_matches_boxed_int bi ~hdr ~ops -> (* Force sign-extension of low 32 bits *) sign_extend_32 dbg contents @@ -1076,19 +1088,7 @@ let unbox_int dbg bi = | Some (Uconst_int32 n), Primitive.Pint32 -> natint_const_untagged dbg (Nativeint.of_int32 n) | Some (Uconst_int64 n), Primitive.Pint64 -> - if size_int = 8 then - natint_const_untagged dbg (Int64.to_nativeint n) - else - let low = Int64.to_nativeint n in - let high = - Int64.to_nativeint (Int64.shift_right_logical n 32) - in - if big_endian then - Ctuple [natint_const_untagged dbg high; - natint_const_untagged dbg low] - else - Ctuple [natint_const_untagged dbg low; - natint_const_untagged dbg high] + natint_const_untagged dbg (Int64.to_nativeint n) | _ -> default cmm end @@ -1097,17 +1097,17 @@ let unbox_int dbg bi = ) let make_unsigned_int bi arg dbg = - if bi = Primitive.Pint32 && size_int = 8 + if bi = Primitive.Pint32 then zero_extend_32 dbg arg else arg let unaligned_load_16 ptr idx dbg = if Arch.allow_unaligned_access - then Cop(Cload (Sixteen_unsigned, Mutable), [add_int ptr idx dbg], dbg) + then Cop(mk_load_mut Sixteen_unsigned, [add_int ptr idx dbg], dbg) else let cconst_int i = Cconst_int (i, dbg) in - let v1 = Cop(Cload (Byte_unsigned, Mutable), [add_int ptr idx dbg], dbg) in - let v2 = Cop(Cload (Byte_unsigned, Mutable), + let v1 = Cop(mk_load_mut Byte_unsigned, [add_int ptr idx dbg], dbg) in + let v2 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 1) dbg], dbg) in let b1, b2 = if Arch.big_endian then v1, v2 else v2, v1 in Cop(Cor, [lsl_int b1 (cconst_int 8) dbg; b2], dbg) @@ -1132,17 +1132,17 @@ let unaligned_set_16 ptr idx newval dbg = let unaligned_load_32 ptr idx dbg = if Arch.allow_unaligned_access - then Cop(Cload (Thirtytwo_unsigned, Mutable), [add_int ptr idx dbg], dbg) + then Cop(mk_load_mut Thirtytwo_unsigned, [add_int ptr idx dbg], dbg) else let cconst_int i = Cconst_int (i, dbg) in - let v1 = Cop(Cload (Byte_unsigned, Mutable), [add_int ptr idx dbg], dbg) in - let v2 = Cop(Cload (Byte_unsigned, Mutable), + let v1 = Cop(mk_load_mut Byte_unsigned, [add_int ptr idx dbg], dbg) in + let v2 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 1) dbg], dbg) in - let v3 = Cop(Cload (Byte_unsigned, Mutable), + let v3 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 2) dbg], dbg) in - let v4 = Cop(Cload (Byte_unsigned, Mutable), + let v4 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 3) dbg], dbg) in let b1, b2, b3, b4 = @@ -1192,25 +1192,24 @@ let unaligned_set_32 ptr idx newval dbg = dbg))) let unaligned_load_64 ptr idx dbg = - assert(size_int = 8); if Arch.allow_unaligned_access - then Cop(Cload (Word_int, Mutable), [add_int ptr idx dbg], dbg) + then Cop(mk_load_mut Word_int, [add_int ptr idx dbg], dbg) else let cconst_int i = Cconst_int (i, dbg) in - let v1 = Cop(Cload (Byte_unsigned, Mutable), [add_int ptr idx dbg], dbg) in - let v2 = Cop(Cload (Byte_unsigned, Mutable), + let v1 = Cop(mk_load_mut Byte_unsigned, [add_int ptr idx dbg], dbg) in + let v2 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 1) dbg], dbg) in - let v3 = Cop(Cload (Byte_unsigned, Mutable), + let v3 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 2) dbg], dbg) in - let v4 = Cop(Cload (Byte_unsigned, Mutable), + let v4 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 3) dbg], dbg) in - let v5 = Cop(Cload (Byte_unsigned, Mutable), + let v5 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 4) dbg], dbg) in - let v6 = Cop(Cload (Byte_unsigned, Mutable), + let v6 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 5) dbg], dbg) in - let v7 = Cop(Cload (Byte_unsigned, Mutable), + let v7 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 6) dbg], dbg) in - let v8 = Cop(Cload (Byte_unsigned, Mutable), + let v8 = Cop(mk_load_mut Byte_unsigned, [add_int (add_int ptr idx dbg) (cconst_int 7) dbg], dbg) in let b1, b2, b3, b4, b5, b6, b7, b8 = if Arch.big_endian @@ -1231,7 +1230,6 @@ let unaligned_load_64 ptr idx dbg = dbg)], dbg) let unaligned_set_64 ptr idx newval dbg = - assert(size_int = 8); if Arch.allow_unaligned_access then Cop(Cstore (Word_int, Assignment), [add_int ptr idx dbg; newval], dbg) else @@ -1355,65 +1353,6 @@ let box_sized size dbg exp = let default_prim name = Primitive.simple ~name ~arity:0(*ignored*) ~alloc:true - -let int64_native_prim name arity ~alloc = - let u64 = Primitive.Unboxed_integer Primitive.Pint64 in - let rec make_args = function 0 -> [] | n -> u64 :: make_args (n - 1) in - Primitive.make ~name ~native_name:(name ^ "_native") - ~alloc - ~native_repr_args:(make_args arity) - ~native_repr_res:u64 - -let simplif_primitive_32bits : - Clambda_primitives.primitive -> Clambda_primitives.primitive = function - Pbintofint Pint64 -> Pccall (default_prim "caml_int64_of_int") - | Pintofbint Pint64 -> Pccall (default_prim "caml_int64_to_int") - | Pcvtbint(Pint32, Pint64) -> Pccall (default_prim "caml_int64_of_int32") - | Pcvtbint(Pint64, Pint32) -> Pccall (default_prim "caml_int64_to_int32") - | Pcvtbint(Pnativeint, Pint64) -> - Pccall (default_prim "caml_int64_of_nativeint") - | Pcvtbint(Pint64, Pnativeint) -> - Pccall (default_prim "caml_int64_to_nativeint") - | Pnegbint Pint64 -> Pccall (int64_native_prim "caml_int64_neg" 1 - ~alloc:false) - | Paddbint Pint64 -> Pccall (int64_native_prim "caml_int64_add" 2 - ~alloc:false) - | Psubbint Pint64 -> Pccall (int64_native_prim "caml_int64_sub" 2 - ~alloc:false) - | Pmulbint Pint64 -> Pccall (int64_native_prim "caml_int64_mul" 2 - ~alloc:false) - | Pdivbint {size=Pint64} -> Pccall (int64_native_prim "caml_int64_div" 2 - ~alloc:true) - | Pmodbint {size=Pint64} -> Pccall (int64_native_prim "caml_int64_mod" 2 - ~alloc:true) - | Pandbint Pint64 -> Pccall (int64_native_prim "caml_int64_and" 2 - ~alloc:false) - | Porbint Pint64 -> Pccall (int64_native_prim "caml_int64_or" 2 - ~alloc:false) - | Pxorbint Pint64 -> Pccall (int64_native_prim "caml_int64_xor" 2 - ~alloc:false) - | Plslbint Pint64 -> Pccall (default_prim "caml_int64_shift_left") - | Plsrbint Pint64 -> Pccall (default_prim "caml_int64_shift_right_unsigned") - | Pasrbint Pint64 -> Pccall (default_prim "caml_int64_shift_right") - | Pbintcomp(Pint64, Lambda.Ceq) -> Pccall (default_prim "caml_equal") - | Pbintcomp(Pint64, Lambda.Cne) -> Pccall (default_prim "caml_notequal") - | Pbintcomp(Pint64, Lambda.Clt) -> Pccall (default_prim "caml_lessthan") - | Pbintcomp(Pint64, Lambda.Cgt) -> Pccall (default_prim "caml_greaterthan") - | Pbintcomp(Pint64, Lambda.Cle) -> Pccall (default_prim "caml_lessequal") - | Pbintcomp(Pint64, Lambda.Cge) -> Pccall (default_prim "caml_greaterequal") - | Pcompare_bints Pint64 -> Pccall (default_prim "caml_int64_compare") - | Pbigarrayref(_unsafe, n, Pbigarray_int64, _layout) -> - Pccall (default_prim ("caml_ba_get_" ^ Int.to_string n)) - | Pbigarrayset(_unsafe, n, Pbigarray_int64, _layout) -> - Pccall (default_prim ("caml_ba_set_" ^ Int.to_string n)) - | Pstring_load(Sixty_four, _) -> Pccall (default_prim "caml_string_get64") - | Pbytes_load(Sixty_four, _) -> Pccall (default_prim "caml_bytes_get64") - | Pbytes_set(Sixty_four, _) -> Pccall (default_prim "caml_bytes_set64") - | Pbigstring_load(Sixty_four,_) -> Pccall (default_prim "caml_ba_uint8_get64") - | Pbigstring_set(Sixty_four,_) -> Pccall (default_prim "caml_ba_uint8_set64") - | Pbbswap Pint64 -> Pccall (default_prim "caml_int64_bswap") - | p -> p - let simplif_primitive p : Clambda_primitives.primitive = match (p : Clambda_primitives.primitive) with | Pduprecord _ -> @@ -1427,7 +1366,7 @@ let simplif_primitive p : Clambda_primitives.primitive = | Pbigarrayset(_unsafe, n, _kind, Pbigarray_unknown_layout) -> Pccall (default_prim ("caml_ba_set_" ^ string_of_int n)) | p -> - if size_int = 8 then p else simplif_primitive_32bits p + p (* Build switchers both for constants and blocks *) @@ -1690,7 +1629,7 @@ let generic_apply mut clos args dbg = match args with | [arg] -> bind "fun" clos (fun clos -> - Cop(Capply typ_val, [get_field_gen mut clos 0 dbg; arg; clos], + Cop(Capply typ_val, [get_field_codepointer mut clos 0 dbg; arg; clos], dbg)) | _ -> let arity = List.length args in @@ -1738,7 +1677,7 @@ let cache_public_method meths tag cache dbg = Clet_mut ( VP.create li, typ_int, cconst_int 3, Clet_mut ( - VP.create hi, typ_int, Cop(Cload (Word_int, Mutable), [meths], dbg), + VP.create hi, typ_int, Cop(mk_load_mut Word_int, [meths], dbg), Csequence( ccatch (raise_num, [], @@ -1754,7 +1693,7 @@ let cache_public_method meths tag cache dbg = Cifthenelse (Cop (Ccmpi Clt, [tag; - Cop(Cload (Word_int, Mutable), + Cop(mk_load_mut Word_int, [Cop(Cadda, [meths; lsl_const (Cvar mi) log2_size_addr dbg], dbg)], @@ -1800,7 +1739,7 @@ let apply_function_body arity = let rec app_fun clos n = if n = arity-1 then Cop(Capply typ_val, - [get_field_gen Asttypes.Mutable (Cvar clos) 0 (dbg ()); + [get_field_codepointer Asttypes.Mutable (Cvar clos) 0 (dbg ()); Cvar arg.(n); Cvar clos], dbg ()) @@ -1808,7 +1747,7 @@ let apply_function_body arity = let newclos = V.create_local "clos" in Clet(VP.create newclos, Cop(Capply typ_val, - [get_field_gen Asttypes.Mutable (Cvar clos) 0 (dbg ()); + [get_field_codepointer Asttypes.Mutable (Cvar clos) 0 (dbg ()); Cvar arg.(n); Cvar clos], dbg ()), app_fun newclos (n+1)) end in @@ -1823,7 +1762,7 @@ let apply_function_body arity = Cconst_int(arity, dbg())], dbg()), dbg (), Cop(Capply typ_val, - get_field_gen Asttypes.Mutable (Cvar clos) 2 (dbg ()) + get_field_codepointer Asttypes.Mutable (Cvar clos) 2 (dbg ()) :: List.map (fun s -> Cvar s) all_args, dbg ()), dbg (), @@ -1845,12 +1784,12 @@ let send_function arity = let cached_pos = Cvar cached in let tag_pos = Cop(Cadda, [Cop (Cadda, [cached_pos; Cvar meths], dbg ()); cconst_int(3*size_addr-1)], dbg ()) in - let tag' = Cop(Cload (Word_int, Mutable), [tag_pos], dbg ()) in + let tag' = Cop(mk_load_mut Word_int, [tag_pos], dbg ()) in Clet ( - VP.create meths, Cop(Cload (Word_val, Mutable), [obj], dbg ()), + VP.create meths, Cop(mk_load_mut Word_val, [obj], dbg ()), Clet ( VP.create cached, - Cop(Cand, [Cop(Cload (Word_int, Mutable), [cache], dbg ()); mask], + Cop(Cand, [Cop(mk_load_mut Word_int, [cache], dbg ()); mask], dbg ()), Clet ( VP.create real, @@ -1860,7 +1799,7 @@ let send_function arity = dbg (), cached_pos, dbg ()), - Cop(Cload (Word_val, Mutable), + Cop(mk_load_mut Word_val, [Cop(Cadda, [Cop (Cadda, [Cvar real; Cvar meths], dbg ()); cconst_int(2*size_addr-1)], dbg ())], dbg ())))) @@ -1916,7 +1855,7 @@ let tuplify_function arity = fun_args = [VP.create arg, typ_val; VP.create clos, typ_val]; fun_body = Cop(Capply typ_val, - get_field_gen Asttypes.Mutable (Cvar clos) 2 (dbg ()) + get_field_codepointer Asttypes.Mutable (Cvar clos) 2 (dbg ()) :: access_components 0 @ [Cvar clos], (dbg ())); fun_codegen_options = []; @@ -1960,7 +1899,7 @@ let final_curry_function arity = let rec curry_fun args clos n = if n = 0 then Cop(Capply typ_val, - get_field_gen Asttypes.Mutable (Cvar clos) 2 (dbg ()) :: + get_field_codepointer Asttypes.Mutable (Cvar clos) 2 (dbg ()) :: args @ [Cvar last_arg; Cvar clos], dbg ()) else @@ -2040,7 +1979,8 @@ let rec intermediate_curry_functions arity num = let rec iter i args clos = if i = 0 then Cop(Capply typ_val, - (get_field_gen Asttypes.Mutable (Cvar clos) 2 (dbg ())) + (get_field_codepointer + Asttypes.Mutable (Cvar clos) 2 (dbg ())) :: args @ [Cvar clos], dbg ()) else @@ -2106,7 +2046,7 @@ let generic_functions shared units = type unary_primitive = expression -> Debuginfo.t -> expression let floatfield n ptr dbg = - Cop(Cload (Double, Mutable), + Cop(mk_load_mut Double, [if n = 0 then ptr else Cop(Cadda, [ptr; Cconst_int(n * size_float, dbg)], dbg)], dbg) @@ -2131,12 +2071,12 @@ let offsetref n arg dbg = (bind "ref" arg (fun arg -> Cop(Cstore (Word_int, Assignment), [arg; - add_const (Cop(Cload (Word_int, Mutable), [arg], dbg)) + add_const (Cop(mk_load_mut Word_int, [arg], dbg)) (n lsl 1) dbg], dbg))) let arraylength kind arg dbg = - let hdr = get_header_without_profinfo arg dbg in + let hdr = get_header_masked arg dbg in match (kind : Lambda.array_kind) with Pgenarray -> let len = @@ -2188,18 +2128,19 @@ let assignment_kind (init: Lambda.initialization_or_assignment) = match init, ptr with | Assignment, Pointer -> Caml_modify - | Heap_initialization, Pointer -> Caml_initialize + | Heap_initialization, Pointer + | Root_initialization, Pointer -> Caml_initialize | Assignment, Immediate | Heap_initialization, Immediate - | Root_initialization, (Immediate | Pointer) -> Simple + | Root_initialization, Immediate -> Simple let setfield n ptr init arg1 arg2 dbg = match assignment_kind ptr init with | Caml_modify -> return_unit dbg (Cop(Cextcall("caml_modify", typ_void, [], false), - [field_address arg1 n dbg; arg2], - dbg)) + [field_address arg1 n dbg; arg2], + dbg)) | Caml_initialize -> return_unit dbg (Cop(Cextcall("caml_initialize", typ_void, [], false), @@ -2278,7 +2219,7 @@ let int_comp_caml cmp arg1 arg2 dbg = [arg1; arg2], dbg)) dbg let stringref_unsafe arg1 arg2 dbg = - tag_int(Cop(Cload (Byte_unsigned, Mutable), + tag_int(Cop(mk_load_mut Byte_unsigned, [add_int arg1 (untag_int arg2 dbg) dbg], dbg)) dbg @@ -2288,7 +2229,7 @@ let stringref_safe arg1 arg2 dbg = bind "str" arg1 (fun str -> Csequence( make_checkbound dbg [string_length str dbg; idx], - Cop(Cload (Byte_unsigned, Mutable), + Cop(mk_load_mut Byte_unsigned, [add_int str idx dbg], dbg))))) dbg let string_load size unsafe arg1 arg2 dbg = @@ -2301,10 +2242,10 @@ let string_load size unsafe arg1 arg2 dbg = let bigstring_load size unsafe arg1 arg2 dbg = box_sized size dbg - (bind "index" (untag_int arg2 dbg) (fun idx -> - bind "ba" arg1 (fun ba -> - bind "ba_data" - (Cop(Cload (Word_int, Mutable), [field_address ba 1 dbg], dbg)) + (bind "index" (untag_int arg2 dbg) (fun idx -> + bind "ba" arg1 (fun ba -> + bind "ba_data" + (Cop(mk_load_mut Word_int, [field_address ba 1 dbg], dbg)) (fun ba_data -> check_bound unsafe size dbg (bigstring_length ba dbg) @@ -2335,7 +2276,7 @@ let arrayref_safe kind arg1 arg2 dbg = | Pgenarray -> bind "index" arg2 (fun idx -> bind "arr" arg1 (fun arr -> - bind "header" (get_header_without_profinfo arr dbg) (fun hdr -> + bind "header" (get_header_masked arr dbg) (fun hdr -> if wordsize_shift = numfloat_shift then Csequence( make_checkbound dbg [addr_array_length_shifted hdr dbg; idx], @@ -2362,7 +2303,7 @@ let arrayref_safe kind arg1 arg2 dbg = Csequence( make_checkbound dbg [ addr_array_length_shifted - (get_header_without_profinfo arr dbg) dbg; idx], + (get_header_masked arr dbg) dbg; idx], addr_array_ref arr idx dbg))) | Pintarray -> bind "index" arg2 (fun idx -> @@ -2370,7 +2311,7 @@ let arrayref_safe kind arg1 arg2 dbg = Csequence( make_checkbound dbg [ addr_array_length_shifted - (get_header_without_profinfo arr dbg) dbg; idx], + (get_header_masked arr dbg) dbg; idx], int_array_ref arr idx dbg))) | Pfloatarray -> box_float dbg ( @@ -2379,7 +2320,7 @@ let arrayref_safe kind arg1 arg2 dbg = Csequence( make_checkbound dbg [ float_array_length_shifted - (get_header_without_profinfo arr dbg) dbg; + (get_header_masked arr dbg) dbg; idx], unboxed_float_array_ref arr idx dbg)))) @@ -2438,7 +2379,7 @@ let arrayset_safe kind arg1 arg2 arg3 dbg = bind "newval" arg3 (fun newval -> bind "index" arg2 (fun idx -> bind "arr" arg1 (fun arr -> - bind "header" (get_header_without_profinfo arr dbg) (fun hdr -> + bind "header" (get_header_masked arr dbg) (fun hdr -> if wordsize_shift = numfloat_shift then Csequence( make_checkbound dbg [addr_array_length_shifted hdr dbg; idx], @@ -2470,7 +2411,7 @@ let arrayset_safe kind arg1 arg2 arg3 dbg = Csequence( make_checkbound dbg [ addr_array_length_shifted - (get_header_without_profinfo arr dbg) dbg; + (get_header_masked arr dbg) dbg; idx], addr_array_set arr idx newval dbg)))) | Pintarray -> @@ -2480,7 +2421,7 @@ let arrayset_safe kind arg1 arg2 arg3 dbg = Csequence( make_checkbound dbg [ addr_array_length_shifted - (get_header_without_profinfo arr dbg) dbg; + (get_header_masked arr dbg) dbg; idx], int_array_set arr idx newval dbg)))) | Pfloatarray -> @@ -2490,7 +2431,7 @@ let arrayset_safe kind arg1 arg2 arg3 dbg = Csequence( make_checkbound dbg [ float_array_length_shifted - (get_header_without_profinfo arr dbg) dbg; + (get_header_masked arr dbg) dbg; idx], float_array_set arr idx newval dbg)))) ) @@ -2509,7 +2450,7 @@ let bigstring_set size unsafe arg1 arg2 arg3 dbg = bind "index" (untag_int arg2 dbg) (fun idx -> bind "ba" arg1 (fun ba -> bind "ba_data" - (Cop(Cload (Word_int, Mutable), [field_address ba 1 dbg], dbg)) + (Cop(mk_load_mut Word_int, [field_address ba 1 dbg], dbg)) (fun ba_data -> check_bound unsafe size dbg (bigstring_length ba dbg) idx (unaligned_set size ba_data idx newval dbg)))))) @@ -2533,22 +2474,11 @@ let emit_string_constant_fields s cont = let emit_boxed_int32_constant_fields n cont = let n = Nativeint.of_int32 n in - if size_int = 8 then - Csymbol_address caml_int32_ops :: Cint32 n :: Cint32 0n :: cont - else - Csymbol_address caml_int32_ops :: Cint n :: cont + Csymbol_address caml_int32_ops :: Cint32 n :: Cint32 0n :: cont let emit_boxed_int64_constant_fields n cont = let lo = Int64.to_nativeint n in - if size_int = 8 then - Csymbol_address caml_int64_ops :: Cint lo :: cont - else begin - let hi = Int64.to_nativeint (Int64.shift_right n 32) in - if big_endian then - Csymbol_address caml_int64_ops :: Cint hi :: Cint lo :: cont - else - Csymbol_address caml_int64_ops :: Cint lo :: Cint hi :: cont - end + Csymbol_address caml_int64_ops :: Cint lo :: cont let emit_boxed_nativeint_constant_fields n cont = Csymbol_address caml_nativeint_ops :: Cint n :: cont @@ -2585,7 +2515,7 @@ let entry_point namelist = let incr_global_inited () = Cop(Cstore (Word_int, Assignment), [cconst_symbol "caml_globals_inited"; - Cop(Caddi, [Cop(Cload (Word_int, Mutable), + Cop(Caddi, [Cop(mk_load_mut Word_int, [cconst_symbol "caml_globals_inited"], dbg ()); cconst_int 1], dbg ())], dbg ()) in let body = diff --git a/asmcomp/cmm_helpers.mli b/asmcomp/cmm_helpers.mli index 4fe47dd7..513b4adf 100644 --- a/asmcomp/cmm_helpers.mli +++ b/asmcomp/cmm_helpers.mli @@ -176,6 +176,10 @@ val test_bool : Debuginfo.t -> expression -> expression val box_float : Debuginfo.t -> expression -> expression val unbox_float : Debuginfo.t -> expression -> expression +(** Conversions for 16-bit floats *) +val float_of_float16 : Debuginfo.t -> expression -> expression +val float16_of_float : Debuginfo.t -> expression -> expression + (** Complex number creation and access *) val box_complex : Debuginfo.t -> expression -> expression -> expression val complex_re : expression -> Debuginfo.t -> expression @@ -189,6 +193,12 @@ val remove_unit : expression -> expression (** Blocks *) +(** Non-atomic load of a mutable field *) +val mk_load_mut : memory_chunk -> operation + +(** Atomic load. All atomic fields are mutable. *) +val mk_load_atomic : memory_chunk -> operation + (** [field_address ptr n dbg] returns an expression for the address of the [n]th field of the block pointed to by [ptr] *) val field_address : expression -> int -> Debuginfo.t -> expression @@ -207,9 +217,8 @@ val set_field : (** Load a block's header *) val get_header : expression -> Debuginfo.t -> expression -(** Same as [get_header], but also set all profiling bits of the header - are to 0 (if profiling is enabled) *) -val get_header_without_profinfo : expression -> Debuginfo.t -> expression +(** Same as [get_header], but also clear all reserved bits of the result *) +val get_header_masked : expression -> Debuginfo.t -> expression (** Load a block's tag *) val get_tag : expression -> Debuginfo.t -> expression @@ -231,8 +240,7 @@ val is_addr_array_ptr : expression -> Debuginfo.t -> expression Shifts by one bit less than necessary, keeping one of the GC colour bits, to save an operation when returning the length as a caml integer or when comparing it to a caml integer. - Assumes the header does not have any profiling info - (as returned by get_header_without_profinfo) *) + Assumes that the reserved bits are clear (see get_header_masked) *) val addr_array_length_shifted : expression -> Debuginfo.t -> expression val float_array_length_shifted : expression -> Debuginfo.t -> expression diff --git a/asmcomp/cmm_invariants.ml b/asmcomp/cmm_invariants.ml index df102df7..92b605fe 100644 --- a/asmcomp/cmm_invariants.ml +++ b/asmcomp/cmm_invariants.ml @@ -125,7 +125,7 @@ end let rec check env (expr : Cmm.expression) = match expr with | Cconst_int _ | Cconst_natint _ | Cconst_float _ | Cconst_symbol _ - | Cvar _ -> + | Cvar _ | Creturn_addr -> () | Clet (_, expr, body) | Clet_mut (_, _, expr, body) -> diff --git a/asmcomp/cmm_invariants.mli b/asmcomp/cmm_invariants.mli index 4d1ffa91..722f73f6 100644 --- a/asmcomp/cmm_invariants.mli +++ b/asmcomp/cmm_invariants.mli @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -(* Check a number of continuation-related invariants *) +(** Check a number of continuation-related invariants *) (* Currently, this checks that : - Every use of a continuation occurs within the scope of its handler @@ -32,5 +32,4 @@ (** [run ppf fundecl] analyses the given function, and returns whether any errors were encountered (with corresponding error messages printed on the given formatter). *) - val run : Format.formatter -> Cmm.fundecl -> bool diff --git a/asmcomp/cmmgen.ml b/asmcomp/cmmgen.ml index a004702d..3be9e40e 100644 --- a/asmcomp/cmmgen.ml +++ b/asmcomp/cmmgen.ml @@ -18,10 +18,8 @@ [@@@ocaml.warning "-40"] open Misc -open Arch open Asttypes open Primitive -open Types open Lambda open Clambda open Clambda_primitives @@ -117,61 +115,15 @@ let mut_from_env env ptr = else Mutable | _ -> Mutable -let get_field env ptr n dbg = - let mut = mut_from_env env ptr in - get_field_gen mut ptr n dbg - -type rhs_kind = - | RHS_block of int - | RHS_infix of { blocksize : int; offset : int } - | RHS_floatblock of int - | RHS_nonrec -;; +(* Minimum of two [mutable_flag] values, assuming [Immutable < Mutable]. *) +let min_mut x y = + match x,y with + | Immutable,_ | _,Immutable -> Immutable + | Mutable,Mutable -> Mutable -let rec expr_size env = function - | Uvar id -> - begin try V.find_same id env with Not_found -> RHS_nonrec end - | Uclosure(fundecls, clos_vars) -> - RHS_block (fundecls_size fundecls + List.length clos_vars) - | Ulet(_str, _kind, id, exp, body) -> - expr_size (V.add (VP.var id) (expr_size env exp) env) body - | Uletrec(bindings, body) -> - let env = - List.fold_right - (fun (id, exp) env -> V.add (VP.var id) (expr_size env exp) env) - bindings env - in - expr_size env body - | Uprim(Pmakeblock _, args, _) -> - RHS_block (List.length args) - | Uprim(Pmakearray((Paddrarray | Pintarray), _), args, _) -> - RHS_block (List.length args) - | Uprim(Pmakearray(Pfloatarray, _), args, _) -> - RHS_floatblock (List.length args) - | Uprim(Pmakearray(Pgenarray, _), _, _) -> - (* Pgenarray is excluded from recursive bindings by the - check in Translcore.check_recursive_lambda *) - RHS_nonrec - | Uprim (Pduprecord ((Record_regular | Record_inlined _), sz), _, _) -> - RHS_block sz - | Uprim (Pduprecord (Record_unboxed _, _), _, _) -> - assert false - | Uprim (Pduprecord (Record_extension _, sz), _, _) -> - RHS_block (sz + 1) - | Uprim (Pduprecord (Record_float, sz), _, _) -> - RHS_floatblock sz - | Uprim (Pccall { prim_name; _ }, closure::_, _) - when prim_name = "caml_check_value_is_closure" -> - (* Used for "-clambda-checks". *) - expr_size env closure - | Usequence(_exp, exp') -> - expr_size env exp' - | Uoffset (exp, offset) -> - (match expr_size env exp with - | RHS_block blocksize -> RHS_infix { blocksize; offset } - | RHS_nonrec -> RHS_nonrec - | _ -> assert false) - | _ -> RHS_nonrec +let get_field env mut ptr n dbg = + let mut = min_mut mut (mut_from_env env ptr) in + get_field_gen mut ptr n dbg (* Translate structured constants to Cmm data items *) @@ -246,7 +198,6 @@ let box_int dbg bi arg = let typ_of_boxed_number = function | Boxed_float _ -> Cmm.typ_float - | Boxed_integer (Pint64, _) when size_int = 4 -> [|Int;Int|] | Boxed_integer _ -> Cmm.typ_int let equal_unboxed_integer ui1 ui2 = @@ -405,6 +356,13 @@ let rec transl env e = | [] -> Debuginfo.none | fundecl::_ -> fundecl.dbg in + (* #11482, #12481: the 'clos_vars' may be arbitrary expressions + and may invoke the GC, which would be able to observe the + partially-filled block. This is safe because 'make_alloc' + evaluates and fills fields from left to right, and does not + call a GC between the allocation and filling fields. So the + closure metadata, which comes before the closure variables, + will always have been written before a GC can happen. *) make_alloc dbg Obj.closure_tag (transl_fundecls 0 fundecls) | Uoffset(arg, offset) -> (* produces a valid Caml value, pointing just after an infix header *) @@ -449,8 +407,6 @@ let rec transl env e = Some defining_expr in Cphantom_let (var, defining_expr, transl env body) - | Uletrec(bindings, body) -> - transl_letrec env bindings (transl env body) (* Primitives *) | Uprim(prim, args, dbg) -> @@ -489,7 +445,8 @@ let rec transl env e = bigarray_get unsafe elt_kind layout (transl env arg1) (List.map (transl env) argl) dbg in begin match elt_kind with - Pbigarray_float32 | Pbigarray_float64 -> box_float dbg elt + | Pbigarray_float16 -> box_float dbg (float_of_float16 dbg elt) + | Pbigarray_float32 | Pbigarray_float64 -> box_float dbg elt | Pbigarray_complex32 | Pbigarray_complex64 -> elt | Pbigarray_int32 -> box_int dbg Pint32 elt | Pbigarray_int64 -> box_int dbg Pint64 elt @@ -505,7 +462,9 @@ let rec transl env e = (transl env arg1) (List.map (transl env) argidx) (match elt_kind with - Pbigarray_float32 | Pbigarray_float64 -> + | Pbigarray_float16 -> + float16_of_float dbg (transl_unbox_float dbg env argnewval) + | Pbigarray_float32 | Pbigarray_float64 -> transl_unbox_float dbg env argnewval | Pbigarray_complex32 | Pbigarray_complex64 -> transl env argnewval | Pbigarray_int32 -> transl_unbox_int dbg env Pint32 argnewval @@ -521,15 +480,25 @@ let rec transl env e = dbg) | (Pbigarraydim(n), [b]) -> let dim_ofs = 4 + n in - tag_int (Cop(Cload (Word_int, Mutable), + tag_int (Cop(mk_load_mut Word_int, [field_address (transl env b) dim_ofs dbg], dbg)) dbg + | (Pintcomp _ as comp, + [Uprim(Pcompare_ints, [arg1; arg2], _); + Uconst(Uconst_int 0)]) -> + transl env (Uprim (comp, [arg1; arg2], dbg)) + | (Pintcomp comp, + [Uprim(Pcompare_bints b, [arg1; arg2], _); + Uconst(Uconst_int 0)]) -> + transl env (Uprim (Pbintcomp (b, comp), [arg1; arg2], dbg)) | (p, [arg]) -> transl_prim_1 env p arg dbg | (p, [arg1; arg2]) -> transl_prim_2 env p arg1 arg2 dbg | (p, [arg1; arg2; arg3]) -> transl_prim_3 env p arg1 arg2 arg3 dbg + | (p, [arg1; arg2; arg3; arg4]) -> + transl_prim_4 env p arg1 arg2 arg3 arg4 dbg | (Pread_symbol _, _::_::_::_::_) | (Pbigarrayset (_, _, _, _), []) | (Pbigarrayref (_, _, _, _), []) @@ -537,6 +506,10 @@ let rec transl env e = -> fatal_error "Cmmgen.transl:prim, wrong arity" | ((Pfield_computed|Psequand + | Prunstack | Pperform | Presume | Preperform + | Pdls_get + | Patomic_load _ | Patomic_exchange + | Patomic_cas | Patomic_fetch_add | Psequor | Pnot | Pnegint | Paddint | Psubint | Pmulint | Pandint | Porint | Pxorint | Plslint | Plsrint | Pasrint | Pintoffloat | Pfloatofint @@ -679,7 +652,7 @@ let rec transl env e = end | Uunreachable -> let dbg = Debuginfo.none in - Cop(Cload (Word_int, Mutable), [Cconst_int (0, dbg)], dbg) + Cop(mk_load_mut Word_int, [Cconst_int (0, dbg)], dbg) and transl_catch env nfail ids body handler dbg = let ids = List.map (fun (id, kind) -> (id, kind, ref No_result)) ids in @@ -759,7 +732,7 @@ and transl_ccall env prim args dbg = | Pint32 -> XInt32 | Pint64 -> XInt64 in (xty, transl_unbox_int dbg env bi arg) - | Untagged_int -> + | Untagged_immediate -> (XInt, untag_int (transl env arg) dbg) in let rec transl_args native_repr_args args = @@ -779,10 +752,8 @@ and transl_ccall env prim args dbg = match prim.prim_native_repr_res with | Same_as_ocaml_repr -> (typ_val, fun x -> x) | Unboxed_float -> (typ_float, box_float dbg) - | Unboxed_integer Pint64 when size_int = 4 -> - ([|Int; Int|], box_int dbg Pint64) | Unboxed_integer bi -> (typ_int, box_int dbg bi) - | Untagged_int -> (typ_int, (fun i -> tag_int i dbg)) + | Untagged_immediate -> (typ_int, (fun i -> tag_int i dbg)) in let typ_args, args = transl_args prim.prim_native_repr_args args in wrap_result @@ -795,8 +766,8 @@ and transl_prim_1 env p arg dbg = Popaque -> opaque (transl env arg) dbg (* Heap operations *) - | Pfield n -> - get_field env (transl env arg) n dbg + | Pfield(n, _, mut) -> + get_field env mut (transl env arg) n dbg | Pfloatfield n -> let ptr = transl env arg in box_float dbg (floatfield n ptr dbg) @@ -852,7 +823,22 @@ and transl_prim_1 env p arg dbg = | Pbswap16 -> tag_int (bswap16 (ignore_high_bit_int (untag_int (transl env arg) dbg)) dbg) dbg + | Pperform -> + let cont = + make_alloc dbg Obj.cont_tag [int_const dbg 0; int_const dbg 0] + in + Cop(Capply typ_val, + [Cconst_symbol ("caml_perform", dbg); transl env arg; cont], + dbg) + | Pdls_get -> + Cop(Cdls_get, [transl env arg], dbg) + | Patomic_load {immediate_or_pointer = Immediate} -> + Cop(mk_load_atomic Word_int, [transl env arg], dbg) + | Patomic_load {immediate_or_pointer = Pointer} -> + Cop(mk_load_atomic Word_val, [transl env arg], dbg) | (Pfield_computed | Psequand | Psequor + | Prunstack | Presume | Preperform + | Patomic_exchange | Patomic_cas | Patomic_fetch_add | Paddint | Psubint | Pmulint | Pandint | Porint | Pxorint | Plslint | Plsrint | Pasrint | Paddfloat | Psubfloat | Pmulfloat | Pdivfloat @@ -1036,6 +1022,14 @@ and transl_prim_2 env p arg1 arg2 dbg = tag_int (Cop(Ccmpi cmp, [transl_unbox_int dbg env bi arg1; transl_unbox_int dbg env bi arg2], dbg)) dbg + | Patomic_exchange -> + Cop (Cextcall ("caml_atomic_exchange", typ_val, [], false), + [transl env arg1; transl env arg2], dbg) + | Patomic_fetch_add -> + Cop (Cextcall ("caml_atomic_fetch_add", typ_int, [], false), + [transl env arg1; transl env arg2], dbg) + | Prunstack | Pperform | Presume | Preperform | Pdls_get + | Patomic_cas | Patomic_load _ | Pnot | Pnegint | Pintoffloat | Pfloatofint | Pnegfloat | Pabsfloat | Pstringlength | Pbyteslength | Pbytessetu | Pbytessets | Pisint | Pbswap16 | Pint_as_pointer | Popaque | Pread_symbol _ @@ -1087,6 +1081,59 @@ and transl_prim_3 env p arg1 arg2 arg3 dbg = bigstring_set size unsafe (transl env arg1) (transl env arg2) (transl_unbox_sized size dbg env arg3) dbg + | Patomic_cas -> + Cop (Cextcall ("caml_atomic_cas", typ_int, [], false), + [transl env arg1; transl env arg2; transl env arg3], dbg) + + (* Effects *) + + | Prunstack -> + Cop (Capply typ_val, + [Cconst_symbol ("caml_runstack", dbg); + transl env arg1; transl env arg2; transl env arg3], + dbg) + + | Preperform -> + Cop (Capply typ_val, + [Cconst_symbol ("caml_reperform", dbg); + transl env arg1; transl env arg2; transl env arg3], + dbg) + + | Pperform | Pdls_get | Presume + | Patomic_exchange | Patomic_fetch_add | Patomic_load _ + | Pfield_computed | Psequand | Psequor | Pnot | Pnegint | Paddint + | Psubint | Pmulint | Pandint | Porint | Pxorint | Plslint | Plsrint | Pasrint + | Pintoffloat | Pfloatofint | Pnegfloat | Pabsfloat | Paddfloat | Psubfloat + | Pmulfloat | Pdivfloat | Pstringlength | Pstringrefu | Pstringrefs + | Pbyteslength | Pbytesrefu | Pbytesrefs | Pisint | Pisout + | Pbswap16 | Pint_as_pointer | Popaque | Pread_symbol _ | Pmakeblock (_, _, _) + | Pfield _ | Psetfield (_, _, _) | Pfloatfield _ | Psetfloatfield (_, _) + | Pduprecord (_, _) | Pccall _ | Praise _ | Pdivint _ | Pmodint _ | Pintcomp _ + | Pcompare_ints | Pcompare_floats | Pcompare_bints _ + | Poffsetint _ | Poffsetref _ | Pfloatcomp _ | Pmakearray (_, _) + | Pduparray (_, _) | Parraylength _ | Parrayrefu _ | Parrayrefs _ + | Pbintofint _ | Pintofbint _ | Pcvtbint (_, _) | Pnegbint _ | Paddbint _ + | Psubbint _ | Pmulbint _ | Pdivbint _ | Pmodbint _ | Pandbint _ | Porbint _ + | Pxorbint _ | Plslbint _ | Plsrbint _ | Pasrbint _ | Pbintcomp (_, _) + | Pbigarrayref (_, _, _, _) | Pbigarrayset (_, _, _, _) | Pbigarraydim _ + | Pstring_load _ | Pbytes_load _ | Pbigstring_load _ | Pbbswap _ + -> + fatal_errorf "Cmmgen.transl_prim_3: %a" + Printclambda_primitives.primitive p + +and transl_prim_4 env p arg1 arg2 arg3 arg4 dbg = + match p with + | Presume -> + Cop (Capply typ_val, + [Cconst_symbol ("caml_resume", dbg); + transl env arg1; transl env arg2; + transl env arg3; transl env arg4], + dbg) + | Psetfield_computed _ + | Pbytessetu | Pbytessets | Parraysetu _ + | Parraysets _ | Pbytes_set _ | Pbigstring_set _ | Patomic_cas + | Prunstack | Preperform | Pperform | Pdls_get + | Patomic_exchange | Patomic_fetch_add | Patomic_load _ | Pfield_computed | Psequand | Psequor | Pnot | Pnegint | Paddint | Psubint | Pmulint | Pandint | Porint | Pxorint | Plslint | Plsrint | Pasrint | Pintoffloat | Pfloatofint | Pnegfloat | Pabsfloat | Paddfloat | Psubfloat @@ -1323,45 +1370,6 @@ and transl_switch dbg env arg index cases = match Array.length cases with let cases = Array.map (transl env) cases in transl_switch_clambda dbg arg index cases -and transl_letrec env bindings cont = - let dbg = Debuginfo.none in - let bsz = - List.map (fun (id, exp) -> (id, exp, expr_size V.empty exp)) - bindings - in - let op_alloc prim args = - Cop(Cextcall(prim, typ_val, [], true), args, dbg) in - let rec init_blocks = function - | [] -> fill_nonrec bsz - | (id, _exp, RHS_block sz) :: rem -> - Clet(id, op_alloc "caml_alloc_dummy" [int_const dbg sz], - init_blocks rem) - | (id, _exp, RHS_infix { blocksize; offset}) :: rem -> - Clet(id, op_alloc "caml_alloc_dummy_infix" - [int_const dbg blocksize; int_const dbg offset], - init_blocks rem) - | (id, _exp, RHS_floatblock sz) :: rem -> - Clet(id, op_alloc "caml_alloc_dummy_float" [int_const dbg sz], - init_blocks rem) - | (id, _exp, RHS_nonrec) :: rem -> - Clet (id, Cconst_int (1, dbg), init_blocks rem) - and fill_nonrec = function - | [] -> fill_blocks bsz - | (_id, _exp, - (RHS_block _ | RHS_infix _ | RHS_floatblock _)) :: rem -> - fill_nonrec rem - | (id, exp, RHS_nonrec) :: rem -> - Clet(id, transl env exp, fill_nonrec rem) - and fill_blocks = function - | [] -> cont - | (id, exp, (RHS_block _ | RHS_infix _ | RHS_floatblock _)) :: rem -> - let op = - Cop(Cextcall("caml_update_dummy", typ_void, [], false), - [Cvar (VP.var id); transl env exp], dbg) in - Csequence(op, fill_blocks rem) - | (_id, _exp, RHS_nonrec) :: rem -> - fill_blocks rem - in init_blocks bsz (* Translate a function definition *) @@ -1373,6 +1381,9 @@ let transl_function f = Afl_instrument.instrument_function (transl env body) f.dbg else transl env body in + let cmm_body = + if Config.tsan then Thread_sanitizer.instrument cmm_body else cmm_body + in let fun_codegen_options = if !Clflags.optimize_for_speed then [] @@ -1473,6 +1484,10 @@ let compunit (ulam, preallocated_blocks, constants) = (fun () -> dbg) else transl empty_env ulam in + let init_code = + if Config.tsan then Thread_sanitizer.instrument init_code + else init_code + in let c1 = [Cfunction {fun_name = Compilenv.make_symbol (Some "entry"); fun_args = []; fun_body = init_code; diff --git a/asmcomp/coloring.ml b/asmcomp/coloring.ml index f55e4bc9..57988631 100644 --- a/asmcomp/coloring.ml +++ b/asmcomp/coloring.ml @@ -198,6 +198,9 @@ let allocate_registers() = best_slot := n end done; + (* Mark this register as spilled so that we don't waste time trying + to put in in a register if we have to redo regalloc due to Reload *) + reg.spill <- true; (* Found one? *) if !best_slot >= 0 then reg.loc <- Stack(Local !best_slot) diff --git a/asmcomp/deadcode.ml b/asmcomp/deadcode.ml index 28fe153f..e390a064 100644 --- a/asmcomp/deadcode.ml +++ b/asmcomp/deadcode.ml @@ -45,8 +45,6 @@ let rec deadcode i = let s = deadcode i.next in if operation_is_pure op (* no side effects *) && Reg.disjoint_set_array s.regs i.res (* results are not used after *) - && not (Proc.regs_are_volatile i.arg) (* no stack-like hard reg *) - && not (Proc.regs_are_volatile i.res) (* is involved *) then begin assert (Array.length i.res > 0); (* sanity check *) s diff --git a/asmcomp/dune b/asmcomp/dune index 1a4d561d..fb3da106 100644 --- a/asmcomp/dune +++ b/asmcomp/dune @@ -13,13 +13,12 @@ ;************************************************************************** (rule - (targets arch.ml CSE.ml proc.ml reload.ml scheduling.ml selection.ml) + (targets arch.ml CSE.ml proc.ml reload.ml scheduling.ml selection.ml + stackframe.ml) (mode fallback) (deps (:conf ../Makefile.config) (glob_files amd64/*.ml) - (glob_files arm/*.ml) (glob_files arm64/*.ml) - (glob_files i386/*.ml) (glob_files power/*.ml) (glob_files riscv/*.ml) (glob_files s390x/*.ml)) @@ -30,9 +29,7 @@ (mode fallback) (deps (:conf ../Makefile.config) amd64/emit.mlp - arm/emit.mlp arm64/emit.mlp - i386/emit.mlp power/emit.mlp riscv/emit.mlp s390x/emit.mlp) diff --git a/asmcomp/emitaux.ml b/asmcomp/emitaux.ml index d3587c1a..e177e46b 100644 --- a/asmcomp/emitaux.ml +++ b/asmcomp/emitaux.ml @@ -35,14 +35,17 @@ let emit_printf fmt = let emit_int32 n = emit_printf "0x%lx" n -let emit_symbol esc s = +let emit_symbol s = for i = 0 to String.length s - 1 do let c = s.[i] in match c with 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' -> output_char !output_channel c | _ -> - Printf.fprintf !output_channel "%c%02x" esc (Char.code c) + if c = Compilenv.symbol_separator then + output_char !output_channel c + else + Printf.fprintf !output_channel "$%02x" (Char.code c) done let emit_string_literal s = @@ -153,13 +156,13 @@ let emit_frames a = lbl in let defnames = Hashtbl.create 7 in - let label_defname filename defname = + let label_defname filename defname loc = try - snd (Hashtbl.find defnames (filename, defname)) + snd (Hashtbl.find defnames (filename, defname, loc)) with Not_found -> let file_lbl = label_filename filename in let def_lbl = Cmm.new_label () in - Hashtbl.add defnames (filename, defname) (file_lbl, def_lbl); + Hashtbl.add defnames (filename, defname, loc) (file_lbl, def_lbl); def_lbl in let module Label_table = @@ -238,24 +241,55 @@ let emit_frames a = a.efa_def_label lbl; a.efa_string name in - let emit_defname (_filename, defname) (file_lbl, lbl) = + let emit_defname (_filename, defname, loc) (file_lbl, lbl) = + let emit_loc (start_chr, end_chr, end_offset) = + a.efa_16 start_chr; + a.efa_16 end_chr; + a.efa_32 (Int32.of_int end_offset) + in (* These must be 32-bit aligned, both because they contain a 32-bit value, and because emit_debuginfo assumes the low 2 bits of their addresses are 0. *) a.efa_align 4; a.efa_def_label lbl; a.efa_label_rel file_lbl 0l; + (* Include the additional 64-bits of location information which didn't pack + in the main 64-bit word *) + Option.iter emit_loc loc; a.efa_string defname in - let pack_info fd_raise d has_next = - let line = Int.min 0xFFFFF d.Debuginfo.dinfo_line - and char_start = Int.min 0xFF d.Debuginfo.dinfo_char_start - and char_end = Int.min 0x3FF d.Debuginfo.dinfo_char_end + let fully_pack_info fd_raise d has_next = + (* See format in caml_debuginfo_location in runtime/backtrace-nat.c *) + let open Debuginfo in + let kind = if fd_raise then 1 else 0 + and has_next = if has_next then 1 else 0 + and char_end = d.dinfo_char_end + d.dinfo_start_bol - d.dinfo_end_bol in + let char_end_offset = d.dinfo_end_bol - d.dinfo_start_bol in + Int64.(add (shift_left (of_int d.dinfo_line) 51) + (add (shift_left (of_int (d.dinfo_end_line - d.dinfo_line)) 48) + (add (shift_left (of_int d.dinfo_char_start) 42) + (add (shift_left (of_int char_end) 35) + (add (shift_left (of_int char_end_offset) 26) + (add (shift_left (of_int kind) 1) + (of_int has_next))))))) + in + let partially_pack_info fd_raise d has_next = + (* Partially packed debuginfo: + 1lllllllllmmmmmmmmddddddddddddkn + 1 - d points to a name_and_loc_info struct + l (19 bits) - start line number + m (18 bits) - offset of end line number from start + d (24 bits) - memory offset to name_and_loc_info struct + k (1 bit) - fd_raise flag + n (1 bit) - has_next flag *) + let open Debuginfo in + let start_line = Int.min 0x7FFFF d.dinfo_line + and end_line = Int.min 0x3FFFF (d.dinfo_end_line - d.dinfo_line) and kind = if fd_raise then 1 else 0 and has_next = if has_next then 1 else 0 in - Int64.(add (shift_left (of_int line) 44) - (add (shift_left (of_int char_start) 36) - (add (shift_left (of_int char_end) 26) + Int64.(add (shift_left Int64.one 63) + (add (shift_left (of_int start_line) 44) + (add (shift_left (of_int end_line) 26) (add (shift_left (of_int kind) 1) (of_int has_next))))) in @@ -267,10 +301,31 @@ let emit_frames a = a.efa_def_label lbl; let rec emit rs d rest = let open Debuginfo in - let info = pack_info rs d (rest <> []) in let defname = Scoped_location.string_of_scopes d.dinfo_scopes in + let char_end = d.dinfo_char_end + d.dinfo_start_bol - d.dinfo_end_bol in + let is_fully_packable = + d.dinfo_line <= 0xFFF + && d.dinfo_end_line - d.dinfo_line <= 0x7 + && d.dinfo_char_start <= 0x3F + && char_end <= 0x7F + && d.dinfo_end_bol - d.dinfo_start_bol <= 0x1FF + in + let info = + if is_fully_packable then + fully_pack_info rs d (rest <> []) + else + partially_pack_info rs d (rest <> []) + in + let loc = + if is_fully_packable then + None + else + Some (Int.min 0xFFFF d.dinfo_char_start, (* start_chr *) + Int.min 0xFFFF char_end, (* end_chr *) + Int.min 0x3FFFFFFF d.dinfo_char_end) (* end_offset *) + in a.efa_label_rel - (label_defname d.dinfo_file defname) + (label_defname d.dinfo_file defname loc) (Int64.to_int32 info); a.efa_32 (Int64.to_int32 (Int64.shift_right info 32)); match rest with @@ -312,12 +367,25 @@ let cfi_endproc () = if is_cfi_enabled () then emit_string "\t.cfi_endproc\n" +let cfi_remember_state () = + if is_cfi_enabled () then + emit_string "\t.cfi_remember_state\n" + +let cfi_restore_state () = + if is_cfi_enabled () then + emit_string "\t.cfi_restore_state\n" + let cfi_adjust_cfa_offset n = if is_cfi_enabled () then begin emit_string "\t.cfi_adjust_cfa_offset\t"; emit_int n; emit_string "\n"; end +let cfi_def_cfa_offset n = + if is_cfi_enabled () then begin + emit_string "\t.cfi_def_cfa_offset\t"; emit_int n; emit_string "\n"; + end + let cfi_offset ~reg ~offset = if is_cfi_enabled () then begin emit_string "\t.cfi_offset "; @@ -327,6 +395,13 @@ let cfi_offset ~reg ~offset = emit_string "\n" end +let cfi_def_cfa_register ~reg = + if is_cfi_enabled () then begin + emit_string "\t.cfi_def_cfa_register "; + emit_int reg; + emit_string "\n" + end + (* Emit debug information *) (* This assoc list is expected to be very short *) @@ -398,8 +473,4 @@ let mk_env f : Emitenv.per_function_env = jumptables = []; float_literals = []; int_literals = []; - offset_literals = []; - gotrel_literals = []; - symbol_literals = []; - size_literals = 0; } diff --git a/asmcomp/emitaux.mli b/asmcomp/emitaux.mli index df0b0197..e5bead1e 100644 --- a/asmcomp/emitaux.mli +++ b/asmcomp/emitaux.mli @@ -20,7 +20,7 @@ val emit_string: string -> unit val emit_int: int -> unit val emit_nativeint: nativeint -> unit val emit_int32: int32 -> unit -val emit_symbol: char -> string -> unit +val emit_symbol: string -> unit val emit_printf: ('a, out_channel, unit) format -> 'a val emit_char: char -> unit val emit_string_literal: string -> unit @@ -70,6 +70,10 @@ val cfi_startproc : unit -> unit val cfi_endproc : unit -> unit val cfi_adjust_cfa_offset : int -> unit val cfi_offset : reg:int -> offset:int -> unit +val cfi_def_cfa_offset : int -> unit +val cfi_remember_state : unit -> unit +val cfi_restore_state : unit -> unit +val cfi_def_cfa_register: reg:int -> unit val binary_backend_available: bool ref (** Is a binary backend available. If yes, we don't need diff --git a/asmcomp/emitenv.mli b/asmcomp/emitenv.mli index 81638542..fcd2c57d 100644 --- a/asmcomp/emitenv.mli +++ b/asmcomp/emitenv.mli @@ -72,8 +72,7 @@ type per_function_env = { mutable call_gc_sites : gc_call list; (* used in all targets except power *) mutable call_gc_label : label; (* used only in power *) mutable bound_error_sites : bound_error_call list; - (* used in all targets except power *) - mutable bound_error_call : label option; (* used in amd64,i386,s390x *) + mutable bound_error_call : label option; (* used in amd64,power,s390x *) (* record jump tables (for PPC64). In order to reduce the size of the TOC, we concatenate all jumptables and emit them at the end of the function. *) @@ -81,12 +80,6 @@ type per_function_env = { mutable jumptables : label list; (* in reverse order *) (* pending literals *) - mutable float_literals : float_literal list; (* in all except amd64,i386 *) + mutable float_literals : float_literal list; (* in all except amd64 *) mutable int_literals : int_literal list; (* used only in s390x *) - mutable offset_literals : offset_computation list; (* used only in arm *) - mutable gotrel_literals : gotrel_literal list; (* used only in arm *) - mutable symbol_literals : symbol_literal list; (* used only in arm *) - (* [size_literals] is the total space (in words) occupied - by pending literals. *) - mutable size_literals : int; (* used only in arm *) } diff --git a/asmcomp/i386/CSE.ml b/asmcomp/i386/CSE.ml deleted file mode 100644 index 4aba4db6..00000000 --- a/asmcomp/i386/CSE.ml +++ /dev/null @@ -1,50 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) -(* *) -(* Copyright 2014 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* CSE for the i386 *) - -open Cmm -open Arch -open Mach -open CSEgen - -class cse = object - -inherit cse_generic as super - -method! class_of_operation op = - match op with - (* Operations that affect the floating-point stack cannot be factored *) - | Iconst_float _ | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf - | Iintoffloat | Ifloatofint - | Iload((Single | Double), _, _) -> Op_other - (* Specific ops *) - | Ispecific(Ilea _) -> Op_pure - | Ispecific(Istore_int(_, _, is_asg)) -> Op_store is_asg - | Ispecific(Istore_symbol(_, _, is_asg)) -> Op_store is_asg - | Ispecific(Ioffset_loc(_, _)) -> Op_store true - | Ispecific _ -> Op_other - | _ -> super#class_of_operation op - -method! is_cheap_operation op = - match op with - | Iconst_int _ -> true - | Iconst_symbol _ -> true - | _ -> false - -end - -let fundecl f = - (new cse)#fundecl f diff --git a/asmcomp/i386/NOTES.md b/asmcomp/i386/NOTES.md deleted file mode 100644 index 69567cbd..00000000 --- a/asmcomp/i386/NOTES.md +++ /dev/null @@ -1,23 +0,0 @@ -# Supported platforms - -Intel and AMD x86 processors in 32-bit mode. -The baseline is the 80486, also known as `i486`. -(Debian's baseline is now the Pentium 1.) - -In OCaml versions 3.09.2 to 4.08, MacOS was supported by this port. Support -was removed in OCaml 4.09. - -Floating-point architecture: x87. -(SSE2 not available in Debian's baseline.) - -Operating systems: Linux, BSD, MS Windows. - -Debian architecture name: `i386` - -# Reference documents - -* Instruction set architecture: - any Intel or AMD manual of the last 20 years. -* ELF application binary interface: - _System V Application Binary Interface, - Intel386 Architecture Processor Supplement_ diff --git a/asmcomp/i386/arch.ml b/asmcomp/i386/arch.ml deleted file mode 100644 index 21057b36..00000000 --- a/asmcomp/i386/arch.ml +++ /dev/null @@ -1,176 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Machine-specific command-line options *) - -let fast_math = ref false - -let command_line_options = - [ "-ffast-math", Arg.Set fast_math, - " Inline trigonometric and exponential functions" ] - -(* Specific operations for the Intel 386 processor *) - -open Format - -type addressing_mode = - Ibased of string * int (* symbol + displ *) - | Iindexed of int (* reg + displ *) - | Iindexed2 of int (* reg + reg + displ *) - | Iscaled of int * int (* reg * scale + displ *) - | Iindexed2scaled of int * int (* reg + reg * scale + displ *) - -type specific_operation = - Ilea of addressing_mode (* Lea gives scaled adds *) - | Istore_int of nativeint * addressing_mode * bool - (* Store an integer constant *) - | Istore_symbol of string * addressing_mode * bool (* Store a symbol *) - | Ioffset_loc of int * addressing_mode (* Add a constant to a location *) - | Ipush (* Push regs on stack *) - | Ipush_int of nativeint (* Push an integer constant *) - | Ipush_symbol of string (* Push a symbol *) - | Ipush_load of addressing_mode (* Load a scalar and push *) - | Ipush_load_float of addressing_mode (* Load a float and push *) - | Isubfrev | Idivfrev (* Reversed float sub and div *) - | Ifloatarithmem of bool * float_operation * addressing_mode - (* Float arith operation with memory *) - (* bool: true=64 bits, false=32 *) - | Ifloatspecial of string - -and float_operation = - Ifloatadd | Ifloatsub | Ifloatsubrev | Ifloatmul | Ifloatdiv | Ifloatdivrev - -(* Sizes, endianness *) - -let big_endian = false - -let size_addr = 4 -let size_int = 4 -let size_float = 8 - -let allow_unaligned_access = true - -(* Behavior of division *) - -let division_crashes_on_overflow = true - -(* Operations on addressing modes *) - -let identity_addressing = Iindexed 0 - -let offset_addressing addr delta = - match addr with - Ibased(s, n) -> Ibased(s, n + delta) - | Iindexed n -> Iindexed(n + delta) - | Iindexed2 n -> Iindexed2(n + delta) - | Iscaled(scale, n) -> Iscaled(scale, n + delta) - | Iindexed2scaled(scale, n) -> Iindexed2scaled(scale, n + delta) - -let num_args_addressing = function - Ibased _ -> 0 - | Iindexed _ -> 1 - | Iindexed2 _ -> 2 - | Iscaled _ -> 1 - | Iindexed2scaled _ -> 2 - -(* Printing operations and addressing modes *) - -let print_addressing printreg addr ppf arg = - match addr with - | Ibased(s, 0) -> - fprintf ppf "\"%s\"" s - | Ibased(s, n) -> - fprintf ppf "\"%s\" + %i" s n - | Iindexed n -> - let idx = if n <> 0 then Printf.sprintf " + %i" n else "" in - fprintf ppf "%a%s" printreg arg.(0) idx - | Iindexed2 n -> - let idx = if n <> 0 then Printf.sprintf " + %i" n else "" in - fprintf ppf "%a + %a%s" printreg arg.(0) printreg arg.(1) idx - | Iscaled(scale, n) -> - let idx = if n <> 0 then Printf.sprintf " + %i" n else "" in - fprintf ppf "%a * %i%s" printreg arg.(0) scale idx - | Iindexed2scaled(scale, n) -> - let idx = if n <> 0 then Printf.sprintf " + %i" n else "" in - fprintf ppf "%a + %a * %i%s" printreg arg.(0) printreg arg.(1) scale idx - -let print_specific_operation printreg op ppf arg = - match op with - | Ilea addr -> print_addressing printreg addr ppf arg - | Istore_int(n, addr, is_assign) -> - fprintf ppf "[%a] := %nd %s" - (print_addressing printreg addr) arg n - (if is_assign then "(assign)" else "(init)") - | Istore_symbol(lbl, addr, is_assign) -> - fprintf ppf "[%a] := \"%s\" %s" - (print_addressing printreg addr) arg lbl - (if is_assign then "(assign)" else "(init)") - | Ioffset_loc(n, addr) -> - fprintf ppf "[%a] +:= %i" (print_addressing printreg addr) arg n - | Ipush -> - fprintf ppf "push "; - for i = 0 to Array.length arg - 1 do - if i > 0 then fprintf ppf ", "; - printreg ppf arg.(i) - done - | Ipush_int n -> - fprintf ppf "push %s" (Nativeint.to_string n) - | Ipush_symbol s -> - fprintf ppf "push \"%s\"" s - | Ipush_load addr -> - fprintf ppf "push [%a]" (print_addressing printreg addr) arg - | Ipush_load_float addr -> - fprintf ppf "pushfloat [%a]" (print_addressing printreg addr) arg - | Isubfrev -> - fprintf ppf "%a -f(rev) %a" printreg arg.(0) printreg arg.(1) - | Idivfrev -> - fprintf ppf "%a /f(rev) %a" printreg arg.(0) printreg arg.(1) - | Ifloatarithmem(double, op, addr) -> - let op_name = function - | Ifloatadd -> "+f" - | Ifloatsub -> "-f" - | Ifloatsubrev -> "-f(rev)" - | Ifloatmul -> "*f" - | Ifloatdiv -> "/f" - | Ifloatdivrev -> "/f(rev)" in - let long = if double then "float64" else "float32" in - fprintf ppf "%a %s %s[%a]" printreg arg.(0) (op_name op) long - (print_addressing printreg addr) (Array.sub arg 1 (Array.length arg - 1)) - | Ifloatspecial name -> - fprintf ppf "%s " name; - for i = 0 to Array.length arg - 1 do - if i > 0 then fprintf ppf ", "; - printreg ppf arg.(i) - done - -(* Stack alignment constraints *) - -let stack_alignment = - match Config.system with - | "win32" -> 4 (* MSVC *) - | _ -> 16 - (* PR#6038: GCC and Clang seem to require 16-byte alignment nowadays *) - -(* Specific operations that are pure *) - -let operation_is_pure = function - | Ilea _ -> true - | _ -> false -(* x87 floating-point operations are not pure because they push and pop - on the FP stack as a side effect *) - -(* Specific operations that can raise *) - -let operation_can_raise _ = false diff --git a/asmcomp/i386/emit.mlp b/asmcomp/i386/emit.mlp deleted file mode 100644 index b76af368..00000000 --- a/asmcomp/i386/emit.mlp +++ /dev/null @@ -1,1031 +0,0 @@ -#2 "asmcomp/i386/emit.mlp" -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Emission of Intel 386 assembly code *) - -open Misc -open Cmm -open Arch -open Proc -open Reg -open Mach -open Linear -open Emitaux -open Emitenv -module String = Misc.Stdlib.String - -open X86_ast -open X86_proc -open X86_dsl - -let _label s = D.label ~typ:DWORD s - -let mem_sym typ ?(ofs = 0) sym = - mem32 typ ~scale:0 ?base:None ~sym ofs RAX (*ignored since scale=0*) - -(* CFI directives *) - -let cfi_startproc () = - if Config.asm_cfi_supported then D.cfi_startproc () - -let cfi_endproc () = - if Config.asm_cfi_supported then D.cfi_endproc () - -let cfi_adjust_cfa_offset n = - if Config.asm_cfi_supported then D.cfi_adjust_cfa_offset n - -let emit_debug_info dbg = - emit_debug_info_gen dbg D.file D.loc - -let frame_size env = (* includes return address *) - let sz = - env.stack_offset - + 4 * env.f.fun_num_stack_slots.(0) - + 8 * env.f.fun_num_stack_slots.(1) + 4 - in Misc.align sz stack_alignment - -let slot_offset env loc cl = - match loc with - | Incoming n -> - assert (n >= 0); - frame_size env + n - | Local n -> - if cl = 0 - then env.stack_offset + n * 4 - else env.stack_offset + env.f.fun_num_stack_slots.(0) * 4 + n * 8 - | Outgoing n -> - assert (n >= 0); - n - | Domainstate _ -> assert false (* not a stack slot *) - -(* Record symbols used and defined - at the end generate extern for those - used but not defined *) - -let symbols_defined = ref String.Set.empty -let symbols_used = ref String.Set.empty - -let add_def_symbol s = symbols_defined := String.Set.add s !symbols_defined -let add_used_symbol s = symbols_used := String.Set.add s !symbols_used - -let trap_frame_size = Misc.align 8 stack_alignment - -(* Prefixing of symbols with "_" *) - -let symbol_prefix = - match system with - | S_linux_elf -> "" - | S_bsd_elf -> "" - | S_solaris -> "" - | S_beos -> "" - | S_gnu -> "" - | _ -> "_" (* win32 & others *) - -let emit_symbol s = string_of_symbol symbol_prefix s - -let immsym s = sym (emit_symbol s) - -let emit_call s = I.call (immsym s) - -(* Output a label *) - -let label_prefix = - match system with - | S_linux_elf -> ".L" - | S_bsd_elf -> ".L" - | S_solaris -> ".L" - | S_beos -> ".L" - | S_gnu -> ".L" - | _ -> "L" - -let emit_label lbl = - Printf.sprintf "%s%d" label_prefix lbl - -let label s = sym (emit_label s) - -let def_label s = D.label (emit_label s) - -let emit_Llabel env fallthrough lbl = - if not fallthrough && env.f.fun_fast then D.align 16 ; - def_label lbl - -(* Output a pseudo-register *) - -let int_reg_name = [| RAX; RBX; RCX; RDX; RSI; RDI; RBP |] - -let float_reg_name = [| TOS |] - -let register_name r = - if r < 100 then Reg32 (int_reg_name.(r)) - else Regf (float_reg_name.(r - 100)) - -let sym32 ?ofs s = mem_sym ?ofs DWORD (emit_symbol s) - -let domain_field f r = - mem32 DWORD (Domainstate.idx_of_field f * 8) r - -let load_domain_state r = - I.mov (sym32 "Caml_state") r - -let x86_data_type_for_stack_slot = function - | Float -> REAL8 - | _ -> DWORD - -(* The Domainstate locations are mapped to a global array "caml_extra_params" - defined in runtime/i386*. We cannot access the domain state here - because in the i386 port there is no register that always point to the - domain state. A global array works because i386 does not - support multiple domains. *) - -let reg env = function - | { loc = Reg r } -> register_name r - | { loc = Stack(Domainstate n); typ = ty } -> - mem_sym (x86_data_type_for_stack_slot ty) - (emit_symbol "caml_extra_params") ~ofs:n - | { loc = Stack s; typ = ty } as r -> - let ofs = slot_offset env s (register_class r) in - mem32 (x86_data_type_for_stack_slot ty) ofs RSP - | { loc = Unknown } -> - fatal_error "Emit_i386.reg" - -(* Output a reference to the lower 8 bits or lower 16 bits of a register *) - -let reg_low_8_name = Array.map (fun r -> Reg8L r) int_reg_name -let reg_low_16_name = Array.map (fun r -> Reg16 r) int_reg_name - -let reg8 r = - match r.loc with - | Reg r when r < 4 -> reg_low_8_name.(r) - | _ -> fatal_error "Emit_i386.reg8" - -let reg16 r = - match r.loc with - | Reg r when r < 7 -> reg_low_16_name.(r) - | _ -> fatal_error "Emit_i386.reg16" - -let reg32 = function - | { loc = Reg.Reg r } -> int_reg_name.(r) - | _ -> assert false - -let arg32 i n = reg32 i.arg.(n) - -(* Output an addressing mode *) - -let addressing addr typ i n = - match addr with - | Ibased(s, ofs) -> - add_used_symbol s; - mem_sym typ (emit_symbol s) ~ofs - | Iindexed d -> - mem32 typ d (arg32 i n) - | Iindexed2 d -> - mem32 typ ~base:(arg32 i n) d (arg32 i (n+1)) - | Iscaled(2, d) -> - mem32 typ ~base:(arg32 i n) d (arg32 i n) - | Iscaled(scale, d) -> - mem32 typ ~scale d (arg32 i n) - | Iindexed2scaled(scale, d) -> - mem32 typ ~scale ~base:(arg32 i n) d (arg32 i (n+1)) - -(* Record live pointers at call points *) - -let record_frame_label env live dbg = - let lbl = new_label () in - let live_offset = ref [] in - Reg.Set.iter - (function - | {typ = Val; loc = Reg r} -> - live_offset := ((r lsl 1) + 1) :: !live_offset - | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset env s (register_class reg) :: !live_offset - | {typ = Addr} as r -> - Misc.fatal_error ("bad GC root " ^ Reg.name r) - | _ -> ()) - live; - record_frame_descr ~label:lbl ~frame_size:(frame_size env) - ~live_offset:!live_offset dbg; - lbl - -let record_frame env live dbg = - let lbl = record_frame_label env live dbg in - def_label lbl - -let emit_call_gc gc = - def_label gc.gc_lbl; - emit_call "caml_call_gc"; - def_label gc.gc_frame_lbl; - I.jmp (label gc.gc_return_lbl) - -let bound_error_label env dbg = - if !Clflags.debug then begin - let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in - env.bound_error_sites <- - { bd_lbl = lbl_bound_error; bd_frame = lbl_frame; } - :: env.bound_error_sites; - lbl_bound_error - end else begin - match env.bound_error_call with - | None-> - let lbl = new_label () in - env.bound_error_call <- Some lbl; - lbl - | Some lbl -> lbl - end - -let emit_call_bound_error bd = - def_label bd.bd_lbl; - emit_call "caml_ml_array_bound_error"; - def_label bd.bd_frame - -let emit_call_bound_errors env = - List.iter emit_call_bound_error env.bound_error_sites; - match env.bound_error_call with - | Some lbl -> - def_label lbl; - emit_call "caml_ml_array_bound_error" - | None -> () - -(* Names for instructions *) - -let instr_for_intop = function - | Iadd -> I.add - | Isub -> I.sub - | Imul -> (fun arg1 arg2 -> I.imul arg1 (Some arg2)) - | Iand -> I.and_ - | Ior -> I.or_ - | Ixor -> I.xor - | Ilsl -> I.sal - | Ilsr -> I.shr - | Iasr -> I.sar - | _ -> fatal_error "Emit_i386: instr_for_intop" - -let unary_instr_for_floatop = function - | Inegf -> I.fchs () - | Iabsf -> I.fabs () - | _ -> fatal_error "Emit_i386: unary_instr_for_floatop" - -let instr_for_floatop = function - | Iaddf -> I.fadd - | Isubf -> I.fsub - | Imulf -> I.fmul - | Idivf -> I.fdiv - | Ispecific Isubfrev -> I.fsubr - | Ispecific Idivfrev -> I.fdivr - | _ -> fatal_error "Emit_i386: instr_for_floatop" - -let instr_for_floatop_reversed = function - | Iaddf -> I.fadd - | Isubf -> I.fsubr - | Imulf -> I.fmul - | Idivf -> I.fdivr - | Ispecific Isubfrev -> I.fsub - | Ispecific Idivfrev -> I.fdiv - | _ -> fatal_error "Emit_i386: instr_for_floatop_reversed" - - -let instr_for_floatop_reversed_pop = function - | Iaddf -> I.faddp - | Isubf -> I.fsubrp - | Imulf -> I.fmulp - | Idivf -> I.fdivrp - | Ispecific Isubfrev -> I.fsubp - | Ispecific Idivfrev -> I.fdivp - | _ -> fatal_error "Emit_i386: instr_for_floatop_reversed_pop" - -let instr_for_floatarithmem = function - | Ifloatadd -> I.fadd - | Ifloatsub -> I.fsub - | Ifloatsubrev -> I.fsubr - | Ifloatmul -> I.fmul - | Ifloatdiv -> I.fdiv - | Ifloatdivrev -> I.fdivr - -let cond = function - | Isigned Ceq -> E | Isigned Cne -> NE - | Isigned Cle -> LE | Isigned Cgt -> G - | Isigned Clt -> L | Isigned Cge -> GE - | Iunsigned Ceq -> E | Iunsigned Cne -> NE - | Iunsigned Cle -> BE | Iunsigned Cgt -> A - | Iunsigned Clt -> B | Iunsigned Cge -> AE - -(* Output an = 0 or <> 0 test. *) - -let output_test_zero env arg = - match arg.loc with - | Reg.Reg _ -> I.test (reg env arg) (reg env arg) - | _ -> I.cmp (int 0) (reg env arg) - -(* Deallocate the stack frame before a return or tail call *) - -let output_epilogue env f = - let n = frame_size env - 4 in - if n > 0 then - begin - I.add (int n) esp; - cfi_adjust_cfa_offset (-n); - f (); - (* reset CFA back cause function body may continue *) - cfi_adjust_cfa_offset n - end - else - f () - -(* Determine if the given register is the top of the floating-point stack *) - -let is_tos = function { loc = Reg _; typ = Float } -> true | _ -> false - -(* Emit the code for a floating-point comparison *) - -let emit_float_test env cmp arg lbl = - let actual_cmp = - match (is_tos arg.(0), is_tos arg.(1)) with - | (true, true) -> - (* both args on top of FP stack *) - I.fcompp (); - cmp - | (true, false) -> - (* first arg on top of FP stack *) - I.fcomp (reg env arg.(1)); - cmp - | (false, true) -> - (* second arg on top of FP stack *) - I.fcomp (reg env arg.(0)); - Cmm.swap_float_comparison cmp - | (false, false) -> - I.fld (reg env arg.(0)); - I.fcomp (reg env arg.(1)); - cmp - in - I.fnstsw ax; - match actual_cmp with - | CFeq -> - I.and_ (int 69) ah; - I.cmp (int 64) ah; - I.je lbl - | CFneq -> - I.and_ (int 68) ah; - I.xor (int 64) ah; - I.jne lbl - | CFle -> - I.and_ (int 69) ah; - I.dec ah; - I.cmp (int 64) ah; - I.jb lbl - | CFnle -> - I.and_ (int 69) ah; - I.dec ah; - I.cmp (int 64) ah; - I.jae lbl - | CFge -> - I.and_ (int 5) ah; - I.je lbl - | CFnge -> - I.and_ (int 5) ah; - I.jne lbl - | CFlt -> - I.and_ (int 69) ah; - I.cmp (int 1) ah; - I.je lbl - | CFnlt -> - I.and_ (int 69) ah; - I.cmp (int 1) ah; - I.jne lbl - | CFgt -> - I.and_ (int 69) ah; - I.je lbl - | CFngt -> - I.and_ (int 69) ah; - I.jne lbl - -(* Emit a Ifloatspecial instruction *) - -let emit_floatspecial = function - | "atan" -> I.fld1 (); I.fpatan () - | "atan2" -> I.fpatan () - | "cos" -> I.fcos () - | "log" -> I.fldln2 (); I.fxch st1; I.fyl2x () - | "log10" -> I.fldlg2 (); I.fxch st1; I.fyl2x () - | "sin" -> I.fsin () - | "sqrt" -> I.fsqrt () - | "tan" -> I.fptan (); I.fstp st0 - | _ -> assert false - -(* Floating-point constants *) - -let float_constants = ref ([] : (int64 * int) list) - -let add_float_constant cst = - try - List.assoc cst !float_constants - with - Not_found -> - let lbl = new_label() in - float_constants := (cst, lbl) :: !float_constants; - lbl - -let emit_float64_split_directive x = - let lo = Int64.logand x 0xFFFF_FFFFL - and hi = Int64.shift_right_logical x 32 in - D.long (Const (if Arch.big_endian then hi else lo)); - D.long (Const (if Arch.big_endian then lo else hi)) - -let emit_float_constant cst lbl = - _label (emit_label lbl); - emit_float64_split_directive cst - -let emit_global_label s = - let lbl = Compilenv.make_symbol (Some s) in - add_def_symbol lbl; - let lbl = emit_symbol lbl in - D.global lbl; - _label lbl - -(* Output .text section directive, or named .text.caml. if enabled. *) - -let emit_named_text_section func_name = - if !Clflags.function_sections then - begin match system with - | S_macosx | S_mingw | S_cygwin | S_win32 -> D.text () - | _ -> D.section [ ".text.caml."^(emit_symbol func_name) ] - (Some "ax") ["@progbits"] - end - else D.text () - -(* Output the assembly code for an instruction *) -let emit_instr env fallthrough i = - let reg = reg env in - emit_debug_info i.dbg; - match i.desc with - | Lend -> () - | Lprologue -> - assert (env.f.fun_prologue_required); - let n = frame_size env - 4 in - if n > 0 then begin - I.sub (int n) esp; - cfi_adjust_cfa_offset n; - end; - | Lop(Imove | Ispill | Ireload) -> - let src = i.arg.(0) and dst = i.res.(0) in - if src.loc <> dst.loc then begin - if src.typ = Float then - if is_tos src then - I.fstp (reg dst) - else if is_tos dst then - I.fld (reg src) - else begin - I.fld (reg src); - I.fstp (reg dst) - end - else - I.mov (reg src) (reg dst) - end - | Lop(Iconst_int n) -> - if n = 0n then begin - match i.res.(0).loc with - | Reg _ -> I.xor (reg i.res.(0)) (reg i.res.(0)) - | _ -> I.mov (int 0) (reg i.res.(0)) - end else - I.mov (nat n) (reg i.res.(0)) - | Lop(Iconst_float f) -> - begin match f with - | 0x0000_0000_0000_0000L -> (* +0.0 *) - I.fldz () - | 0x8000_0000_0000_0000L -> (* -0.0 *) - I.fldz (); I.fchs () - | 0x3FF0_0000_0000_0000L -> (* 1.0 *) - I.fld1 () - | 0xBFF0_0000_0000_0000L -> (* -1.0 *) - I.fld1 (); I.fchs () - | _ -> - let lbl = add_float_constant f in - I.fld (mem_sym REAL8 (emit_label lbl)) - end - | Lop(Iconst_symbol s) -> - add_used_symbol s; - I.mov (immsym s) (reg i.res.(0)) - | Lop(Icall_ind) -> - I.call (reg i.arg.(0)); - record_frame env i.live (Dbg_other i.dbg) - | Lop(Icall_imm { func; }) -> - add_used_symbol func; - emit_call func; - record_frame env i.live (Dbg_other i.dbg) - | Lop(Itailcall_ind) -> - output_epilogue env (fun () -> I.jmp (reg i.arg.(0))) - | Lop(Itailcall_imm { func; }) -> - if func = env.f.fun_name then - I.jmp (label env.f.fun_tailrec_entry_point_label) - else begin - output_epilogue env begin fun () -> - add_used_symbol func; - I.jmp (immsym func) - end - end - | Lop(Iextcall { func; alloc; }) -> - add_used_symbol func; - if alloc then begin - I.mov (immsym func) eax; - emit_call "caml_c_call"; - record_frame env i.live (Dbg_other i.dbg) - end else begin - emit_call func - end - | Lop(Istackoffset n) -> - if n < 0 - then I.add (int (-n)) esp - else I.sub (int n) esp; - cfi_adjust_cfa_offset n; - env.stack_offset <- env.stack_offset + n - | Lop(Iload(chunk, addr, _mut)) -> - let dest = i.res.(0) in - begin match chunk with - | Word_int | Word_val | Thirtytwo_signed | Thirtytwo_unsigned -> - I.mov (addressing addr DWORD i 0) (reg dest) - | Byte_unsigned -> - I.movzx (addressing addr BYTE i 0) (reg dest) - | Byte_signed -> - I.movsx (addressing addr BYTE i 0) (reg dest) - | Sixteen_unsigned -> - I.movzx (addressing addr WORD i 0) (reg dest) - | Sixteen_signed -> - I.movsx (addressing addr WORD i 0) (reg dest) - | Single -> - I.fld (addressing addr REAL4 i 0) - | Double -> - I.fld (addressing addr REAL8 i 0) - end - | Lop(Istore(chunk, addr, _)) -> - begin match chunk with - | Word_int | Word_val | Thirtytwo_signed | Thirtytwo_unsigned -> - I.mov (reg i.arg.(0)) (addressing addr DWORD i 1) - | Byte_unsigned | Byte_signed -> - I.mov (reg8 i.arg.(0)) (addressing addr BYTE i 1) - | Sixteen_unsigned | Sixteen_signed -> - I.mov (reg16 i.arg.(0)) (addressing addr WORD i 1) - | Single -> - if is_tos i.arg.(0) then - I.fstp (addressing addr REAL4 i 1) - else begin - I.fld (reg i.arg.(0)); - I.fstp (addressing addr REAL4 i 1) - end - | Double -> - if is_tos i.arg.(0) then - I.fstp (addressing addr REAL8 i 1) - else begin - I.fld (reg i.arg.(0)); - I.fstp (addressing addr REAL8 i 1) - end - end - | Lop(Ipoll { return_label }) -> - begin match return_label with - None -> () - | Some lbl -> I.jmp (label lbl) - end - | Lop(Ialloc { bytes = n; dbginfo }) -> - if env.f.fun_fast then begin - load_domain_state ebx; - I.mov (domain_field Domain_young_ptr RBX) eax; - I.sub (int n) eax; - I.mov eax (domain_field Domain_young_ptr RBX); - I.cmp (domain_field Domain_young_limit RBX) eax; - let lbl_call_gc = new_label() in - let lbl_frame = - record_frame_label env i.live (Dbg_alloc dbginfo) in - I.jb (label lbl_call_gc); - let lbl_after_alloc = new_label() in - def_label lbl_after_alloc; - I.lea (mem32 NONE 4 RAX) (reg i.res.(0)); - env.call_gc_sites <- - { gc_lbl = lbl_call_gc; - gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame; } :: env.call_gc_sites - end else begin - begin match n with - 8 -> emit_call "caml_alloc1" - | 12 -> emit_call "caml_alloc2" - | 16 -> emit_call "caml_alloc3" - | _ -> - I.mov (int n) eax; - emit_call "caml_allocN" - end; - let label = record_frame_label env i.live (Dbg_alloc dbginfo) in - def_label label; - I.lea (mem32 NONE 4 RAX) (reg i.res.(0)) - end - | Lop(Iintop(Icomp cmp)) -> - I.cmp (reg i.arg.(1)) (reg i.arg.(0)); - I.set (cond cmp) al; - I.movzx al (reg i.res.(0)); - | Lop(Iintop_imm(Icomp cmp, n)) -> - I.cmp (int n) (reg i.arg.(0)); - I.set (cond cmp) al; - I.movzx al (reg i.res.(0)) - | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label env i.dbg in - I.cmp (reg i.arg.(1)) (reg i.arg.(0)); - I.jbe (label lbl) - | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label env i.dbg in - I.cmp (int n) (reg i.arg.(0)); - I.jbe (label lbl) - | Lop(Iintop(Idiv | Imod)) -> - I.cdq (); - I.idiv (reg i.arg.(1)) - | Lop(Iintop(Ilsl | Ilsr | Iasr as op)) -> - (* We have i.arg.(0) = i.res.(0) and i.arg.(1) = %ecx *) - instr_for_intop op cl (reg i.res.(0)) - | Lop(Iintop Imulh) -> - I.imul (reg i.arg.(1)) None - | Lop(Iintop op) -> - (* We have i.arg.(0) = i.res.(0) *) - instr_for_intop op (reg i.arg.(1)) (reg i.res.(0)) - | Lop(Iintop_imm(Iadd, n)) when i.arg.(0).loc <> i.res.(0).loc -> - I.lea (mem32 NONE n (reg32 i.arg.(0))) (reg i.res.(0)) - | Lop(Iintop_imm(Iadd, 1) | Iintop_imm(Isub, -1)) -> - I.inc (reg i.res.(0)) - | Lop(Iintop_imm(Iadd, -1) | Iintop_imm(Isub, 1)) -> - I.dec (reg i.res.(0)) - | Lop(Iintop_imm(op, n)) -> - (* We have i.arg.(0) = i.res.(0) *) - instr_for_intop op (int n) (reg i.res.(0)) - | Lop(Inegf | Iabsf as floatop) -> - if not (is_tos i.arg.(0)) then - I.fld (reg i.arg.(0)); - unary_instr_for_floatop floatop - | Lop(Iaddf | Isubf | Imulf | Idivf | Ispecific(Isubfrev | Idivfrev) - as floatop) -> - begin match (is_tos i.arg.(0), is_tos i.arg.(1)) with - (true, true) -> - (* both operands on top of FP stack *) - instr_for_floatop_reversed_pop floatop st0 st1 - | (true, false) -> - (* first operand on stack *) - instr_for_floatop floatop (reg i.arg.(1)) - | (false, true) -> - (* second operand on stack *) - instr_for_floatop_reversed floatop (reg i.arg.(0)) - | (false, false) -> - (* both operands in memory *) - I.fld (reg i.arg.(0)); - instr_for_floatop floatop (reg i.arg.(1)) - end - | Lop(Ifloatofint) -> - begin match i.arg.(0).loc with - | Stack _ -> - I.fild (reg i.arg.(0)) - | _ -> - I.push (reg i.arg.(0)); - I.fild (mem32 DWORD 0 RSP); - I.add (int 4) esp - end - | Lop(Iintoffloat) -> - if not (is_tos i.arg.(0)) then - I.fld (reg i.arg.(0)); - env.stack_offset <- env.stack_offset - 8; - I.sub (int 8) esp; - cfi_adjust_cfa_offset 8; - I.fnstcw (mem32 NONE 4 RSP); - I.mov (mem32 WORD 4 RSP) ax; - I.mov (int 12) ah; - I.mov ax (mem32 WORD 0 RSP); - I.fldcw (mem32 NONE 0 RSP); - begin match i.res.(0).loc with - | Stack _ -> - I.fistp (reg i.res.(0)) - | _ -> - I.fistp (mem32 DWORD 0 RSP); - I.mov (mem32 DWORD 0 RSP) (reg i.res.(0)) - end; - I.fldcw (mem32 NONE 4 RSP); - I.add (int 8) esp; - cfi_adjust_cfa_offset (-8); - env.stack_offset <- env.stack_offset + 8 - | Lop(Iopaque) -> - assert (i.arg.(0).loc = i.res.(0).loc) - | Lop(Ispecific(Ilea addr)) -> - I.lea (addressing addr DWORD i 0) (reg i.res.(0)) - | Lop(Ispecific(Istore_int(n, addr, _))) -> - I.mov (nat n) (addressing addr DWORD i 0) - | Lop(Ispecific(Istore_symbol(s, addr, _))) -> - add_used_symbol s; - I.mov (immsym s) (addressing addr DWORD i 0) - | Lop(Ispecific(Ioffset_loc(n, addr))) -> - I.add (int n) (addressing addr DWORD i 0) - | Lop(Ispecific(Ipush)) -> - (* Push arguments in reverse order *) - for n = Array.length i.arg - 1 downto 0 do - let r = i.arg.(n) in - match r with - {loc = Reg _; typ = Float} -> - I.sub (int 8) esp; - cfi_adjust_cfa_offset 8; - I.fstp (mem32 REAL8 0 RSP); - env.stack_offset <- env.stack_offset + 8 - | {loc = Stack sl; typ = Float} -> - let ofs = slot_offset env sl 1 in - (* Use x87 stack to move from stack to stack, - instead of two 32-bit push instructions, - which could kill performance on modern CPUs (see #6979). - *) - I.fld (mem32 REAL8 ofs RSP); - I.sub (int 8) esp; - cfi_adjust_cfa_offset 8; - I.fstp (mem32 REAL8 0 RSP); - env.stack_offset <- env.stack_offset + 8 - | _ -> - I.push (reg r); - cfi_adjust_cfa_offset 4; - env.stack_offset <- env.stack_offset + 4 - done - | Lop(Ispecific(Ipush_int n)) -> - I.push (nat n); - cfi_adjust_cfa_offset 4; - env.stack_offset <- env.stack_offset + 4 - | Lop(Ispecific(Ipush_symbol s)) -> - add_used_symbol s; - I.push (immsym s); - cfi_adjust_cfa_offset 4; - env.stack_offset <- env.stack_offset + 4 - | Lop(Ispecific(Ipush_load addr)) -> - I.push (addressing addr DWORD i 0); - cfi_adjust_cfa_offset 4; - env.stack_offset <- env.stack_offset + 4 - | Lop(Ispecific(Ipush_load_float addr)) -> - I.push (addressing (offset_addressing addr 4) DWORD i 0); - I.push (addressing addr DWORD i 0); - cfi_adjust_cfa_offset 8; - env.stack_offset <- env.stack_offset + 8 - | Lop(Ispecific(Ifloatarithmem(double, op, addr))) -> - if not (is_tos i.arg.(0)) then - I.fld (reg i.arg.(0)); - instr_for_floatarithmem op - (addressing addr - (if double then REAL8 else REAL4) i 1) - | Lop(Ispecific(Ifloatspecial s)) -> - (* Push args on float stack if necessary *) - for k = 0 to Array.length i.arg - 1 do - if not (is_tos i.arg.(k)) then I.fld (reg i.arg.(k)) - done; - (* Fix-up for binary instrs whose args were swapped *) - if Array.length i.arg = 2 && is_tos i.arg.(1) then - I.fxch st1; - emit_floatspecial s - | Lreloadretaddr -> - () - | Lreturn -> - output_epilogue env begin fun () -> - I.ret () - end - | Llabel lbl -> - emit_Llabel env fallthrough lbl - | Lbranch lbl -> - I.jmp (label lbl) - | Lcondbranch(tst, lbl) -> - let lbl = label lbl in - begin match tst with - | Itruetest -> - output_test_zero env i.arg.(0); - I.jne lbl; - | Ifalsetest -> - output_test_zero env i.arg.(0); - I.je lbl - | Iinttest cmp -> - I.cmp (reg i.arg.(1)) (reg i.arg.(0)); - I.j (cond cmp) lbl - | Iinttest_imm((Isigned Ceq | Isigned Cne | - Iunsigned Ceq | Iunsigned Cne) as cmp, 0) -> - output_test_zero env i.arg.(0); - I.j (cond cmp) lbl - | Iinttest_imm(cmp, n) -> - I.cmp (int n) (reg i.arg.(0)); - I.j (cond cmp) lbl - | Ifloattest cmp -> - emit_float_test env cmp i.arg lbl - | Ioddtest -> - I.test (int 1) (reg i.arg.(0)); - I.jne lbl - | Ieventest -> - I.test (int 1) (reg i.arg.(0)); - I.je lbl - end - | Lcondbranch3(lbl0, lbl1, lbl2) -> - I.cmp (int 1) (reg i.arg.(0)); - begin match lbl0 with - None -> () - | Some lbl -> I.jb (label lbl) - end; - begin match lbl1 with - None -> () - | Some lbl -> I.je (label lbl) - end; - begin match lbl2 with - None -> () - | Some lbl -> I.ja (label lbl) - end - | Lswitch jumptbl -> - let lbl = new_label() in - I.jmp (mem32 NONE 0 (reg32 i.arg.(0)) ~scale:4 ~sym:(emit_label lbl)); - D.data (); - _label (emit_label lbl); - for i = 0 to Array.length jumptbl - 1 do - D.long (ConstLabel (emit_label jumptbl.(i))) - done; - emit_named_text_section env.f.fun_name - | Lentertrap -> - () - | Ladjust_trap_depth { delta_traps } -> - let delta = trap_frame_size * delta_traps in - cfi_adjust_cfa_offset delta; - env.stack_offset <- env.stack_offset + delta - | Lpushtrap { lbl_handler; } -> - I.push (label lbl_handler); - if trap_frame_size > 8 then - I.sub (int (trap_frame_size - 8)) esp; - load_domain_state edx; - I.push (domain_field Domain_exception_pointer RDX); - cfi_adjust_cfa_offset trap_frame_size; - I.mov esp (domain_field Domain_exception_pointer RDX); - env.stack_offset <- env.stack_offset + trap_frame_size - | Lpoptrap -> - I.mov edx (mem32 DWORD 4 RSP); - load_domain_state edx; - I.pop (domain_field Domain_exception_pointer RDX); - I.pop edx; - if trap_frame_size > 8 then - I.add (int (trap_frame_size - 8)) esp; - cfi_adjust_cfa_offset (-trap_frame_size); - env.stack_offset <- env.stack_offset - trap_frame_size - | Lraise k -> - begin match k with - | Lambda.Raise_regular -> - load_domain_state ebx; - I.mov (int 0) (domain_field Domain_backtrace_pos RBX); - emit_call "caml_raise_exn"; - record_frame env Reg.Set.empty (Dbg_raise i.dbg) - | Lambda.Raise_reraise -> - emit_call "caml_raise_exn"; - record_frame env Reg.Set.empty (Dbg_raise i.dbg) - | Lambda.Raise_notrace -> - load_domain_state ebx; - I.mov (domain_field Domain_exception_pointer RBX) esp; - I.pop (domain_field Domain_exception_pointer RBX); - if trap_frame_size > 8 then - I.add (int (trap_frame_size - 8)) esp; - I.pop ebx; - I.jmp ebx - end - -let rec emit_all env fallthrough i = - match i.desc with - | Lend -> () - | _ -> - emit_instr env fallthrough i; - emit_all env - (system = S_win32 || Linear.has_fallthrough i.desc) - i.next - -(* Emission of a function declaration *) - -let fundecl fundecl = - let env = mk_env fundecl in - emit_named_text_section fundecl.fun_name; - add_def_symbol fundecl.fun_name; - D.align (if system = S_win32 then 4 else 16); - D.global (emit_symbol fundecl.fun_name); - D.label (emit_symbol fundecl.fun_name); - emit_debug_info fundecl.fun_dbg; - cfi_startproc (); - emit_all env true fundecl.fun_body; - List.iter emit_call_gc env.call_gc_sites; - emit_call_bound_errors env; - cfi_endproc (); - begin match system with - | S_linux_elf | S_bsd_elf | S_gnu -> - D.type_ (emit_symbol fundecl.fun_name) "@function"; - D.size (emit_symbol fundecl.fun_name) - (ConstSub ( - ConstThis, - ConstLabel (emit_symbol fundecl.fun_name))) - | _ -> () - end - - -(* Emission of data *) - -let emit_item = function - | Cglobal_symbol s -> D.global (emit_symbol s) - | Cdefine_symbol s -> add_def_symbol s; _label (emit_symbol s) - | Cint8 n -> D.byte (const n) - | Cint16 n -> D.word (const n) - | Cint32 n -> D.long (const_nat n) - | Cint n -> D.long (const_nat n) - | Csingle f -> D.long (Const (Int64.of_int32 (Int32.bits_of_float f))) - | Cdouble f -> emit_float64_split_directive (Int64.bits_of_float f) - | Csymbol_address s -> add_used_symbol s; D.long (ConstLabel (emit_symbol s)) - | Cstring s -> D.bytes s - | Cskip n -> if n > 0 then D.space n - | Calign n -> D.align n - -let data l = - D.data (); - List.iter emit_item l - -(* Beginning / end of an assembly file *) - -let begin_assembly() = - X86_proc.reset_asm_code (); - reset_debug_info(); (* PR#5603 *) - float_constants := []; - if system = S_win32 then begin - D.mode386 (); - D.model "FLAT"; - D.extrn "_caml_extra_params" DWORD; - D.extrn "_caml_call_gc" PROC; - D.extrn "_caml_c_call" PROC; - D.extrn "_caml_allocN" PROC; - D.extrn "_caml_alloc1" PROC; - D.extrn "_caml_alloc2" PROC; - D.extrn "_caml_alloc3" PROC; - D.extrn "_caml_ml_array_bound_error" PROC; - D.extrn "_caml_raise_exn" PROC; - D.extrn "_Caml_state" DWORD; - end; - - D.data (); - emit_global_label "data_begin"; - emit_named_text_section (Compilenv.make_symbol (Some "code_begin")); - emit_global_label "code_begin" - -let end_assembly() = - if !float_constants <> [] then begin - D.data (); - List.iter (fun (cst,lbl) -> emit_float_constant cst lbl) !float_constants - end; - - emit_named_text_section (Compilenv.make_symbol (Some "code_end")); - emit_global_label "code_end"; - - D.data (); - D.long (const 0); (* PR#6329 *) - emit_global_label "data_end"; - D.long (const 0); - - emit_global_label "frametable"; - - emit_frames - { efa_code_label = (fun l -> D.long (ConstLabel (emit_label l))); - efa_data_label = (fun l -> D.long (ConstLabel (emit_label l))); - efa_8 = (fun n -> D.byte (const n)); - efa_16 = (fun n -> D.word (const n)); - efa_32 = (fun n -> D.long (const_32 n)); - efa_word = (fun n -> D.long (const n)); - efa_align = D.align; - efa_label_rel = (fun lbl ofs -> - D.long (ConstAdd ( - ConstSub(ConstLabel(emit_label lbl), - ConstThis), - const_32 ofs))); - efa_def_label = (fun l -> _label (emit_label l)); - efa_string = (fun s -> D.bytes (s ^ "\000")) - }; - - if system = S_linux_elf then - (* Mark stack as non-executable, PR#4564 *) - D.section [".note.GNU-stack"] (Some "") ["%progbits"]; - - if system = S_win32 then begin - D.comment "External functions"; - String.Set.iter - (fun s -> - if not (String.Set.mem s !symbols_defined) then - D.extrn (emit_symbol s) PROC) - !symbols_used; - symbols_used := String.Set.empty; - symbols_defined := String.Set.empty; - end; - - let asm = - if !Emitaux.create_asm_file then - Some - ( - (if X86_proc.masm then X86_masm.generate_asm - else X86_gas.generate_asm) !Emitaux.output_channel - ) - else - None - in - X86_proc.generate_code asm diff --git a/asmcomp/i386/proc.ml b/asmcomp/i386/proc.ml deleted file mode 100644 index fed3e678..00000000 --- a/asmcomp/i386/proc.ml +++ /dev/null @@ -1,245 +0,0 @@ -# 2 "asmcomp/i386/proc.ml" -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Description of the Intel 386 processor *) - -open Misc -open Arch -open Cmm -open Reg -open Mach - -(* Which asm conventions to use *) -let masm = - match Config.ccomp_type with - | "msvc" -> true - | _ -> false - -(* Registers available for register allocation *) - -(* Register map: - eax 0 eax - edi: function arguments and results - ebx 1 eax: C function results - ecx 2 ebx, esi, edi, ebp: preserved by C - edx 3 - esi 4 - edi 5 - ebp 6 - - tos 100 top of floating-point stack. *) - -let int_reg_name = - if masm then - [| "eax"; "ebx"; "ecx"; "edx"; "esi"; "edi"; "ebp" |] - else - [| "%eax"; "%ebx"; "%ecx"; "%edx"; "%esi"; "%edi"; "%ebp" |] - -let float_reg_name = - if masm then - [| "tos" |] - else - [| "%tos" |] - -let num_register_classes = 2 - -let register_class r = - match r.typ with - | Val | Int | Addr -> 0 - | Float -> 1 - -let num_available_registers = [| 7; 0 |] - -let first_available_register = [| 0; 100 |] - -let register_name r = - if r < 100 then int_reg_name.(r) else float_reg_name.(r - 100) - -(* There is little scheduling, and some operations are more compact - when their argument is %eax. *) - -let rotate_registers = false - -(* Representation of hard registers by pseudo-registers *) - -let hard_int_reg = - let v = Array.make 7 Reg.dummy in - for i = 0 to 6 do v.(i) <- Reg.at_location Int (Reg i) done; - v - -let hard_float_reg = [| Reg.at_location Float (Reg 100) |] - -let all_phys_regs = - Array.append hard_int_reg hard_float_reg - -let phys_reg n = - if n < 100 then hard_int_reg.(n) else hard_float_reg.(n - 100) - -let eax = phys_reg 0 -let ebx = phys_reg 1 -let ecx = phys_reg 2 -let edx = phys_reg 3 - -let stack_slot slot ty = - Reg.at_location ty (Stack slot) - -(* Instruction selection *) - -let word_addressed = false - -(* Calling conventions *) - -let size_domainstate_args = 64 * size_int - -let calling_conventions first_int last_int first_float last_float make_stack - arg = - let loc = Array.make (Array.length arg) Reg.dummy in - let int = ref first_int in - let float = ref first_float in - let ofs = ref (- size_domainstate_args) in - for i = 0 to Array.length arg - 1 do - match arg.(i) with - Val | Int | Addr as ty -> - if !int <= last_int then begin - loc.(i) <- phys_reg !int; - incr int - end else begin - loc.(i) <- stack_slot (make_stack !ofs) ty; - ofs := !ofs + size_int - end - | Float -> - if !float <= last_float then begin - loc.(i) <- phys_reg !float; - incr float - end else begin - loc.(i) <- stack_slot (make_stack !ofs) Float; - ofs := !ofs + size_float - end - done; - (loc, Misc.align (max 0 !ofs) stack_alignment) - -let incoming ofs = - if ofs >= 0 - then Incoming ofs - else Domainstate (ofs + size_domainstate_args) -let outgoing ofs = - if ofs >= 0 - then Outgoing ofs - else Domainstate (ofs + size_domainstate_args) -let not_supported _ofs = fatal_error "Proc.loc_results: cannot call" - -let loc_arguments arg = - calling_conventions 0 5 100 99 outgoing arg -let loc_parameters arg = - let (loc, _ofs) = calling_conventions 0 5 100 99 incoming arg in loc -let loc_results res = - let (loc, _ofs) = calling_conventions 0 5 100 100 not_supported res in loc - -let max_arguments_for_tailcalls = - 6 (* in registers *) + 64 (* in domain state *) - -let loc_external_arguments _arg = - fatal_error "Proc.loc_external_arguments" -let loc_external_results res = - match res with - | [| Int; Int |] -> [|eax; edx|] - | _ -> - let (loc, _ofs) = calling_conventions 0 0 100 100 not_supported res in loc - -let loc_exn_bucket = eax - -(* See "System V Application Binary Interface Intel386 Architecture - Processor Supplement Version 1.0" - (https://www.uclibc.org/docs/psABI-i386.pdf) *) - -let int_dwarf_reg_numbers = [| 0; 3; 1; 2; 6; 7; 5 |] - -let float_dwarf_reg_numbers = [| |] - -let dwarf_register_numbers ~reg_class = - match reg_class with - | 0 -> int_dwarf_reg_numbers - | 1 -> float_dwarf_reg_numbers - | _ -> Misc.fatal_errorf "Bad register class %d" reg_class - -let stack_ptr_dwarf_register_number = 4 - -(* Volatile registers: the x87 top of FP stack is *) - -let reg_is_volatile = function - | { typ = Float; loc = Reg _ } -> true - | _ -> false - -let regs_are_volatile rs = - try - for i = 0 to Array.length rs - 1 do - if reg_is_volatile rs.(i) then raise Exit - done; - false - with Exit -> - true - -(* Registers destroyed by operations *) - -let destroyed_at_c_call = (* ebx, esi, edi, ebp preserved *) - [|eax; ecx; edx|] - -let destroyed_at_oper = function - Iop(Icall_ind | Icall_imm _ | Iextcall { alloc = true; _}) -> - all_phys_regs - | Iop(Iextcall { alloc = false; }) -> destroyed_at_c_call - | Iop(Iintop(Idiv | Imod)) -> [| eax; edx |] - | Iop(Ialloc _) -> [| eax; ebx |] - | Iop(Iintop Imulh) -> [| eax |] - | Iop(Iintop(Icomp _) | Iintop_imm(Icomp _, _)) -> [| eax |] - | Iop(Iintoffloat) -> [| eax |] - | Iifthenelse(Ifloattest _, _, _) -> [| eax |] - | Itrywith _ -> [| edx |] - | _ -> [||] - -let destroyed_at_raise = all_phys_regs - -let destroyed_at_reloadretaddr = [| |] - -(* Maximal register pressure *) - -let safe_register_pressure _op = 4 - -let max_register_pressure = function - Iextcall _ -> [| 4; max_int |] - | Iintop(Idiv | Imod) -> [| 5; max_int |] - | Ialloc _ | Iintop(Icomp _) | Iintop_imm(Icomp _, _) | - Iintoffloat -> [| 6; max_int |] - | _ -> [|7; max_int |] - -(* Layout of the stack frame *) - -let frame_required fd = - let frame_size_at_top_of_function = - (* cf. [frame_size] in emit.mlp. *) - Misc.align (4*fd.fun_num_stack_slots.(0) + 8*fd.fun_num_stack_slots.(1) + 4) - stack_alignment - in - frame_size_at_top_of_function > 4 - -let prologue_required fd = - frame_required fd - -(* Calling the assembler *) - -let assemble_file infile outfile = - X86_proc.assemble_file infile outfile - -let init () = () diff --git a/asmcomp/i386/reload.ml b/asmcomp/i386/reload.ml deleted file mode 100644 index 6a20e887..00000000 --- a/asmcomp/i386/reload.ml +++ /dev/null @@ -1,96 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open Cmm -open Arch -open Reg -open Mach - -(* Reloading for the Intel x86 *) - -let stackp r = - match r.loc with - Stack _ -> true - | _ -> false - -class reload = object (self) - -inherit Reloadgen.reload_generic as super - -method! makereg r = - match r.typ with - Float -> r - | _ -> super#makereg r - -(* By overriding makereg, we make sure that pseudoregs of type float - will never be reloaded. Hence there is no need to make special cases for - floating-point operations. *) - -method! reload_operation op arg res = - match op with - Iintop(Iadd|Isub|Iand|Ior|Ixor|Icheckbound) -> - (* One of the two arguments can reside in the stack *) - if stackp arg.(0) && stackp arg.(1) - then ([|arg.(0); self#makereg arg.(1)|], res) - else (arg, res) - | Iintop(Icomp _) -> - (* The result must be a register (PR#11803) *) - let res = self#makeregs res in - (* One of the two arguments can reside in the stack *) - if stackp arg.(0) && stackp arg.(1) - then ([|arg.(0); self#makereg arg.(1)|], res) - else (arg, res) - | Iintop(Imul) -> - (* First argument (and destination) must be in register, - second arg can reside in stack *) - if stackp arg.(0) - then let r = self#makereg arg.(0) in ([|r; arg.(1)|], [|r|]) - else (arg, res) - | Iintop_imm(Iadd, _) when arg.(0).loc <> res.(0).loc -> - (* This add will be turned into a lea; args and results must be - in registers *) - super#reload_operation op arg res - | Iintop_imm(Imul, _) -> - (* First argument and destination must be in register *) - if stackp arg.(0) - then let r = self#makereg arg.(0) in ([|r|], [|r|]) - else (arg, res) - | Iintop_imm(Icomp _, _) -> - (* The result must be in a register (PR#11803) *) - (arg, self#makeregs res) - | Iintop(Imulh | Ilsl | Ilsr | Iasr) | Iintop_imm(_, _) - | Ifloatofint | Iintoffloat | Ispecific(Ipush) -> - (* The argument(s) can be either in register or on stack *) - (* Note: Imulh: arg(0 and res(0) already forced in regs - Ilsl, Ilsr, Iasr: arg(1) already forced in regs *) - (arg, res) - | _ -> (* Other operations: all args and results in registers *) - super#reload_operation op arg res - -method! reload_test tst arg = - match tst with - Iinttest _ -> - (* One of the two arguments can reside on stack *) - if stackp arg.(0) && stackp arg.(1) - then [| self#makereg arg.(0); arg.(1) |] - else arg - | _ -> - (* The argument(s) can be either in register or on stack *) - arg - -end - -let fundecl f num_stack_slots = - (new reload)#fundecl f num_stack_slots diff --git a/asmcomp/i386/scheduling.ml b/asmcomp/i386/scheduling.ml deleted file mode 100644 index c6c9a324..00000000 --- a/asmcomp/i386/scheduling.ml +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -open! Schedgen (* to create a dependency *) - -(* Scheduling is turned off because our model does not fit the 486 - nor the Pentium very well. In particular, it messes up with the - float reg stack. The Pentiums Pro / II / III / etc schedule - at run-time much better than what we could do. *) - -let fundecl f = f diff --git a/asmcomp/i386/selection.ml b/asmcomp/i386/selection.ml deleted file mode 100644 index 6611f1f1..00000000 --- a/asmcomp/i386/selection.ml +++ /dev/null @@ -1,325 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 1997 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Instruction selection for the Intel x86 *) - -open Misc -open Arch -open Proc -open Cmm -open Mach - -(* Auxiliary for recognizing addressing modes *) - -type addressing_expr = - Asymbol of string - | Alinear of expression - | Aadd of expression * expression - | Ascale of expression * int - | Ascaledadd of expression * expression * int - -let rec select_addr exp = - match exp with - Cconst_symbol (s, _) -> - (Asymbol s, 0) - | Cop((Caddi | Caddv | Cadda), [arg; Cconst_int (m, _)], _) -> - let (a, n) = select_addr arg in (a, n + m) - | Cop(Csubi, [arg; Cconst_int (m, _)], _) -> - let (a, n) = select_addr arg in (a, n - m) - | Cop((Caddi | Caddv | Cadda), [Cconst_int (m, _); arg], _) -> - let (a, n) = select_addr arg in (a, n + m) - | Cop(Clsl, [arg; Cconst_int ((1|2|3 as shift), _)], _) -> - begin match select_addr arg with - (Alinear e, n) -> (Ascale(e, 1 lsl shift), n lsl shift) - | _ -> (Alinear exp, 0) - end - | Cop(Cmuli, [arg; Cconst_int ((2|4|8 as mult), _)], _) -> - begin match select_addr arg with - (Alinear e, n) -> (Ascale(e, mult), n * mult) - | _ -> (Alinear exp, 0) - end - | Cop(Cmuli, [Cconst_int ((2|4|8 as mult), _); arg], _) -> - begin match select_addr arg with - (Alinear e, n) -> (Ascale(e, mult), n * mult) - | _ -> (Alinear exp, 0) - end - | Cop((Caddi | Cadda | Caddv), [arg1; arg2], _) -> - begin match (select_addr arg1, select_addr arg2) with - ((Alinear e1, n1), (Alinear e2, n2)) -> - (Aadd(e1, e2), n1 + n2) - | ((Alinear e1, n1), (Ascale(e2, scale), n2)) -> - (Ascaledadd(e1, e2, scale), n1 + n2) - | ((Ascale(e1, scale), n1), (Alinear e2, n2)) -> - (Ascaledadd(e2, e1, scale), n1 + n2) - | (_, (Ascale(e2, scale), n2)) -> - (Ascaledadd(arg1, e2, scale), n2) - | ((Ascale(e1, scale), n1), _) -> - (Ascaledadd(arg2, e1, scale), n1) - | _ -> - (Aadd(arg1, arg2), 0) - end - | arg -> - (Alinear arg, 0) - -(* C functions to be turned into Ifloatspecial instructions if -ffast-math. - If you update this list, you may need to update [is_simple_expr] and/or - [effects_of], below. *) -let inline_float_ops = - ["atan"; "atan2"; "cos"; "log"; "log10"; "sin"; "sqrt"; "tan"] - -(* Estimate number of float temporaries needed to evaluate expression - (Ershov's algorithm) *) - -let rec float_needs = function - Cop((Cnegf | Cabsf), [arg], _) -> - float_needs arg - | Cop((Caddf | Csubf | Cmulf | Cdivf), [arg1; arg2], _) -> - let n1 = float_needs arg1 in - let n2 = float_needs arg2 in - if n1 = n2 then 1 + n1 else if n1 > n2 then n1 else n2 - | Cop(Cextcall(fn, _ty_res, _ty_args, _alloc), args, _dbg) - when !fast_math && List.mem fn inline_float_ops -> - begin match args with - [arg] -> float_needs arg - | [arg1; arg2] -> max (float_needs arg2 + 1) (float_needs arg1) - | _ -> assert false - end - | _ -> - 1 - -(* Special constraints on operand and result registers *) - -exception Use_default - -let eax = phys_reg 0 -let ecx = phys_reg 2 -let edx = phys_reg 3 -let tos = phys_reg 100 - -let pseudoregs_for_operation op arg res = - match op with - (* Two-address binary operations *) - Iintop(Iadd|Isub|Imul|Iand|Ior|Ixor) -> - ([|res.(0); arg.(1)|], res, false) - (* Two-address unary operations *) - | Iintop_imm((Iadd|Isub|Imul|Iand|Ior|Ixor|Ilsl|Ilsr|Iasr), _) -> - (res, res, false) - (* For imull, first arg must be in eax, eax is clobbered, and result is in - edx. *) - | Iintop(Imulh) -> - ([| eax; arg.(1) |], [| edx |], true) - (* For shifts with variable shift count, second arg must be in ecx *) - | Iintop(Ilsl|Ilsr|Iasr) -> - ([|res.(0); ecx|], res, false) - (* For div and mod, first arg must be in eax, edx is clobbered, - and result is in eax or edx respectively. - Keep it simple, just force second argument in ecx. *) - | Iintop(Idiv) -> - ([| eax; ecx |], [| eax |], true) - | Iintop(Imod) -> - ([| eax; ecx |], [| edx |], true) - (* For floating-point operations and floating-point loads, - the result is always left at the top of the floating-point stack *) - | Iconst_float _ | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf - | Ifloatofint | Iload((Single | Double ), _, _) - | Ispecific(Isubfrev | Idivfrev | Ifloatarithmem _ | Ifloatspecial _) -> - (arg, [| tos |], false) (* don't move it immediately *) - (* For storing a byte, the argument must be in eax...edx. - (But for a short, any reg will do!) - Keep it simple, just force the argument to be in edx. *) - | Istore((Byte_unsigned | Byte_signed), _, _) -> - let newarg = Array.copy arg in - newarg.(0) <- edx; - (newarg, res, false) - (* Other instructions are regular *) - | _ -> raise Use_default - -let chunk_double = function - Single -> false - | Double -> true - | _ -> assert false - -(* The selector class *) - -class selector = object (self) - -inherit Selectgen.selector_generic as super - -method! is_immediate op n = - match op with - | Iadd | Isub | Imul | Iand | Ior | Ixor | Icomp _ | Icheckbound -> - true - | _ -> - super#is_immediate op n - -method is_immediate_test _cmp _n = true - -method! is_simple_expr e = - match e with - | Cop(Cextcall(fn, _, _, _), args, _) - when !fast_math && List.mem fn inline_float_ops -> - (* inlined float ops are simple if their arguments are *) - List.for_all self#is_simple_expr args - | _ -> - super#is_simple_expr e - -method! effects_of e = - match e with - | Cop(Cextcall(fn, _, _, _), args, _) - when !fast_math && List.mem fn inline_float_ops -> - Selectgen.Effect_and_coeffect.join_list_map args self#effects_of - | _ -> - super#effects_of e - -method select_addressing _chunk exp = - match select_addr exp with - (Asymbol s, d) -> - (Ibased(s, d), Ctuple []) - | (Alinear e, d) -> - (Iindexed d, e) - | (Aadd(e1, e2), d) -> - (Iindexed2 d, Ctuple[e1; e2]) - | (Ascale(e, scale), d) -> - (Iscaled(scale, d), e) - | (Ascaledadd(e1, e2, scale), d) -> - (Iindexed2scaled(scale, d), Ctuple[e1; e2]) - -method! select_store is_assign addr exp = - match exp with - Cconst_int (n, _) -> - (Ispecific(Istore_int(Nativeint.of_int n, addr, is_assign)), Ctuple []) - | Cconst_natint (n, _) -> - (Ispecific(Istore_int(n, addr, is_assign)), Ctuple []) - | Cconst_symbol (s, _) -> - (Ispecific(Istore_symbol(s, addr, is_assign)), Ctuple []) - | _ -> - super#select_store is_assign addr exp - -method! select_operation op args dbg = - match op with - (* Recognize the LEA instruction *) - Caddi | Caddv | Cadda | Csubi -> - begin match self#select_addressing Word_int (Cop(op, args, dbg)) with - (Iindexed _, _) - | (Iindexed2 0, _) -> super#select_operation op args dbg - | (addr, arg) -> (Ispecific(Ilea addr), [arg]) - end - (* Recognize float arithmetic with memory. - In passing, apply Ershov's algorithm to reduce stack usage *) - | Caddf -> - self#select_floatarith Iaddf Iaddf Ifloatadd Ifloatadd args - | Csubf -> - self#select_floatarith Isubf (Ispecific Isubfrev) Ifloatsub Ifloatsubrev - args - | Cmulf -> - self#select_floatarith Imulf Imulf Ifloatmul Ifloatmul args - | Cdivf -> - self#select_floatarith Idivf (Ispecific Idivfrev) Ifloatdiv Ifloatdivrev - args - (* Recognize store instructions *) - | Cstore ((Word_int | Word_val) as chunk, _) -> - begin match args with - [loc; Cop(Caddi, [Cop(Cload _, [loc'], _); Cconst_int (n, _)], _)] - when loc = loc' -> - let (addr, arg) = self#select_addressing chunk loc in - (Ispecific(Ioffset_loc(n, addr)), [arg]) - | _ -> - super#select_operation op args dbg - end - (* Recognize inlined floating point operations *) - | Cextcall(fn, _ty_res, _ty_args, false) - when !fast_math && List.mem fn inline_float_ops -> - (Ispecific(Ifloatspecial fn), args) - (* Default *) - | _ -> super#select_operation op args dbg - -(* Recognize float arithmetic with mem *) - -method select_floatarith regular_op reversed_op mem_op mem_rev_op args = - match args with - [arg1; Cop(Cload (chunk, _), [loc2], _)] -> - let (addr, arg2) = self#select_addressing chunk loc2 in - (Ispecific(Ifloatarithmem(chunk_double chunk, mem_op, addr)), - [arg1; arg2]) - | [Cop(Cload (chunk, _), [loc1], _); arg2] -> - let (addr, arg1) = self#select_addressing chunk loc1 in - (Ispecific(Ifloatarithmem(chunk_double chunk, mem_rev_op, addr)), - [arg2; arg1]) - | [arg1; arg2] -> - (* Evaluate bigger subexpression first to minimize stack usage. - Because of right-to-left evaluation, rightmost arg is evaluated - first *) - if float_needs arg1 <= float_needs arg2 - then (regular_op, [arg1; arg2]) - else (reversed_op, [arg2; arg1]) - | _ -> - fatal_error "Proc_i386: select_floatarith" - -(* Deal with register constraints *) - -method! insert_op_debug env op dbg rs rd = - try - let (rsrc, rdst, move_res) = pseudoregs_for_operation op rs rd in - self#insert_moves env rs rsrc; - self#insert_debug env (Iop op) dbg rsrc rdst; - if move_res then begin - self#insert_moves env rdst rd; - rd - end else - rdst - with Use_default -> - super#insert_op_debug env op dbg rs rd - -(* Selection of push instructions for external calls *) - -method select_push exp = - match exp with - Cconst_int (n, _) -> (Ispecific(Ipush_int(Nativeint.of_int n)), Ctuple []) - | Cconst_natint (n, _) -> (Ispecific(Ipush_int n), Ctuple []) - | Cconst_symbol (s, _) -> (Ispecific(Ipush_symbol s), Ctuple []) - | Cop(Cload ((Word_int | Word_val as chunk), _), [loc], _) -> - let (addr, arg) = self#select_addressing chunk loc in - (Ispecific(Ipush_load addr), arg) - | Cop(Cload (Double, _), [loc], _) -> - let (addr, arg) = self#select_addressing Double loc in - (Ispecific(Ipush_load_float addr), arg) - | _ -> (Ispecific(Ipush), exp) - -method! mark_c_tailcall = - contains_calls := true - -method! emit_extcall_args env _ty_args args = - let rec size_pushes = function - | [] -> 0 - | e :: el -> Selectgen.size_expr env e + size_pushes el in - let sz1 = size_pushes args in - let sz2 = Misc.align sz1 stack_alignment in - let rec emit_pushes = function - | [] -> - if sz2 > sz1 then - self#insert env (Iop (Istackoffset (sz2 - sz1))) [||] [||] - | e :: el -> - emit_pushes el; - let (op, arg) = self#select_push e in - match self#emit_expr env arg with - | None -> () - | Some r -> self#insert env (Iop op) r [||] in - emit_pushes args; - ([||], sz2) - -end - -let fundecl ~future_funcnames f = (new selector)#emit_fundecl - ~future_funcnames f diff --git a/asmcomp/interval.ml b/asmcomp/interval.ml index 2e26d169..3cfbf785 100644 --- a/asmcomp/interval.ml +++ b/asmcomp/interval.ml @@ -38,10 +38,11 @@ type kind = | Argument | Live -let interval_list = ref ([] : t list) -let fixed_interval_list = ref ([] : t list) -let all_intervals() = !interval_list -let all_fixed_intervals() = !fixed_interval_list +type result = + { + intervals : t list; + fixed_intervals : t list; + } (* Check if two intervals overlap *) @@ -167,19 +168,22 @@ let build_intervals fd = end in walk_instruction fd.fun_body; (* Generate the interval and fixed interval lists *) - interval_list := []; - fixed_interval_list := []; + let interval_list = ref [] in + let fixed_intervals = ref [] in Array.iter (fun i -> if i.iend != 0 then begin i.ranges <- List.rev i.ranges; begin match i.reg.loc with Reg _ -> - fixed_interval_list := i :: !fixed_interval_list + fixed_intervals := i :: !fixed_intervals | _ -> interval_list := i :: !interval_list end end) intervals; - (* Sort the intervals according to their start position *) - interval_list := List.sort (fun i0 i1 -> i0.ibegin - i1.ibegin) !interval_list + { + fixed_intervals = !fixed_intervals; + intervals = List.sort (fun i0 i1 -> i0.ibegin - i1.ibegin) !interval_list; + (* Sort the intervals according to their start position *) + } diff --git a/asmcomp/interval.mli b/asmcomp/interval.mli index 2b42bf30..35d1b5f5 100644 --- a/asmcomp/interval.mli +++ b/asmcomp/interval.mli @@ -30,9 +30,13 @@ type t = mutable ranges: range list; } -val all_intervals: unit -> t list -val all_fixed_intervals: unit -> t list +type result = + { + intervals : t list; + fixed_intervals : t list; + } + val overlap: t -> t -> bool val is_live: t -> int -> bool val remove_expired_ranges: t -> int -> unit -val build_intervals: Mach.fundecl -> unit +val build_intervals: Mach.fundecl -> result diff --git a/asmcomp/linear.ml b/asmcomp/linear.ml index 1773f4d4..6cf64d0b 100644 --- a/asmcomp/linear.ml +++ b/asmcomp/linear.ml @@ -49,14 +49,15 @@ let has_fallthrough = function type fundecl = { fun_name: string; + fun_args: Reg.Set.t; fun_body: instruction; fun_fast: bool; fun_dbg : Debuginfo.t; fun_tailrec_entry_point_label : label; - fun_contains_calls: bool; + fun_contains_nontail_calls: bool; fun_num_stack_slots: int array; fun_frame_required: bool; - fun_prologue_required: bool; + fun_extra_stack_used: int } (* Invert a test *) diff --git a/asmcomp/linear.mli b/asmcomp/linear.mli index 2f52c209..879e9851 100644 --- a/asmcomp/linear.mli +++ b/asmcomp/linear.mli @@ -50,12 +50,13 @@ val invert_test: Mach.test -> Mach.test type fundecl = { fun_name: string; + fun_args: Reg.Set.t; fun_body: instruction; fun_fast: bool; fun_dbg : Debuginfo.t; fun_tailrec_entry_point_label : label; - fun_contains_calls: bool; + fun_contains_nontail_calls: bool; fun_num_stack_slots: int array; fun_frame_required: bool; - fun_prologue_required: bool; + fun_extra_stack_used: int } diff --git a/asmcomp/linearize.ml b/asmcomp/linearize.ml index bf983ae0..0e42bec8 100644 --- a/asmcomp/linearize.ml +++ b/asmcomp/linearize.ml @@ -108,46 +108,48 @@ let add_branch lbl n = else discard_dead_code n -let try_depth = ref 0 -(* Association list: exit handler -> (handler label, try-nesting factor) *) +type exit_info = { + try_depth : int; + exit_label : (int * (int * int)) list; + (* Association list: exit handler -> (handler label, try-nesting factor) *) +} -let exit_label = ref [] - -let find_exit_label_try_depth k = +let find_exit_label_try_depth exit_info k = try - List.assoc k !exit_label + List.assoc k exit_info.exit_label with | Not_found -> Misc.fatal_error "Linearize.find_exit_label" -let find_exit_label k = - let (label, t) = find_exit_label_try_depth k in - assert(t = !try_depth); +let find_exit_label exit_info k = + let (label, t) = find_exit_label_try_depth exit_info k in + assert(t = exit_info.try_depth); label -let is_next_catch n = match !exit_label with -| (n0,(_,t))::_ when n0=n && t = !try_depth -> true -| _ -> false +let is_next_catch exit_info n = + match exit_info.exit_label with + | (n0,(_,t))::_ when n0=n && t = exit_info.try_depth -> true + | _ -> false -let local_exit k = - snd (find_exit_label_try_depth k) = !try_depth +let local_exit exit_info k = + snd (find_exit_label_try_depth exit_info k) = exit_info.try_depth (* Linearize an instruction [i]: add it in front of the continuation [n] *) let linear i n contains_calls = - let rec linear i n = + let rec linear exit_info i n = match i.Mach.desc with Iend -> n | Iop(Itailcall_ind | Itailcall_imm _ as op) -> copy_instr (Lop op) i (discard_dead_code n) | Iop(Imove | Ireload | Ispill) when i.Mach.arg.(0).loc = i.Mach.res.(0).loc -> - linear i.Mach.next n + linear exit_info i.Mach.next n | Iop((Ipoll { return_label = None; _ }) as op) -> (* If the poll call does not already specify where to jump to after the poll (the expected situation in the current implementation), absorb any branch after the poll call into the poll call itself. This, in particular, optimises polls at the back edges of loops. *) - let n = linear i.Mach.next n in + let n = linear exit_info i.Mach.next n in let op, n = match n.desc with | Lbranch lbl -> @@ -156,53 +158,63 @@ let linear i n contains_calls = in copy_instr (Lop op) i n | Iop op -> - copy_instr (Lop op) i (linear i.Mach.next n) + copy_instr (Lop op) i (linear exit_info i.Mach.next n) | Ireturn -> let n1 = copy_instr Lreturn i (discard_dead_code n) in if contains_calls then cons_instr Lreloadretaddr n1 else n1 | Iifthenelse(test, ifso, ifnot) -> - let n1 = linear i.Mach.next n in + let n1 = linear exit_info i.Mach.next n in begin match (ifso.Mach.desc, ifnot.Mach.desc, n1.desc) with Iend, _, Lbranch lbl -> - copy_instr (Lcondbranch(test, lbl)) i (linear ifnot n1) + copy_instr (Lcondbranch(test, lbl)) i (linear exit_info ifnot n1) | _, Iend, Lbranch lbl -> - copy_instr (Lcondbranch(invert_test test, lbl)) i (linear ifso n1) + copy_instr + (Lcondbranch(invert_test test, lbl)) + i + (linear exit_info ifso n1) | Iexit nfail1, Iexit nfail2, _ - when is_next_catch nfail1 && local_exit nfail2 -> - let lbl2 = find_exit_label nfail2 in + when is_next_catch exit_info nfail1 + && local_exit exit_info nfail2 -> + let lbl2 = find_exit_label exit_info nfail2 in copy_instr - (Lcondbranch (invert_test test, lbl2)) i (linear ifso n1) - | Iexit nfail, _, _ when local_exit nfail -> - let n2 = linear ifnot n1 - and lbl = find_exit_label nfail in + (Lcondbranch (invert_test test, lbl2)) + i + (linear exit_info ifso n1) + | Iexit nfail, _, _ when local_exit exit_info nfail -> + let n2 = linear exit_info ifnot n1 + and lbl = find_exit_label exit_info nfail in copy_instr (Lcondbranch(test, lbl)) i n2 - | _, Iexit nfail, _ when local_exit nfail -> - let n2 = linear ifso n1 in - let lbl = find_exit_label nfail in + | _, Iexit nfail, _ when local_exit exit_info nfail -> + let n2 = linear exit_info ifso n1 in + let lbl = find_exit_label exit_info nfail in copy_instr (Lcondbranch(invert_test test, lbl)) i n2 | Iend, _, _ -> let (lbl_end, n2) = get_label n1 in - copy_instr (Lcondbranch(test, lbl_end)) i (linear ifnot n2) + copy_instr + (Lcondbranch(test, lbl_end)) + i + (linear exit_info ifnot n2) | _, Iend, _ -> let (lbl_end, n2) = get_label n1 in copy_instr (Lcondbranch(invert_test test, lbl_end)) i - (linear ifso n2) + (linear exit_info ifso n2) | _, _, _ -> (* Should attempt branch prediction here *) let (lbl_end, n2) = get_label n1 in - let (lbl_else, nelse) = get_label (linear ifnot n2) in + let (lbl_else, nelse) = get_label (linear exit_info ifnot n2) in copy_instr (Lcondbranch(invert_test test, lbl_else)) i - (linear ifso (add_branch lbl_end nelse)) + (linear exit_info ifso (add_branch lbl_end nelse)) end | Iswitch(index, cases) -> let lbl_cases = Array.make (Array.length cases) 0 in - let (lbl_end, n1) = get_label(linear i.Mach.next n) in + let (lbl_end, n1) = get_label(linear exit_info i.Mach.next n) in let n2 = ref (discard_dead_code n1) in for i = Array.length cases - 1 downto 0 do - let (lbl_case, ncase) = - get_label(linear cases.(i) (add_branch lbl_end !n2)) in + let case_linear = + linear exit_info cases.(i) (add_branch lbl_end !n2) in + let (lbl_case, ncase) = get_label case_linear in lbl_cases.(i) <- lbl_case; n2 := discard_dead_code ncase done; @@ -218,7 +230,7 @@ let linear i n contains_calls = end else copy_instr (Lswitch(Array.map (fun n -> lbl_cases.(n)) index)) i !n2 | Icatch(_rec_flag, handlers, body) -> - let (lbl_end, n1) = get_label(linear i.Mach.next n) in + let (lbl_end, n1) = get_label(linear exit_info i.Mach.next n) in (* CR mshinwell for pchambart: 1. rename "io" 2. Make sure the test cases cover the "Iend" cases too *) @@ -228,48 +240,49 @@ let linear i n contains_calls = | _ -> Cmm.new_label ()) handlers in let exit_label_add = List.map2 - (fun (nfail, _) lbl -> (nfail, (lbl, !try_depth))) + (fun (nfail, _) lbl -> (nfail, (lbl, exit_info.try_depth))) handlers labels_at_entry_to_handlers in - let previous_exit_label = !exit_label in - exit_label := exit_label_add @ !exit_label; + let exit_info = + { exit_info with exit_label = exit_label_add @ exit_info.exit_label } + in let n2 = List.fold_left2 (fun n (_nfail, handler) lbl_handler -> match handler.Mach.desc with | Iend -> n - | _ -> cons_instr (Llabel lbl_handler) - (linear handler (add_branch lbl_end n))) + | _ -> + cons_instr (Llabel lbl_handler) + (linear exit_info handler (add_branch lbl_end n))) n1 handlers labels_at_entry_to_handlers in - let n3 = linear body (add_branch lbl_end n2) in - exit_label := previous_exit_label; + let n3 = linear exit_info body (add_branch lbl_end n2) in n3 | Iexit nfail -> - let lbl, t = find_exit_label_try_depth nfail in + let lbl, t = find_exit_label_try_depth exit_info nfail in assert (i.Mach.next.desc = Mach.Iend); - let delta_traps = !try_depth - t in + let delta_traps = exit_info.try_depth - t in let n1 = adjust_trap_depth delta_traps n in let rec loop i tt = if t = tt then i else loop (cons_instr Lpoptrap i) (tt - 1) in - loop (add_branch lbl n1) !try_depth + loop (add_branch lbl n1) exit_info.try_depth | Itrywith(body, handler) -> - let (lbl_join, n1) = get_label (linear i.Mach.next n) in + let (lbl_join, n1) = get_label (linear exit_info i.Mach.next n) in let (lbl_handler, n2) = - get_label (cons_instr Lentertrap (linear handler n1)) + get_label (cons_instr Lentertrap (linear exit_info handler n1)) in - incr try_depth; + let exit_info = + { exit_info with try_depth = exit_info.try_depth + 1 } in assert (i.Mach.arg = [| |]); let n3 = cons_instr (Lpushtrap { lbl_handler; }) - (linear body + (linear exit_info body (cons_instr Lpoptrap (add_branch lbl_join n2))) in - decr try_depth; n3 | Iraise k -> copy_instr (Lraise k) i (discard_dead_code n) - in linear i n + in linear { exit_label = []; try_depth = 0 } i n let add_prologue first_insn prologue_required = let tailrec_entry_point_label = Cmm.new_label () in @@ -320,19 +333,18 @@ let add_prologue first_insn prologue_required = tailrec_entry_point_label, tailrec_entry_point let fundecl f = - let fun_prologue_required = Proc.prologue_required f in - let contains_calls = f.Mach.fun_contains_calls in - let fun_tailrec_entry_point_label, fun_body = - add_prologue (linear f.Mach.fun_body end_instr contains_calls) - fun_prologue_required - in + let fa = Stackframe.analyze f in + let (fun_tailrec_entry_point_label, fun_body) = + add_prologue (linear f.Mach.fun_body end_instr fa.frame_required) + fa.frame_required in { fun_name = f.Mach.fun_name; + fun_args = Reg.set_of_array f.Mach.fun_args; fun_body; fun_fast = not (List.mem Cmm.Reduce_code_size f.Mach.fun_codegen_options); fun_dbg = f.Mach.fun_dbg; fun_tailrec_entry_point_label; - fun_contains_calls = contains_calls; + fun_contains_nontail_calls = fa.contains_nontail_calls; fun_num_stack_slots = f.Mach.fun_num_stack_slots; - fun_frame_required = Proc.frame_required f; - fun_prologue_required; + fun_frame_required = fa.frame_required; + fun_extra_stack_used = fa.extra_stack_used } diff --git a/asmcomp/linscan.ml b/asmcomp/linscan.ml index 21416be2..79b7c0ca 100644 --- a/asmcomp/linscan.ml +++ b/asmcomp/linscan.ml @@ -17,66 +17,111 @@ (* Linear scan register allocation. *) open Interval -open Reg + +module IntervalSet = Set.Make (struct + type t = Interval.t + let compare i j = + let c = Int.compare i.iend j.iend in + if c = 0 then Int.compare i.reg.stamp j.reg.stamp else c + end) + +module SlotSet = Set.Make(Int) (* Live intervals per register class *) type class_intervals = { - mutable ci_fixed: Interval.t list; - mutable ci_active: Interval.t list; - mutable ci_inactive: Interval.t list; + mutable ci_fixed: IntervalSet.t; + mutable ci_active: IntervalSet.t; + mutable ci_inactive: IntervalSet.t; + mutable ci_spilled: + (* spilled stack slots (reg.loc = Stack (Local n)) still in use *) + IntervalSet.t; + mutable ci_free_slots: + (* expired stack slots available for reuse *) + SlotSet.t; } let active = Array.init Proc.num_register_classes (fun _ -> { - ci_fixed = []; - ci_active = []; - ci_inactive = [] + ci_fixed = IntervalSet.empty; + ci_active = IntervalSet.empty; + ci_inactive = IntervalSet.empty; + ci_spilled = IntervalSet.empty; + ci_free_slots = SlotSet.empty; }) -(* Insert interval into list sorted by end position *) - -let rec insert_interval_sorted i = function - [] -> [i] - | j :: _ as il when j.iend <= i.iend -> i :: il - | j :: il -> j :: insert_interval_sorted i il - -let rec release_expired_fixed pos = function - i :: il when i.iend >= pos -> - Interval.remove_expired_ranges i pos; - i :: release_expired_fixed pos il - | _ -> [] - -let rec release_expired_active ci pos = function - i :: il when i.iend >= pos -> - Interval.remove_expired_ranges i pos; - if Interval.is_live i pos then - i :: release_expired_active ci pos il - else begin - ci.ci_inactive <- insert_interval_sorted i ci.ci_inactive; - release_expired_active ci pos il - end - | _ -> [] - -let rec release_expired_inactive ci pos = function - i :: il when i.iend >= pos -> - Interval.remove_expired_ranges i pos; - if not (Interval.is_live i pos) then - i :: release_expired_inactive ci pos il - else begin - ci.ci_active <- insert_interval_sorted i ci.ci_active; - release_expired_inactive ci pos il - end - | _ -> [] +let slot_of_spilled i = + match i.reg.loc with + | Stack(Local ss) -> ss + | _ -> invalid_arg "Linscan.slot_of_spilled" + + +let split_by_pos intervals pos = + let divider = + (* this interval is strictly above intervals [i] with [i.iend < pos] and + strictly below [i] with [i.iend >= pos]. We use a dummy register with a + non-existent [stamp] to make sure that it is not "equal" to any of the + intervals in the set (according to the equality function of [IntervalSet] + above). *) + {Interval.reg = {Reg.dummy with stamp = -1}; + ibegin = pos; + iend = pos; + ranges = []} + in + let (before, divider_in_set, after) = IntervalSet.split divider intervals in + assert (not divider_in_set); + (before, after) + +let remove_expired_ranges intervals pos = + IntervalSet.iter (fun i -> Interval.remove_expired_ranges i pos) intervals + +let release_expired_spilled ci pos = + let (expired, rest) = split_by_pos ci.ci_spilled pos in + ci.ci_free_slots <- + IntervalSet.fold (fun i free -> SlotSet.add (slot_of_spilled i) free) + expired ci.ci_free_slots; + ci.ci_spilled <- rest + +let release_expired_fixed ci pos = + let (_expired, rest) = split_by_pos ci.ci_fixed pos in + remove_expired_ranges rest pos; + ci.ci_fixed <- rest + +let partition_live intervals pos = + IntervalSet.partition (fun i -> Interval.is_live i pos) intervals + +let release_expired_active ci pos = + let (_expired, rest) = split_by_pos ci.ci_active pos in + remove_expired_ranges rest pos; + let active, inactive = partition_live rest pos in + ci.ci_active <- active; + ci.ci_inactive <- IntervalSet.union inactive ci.ci_inactive + +let release_expired_inactive ci pos = + let (_expired, rest) = split_by_pos ci.ci_inactive pos in + remove_expired_ranges rest pos; + let active, inactive = partition_live rest pos in + ci.ci_inactive <- inactive; + ci.ci_active <- IntervalSet.union active ci.ci_active (* Allocate a new stack slot to the interval. *) let allocate_stack_slot num_stack_slots i = let cl = Proc.register_class i.reg in - let ss = num_stack_slots.(cl) in - num_stack_slots.(cl) <- succ ss; + let ci = active.(cl) in + let ss = + match SlotSet.min_elt_opt ci.ci_free_slots with + | Some ss -> + ci.ci_free_slots <- SlotSet.remove ss ci.ci_free_slots; + ss + | None -> + let ss = num_stack_slots.(cl) in + num_stack_slots.(cl) <- succ ss; + ss + in i.reg.loc <- Stack(Local ss); - i.reg.spill <- true + i.reg.spill <- true; + ci.ci_spilled <- IntervalSet.add i ci.ci_spilled (* Find a register for the given interval and assigns this register. The interval is added to active. Raises Not_found if no free registers @@ -104,7 +149,7 @@ let allocate_free_register num_stack_slots i = registers) *) let regmask = Array.make rn true in (* Remove all assigned registers from the register mask *) - List.iter + IntervalSet.iter (function {reg = {loc = Reg r}} -> if r - r0 < rn then regmask.(r - r0) <- false @@ -117,8 +162,8 @@ let allocate_free_register num_stack_slots i = && Interval.overlap j i then regmask.(r - r0) <- false | _ -> () in - List.iter remove_bound_overlapping ci.ci_inactive; - List.iter remove_bound_overlapping ci.ci_fixed; + IntervalSet.iter remove_bound_overlapping ci.ci_inactive; + IntervalSet.iter remove_bound_overlapping ci.ci_fixed; (* Assign the first free register (if any) *) let rec assign r = if r = rn then @@ -128,7 +173,7 @@ let allocate_free_register num_stack_slots i = current interval into the active list *) i.reg.loc <- Reg (r0 + r); i.reg.spill <- false; - ci.ci_active <- insert_interval_sorted i ci.ci_active + ci.ci_active <- IntervalSet.add i ci.ci_active end else assign (succ r) in assign 0 @@ -139,20 +184,22 @@ let allocate_free_register num_stack_slots i = let allocate_blocked_register num_stack_slots i = let cl = Proc.register_class i.reg in let ci = active.(cl) in - match ci.ci_active with - | ilast :: il when + match IntervalSet.max_elt_opt ci.ci_active with + | Some ilast when ilast.iend > i.iend && (* Last interval in active is the last interval, so spill it. *) let chk r = r.reg.loc = ilast.reg.loc && Interval.overlap r i in (* But only if its physical register is admissible for the current interval. *) - not (List.exists chk ci.ci_fixed || List.exists chk ci.ci_inactive) + not (IntervalSet.exists chk ci.ci_fixed || + IntervalSet.exists chk ci.ci_inactive) -> + let il = IntervalSet.remove ilast ci.ci_active in begin match ilast.reg.loc with Reg _ -> () | _ -> assert false end; (* Use register from last interval for current interval *) i.reg.loc <- ilast.reg.loc; (* Remove the last interval from active and insert the current *) - ci.ci_active <- insert_interval_sorted i il; + ci.ci_active <- IntervalSet.add i il; (* Now get a new stack slot for the spilled register *) allocate_stack_slot num_stack_slots ilast | _ -> @@ -166,9 +213,10 @@ let walk_interval num_stack_slots i = (* Release all intervals that have been expired at the current position *) Array.iter (fun ci -> - ci.ci_fixed <- release_expired_fixed pos ci.ci_fixed; - ci.ci_active <- release_expired_active ci pos ci.ci_active; - ci.ci_inactive <- release_expired_inactive ci pos ci.ci_inactive) + release_expired_fixed ci pos; + release_expired_active ci pos; + release_expired_inactive ci pos; + release_expired_spilled ci pos) active; try (* Allocate free register (if any) *) @@ -178,14 +226,16 @@ let walk_interval num_stack_slots i = (* No free register, need to decide which interval to spill *) allocate_blocked_register num_stack_slots i -let allocate_registers() = +let allocate_registers (intervals : Interval.result) = (* Initialize the stack slots and interval lists *) for cl = 0 to Proc.num_register_classes - 1 do (* Start with empty interval lists *) active.(cl) <- { - ci_fixed = []; - ci_active = []; - ci_inactive = [] + ci_fixed = IntervalSet.empty; + ci_active = IntervalSet.empty; + ci_inactive = IntervalSet.empty; + ci_spilled = IntervalSet.empty; + ci_free_slots = SlotSet.empty; }; done; (* Reset the stack slot counts *) @@ -194,8 +244,8 @@ let allocate_registers() = List.iter (fun i -> let ci = active.(Proc.register_class i.reg) in - ci.ci_fixed <- insert_interval_sorted i ci.ci_fixed) - (Interval.all_fixed_intervals()); + ci.ci_fixed <- IntervalSet.add i ci.ci_fixed) + intervals.fixed_intervals; (* Walk all the intervals within the list *) - List.iter (walk_interval num_stack_slots) (Interval.all_intervals()); + List.iter (walk_interval num_stack_slots) intervals.intervals; num_stack_slots diff --git a/asmcomp/linscan.mli b/asmcomp/linscan.mli index 650e4139..2e11c781 100644 --- a/asmcomp/linscan.mli +++ b/asmcomp/linscan.mli @@ -16,4 +16,4 @@ (* Linear scan register allocation. *) -val allocate_registers: unit -> int array +val allocate_registers: Interval.result -> int array diff --git a/asmcomp/liveness.ml b/asmcomp/liveness.ml index 3cf1686a..2ca39975 100644 --- a/asmcomp/liveness.ml +++ b/asmcomp/liveness.ml @@ -35,8 +35,6 @@ let transfer i ~next ~exn = | Iop op -> if operation_is_pure op (* no side effects *) && Reg.disjoint_set_array next i.res (* results are not used after *) - && not (Proc.regs_are_volatile i.arg) (* no stack-like hard reg *) - && not (Proc.regs_are_volatile i.res) (* is involved *) then begin (* This operation is dead code. Ignore its arguments. *) i.live <- next; diff --git a/asmcomp/mach.ml b/asmcomp/mach.ml index f3a43e29..5a2cc925 100644 --- a/asmcomp/mach.ml +++ b/asmcomp/mach.ml @@ -49,18 +49,25 @@ type operation = | Itailcall_imm of { func : string; } | Iextcall of { func : string; ty_res : Cmm.machtype; ty_args : Cmm.exttype list; - alloc : bool; } + alloc : bool; + stack_ofs : int; } | Istackoffset of int - | Iload of Cmm.memory_chunk * Arch.addressing_mode * Asttypes.mutable_flag + | Iload of { memory_chunk : Cmm.memory_chunk; + addressing_mode : Arch.addressing_mode; + mutability : Asttypes.mutable_flag; + is_atomic : bool } | Istore of Cmm.memory_chunk * Arch.addressing_mode * bool | Ialloc of { bytes : int; dbginfo : Debuginfo.alloc_dbginfo; } | Iintop of integer_operation | Iintop_imm of integer_operation * int + | Icompf of float_comparison | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Ifloatofint | Iintoffloat | Iopaque | Ispecific of Arch.specific_operation | Ipoll of { return_label: Cmm.label option } + | Idls_get + | Ireturn_addr type instruction = { desc: instruction_desc; @@ -90,7 +97,6 @@ type fundecl = fun_dbg : Debuginfo.t; fun_poll: Lambda.poll_attribute; fun_num_stack_slots: int array; - fun_contains_calls: bool; } let rec dummy_instr = @@ -148,6 +154,7 @@ let rec instr_iter f i = let operation_is_pure = function | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ | Ipoll _ + | Idls_get | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) | Iopaque -> false | Ispecific sop -> Arch.operation_is_pure sop | _ -> true diff --git a/asmcomp/mach.mli b/asmcomp/mach.mli index 866a21fe..c0ca7836 100644 --- a/asmcomp/mach.mli +++ b/asmcomp/mach.mli @@ -49,19 +49,26 @@ type operation = | Itailcall_imm of { func : string; } | Iextcall of { func : string; ty_res : Cmm.machtype; ty_args : Cmm.exttype list; - alloc : bool; } + alloc : bool; + stack_ofs : int; } | Istackoffset of int - | Iload of Cmm.memory_chunk * Arch.addressing_mode * Asttypes.mutable_flag + | Iload of { memory_chunk : Cmm.memory_chunk; + addressing_mode : Arch.addressing_mode; + mutability : Asttypes.mutable_flag; + is_atomic : bool } | Istore of Cmm.memory_chunk * Arch.addressing_mode * bool (* false = initialization, true = assignment *) | Ialloc of { bytes : int; dbginfo : Debuginfo.alloc_dbginfo; } | Iintop of integer_operation | Iintop_imm of integer_operation * int + | Icompf of float_comparison | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Ifloatofint | Iintoffloat | Iopaque | Ispecific of Arch.specific_operation | Ipoll of { return_label: Cmm.label option } + | Idls_get + | Ireturn_addr (** Retrieve the return address from the stack frame *) type instruction = { desc: instruction_desc; @@ -91,7 +98,6 @@ type fundecl = fun_dbg : Debuginfo.t; fun_poll: Lambda.poll_attribute; fun_num_stack_slots: int array; - fun_contains_calls: bool; } val dummy_instr: instruction diff --git a/asmcomp/polling.ml b/asmcomp/polling.ml index b2efb27d..bf0206ad 100644 --- a/asmcomp/polling.ml +++ b/asmcomp/polling.ml @@ -187,10 +187,7 @@ let potentially_recursive_tailcall ~future_funcnames funbody = the resulting function contains any [Ipoll] instructions. *) -let contains_polls = ref false - let add_poll i = - contains_polls := true; Mach.instr_cons_debug (Iop (Ipoll { return_label = None })) [||] [||] i.dbg i let instr_body handler_safe i = @@ -238,11 +235,7 @@ let instr_body handler_safe i = next = instr ube i.next; } | Iend | Ireturn | Iraise _ -> i - | Iop op -> - begin match op with - | Ipoll _ -> contains_polls := true - | _ -> () - end; + | Iop _ -> { i with next = instr ube i.next } in instr Int.Set.empty i @@ -259,7 +252,7 @@ let find_poll_alloc_or_calls instr = Iconst_symbol _ | Iextcall { alloc = false } | Istackoffset _ | Iload _ | Istore _ | Iintop _ | Iintop_imm _ | Ifloatofint | Iintoffloat | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | - Iopaque | Ispecific _)-> None + Iopaque | Ispecific _ | Idls_get | Icompf _ | Ireturn_addr) -> None | Iend | Ireturn | Iifthenelse _ | Iswitch _ | Icatch _ | Iexit _ | Itrywith _ | Iraise _ -> None in @@ -276,7 +269,6 @@ let instrument_fundecl ~future_funcnames:_ (f : Mach.fundecl) : Mach.fundecl = if function_is_assumed_to_never_poll f.fun_name then f else begin let handler_needs_poll = polled_loops_analysis f.fun_body in - contains_polls := false; let new_body = instr_body handler_needs_poll f.fun_body in begin match f.fun_poll with | Error_poll -> begin @@ -285,8 +277,7 @@ let instrument_fundecl ~future_funcnames:_ (f : Mach.fundecl) : Mach.fundecl = | poll_error_instrs -> raise (Error(Poll_error poll_error_instrs)) end | Default_poll -> () end; - let new_contains_calls = f.fun_contains_calls || !contains_polls in - { f with fun_body = new_body; fun_contains_calls = new_contains_calls } + { f with fun_body = new_body } end let requires_prologue_poll ~future_funcnames ~fun_name i = diff --git a/asmcomp/power/CSE.ml b/asmcomp/power/CSE.ml index 808aeaee..c40bc4b4 100644 --- a/asmcomp/power/CSE.ml +++ b/asmcomp/power/CSE.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/power/CSE.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/power/NOTES.md b/asmcomp/power/NOTES.md index d54c0869..d54ba344 100644 --- a/asmcomp/power/NOTES.md +++ b/asmcomp/power/NOTES.md @@ -1,26 +1,190 @@ # Supported platforms -IBM POWER and Freescale (nee Motorola) PowerPC processors, in three flavors: -* 32 bits, ELF ABI: Debian's `powerpc` -* 64 bits big-endian, ELF ABI v1: Debian's `powerpc` -* 64 bits little-endian, ELF ABI v2: Debian's `ppc64el` +IBM POWER processors, 64-bit, little-endian, ELF ABI v2. +(Called `ppc64el` in Debian.) -No longer supported: AIX and MacOS X. +No longer supported: +* 32 bits, ELF ABI (Debian's `powerpc`) +* 64 bits big-endian, ELF ABI v1 (Debian's `powerpc`) +* AIX +* MacOS X. # Reference documents * Instruction set architecture: - _PowerPC User Instruction Set Architecture_, - book 1 of _PowerPC Architecture Book_ - (http://www.ibm.com/developerworks/systems/library/es-archguide-v2.html). -* ELF ABI 32 bits: - _System V Application Binary Interface, PowerPC Processor Supplement_ -* ELF ABI 64 bits version 1: - _64-bit PowerPC ELF Application Binary Interface Supplement_ - (http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html) + _Power ISA User Instruction Set Architecture_, + book 1 of _Power Instruction Set_ + (https://openpowerfoundation.org/specifications/isa/) + * ELF ABI 64 bits version 2: - _Power Architecture 64-bit ELF V2 ABI Specification, - OpenPOWER ABI for Linux Supplement_ - (http://openpowerfoundation.org/technical/technical-resources/technical-specifications/) + _OpenPOWER ABI for Linux Supplement for the Power Architecture + 64-bit ELF V2 ABI_ + (https://openpowerfoundation.org/specifications/64bitelfabi/) + * _The PowerPC Compiler Writer's Guide_, Warthman Associates, 1996. (PDF available from various sources on the Web.) + +# Notes on calling conventions + +## The minimal stack frame + +The stack pointer SP (register 1) is always 16-byte aligned. + +Every stack frame contains a 32-byte reserved area at SP to SP + 31. + +* The 64-bit word at SP + 0 is reserved for a back pointer to the + previous frame. ocamlopt-generated code does not maintain this back link. +* The 32-bit word at SP + 8 is reserved for saving the CR register. + ocamlopt-generated code does not use this word. +* The 32-bit word at SP + 12 is reserved for future uses. +* The 64-bit word at SP + 16 is used by the *callee* to save its return address + (the value of the LR register on entry to the callee). So, a function + saves its return address in the callee's frame, at offset 16 from the SP + on entry to the function. +* The 64-bit word at SP + 24 is used by the *caller* or by + linker-generated call *veeners* to save the TOC register r2 across calls. + +A typical function prologue that allocates N bytes of stack and saves LR: +``` + addi 1, 1, -N + mflr 0 + std 0, (N + 16)(1) ; in caller's frame! +``` +If the back pointer is to be maintained as well: +``` + stdu 1, -N(1) + mflr 0 + std 0, (N + 16)(1) ; in caller's frame! +``` + +If the function needs to stack-allocate M extra bytes, e.g. for an +exception handler, it should leave the bottom 32 bytes reserved. So, +it decrements SP by M and uses bytes SP + 32 ... SP + 32 + M - 1 as +the stack-allocated space: +``` + addi 1, 1, -32 ; allocate exception handler + std 29, 40(1) ; save previous trap ptr at handler + 8 +``` + +Because the bottom 32 bytes are used by linker-generated call veeners, +we need to reserve them both in C stack frames and in OCaml stack +frames. + +To speed up stack switching between OCaml and C, the stack pointers +saved in struct stack_info and struct c_stack_link point to the bottom +of the stack frame and include the reserved 32 bytes area. + +## TOC references and register r2 + +Register r2 points to a table of contents (TOC) that contains absolute +addresses for symbols. Different compilation units can have different TOCs. +Hence, register r2 must be properly initialized at the beginning of +functions that access the TOC, and properly saved and restored around +function calls. + +The general protocol is as follows: + +* When a function is called, its address (the address of the first + instruction of the function) must be in register r12. + +* Every function that makes TOC references starts with two + instructions that initialize r2 to a fixed offset from r12, offset + determined by the linker: +``` +0: addis 2, 12, (.TOC. - 0b)@ha + addi 2, 2, (.TOC. - 0b)@l +``` + +* Register r2 is caller-save. Hence, if the caller makes TOC + references, it must save r2 before the call and restore it after. + The reserved area of the current frame is typically used to save r2. + +For example, here is a call to a function pointer found at offset 0 +from register r3: +``` + std 2, 24(1) ; save r2 + ld 12, 0(3) ; address of function in r12 + mtctr 12 + bctrl ; call the function + ld 2, 24(1) ; restore r2 +``` + +If the caller does not make TOC references, the `std 2` and `ld 2` can +be omitted. Likewise for a tail call: +``` + ld 12, 0(3) ; address of function in r12 + mtctr 12 + bctr ; tail call the function +``` + +For calls to known functions `bl function_name`, a special protocol is +implemented by the linker. The object file contains the `bl` +instruction followed by a `nop` instruction: +``` + bl function_name + nop +``` +If the linker determines that `function_name` and the caller function +share the same TOC, it rewrites the code as +``` + bl function_name+8 ; skip the prologue that initializes r2 + nop +``` +So, the callee does not recompute r2 from r12, it just uses the same +r2 value as the caller. For this reason, r12 need not be initialized +by the caller. + +If `function_name` uses a different TOC than the caller function, the +linker generates a branch-and-link to a veener function. The veener +function saves r2, recomputes r12, and branches to `function_name`. +The `nop` after the branch-and-link becomes a reload of the caller's +TOC pointer in r2. +``` + bl veener_function + ld 2, 24(1) ; restore r2 + + +veener_function: + std 2, 24(1) ; save caller's r2 + + mtctr r12 + bctr +``` + +However, this doesn't quite work for tail calls. Consider: + +- current function f1 calls f2 that has the same TOC; +- f2 tailcalls f3 that has a different TOC. + +Because f1 and f2 have the same TOC, the linker inserted no code in f1 +to save and restore r2 around the call to f2. + +Because f2 tailcalls f3, r2 will not be restored to f2's TOC when f3 returns. + +So, we're back into f1, with the wrong TOC in r2. + +To avoid this problem, ocamlopt always reloads r2 after a direct call. +One possibility would be to save r2 and reload r2 around the direct +call, using the canonical slot in the current frame: +``` + std 2, 24(1) + bl function_name + nop + ld 2, 24(1) +``` +However, this adds 2 instructions to every direct call. We can avoid +generating the store if the current function saves its r2 value +somewhere on the stack at the beginning. Then, after each direct or +indirect call, we can reload r2 from there. + +What is "there"? Which location is used for saving r2 at the +beginning of the function? A natural choice would be the word at SP + 24, +i.e. the TOC-saving word for the current function. However, SP can +vary inside the function, e.g. to install and remove exception +handlers, so additional r2 saves would need to be generated. + +The code currently generated by ocamlopt saves its r2 at SP + (N + 8) +where N is the size of the stack frame, that is, at the word reserved +by the callee for the caller to save the CR register, which +ocamlopt-generated code does not use otherwise. This avoids +allocating one more word in the current frame just to save r2. diff --git a/asmcomp/power/arch.ml b/asmcomp/power/arch.ml index a84f8e3b..649618f6 100644 --- a/asmcomp/power/arch.ml +++ b/asmcomp/power/arch.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/power/arch.ml" (**************************************************************************) (* *) (* OCaml *) @@ -17,34 +18,12 @@ open Format -let ppc64 = - match Config.model with - | "ppc" -> false - | "ppc64" | "ppc64le" -> true - | _ -> assert false - -type abi = ELF32 | ELF64v1 | ELF64v2 - -let abi = - match Config.model with - | "ppc" -> ELF32 - | "ppc64" -> ELF64v1 - | "ppc64le" -> ELF64v2 - | _ -> assert false - type cmm_label = int (* Do not introduce a dependency to Cmm *) (* Machine-specific command-line options *) -let big_toc = ref true - -let command_line_options = [ - "-flarge-toc", Arg.Set big_toc, - " Support TOC (table of contents) greater than 64 kbytes (default)"; - "-fsmall-toc", Arg.Clear big_toc, - " TOC (table of contents) is limited to 64 kbytes" -] +let command_line_options = [] (* Specific operations *) @@ -54,6 +33,10 @@ type specific_operation = | Ialloc_far of (* allocation in large functions *) { bytes : int; dbginfo : Debuginfo.alloc_dbginfo } | Ipoll_far of { return_label : cmm_label option } + (* poll point in large functions *) + | Icheckbound_far (* bounds check in large functions *) + | Icheckbound_imm_far of int (* bounds check in large functions, + constant 2nd arg (the index) *) (* Addressing modes *) @@ -66,12 +49,10 @@ type addressing_mode = let big_endian = match Config.model with - | "ppc" -> true | "ppc64" -> true | "ppc64le" -> false | _ -> assert false - -let size_addr = if ppc64 then 8 else 4 +let size_addr = 8 let size_int = size_addr let size_float = 8 @@ -121,15 +102,25 @@ let print_specific_operation printreg op ppf arg = fprintf ppf "alloc_far %d" bytes | Ipoll_far _ -> fprintf ppf "poll_far" + | Icheckbound_far -> + fprintf ppf "check_far > %a %a" printreg arg.(0) printreg arg.(1) + | Icheckbound_imm_far n -> + fprintf ppf "check_far > %a %d" printreg arg.(0) n (* Specific operations that are pure *) let operation_is_pure = function - | Ialloc_far _ | Ipoll_far _ -> false + | Ialloc_far _ + | Ipoll_far _ + | Icheckbound_far + | Icheckbound_imm_far _ -> false | _ -> true (* Specific operations that can raise *) let operation_can_raise = function - | Ialloc_far _ | Ipoll_far _ -> true + | Ialloc_far _ + | Ipoll_far _ + | Icheckbound_far + | Icheckbound_imm_far _ -> true | _ -> false diff --git a/asmcomp/power/arch.mli b/asmcomp/power/arch.mli new file mode 100644 index 00000000..a4a619a9 --- /dev/null +++ b/asmcomp/power/arch.mli @@ -0,0 +1,85 @@ +# 2 "asmcomp/power/arch.mli" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Specific operations for the PowerPC processor *) + +type cmm_label = int +(* Do not introduce a dependency to Cmm *) + +(* Machine-specific command-line options *) + +val command_line_options : (string * Arg.spec * string) list + +(* Specific operations *) + +type specific_operation = + Imultaddf (* multiply and add *) + | Imultsubf (* multiply and subtract *) + | Ialloc_far of (* allocation in large functions *) + { bytes : int; dbginfo : Debuginfo.alloc_dbginfo } + | Ipoll_far of { return_label : cmm_label option } + (* poll point in large functions *) + | Icheckbound_far (* bounds check in large functions *) + | Icheckbound_imm_far of int (* bounds check in large functions *) + +(* Addressing modes *) + +type addressing_mode = + Ibased of string * int (* symbol + displ *) + | Iindexed of int (* reg + displ *) + | Iindexed2 (* reg + reg *) + +(* Sizes, endianness *) + +val big_endian : bool + +val size_addr : int + +val size_int : int + +val size_float : int + +val allow_unaligned_access : bool + +(* Behavior of division *) + +val division_crashes_on_overflow : bool + +(* Operations on addressing modes *) + +val identity_addressing : addressing_mode + +val offset_addressing : addressing_mode -> int -> addressing_mode + +val num_args_addressing : addressing_mode -> int + +(* Printing operations and addressing modes *) + +val print_addressing : + (Format.formatter -> 'a -> unit) -> addressing_mode -> + Format.formatter -> 'a array -> unit + +val print_specific_operation : + (Format.formatter -> 'a -> unit) -> specific_operation -> + Format.formatter -> 'a array -> unit + +(* Specific operations that are pure *) + +val operation_is_pure : specific_operation -> bool + +(* Specific operations that can raise *) + +val operation_can_raise : specific_operation -> bool diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp index 28d9023b..47f5419a 100644 --- a/asmcomp/power/emit.mlp +++ b/asmcomp/power/emit.mlp @@ -1,4 +1,3 @@ -#2 "asmcomp/power/emit.mlp" (**************************************************************************) (* *) (* OCaml *) @@ -27,20 +26,18 @@ open Emitenv (* Reserved space at bottom of stack *) -let reserved_stack_space = - match abi with - | ELF32 -> 0 - | ELF64v1 -> 48 - | ELF64v2 -> 32 +let reserved_stack_space = 32 (* Layout of the stack. The stack is kept 16-aligned. *) let initial_stack_offset f = - reserved_stack_space + - size_int * f.fun_num_stack_slots.(0) + (* Local int variables *) - size_float * f.fun_num_stack_slots.(1) + (* Local float variables *) - (if f.fun_contains_calls && abi = ELF32 then size_int else 0) - (* The return address *) + if f.fun_frame_required then + reserved_stack_space + (* Including the return address *) + size_int * f.fun_num_stack_slots.(0) + (* Local int variables *) + size_float * f.fun_num_stack_slots.(1) (* Local float variables *) + else + 0 + let frame_size env = let size = env.stack_offset + (* Trap frame, outgoing parameters *) @@ -55,30 +52,16 @@ let slot_offset env loc cls = else n * size_float) | Incoming n -> (* Callee's [reserved_stack_space] is included in [frame_size]. - To access incoming arguments, add caller's [reserverd_stack_space]. *) + To access incoming arguments, add caller's [reserved_stack_space]. *) frame_size env + reserved_stack_space + n | Outgoing n -> reserved_stack_space + n | Domainstate _ -> assert false (* not a stack slot *) -let retaddr_offset env = - match abi with - | ELF32 -> frame_size env - size_addr - | ELF64v1 | ELF64v2 -> frame_size env + 16 - -let toc_save_offset env = - match abi with - | ELF32 -> assert false - | ELF64v1 | ELF64v2 -> frame_size env + 8 - -let (trap_size, trap_handler_offset, trap_previous_offset) = - match abi with - | ELF32 -> (16, 0, 4) - | ELF64v1 -> (32, 56, 64) - | ELF64v2 -> (32, 40, 48) +let retaddr_offset env = frame_size env + 16 -(* Output a symbol *) +let toc_save_offset env = frame_size env + 8 -let emit_symbol s = Emitaux.emit_symbol '.' s +let trap_size = 16 (* Output a label *) @@ -92,12 +75,6 @@ let emit_label lbl = let code_space = " .section \".text\"\n" -let function_descr_space = - match abi with - | ELF32 -> code_space - | ELF64v1 -> " .section \".opd\",\"aw\"\n" - | ELF64v2 -> code_space - let data_space = " .section \".data\"\n" @@ -107,18 +84,6 @@ let rodata_space = let toc_space = " .section \".toc\",\"aw\"\n" -(* Names of instructions that differ in 32 and 64-bit modes *) - -let lg = if ppc64 then "ld" else "lwz" -let stg = if ppc64 then "std" else "stw" -let lwa = if ppc64 then "lwa" else "lwz" -let cmpg = if ppc64 then "cmpd" else "cmpw" -let cmplg = if ppc64 then "cmpld" else "cmplw" -let datag = if ppc64 then ".quad" else ".long" -let mullg = if ppc64 then "mulld" else "mullw" -let divg = if ppc64 then "divd" else "divw" -let tglle = if ppc64 then "tdlle" else "twlle" - (* Output a processor register *) let emit_gpr = emit_int @@ -142,13 +107,6 @@ let emit_stack env r = `{emit_int ofs}(1)` | _ -> Misc.fatal_error "Emit.emit_stack" -(* Output the name of a symbol plus an optional offset *) - -let emit_symbol_offset (s, d) = - emit_symbol s; - if d > 0 then `+`; - if d <> 0 then emit_int d - (* Split a 32-bit integer constants in two 16-bit halves *) let low_high_u n = (n land 0xFFFF, n asr 16) @@ -211,22 +169,11 @@ let emit_toctable () = The [dest] should not be r0, since [dest] is used as the index register for a ld instruction, but r0 reads as zero when used as an index register. *) + let emit_tocload emit_dest dest entry = let lbl = label_for_tocref entry in - if !big_toc || !Clflags.for_package <> None then begin - ` addis {emit_dest dest}, 2, {emit_label lbl}@toc@ha\n`; - ` ld {emit_dest dest}, {emit_label lbl}@toc@l({emit_dest dest}) # {emit_tocentry entry}\n` - end else begin - ` ld {emit_dest dest}, {emit_label lbl}@toc(2) # {emit_tocentry entry}\n` - end - -(* Output a "upper 16 bits" or "lower 16 bits" operator. *) - -let emit_upper emit_fun arg = - emit_fun arg; emit_string "@ha" - -let emit_lower emit_fun arg = - emit_fun arg; emit_string "@l" + ` addis {emit_dest dest}, 2, {emit_label lbl}@toc@ha\n`; + ` ld {emit_dest dest}, {emit_label lbl}@toc@l({emit_dest dest}) # {emit_tocentry entry}\n` (* Output a load or store operation *) @@ -236,21 +183,15 @@ let valid_offset instr ofs = let emit_load_store instr addressing_mode addr n arg = match addressing_mode with | Ibased(s, d) -> - begin match abi with - | ELF32 -> - ` addis 11, 0, {emit_upper emit_symbol_offset (s,d)}\n`; - ` {emit_string instr} {emit_reg arg}, {emit_lower emit_symbol_offset (s,d)}(11)\n` - | ELF64v1 | ELF64v2 -> - emit_tocload emit_gpr 11 (TocSym s); - let (lo, hi) = low_high_s d in - if hi <> 0 then - ` addis 11, 11, {emit_int hi}\n`; - if valid_offset instr lo then - ` {emit_string instr} {emit_reg arg}, {emit_int lo}(11)\n` - else begin - ` li 0, {emit_int lo}\n`; - ` {emit_string instr}x {emit_reg arg}, 11, 0\n` - end + emit_tocload emit_gpr 11 (TocSym s); + let (lo, hi) = low_high_s d in + if hi <> 0 then + ` addis 11, 11, {emit_int hi}\n`; + if valid_offset instr lo then + ` {emit_string instr} {emit_reg arg}, {emit_int lo}(11)\n` + else begin + ` li 0, {emit_int lo}\n`; + ` {emit_string instr}x {emit_reg arg}, 11, 0\n` end | Iindexed ofs -> if is_immediate ofs && valid_offset instr ofs then @@ -267,18 +208,41 @@ let emit_load_store instr addressing_mode addr n arg = (* After a comparison, extract the result as 0 or 1 *) -let emit_set_comp cmp res = +let emit_extract_crbit bitnum negated res = ` mfcr 0\n`; + ` rlwinm {emit_reg res}, 0, {emit_int(bitnum+1)}, 31, 31\n`; + if negated then + ` xori {emit_reg res}, {emit_reg res}, 1\n` + +let emit_set_comp cmp res = let bitnum = match cmp with Ceq | Cne -> 2 | Cgt | Cle -> 1 - | Clt | Cge -> 0 in -` rlwinm {emit_reg res}, 0, {emit_int(bitnum+1)}, 31, 31\n`; - begin match cmp with - Cne | Cle | Cge -> ` xori {emit_reg res}, {emit_reg res}, 1\n` - | _ -> () - end + | Clt | Cge -> 0 + and negated = + match cmp with + | Cne | Cle | Cge -> true + | Ceq | Clt | Cgt -> false + in + emit_extract_crbit bitnum negated res + +let emit_float_comp cmp arg = + ` fcmpu 0, {emit_reg arg.(0)}, {emit_reg arg.(1)}\n`; + (* bit 0 = lt, bit 1 = gt, bit 2 = eq *) + let bitnum = + match cmp with + | CFeq | CFneq -> 2 + | CFle | CFnle -> ` cror 3, 0, 2\n`; 3 (* lt or eq *) + | CFgt | CFngt -> 1 + | CFge | CFnge -> ` cror 3, 1, 2\n`; 3 (* gt or eq *) + | CFlt | CFnlt -> 0 + and negated = + match cmp with + | CFneq | CFngt | CFnge | CFnlt | CFnle -> true + | CFeq | CFgt | CFge | CFlt | CFle -> false + in + (bitnum, negated) (* Free the stack frame *) @@ -290,18 +254,12 @@ let emit_free_frame env = (* Emit a "bl" instruction to a given symbol *) let emit_call s = - match abi with - | ELF32 when !Clflags.dlcode || !Clflags.pic_code -> - ` bl {emit_symbol s}@plt\n` - | _ -> - ` bl {emit_symbol s}\n` + ` bl {emit_symbol s}\n` (* Add a nop after a "bl" call for ELF64 *) let emit_call_nop () = - match abi with - | ELF32 -> () - | ELF64v1 | ELF64v2 -> ` nop \n` + ` nop \n` (* Reload the TOC register r2 from the value saved on the stack *) @@ -316,7 +274,7 @@ let adjust_stack_offset env delta = (* Record live pointers at call points *) -let record_frame env live dbg = +let record_frame_label env live dbg = let lbl = new_label() in let live_offset = ref [] in Reg.Set.iter @@ -331,6 +289,10 @@ let record_frame env live dbg = live; record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; + lbl + +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in `{emit_label lbl}:\n` (* Names for conditional branches after comparisons *) @@ -341,22 +303,22 @@ let branch_for_comparison = function | Cge -> "bge" | Clt -> "blt" let name_for_int_comparison = function - Isigned cmp -> (cmpg, branch_for_comparison cmp) - | Iunsigned cmp -> (cmplg, branch_for_comparison cmp) + Isigned cmp -> ("cmpd", branch_for_comparison cmp) + | Iunsigned cmp -> ("cmpld", branch_for_comparison cmp) (* Names for various instructions *) let name_for_intop = function Iadd -> "add" - | Imul -> if ppc64 then "mulld" else "mullw" - | Imulh -> if ppc64 then "mulhd" else "mulhw" - | Idiv -> if ppc64 then "divd" else "divw" + | Imul -> "mulld" + | Imulh -> "mulhd" + | Idiv -> "divd" | Iand -> "and" | Ior -> "or" | Ixor -> "xor" - | Ilsl -> if ppc64 then "sld" else "slw" - | Ilsr -> if ppc64 then "srd" else "srw" - | Iasr -> if ppc64 then "srad" else "sraw" + | Ilsl -> "sld" + | Ilsr -> "srd" + | Iasr -> "srad" | _ -> Misc.fatal_error "Emit.Intop" let name_for_intop_imm = function @@ -365,9 +327,9 @@ let name_for_intop_imm = function | Iand -> "andi." | Ior -> "ori" | Ixor -> "xori" - | Ilsl -> if ppc64 then "sldi" else "slwi" - | Ilsr -> if ppc64 then "srdi" else "srwi" - | Iasr -> if ppc64 then "sradi" else "srawi" + | Ilsl -> "sldi" + | Ilsr -> "srdi" + | Iasr -> "sradi" | _ -> Misc.fatal_error "Emit.Intop_imm" let name_for_floatop1 = function @@ -404,8 +366,11 @@ module BR = Branch_relaxation.Make (struct let classify_instr = function | Lop (Ialloc _) | Lop (Ipoll _) - (* [Ialloc_far] does not need to be here, since its code sequence - never involves any conditional branches that might need relaxing. *) + | Lop (Iintop Icheckbound) + | Lop (Iintop_imm (Icheckbound, _)) + (* The various "far" variants in [specific_operation] don't need to + return [Some] here, since their code sequences never contain any + conditional branches that might need relaxing. *) | Lcondbranch _ | Lcondbranch3 _ -> Some Branch | _ -> None @@ -413,36 +378,15 @@ module BR = Branch_relaxation.Make (struct let offset_pc_at_branch = 1 - let size = - match abi with - | ELF32 -> (fun a _ _ -> a) - | ELF64v1 -> (fun _ b _ -> b) - | ELF64v2 -> (fun _ _ c -> c) - - let profiling_prologue_size () = - match abi with - | ELF32 -> 5 - | ELF64v1 | ELF64v2 -> 6 - let prologue_size f = - profiling_prologue_size () - + (if initial_stack_offset f > 0 then 1 else 0) - + (if f.fun_contains_calls then - 2 + - match abi with - | ELF32 -> 0 - | ELF64v1 | ELF64v2 -> 1 - else 0) - - let tocload_size() = - if !big_toc || !Clflags.for_package <> None then 2 else 1 + if f.fun_frame_required then 4 else 0 + + let tocload_size = 2 let load_store_size = function | Ibased(_s, d) -> - if abi = ELF32 then 2 else begin - let (_lo, hi) = low_high_s d in - tocload_size() + (if hi = 0 then 1 else 2) - end + let (_lo, hi) = low_high_s d in + tocload_size + (if hi = 0 then 1 else 2) | Iindexed ofs -> if is_immediate ofs then 1 else 3 | Iindexed2 -> 1 @@ -456,25 +400,31 @@ module BR = Branch_relaxation.Make (struct hi >= -0x8000 && hi <= 0x7FFF) then 2 else if (let (_lo, hi) = native_low_high_u n in hi >= -0x8000 && hi <= 0x7FFF) then 2 - else tocload_size() - | Lop(Iconst_float _) -> if abi = ELF32 then 2 else tocload_size() - | Lop(Iconst_symbol _) -> if abi = ELF32 then 2 else tocload_size() - | Lop(Icall_ind) -> size 2 5 4 - | Lop(Icall_imm _) -> size 1 3 3 - | Lop(Itailcall_ind) -> size 5 7 6 + else tocload_size + | Lop(Iconst_float _) -> tocload_size + | Lop(Iconst_symbol _) -> tocload_size + | Lop(Icall_ind) -> 4 + | Lop(Icall_imm _) -> 3 + | Lop(Itailcall_ind) -> 6 | Lop(Itailcall_imm { func; _ }) -> if func = f.fun_name then 1 - else size 4 (7 + tocload_size()) (6 + tocload_size()) - | Lop(Iextcall { alloc = true; _ }) -> - size 3 (2 + tocload_size()) (2 + tocload_size()) - | Lop(Iextcall { alloc = false; _}) -> size 1 2 2 + else 6 + tocload_size + | Lop(Iextcall { alloc; stack_ofs; _}) -> + if stack_ofs > 0 then tocload_size + 4 + else if alloc then tocload_size + 2 + else 5 | Lop(Istackoffset _) -> 1 - | Lop(Iload(chunk, addr, _mut)) -> - if chunk = Byte_signed - then load_store_size addr + 1 - else load_store_size addr - | Lop(Istore(_chunk, addr, _)) -> load_store_size addr + | Lop(Iload {memory_chunk; addressing_mode; _ }) -> + if memory_chunk = Byte_signed + then load_store_size addressing_mode + 1 + else load_store_size addressing_mode + | Lop(Istore(chunk, addr, assignment)) -> + (match chunk with + | Single -> 1 + | Word_int | Word_val when assignment -> 1 + | _ -> 0) + + load_store_size addr | Lop(Ialloc _) -> 5 | Lop(Ispecific(Ialloc_far _)) -> 6 | Lop(Ipoll { return_label = Some(_) }) -> 5 @@ -483,14 +433,21 @@ module BR = Branch_relaxation.Make (struct | Lop(Ispecific(Ipoll_far { return_label = None } )) -> 4 | Lop(Iintop Imod) -> 3 | Lop(Iintop(Icomp _)) -> 4 + | Lop(Iintop(Icheckbound)) -> 2 + | Lop(Ispecific(Icheckbound_far)) -> 3 + | Lop(Icompf _) -> 5 | Lop(Iintop _) -> 1 | Lop(Iintop_imm(Icomp _, _)) -> 4 + | Lop(Iintop_imm(Icheckbound, _)) -> 2 + | Lop(Ispecific(Icheckbound_imm_far _)) -> 3 | Lop(Iintop_imm _) -> 1 | Lop(Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf) -> 1 | Lop(Ifloatofint) -> 9 | Lop(Iintoffloat) -> 4 | Lop(Iopaque) -> 0 | Lop(Ispecific _) -> 1 + | Lop (Idls_get) -> 1 + | Lop (Ireturn_addr) -> 1 | Lreloadretaddr -> 2 | Lreturn -> 2 | Llabel _ -> 0 @@ -500,12 +457,13 @@ module BR = Branch_relaxation.Make (struct 1 + (if lbl0 = None then 0 else 1) + (if lbl1 = None then 0 else 1) + (if lbl2 = None then 0 else 1) - | Lswitch _ -> size 7 (5 + tocload_size()) (5 + tocload_size()) - | Lentertrap -> size 0 (tocload_size()) (tocload_size()) + | Lswitch _ -> 5 + tocload_size + | Lentertrap -> 1 | Ladjust_trap_depth _ -> 0 - | Lpushtrap _ -> size 5 (4 + tocload_size()) (4 + tocload_size()) + | Lpushtrap _ -> 4 + tocload_size | Lpoptrap -> 2 - | Lraise _ -> 6 + | Lraise (Lambda.Raise_regular | Lambda.Raise_reraise) -> 2 + | Lraise Lambda.Raise_notrace -> 5 let relax_allocation ~num_bytes:bytes ~dbginfo = Lop (Ispecific (Ialloc_far { bytes; dbginfo })) @@ -513,11 +471,15 @@ module BR = Branch_relaxation.Make (struct let relax_poll ~return_label = Lop (Ispecific (Ipoll_far { return_label })) + let relax_intop_checkbound () = + Lop (Ispecific (Icheckbound_far)) + + let relax_intop_imm_checkbound ~bound = + Lop (Ispecific (Icheckbound_imm_far bound)) + (* [classify_addr], above, never identifies these instructions as needing relaxing. As such, these functions should never be called. *) let relax_specific_op _ = assert false - let relax_intop_checkbound () = assert false - let relax_intop_imm_checkbound ~bound:_ = assert false end) (* Assembly code for inlined allocation *) @@ -525,16 +487,16 @@ end) let emit_alloc env i bytes dbginfo far = if env.call_gc_label = 0 then env.call_gc_label <- new_label (); let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in - ` {emit_string lg} 0, {emit_int offset}(30)\n`; - ` addi 31, 31, {emit_int(-bytes)}\n`; - ` {emit_string cmplg} 31, 0\n`; + ` ld 0, {emit_int offset}(30)\n`; + ` addi 31, 31, {emit_int(-bytes)}\n`; + ` cmpld 31, 0\n`; if not far then begin - ` bltl {emit_label env.call_gc_label}\n`; + ` bltl- {emit_label env.call_gc_label}\n`; record_frame env i.live (Dbg_alloc dbginfo); ` addi {emit_reg i.res.(0)}, 31, {emit_int size_addr}\n` end else begin let lbl = new_label() in - ` bge {emit_label lbl}\n`; + ` bge+ {emit_label lbl}\n`; ` bl {emit_label env.call_gc_label}\n`; record_frame env i.live (Dbg_alloc dbginfo); `{emit_label lbl}: addi {emit_reg i.res.(0)}, 31, {emit_int size_addr}\n` @@ -543,33 +505,62 @@ let emit_alloc env i bytes dbginfo far = let emit_poll env i return_label far = if env.call_gc_label = 0 then env.call_gc_label <- new_label (); let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in - ` {emit_string lg} 0, {emit_int offset}(30)\n`; - ` {emit_string cmplg} 31, 0\n`; + ` ld 0, {emit_int offset}(30)\n`; + ` cmpld 31, 0\n`; if not far then begin begin match return_label with | None -> begin - ` bltl {emit_label env.call_gc_label}\n`; + ` bltl- {emit_label env.call_gc_label}\n`; record_frame env i.live (Dbg_alloc []) end | Some return_label -> begin - ` bltl {emit_label env.call_gc_label}\n`; + ` bltl- {emit_label env.call_gc_label}\n`; record_frame env i.live (Dbg_alloc []); - ` b {emit_label return_label}\n` + ` b {emit_label return_label}\n` end end; end else begin let lbl = new_label () in - ` bge {emit_label lbl}\n`; + ` bge+ {emit_label lbl}\n`; ` bl {emit_label env.call_gc_label}\n`; record_frame env i.live (Dbg_alloc []); - ` {emit_label lbl}: \n`; + `{emit_label lbl}: \n`; match return_label with | None -> () - | Some return_label -> ` b {emit_label return_label}\n` + | Some return_label -> ` b {emit_label return_label}\n` + end + +let bound_error_label env dbg = + if !Clflags.debug then begin + let lbl_bound_error = new_label() in + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- + { bd_lbl = lbl_bound_error; + bd_frame = lbl_frame; } :: env.bound_error_sites; + lbl_bound_error + end else begin + match env.bound_error_call with + | None -> + let lbl = new_label() in + env.bound_error_call <- Some lbl; + lbl + | Some lbl -> lbl end +let emit_call_bound_error bd = + `{emit_label bd.bd_lbl}:`; emit_call "caml_ml_array_bound_error"; + `{emit_label bd.bd_frame}:`; emit_call_nop() + +let emit_call_bound_errors env = + List.iter emit_call_bound_error env.bound_error_sites; + match env.bound_error_call with + | None -> () + | Some lbl -> + `{emit_label lbl}:`; emit_call "caml_ml_array_bound_error"; + emit_call_nop() + (* Output the assembly code for an instruction *) let emit_instr env i = @@ -577,21 +568,17 @@ let emit_instr env i = match i.desc with | Lend -> () | Lprologue -> - assert (env.f.fun_prologue_required); let n = frame_size env in if n > 0 then begin ` addi 1, 1, {emit_int(-n)}\n`; cfi_adjust_cfa_offset n end; - if env.f.fun_contains_calls then begin + if env.f.fun_frame_required then begin let ra = retaddr_offset env in ` mflr 0\n`; - ` {emit_string stg} 0, {emit_int ra}(1)\n`; + ` std 0, {emit_int ra}(1)\n`; cfi_offset ~reg: 65 (* LR *) ~offset: (ra - n); - match abi with - | ELF32 -> () - | ELF64v1 | ELF64v2 -> - ` std 2, {emit_int(toc_save_offset env)}(1)\n` + ` std 2, {emit_int(toc_save_offset env)}(1)\n` end | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in @@ -602,11 +589,11 @@ let emit_instr env i = | {loc = Reg _; typ = Float}, {loc = Reg _; typ = Float} -> ` fmr {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = (Val | Int | Addr)}, {loc = Stack _} -> - ` {emit_string stg} {emit_reg src}, {emit_stack env dst}\n` + ` std {emit_reg src}, {emit_stack env dst}\n` | {loc = Reg _; typ = Float}, {loc = Stack _} -> ` stfd {emit_reg src}, {emit_stack env dst}\n` | {loc = Stack _; typ = (Val | Int | Addr)}, {loc = Reg _} -> - ` {emit_string lg} {emit_reg dst}, {emit_stack env src}\n` + ` ld {emit_reg dst}, {emit_stack env src}\n` | {loc = Stack _; typ = Float}, {loc = Reg _} -> ` lfd {emit_reg dst}, {emit_stack env src}\n` | (_, _) -> @@ -631,62 +618,22 @@ let emit_instr env i = if lo <> 0 then ` ori {emit_reg i.res.(0)}, {emit_reg i.res.(0)}, {emit_int lo}\n` end else begin - match abi with - | ELF32 -> assert false - | ELF64v1 | ELF64v2 -> - emit_tocload emit_reg i.res.(0) (TocInt n) + emit_tocload emit_reg i.res.(0) (TocInt n) end end end | Lop(Iconst_float f) -> - begin match abi with - | ELF32 -> - let lbl = new_label() in - env.float_literals <- { fl=f; lbl } :: env.float_literals; - ` addis 11, 0, {emit_upper emit_label lbl}\n`; - ` lfd {emit_reg i.res.(0)}, {emit_lower emit_label lbl}(11)\n` - | ELF64v1 | ELF64v2 -> - let entry = TocFloat f in - let lbl = label_for_tocref entry in - if !big_toc || !Clflags.for_package <> None then begin - ` addis 11, 2, {emit_label lbl}@toc@ha\n`; - ` lfd {emit_reg i.res.(0)}, {emit_label lbl}@toc@l(11) # {emit_tocentry entry}\n` - end else begin - ` lfd {emit_reg i.res.(0)}, {emit_label lbl}@toc(2) # {emit_tocentry entry}\n` - end - end + let entry = TocFloat f in + let lbl = label_for_tocref entry in + ` addis 11, 2, {emit_label lbl}@toc@ha\n`; + ` lfd {emit_reg i.res.(0)}, {emit_label lbl}@toc@l(11) # {emit_tocentry entry}\n` | Lop(Iconst_symbol s) -> - begin match abi with - | ELF32 -> - ` addis {emit_reg i.res.(0)}, 0, {emit_upper emit_symbol s}\n`; - ` addi {emit_reg i.res.(0)}, {emit_reg i.res.(0)}, {emit_lower emit_symbol s}\n` - | ELF64v1 | ELF64v2 -> - emit_tocload emit_reg i.res.(0) (TocSym s) - end + emit_tocload emit_reg i.res.(0) (TocSym s) | Lop(Icall_ind) -> - begin match abi with - | ELF32 -> - ` mtctr {emit_reg i.arg.(0)}\n`; - ` bctrl\n`; - record_frame env i.live (Dbg_other i.dbg) - | ELF64v1 -> - ` ld 0, 0({emit_reg i.arg.(0)})\n`; (* code pointer *) - ` mtctr 0\n`; - ` ld 2, 8({emit_reg i.arg.(0)})\n`; (* TOC for callee *) - ` bctrl\n`; - record_frame env i.live (Dbg_other i.dbg); - emit_reload_toc env - | ELF64v2 -> - ` mtctr {emit_reg i.arg.(0)}\n`; - ` mr 12, {emit_reg i.arg.(0)}\n`; (* addr of fn in r12 *) - ` bctrl\n`; - record_frame env i.live (Dbg_other i.dbg); - emit_reload_toc env - end + ` mtctr {emit_reg i.arg.(0)}\n`; + ` mr 12, {emit_reg i.arg.(0)}\n`; (* addr of fn in r12 *) + ` bctrl\n`; + record_frame env i.live (Dbg_other i.dbg); + emit_reload_toc env | Lop(Icall_imm { func; }) -> - begin match abi with - | ELF32 -> - emit_call func; - record_frame env i.live (Dbg_other i.dbg) - | ELF64v1 | ELF64v2 -> (* For PPC64, we cannot just emit a "bl s; nop" sequence, because of the following scenario: - current function f1 calls f2 that has the same TOC @@ -704,25 +651,15 @@ let emit_instr env i = by the linker, but this is harmless. Cost: 3 instructions if same TOC, 7 if different TOC. Let's try option 2. *) - emit_call func; - record_frame env i.live (Dbg_other i.dbg); - ` nop\n`; - emit_reload_toc env - end + emit_call func; + record_frame env i.live (Dbg_other i.dbg); + ` nop\n`; + emit_reload_toc env | Lop(Itailcall_ind) -> - begin match abi with - | ELF32 -> - ` mtctr {emit_reg i.arg.(0)}\n` - | ELF64v1 -> - ` ld 0, 0({emit_reg i.arg.(0)})\n`; (* code pointer *) - ` mtctr 0\n`; - ` ld 2, 8({emit_reg i.arg.(0)})\n` (* TOC for callee *) - | ELF64v2 -> - ` mtctr {emit_reg i.arg.(0)}\n`; - ` mr 12, {emit_reg i.arg.(0)}\n` (* addr of fn in r12 *) - end; - if env.f.fun_contains_calls then begin - ` {emit_string lg} 11, {emit_int(retaddr_offset env)}(1)\n`; + ` mtctr {emit_reg i.arg.(0)}\n`; + ` mr 12, {emit_reg i.arg.(0)}\n`; (* addr of fn in r12 *) + if env.f.fun_frame_required then begin + ` ld 11, {emit_int(retaddr_offset env)}(1)\n`; ` mtlr 11\n` end; emit_free_frame env; @@ -731,74 +668,83 @@ let emit_instr env i = if func = env.f.fun_name then ` b {emit_label env.f.fun_tailrec_entry_point_label}\n` else begin - begin match abi with - | ELF32 -> - () - | ELF64v1 -> - emit_tocload emit_gpr 11 (TocSym func); - ` ld 0, 0(11)\n`; (* code pointer *) - ` mtctr 0\n`; - ` ld 2, 8(11)\n` (* TOC for callee *) - | ELF64v2 -> - emit_tocload emit_gpr 12 (TocSym func); (* addr of fn must be in r12 *) - ` mtctr 12\n` - end; - if env.f.fun_contains_calls then begin - ` {emit_string lg} 11, {emit_int(retaddr_offset env)}(1)\n`; + emit_tocload emit_gpr 12 (TocSym func); (* addr of fn must be in r12 *) + ` mtctr 12\n`; + if env.f.fun_frame_required then begin + ` ld 11, {emit_int(retaddr_offset env)}(1)\n`; ` mtlr 11\n` end; emit_free_frame env; - begin match abi with - | ELF32 -> - ` b {emit_symbol func}\n` - | ELF64v1 | ELF64v2 -> - ` bctr\n` - end + ` bctr\n` end - | Lop(Iextcall { func; alloc; }) -> - if not alloc then begin - emit_call func; - emit_call_nop() + | Lop(Iextcall { func; alloc; stack_ofs }) -> + if stack_ofs > 0 then begin + emit_tocload emit_gpr 25 (TocSym func); + ` li 24, {emit_int stack_ofs}\n`; + (* size in bytes of stack area containing the arguments *) + emit_call "caml_c_call_stack_args"; + record_frame env i.live (Dbg_other i.dbg); + ` nop\n` + end else if alloc then begin + emit_tocload emit_gpr 25 (TocSym func); + emit_call "caml_c_call"; + record_frame env i.live (Dbg_other i.dbg); + ` nop\n` end else begin - match abi with - | ELF32 -> - ` addis 25, 0, {emit_upper emit_symbol func}\n`; - ` addi 25, 25, {emit_lower emit_symbol func}\n`; - emit_call "caml_c_call"; - record_frame env i.live (Dbg_other i.dbg) - | ELF64v1 | ELF64v2 -> - emit_tocload emit_gpr 25 (TocSym func); - emit_call "caml_c_call"; - record_frame env i.live (Dbg_other i.dbg); - ` nop\n` + (* Save OCaml stack pointer in a callee-save register *) + ` mr 28, 1\n`; + (* Switch to C stack *) + let offset = Domainstate.(idx_of_field Domain_c_stack) * 8 in + ` ld 1, {emit_int offset}(30)\n`; + emit_call func; + emit_call_nop(); + (* Switch back to OCaml stack *) + ` mr 1, 28\n` end | Lop(Istackoffset n) -> ` addi 1, 1, {emit_int (-n)}\n`; adjust_stack_offset env n - | Lop(Iload(chunk, addr, _mut)) -> + | Lop(Iload { memory_chunk; addressing_mode; is_atomic }) -> let loadinstr = - match chunk with + match memory_chunk with | Byte_unsigned -> "lbz" | Byte_signed -> "lbz" | Sixteen_unsigned -> "lhz" | Sixteen_signed -> "lha" | Thirtytwo_unsigned -> "lwz" - | Thirtytwo_signed -> if ppc64 then "lwa" else "lwz" - | Word_int | Word_val -> lg + | Thirtytwo_signed -> "lwa" + | Word_int | Word_val -> "ld" | Single -> "lfs" | Double -> "lfd" in - emit_load_store loadinstr addr i.arg 0 i.res.(0); - if chunk = Byte_signed then + if is_atomic then + ` sync\n`; + emit_load_store loadinstr addressing_mode i.arg 0 i.res.(0); + if is_atomic then begin + ` cmpw {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n`; + ` bne- $+4\n`; + ` isync\n` + end; + if memory_chunk = Byte_signed then ` extsb {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` - | Lop(Istore(chunk, addr, _)) -> + | Lop(Istore(Single, addr, _assignment)) -> + let tmp = phys_reg 100 (* FPR 0 *) in + ` frsp {emit_reg tmp}, {emit_reg i.arg.(0)}\n`; + emit_load_store "stfs" addr i.arg 1 tmp + | Lop(Istore(chunk, addr, assignment)) -> let storeinstr = match chunk with | Byte_unsigned | Byte_signed -> "stb" | Sixteen_unsigned | Sixteen_signed -> "sth" - | Thirtytwo_unsigned | Thirtytwo_signed -> "stw" - | Word_int | Word_val -> stg - | Single -> "stfs" + | Thirtytwo_unsigned | Thirtytwo_signed -> "stw" + | Word_int | Word_val -> "std" + | Single -> assert false | Double -> "stfd" in + (* Non-initializing stores need a memory barrier to follow the + Multicore OCaml memory model. Stores of size other than + Word_int and Word_val do not follow the memory model and therefore + do not need a barrier *) + if assignment && (chunk = Word_int || chunk = Word_val) then + ` lwsync\n`; emit_load_store storeinstr addr i.arg 1 i.arg.(0) | Lop(Ialloc { bytes; dbginfo }) -> emit_alloc env i bytes dbginfo false @@ -811,22 +757,32 @@ let emit_instr env i = | Lop(Iintop Isub) -> (* subfc has swapped arguments *) ` subfc {emit_reg i.res.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}\n` | Lop(Iintop Imod) -> - ` {emit_string divg} 0, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - ` {emit_string mullg} 0, 0, {emit_reg i.arg.(1)}\n`; + ` divd 0, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` mulld 0, 0, {emit_reg i.arg.(1)}\n`; ` subfc {emit_reg i.res.(0)}, 0, {emit_reg i.arg.(0)}\n` | Lop(Iintop(Icomp cmp)) -> begin match cmp with Isigned c -> - ` {emit_string cmpg} {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` cmpd {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; emit_set_comp c i.res.(0) | Iunsigned c -> - ` {emit_string cmplg} {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` cmpld {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; emit_set_comp c i.res.(0) end + | Lop(Icompf cmp) -> + let (bitnum, negated) = emit_float_comp cmp i.arg in + emit_extract_crbit bitnum negated i.res.(0) | Lop(Iintop (Icheckbound)) -> - if !Clflags.debug then - record_frame env Reg.Set.empty (Dbg_other i.dbg); - ` {emit_string tglle} {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` + let lbl = bound_error_label env i.dbg in + ` cmpld {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` ble- {emit_label lbl}\n` + | Lop(Ispecific (Icheckbound_far)) -> + let lbl_err = bound_error_label env i.dbg in + let lbl_next = new_label() in + ` cmpld {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` bgt+ {emit_label lbl_next}\n`; + ` b {emit_label lbl_err}\n`; + `{emit_label lbl_next}:\n` | Lop(Iintop op) -> let instr = name_for_intop op in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` @@ -835,16 +791,23 @@ let emit_instr env i = | Lop(Iintop_imm(Icomp cmp, n)) -> begin match cmp with Isigned c -> - ` {emit_string cmpg}i {emit_reg i.arg.(0)}, {emit_int n}\n`; + ` cmpdi {emit_reg i.arg.(0)}, {emit_int n}\n`; emit_set_comp c i.res.(0) | Iunsigned c -> - ` {emit_string cmplg}i {emit_reg i.arg.(0)}, {emit_int n}\n`; + ` cmpldi {emit_reg i.arg.(0)}, {emit_int n}\n`; emit_set_comp c i.res.(0) end | Lop(Iintop_imm(Icheckbound, n)) -> - if !Clflags.debug then - record_frame env Reg.Set.empty (Dbg_other i.dbg); - ` {emit_string tglle}i {emit_reg i.arg.(0)}, {emit_int n}\n` + let lbl = bound_error_label env i.dbg in + ` cmpldi {emit_reg i.arg.(0)}, {emit_int n}\n`; + ` ble- {emit_label lbl}\n` + | Lop(Ispecific(Icheckbound_imm_far n)) -> + let lbl_err = bound_error_label env i.dbg in + let lbl_next = new_label() in + ` cmpldi {emit_reg i.arg.(0)}, {emit_int n}\n`; + ` bgt+ {emit_label lbl_next}\n`; + ` b {emit_label lbl_err}\n`; + `{emit_label lbl_next}:\n` | Lop(Iintop_imm(op, n)) -> let instr = name_for_intop_imm op in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_int n}\n` @@ -855,43 +818,30 @@ let emit_instr env i = let instr = name_for_floatop2 op in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` | Lop(Ifloatofint) -> - if ppc64 then begin - (* Can use protected zone (288 bytes below r1 *) - ` std {emit_reg i.arg.(0)}, -16(1)\n`; - ` lfd {emit_reg i.res.(0)}, -16(1)\n`; - ` fcfid {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` - end else begin - let lbl = new_label() in - env.float_literals <- {fl=0x4330000080000000L; lbl} :: env.float_literals; - ` addis 11, 0, {emit_upper emit_label lbl}\n`; - ` lfd 0, {emit_lower emit_label lbl}(11)\n`; - ` lis 0, 0x4330\n`; - ` stwu 0, -16(1)\n`; - ` xoris 0, {emit_reg i.arg.(0)}, 0x8000\n`; - ` stw 0, 4(1)\n`; - ` lfd {emit_reg i.res.(0)}, 0(1)\n`; - ` addi 1, 1, 16\n`; - ` fsub {emit_reg i.res.(0)}, {emit_reg i.res.(0)}, 0\n` - end + (* Can use protected zone (288 bytes below r1 *) + ` std {emit_reg i.arg.(0)}, -16(1)\n`; + ` lfd {emit_reg i.res.(0)}, -16(1)\n`; + ` fcfid {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` | Lop(Iintoffloat) -> - if ppc64 then begin - (* Can use protected zone (288 bytes below r1 *) - ` fctidz 0, {emit_reg i.arg.(0)}\n`; - ` stfd 0, -16(1)\n`; - ` ld {emit_reg i.res.(0)}, -16(1)\n` - end else begin - ` fctiwz 0, {emit_reg i.arg.(0)}\n`; - ` stfdu 0, -16(1)\n`; - ` lwz {emit_reg i.res.(0)}, 4(1)\n`; - ` addi 1, 1, 16\n` - end + (* Can use protected zone (288 bytes below r1 *) + ` fctidz 0, {emit_reg i.arg.(0)}\n`; + ` stfd 0, -16(1)\n`; + ` ld {emit_reg i.res.(0)}, -16(1)\n` | Lop(Iopaque) -> assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific sop) -> let instr = name_for_specific sop in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n` + | Lop (Idls_get) -> + let offset = Domainstate.(idx_of_field Domain_dls_root) * 8 in + ` ld {emit_reg i.res.(0)}, {emit_int offset}(30)\n` + | Lop (Ireturn_addr) -> + if env.f.fun_frame_required then + ` ld {emit_reg i.res.(0)}, {emit_int(retaddr_offset env)}(1)\n` + else + ` mflr {emit_reg i.res.(0)}\n` | Lreloadretaddr -> - ` {emit_string lg} 11, {emit_int(retaddr_offset env)}(1)\n`; + ` ld 11, {emit_int(retaddr_offset env)}(1)\n`; ` mtlr 11\n` | Lreturn -> emit_free_frame env; @@ -903,10 +853,10 @@ let emit_instr env i = | Lcondbranch(tst, lbl) -> begin match tst with Itruetest -> - ` {emit_string cmpg}i {emit_reg i.arg.(0)}, 0\n`; + ` cmpdi {emit_reg i.arg.(0)}, 0\n`; ` bne {emit_label lbl}\n` | Ifalsetest -> - ` {emit_string cmpg}i {emit_reg i.arg.(0)}, 0\n`; + ` cmpdi {emit_reg i.arg.(0)}, 0\n`; ` beq {emit_label lbl}\n` | Iinttest cmp -> let (comp, branch) = name_for_int_comparison cmp in @@ -917,25 +867,10 @@ let emit_instr env i = ` {emit_string comp}i {emit_reg i.arg.(0)}, {emit_int n}\n`; ` {emit_string branch} {emit_label lbl}\n` | Ifloattest cmp -> begin - ` fcmpu 0, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; - (* bit 0 = lt, bit 1 = gt, bit 2 = eq *) - let bitnum = - match cmp with - | CFeq | CFneq -> 2 - | CFle | CFnle -> - ` cror 3, 0, 2\n`; (* lt or eq *) - 3 - | CFgt | CFngt -> 1 - | CFge | CFnge -> - ` cror 3, 1, 2\n`; (* gt or eq *) - 3 - | CFlt | CFnlt -> 0 - in - match cmp with - | CFneq | CFngt | CFnge | CFnlt | CFnle -> - ` bf {emit_int bitnum}, {emit_label lbl}\n` - | CFeq | CFgt | CFge | CFlt | CFle -> - ` bt {emit_int bitnum}, {emit_label lbl}\n` + let bitnum, negated = emit_float_comp cmp i.arg in + if negated + then ` bf {emit_int bitnum}, {emit_label lbl}\n` + else ` bt {emit_int bitnum}, {emit_label lbl}\n` end | Ioddtest -> ` andi. 0, {emit_reg i.arg.(0)}, 1\n`; @@ -945,7 +880,7 @@ let emit_instr env i = ` beq {emit_label lbl}\n` end | Lcondbranch3(lbl0, lbl1, lbl2) -> - ` {emit_string cmpg}i {emit_reg i.arg.(0)}, 1\n`; + ` cmpdi {emit_reg i.arg.(0)}, 1\n`; begin match lbl0 with None -> () | Some lbl -> ` blt {emit_label lbl}\n` @@ -960,92 +895,54 @@ let emit_instr env i = end | Lswitch jumptbl -> let lbl = new_label() in - if ppc64 then begin - let jumptables_lbl = match env.jumptables_lbl with + let jumptables_lbl = match env.jumptables_lbl with | None -> env.jumptables_lbl <- Some lbl; assert (List.length env.jumptables = 0); lbl - | Some l-> l - in - let start = List.length env.jumptables in - let (start_lo, start_hi) = low_high_s start in - emit_tocload emit_gpr 11 (TocLabel jumptables_lbl); - ` addi 12, {emit_reg i.arg.(0)}, {emit_int start_lo}\n`; - if start_hi <> 0 then - ` addis 12, 12, {emit_int start_hi}\n`; - ` sldi 12, 12, 2\n` - end else begin - ` addis 11, 0, {emit_upper emit_label lbl}\n`; - ` addi 11, 11, {emit_lower emit_label lbl}\n`; - ` slwi 12, {emit_reg i.arg.(0)}, 2\n` - end; - ` {emit_string lwa}x 0, 11, 12\n`; + | Some l -> l in + let start = List.length env.jumptables in + let (start_lo, start_hi) = low_high_s start in + emit_tocload emit_gpr 11 (TocLabel jumptables_lbl); + ` addi 12, {emit_reg i.arg.(0)}, {emit_int start_lo}\n`; + if start_hi <> 0 then + ` addis 12, 12, {emit_int start_hi}\n`; + ` sldi 12, 12, 2\n`; + ` lwax 0, 11, 12\n`; ` add 0, 11, 0\n`; ` mtctr 0\n`; ` bctr\n`; - if ppc64 then begin - env.jumptables <- List.rev_append (Array.to_list jumptbl) env.jumptables - end else begin - emit_string rodata_space; - `{emit_label lbl}:`; - for i = 0 to Array.length jumptbl - 1 do - ` .long {emit_label jumptbl.(i)} - {emit_label lbl}\n` - done; - emit_string code_space - end + env.jumptables <- List.rev_append (Array.to_list jumptbl) env.jumptables | Lentertrap -> - begin match abi with - | ELF32 -> () - | ELF64v1 | ELF64v2 -> emit_reload_toc env - end + emit_reload_toc env | Ladjust_trap_depth { delta_traps } -> adjust_stack_offset env (trap_size * delta_traps) | Lpushtrap { lbl_handler; } -> - begin match abi with - | ELF32 -> - ` addis 11, 0, {emit_upper emit_label lbl_handler}\n`; - ` addi 11, 11, {emit_lower emit_label lbl_handler}\n`; - ` stwu 11, -16(1)\n`; - adjust_stack_offset env 16; - ` stw 29, 4(1)\n`; - ` mr 29, 1\n` - | ELF64v1 | ELF64v2 -> - ` addi 1, 1, {emit_int (-trap_size)}\n`; - adjust_stack_offset env trap_size; - ` std 29, {emit_int trap_previous_offset}(1)\n`; - emit_tocload emit_gpr 29 (TocLabel lbl_handler); - ` std 29, {emit_int trap_handler_offset}(1)\n`; - ` mr 29, 1\n` - end + ` addi 1, 1, {emit_int (-trap_size)}\n`; + adjust_stack_offset env trap_size; + ` std 29, {emit_int reserved_stack_space}(1)\n`; + emit_tocload emit_gpr 29 (TocLabel lbl_handler); + ` std 29, {emit_int (reserved_stack_space + 8)}(1)\n`; + ` addi 29, 1, {emit_int reserved_stack_space}\n` | Lpoptrap -> - ` {emit_string lg} 29, {emit_int trap_previous_offset}(1)\n`; + ` ld 29, {emit_int reserved_stack_space}(1)\n`; ` addi 1, 1, {emit_int trap_size}\n`; adjust_stack_offset env (-trap_size) | Lraise k -> begin match k with | Lambda.Raise_regular -> - ` li 0, 0\n`; - let backtrace_pos = - Domainstate.(idx_of_field Domain_backtrace_pos) - in - begin match abi with - | ELF32 -> ` stw 0, {emit_int (backtrace_pos * 8)}(30)\n` - | _ -> ` std 0, {emit_int (backtrace_pos * 8)}(30)\n` - end; emit_call "caml_raise_exn"; record_frame env Reg.Set.empty (Dbg_raise i.dbg); emit_call_nop() | Lambda.Raise_reraise -> - emit_call "caml_raise_exn"; + emit_call "caml_reraise_exn"; record_frame env Reg.Set.empty (Dbg_raise i.dbg); emit_call_nop() | Lambda.Raise_notrace -> - ` {emit_string lg} 0, {emit_int trap_handler_offset}(29)\n`; - ` mr 1, 29\n`; - ` mtctr 0\n`; - ` {emit_string lg} 29, {emit_int trap_previous_offset}(1)\n`; - ` addi 1, 1, {emit_int trap_size}\n`; + ` ld 0, 8(29)\n`; + ` addi 1, 29, {emit_int (trap_size - reserved_stack_space)}\n`; + ` mtctr 0\n`; + ` ld 29, {emit_int (reserved_stack_space - trap_size)}(1)\n`; ` bctr\n` end @@ -1056,72 +953,96 @@ let rec emit_all env i = | Lend -> () | _ -> emit_instr env i; emit_all env i.next +(* On this target, the possible "out of line" code blocks are: + - a single "call GC" point, which comes immediately after the + function's body; + - zero, one or several "call bound error" point, which comes just after. +*) + +let max_out_of_line_code_offset fundecl = + let rec num_checkbounds count instr = + match instr.desc with + | Lend -> count + | Lop (Iintop Icheckbound) + | Lop (Iintop_imm (Icheckbound, _)) -> + num_checkbounds (count + 1) instr.next + (* The following two should never be seen, since this function is run + before branch relaxation. *) + | Lop (Ispecific Icheckbound_far) + | Lop (Ispecific (Icheckbound_imm_far _)) -> assert false + | _ -> num_checkbounds count instr.next in + let num_chk = num_checkbounds 0 fundecl.fun_body in + (* This is what the end of the function looks like: + - offset 0: call GC point (5 insn) + - offset 5: first (or only if not !Clflags.debug) call bound error + (2 insns) + - offsets 7, 9, .. : second, third, ..., call bound error + (2 insns each) *) + if num_chk = 0 then 0 + else if !Clflags.debug then 5 + (num_chk - 1) * 2 + else 5 + (* Emission of a function declaration *) let fundecl fundecl = let env = mk_env fundecl in - begin match abi with - | ELF32 -> - emit_string code_space; - ` .globl {emit_symbol fundecl.fun_name}\n`; - ` .type {emit_symbol fundecl.fun_name}, @function\n`; - ` .align 2\n`; - `{emit_symbol fundecl.fun_name}:\n` - | ELF64v1 -> - emit_string function_descr_space; - ` .align 3\n`; - ` .globl {emit_symbol fundecl.fun_name}\n`; - ` .type {emit_symbol fundecl.fun_name}, @function\n`; - `{emit_symbol fundecl.fun_name}:\n`; - ` .quad .L.{emit_symbol fundecl.fun_name}, .TOC.@tocbase\n`; - emit_string code_space; - ` .align 2\n`; - `.L.{emit_symbol fundecl.fun_name}:\n` - | ELF64v2 -> - emit_string code_space; - ` .globl {emit_symbol fundecl.fun_name}\n`; - ` .type {emit_symbol fundecl.fun_name}, @function\n`; - ` .align 2\n`; - `{emit_symbol fundecl.fun_name}:\n`; - `0: addis 2, 12, (.TOC. - 0b)@ha\n`; - ` addi 2, 2, (.TOC. - 0b)@l\n`; - ` .localentry {emit_symbol fundecl.fun_name}, . - 0b\n` + emit_string code_space; + ` .align 2\n`; + (* Dynamic stack checking *) + let stack_threshold_size = Config.stack_threshold * 8 in (* bytes *) + let max_frame_size = frame_size env + fundecl.fun_extra_stack_used in + let handle_overflow = ref None in + if fundecl.fun_contains_nontail_calls + || max_frame_size >= stack_threshold_size then begin + let overflow = new_label () and ret = new_label () in + (* The return address is saved in a register not used for param passing *) + `{emit_label overflow}: mflr 28\n`; + ` li 12, {emit_int (Config.stack_threshold + max_frame_size / 8)}\n`; + emit_call "caml_call_realloc_stack"; + emit_call_nop (); + ` mtlr 28\n`; + ` b {emit_label ret}\n`; + handle_overflow := Some(overflow, ret) end; + (* Function entry point *) + ` .globl {emit_symbol fundecl.fun_name}\n`; + ` .type {emit_symbol fundecl.fun_name}, @function\n`; + `{emit_symbol fundecl.fun_name}:\n`; + `0: addis 2, 12, (.TOC. - 0b)@ha\n`; + ` addi 2, 2, (.TOC. - 0b)@l\n`; + ` .localentry {emit_symbol fundecl.fun_name}, . - 0b\n`; emit_debug_info fundecl.fun_dbg; cfi_startproc(); - (* On this target, there is at most one "out of line" code block per - function: a single "call GC" point. It comes immediately after the - function's body. *) - BR.relax fundecl ~max_out_of_line_code_offset:0; + (* Dynamic stack checking *) + begin match !handle_overflow with + | None -> () + | Some(overflow, ret) -> + let threshold_offset = + Domainstate.stack_ctx_words * 8 + stack_threshold_size in + let f = max_frame_size + threshold_offset in + let offset = Domainstate.(idx_of_field Domain_current_stack) * 8 in + ` ld 11, {emit_int offset}(30)\n`; + ` addi 11, 11, {emit_int f}\n`; + ` cmpld 1, 11\n`; + ` ble- {emit_label overflow}\n`; + `{emit_label ret}:\n` + end; + BR.relax fundecl + ~max_out_of_line_code_offset: (max_out_of_line_code_offset fundecl); emit_all env fundecl.fun_body; (* Emit the glue code to call the GC *) if env.call_gc_label > 0 then begin `{emit_label env.call_gc_label}:\n`; - match abi with - | ELF32 -> - ` b {emit_symbol "caml_call_gc"}\n` - | ELF64v1 -> - ` std 2, 40(1)\n`; - (* save our TOC, will be restored by caml_call_gc *) - emit_tocload emit_gpr 11 (TocSym "caml_call_gc"); - ` ld 0, 0(11)\n`; - ` mtctr 0\n`; - ` ld 2, 8(11)\n`; - ` bctr\n` - | ELF64v2 -> - ` std 2, 24(1)\n`; + ` std 2, 24(1)\n`; (* save our TOC, will be restored by caml_call_gc *) - emit_tocload emit_gpr 12 (TocSym "caml_call_gc"); - ` mtctr 12\n`; - ` bctr\n` + emit_tocload emit_gpr 12 (TocSym "caml_call_gc"); + ` mtctr 12\n`; + ` bctr\n` end; + (* Emit the glue code to handle bound errors *) + emit_call_bound_errors env; cfi_endproc(); - begin match abi with - | ELF32 | ELF64v2 -> - ` .size {emit_symbol fundecl.fun_name}, . - {emit_symbol fundecl.fun_name}\n` - | ELF64v1 -> - ` .size {emit_symbol fundecl.fun_name}, . - .L.{emit_symbol fundecl.fun_name}\n` - end; + ` .size {emit_symbol fundecl.fun_name}, . - {emit_symbol fundecl.fun_name}\n`; (* Emit the numeric literals *) if env.float_literals <> [] then begin emit_string rodata_space; @@ -1163,15 +1084,13 @@ let emit_item = function | Cint32 n -> ` .long {emit_nativeint n}\n` | Cint n -> - ` {emit_string datag} {emit_nativeint n}\n` + ` .quad {emit_nativeint n}\n` | Csingle f -> emit_float32_directive ".long" (Int32.bits_of_float f) | Cdouble f -> - if ppc64 - then emit_float64_directive ".quad" (Int64.bits_of_float f) - else emit_float64_split_directive ".long" (Int64.bits_of_float f) + emit_float64_directive ".quad" (Int64.bits_of_float f) | Csymbol_address s -> - ` {emit_string datag} {emit_symbol s}\n` + ` .quad {emit_symbol s}\n` | Cstring s -> emit_bytes_directive " .byte " s | Cskip n -> @@ -1181,7 +1100,7 @@ let emit_item = function let data l = emit_string data_space; - ` .align {emit_int (if ppc64 then 3 else 2)}\n`; + ` .align 3\n`; List.iter emit_item l (* Beginning / end of an assembly file *) @@ -1189,10 +1108,7 @@ let data l = let begin_assembly() = reset_debug_info(); ` .file \"\"\n`; (* PR#7037 *) - begin match abi with - | ELF64v2 -> ` .abiversion 2\n` - | _ -> () - end; + ` .abiversion 2\n`; Hashtbl.clear tocref_entries; (* Emit the beginning of the segments *) let lbl_begin = Compilenv.make_symbol (Some "data_begin") in @@ -1200,46 +1116,38 @@ let begin_assembly() = declare_global_data lbl_begin; `{emit_symbol lbl_begin}:\n`; let lbl_begin = Compilenv.make_symbol (Some "code_begin") in - emit_string function_descr_space; - (* For the ELF64v1 ABI, we must make sure that the .opd and .data - sections are in different pages. .opd comes after .data, - so aligning .opd is enough. To save space, we do it only - for the startup file, not for every OCaml compilation unit. *) - let c = Compilenv.current_unit_name() in - if abi = ELF64v1 && (c = "_startup" || c = "_shared_startup") then begin - ` .p2align 12\n` - end; + emit_string code_space; declare_global_data lbl_begin; `{emit_symbol lbl_begin}:\n` let end_assembly() = (* Emit the end of the segments *) - emit_string function_descr_space; + emit_string code_space; let lbl_end = Compilenv.make_symbol (Some "code_end") in declare_global_data lbl_end; `{emit_symbol lbl_end}:\n`; - if abi <> ELF64v1 then ` .long 0\n`; + ` .long 0\n`; emit_string data_space; let lbl_end = Compilenv.make_symbol (Some "data_end") in declare_global_data lbl_end; - ` {emit_string datag} 0\n`; (* PR#6329 *) + ` .quad 0\n`; (* PR#6329 *) `{emit_symbol lbl_end}:\n`; - ` {emit_string datag} 0\n`; + ` .quad 0\n`; (* Emit the frame descriptors *) emit_string data_space; (* not rodata_space because it contains relocations *) - if ppc64 then ` .align 3\n`; (* #7887 *) + ` .align 3\n`; (* #7887 *) let lbl = Compilenv.make_symbol (Some "frametable") in declare_global_data lbl; `{emit_symbol lbl}:\n`; emit_frames { efa_code_label = - (fun l -> ` {emit_string datag} {emit_label l}\n`); + (fun l -> ` .quad {emit_label l}\n`); efa_data_label = - (fun l -> ` {emit_string datag} {emit_label l}\n`); + (fun l -> ` .quad {emit_label l}\n`); efa_8 = (fun n -> ` .byte {emit_int n}\n`); efa_16 = (fun n -> ` .short {emit_int n}\n`); efa_32 = (fun n -> ` .long {emit_int32 n}\n`); - efa_word = (fun n -> ` {emit_string datag} {emit_int n}\n`); + efa_word = (fun n -> ` .quad {emit_int n}\n`); efa_align = (fun n -> ` .balign {emit_int n}\n`); efa_label_rel = (fun lbl ofs -> ` .long ({emit_label lbl} - .) + {emit_int32 ofs}\n`); @@ -1247,11 +1155,7 @@ let end_assembly() = efa_string = (fun s -> emit_bytes_directive " .byte " (s ^ "\000")) }; (* Emit the TOC entries *) - begin match abi with - | ELF32 -> () - | ELF64v1 | ELF64v2 -> - emit_string toc_space; - emit_toctable(); - Hashtbl.clear tocref_entries - end; + emit_string toc_space; + emit_toctable(); + Hashtbl.clear tocref_entries; ` .section .note.GNU-stack,\"\",%progbits\n` diff --git a/asmcomp/power/proc.ml b/asmcomp/power/proc.ml index 1a375781..8eb0c823 100644 --- a/asmcomp/power/proc.ml +++ b/asmcomp/power/proc.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/power/proc.ml" (**************************************************************************) (* *) (* OCaml *) @@ -50,10 +51,10 @@ let int_reg_name = "22"; "23"; "24"; "25"; "26"; "27"; "28" |] (* 16 - 22 *) let float_reg_name = - [| "1"; "2"; "3"; "4"; "5"; "6"; "7"; "8"; - "9"; "10"; "11"; "12"; "13"; "14"; "15"; "16"; - "17"; "18"; "19"; "20"; "21"; "22"; "23"; "24"; - "25"; "26"; "27"; "28"; "29"; "30"; "31" |] + [| "0"; "1"; "2"; "3"; "4"; "5"; "6"; "7"; + "8"; "9"; "10"; "11"; "12"; "13"; "14"; "15"; + "16"; "17"; "18"; "19"; "20"; "21"; "22"; "23"; + "24"; "25"; "26"; "27"; "28"; "29"; "30"; "31" |] let num_register_classes = 2 @@ -62,7 +63,7 @@ let register_class r = | Val | Int | Addr -> 0 | Float -> 1 -let num_available_registers = [| 23; 31 |] +let num_available_registers = [| 23; 32 |] let first_available_register = [| 0; 100 |] @@ -75,11 +76,11 @@ let rotate_registers = true let hard_int_reg = let v = Array.make 23 Reg.dummy in - for i = 0 to 21 do v.(i) <- Reg.at_location Int (Reg i) done; v + for i = 0 to 22 do v.(i) <- Reg.at_location Int (Reg i) done; v let hard_float_reg = - let v = Array.make 31 Reg.dummy in - for i = 0 to 30 do v.(i) <- Reg.at_location Float (Reg(100 + i)) done; v + let v = Array.make 32 Reg.dummy in + for i = 0 to 31 do v.(i) <- Reg.at_location Float (Reg(100 + i)) done; v let all_phys_regs = Array.append hard_int_reg hard_float_reg @@ -109,9 +110,8 @@ let loc_float last_float make_stack reg_use_stack int float ofs = if !float <= last_float then begin let l = phys_reg !float in incr float; - (* On 64-bit platforms, passing a float in a float register - reserves a normal register as well *) - if size_int = 8 then incr int; + (* Passing a float in a float register reserves a normal register as well *) + incr int; if reg_use_stack then ofs := !ofs + size_float; l end else begin @@ -120,24 +120,6 @@ let loc_float last_float make_stack reg_use_stack int float ofs = ofs := !ofs + size_float; l end -let loc_int_pair last_int make_stack int ofs = - (* 64-bit quantities split across two registers must either be in a - consecutive pair of registers where the lowest numbered is an - even-numbered register; or in a stack slot that is 8-byte aligned. *) - int := Misc.align !int 2; - if !int <= last_int - 1 then begin - let reg_lower = phys_reg !int in - let reg_upper = phys_reg (1 + !int) in - int := !int + 2; - [| reg_lower; reg_upper |] - end else begin - ofs := Misc.align !ofs 8; - let stack_lower = stack_slot (make_stack !ofs) Int in - let stack_upper = stack_slot (make_stack (size_int + !ofs)) Int in - ofs := !ofs + 8; - [| stack_lower; stack_upper |] - end - let calling_conventions first_int last_int first_float last_float make_stack first_stack arg = let loc = Array.make (Array.length arg) Reg.dummy in @@ -166,33 +148,18 @@ let not_supported _ofs = fatal_error "Proc.loc_results: cannot call" let max_arguments_for_tailcalls = 16 (* in regs *) + 64 (* in domain state *) let loc_arguments arg = - calling_conventions 0 15 100 112 outgoing (- size_domainstate_args) arg + calling_conventions 0 15 101 113 outgoing (- size_domainstate_args) arg let loc_parameters arg = let (loc, _ofs) = - calling_conventions 0 15 100 112 incoming (- size_domainstate_args) arg + calling_conventions 0 15 101 113 incoming (- size_domainstate_args) arg in loc let loc_results res = - let (loc, _ofs) = calling_conventions 0 15 100 112 not_supported 0 res + let (loc, _ofs) = calling_conventions 0 15 101 113 not_supported 0 res in loc -(* C calling conventions for ELF32: - use GPR 3-10 and FPR 1-8 just like ML calling conventions. - Using a float register does not affect the int registers. - Always reserve 8 bytes at bottom of stack, plus whatever is needed - to hold the overflow arguments. - C calling conventions for ELF64v1: - Use GPR 3-10 for the first integer arguments. - Use FPR 1-13 for the first float arguments. - Always reserve stack space for all arguments, even when passed in - registers. - Always reserve at least 8 words (64 bytes) for the arguments. - Always reserve 48 bytes at bottom of stack, plus whatever is needed - to hold the arguments. - The reserved 48 bytes are automatically added in emit.mlp - and need not appear here. - C calling conventions for ELF64v2: +(* C calling conventions for ELF64v2: Use GPR 3-10 for the first integer arguments. Use FPR 1-13 for the first float arguments. If all arguments fit in registers, don't reserve stack space. @@ -213,16 +180,9 @@ let external_calling_conventions List.iteri (fun i ty_arg -> match ty_arg with - | XInt | XInt32 -> + | XInt | XInt32 | XInt64 -> loc.(i) <- [| loc_int last_int make_stack reg_use_stack int ofs |] - | XInt64 -> - if size_int = 4 then begin - assert (not reg_use_stack); - loc.(i) <- loc_int_pair last_int make_stack int ofs - end else - loc.(i) <- - [| loc_int last_int make_stack reg_use_stack int ofs |] | XFloat -> loc.(i) <- [| loc_float last_float make_stack reg_use_stack int float ofs |]) @@ -230,50 +190,30 @@ let external_calling_conventions (loc, Misc.align !ofs 16) (* Keep stack 16-aligned *) let loc_external_arguments ty_args = - match abi with - | ELF32 -> - external_calling_conventions 0 7 100 107 outgoing 8 false ty_args - | ELF64v1 -> - let (loc, ofs) = - external_calling_conventions 0 7 100 112 outgoing 0 true ty_args in - (loc, max ofs 64) - | ELF64v2 -> - let (loc, ofs) = - external_calling_conventions 0 7 100 112 outgoing 0 true ty_args in - if Array.fold_left - (fun stk r -> - assert (Array.length r = 1); - match r.(0).loc with - | Stack _ -> true - | _ -> stk) - false loc - then (loc, ofs) - else (loc, 0) + let (loc, ofs) = + external_calling_conventions 0 7 101 113 outgoing 0 true ty_args in + if Array.exists + (fun r -> + assert (Array.length r = 1); + match r.(0).loc with Stack _ -> true | _ -> false) + loc + then (loc, ofs) + else (loc, 0) (* Results are in GPR 3 and FPR 1 *) let loc_external_results res = - let (loc, _ofs) = calling_conventions 0 1 100 100 not_supported 0 res + let (loc, _ofs) = calling_conventions 0 1 101 101 not_supported 0 res in loc (* Exceptions are in GPR 3 *) let loc_exn_bucket = phys_reg 0 -(* For ELF32 see: - "System V Application Binary Interface PowerPC Processor Supplement" - http://refspecs.linux-foundation.org/elf/elfspec_ppc.pdf - - For ELF64v1 see: - "64-bit PowerPC ELF Application Binary Interface Supplement 1.9" - http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html - - For ELF64v2 see: +(* For ELF64v2 see: "64-Bit ELF V2 ABI Specification -- Power Architecture" http://openpowerfoundation.org/wp-content/uploads/resources/leabi/ content/dbdoclet.50655239___RefHeading___Toc377640569.html - - All of these specifications seem to agree on the numberings we need. *) let int_dwarf_reg_numbers = @@ -283,7 +223,7 @@ let int_dwarf_reg_numbers = |] let float_dwarf_reg_numbers = - [| 33; 34; 35; 36; 37; 38; 39; + [| 32; 33; 34; 35; 36; 37; 38; 39; 40; 41; 42; 43; 44; 45; 46; 47; 48; 49; 50; 51; 52; 53; 54; 55; 56; 57; 58; 59; 60; 61; 62; 63; @@ -297,21 +237,22 @@ let dwarf_register_numbers ~reg_class = let stack_ptr_dwarf_register_number = 1 -(* Volatile registers: none *) - -let regs_are_volatile _rs = false - (* Registers destroyed by operations *) +(* For direct C calls, all caller-save registers are destroyed, + plus GPR28 because it is used to save the OCaml stack pointer. *) let destroyed_at_c_call = Array.of_list(List.map phys_reg - [0; 1; 2; 3; 4; 5; 6; 7; - 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111; 112]) + [0; 1; 2; 3; 4; 5; 6; 7; 22; + 100; 101; 102; 103; 104; 105; 106; 107; 108; 109; 110; 111; 112; 113]) let destroyed_at_oper = function Iop(Icall_ind | Icall_imm _ | Iextcall { alloc = true; _ }) -> - all_phys_regs - | Iop(Iextcall { alloc = false; _ }) -> destroyed_at_c_call + all_phys_regs + | Iop(Iextcall { alloc = false; _ }) -> + destroyed_at_c_call + | Iop(Iintoffloat | Istore(Single, _, _)) -> + [| phys_reg 100 |] (* FPR0 destroyed *) | _ -> [||] let destroyed_at_raise = all_phys_regs @@ -321,34 +262,13 @@ let destroyed_at_reloadretaddr = [| phys_reg 11 |] (* Maximal register pressure *) let safe_register_pressure = function - Iextcall _ -> 14 + Iextcall _ -> 13 | _ -> 23 let max_register_pressure = function - Iextcall _ -> [| 14; 18 |] - | _ -> [| 23; 30 |] - -(* Layout of the stack *) - -(* See [reserved_stack_space] in emit.mlp. *) -let reserved_stack_space_required () = - match abi with - | ELF32 -> false - | ELF64v1 | ELF64v2 -> true - -let frame_required fd = - let is_elf32 = - match abi with - | ELF32 -> true - | ELF64v1 | ELF64v2 -> false - in - reserved_stack_space_required () - || fd.fun_num_stack_slots.(0) > 0 - || fd.fun_num_stack_slots.(1) > 0 - || (fd.fun_contains_calls && is_elf32) - -let prologue_required fd = - frame_required fd + Iextcall _ -> [| 13; 18 |] + | Iintoffloat | Istore(Single, _, _) -> [| 23; 31 |] + | _ -> [| 23; 32 |] (* Calling the assembler *) diff --git a/asmcomp/power/reload.ml b/asmcomp/power/reload.ml index 21ace08c..29cdf914 100644 --- a/asmcomp/power/reload.ml +++ b/asmcomp/power/reload.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/power/reload.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/power/scheduling.ml b/asmcomp/power/scheduling.ml index 8438a7d0..12efb70d 100644 --- a/asmcomp/power/scheduling.ml +++ b/asmcomp/power/scheduling.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/power/scheduling.ml" (**************************************************************************) (* *) (* OCaml *) @@ -26,7 +27,7 @@ inherit Schedgen.scheduler_generic method oper_latency = function Ireload -> 2 - | Iload(_, _, _) -> 2 + | Iload _ -> 2 | Iconst_float _ -> 2 (* turned into a load *) | Iconst_symbol _ -> 1 | Iintop(Imul | Imulh) -> 9 @@ -46,7 +47,7 @@ method! reload_retaddr_latency = 12 method oper_issue_cycles = function Iconst_float _ | Iconst_symbol _ -> 2 - | Iload(_, Ibased(_, _), _) -> 2 + | Iload { addressing_mode = Ibased(_, _); _ } -> 2 | Istore(_, Ibased(_, _), _) -> 2 | Ialloc _ -> 4 | Iintop(Imod) -> 40 (* assuming full stall *) diff --git a/asmcomp/power/selection.ml b/asmcomp/power/selection.ml index ba95a61e..ea8f689b 100644 --- a/asmcomp/power/selection.ml +++ b/asmcomp/power/selection.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/power/selection.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/power/stackframe.ml b/asmcomp/power/stackframe.ml new file mode 100644 index 00000000..d165a207 --- /dev/null +++ b/asmcomp/power/stackframe.ml @@ -0,0 +1,32 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +open! Mach [@@warning "-66"] + +let trap_handler_size = 16 + +class stackframe = object + +inherit Stackframegen.stackframe_generic + +method trap_handler_size = trap_handler_size + +end + +let analyze f = + (new stackframe)#analyze f diff --git a/asmcomp/printcmm.ml b/asmcomp/printcmm.ml index b36a912c..400044f0 100644 --- a/asmcomp/printcmm.ml +++ b/asmcomp/printcmm.ml @@ -117,8 +117,10 @@ let operation d = function | Capply _ty -> "app" ^ location d | Cextcall(lbl, _ty_res, _ty_args, _alloc) -> Printf.sprintf "extcall \"%s\"%s" lbl (location d) - | Cload (c, Asttypes.Immutable) -> Printf.sprintf "load %s" (chunk c) - | Cload (c, Asttypes.Mutable) -> Printf.sprintf "load_mut %s" (chunk c) + | Cload {memory_chunk; mutability} -> ( + match mutability with + | Asttypes.Immutable -> Printf.sprintf "load %s" (chunk memory_chunk) + | Asttypes.Mutable -> Printf.sprintf "load_mut %s" (chunk memory_chunk)) | Calloc -> "alloc" ^ location d | Cstore (c, init) -> let init = @@ -156,6 +158,7 @@ let operation d = function | Craise k -> Lambda.raise_kind k ^ location d | Ccheckbound -> "checkbound" ^ location d | Copaque -> "opaque" + | Cdls_get -> "dls_get" let rec expr ppf = function | Cconst_int (n, _dbg) -> fprintf ppf "%i" n @@ -164,6 +167,7 @@ let rec expr ppf = function | Cconst_float (n, _dbg) -> fprintf ppf "%F" n | Cconst_symbol (s, _dbg) -> fprintf ppf "\"%s\"" s | Cvar id -> V.print ppf id + | Creturn_addr -> fprintf ppf "return_addr" | Clet(id, def, (Clet(_, _, _) as body)) -> let print_binding id ppf def = fprintf ppf "@[<2>%a@ %a@]" diff --git a/asmcomp/printmach.ml b/asmcomp/printmach.ml index 656f9511..89b900c9 100644 --- a/asmcomp/printmach.ml +++ b/asmcomp/printmach.ml @@ -122,12 +122,16 @@ let operation op arg ppf res = (if alloc then "" else " (noalloc)") | Istackoffset n -> fprintf ppf "offset stack %i" n - | Iload(chunk, addr, Immutable) -> - fprintf ppf "%s[%a]" - (Printcmm.chunk chunk) (Arch.print_addressing reg addr) arg - | Iload(chunk, addr, Mutable) -> - fprintf ppf "%s mut[%a]" - (Printcmm.chunk chunk) (Arch.print_addressing reg addr) arg + | Iload { memory_chunk; addressing_mode; mutability=Immutable; is_atomic } -> + fprintf ppf "%s %a[%a]" + (Printcmm.chunk memory_chunk) + (fun pp a -> if a then fprintf pp "atomic" else ()) is_atomic + (Arch.print_addressing reg addressing_mode) arg + | Iload { memory_chunk; addressing_mode; mutability=Mutable; is_atomic } -> + fprintf ppf "%s %a mut[%a]" + (Printcmm.chunk memory_chunk) + (fun pp a -> if a then fprintf pp "atomic" else ()) is_atomic + (Arch.print_addressing reg addressing_mode) arg | Istore(chunk, addr, is_assign) -> fprintf ppf "%s[%a] := %a %s" (Printcmm.chunk chunk) @@ -139,6 +143,7 @@ let operation op arg ppf res = fprintf ppf "alloc %i" n; | Iintop(op) -> fprintf ppf "%a%s%a" reg arg.(0) (intop op) reg arg.(1) | Iintop_imm(op, n) -> fprintf ppf "%a%s%i" reg arg.(0) (intop op) n + | Icompf cmp -> fprintf ppf "%a%s%a" reg arg.(0) (floatcomp cmp) reg arg.(1) | Inegf -> fprintf ppf "-f %a" reg arg.(0) | Iabsf -> fprintf ppf "absf %a" reg arg.(0) | Iaddf -> fprintf ppf "%a +f %a" reg arg.(0) reg arg.(1) @@ -150,6 +155,8 @@ let operation op arg ppf res = | Iopaque -> fprintf ppf "opaque %a" reg arg.(0) | Ispecific op -> Arch.print_specific_operation reg op ppf arg + | Idls_get -> fprintf ppf "dls_get" + | Ireturn_addr -> fprintf ppf "return_addr" | Ipoll { return_label } -> fprintf ppf "poll call"; match return_label with @@ -246,10 +253,10 @@ let interval ppf i = i.ranges in fprintf ppf "@[<2>%a:%t@]@." reg i.reg interv -let intervals ppf () = +let intervals ppf (intervals : Interval.result) = fprintf ppf "*** Intervals@."; - List.iter (interval ppf) (Interval.all_fixed_intervals()); - List.iter (interval ppf) (Interval.all_intervals()) + List.iter (interval ppf) intervals.fixed_intervals; + List.iter (interval ppf) intervals.intervals let preference ppf r = let prefs ppf = diff --git a/asmcomp/printmach.mli b/asmcomp/printmach.mli index 0cad0776..0d0b5bda 100644 --- a/asmcomp/printmach.mli +++ b/asmcomp/printmach.mli @@ -27,5 +27,5 @@ val instr: formatter -> Mach.instruction -> unit val fundecl: formatter -> Mach.fundecl -> unit val phase: string -> formatter -> Mach.fundecl -> unit val interferences: formatter -> unit -> unit -val intervals: formatter -> unit -> unit +val intervals: formatter -> Interval.result -> unit val preferences: formatter -> unit -> unit diff --git a/asmcomp/proc.mli b/asmcomp/proc.mli index c1692c06..e6352e02 100644 --- a/asmcomp/proc.mli +++ b/asmcomp/proc.mli @@ -55,15 +55,6 @@ val destroyed_at_oper: Mach.instruction_desc -> Reg.t array val destroyed_at_raise: Reg.t array val destroyed_at_reloadretaddr : Reg.t array -(* Volatile registers: those that change value when read *) -val regs_are_volatile: Reg.t array -> bool - -(* Info for laying out the stack frame *) -val frame_required : Mach.fundecl -> bool - -(* Function prologues *) -val prologue_required : Mach.fundecl -> bool - (** For a given register class, the DWARF register numbering for that class. Given an allocated register with location [Reg n] and class [reg_class], the returned array contains the corresponding DWARF register number at index diff --git a/asmcomp/reloadgen.ml b/asmcomp/reloadgen.ml index c000dd4a..3aeb5510 100644 --- a/asmcomp/reloadgen.ml +++ b/asmcomp/reloadgen.ml @@ -130,12 +130,7 @@ method private reload i = method fundecl f num_stack_slots = redo_regalloc <- false; let new_body = self#reload f.fun_body in - ({fun_name = f.fun_name; fun_args = f.fun_args; - fun_body = new_body; fun_codegen_options = f.fun_codegen_options; - fun_dbg = f.fun_dbg; - fun_poll = f.fun_poll; - fun_contains_calls = f.fun_contains_calls; - fun_num_stack_slots = Array.copy num_stack_slots; - }, + ({f with fun_body = new_body; + fun_num_stack_slots = Array.copy num_stack_slots}, redo_regalloc) end diff --git a/asmcomp/riscv/CSE.ml b/asmcomp/riscv/CSE.ml index c5fb3483..c1d41fbf 100644 --- a/asmcomp/riscv/CSE.ml +++ b/asmcomp/riscv/CSE.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/riscv/CSE.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/riscv/NOTES.md b/asmcomp/riscv/NOTES.md index 3b00d08e..0f17876b 100644 --- a/asmcomp/riscv/NOTES.md +++ b/asmcomp/riscv/NOTES.md @@ -7,12 +7,10 @@ Debian architecture name: `riscv64` # Reference documents * Instruction set specification: - - https://riscv.org/specifications/isa-spec-pdf/ - - https://rv8.io/isa + - https://riscv.org/technical/specifications/ * ELF ABI specification: - - https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md + - https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc * Assembly language manual - https://github.com/riscv/riscv-asm-manual/blob/master/riscv-asm.md - - https://rv8.io/asm diff --git a/asmcomp/riscv/arch.ml b/asmcomp/riscv/arch.ml index 3c4bb943..04a56bbb 100644 --- a/asmcomp/riscv/arch.ml +++ b/asmcomp/riscv/arch.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/riscv/arch.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/riscv/arch.mli b/asmcomp/riscv/arch.mli new file mode 100644 index 00000000..248697e4 --- /dev/null +++ b/asmcomp/riscv/arch.mli @@ -0,0 +1,76 @@ +# 2 "asmcomp/riscv/arch.mli" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Nicolas Ojeda Bar *) +(* *) +(* Copyright 2016 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Specific operations for the RISC-V processor *) + +(* Machine-specific command-line options *) + +val command_line_options : (string * Arg.spec * string) list + +(* Specific operations *) + +type specific_operation = + | Imultaddf of bool (* multiply, optionally negate, and add *) + | Imultsubf of bool (* multiply, optionally negate, and subtract *) + +(* Addressing modes *) + +type addressing_mode = + | Iindexed of int (* reg + displ *) + +val is_immediate : int -> bool + +(* Sizes, endianness *) + +val big_endian : bool + +val size_addr : int + +val size_int : int + +val size_float : int + +val allow_unaligned_access : bool + +(* Behavior of division *) + +val division_crashes_on_overflow : bool + +(* Operations on addressing modes *) + +val identity_addressing : addressing_mode + +val offset_addressing : addressing_mode -> int -> addressing_mode + +val num_args_addressing : addressing_mode -> int + +(* Printing operations and addressing modes *) + +val print_addressing : + (Format.formatter -> 'a -> unit) -> addressing_mode -> + Format.formatter -> 'a array -> unit + +val print_specific_operation : + (Format.formatter -> 'a -> unit) -> specific_operation -> + Format.formatter -> 'a array -> unit + +(* Specific operations that are pure *) + +val operation_is_pure : specific_operation -> bool + +(* Specific operations that can raise *) + +val operation_can_raise : specific_operation -> bool diff --git a/asmcomp/riscv/emit.mlp b/asmcomp/riscv/emit.mlp index b36aa0ea..7ad823ca 100644 --- a/asmcomp/riscv/emit.mlp +++ b/asmcomp/riscv/emit.mlp @@ -1,4 +1,3 @@ -# 2 "asmcomp/riscv/emit.mlp" (**************************************************************************) (* *) (* OCaml *) @@ -25,16 +24,14 @@ open Linear open Emitaux open Emitenv -(* Layout of the stack. The stack is kept 16-aligned. *) +(* Layout of the stack. The C stack must be 16-aligned, but 8-alignment + is enough for the OCaml stack. *) let frame_size env = - let size = - env.stack_offset + (* Trap frame, outgoing parameters *) - size_int * env.f.fun_num_stack_slots.(0) + (* Local int variables *) - size_float * env.f.fun_num_stack_slots.(1) + (* Local float variables *) - (if env.f.fun_contains_calls then size_addr else 0) (* Return address *) - in - Misc.align size 16 + env.stack_offset + (* Trap frame, outgoing parameters *) + size_int * env.f.fun_num_stack_slots.(0) + (* Local int variables *) + size_float * env.f.fun_num_stack_slots.(1) + (* Local float variables *) + (if env.f.fun_frame_required then size_addr else 0) (* Return address *) let slot_offset env loc cls = match loc with @@ -53,9 +50,6 @@ let slot_offset env loc cls = (* Output a symbol *) -let emit_symbol s = - emit_symbol '$' s - let emit_jump op s = if !Clflags.dlcode || !Clflags.pic_code then `{emit_string op} {emit_symbol s}@plt` @@ -82,11 +76,14 @@ let rodata_space = (* Names for special regs *) -let reg_tmp = phys_reg 23 -let reg_t2 = phys_reg 16 -let reg_domain_state_ptr = phys_reg 26 -let reg_trap = phys_reg 24 -let reg_alloc_ptr = phys_reg 25 +let reg_tmp = phys_reg 23 (* t1 *) +let reg_tmp2 = phys_reg 22 (* t0 *) +let reg_t2 = phys_reg 16 (* t2 *) +let reg_domain_state_ptr = phys_reg 26 (* s11 *) +let reg_trap_ptr = phys_reg 24 (* s1 *) +let reg_alloc_ptr = phys_reg 25 (* s10 *) +let reg_stack_arg_begin = phys_reg 9 (* s3 *) +let reg_stack_arg_end = phys_reg 10 (* s4 *) (* Output a pseudo-register *) @@ -97,48 +94,73 @@ let reg_name = function let emit_reg r = emit_string (reg_name r) -(* Adjust sp by the given byte amount *) +(* Adjust sp by the given byte amount, clobbers reg_tmp *) -let emit_stack_adjustment = function - | 0 -> () - | n when is_immediate n -> +let emit_stack_adjustment n = + if n <> 0 then begin + if is_immediate n then ` addi sp, sp, {emit_int n}\n` - | n -> + else begin ` li {emit_reg reg_tmp}, {emit_int n}\n`; ` add sp, sp, {emit_reg reg_tmp}\n` + end; + cfi_adjust_cfa_offset (-n) + end + +(* Output add-immediate instruction, clobbers reg_tmp2 *) -(* Adjust stack_offset and emit corresponding CFI directive *) +let emit_addimm rd rs n = + if is_immediate n then + ` addi {emit_reg rd}, {emit_reg rs}, {emit_int n}\n` + else begin + ` li {emit_reg reg_tmp2}, {emit_int n}\n`; + ` add {emit_reg rd}, {emit_reg rs}, {emit_reg reg_tmp2}\n` + end -let adjust_stack_offset env delta = - env.stack_offset <- env.stack_offset + delta; - cfi_adjust_cfa_offset delta +(* Output memory operation with a possibly non-immediate offset, + clobbers reg_tmp *) -let emit_mem_op ?(base = "sp") op src ofs = +let emit_mem_op op reg ofs addr = if is_immediate ofs then - ` {emit_string op} {emit_string src}, {emit_int ofs}({emit_string base})\n` + ` {emit_string op} {emit_string reg}, {emit_int ofs}({emit_string addr})\n` else begin ` li {emit_reg reg_tmp}, {emit_int ofs}\n`; - ` add {emit_reg reg_tmp}, {emit_string base}, {emit_reg reg_tmp}\n`; - ` {emit_string op} {emit_string src}, 0({emit_reg reg_tmp})\n` + ` add {emit_reg reg_tmp}, {emit_string addr}, {emit_reg reg_tmp}\n`; + ` {emit_string op} {emit_string reg}, 0({emit_reg reg_tmp})\n` end let reload_ra n = - emit_mem_op "ld" "ra" (n - size_addr) + emit_mem_op "ld" "ra" (n - 8) "sp" let store_ra n = - emit_mem_op "sd" "ra" (n - size_addr) + emit_mem_op "sd" "ra" (n - 8) "sp" -let emit_store ?base src ofs = - emit_mem_op ?base "sd" (reg_name src) ofs +let emit_store rs ofs rd = + emit_mem_op "sd" (reg_name rs) ofs rd -let emit_load ?base dst ofs = - emit_mem_op ?base "ld" (reg_name dst) ofs +let emit_load rd ofs rs = + emit_mem_op "ld" (reg_name rd) ofs rs -let emit_float_load ?base dst ofs = - emit_mem_op ?base "fld" (reg_name dst) ofs +let emit_float_load rd ofs rs = + emit_mem_op "fld" (reg_name rd) ofs rs -let emit_float_store ?base src ofs = - emit_mem_op ?base "fsd" (reg_name src) ofs +let emit_float_store rs ofs rd = + emit_mem_op "fsd" (reg_name rs) ofs rd + +let emit_float_test cmp ~arg ~res = + let negated = + match cmp with + | CFneq | CFnlt | CFngt | CFnle | CFnge -> true + | CFeq | CFlt | CFgt | CFle | CFge -> false + in + begin match cmp with + | CFeq | CFneq -> ` feq.d {emit_reg res}, {emit_reg arg.(0)}, {emit_reg arg.(1)}\n` + | CFlt | CFnlt -> ` flt.d {emit_reg res}, {emit_reg arg.(0)}, {emit_reg arg.(1)}\n` + | CFgt | CFngt -> ` flt.d {emit_reg res}, {emit_reg arg.(1)}, {emit_reg arg.(0)}\n` + | CFle | CFnle -> ` fle.d {emit_reg res}, {emit_reg arg.(0)}, {emit_reg arg.(1)}\n` + | CFge | CFnge -> ` fle.d {emit_reg res}, {emit_reg arg.(1)}, {emit_reg arg.(0)}\n` + end; + negated (* Record live pointers at call points *) @@ -241,36 +263,34 @@ let emit_instr env i = match i.desc with Lend -> () | Lprologue -> - assert (env.f.fun_prologue_required); let n = frame_size env in emit_stack_adjustment (-n); - if n > 0 then cfi_adjust_cfa_offset n; - if env.f.fun_contains_calls then begin + if env.f.fun_frame_required then begin store_ra n; - cfi_offset ~reg:1 (* ra *) ~offset:(-size_addr) + cfi_offset ~reg:1 (* ra *) ~offset:(-8) end; | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in if src.loc <> dst.loc then begin match (src, dst) with | {loc = Reg _; typ = (Val | Int | Addr)}, {loc = Reg _} -> - ` mv {emit_reg dst}, {emit_reg src}\n` + ` mv {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = Float}, {loc = Reg _; typ = Float} -> ` fmv.d {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = Float}, {loc = Reg _; typ = (Val | Int | Addr)} -> ` fmv.x.d {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = (Val | Int | Addr)}, {loc = Stack s} -> let (base, ofs) = slot_offset env s (register_class dst) in - emit_store ~base src ofs + emit_store src ofs base | {loc = Reg _; typ = Float}, {loc = Stack s} -> let (base, ofs) = slot_offset env s (register_class dst) in - emit_float_store ~base src ofs + emit_float_store src ofs base | {loc = Stack s; typ = (Val | Int | Addr)}, {loc = Reg _} -> let (base, ofs) = slot_offset env s (register_class src) in - emit_load ~base dst ofs + emit_load dst ofs base | {loc = Stack s; typ = Float}, {loc = Reg _} -> let (base, ofs) = slot_offset env s (register_class src) in - emit_float_load ~base dst ofs + emit_float_load dst ofs base | {loc = Stack _}, {loc = Stack _} | {loc = Unknown}, _ | _, {loc = Unknown} -> Misc.fatal_error "Emit: Imove" @@ -291,7 +311,7 @@ let emit_instr env i = record_frame env i.live (Dbg_other i.dbg) | Lop(Itailcall_ind) -> let n = frame_size env in - if env.f.fun_contains_calls then reload_ra n; + if env.f.fun_frame_required then reload_ra n; emit_stack_adjustment n; ` jr {emit_reg i.arg.(0)}\n` | Lop(Itailcall_imm {func}) -> @@ -299,34 +319,56 @@ let emit_instr env i = ` j {emit_label env.f.fun_tailrec_entry_point_label}\n` end else begin let n = frame_size env in - if env.f.fun_contains_calls then reload_ra n; + if env.f.fun_frame_required then reload_ra n; emit_stack_adjustment n; ` {emit_tail func}\n` end - | Lop(Iextcall{func; alloc = true}) -> - ` la {emit_reg reg_t2}, {emit_symbol func}\n`; - ` {emit_call "caml_c_call"}\n`; - record_frame env i.live (Dbg_other i.dbg) - | Lop(Iextcall{func; alloc = false}) -> - ` {emit_call func}\n` + | Lop(Iextcall{func; alloc; stack_ofs}) -> + if stack_ofs > 0 then begin + ` mv {emit_reg reg_stack_arg_begin}, sp\n`; + ` addi {emit_reg reg_stack_arg_end}, sp, {emit_int (Misc.align stack_ofs 16)}\n`; + ` la {emit_reg reg_t2}, {emit_symbol func}\n`; + ` {emit_call "caml_c_call_stack_args"}\n`; + record_frame env i.live (Dbg_other i.dbg) + end else if alloc then begin + ` la {emit_reg reg_t2}, {emit_symbol func}\n`; + ` {emit_call "caml_c_call"}\n`; + record_frame env i.live (Dbg_other i.dbg) + end else begin + (* store ocaml stack in s0, which is marked as being destroyed + at noalloc calls *) + ` mv s0, sp\n`; + cfi_remember_state (); + cfi_def_cfa_register ~reg:21; + let ofs = Domainstate.(idx_of_field Domain_c_stack) * 8 in + ` ld sp, {emit_int ofs}({emit_reg reg_domain_state_ptr})\n`; + ` {emit_call func}\n`; + ` mv sp, s0\n`; + cfi_restore_state () + end | Lop(Istackoffset n) -> assert (n mod 16 = 0); emit_stack_adjustment (-n); - adjust_stack_offset env n - | Lop(Iload(Single, Iindexed ofs, _mut)) -> + env.stack_offset <- env.stack_offset + n + | Lop(Iload { memory_chunk = Single; addressing_mode = Iindexed ofs; is_atomic } ) -> + assert (not is_atomic); ` flw {emit_reg i.res.(0)}, {emit_int ofs}({emit_reg i.arg.(0)})\n`; ` fcvt.d.s {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` - | Lop(Iload(chunk, Iindexed ofs, _mut)) -> + | Lop(Iload { memory_chunk = Word_int | Word_val; addressing_mode = Iindexed ofs; is_atomic } ) -> + if is_atomic then ` fence rw, rw\n`; + ` ld {emit_reg i.res.(0)}, {emit_int ofs}({emit_reg i.arg.(0)})\n`; + if is_atomic then ` fence r, rw\n` + | Lop(Iload { memory_chunk; addressing_mode = Iindexed ofs; is_atomic } ) -> + assert (not is_atomic); let instr = - match chunk with + match memory_chunk with | Byte_unsigned -> "lbu" | Byte_signed -> "lb" | Sixteen_unsigned -> "lhu" | Sixteen_signed -> "lh" | Thirtytwo_unsigned -> "lwu" | Thirtytwo_signed -> "lw" - | Word_int | Word_val -> "ld" - | Single -> assert false + | Word_int | Word_val | Single -> assert false | Double -> "fld" in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_int ofs}({emit_reg i.arg.(0)})\n` @@ -334,37 +376,50 @@ let emit_instr env i = (* ft0 is marked as destroyed for this operation *) ` fcvt.s.d ft0, {emit_reg i.arg.(0)}\n`; ` fsw ft0, {emit_int ofs}({emit_reg i.arg.(1)})\n` + | Lop(Istore((Word_int | Word_val), Iindexed ofs, assignment)) -> + if assignment then begin + ` fence r, w\n`; + ` sd {emit_reg i.arg.(0)}, {emit_int ofs}({emit_reg i.arg.(1)})\n` + end else + ` sd {emit_reg i.arg.(0)}, {emit_int ofs}({emit_reg i.arg.(1)})\n`; | Lop(Istore(chunk, Iindexed ofs, _)) -> let instr = match chunk with | Byte_unsigned | Byte_signed -> "sb" | Sixteen_unsigned | Sixteen_signed -> "sh" | Thirtytwo_unsigned | Thirtytwo_signed -> "sw" - | Word_int | Word_val -> "sd" - | Single -> assert false + | Word_int | Word_val | Single -> assert false | Double -> "fsd" in ` {emit_string instr} {emit_reg i.arg.(0)}, {emit_int ofs}({emit_reg i.arg.(1)})\n` | Lop(Ialloc {bytes; dbginfo}) -> let lbl_frame_lbl = record_frame_label env i.live (Dbg_alloc dbginfo) in - let lbl_after_alloc = new_label () in - let lbl_call_gc = new_label () in - let n = -bytes in - let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in - if is_immediate n then - ` addi {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, {emit_int n}\n` - else begin - ` li {emit_reg reg_tmp}, {emit_int n}\n`; - ` add {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}\n` - end; - ` ld {emit_reg reg_tmp}, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; - ` bltu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl_call_gc}\n`; - `{emit_label lbl_after_alloc}:\n`; - ` addi {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, {emit_int size_addr}\n`; - env.call_gc_sites <- - { gc_lbl = lbl_call_gc; - gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame_lbl } :: env.call_gc_sites + if env.f.fun_fast then begin + let lbl_after_alloc = new_label () in + let lbl_call_gc = new_label () in + let n = -bytes in + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + emit_addimm reg_alloc_ptr reg_alloc_ptr n; + ` ld {emit_reg reg_tmp}, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; + ` bltu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl_call_gc}\n`; + `{emit_label lbl_after_alloc}:\n`; + ` addi {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, 8\n`; + env.call_gc_sites <- + { gc_lbl = lbl_call_gc; + gc_return_lbl = lbl_after_alloc; + gc_frame_lbl = lbl_frame_lbl } :: env.call_gc_sites + end else begin + begin match bytes with + | 16 -> ` {emit_call "caml_alloc1"}\n` + | 24 -> ` {emit_call "caml_alloc2"}\n` + | 32 -> ` {emit_call "caml_alloc3"}\n` + | _ -> + ` li {emit_reg reg_t2}, {emit_int bytes}\n`; + ` {emit_call "caml_allocN"}\n` + end; + `{emit_label lbl_frame_lbl}:\n`; + ` addi {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, 8\n` + end | Lop(Ipoll { return_label }) -> let lbl_frame_lbl = record_frame_label env i.live (Dbg_alloc []) in let lbl_after_poll = match return_label with @@ -376,8 +431,8 @@ let emit_instr env i = begin match return_label with | None -> ` bltu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl_call_gc}\n`; `{emit_label lbl_after_poll}:\n`; - | Some lbl -> ` bgeu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl}\n`; - ` j {emit_label lbl_call_gc}\n` + | Some lbl -> ` bgeu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl}\n`; + ` j {emit_label lbl_call_gc}\n` end; env.call_gc_sites <- { gc_lbl = lbl_call_gc; @@ -412,6 +467,9 @@ let emit_instr env i = ` sltu {emit_reg i.res.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}\n`; ` xori {emit_reg i.res.(0)}, {emit_reg i.res.(0)}, 1\n`; end + | Lop(Icompf cmp) -> + let negated = emit_float_test cmp ~res:i.res.(0) ~arg:i.arg in + if negated then ` xori {emit_reg i.res.(0)}, {emit_reg i.res.(0)}, 1\n`; | Lop(Iintop (Icheckbound)) -> let lbl = bound_error_label env i.dbg in ` bleu {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_label lbl}\n` @@ -438,6 +496,15 @@ let emit_instr env i = | Lop(Ispecific sop) -> let instr = name_for_specific sop in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n` + | Lop (Idls_get) -> + let ofs = Domainstate.(idx_of_field Domain_dls_root) * 8 in + ` ld {emit_reg i.res.(0)}, {emit_int ofs}({emit_reg reg_domain_state_ptr})\n` + | Lop (Ireturn_addr) -> + let n = frame_size env in + if env.f.fun_frame_required then + ` ld {emit_reg i.res.(0)}, {emit_int (n - 8)}(sp)\n` + else + ` mv {emit_reg i.res.(0)}, ra\n`; | Lreloadretaddr -> let n = frame_size env in reload_ra n @@ -468,18 +535,12 @@ let emit_instr env i = | Iinttest_imm _ -> Misc.fatal_error "Emit.emit_instr (Iinttest_imm _)" | Ifloattest cmp -> + let negated = emit_float_test cmp ~arg:i.arg ~res:reg_tmp in let branch = - match cmp with - | CFneq | CFnlt | CFngt | CFnle | CFnge -> "beqz" - | CFeq | CFlt | CFgt | CFle | CFge -> "bnez" + if negated + then "beqz" + else "bnez" in - begin match cmp with - | CFeq | CFneq -> ` feq.d {emit_reg reg_tmp}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` - | CFlt | CFnlt -> ` flt.d {emit_reg reg_tmp}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` - | CFgt | CFngt -> ` flt.d {emit_reg reg_tmp}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}\n` - | CFle | CFnle -> ` fle.d {emit_reg reg_tmp}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` - | CFge | CFnge -> ` fle.d {emit_reg reg_tmp}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}\n` - end; ` {emit_string branch} {emit_reg reg_tmp}, {emit_label lbl}\n` | Ioddtest -> ` andi {emit_reg reg_tmp}, {emit_reg i.arg.(0)}, 1\n`; @@ -503,7 +564,6 @@ let emit_instr env i = | Some lbl -> ` bgtz {emit_reg reg_tmp}, {emit_label lbl}\n` end | Lswitch jumptbl -> - (* t0 is marked as destroyed for this operation *) let lbl = new_label() in ` la {emit_reg reg_tmp}, {emit_label lbl}\n`; ` slli t0, {emit_reg i.arg.(0)}, 2\n`; @@ -518,32 +578,33 @@ let emit_instr env i = | Ladjust_trap_depth { delta_traps } -> (* each trap occupes 16 bytes on the stack *) let delta = 16 * delta_traps in - adjust_stack_offset env delta + cfi_adjust_cfa_offset delta; + env.stack_offset <- env.stack_offset + delta | Lpushtrap {lbl_handler} -> ` la {emit_reg reg_tmp}, {emit_label lbl_handler}\n`; ` addi sp, sp, -16\n`; - adjust_stack_offset env 16; - emit_store reg_tmp size_addr; - emit_store reg_trap 0; - ` mv {emit_reg reg_trap}, sp\n` + env.stack_offset <- env.stack_offset + 16; + ` sd {emit_reg reg_trap_ptr}, 0(sp)\n`; + ` sd {emit_reg reg_tmp}, 8(sp)\n`; + cfi_adjust_cfa_offset 16; + ` mv {emit_reg reg_trap_ptr}, sp\n` | Lpoptrap -> - emit_load reg_trap 0; + ` ld {emit_reg reg_trap_ptr}, 0(sp)\n`; ` addi sp, sp, 16\n`; - adjust_stack_offset env (-16) + cfi_adjust_cfa_offset (-16); + env.stack_offset <- env.stack_offset - 16 | Lraise k -> begin match k with | Lambda.Raise_regular -> - let offset = Domainstate.(idx_of_field Domain_backtrace_pos) * 8 in - ` sd zero, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; ` {emit_call "caml_raise_exn"}\n`; record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_reraise -> - ` {emit_call "caml_raise_exn"}\n`; + ` {emit_call "caml_reraise_exn"}\n`; record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_notrace -> - ` mv sp, {emit_reg reg_trap}\n`; - emit_load reg_tmp size_addr; - emit_load reg_trap 0; + ` mv sp, {emit_reg reg_trap_ptr}\n`; + ` ld {emit_reg reg_tmp}, 8(sp)\n`; + ` ld {emit_reg reg_trap_ptr}, 0(sp)\n`; ` addi sp, sp, 16\n`; ` jr {emit_reg reg_tmp}\n` end @@ -564,9 +625,46 @@ let fundecl fundecl = `{emit_symbol fundecl.fun_name}:\n`; emit_debug_info fundecl.fun_dbg; cfi_startproc(); + + (* Dynamic stack checking *) + let stack_threshold_size = Config.stack_threshold * 8 in (* bytes *) + let max_frame_size = frame_size env + fundecl.fun_extra_stack_used in + let handle_overflow = + if fundecl.fun_contains_nontail_calls + || max_frame_size >= stack_threshold_size then begin + let overflow = new_label () and ret = new_label () in + let threshold_offset = Domainstate.stack_ctx_words * 8 + stack_threshold_size in + let f = max_frame_size + threshold_offset in + let offset = Domainstate.(idx_of_field Domain_current_stack) * 8 in + ` ld {emit_reg reg_tmp}, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; + emit_addimm reg_tmp reg_tmp f; + ` bltu sp, {emit_reg reg_tmp}, {emit_label overflow}\n`; + `{emit_label ret}:\n`; + Some (overflow, ret) + end else None + in + emit_all env fundecl.fun_body; List.iter emit_call_gc env.call_gc_sites; List.iter emit_call_bound_error env.bound_error_sites; + + begin match handle_overflow with + | None -> () + | Some (overflow, ret) -> + `{emit_label overflow}:\n`; + (* Pass the desired frame size on the stack, since all of the + argument-passing registers may be in use. *) + let s = Config.stack_threshold + max_frame_size / 8 in + ` li {emit_reg reg_tmp}, {emit_int s}\n`; + ` addi sp, sp, -16\n`; + ` sd {emit_reg reg_tmp}, 0(sp)\n`; + ` sd ra, 8(sp)\n`; + ` {emit_call "caml_call_realloc_stack"}\n`; + ` ld ra, 8(sp)\n`; + ` addi sp, sp, 16\n`; + ` j {emit_label ret}\n` + end; + cfi_endproc(); ` .size {emit_symbol fundecl.fun_name}, .-{emit_symbol fundecl.fun_name}\n`; (* Emit the float literals *) diff --git a/asmcomp/riscv/proc.ml b/asmcomp/riscv/proc.ml index 1fdad2ae..827ef3d0 100644 --- a/asmcomp/riscv/proc.ml +++ b/asmcomp/riscv/proc.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/riscv/proc.ml" (**************************************************************************) (* *) (* OCaml *) @@ -37,8 +38,7 @@ let word_addressed = false s2-s9 8-15 arguments/results (preserved by C) t2-t6 16-20 temporary s0 21 general purpose (preserved by C) - t0 22 temporary - t1 23 temporary (used by code generator) + t0, t1 22-23 temporaries (used by call veneers) s1 24 trap pointer (preserved by C) s10 25 allocation pointer (preserved by C) s11 26 domain pointer (preserved by C) @@ -86,7 +86,7 @@ let register_class r = | Val | Int | Addr -> 0 | Float -> 1 -let num_available_registers = [| 23; 32 |] +let num_available_registers = [| 22; 32 |] let first_available_register = [| 0; 100 |] @@ -234,31 +234,29 @@ let loc_external_results res = let loc_exn_bucket = phys_reg 0 -(* Volatile registers: none *) - -let regs_are_volatile _ = false - (* Registers destroyed by operations *) -let destroyed_at_c_call = - (* s0-s11 and fs0-fs11 are callee-save. However s2 needs to be in this - list since it is clobbered by caml_c_call itself. *) +let destroyed_at_c_noalloc_call = + (* s0-s11 and fs0-fs11 are callee-save, but s0 is + used to preserve OCaml sp. *) Array.of_list(List.map phys_reg - [0; 1; 2; 3; 4; 5; 6; 7; 8; 16; 17; 18; 19; 20; 22; + [0; 1; 2; 3; 4; 5; 6; 7; 16; 17; 18; 19; 20; 21 (* s0 *); 100; 101; 102; 103; 104; 105; 106; 107; 110; 111; 112; 113; 114; 115; 116; 117; 128; 129; 130; 131]) let destroyed_at_alloc = (* t0-t6 are used for PLT stubs *) - if !Clflags.dlcode then Array.map phys_reg [|16; 17; 18; 19; 20; 22|] - else [| |] + if !Clflags.dlcode then Array.map phys_reg [|16; 17; 18; 19; 20|] + else [| phys_reg 16 |] (* t2 is used to pass the argument to caml_allocN *) let destroyed_at_oper = function - | Iop(Icall_ind | Icall_imm _ | Iextcall{alloc = true; _}) -> all_phys_regs - | Iop(Iextcall{alloc = false; _}) -> destroyed_at_c_call + | Iop(Icall_ind | Icall_imm _) -> all_phys_regs + | Iop(Iextcall{alloc; stack_ofs; _}) -> + assert (stack_ofs >= 0); + if alloc || stack_ofs > 0 then all_phys_regs + else destroyed_at_c_noalloc_call | Iop(Ialloc _) | Iop(Ipoll _) -> destroyed_at_alloc | Iop(Istore(Single, _, _)) -> [| phys_reg 100 |] - | Iswitch _ -> [| phys_reg 22 |] (* t0 *) | _ -> [||] let destroyed_at_raise = all_phys_regs @@ -275,18 +273,9 @@ let max_register_pressure = function | Iextcall _ -> [| 9; 12 |] | _ -> [| 23; 30 |] -(* Layout of the stack *) - -let frame_required fd = - fd.fun_contains_calls - || fd.fun_num_stack_slots.(0) > 0 - || fd.fun_num_stack_slots.(1) > 0 - -let prologue_required fd = - frame_required fd - (* See - https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md *) + https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc +*) let int_dwarf_reg_numbers = [| 10; 11; 12; 13; 14; 15; 16; 17; diff --git a/asmcomp/riscv/reload.ml b/asmcomp/riscv/reload.ml index be18cbd7..267e2a8d 100644 --- a/asmcomp/riscv/reload.ml +++ b/asmcomp/riscv/reload.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/riscv/reload.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/riscv/scheduling.ml b/asmcomp/riscv/scheduling.ml index e56b723c..cda4c520 100644 --- a/asmcomp/riscv/scheduling.ml +++ b/asmcomp/riscv/scheduling.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/riscv/scheduling.ml" (**************************************************************************) (* *) (* OCaml *) @@ -15,7 +16,15 @@ (* Instruction scheduling for the RISC-V *) -open! Schedgen (* to create a dependency *) +(* The "open!" directive below is necessary because, although + this module does not actually depend on Schedgen in this backend, the + dependency exists in other backends and our build system requires + that all the backends have the same dependencies. + We thus have to use "open!" and disable the corresponding warning + only for this compilation unit. +*) + +open! Schedgen [@@warning "-66"] (* Scheduling is turned off. *) diff --git a/asmcomp/riscv/selection.ml b/asmcomp/riscv/selection.ml index d56ed90f..0183cb32 100644 --- a/asmcomp/riscv/selection.ml +++ b/asmcomp/riscv/selection.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/riscv/selection.ml" (**************************************************************************) (* *) (* OCaml *) @@ -56,6 +57,9 @@ method! select_operation op args dbg = (Ispecific (Imultsubf true), [arg1; arg2; arg3]) | (Cnegf, [Cop(Caddf, [Cop(Cmulf, [arg1; arg2], _); arg3], _)]) -> (Ispecific (Imultaddf true), [arg1; arg2; arg3]) + | (Cstore (Word_int | Word_val as memory_chunk, Assignment), [arg1; arg2]) -> + (* Use trivial addressing mode for non-initializing stores *) + (Istore (memory_chunk, Iindexed 0, true), [arg2; arg1]) | _ -> super#select_operation op args dbg diff --git a/asmcomp/riscv/stackframe.ml b/asmcomp/riscv/stackframe.ml new file mode 100644 index 00000000..d165a207 --- /dev/null +++ b/asmcomp/riscv/stackframe.ml @@ -0,0 +1,32 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +open! Mach [@@warning "-66"] + +let trap_handler_size = 16 + +class stackframe = object + +inherit Stackframegen.stackframe_generic + +method trap_handler_size = trap_handler_size + +end + +let analyze f = + (new stackframe)#analyze f diff --git a/asmcomp/s390x/CSE.ml b/asmcomp/s390x/CSE.ml index 360a4f13..dcefc4dc 100644 --- a/asmcomp/s390x/CSE.ml +++ b/asmcomp/s390x/CSE.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/s390x/CSE.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/s390x/arch.ml b/asmcomp/s390x/arch.ml index d755a6de..44bed8bc 100644 --- a/asmcomp/s390x/arch.ml +++ b/asmcomp/s390x/arch.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/s390x/arch.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/s390x/arch.mli b/asmcomp/s390x/arch.mli new file mode 100644 index 00000000..d1bcaec1 --- /dev/null +++ b/asmcomp/s390x/arch.mli @@ -0,0 +1,79 @@ +# 2 "asmcomp/s390x/arch.mli" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Bill O'Farrell, IBM *) +(* *) +(* Copyright 2015 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2015 IBM (Bill O'Farrell with help from Tristan Amini). *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Specific operations for the Z processor *) + +(* Machine-specific command-line options *) + +val pic_code : bool ref + +val command_line_options : (string * Arg.spec * string) list + +(* Specific operations *) + +type specific_operation = + Imultaddf (* multiply and add *) + | Imultsubf (* multiply and subtract *) + +(* Addressing modes *) + +type addressing_mode = + | Iindexed of int (* reg + displ *) + | Iindexed2 of int (* reg + reg + displ *) + +(* Sizes, endianness *) + +val big_endian : bool + +val size_addr : int + +val size_int : int + +val size_float : int + +val allow_unaligned_access : bool + +(* Behavior of division *) + +val division_crashes_on_overflow : bool + +(* Operations on addressing modes *) + +val identity_addressing : addressing_mode + +val offset_addressing : addressing_mode -> int -> addressing_mode + +val num_args_addressing : addressing_mode -> int + +(* Printing operations and addressing modes *) + +val print_addressing : + (Format.formatter -> 'a -> unit) -> addressing_mode -> + Format.formatter -> 'a array -> unit + +val print_specific_operation : + (Format.formatter -> 'a -> unit) -> specific_operation -> + Format.formatter -> 'a array -> unit + +(* Specific operations that are pure *) + +val operation_is_pure : specific_operation -> bool + +(* Specific operations that can raise *) + +val operation_can_raise : specific_operation -> bool diff --git a/asmcomp/s390x/emit.mlp b/asmcomp/s390x/emit.mlp index 5b2e5931..2d6bc4d1 100644 --- a/asmcomp/s390x/emit.mlp +++ b/asmcomp/s390x/emit.mlp @@ -1,4 +1,3 @@ -#2 "asmcomp/s390x/emit.mlp" (**************************************************************************) (* *) (* OCaml *) @@ -31,7 +30,7 @@ let frame_size env = env.stack_offset + (* Trap frame, outgoing parameters *) size_int * env.f.fun_num_stack_slots.(0) + (* Local int variables *) size_float * env.f.fun_num_stack_slots.(1) + (* Local float variables *) - (if env.f.fun_contains_calls then size_addr else 0) in (* The return address *) + (if env.f.fun_frame_required then size_addr else 0) in (* The return address *) Misc.align size 8 let slot_offset env loc cls = @@ -45,10 +44,6 @@ let slot_offset env loc cls = | Outgoing n -> n | Domainstate _ -> assert false (* not a stack slot *) -(* Output a symbol *) - -let emit_symbol s = Emitaux.emit_symbol '.' s - (* Output function call *) let emit_call s = @@ -89,6 +84,25 @@ let check_phys_reg reg_idx name = let reg_f15 = check_phys_reg 115 "%f15" let reg_r7 = check_phys_reg 5 "%r7" +let reg_stack_arg_begin = check_phys_reg 7 "%r9" +let reg_stack_arg_end = check_phys_reg 6 "%r8" + +let cfi_startproc () = + if Config.asm_cfi_supported then begin + emit_string "\t.cfi_startproc\n"; + end + +let cfi_endproc () = + if Config.asm_cfi_supported then begin + emit_string "\t.cfi_endproc\n"; + end + +let cfi_def_cfa_register reg = + if Config.asm_cfi_supported then begin + emit_string "\t.cfi_def_cfa_register "; + emit_string reg; + emit_string "\n" + end (* Output a stack reference *) @@ -107,7 +121,7 @@ let emit_stack env r = let emit_load_symbol_addr reg s = if !pic_code then - ` lgrl {emit_reg reg}, {emit_symbol s}@GOTENT\n` + ` lgrl {emit_reg reg}, {emit_symbol s}@GOT\n` else ` larl {emit_reg reg}, {emit_symbol s}\n` @@ -284,10 +298,9 @@ let emit_instr env i = match i.desc with Lend -> () | Lprologue -> - assert (env.f.fun_prologue_required); let n = frame_size env in emit_stack_adjust n; - if env.f.fun_contains_calls then + if env.f.fun_frame_required then ` stg %r14, {emit_int(n - size_addr)}(%r15)\n` | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in @@ -334,7 +347,7 @@ let emit_instr env i = `{record_frame env i.live (Dbg_other i.dbg)}\n` | Lop(Itailcall_ind) -> let n = frame_size env in - if env.f.fun_contains_calls then + if env.f.fun_frame_required then ` lg %r14, {emit_int(n - size_addr)}(%r15)\n`; emit_stack_adjust (-n); ` br {emit_reg i.arg.(0)}\n` @@ -343,7 +356,7 @@ let emit_instr env i = ` brcl 15, {emit_label env.f.fun_tailrec_entry_point_label}\n` else begin let n = frame_size env in - if env.f.fun_contains_calls then + if env.f.fun_frame_required then ` lg %r14, {emit_int(n - size_addr)}(%r15)\n`; emit_stack_adjust (-n); if !pic_code then @@ -352,21 +365,39 @@ let emit_instr env i = ` brcl 15, {emit_symbol func}\n` end - | Lop(Iextcall { func; alloc; }) -> - if not alloc then emit_call func - else begin + | Lop(Iextcall {func; alloc; stack_ofs}) -> + if stack_ofs > 0 then begin + ` lgr {emit_reg reg_stack_arg_begin}, %r15\n`; + ` lay {emit_reg reg_stack_arg_end}, {emit_int stack_ofs}(%r15)\n`; + emit_load_symbol_addr reg_r7 func; + emit_call "caml_c_call_stack_args"; + `{record_frame env i.live (Dbg_other i.dbg)}\n` + end else if alloc then begin emit_load_symbol_addr reg_r7 func; emit_call "caml_c_call"; `{record_frame env i.live (Dbg_other i.dbg)}\n` + end else begin + (* Save OCaml SP in C callee-save register *) + ` lgr %r12, %r15\n`; + cfi_remember_state (); + cfi_def_cfa_register "%r12"; + (* NB: gdb has asserts on contiguous stacks that mean it + will not unwind through this unless we were to tag this + calling frame with cfi_signal_frame in it's definition. *) + let offset = Domainstate.(idx_of_field Domain_c_stack) * 8 in + ` lg %r15, {emit_int offset}(%r10)\n`; + emit_call func; + ` lgr %r15, %r12\n`; + cfi_restore_state () end | Lop(Istackoffset n) -> emit_stack_adjust n; env.stack_offset <- env.stack_offset + n - | Lop(Iload(chunk, addr, _mut)) -> + | Lop(Iload { memory_chunk; addressing_mode; _ }) -> let loadinstr = - match chunk with + match memory_chunk with Byte_unsigned -> "llgc" | Byte_signed -> "lgb" | Sixteen_unsigned -> "llgh" @@ -376,8 +407,8 @@ let emit_instr env i = | Word_int | Word_val -> "lg" | Single -> "ley" | Double -> "ldy" in - emit_load_store loadinstr addr i.arg 0 i.res.(0); - if chunk = Single then + emit_load_store loadinstr addressing_mode i.arg 0 i.res.(0); + if memory_chunk = Single then ` ldebr {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` | Lop(Istore(Single, addr, _)) -> @@ -395,21 +426,33 @@ let emit_instr env i = emit_load_store storeinstr addr i.arg 1 i.arg.(0) | Lop(Ialloc { bytes = n; dbginfo }) -> - let lbl_after_alloc = new_label() in - let lbl_call_gc = new_label() in - let lbl_frame = - record_frame_label env i.live (Dbg_alloc dbginfo) - in - env.call_gc_sites <- - { gc_lbl = lbl_call_gc; - gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; - ` lay %r11, {emit_int(-n)}(%r11)\n`; - let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in - ` clg %r11, {emit_int offset}(%r10)\n`; - ` brcl 4, {emit_label lbl_call_gc}\n`; (* less than *) - `{emit_label lbl_after_alloc}:`; - ` la {emit_reg i.res.(0)}, 8(%r11)\n` + let lbl_frame_lbl = record_frame_label env i.live (Dbg_alloc dbginfo) in + if env.f.fun_fast then begin + let lbl_after_alloc = new_label () in + let lbl_call_gc = new_label () in + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` lay %r11, {emit_int(-n)}(%r11)\n`; + ` clg %r11, {emit_int offset}(%r10)\n`; + ` brcl 4, {emit_label lbl_call_gc}\n`; (* less than *) + `{emit_label lbl_after_alloc}:`; + ` la {emit_reg i.res.(0)}, 8(%r11)\n`; + env.call_gc_sites <- + { gc_lbl = lbl_call_gc; + gc_return_lbl = lbl_after_alloc; + gc_frame_lbl = lbl_frame_lbl } :: env.call_gc_sites + end else begin + begin match n with + | 16 -> ` {emit_call "caml_alloc1"}\n` + | 24 -> ` {emit_call "caml_alloc2"}\n` + | 32 -> ` {emit_call "caml_alloc3"}\n` + | _ -> + ` lay %r11, {emit_int(-n)}(%r11)\n`; + ` {emit_call "caml_allocN"}\n` + end; + `{emit_label lbl_frame_lbl}:\n`; + ` la {emit_reg i.res.(0)}, 8(%r11)\n` + end + | Lop(Ipoll { return_label }) -> let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in ` clg %r11, {emit_int offset}(%r10)\n`; @@ -421,8 +464,8 @@ let emit_instr env i = record_frame_label env i.live (Dbg_alloc []) in begin match return_label with - | None -> ` brcl 4, {emit_label lbl_call_gc}\n`; (* less than *) - | Some return_label -> ` brcl 10, {emit_label return_label}\n`; (* greater or equal *) + | None -> ` brcl 4, {emit_label lbl_call_gc}\n`; (* less than *) + | Some return_label -> ` brcl 10, {emit_label return_label}\n`; (* greater or equal *) end; env.call_gc_sites <- { gc_lbl = lbl_call_gc; @@ -430,7 +473,7 @@ let emit_instr env i = gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; begin match return_label with | None -> `{emit_label label_after_gc}:`; - | Some _ -> ` brcl 15, {emit_label lbl_call_gc}\n`; (* unconditional *) + | Some _ -> ` brcl 15, {emit_label lbl_call_gc}\n`; (* unconditional *) end | Lop(Iintop Imulh) -> (* Hacker's Delight section 8.3: @@ -474,6 +517,14 @@ let emit_instr env i = ` brc {emit_int mask}, {emit_label lbl}\n`; ` lghi {emit_reg i.res.(0)}, 0\n`; `{emit_label lbl}:\n` + | Lop(Icompf cmp) -> + let lbl = new_label() in + ` cdbr {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; + ` lghi {emit_reg i.res.(0)}, 1\n`; + let mask = branch_for_float_comparison cmp in + ` brc {emit_int mask}, {emit_label lbl}\n`; + ` lghi {emit_reg i.res.(0)}, 0\n`; + `{emit_label lbl}:\n` | Lop(Iintop (Icheckbound)) -> let lbl = bound_error_label env i.dbg in ` clgr {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; @@ -540,6 +591,15 @@ let emit_instr env i = assert (i.arg.(2).loc = i.res.(0).loc); let instr = name_for_specific sop in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` + | Lop (Idls_get) -> + let ofs = Domainstate.(idx_of_field Domain_dls_root) * 8 in + ` lg {emit_reg i.res.(0)}, {emit_int ofs}(%r10)\n` + | Lop (Ireturn_addr) -> + let n = frame_size env in + if env.f.fun_frame_required then + ` lg {emit_reg i.res.(0)}, {emit_int(n - size_addr)}(%r15)\n` + else + ` lgr {emit_reg i.res.(0)}, %r14\n` | Lreloadretaddr -> let n = frame_size env in ` lg %r14, {emit_int(n - size_addr)}(%r15)\n` @@ -618,28 +678,25 @@ let emit_instr env i = env.stack_offset <- env.stack_offset + 16; emit_stack_adjust 16; ` larl %r14, {emit_label lbl_handler}\n`; - ` stg %r14, 0(%r15)\n`; - ` stg %r13, {emit_int size_addr}(%r15)\n`; + ` stg %r14, {emit_int size_addr}(%r15)\n`; + ` stg %r13, 0(%r15)\n`; ` lgr %r13, %r15\n` | Lpoptrap -> - ` lg %r13, {emit_int size_addr}(%r15)\n`; + ` lg %r13, 0(%r15)\n`; emit_stack_adjust (-16); env.stack_offset <- env.stack_offset - 16 | Lraise k -> begin match k with | Lambda.Raise_regular-> - let offset = Domainstate.(idx_of_field Domain_backtrace_pos) * 8 in - ` lghi %r1, 0\n`; - ` stg %r1, {emit_int offset}(%r10)\n`; emit_call "caml_raise_exn"; `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_reraise -> - emit_call "caml_raise_exn"; + emit_call "caml_reraise_exn"; `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_notrace -> - ` lg %r1, 0(%r13)\n`; + ` lg %r1, {emit_int size_addr}(%r13)\n`; ` lgr %r15, %r13\n`; - ` lg %r13, {emit_int size_addr}(%r15)\n`; + ` lg %r13, 0(%r15)\n`; emit_stack_adjust (-16); ` br %r1\n` end @@ -664,11 +721,47 @@ let fundecl fundecl = emit_string code_space; ` .align 8\n`; `{emit_symbol fundecl.fun_name}:\n`; + cfi_startproc (); + + (* Dynamic stack checking *) + let stack_threshold_size = Config.stack_threshold * 8 in (* bytes *) + let max_frame_size = frame_size env + fundecl.fun_extra_stack_used in + let handle_overflow = ref None in + if fundecl.fun_contains_nontail_calls + || max_frame_size >= stack_threshold_size then begin + let overflow = new_label () and ret = new_label () in + let threshold_offset = Domainstate.stack_ctx_words * 8 + stack_threshold_size in + let f = max_frame_size + threshold_offset in + let offset = Domainstate.(idx_of_field Domain_current_stack) * 8 in + ` lay %r1, {emit_int (-f)}(%r15)\n`; + ` clg %r1, {emit_int offset}(%r10)\n`; + ` brcl 4, {emit_label overflow}\n`; + `{emit_label ret}:\n`; + handle_overflow := Some (overflow, ret); + end; + emit_all env fundecl.fun_body; (* Emit the glue code to call the GC *) List.iter emit_call_gc env.call_gc_sites; (* Emit the glue code to handle bound errors *) emit_call_bound_errors env; + + begin match !handle_overflow with + | None -> () + | Some (overflow,ret) -> begin + `{emit_label overflow}:\n`; + let s = (Config.stack_threshold + max_frame_size / 8) in + ` lay %r15, -8(%r15)\n`; + ` stg %r14, 0(%r15)\n`; + ` lgfi %r12, {emit_int s}\n`; + emit_call "caml_call_realloc_stack"; + ` lg %r14, 0(%r15)\n`; + ` la %r15, 8(%r15)\n`; + ` brcl 15, {emit_label ret}\n` + end + end; + + cfi_endproc (); (* Emit the numeric literals *) if env.float_literals <> [] || env.int_literals <> [] then begin emit_string rodata_space; diff --git a/asmcomp/s390x/proc.ml b/asmcomp/s390x/proc.ml index c9400e7c..e6daa98b 100644 --- a/asmcomp/s390x/proc.ml +++ b/asmcomp/s390x/proc.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/s390x/proc.ml" (**************************************************************************) (* *) (* OCaml *) @@ -148,13 +149,11 @@ let loc_results res = (* C calling conventions under SVR4: use GPR 2-6 and FPR 0,2,4,6 just like ML calling conventions. - Using a float register does not affect the int registers. - Always reserve 160 bytes at bottom of stack, plus whatever is needed - to hold the overflow arguments. *) + Using a float register does not affect the int registers. *) let loc_external_arguments ty_args = let arg = Cmm.machtype_of_exttype_list ty_args in - let (loc, ofs) = calling_conventions 0 4 100 103 outgoing 160 arg in + let (loc, ofs) = calling_conventions 0 4 100 103 outgoing 0 arg in (Array.map (fun reg -> [|reg|]) loc, ofs) (* Results are in GPR 2 and FPR 0 *) @@ -185,15 +184,12 @@ let dwarf_register_numbers ~reg_class = let stack_ptr_dwarf_register_number = 15 -(* Volatile registers: none *) - -let regs_are_volatile _rs = false - (* Registers destroyed by operations *) +(* Mark r12 destroyed by C calls so that it can be used for preserving SP *) let destroyed_at_c_call = Array.of_list(List.map phys_reg - [0; 1; 2; 3; 4; + [0; 1; 2; 3; 4; 8; 100; 101; 102; 103; 104; 105; 106; 107]) let destroyed_at_oper = function @@ -218,16 +214,6 @@ let max_register_pressure = function Iextcall _ -> [| 4; 7 |] | _ -> [| 9; 15 |] -(* Layout of the stack *) - -let frame_required fd = - fd.fun_contains_calls - || fd.fun_num_stack_slots.(0) > 0 - || fd.fun_num_stack_slots.(1) > 0 - -let prologue_required fd = - frame_required fd - (* Calling the assembler *) let assemble_file infile outfile = diff --git a/asmcomp/s390x/reload.ml b/asmcomp/s390x/reload.ml index 46d1daa7..35f5d545 100644 --- a/asmcomp/s390x/reload.ml +++ b/asmcomp/s390x/reload.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/s390x/reload.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/s390x/scheduling.ml b/asmcomp/s390x/scheduling.ml index a3098470..2e5c504c 100644 --- a/asmcomp/s390x/scheduling.ml +++ b/asmcomp/s390x/scheduling.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/s390x/scheduling.ml" (**************************************************************************) (* *) (* OCaml *) @@ -17,47 +18,8 @@ (* Instruction scheduling for the Z processor *) -open Arch -open Mach +open! Schedgen [@@warning "-66"] -(* The z10 processor is in-order, dual-issue. It could benefit from some - basic-block scheduling, although precise latency information - is not available. - The z196 and later are out-of-order processors. Basic-block - scheduling probably makes no difference. *) +(* Scheduling is turned off because it breaks atomics. *) -class scheduler = object - -inherit Schedgen.scheduler_generic - -(* Latencies (in cycles). Wild guesses. We multiply all latencies by 2 - to favor dual-issue. *) - -method oper_latency = function - Ireload -> 4 - | Iload(_, _, _) -> 4 - | Iconst_float _ -> 4 (* turned into a load *) - | Iintop(Imul) -> 10 - | Iintop_imm(Imul, _) -> 10 - | Iaddf | Isubf | Imulf -> 8 - | Idivf -> 40 - | Ispecific(Imultaddf | Imultsubf) -> 8 - | _ -> 2 - -method! reload_retaddr_latency = 4 - -(* Issue cycles. Rough approximations. *) - -method oper_issue_cycles = function - | Ialloc _ | Ipoll _ -> 4 - | Iintop(Imulh) -> 15 - | Iintop(Idiv|Imod) -> 20 - | Iintop(Icomp _) -> 4 - | Iintop_imm(Icomp _, _) -> 4 - | _ -> 1 - -method! reload_retaddr_issue_cycles = 1 - -end - -let fundecl f = (new scheduler)#schedule_fundecl f +let fundecl f = f diff --git a/asmcomp/s390x/selection.ml b/asmcomp/s390x/selection.ml index 96bd6a99..cce96959 100644 --- a/asmcomp/s390x/selection.ml +++ b/asmcomp/s390x/selection.ml @@ -1,3 +1,4 @@ +# 2 "asmcomp/s390x/selection.ml" (**************************************************************************) (* *) (* OCaml *) diff --git a/asmcomp/s390x/stackframe.ml b/asmcomp/s390x/stackframe.ml new file mode 100644 index 00000000..d165a207 --- /dev/null +++ b/asmcomp/s390x/stackframe.ml @@ -0,0 +1,32 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +open! Mach [@@warning "-66"] + +let trap_handler_size = 16 + +class stackframe = object + +inherit Stackframegen.stackframe_generic + +method trap_handler_size = trap_handler_size + +end + +let analyze f = + (new stackframe)#analyze f diff --git a/asmcomp/schedgen.ml b/asmcomp/schedgen.ml index 942e35e8..e36f6bfe 100644 --- a/asmcomp/schedgen.ml +++ b/asmcomp/schedgen.ml @@ -21,15 +21,16 @@ open Linear (* Representation of the code DAG. *) -type code_dag_node = - { instr: instruction; (* The instruction *) +type code_dag_node = { + instr: instruction; (* The instruction *) delay: int; (* How many cycles before result is available *) mutable sons: (code_dag_node * int) list; (* Instructions that depend on it *) mutable date: int; (* Start date *) mutable length: int; (* Length of longest path to result *) mutable ancestors: int; (* Number of ancestors *) - mutable emitted_ancestors: int } (* Number of emitted ancestors *) + mutable emitted_ancestors: int (* Number of emitted ancestors *) + } let dummy_node = { instr = end_instr; delay = 0; sons = []; date = 0; @@ -44,18 +45,22 @@ let dummy_node = - code_checkbounds contains the latest checkbound node not matched by a subsequent load or store. *) -let code_results = (Hashtbl.create 31 : (location, code_dag_node) Hashtbl.t) -let code_uses = (Hashtbl.create 31 : (location, code_dag_node) Hashtbl.t) -let code_stores = ref ([] : code_dag_node list) -let code_loads = ref ([] : code_dag_node list) -let code_checkbounds = ref ([] : code_dag_node list) - -let clear_code_dag () = - Hashtbl.clear code_results; - Hashtbl.clear code_uses; - code_stores := []; - code_loads := []; - code_checkbounds := [] +type code_dag = { + results : (location, code_dag_node) Hashtbl.t; + uses : (location, code_dag_node) Hashtbl.t; + mutable stores : code_dag_node list; + mutable loads : code_dag_node list; + mutable checkbounds : code_dag_node list; + } + +let empty_dag () = + { + results = Hashtbl.create 31; + uses = Hashtbl.create 31; + stores = []; + loads = []; + checkbounds = []; + } (* Add an edge to the code DAG *) @@ -68,9 +73,9 @@ let add_edge_after son ancestor = add_edge ancestor son 0 (* Add edges from all instructions that define a pseudoregister [arg] being used as argument to node [node] (RAW dependencies *) -let add_RAW_dependencies node arg = +let add_RAW_dependencies t node arg = try - let ancestor = Hashtbl.find code_results arg.loc in + let ancestor = Hashtbl.find t.results arg.loc in add_edge ancestor node ancestor.delay with Not_found -> () @@ -78,16 +83,16 @@ let add_RAW_dependencies node arg = (* Add edges from all instructions that use a pseudoregister [res] that is defined by node [node] (WAR dependencies). *) -let add_WAR_dependencies node res = - let ancestors = Hashtbl.find_all code_uses res.loc in +let add_WAR_dependencies t node res = + let ancestors = Hashtbl.find_all t.uses res.loc in List.iter (add_edge_after node) ancestors (* Add edges from all instructions that have already defined a pseudoregister [res] that is defined by node [node] (WAW dependencies). *) -let add_WAW_dependencies node res = +let add_WAW_dependencies t node res = try - let ancestor = Hashtbl.find code_results res.loc in + let ancestor = Hashtbl.find t.results res.loc in add_edge ancestor node 0 with Not_found -> () @@ -135,14 +140,17 @@ let rec remove_instr node = function (* We treat Lreloadretaddr as a word-sized load *) -let some_load = (Iload(Cmm.Word_int, Arch.identity_addressing, Mutable)) +let some_load = + Iload { + memory_chunk = Cmm.Word_int; + addressing_mode = Arch.identity_addressing; + mutability = Mutable; + is_atomic = false } (* The generic scheduler *) class virtual scheduler_generic = object (self) -val mutable trywith_nesting = 0 - (* Determine whether an operation ends a basic block or not. Can be overridden for some processors to signal specific instructions that terminate a basic block. *) @@ -176,12 +184,17 @@ method private instr_in_basic_block instr try_nesting = Can be overridden for some processors to signal specific load or store instructions (e.g. on the I386). *) +(* Stores are not reordered with other stores nor with loads. + Loads can be reordered with other loads, but not with stores. + Atomic loads must not be reordered, so we treat them like stores. *) + method is_store = function Istore(_, _, _) -> true + | Iload {is_atomic = true} -> true | _ -> false method is_load = function - Iload(_, _, _) -> true + Iload {is_atomic = false} -> true | _ -> false method is_checkbound = function @@ -246,7 +259,7 @@ method private destroyed_by_instr instr = (* Add an instruction to the code dag *) -method private add_instruction ready_queue instr = +method private add_instruction t ready_queue instr = let delay = self#instr_latency instr in let destroyed = self#destroyed_by_instr instr in let node = @@ -259,50 +272,50 @@ method private add_instruction ready_queue instr = emitted_ancestors = 0 } in (* Add edges from all instructions that define one of the registers used (RAW dependencies) *) - Array.iter (add_RAW_dependencies node) instr.arg; + Array.iter (add_RAW_dependencies t node) instr.arg; (* Also add edges from all instructions that use one of the result regs of this instruction, or a reg destroyed by this instruction (WAR dependencies). *) - Array.iter (add_WAR_dependencies node) instr.res; - Array.iter (add_WAR_dependencies node) destroyed; (* PR#5731 *) + Array.iter (add_WAR_dependencies t node) instr.res; + Array.iter (add_WAR_dependencies t node) destroyed; (* PR#5731 *) (* Also add edges from all instructions that have already defined one of the results of this instruction, or a reg destroyed by this instruction (WAW dependencies). *) - Array.iter (add_WAW_dependencies node) instr.res; - Array.iter (add_WAW_dependencies node) destroyed; (* PR#5731 *) + Array.iter (add_WAW_dependencies t node) instr.res; + Array.iter (add_WAW_dependencies t node) destroyed; (* PR#5731 *) (* If this is a load, add edges from the most recent store viewed so far (if any) and remember the load. Also add edges from the most recent checkbound and forget that checkbound. *) if self#instr_is_load instr then begin - List.iter (add_edge_after node) !code_stores; - code_loads := node :: !code_loads; - List.iter (add_edge_after node) !code_checkbounds; - code_checkbounds := [] + List.iter (add_edge_after node) t.stores; + t.loads <- node :: t.loads; + List.iter (add_edge_after node) t.checkbounds; + t.checkbounds <- [] end (* If this is a store, add edges from the most recent store, as well as all loads viewed since then, and also the most recent checkbound. Remember the store, discarding the previous stores, loads and checkbounds. *) else if self#instr_is_store instr then begin - List.iter (add_edge_after node) !code_stores; - List.iter (add_edge_after node) !code_loads; - List.iter (add_edge_after node) !code_checkbounds; - code_stores := [node]; - code_loads := []; - code_checkbounds := [] + List.iter (add_edge_after node) t.stores; + List.iter (add_edge_after node) t.loads; + List.iter (add_edge_after node) t.checkbounds; + t.stores <- [node]; + t.loads <- []; + t.checkbounds <- [] end else if self#instr_is_checkbound instr then begin - code_checkbounds := [node] + t.checkbounds <- [node] end; (* Remember the registers used and produced by this instruction *) for i = 0 to Array.length instr.res - 1 do - Hashtbl.add code_results instr.res.(i).loc node + Hashtbl.add t.results instr.res.(i).loc node done; for i = 0 to Array.length destroyed - 1 do - Hashtbl.add code_results destroyed.(i).loc node (* PR#5731 *) + Hashtbl.add t.results destroyed.(i).loc node (* PR#5731 *) done; for i = 0 to Array.length instr.arg - 1 do - Hashtbl.add code_uses instr.arg.(i).loc node + Hashtbl.add t.uses instr.arg.(i).loc node done; (* If this is a root instruction (all arguments already computed), add it to the ready queue *) @@ -365,14 +378,13 @@ method schedule_fundecl f = | Lpoptrap -> { i with next = schedule i.next (try_nesting - 1) } | _ -> if self#instr_in_basic_block i try_nesting then begin - clear_code_dag(); - schedule_block [] i try_nesting + schedule_block (empty_dag ()) [] i try_nesting end else { i with next = schedule i.next try_nesting } - and schedule_block ready_queue i try_nesting = + and schedule_block t ready_queue i try_nesting = if self#instr_in_basic_block i try_nesting then - schedule_block (self#add_instruction ready_queue i) i.next try_nesting + schedule_block t (self#add_instruction t ready_queue i) i.next try_nesting else begin let critical_outputs = match i.desc with @@ -386,20 +398,8 @@ method schedule_fundecl f = if f.fun_fast && !Clflags.insn_sched then begin let new_body = schedule f.fun_body 0 in - clear_code_dag(); - { fun_name = f.fun_name; - fun_body = new_body; - fun_fast = f.fun_fast; - fun_dbg = f.fun_dbg; - fun_tailrec_entry_point_label = f.fun_tailrec_entry_point_label; - fun_contains_calls = f.fun_contains_calls; - fun_num_stack_slots = f.fun_num_stack_slots; - fun_frame_required = f.fun_frame_required; - fun_prologue_required = f.fun_prologue_required; - } + { f with fun_body = new_body } end else f end - -let reset () = clear_code_dag () diff --git a/asmcomp/schedgen.mli b/asmcomp/schedgen.mli index bc3f798d..80df1c05 100644 --- a/asmcomp/schedgen.mli +++ b/asmcomp/schedgen.mli @@ -37,13 +37,12 @@ class virtual scheduler_generic : object method oper_in_basic_block : Mach.operation -> bool (* Says whether the given operation terminates a basic block *) method is_store : Mach.operation -> bool - (* Says whether the given operation is a memory store *) + (* Says whether the given operation is a memory store + or an atomic load. *) method is_load : Mach.operation -> bool - (* Says whether the given operation is a memory load *) + (* Says whether the given operation is a non-atomic memory load *) method is_checkbound : Mach.operation -> bool (* Says whether the given operation is a checkbound *) (* Entry point *) method schedule_fundecl : Linear.fundecl -> Linear.fundecl end - -val reset : unit -> unit diff --git a/asmcomp/selectgen.ml b/asmcomp/selectgen.ml index 6a56cc2a..3d4c4f0a 100644 --- a/asmcomp/selectgen.ml +++ b/asmcomp/selectgen.ml @@ -67,14 +67,15 @@ let env_empty = { let oper_result_type = function Capply ty -> ty | Cextcall(_s, ty_res, _ty_args, _alloc) -> ty_res - | Cload (c, _) -> - begin match c with + | Cload {memory_chunk} -> + begin match memory_chunk with | Word_val -> typ_val | Single | Double -> typ_float | _ -> typ_int end | Calloc -> typ_val | Cstore (_c, _) -> typ_void + | Cdls_get -> typ_val | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi | Cand | Cor | Cxor | Clsl | Clsr | Casr | Ccmpi _ | Ccmpa _ | Ccmpf _ -> typ_int @@ -315,6 +316,7 @@ method is_simple_expr = function | Cconst_float _ -> true | Cconst_symbol _ -> true | Cvar _ -> true + | Creturn_addr -> true | Ctuple el -> List.for_all self#is_simple_expr el | Clet(_id, arg, body) | Clet_mut(_id, _, arg, body) -> self#is_simple_expr arg && self#is_simple_expr body @@ -328,7 +330,8 @@ method is_simple_expr = function | Cload _ | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi | Cand | Cor | Cxor | Clsl | Clsr | Casr | Ccmpi _ | Caddv | Cadda | Ccmpa _ | Cnegf | Cabsf | Caddf | Csubf | Cmulf | Cdivf | Cfloatofint | Cintoffloat - | Ccmpf _ | Ccheckbound -> List.for_all self#is_simple_expr args + | Ccmpf _ | Ccheckbound | Cdls_get -> + List.for_all self#is_simple_expr args end | Cassign _ | Cifthenelse _ | Cswitch _ | Ccatch _ | Cexit _ | Ctrywith _ -> false @@ -349,7 +352,7 @@ method effects_of exp = let module EC = Effect_and_coeffect in match exp with | Cconst_int _ | Cconst_natint _ | Cconst_float _ | Cconst_symbol _ - | Cvar _ -> EC.none + | Cvar _ | Creturn_addr -> EC.none | Ctuple el -> EC.join_list_map el self#effects_of | Clet (_id, arg, body) | Clet_mut (_id, _, arg, body) -> EC.join (self#effects_of arg) (self#effects_of body) @@ -366,8 +369,9 @@ method effects_of exp = | Calloc -> EC.none | Cstore _ -> EC.effect_only Effect.Arbitrary | Craise _ | Ccheckbound -> EC.effect_only Effect.Raise - | Cload (_, Asttypes.Immutable) -> EC.none - | Cload (_, Asttypes.Mutable) -> EC.coeffect_only Coeffect.Read_mutable + | Cload {mutability = Asttypes.Immutable} -> EC.none + | Cload {mutability = Asttypes.Mutable} | Cdls_get -> + EC.coeffect_only Coeffect.Read_mutable | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi | Cand | Cor | Cxor | Clsl | Clsr | Casr | Ccmpi _ | Caddv | Cadda | Ccmpa _ | Cnegf | Cabsf | Caddf | Csubf | Cmulf | Cdivf | Cfloatofint | Cintoffloat | Ccmpf _ -> @@ -400,39 +404,6 @@ method virtual select_addressing : method select_store is_assign addr arg = (Istore(Word_val, addr, is_assign), arg) -(* call marking methods, documented in selectgen.mli *) -val contains_calls = ref false - -method mark_call = - contains_calls := true - -method mark_tailcall = () - -method mark_c_tailcall = () - -method mark_instr = function - | Iop (Icall_ind | Icall_imm _ | Iextcall _) -> - self#mark_call - | Iop (Itailcall_ind | Itailcall_imm _) -> - self#mark_tailcall - | Iop (Ialloc _) | Iop (Ipoll _) -> - self#mark_call (* caml_alloc*, caml_garbage_collection (incl. polls) *) - | Iop (Iintop (Icheckbound) | Iintop_imm(Icheckbound, _)) -> - self#mark_c_tailcall (* caml_ml_array_bound_error *) - | Iraise raise_kind -> - begin match raise_kind with - | Lambda.Raise_notrace -> () - | Lambda.Raise_regular - | Lambda.Raise_reraise -> - (* PR#6239 *) - (* caml_stash_backtrace; we #mark_call rather than - #mark_c_tailcall to get a good stack backtrace *) - self#mark_call - end - | Itrywith _ -> - self#mark_call - | _ -> () - (* Default instruction selection for operators *) method select_operation op args _dbg = @@ -442,10 +413,10 @@ method select_operation op args _dbg = | (Capply _, _) -> (Icall_ind, args) | (Cextcall(func, ty_res, ty_args, alloc), _) -> - Iextcall { func; ty_res; ty_args; alloc; }, args - | (Cload (chunk, mut), [arg]) -> - let (addr, eloc) = self#select_addressing chunk arg in - (Iload(chunk, addr, mut), [eloc]) + Iextcall { func; alloc; ty_res; ty_args; stack_ofs = -1}, args + | (Cload {memory_chunk; mutability; is_atomic}, [arg]) -> + let (addressing_mode, eloc) = self#select_addressing memory_chunk arg in + (Iload {memory_chunk; addressing_mode; mutability; is_atomic}, [eloc]) | (Cstore (chunk, init), [arg1; arg2]) -> let (addr, eloc) = self#select_addressing chunk arg1 in let is_assign = @@ -461,6 +432,7 @@ method select_operation op args _dbg = (Istore(chunk, addr, is_assign), [arg2; eloc]) (* Inversion addr/datum in Istore *) end + | (Cdls_get, _) -> Idls_get, args | (Calloc, _) -> (Ialloc {bytes = 0; dbginfo = []}), args | (Caddi, _) -> self#select_arith_comm Iadd args | (Csubi, _) -> self#select_arith Isub args @@ -478,6 +450,7 @@ method select_operation op args _dbg = | (Caddv, _) -> self#select_arith_comm Iadd args | (Cadda, _) -> self#select_arith_comm Iadd args | (Ccmpa comp, _) -> self#select_arith_comp (Iunsigned comp) args + | (Ccmpf comp, _) -> (Icompf comp, args) | (Cnegf, _) -> (Inegf, args) | (Cabsf, _) -> (Iabsf, args) | (Caddf, _) -> (Iaddf, args) @@ -626,6 +599,9 @@ method emit_expr (env:environment) exp = adding this register to the frame table would be redundant *) let r = self#regs_for typ_int in Some(self#insert_op env (Iconst_symbol n) [||] r) + | Creturn_addr -> + let r = self#regs_for typ_int in + Some(self#insert_op env Ireturn_addr [||] r) | Cvar v -> begin try Some(env_find v env) @@ -672,12 +648,6 @@ method emit_expr (env:environment) exp = self#insert_debug env (Iraise k) dbg rd [||]; None end - | Cop(Ccmpf _, _, dbg) -> - self#emit_expr env - (Cifthenelse (exp, - dbg, Cconst_int (1, dbg), - dbg, Cconst_int (0, dbg), - dbg)) | Cop(Copaque, args, dbg) -> begin match self#emit_parts_list env args with None -> None @@ -712,12 +682,13 @@ method emit_expr (env:environment) exp = self#insert_debug env (Iop new_op) dbg loc_arg loc_res; self#insert_move_results env loc_res rd stack_ofs; Some rd - | Iextcall { ty_args; _} -> + | Iextcall r -> let (loc_arg, stack_ofs) = - self#emit_extcall_args env ty_args new_args in + self#emit_extcall_args env r.ty_args new_args in let rd = self#regs_for ty in let loc_res = - self#insert_op_debug env new_op dbg + self#insert_op_debug env + (Iextcall {r with stack_ofs = stack_ofs}) dbg loc_arg (Proc.loc_external_results (Reg.typv rd)) in self#insert_move_results env loc_res rd stack_ofs; Some rd @@ -1149,6 +1120,7 @@ method emit_tail (env:environment) exp = | Cop _ | Cconst_int _ | Cconst_natint _ | Cconst_float _ | Cconst_symbol _ | Cvar _ + | Creturn_addr | Cassign _ | Ctuple _ | Cexit _ -> @@ -1187,7 +1159,6 @@ method emit_fundecl ~future_funcnames f = body in let body_with_prologue = self#extract_onto polled_body in - instr_iter (fun instr -> self#mark_instr instr.Mach.desc) body_with_prologue; { fun_name = f.Cmm.fun_name; fun_args = loc_arg; fun_body = body_with_prologue; @@ -1195,7 +1166,6 @@ method emit_fundecl ~future_funcnames f = fun_dbg = f.Cmm.fun_dbg; fun_poll = f.Cmm.fun_poll; fun_num_stack_slots = Array.make Proc.num_register_classes 0; - fun_contains_calls = !contains_calls; } end diff --git a/asmcomp/selectgen.mli b/asmcomp/selectgen.mli index d7147192..2cc4b199 100644 --- a/asmcomp/selectgen.mli +++ b/asmcomp/selectgen.mli @@ -115,30 +115,6 @@ class virtual selector_generic : object (* Fill a freshly allocated block. Can be overridden for architectures that do not provide Arch.offset_addressing. *) - method mark_call : unit - (* informs the code emitter that the current function is non-leaf: - it may perform a (non-tail) call; by default, sets - [contains_calls := true] *) - - method mark_tailcall : unit - (* informs the code emitter that the current function may end with - a tail-call; by default, does nothing *) - - method mark_c_tailcall : unit - (* informs the code emitter that the current function may call - a C function that never returns; by default, does nothing. - - It is unnecessary to save the stack pointer in this situation - (which is the main purpose of tracking leaf functions) but some - architectures still need to ensure that the stack is properly - aligned when the C function is called. This is achieved by - overloading this method to set [contains_calls := true] *) - - method mark_instr : Mach.instruction_desc -> unit - (* dispatches on instructions to call one of the marking function - above; overloading this is useful if Ispecific instructions need - marking *) - (* The following method is the entry point and should not be overridden *) method emit_fundecl : future_funcnames:Misc.Stdlib.String.Set.t -> Cmm.fundecl -> Mach.fundecl @@ -162,11 +138,6 @@ class virtual selector_generic : object method emit_expr : environment -> Cmm.expression -> Reg.t array option method emit_tail : environment -> Cmm.expression -> unit - - (* [contains_calls] is declared as a reference instance variable, - instead of a mutable boolean instance variable, - because the traversal uses functional object copies. *) - val contains_calls : bool ref end val reset : unit -> unit diff --git a/asmcomp/spill.ml b/asmcomp/spill.ml index e5720df8..89559d81 100644 --- a/asmcomp/spill.ml +++ b/asmcomp/spill.ml @@ -35,9 +35,44 @@ open Mach (* Association of spill registers to registers *) -let spill_env = ref (Reg.Map.empty : Reg.t Reg.Map.t) - -let spill_reg r = +type reload_data = { + spill_env : Reg.t Reg.Map.t ref; + mutable use_date : int Reg.Map.t; + (* Record the position of last use of registers *) + mutable current_date : int; + mutable destroyed_at_fork : (instruction * Reg.Set.t) list; + (* A-list recording what is destroyed at if-then-else points. *) + reload_at_exit : (int, Reg.Set.t) Hashtbl.t; +} + +type spill_data = { + spill_env : Reg.t Reg.Map.t ref; + destroyed_at_fork : (instruction * Reg.Set.t) list; + (* A-list recording what is destroyed at if-then-else points. *) + mutable spill_at_raise : Reg.Set.t; + mutable inside_arm : bool; + mutable inside_catch : bool; + spill_at_exit : (int, Reg.Set.t) Hashtbl.t; +} + +let create_reload () = { + spill_env = ref Reg.Map.empty; + use_date = Reg.Map.empty; + current_date = 0; + destroyed_at_fork = []; + reload_at_exit = Hashtbl.create 20; +} + +let create_spill (reload : reload_data) = { + spill_env = reload.spill_env; + destroyed_at_fork = reload.destroyed_at_fork; + spill_at_raise = Reg.Set.empty; + inside_arm = false; + inside_catch = false; + spill_at_exit = Hashtbl.create 20; +} + +let spill_reg spill_env r = try Reg.Map.find r !spill_env with Not_found -> @@ -47,23 +82,18 @@ let spill_reg r = spill_env := Reg.Map.add r spill_r !spill_env; spill_r -(* Record the position of last use of registers *) - -let use_date = ref (Reg.Map.empty : int Reg.Map.t) -let current_date = ref 0 - -let record_use regv = +let record_use t regv = for i = 0 to Array.length regv - 1 do let r = regv.(i) in - let prev_date = try Reg.Map.find r !use_date with Not_found -> 0 in - if !current_date > prev_date then - use_date := Reg.Map.add r !current_date !use_date + let prev_date = try Reg.Map.find r t.use_date with Not_found -> 0 in + if t.current_date > prev_date then + t.use_date <- Reg.Map.add r t.current_date t.use_date done (* Check if the register pressure overflows the maximum pressure allowed at that point. If so, spill enough registers to lower the pressure. *) -let add_superpressure_regs op live_regs res_regs spilled = +let add_superpressure_regs t op live_regs res_regs spilled = let max_pressure = Proc.max_register_pressure op in let regs = Reg.add_set_array live_regs res_regs in (* Compute the pressure in each register class *) @@ -94,7 +124,7 @@ let add_superpressure_regs op live_regs res_regs spilled = r.loc = Unknown then begin try - let d = Reg.Map.find r !use_date in + let d = Reg.Map.find r t.use_date in if d < !lru_date then begin lru_date := d; lru_reg := r @@ -112,42 +142,36 @@ let add_superpressure_regs op live_regs res_regs spilled = end in check_pressure 0 spilled -(* A-list recording what is destroyed at if-then-else points. *) - -let destroyed_at_fork = ref ([] : (instruction * Reg.Set.t) list) - (* First pass: insert reload instructions based on an approximation of what is destroyed at pressure points. *) -let add_reloads regset i = +let add_reloads spill_env regset i = Reg.Set.fold - (fun r i -> instr_cons (Iop Ireload) [|spill_reg r|] [|r|] i) + (fun r i -> instr_cons (Iop Ireload) [|spill_reg spill_env r|] [|r|] i) regset i -let reload_at_exit : (int, Reg.Set.t) Hashtbl.t = Hashtbl.create 20 - -let get_reload_at_exit k = - match Hashtbl.find_opt reload_at_exit k with +let get_reload_at_exit t k = + match Hashtbl.find_opt t.reload_at_exit k with | None -> Reg.Set.empty | Some s -> s -let set_reload_at_exit k s = - Hashtbl.replace reload_at_exit k s +let set_reload_at_exit t k s = + Hashtbl.replace t.reload_at_exit k s -let rec reload i before = - incr current_date; - record_use i.arg; - record_use i.res; +let rec reload (t : reload_data) i before = + t.current_date <- succ t.current_date; + record_use t i.arg; + record_use t i.res; match i.desc with Iend -> (i, before) | Ireturn | Iop(Itailcall_ind) | Iop(Itailcall_imm _) -> - (add_reloads (Reg.inter_set_array before i.arg) i, + (add_reloads t.spill_env (Reg.inter_set_array before i.arg) i, Reg.Set.empty) | Iop(Icall_ind | Icall_imm _ | Iextcall { alloc = true; }) -> (* All regs live across must be spilled *) - let (new_next, finally) = reload i.next i.live in - (add_reloads (Reg.inter_set_array before i.arg) + let (new_next, finally) = reload t i.next i.live in + (add_reloads t.spill_env (Reg.inter_set_array before i.arg) (instr_cons_debug i.desc i.arg i.res i.dbg new_next), finally) | Iop op -> @@ -157,60 +181,60 @@ let rec reload i before = (Reg.Set.cardinal i.live + Array.length i.res <= Proc.safe_register_pressure op) then before - else add_superpressure_regs op i.live i.res before in + else add_superpressure_regs t op i.live i.res before in let after = Reg.diff_set_array (Reg.diff_set_array new_before i.arg) i.res in - let (new_next, finally) = reload i.next after in - (add_reloads (Reg.inter_set_array new_before i.arg) + let (new_next, finally) = reload t i.next after in + (add_reloads t.spill_env (Reg.inter_set_array new_before i.arg) (instr_cons_debug i.desc i.arg i.res i.dbg new_next), finally) | Iifthenelse(test, ifso, ifnot) -> let at_fork = Reg.diff_set_array before i.arg in - let date_fork = !current_date in - let (new_ifso, after_ifso) = reload ifso at_fork in - let date_ifso = !current_date in - current_date := date_fork; - let (new_ifnot, after_ifnot) = reload ifnot at_fork in - current_date := Int.max date_ifso !current_date; + let date_fork = t.current_date in + let (new_ifso, after_ifso) = reload t ifso at_fork in + let date_ifso = t.current_date in + t.current_date <- date_fork; + let (new_ifnot, after_ifnot) = reload t ifnot at_fork in + t.current_date <- Int.max date_ifso t.current_date; let (new_next, finally) = - reload i.next (Reg.Set.union after_ifso after_ifnot) in + reload t i.next (Reg.Set.union after_ifso after_ifnot) in let new_i = instr_cons (Iifthenelse(test, new_ifso, new_ifnot)) i.arg i.res new_next in - destroyed_at_fork := (new_i, at_fork) :: !destroyed_at_fork; - (add_reloads (Reg.inter_set_array before i.arg) new_i, + t.destroyed_at_fork <- (new_i, at_fork) :: t.destroyed_at_fork; + (add_reloads t.spill_env (Reg.inter_set_array before i.arg) new_i, finally) | Iswitch(index, cases) -> let at_fork = Reg.diff_set_array before i.arg in - let date_fork = !current_date in + let date_fork = t.current_date in let date_join = ref 0 in let after_cases = ref Reg.Set.empty in let new_cases = Array.map (fun c -> - current_date := date_fork; - let (new_c, after_c) = reload c at_fork in + t.current_date <- date_fork; + let (new_c, after_c) = reload t c at_fork in after_cases := Reg.Set.union !after_cases after_c; - date_join := Int.max !date_join !current_date; + date_join := Int.max !date_join t.current_date; new_c) cases in - current_date := !date_join; - let (new_next, finally) = reload i.next !after_cases in - (add_reloads (Reg.inter_set_array before i.arg) + t.current_date <- !date_join; + let (new_next, finally) = reload t i.next !after_cases in + (add_reloads t.spill_env (Reg.inter_set_array before i.arg) (instr_cons (Iswitch(index, new_cases)) i.arg i.res new_next), finally) | Icatch(rec_flag, handlers, body) -> - let (new_body, after_body) = reload body before in + let (new_body, after_body) = reload t body before in let rec fixpoint () = let at_exits = - List.map (fun (nfail, _) -> (nfail, get_reload_at_exit nfail)) + List.map (fun (nfail, _) -> (nfail, get_reload_at_exit t nfail)) handlers in let res = List.map2 (fun (nfail', handler) (nfail, at_exit) -> assert(nfail = nfail'); - reload handler at_exit) + reload t handler at_exit) handlers at_exits in match rec_flag with | Cmm.Nonrecursive -> @@ -220,7 +244,7 @@ let rec reload i before = List.for_all2 (fun (nfail', _) (nfail, at_exit) -> assert(nfail = nfail'); - Reg.Set.equal at_exit (get_reload_at_exit nfail)) + Reg.Set.equal at_exit (get_reload_at_exit t nfail)) handlers at_exits in if equal then res @@ -230,7 +254,7 @@ let rec reload i before = let union = List.fold_left (fun acc (_, after_handler) -> Reg.Set.union acc after_handler) after_body res in - let (new_next, finally) = reload i.next union in + let (new_next, finally) = reload t i.next union in let new_handlers = List.map2 (fun (nfail, _) (new_handler, _) -> nfail, new_handler) handlers res in @@ -238,23 +262,24 @@ let rec reload i before = (Icatch(rec_flag, new_handlers, new_body)) i.arg i.res new_next, finally) | Iexit nfail -> - set_reload_at_exit nfail - (Reg.Set.union (get_reload_at_exit nfail) before); + set_reload_at_exit t nfail + (Reg.Set.union (get_reload_at_exit t nfail) before); (i, Reg.Set.empty) | Itrywith(body, handler) -> - let (new_body, after_body) = reload body before in + let (new_body, after_body) = reload t body before in (* All registers live at the beginning of the handler are destroyed, except the exception bucket *) let before_handler = Reg.Set.remove Proc.loc_exn_bucket (Reg.add_set_array handler.live handler.arg) in - let (new_handler, after_handler) = reload handler before_handler in + let (new_handler, after_handler) = reload t handler before_handler in let (new_next, finally) = - reload i.next (Reg.Set.union after_body after_handler) in + reload t i.next (Reg.Set.union after_body after_handler) in (instr_cons (Itrywith(new_body, new_handler)) i.arg i.res new_next, finally) | Iraise _ -> - (add_reloads (Reg.inter_set_array before i.arg) i, Reg.Set.empty) + (add_reloads + t.spill_env (Reg.inter_set_array before i.arg) i, Reg.Set.empty) (* Second pass: add spill instructions based on what we've decided to reload. That is, any register that may be reloaded in the future must be spilled @@ -271,97 +296,91 @@ let rec reload i before = NB ter: is it the same thing for catch bodies ? *) -let spill_at_exit : (int, Reg.Set.t) Hashtbl.t = Hashtbl.create 20 - -let get_spill_at_exit k = - match Hashtbl.find_opt spill_at_exit k with +let get_spill_at_exit t k = + match Hashtbl.find_opt t.spill_at_exit k with | None -> Reg.Set.empty | Some s -> s -let set_spill_at_exit k s = - Hashtbl.replace spill_at_exit k s +let set_spill_at_exit t k s = + Hashtbl.replace t.spill_at_exit k s -let spill_at_raise = ref Reg.Set.empty -let inside_loop = ref false -and inside_arm = ref false -and inside_catch = ref false - -let add_spills regset i = +let add_spills t regset i = Reg.Set.fold - (fun r i -> instr_cons (Iop Ispill) [|r|] [|spill_reg r|] i) + (fun r i -> instr_cons (Iop Ispill) [|r|] [|spill_reg t r|] i) regset i -let rec spill i finally = +let rec spill (t : spill_data) i finally = match i.desc with Iend -> (i, finally) | Ireturn | Iop(Itailcall_ind) | Iop(Itailcall_imm _) -> (i, Reg.Set.empty) | Iop Ireload -> - let (new_next, after) = spill i.next finally in + let (new_next, after) = spill t i.next finally in let before1 = Reg.diff_set_array after i.res in (instr_cons i.desc i.arg i.res new_next, Reg.add_set_array before1 i.res) | Iop op -> - let (new_next, after) = spill i.next finally in + let (new_next, after) = spill t i.next finally in let before1 = Reg.diff_set_array after i.res in let before = if operation_can_raise op - then Reg.Set.union before1 !spill_at_raise + then Reg.Set.union before1 t.spill_at_raise else before1 in (instr_cons_debug i.desc i.arg i.res i.dbg - (add_spills (Reg.inter_set_array after i.res) new_next), + (add_spills t.spill_env (Reg.inter_set_array after i.res) new_next), before) | Iifthenelse(test, ifso, ifnot) -> - let (new_next, at_join) = spill i.next finally in - let (new_ifso, before_ifso) = spill ifso at_join in - let (new_ifnot, before_ifnot) = spill ifnot at_join in + let (new_next, at_join) = spill t i.next finally in + let (new_ifso, before_ifso) = spill t ifso at_join in + let (new_ifnot, before_ifnot) = spill t ifnot at_join in if - !inside_loop || !inside_arm || !inside_catch + t.inside_arm || t.inside_catch then (instr_cons (Iifthenelse(test, new_ifso, new_ifnot)) i.arg i.res new_next, Reg.Set.union before_ifso before_ifnot) else begin - let destroyed = List.assq i !destroyed_at_fork in + let destroyed = List.assq i t.destroyed_at_fork in let spill_ifso_branch = Reg.Set.diff (Reg.Set.diff before_ifso before_ifnot) destroyed and spill_ifnot_branch = Reg.Set.diff (Reg.Set.diff before_ifnot before_ifso) destroyed in (instr_cons - (Iifthenelse(test, add_spills spill_ifso_branch new_ifso, - add_spills spill_ifnot_branch new_ifnot)) + (Iifthenelse(test, + add_spills t.spill_env spill_ifso_branch new_ifso, + add_spills t.spill_env spill_ifnot_branch new_ifnot)) i.arg i.res new_next, Reg.Set.diff (Reg.Set.diff (Reg.Set.union before_ifso before_ifnot) spill_ifso_branch) spill_ifnot_branch) end | Iswitch(index, cases) -> - let (new_next, at_join) = spill i.next finally in - let saved_inside_arm = !inside_arm in - inside_arm := true ; + let (new_next, at_join) = spill t i.next finally in + let saved_inside_arm = t.inside_arm in + t.inside_arm <- true ; let before = ref Reg.Set.empty in let new_cases = Array.map (fun c -> - let (new_c, before_c) = spill c at_join in + let (new_c, before_c) = spill t c at_join in before := Reg.Set.union !before before_c; new_c) cases in - inside_arm := saved_inside_arm ; + t.inside_arm <- saved_inside_arm ; (instr_cons (Iswitch(index, new_cases)) i.arg i.res new_next, !before) | Icatch(rec_flag, handlers, body) -> - let (new_next, at_join) = spill i.next finally in - let saved_inside_catch = !inside_catch in - inside_catch := true ; + let (new_next, at_join) = spill t i.next finally in + let saved_inside_catch = t.inside_catch in + t.inside_catch <- true ; let rec fixpoint () = let res = - List.map (fun (_, handler) -> spill handler at_join) handlers in + List.map (fun (_, handler) -> spill t handler at_join) handlers in let update changed (k, _handler) (_new_handler, before_handler) = - if Reg.Set.equal before_handler (get_spill_at_exit k) + if Reg.Set.equal before_handler (get_spill_at_exit t k) then changed - else (set_spill_at_exit k before_handler; true) in + else (set_spill_at_exit t k before_handler; true) in let changed = List.fold_left2 update false handlers res in if rec_flag = Cmm.Recursive && changed @@ -369,8 +388,8 @@ let rec spill i finally = else res in let res = fixpoint () in - inside_catch := saved_inside_catch ; - let (new_body, before) = spill body at_join in + t.inside_catch <- saved_inside_catch ; + let (new_body, before) = spill t body at_join in let new_handlers = List.map2 (fun (nfail, _) (new_handler, _) -> (nfail, new_handler)) handlers res in @@ -378,42 +397,30 @@ let rec spill i finally = i.arg i.res new_next, before) | Iexit nfail -> - (i, get_spill_at_exit nfail) + (i, get_spill_at_exit t nfail) | Itrywith(body, handler) -> - let (new_next, at_join) = spill i.next finally in - let (new_handler, before_handler) = spill handler at_join in - let saved_spill_at_raise = !spill_at_raise in - spill_at_raise := before_handler; - let (new_body, before_body) = spill body at_join in - spill_at_raise := saved_spill_at_raise; + let (new_next, at_join) = spill t i.next finally in + let (new_handler, before_handler) = spill t handler at_join in + let saved_spill_at_raise = t.spill_at_raise in + t.spill_at_raise <- before_handler; + let (new_body, before_body) = spill t body at_join in + t.spill_at_raise <- saved_spill_at_raise; (instr_cons (Itrywith(new_body, new_handler)) i.arg i.res new_next, before_body) | Iraise _ -> - (i, !spill_at_raise) + (i, t.spill_at_raise) (* Entry point *) -let reset () = - spill_env := Reg.Map.empty; - use_date := Reg.Map.empty; - current_date := 0; - destroyed_at_fork := []; - Hashtbl.clear reload_at_exit; - Hashtbl.clear spill_at_exit - let fundecl f = - reset (); - let (body1, _) = reload f.fun_body Reg.Set.empty in - let (body2, tospill_at_entry) = spill body1 Reg.Set.empty in + let reload_data = create_reload () in + let (body1, _) = reload reload_data f.fun_body Reg.Set.empty in + let spill_data = create_spill reload_data in + let (body2, tospill_at_entry) = spill spill_data body1 Reg.Set.empty in let new_body = - add_spills (Reg.inter_set_array tospill_at_entry f.fun_args) body2 in - reset (); - { fun_name = f.fun_name; - fun_args = f.fun_args; - fun_body = new_body; - fun_codegen_options = f.fun_codegen_options; - fun_poll = f.fun_poll; - fun_dbg = f.fun_dbg; - fun_num_stack_slots = f.fun_num_stack_slots; - fun_contains_calls = f.fun_contains_calls; - } + add_spills + spill_data.spill_env + (Reg.inter_set_array tospill_at_entry f.fun_args) + body2 + in + { f with fun_body = new_body } diff --git a/asmcomp/spill.mli b/asmcomp/spill.mli index cb1917e4..c508f660 100644 --- a/asmcomp/spill.mli +++ b/asmcomp/spill.mli @@ -17,4 +17,3 @@ before register allocation. *) val fundecl: Mach.fundecl -> Mach.fundecl -val reset : unit -> unit diff --git a/asmcomp/split.ml b/asmcomp/split.ml index 0da5d822..57981072 100644 --- a/asmcomp/split.ml +++ b/asmcomp/split.ml @@ -214,12 +214,4 @@ let fundecl f = repres_regs new_args; set_repres new_body; equiv_classes := Reg.Map.empty; - { fun_name = f.fun_name; - fun_args = new_args; - fun_body = new_body; - fun_codegen_options = f.fun_codegen_options; - fun_poll = f.fun_poll; - fun_dbg = f.fun_dbg; - fun_num_stack_slots = f.fun_num_stack_slots; - fun_contains_calls = f.fun_contains_calls; - } + { f with fun_args = new_args; fun_body = new_body } diff --git a/asmcomp/stackframe.mli b/asmcomp/stackframe.mli new file mode 100644 index 00000000..5f71fab4 --- /dev/null +++ b/asmcomp/stackframe.mli @@ -0,0 +1,21 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +val trap_handler_size : int + +val analyze : Mach.fundecl -> Stackframegen.analysis_result diff --git a/asmcomp/stackframegen.ml b/asmcomp/stackframegen.ml new file mode 100644 index 00000000..52fe8bb6 --- /dev/null +++ b/asmcomp/stackframegen.ml @@ -0,0 +1,116 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +open Mach + +type analysis_result = { + contains_nontail_calls: bool; + frame_required: bool; + extra_stack_used: int; +} + +class virtual stackframe_generic = object (self) + +(* Size of an exception handler block on the stack. + To be provided for each target. *) + +method virtual trap_handler_size : int + +(* Determine if an instruction performs a call that requires + the return address to be saved in the stack frame, and a stack frame to + be allocated. + + At a minimum, these instructions include all non-tail calls, + both to OCaml functions or to C functions. + + For exception-raising constructs, we get better stack backtraces + by treating them as non-tail calls, even if they are implemented as + tail calls. + + This method can be overriden in [Stackframe] to implement target-specific + behaviors. *) + +method is_call = function + | Iop (Icall_ind | Icall_imm _ | Iextcall _) -> true + | Iop (Ialloc _) | Iop (Ipoll _) -> true + (* caml_alloc*, caml_garbage_collection (incl. polls) *) + | Iop (Iintop (Icheckbound) | Iintop_imm(Icheckbound, _)) -> !Clflags.debug + (* caml_ml_array_bound_error *) + | Iraise Lambda.Raise_notrace -> false + | Iraise (Lambda.Raise_regular | Lambda.Raise_reraise) -> true + (* caml_stash_backtrace; having a frame gives better stack backtrace *) + | Itrywith _ -> true + | _ -> false + +(* Determine if a function requires a stack frame to be allocated. + This is the case if it contains calls, but also if it allocates + variables on the stack. + + This method can be overriden in [Stackframe] to implement target-specific + behaviors. *) + +method frame_required f contains_calls = + contains_calls || + f.fun_num_stack_slots.(0) > 0 || f.fun_num_stack_slots.(1) > 0 + +(* Analyze the body of a Mach function to determine + - whether it contains non-tail-calls to OCaml functions + - whether it requires allocating a stack frame and saving the return address + - how much extra stack space is needed for exception handlers + and for passing parameters to C function on stack. +*) + +method analyze f = + let contains_nontail_calls = ref false + and contains_calls = ref false + and extra_space = ref 0 in + let rec analyze sp i = + if sp > !extra_space then extra_space := sp; + contains_calls := !contains_calls || self#is_call i.desc; + match i.desc with + | Iend -> () + | Iop (Istackoffset delta) -> + analyze (sp + delta) i.next + | Iop (Itailcall_ind | Itailcall_imm _) -> () + | Iop (Icall_ind | Icall_imm _) -> + contains_nontail_calls := true; + analyze sp i.next + | Iop _ -> + analyze sp i.next + | Ireturn -> () + | Iifthenelse(_, ifso, ifnot) -> + analyze sp ifso; analyze sp ifnot; analyze sp i.next + | Iswitch(_, branches) -> + Array.iter (analyze sp) branches; analyze sp i.next + | Icatch(_, handlers, body) -> + List.iter (fun (_, handler) -> analyze sp handler) handlers; + analyze sp body; + analyze sp i.next + | Iexit _ -> () + | Itrywith(body, handler) -> + analyze (sp + self#trap_handler_size) body; + analyze sp handler; + analyze sp i.next + | Iraise _ -> () + in + analyze 0 f.fun_body; + { contains_nontail_calls = !contains_nontail_calls; + frame_required = self#frame_required f !contains_calls; + extra_stack_used = !extra_space } + +end diff --git a/asmcomp/stackframegen.mli b/asmcomp/stackframegen.mli new file mode 100644 index 00000000..7ead1780 --- /dev/null +++ b/asmcomp/stackframegen.mli @@ -0,0 +1,46 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute the parameters needed for allocating and managing stack frames + in the Emit phase. *) + +type analysis_result = { + contains_nontail_calls: bool; + (** Whether the function contains non-tail calls to OCaml functions. + Calls to C functions don't count. + *) + frame_required: bool; + (** Whether the function must allocate a stack frame on entry, for + one of the following reasons: + - some local variables are stack-allocated + - the function needs to save its return address on the stack, e.g.: + -- it contains a non-tail call to an OCaml function + -- it calls a C function + -- it contains an allocation or a poll point + -- it performs an array bound check (on some ports) + *) + extra_stack_used: int; + (** Amount of stack space used, in bytes, + in addition to the initial stack frame. + This counts trap handlers and "outgoing" stack slots used + for parameter passing. *) +} + +class virtual stackframe_generic : object + method virtual trap_handler_size : int + method is_call : Mach.instruction_desc -> bool + method frame_required : Mach.fundecl -> bool -> bool + method analyze : Mach.fundecl -> analysis_result +end diff --git a/asmcomp/strmatch.ml b/asmcomp/strmatch.ml index 63d8407e..f92547a3 100644 --- a/asmcomp/strmatch.ml +++ b/asmcomp/strmatch.ml @@ -76,7 +76,9 @@ module Make(I:I) = struct let mk_let_cell id str ind body = let dbg = Debuginfo.none in let cell = - Cop(Cload (Word_int, Asttypes.Mutable), + Cop(Cload {memory_chunk=Word_int; + mutability=Asttypes.Mutable; + is_atomic=false}, [Cop(Cadda,[str;Cconst_int(Arch.size_int*ind, dbg)], dbg)], dbg) in Clet(id, cell, body) diff --git a/asmcomp/thread_sanitizer.ml b/asmcomp/thread_sanitizer.ml new file mode 100644 index 00000000..fa1fbf7f --- /dev/null +++ b/asmcomp/thread_sanitizer.ml @@ -0,0 +1,291 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Anmol Sahoo, Purdue University *) +(* Olivier Nicole, Tarides *) +(* Fabrice Buoro, Tarides *) +(* *) +(* Copyright 2023 Tarides *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@warning "@4"] + +open Asttypes +open Cmm +module V = Backend_var +module VP = Backend_var.With_provenance + +type read_or_write = + | Read + | Write + +let init_code () = + Cmm_helpers.return_unit Debuginfo.none + (Cop (Cextcall ("__tsan_init", typ_void, [], false), [], Debuginfo.none)) + +let bit_size memory_chunk = + match memory_chunk with + | Byte_unsigned | Byte_signed -> 8 + | Sixteen_unsigned | Sixteen_signed -> 16 + | Thirtytwo_unsigned | Thirtytwo_signed -> 32 + | Word_int | Word_val -> Sys.word_size + | Single -> 32 + | Double -> 64 + +let select_function read_or_write memory_chunk = + let bit_size = bit_size memory_chunk in + let acc_string = + match read_or_write with Read -> "read" | Write -> "write" + in + Printf.sprintf "__tsan_%s%d" acc_string (bit_size / 8) + +module TSan_memory_order = struct + (* Constants defined in the LLVM ABI *) + (*let relaxed = Cconst_int (0, Debuginfo.none)*) + (*let consume = Cconst_int (1, Debuginfo.none)*) + (*let acquire = Cconst_int (2, Debuginfo.none)*) + (*let release = Cconst_int (3, Debuginfo.none)*) + (*let acq_rel = Cconst_int (4, Debuginfo.none)*) + let seq_cst = Cconst_int (5, Debuginfo.none) +end + +let machtype_of_memory_chunk = function + | Byte_unsigned | Byte_signed | Sixteen_unsigned | Sixteen_signed + | Thirtytwo_unsigned | Thirtytwo_signed | Word_int -> + typ_int + | Word_val -> typ_val + | Single | Double -> typ_float + +let dbg_none = Debuginfo.none + +let wrap_entry_exit expr = + let call_entry = + Cmm_helpers.return_unit dbg_none + (Cop + ( Cextcall ("__tsan_func_entry", typ_void, [], false), + [Creturn_addr], + dbg_none )) + in + let call_exit = + Cmm_helpers.return_unit dbg_none + (Cop (Cextcall ("__tsan_func_exit", typ_void, [], false), [], dbg_none)) + in + (* [is_tail] is true when the expression is in tail position *) + let rec insert_call_exit is_tail = function + | Clet (v, e, body) -> Clet (v, e, insert_call_exit is_tail body) + | Clet_mut (v, typ, e, body) -> + Clet_mut (v, typ, e, insert_call_exit is_tail body) + | Cphantom_let (v, e, body) -> + Cphantom_let (v, e, insert_call_exit is_tail body) + | Cassign (v, body) -> Cassign (v, insert_call_exit is_tail body) + | Csequence (op1, op2) -> Csequence (op1, insert_call_exit is_tail op2) + | Cifthenelse (cond, t_dbg, t, f_dbg, f, dbg_none) -> + Cifthenelse + ( cond, + t_dbg, + insert_call_exit is_tail t, + f_dbg, + insert_call_exit is_tail f, + dbg_none ) + | Cswitch (e, cases, handlers, dbg_none) -> + let handlers = + Array.map + (fun (handler, handler_dbg) -> + insert_call_exit is_tail handler, handler_dbg) + handlers + in + Cswitch (e, cases, handlers, dbg_none) + | Ccatch (isrec, handlers, next) -> + let handlers = + List.map + (fun (id, args, e, dbg_none) -> + id, args, insert_call_exit is_tail e, dbg_none) + handlers + in + Ccatch (isrec, handlers, insert_call_exit is_tail next) + | Cexit (ex, args) -> + (* A [Cexit] is like a goto to the beginning of a handler. Therefore, it + is never the last thing evaluated in a function; there is no need to + insert a call to [__tsan_func_exit] here. *) + Cexit (ex, args) + | Ctrywith (e, v, handler, dbg_none) -> + (* We need to insert a call to [__tsan_func_exit] at the tail of both the + body and the handler. If this is a [try ... with] in tail position, + then the body expression is not in tail position (as code is inserted + at the end of it to pop the exception handler), the handler expression + is. *) + Ctrywith + ( insert_call_exit false e, + v, + insert_call_exit is_tail handler, + dbg_none ) + | Cop (Capply fn, args, dbg_none) when is_tail -> + (* This is a tail call. We insert the call to [__tsan_func_exit] right + before the call, but after evaluating the arguments (from right to + left). *) + let fun_ = List.hd args in + let args = + List.map (fun e -> VP.create (V.create_local "arg"), e) (List.tl args) + in + let tail = + Csequence + ( call_exit, + Cop + ( Capply fn, + fun_ :: List.map (fun (id, _) -> Cvar (VP.var id)) args, + dbg_none ) ) + in + List.fold_left (fun acc (id, arg) -> Clet (id, arg, acc)) tail args + | ( Cop + ( ( Calloc | Caddi | Csubi | Cmuli | Cdivi | Cmodi | Cand | Cmulhi + | Cor | Cxor | Clsl | Clsr | Casr | Caddv | Cadda | Cnegf | Cabsf + | Caddf | Csubf | Cmulf | Cdivf | Cfloatofint | Cintoffloat + | Ccheckbound | Copaque | Cdls_get | Capply _ | Cextcall _ + | Cload _ | Cstore _ | Ccmpi _ | Ccmpa _ | Ccmpf _ | Craise _ ), + _, + _ ) + | Cconst_int (_, _) + | Cconst_natint (_, _) + | Cconst_float (_, _) + | Cconst_symbol (_, _) + | Cvar _ | Ctuple _ | Creturn_addr ) as expr -> + let id = VP.create (V.create_local "res") in + Clet (id, expr, Csequence (call_exit, Cvar (VP.var id))) + in + Csequence (call_entry, insert_call_exit true expr) + +let instrument body = + let rec aux = function + | Cop + ( (Cload { memory_chunk; mutability = Mutable; is_atomic = false } as + load_op), + [loc], + dbginfo ) -> + (* Emit a call to [__tsan_readN] before the load *) + let loc_id = VP.create (V.create_local "loc") in + let loc_exp = Cvar (VP.var loc_id) in + Clet + ( loc_id, + loc, + Csequence + ( Cmm_helpers.return_unit dbg_none + (Cop + ( Cextcall + (select_function Read memory_chunk, typ_void, [], false), + [loc_exp], + dbg_none )), + Cop (load_op, [loc_exp], dbginfo) ) ) + | Cop + ( Cload { memory_chunk; mutability = Mutable; is_atomic = true }, + [loc], + dbginfo ) -> + (* Replace the atomic load with a call to [__tsan_atomicN_load] *) + let ret_typ = machtype_of_memory_chunk memory_chunk in + Cop + ( Cextcall + ( Printf.sprintf "__tsan_atomic%d_load" (bit_size memory_chunk), + ret_typ, + [], + false ), + [loc; TSan_memory_order.seq_cst], + dbginfo ) + | Cop + (Cload { memory_chunk = _; mutability = Mutable; is_atomic = _ }, _, _) + -> + invalid_arg "instrument: wrong number of arguments for operation Cload" + | Cop (Cstore (memory_chunk, init_or_assn), [loc; v], dbginfo) as c -> ( + (* Emit a call to [__tsan_writeN] before the store *) + match init_or_assn with + | Assignment -> + (* We make sure that 1. the location and value expressions are + evaluated before the call to TSan, and 2. the location expression is + evaluated right before that call, as it might not be a valid OCaml + value (e.g. a pointer into an array), in which case it must not be + live across a function call or allocation point. *) + let loc_id = VP.create (V.create_local "loc") in + let loc_exp = Cvar (VP.var loc_id) in + let v_id = VP.create (V.create_local "newval") in + let v_exp = Cvar (VP.var v_id) in + let args = [loc_exp; v_exp] in + Clet + ( v_id, + v, + Clet + ( loc_id, + loc, + Csequence + ( Cmm_helpers.return_unit dbg_none + (Cop + ( Cextcall + ( select_function Write memory_chunk, + typ_void, + [], + false ), + [loc_exp], + dbg_none )), + Cop (Cstore (memory_chunk, init_or_assn), args, dbginfo) ) + ) ) + | Heap_initialization | Root_initialization -> + (* Initializing writes need not be instrumented as they are always + domain-safe *) + c) + | Cop (Cstore _, _, _) -> + invalid_arg "instrument: wrong number of arguments for operation Cstore" + | Cop ((Cload { mutability = Immutable; _ } as op), es, dbg_none) -> + (* Loads of immutable location require no instrumentation *) + Cop (op, List.map aux es, dbg_none) + | Cop (Craise _, _, _) as raise -> + (* Call a routine that will call [__tsan_func_exit] for every function + about to be exited due to the exception *) + Csequence + (Cmm_helpers.return_unit dbg_none + (Cop (Capply typ_int, + [Cconst_symbol ("caml_tsan_exit_on_raise_asm", dbg_none); + Cconst_int (0, dbg_none)], + dbg_none)), + raise) + | Cop + ( (( Capply _ | Caddi | Calloc | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi + | Cand | Cor | Cxor | Clsl | Clsr | Casr | Caddv | Cadda | Cnegf + | Cabsf | Caddf | Csubf | Cmulf | Cdivf | Cfloatofint | Cintoffloat + | Ccheckbound | Copaque | Cdls_get | Cextcall _ | Ccmpi _ | Ccmpa _ + | Ccmpf _ ) as op), + es, + dbg_none ) -> + Cop (op, List.map aux es, dbg_none) + | Clet (v, e, body) -> Clet (v, aux e, aux body) + | Clet_mut (v, k, e, body) -> Clet_mut (v, k, aux e, aux body) + | Cphantom_let (v, e, body) -> Cphantom_let (v, e, aux body) + | Cassign (v, e) -> Cassign (v, aux e) + | Ctuple es -> Ctuple (List.map aux es) + | Csequence (c1, c2) -> Csequence (aux c1, aux c2) + | Ccatch (isrec, cases, body) -> + let cases = + List.map + (fun (nfail, ids, e, dbg_none) -> nfail, ids, aux e, dbg_none) + cases + in + Ccatch (isrec, cases, aux body) + | Cexit (ex, args) -> Cexit (ex, List.map aux args) + | Cifthenelse (cond, t_dbg, t, f_dbg, f, dbg_none) -> + Cifthenelse (aux cond, t_dbg, aux t, f_dbg, aux f, dbg_none) + | Ctrywith (e, ex, handler, dbg_none) -> + Ctrywith (aux e, ex, aux handler, dbg_none) + | Cswitch (e, cases, handlers, dbg_none) -> + let handlers = + handlers + |> Array.map (fun (handler, handler_dbg) -> aux handler, handler_dbg) + in + Cswitch (aux e, cases, handlers, dbg_none) + (* no instrumentation *) + | ( Cconst_int _ | Cconst_natint _ | Cconst_float _ | Cconst_symbol _ + | Cvar _ | Creturn_addr ) as c -> + c + in + body |> aux |> wrap_entry_exit diff --git a/asmcomp/thread_sanitizer.mli b/asmcomp/thread_sanitizer.mli new file mode 100644 index 00000000..b034229b --- /dev/null +++ b/asmcomp/thread_sanitizer.mli @@ -0,0 +1,52 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Anmol Sahoo, Purdue University *) +(* Olivier Nicole, Tarides *) +(* Fabrice Buoro, Tarides *) +(* *) +(* Copyright 2023 Tarides *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Instrumentation of memory accesses to use ThreadSanitizer (TSan) for data + race detection. This module contains an instrumentation pass on Cmm, where + most of the instrumentation happens. + + TSan requires to instrument all memory accesses (to mutable data), thread + spawning and joining, mutex operations, and all such events that are + relevant for parallelism. Thread and mutex operations are instrumented by + the C compiler via the runtime. Instrumentation calls are FFI (C) calls. + + TSan also requires to instrument the entry and exit of each function. TSan + records function entries and exits along with other events in a history in + to be able to print backtraces of an event (memory access, mutex + creation...) when needed. + + In addition to this static instrumentation, we must let TSan know when a + function is exited due to an exception or when performing effect, or + re-entered when resuming a continuation. This dynamic instrumentation is + performed by dedicated runtime functions in runtime/tsan.c. These functions + are called from the assembly chunks of the runtime. + *) + +(** Instrumentation of a {!Cmm.expression}: instrument memory accesses, and + surround the expression by external calls to [__tsan_func_entry] and + [__tsan_func_exit]. If the expression tail is a function call, then + [__tsan_func_exit] is inserted before that call. *) +val instrument : Cmm.expression -> Cmm.expression + +(** Surround an expression by external calls to [__tsan_func_entry] and + [__tsan_func_exit]. If the expression tail is a function call, then + [__tsan_func_exit] is inserted before that call. *) +val wrap_entry_exit : Cmm.expression -> Cmm.expression + +(** Call to [__tsan_init], which should be called at least once in the compiled + program, before other [__tsan_*] API functions. [__tsan_init] is + idempotent, i.e. can be called more than once without consequences. *) +val init_code : unit -> Cmm.expression diff --git a/asmcomp/x86_ast.mli b/asmcomp/x86_ast.mli index 96d87beb..7cd2817f 100644 --- a/asmcomp/x86_ast.mli +++ b/asmcomp/x86_ast.mli @@ -25,6 +25,16 @@ type condition = | S | NS (* sign *) | P | NP (* parity *) +type float_condition = + | EQf + | LTf + | LEf + | UNORDf + | NEQf + | NLTf + | NLEf + | ORDf + type rounding = | RoundUp | RoundDown @@ -104,6 +114,7 @@ type instruction = | CDQ | CMOV of condition * arg * arg | CMP of arg * arg + | CMPSD of float_condition * arg * arg | COMISD of arg * arg | CQO | CVTSD2SI of arg * arg @@ -157,6 +168,7 @@ type instruction = | LEAVE | MOV of arg * arg | MOVAPD of arg * arg + | MOVD of arg * arg | MOVLPD of arg * arg | MOVSD of arg * arg | MOVSS of arg * arg @@ -208,6 +220,10 @@ type asm_line = | Cfi_adjust_cfa_offset of int | Cfi_endproc | Cfi_startproc + | Cfi_remember_state + | Cfi_restore_state + | Cfi_def_cfa_register of string + | Cfi_def_cfa_offset of int | File of int * string (* (file_num, file_name) *) | Indirect_symbol of string | Loc of int * int * int (* (file_num, line, col) *) diff --git a/asmcomp/x86_dsl.ml b/asmcomp/x86_dsl.ml index e647f66c..18afddaa 100644 --- a/asmcomp/x86_dsl.ml +++ b/asmcomp/x86_dsl.ml @@ -48,8 +48,11 @@ let ah = Reg8H AH let cl = Reg8L RCX let ax = Reg16 RAX let rax = Reg64 RAX +let rbx = Reg64 RBX +let rdx = Reg64 RDX let r10 = Reg64 R10 let r11 = Reg64 R11 +let r12 = Reg64 R12 let r13 = Reg64 R13 let r14 = Reg64 R14 let r15 = Reg64 R15 @@ -84,6 +87,10 @@ module D = struct let cfi_adjust_cfa_offset n = directive (Cfi_adjust_cfa_offset n) let cfi_endproc () = directive Cfi_endproc let cfi_startproc () = directive Cfi_startproc + let cfi_remember_state () = directive Cfi_remember_state + let cfi_restore_state () = directive Cfi_restore_state + let cfi_def_cfa_register reg = directive (Cfi_def_cfa_register reg) + let cfi_def_cfa_offset n = directive (Cfi_def_cfa_offset n) let comment s = directive (Comment s) let data () = section [ ".data" ] None [] let extrn s ptr = directive (External (s, ptr)) @@ -114,6 +121,7 @@ module I = struct let call x = emit (CALL x) let cdq () = emit CDQ let cmp x y = emit (CMP (x, y)) + let cmpsd cond x y = emit (CMPSD (cond, x, y)) let comisd x y = emit (COMISD (x, y)) let cqo () = emit CQO let cvtsd2ss x y = emit (CVTSD2SS (x, y)) @@ -173,12 +181,14 @@ module I = struct let lea x y = emit (LEA (x, y)) let mov x y = emit (MOV (x, y)) let movapd x y = emit (MOVAPD (x, y)) + let movd x y = emit (MOVD (x, y)) let movsd x y = emit (MOVSD (x, y)) let movss x y = emit (MOVSS (x, y)) let movsx x y = emit (MOVSX (x, y)) let movsxd x y = emit (MOVSXD (x, y)) let movzx x y = emit (MOVZX (x, y)) let mulsd x y = emit (MULSD (x, y)) + let neg x = emit (NEG x) let nop () = emit NOP let or_ x y = emit (OR (x, y)) let pop x = emit (POP x) diff --git a/asmcomp/x86_dsl.mli b/asmcomp/x86_dsl.mli index 080331fc..e6b11d31 100644 --- a/asmcomp/x86_dsl.mli +++ b/asmcomp/x86_dsl.mli @@ -37,8 +37,11 @@ val ah: arg val cl: arg val ax: arg val rax: arg +val rbx: arg +val rdx: arg val r10: arg val r11: arg +val r12: arg val r13: arg val r14: arg val r15: arg @@ -74,6 +77,10 @@ module D : sig val cfi_adjust_cfa_offset: int -> unit val cfi_endproc: unit -> unit val cfi_startproc: unit -> unit + val cfi_remember_state: unit -> unit + val cfi_restore_state: unit -> unit + val cfi_def_cfa_register: string -> unit + val cfi_def_cfa_offset: int -> unit val comment: string -> unit val data: unit -> unit val extrn: string -> data_type -> unit @@ -107,6 +114,7 @@ module I : sig val call: arg -> unit val cdq: unit -> unit val cmp: arg -> arg -> unit + val cmpsd : float_condition -> arg -> arg -> unit val comisd: arg -> arg -> unit val cqo: unit -> unit val cvtsd2ss: arg -> arg -> unit @@ -166,12 +174,14 @@ module I : sig val lea: arg -> arg -> unit val mov: arg -> arg -> unit val movapd: arg -> arg -> unit + val movd: arg -> arg -> unit val movsd: arg -> arg -> unit val movss: arg -> arg -> unit val movsx: arg -> arg -> unit val movsxd: arg -> arg -> unit val movzx: arg -> arg -> unit val mulsd: arg -> arg -> unit + val neg : arg -> unit val nop: unit -> unit val or_: arg -> arg -> unit val pop: arg -> unit diff --git a/asmcomp/x86_gas.ml b/asmcomp/x86_gas.ml index 6d2363a7..de110149 100644 --- a/asmcomp/x86_gas.ml +++ b/asmcomp/x86_gas.ml @@ -124,6 +124,8 @@ let print_instr b = function | CDQ -> i0 b "cltd" | CMOV (c, arg1, arg2) -> i2 b ("cmov" ^ string_of_condition c) arg1 arg2 | CMP (arg1, arg2) -> i2_s b "cmp" arg1 arg2 + | CMPSD (c, arg1, arg2) -> + i2 b ("cmp" ^ string_of_float_condition c ^ "sd") arg1 arg2 | COMISD (arg1, arg2) -> i2 b "comisd" arg1 arg2 | CQO -> i0 b "cqto" | CVTSD2SI (arg1, arg2) -> i2 b "cvtsd2si" arg1 arg2 @@ -189,6 +191,7 @@ let print_instr b = function i2 b "movabsq" arg1 arg2 | MOV (arg1, arg2) -> i2_s b "mov" arg1 arg2 | MOVAPD (arg1, arg2) -> i2 b "movapd" arg1 arg2 + | MOVD (arg1, arg2) -> i2 b "movd" arg1 arg2 | MOVLPD (arg1, arg2) -> i2 b "movlpd" arg1 arg2 | MOVSD (arg1, arg2) -> i2 b "movsd" arg1 arg2 | MOVSS (arg1, arg2) -> i2 b "movss" arg1 arg2 @@ -279,6 +282,10 @@ let print_line b = function | Cfi_adjust_cfa_offset n -> bprintf b "\t.cfi_adjust_cfa_offset %d" n | Cfi_endproc -> bprintf b "\t.cfi_endproc" | Cfi_startproc -> bprintf b "\t.cfi_startproc" + | Cfi_remember_state -> bprintf b "\t.cfi_remember_state" + | Cfi_restore_state -> bprintf b "\t.cfi_restore_state" + | Cfi_def_cfa_register reg -> bprintf b "\t.cfi_def_cfa_register %%%s" reg + | Cfi_def_cfa_offset n -> bprintf b "\t.cfi_def_cfa_offset %d" n | File (file_num, file_name) -> bprintf b "\t.file\t%d\t\"%s\"" file_num (X86_proc.string_of_string_literal file_name) diff --git a/asmcomp/x86_masm.ml b/asmcomp/x86_masm.ml index eb010b8b..10668b02 100644 --- a/asmcomp/x86_masm.ml +++ b/asmcomp/x86_masm.ml @@ -124,6 +124,8 @@ let print_instr b = function | CDQ -> i0 b "cdq" | CMOV (c, arg1, arg2) -> i2 b ("cmov" ^ string_of_condition c) arg1 arg2 | CMP (arg1, arg2) -> i2 b "cmp" arg1 arg2 + | CMPSD (c, arg1, arg2) -> + i2 b ("cmp" ^ string_of_float_condition c ^ "sd") arg1 arg2 | COMISD (arg1, arg2) -> i2 b "comisd" arg1 arg2 | CQO -> i0 b "cqo" | CVTSD2SI (arg1, arg2) -> i2 b "cvtsd2si" arg1 arg2 @@ -184,6 +186,7 @@ let print_instr b = function i2 b "mov" arg1 (Reg32 r) | MOV (arg1, arg2) -> i2 b "mov" arg1 arg2 | MOVAPD (arg1, arg2) -> i2 b "movapd" arg1 arg2 + | MOVD (arg1, arg2) -> i2 b "movd" arg1 arg2 | MOVLPD (arg1, arg2) -> i2 b "movlpd" arg1 arg2 | MOVSD (arg1, arg2) -> i2 b "movsd" arg1 arg2 | MOVSS (arg1, arg2) -> i2 b "movss" arg1 arg2 @@ -239,6 +242,10 @@ let print_line b = function | Cfi_adjust_cfa_offset _ | Cfi_endproc | Cfi_startproc + | Cfi_def_cfa_register _ + | Cfi_def_cfa_offset _ + | Cfi_remember_state + | Cfi_restore_state | File _ | Indirect_symbol _ | Loc _ diff --git a/asmcomp/x86_proc.ml b/asmcomp/x86_proc.ml index 7003160e..b7abe4d3 100644 --- a/asmcomp/x86_proc.ml +++ b/asmcomp/x86_proc.ml @@ -16,40 +16,33 @@ open X86_ast type system = - (* 32 bits and 64 bits *) | S_macosx | S_gnu | S_cygwin - - (* 32 bits only *) | S_solaris - | S_win32 - | S_linux_elf - | S_bsd_elf | S_beos - | S_mingw - - (* 64 bits only *) | S_win64 | S_linux | S_mingw64 + | S_freebsd + | S_netbsd + | S_openbsd | S_unknown let system = match Config.system with | "macosx" -> S_macosx - | "solaris" -> S_solaris - | "win32" -> S_win32 - | "linux_elf" -> S_linux_elf - | "bsd_elf" -> S_bsd_elf - | "beos" -> S_beos | "gnu" -> S_gnu | "cygwin" -> S_cygwin - | "mingw" -> S_mingw - | "mingw64" -> S_mingw64 + | "solaris" -> S_solaris + | "beos" -> S_beos | "win64" -> S_win64 | "linux" -> S_linux + | "mingw64" -> S_mingw64 + | "freebsd" -> S_freebsd + | "netbsd" -> S_netbsd + | "openbsd" -> S_openbsd | _ -> S_unknown @@ -78,20 +71,25 @@ let string_of_string_literal s = Buffer.contents b let string_of_symbol prefix s = - let spec = ref false in - for i = 0 to String.length s - 1 do - match String.unsafe_get s i with - | 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' -> () - | _ -> spec := true; - done; - if not !spec then if prefix = "" then s else prefix ^ s + let is_special_char = function + | 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' -> false + | c -> c <> Compilenv.symbol_separator + in + let spec = String.exists is_special_char s in + if not spec then if prefix = "" then s else prefix ^ s else let b = Buffer.create (String.length s + 10) in Buffer.add_string b prefix; String.iter - (function - | ('A'..'Z' | 'a'..'z' | '0'..'9' | '_') as c -> Buffer.add_char b c - | c -> Printf.bprintf b "$%02x" (Char.code c) + (fun c -> + (* FIXME: using $ to prefix escaped characters can make names + ambiguous if the symbol separator is also set to $; a different + escape prefix should be used in this case, if this ever causes + problems in the real world. *) + if is_special_char c then + Printf.bprintf b "$%02x" (Char.code c) + else + Buffer.add_char b c ) s; Buffer.contents b @@ -213,6 +211,16 @@ let string_of_condition = function | NO -> "no" | O -> "o" +let string_of_float_condition = function + | EQf -> "eq" + | LTf -> "lt" + | LEf -> "le" + | UNORDf -> "unord" + | NEQf -> "neq" + | NLTf -> "nlt" + | NLEf -> "nle" + | ORDf -> "ord" + let string_of_rounding = function | RoundDown -> "roundsd.down" | RoundUp -> "roundsd.up" @@ -227,7 +235,7 @@ let with_internal_assembler assemble k = (* Which asm conventions to use *) let masm = match system with - | S_win32 | S_win64 -> true + | S_win64 -> true | _ -> false let use_plt = diff --git a/asmcomp/x86_proc.mli b/asmcomp/x86_proc.mli index fbc0cead..c7f9a5e5 100644 --- a/asmcomp/x86_proc.mli +++ b/asmcomp/x86_proc.mli @@ -28,6 +28,7 @@ val string_of_reg64: reg64 -> string val string_of_registerf: registerf -> string val string_of_string_literal: string -> string val string_of_condition: condition -> string +val string_of_float_condition: float_condition -> string val string_of_symbol: (*prefix*) string -> string -> string val string_of_rounding: rounding -> string val buf_bytes_directive: @@ -57,23 +58,17 @@ val assemble_file: (*infile*) string -> (*outfile*) string -> (*retcode*) int (** System detection *) type system = - (* 32 bits and 64 bits *) | S_macosx | S_gnu | S_cygwin - - (* 32 bits only *) | S_solaris - | S_win32 - | S_linux_elf - | S_bsd_elf | S_beos - | S_mingw - - (* 64 bits only *) | S_win64 | S_linux | S_mingw64 + | S_freebsd + | S_netbsd + | S_openbsd | S_unknown diff --git a/boot/menhir/parser.ml b/boot/menhir/parser.ml index c7df79b4..c31d5f98 100644 --- a/boot/menhir/parser.ml +++ b/boot/menhir/parser.ml @@ -16,7 +16,7 @@ module MenhirBasics = struct | VAL | UNDERSCORE | UIDENT of ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) # 22 "parsing/parser.ml" ) @@ -28,7 +28,7 @@ module MenhirBasics = struct | THEN | STRUCT | STRING of ( -# 743 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * Location.t * string option) # 34 "parsing/parser.ml" ) @@ -41,12 +41,12 @@ module MenhirBasics = struct | RBRACKET | RBRACE | QUOTED_STRING_ITEM of ( -# 747 "parsing/parser.mly" +# 820 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) # 47 "parsing/parser.ml" ) | QUOTED_STRING_EXPR of ( -# 745 "parsing/parser.mly" +# 818 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) # 52 "parsing/parser.ml" ) @@ -54,7 +54,7 @@ module MenhirBasics = struct | QUESTION | PRIVATE | PREFIXOP of ( -# 729 "parsing/parser.mly" +# 802 "parsing/parser.mly" (string) # 60 "parsing/parser.ml" ) @@ -64,7 +64,7 @@ module MenhirBasics = struct | PERCENT | OR | OPTLABEL of ( -# 722 "parsing/parser.mly" +# 795 "parsing/parser.mly" (string) # 70 "parsing/parser.ml" ) @@ -82,12 +82,12 @@ module MenhirBasics = struct | MATCH | LPAREN | LIDENT of ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) # 88 "parsing/parser.ml" ) | LETOP of ( -# 687 "parsing/parser.mly" +# 760 "parsing/parser.mly" (string) # 93 "parsing/parser.ml" ) @@ -107,39 +107,39 @@ module MenhirBasics = struct | LBRACE | LAZY | LABEL of ( -# 692 "parsing/parser.mly" +# 765 "parsing/parser.mly" (string) # 113 "parsing/parser.ml" ) | INT of ( -# 691 "parsing/parser.mly" +# 764 "parsing/parser.mly" (string * char option) # 118 "parsing/parser.ml" ) | INITIALIZER | INHERIT | INFIXOP4 of ( -# 685 "parsing/parser.mly" +# 758 "parsing/parser.mly" (string) # 125 "parsing/parser.ml" ) | INFIXOP3 of ( -# 684 "parsing/parser.mly" +# 757 "parsing/parser.mly" (string) # 130 "parsing/parser.ml" ) | INFIXOP2 of ( -# 683 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) # 135 "parsing/parser.ml" ) | INFIXOP1 of ( -# 682 "parsing/parser.mly" +# 755 "parsing/parser.mly" (string) # 140 "parsing/parser.ml" ) | INFIXOP0 of ( -# 681 "parsing/parser.mly" +# 754 "parsing/parser.mly" (string) # 145 "parsing/parser.ml" ) @@ -147,7 +147,7 @@ module MenhirBasics = struct | IN | IF | HASHOP of ( -# 740 "parsing/parser.mly" +# 813 "parsing/parser.mly" (string) # 153 "parsing/parser.ml" ) @@ -160,7 +160,7 @@ module MenhirBasics = struct | FUN | FOR | FLOAT of ( -# 670 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * char option) # 166 "parsing/parser.ml" ) @@ -174,7 +174,7 @@ module MenhirBasics = struct | ELSE | DOWNTO | DOTOP of ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) # 180 "parsing/parser.ml" ) @@ -182,14 +182,14 @@ module MenhirBasics = struct | DOT | DONE | DOCSTRING of ( -# 764 "parsing/parser.mly" +# 837 "parsing/parser.mly" (Docstrings.docstring) # 188 "parsing/parser.ml" ) | DO | CONSTRAINT | COMMENT of ( -# 763 "parsing/parser.mly" +# 836 "parsing/parser.mly" (string * Location.t) # 195 "parsing/parser.ml" ) @@ -200,7 +200,7 @@ module MenhirBasics = struct | COLON | CLASS | CHAR of ( -# 650 "parsing/parser.mly" +# 723 "parsing/parser.mly" (char) # 206 "parsing/parser.ml" ) @@ -213,7 +213,7 @@ module MenhirBasics = struct | ASSERT | AS | ANDOP of ( -# 688 "parsing/parser.mly" +# 761 "parsing/parser.mly" (string) # 219 "parsing/parser.ml" ) @@ -231,6 +231,9 @@ let _eRR = # 25 "parsing/parser.mly" +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] + open Asttypes open Longident open Parsetree @@ -305,13 +308,13 @@ let push_loc x acc = let reloc_pat ~loc x = { x with ppat_loc = make_loc loc; - ppat_loc_stack = push_loc x.ppat_loc x.ppat_loc_stack };; + ppat_loc_stack = push_loc x.ppat_loc x.ppat_loc_stack } let reloc_exp ~loc x = { x with pexp_loc = make_loc loc; - pexp_loc_stack = push_loc x.pexp_loc x.pexp_loc_stack };; + pexp_loc_stack = push_loc x.pexp_loc x.pexp_loc_stack } let reloc_typ ~loc x = { x with ptyp_loc = make_loc loc; - ptyp_loc_stack = push_loc x.ptyp_loc x.ptyp_loc_stack };; + ptyp_loc_stack = push_loc x.ptyp_loc x.ptyp_loc_stack } let mkexpvar ~loc (name : string) = mkexp ~loc (Pexp_ident(mkrhs (Lident name) loc)) @@ -371,6 +374,10 @@ let mkuplus ~oploc name arg = | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) +let mk_attr ~loc name payload = + Builtin_attributes.(register_attr Parser name); + Attr.mk ~loc name payload + (* TODO define an abstraction boundary between locations-as-pairs and locations-as-Location.t; it should be clear when we move from one world to the other *) @@ -413,11 +420,13 @@ let rec mktailpat nilloc = let open Location in function let mkstrexp e attrs = { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } -let mkexp_constraint ~loc e (t1, t2) = - match t1, t2 with - | Some t, None -> mkexp ~loc (Pexp_constraint(e, t)) - | _, Some t -> mkexp ~loc (Pexp_coerce(e, t1, t)) - | None, None -> assert false +let mkexp_desc_constraint e t = + match t with + | Pconstraint t -> Pexp_constraint(e, t) + | Pcoerce(t1, t2) -> Pexp_coerce(e, t1, t2) + +let mkexp_constraint ~loc e t = + mkexp ~loc (mkexp_desc_constraint e t) let mkexp_opt_constraint ~loc e = function | None -> e @@ -437,6 +446,9 @@ let unclosed opening_name opening_loc closing_name closing_loc = let expecting loc nonterm = raise Syntaxerr.(Error(Expecting(make_loc loc, nonterm))) +let removed_string_set loc = + raise(Syntaxerr.Error(Syntaxerr.Removed_string_set(make_loc loc))) + (* Using the function [not_expecting] in a semantic action means that this syntactic form is recognized by the parser but is in fact incorrect. This idiom is used in a few places to produce ad hoc syntax error messages. *) @@ -511,7 +523,9 @@ let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if !Clflags.unsafe then "unsafe_" ^ opname else opname in let prefix = match paren_kind with | Paren -> Lident "Array" - | Bracket -> Lident "String" + | Bracket -> + if assign then removed_string_set loc + else Lident "String" | Brace -> let submodule_name = match n with | One -> "Array1" @@ -708,6 +722,7 @@ let extra_rhs_core_type ct ~pos = type let_binding = { lb_pattern: pattern; lb_expression: expression; + lb_constraint: value_constraint option; lb_is_pun: bool; lb_attributes: attributes; lb_docs: docs Lazy.t; @@ -719,10 +734,11 @@ type let_bindings = lbs_rec: rec_flag; lbs_extension: string Asttypes.loc option } -let mklb first ~loc (p, e, is_pun) attrs = +let mklb first ~loc (p, e, typ, is_pun) attrs = { lb_pattern = p; lb_expression = e; + lb_constraint=typ; lb_is_pun = is_pun; lb_attributes = attrs; lb_docs = symbol_docs_lazy loc; @@ -750,7 +766,7 @@ let val_of_let_bindings ~loc lbs = Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes ~docs:(Lazy.force lb.lb_docs) ~text:(Lazy.force lb.lb_text) - lb.lb_pattern lb.lb_expression) + ?value_constraint:lb.lb_constraint lb.lb_pattern lb.lb_expression) lbs.lbs_bindings in let str = mkstr ~loc (Pstr_value(lbs.lbs_rec, List.rev bindings)) in @@ -763,7 +779,7 @@ let expr_of_let_bindings ~loc lbs body = List.map (fun lb -> Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - lb.lb_pattern lb.lb_expression) + ?value_constraint:lb.lb_constraint lb.lb_pattern lb.lb_expression) lbs.lbs_bindings in mkexp_attrs ~loc (Pexp_let(lbs.lbs_rec, List.rev bindings, body)) @@ -774,13 +790,71 @@ let class_of_let_bindings ~loc lbs body = List.map (fun lb -> Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - lb.lb_pattern lb.lb_expression) + ?value_constraint:lb.lb_constraint lb.lb_pattern lb.lb_expression) lbs.lbs_bindings in (* Our use of let_bindings(no_ext) guarantees the following: *) assert (lbs.lbs_extension = None); mkclass ~loc (Pcl_let (lbs.lbs_rec, List.rev bindings, body)) +(* If all the parameters are [Pparam_newtype x], then return [Some xs] where + [xs] is the corresponding list of values [x]. This function is optimized for + the common case, where a list of parameters contains at least one value + parameter. +*) +let all_params_as_newtypes = + let is_newtype { pparam_desc; _ } = + match pparam_desc with + | Pparam_newtype _ -> true + | Pparam_val _ -> false + in + let as_newtype { pparam_desc; pparam_loc } = + match pparam_desc with + | Pparam_newtype x -> Some (x, pparam_loc) + | Pparam_val _ -> None + in + fun params -> + if List.for_all is_newtype params + then Some (List.filter_map as_newtype params) + else None + +(* Given a construct [fun (type a b c) : t -> e], we construct + [Pexp_newtype(a, Pexp_newtype(b, Pexp_newtype(c, Pexp_constraint(e, t))))] + rather than a [Pexp_function]. +*) +let mkghost_newtype_function_body newtypes body_constraint body = + let wrapped_body = + match body_constraint with + | None -> body + | Some body_constraint -> + let loc = { body.pexp_loc with loc_ghost = true } in + Exp.mk (mkexp_desc_constraint body body_constraint) ~loc + in + let expr = + List.fold_right + (fun (newtype, newtype_loc) e -> + (* Mints a ghost location that approximates the newtype's "extent" as + being from the start of the newtype param until the end of the + function body. + *) + let loc = (newtype_loc.Location.loc_start, body.pexp_loc.loc_end) in + ghexp (Pexp_newtype (newtype, e)) ~loc) + newtypes + wrapped_body + in + expr.pexp_desc + +let mkfunction params body_constraint body = + match body with + | Pfunction_cases _ -> Pexp_function (params, body_constraint, body) + | Pfunction_body body_exp -> + (* If all the params are newtypes, then we don't create a function node; + we create nested newtype nodes. *) + match all_params_as_newtypes params with + | None -> Pexp_function (params, body_constraint, body) + | Some newtypes -> + mkghost_newtype_function_body newtypes body_constraint body_exp + (* Alternatively, we could keep the generic module type in the Parsetree and extract the package type during type-checking. In that case, the assertions below should be turned into explicit checks. *) @@ -792,11 +866,11 @@ let package_type_of_module_type pmty = | Pwith_type (lid, ptyp) -> let loc = ptyp.ptype_loc in if ptyp.ptype_params <> [] then - err loc "parametrized types are not supported"; + err loc Syntaxerr.Parameterized_types; if ptyp.ptype_cstrs <> [] then - err loc "constrained types are not supported"; + err loc Syntaxerr.Constrained_types; if ptyp.ptype_private <> Public then - err loc "private types are not supported"; + err loc Syntaxerr.Private_types; (* restrictions below are checked by the 'with_constraint' rule *) assert (ptyp.ptype_kind = Ptype_abstract); @@ -808,15 +882,14 @@ let package_type_of_module_type pmty = in (lid, ty) | _ -> - err pmty.pmty_loc "only 'with type t =' constraints are supported" + err pmty.pmty_loc Not_with_type in match pmty with | {pmty_desc = Pmty_ident lid} -> (lid, [], pmty.pmty_attributes) | {pmty_desc = Pmty_with({pmty_desc = Pmty_ident lid}, cstrs)} -> (lid, List.map map_cstr cstrs, pmty.pmty_attributes) | _ -> - err pmty.pmty_loc - "only module type identifier and 'with type' constraints are supported" + err pmty.pmty_loc Neither_identifier_nor_with_type let mk_directive_arg ~loc k = { pdira_desc = k; @@ -831,7 +904,7 @@ let mk_directive ~loc name arg = } -# 835 "parsing/parser.ml" +# 908 "parsing/parser.ml" module Tables = struct @@ -1341,22 +1414,22 @@ module Tables = struct Obj.repr () and default_reduction = - (16, "\000\000\000\000\000\000\003\004\003\003\003\002\003\001\003\000\002\211\002\255\002\254\002\253\002\252\002\251\002\250\002\249\002\248\002\247\002\246\002\245\002\244\002\243\002\242\002\241\002\240\002\239\002\238\002\237\002\210\002\236\002\235\002\234\002\233\002\232\002\231\002\230\002\229\002\228\002\227\002\226\002\225\002\224\002\223\002\222\002\221\002\220\002\219\002\218\002\217\002\216\002\215\002\214\002\213\002\212\000\000\000\000\000,\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003I\001\175\001\154\001\172\001\171\001\170\001\176\001\180\000\000\003J\001\174\001\173\001\155\001\178\001\169\001\168\001\167\001\166\001\165\001\163\001\179\001\177\000\000\000\000\000\000\000\222\000\000\000\000\001\158\000\000\000\000\000\000\001\160\000\000\000\000\000\000\001\162\001\184\001\181\001\164\001\156\001\182\001\183\000\000\003H\003G\003K\000\000\000\000\000\026\001H\000\188\000\000\000\218\000\219\000\000\000\000\000\000\001\206\001\205\000\000\000\000\000\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003D\000\000\003?\000\000\000\000\003A\000\000\003C\000\000\003@\003B\000\000\003:\000\000\0039\0035\002<\000\000\0038\000\000\002=\000\000\000\000\000\000\000\000\000l\000\000\000\000\000j\000\000\000\000\001F\000\000\000\000\000\000\000\000\000\000\000\184\001T\000\000\000\000\000\000\000\000\000\000\000\000\002'\000\000\000\000\000\000\000\000\000\000\000\000\000g\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002p\002q\000\000\002n\002o\000\000\000\000\000\000\000\000\000\000\001k\001j\000\000\002\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\017\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\000\000\001U\001S\001[\000C\002\145\000\000\001\024\003\029\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000\000\000\233\000\000\002s\002r\000\000\000\000\000\000\001\188\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000\001Z\000\000\001Y\000\000\001I\001X\000\000\001G\000d\000 \000\000\000\000\001\131\000\027\000\000\000\000\000\000\000\000\0034\000*\000\000\000\000\000!\000\028\000\000\000\000\000\000\000\201\000\000\000\000\000\000\000\203\002F\0028\000\000\000$\000\000\0029\000\000\000\000\001\185\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\003\030\000\000\003\031\000\000\000{\000\000\000\000\000#\000\000\000\000\000\000\000%\000\000\000&\000\000\000(\000\000\000\000\000)\002.\002-\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\002\197\000h\000k\000f\002\186\003L\002\187\001\249\002\189\000\000\000\000\002\194\002m\002\196\000\000\000\000\000\000\002\203\002\200\000\000\000\000\000\000\001\245\001\231\000\000\000\000\000\000\000\000\001\235\000\000\001\230\000\000\001\248\002\209\000\000\000\000\000\000\000\000\001\133\000\000\000\000\001\247\002\195\000s\000\000\000\000\000r\000\000\002\204\002\188\000\000\001\241\000\000\000\000\002\207\000\000\002\206\002\205\000\000\001\237\000\000\000\000\001\233\001\232\001\246\001\238\000\000\000q\000\000\002\202\002\201\000\000\002\199\000\000\002u\002t\000\000\000\000\002P\002\198\000\000\000\000\000\000\000\000\001\190\0013\0014\002w\000\000\002x\002v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\244\000\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0037\000\000\000\000\000\000\000\000\000\000\001t\000\000\000\000\000\000\001Q\001{\001P\001x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\000\000\000\000\0027\002*\002)\000\000\001s\001r\000\000\000\205\000\000\000\000\001d\000\000\000\000\001h\000\000\001\210\001\209\000\000\000\000\001\208\001\207\001g\001e\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\151\001V\002\156\002\154\000\000\000\000\000\000\002\167\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\000\000\002\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\242\002\003\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0031\000\000\000\000\0030\000\000\000\000\000\000\000\000\000\237\000\236\000\000\000\238\000\000\000\000\000\000\002\164\000\000\000\000\000\000\002\133\002|\000\000\000\000\000\000\000\000\003M\002\166\002\153\002\152\000\000\000\000\000\169\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\168\000\000\000\000\000\000\002W\002V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\246\000\000\003\007\000\000\000\000\000\195\000\194\000\247\000\000\003\b\003\t\000\000\000\000\000\000\000\000\000\000\000\000\000\253\000\000\000\000\0020\000\000\000\000\000\000\000\252\000\000\000\000\000\251\000\250\000\000\000\000\000\000\000\000\000\255\000\000\000\000\000\254\000\000\001\244\000\000\000\000\002\000\000\000\000\000\002\002\000\000\000\000\001\254\001\253\001\251\001\252\000\000\000\000\000\000\000\248\000\000\000\000\001\030\000\020\001\001\000\000\000\000\000\000\002\135\002~\000\000\000\000\002\134\002}\000\000\000\000\000\000\000\000\002\137\002\128\000\000\000\000\002J\000\000\000\000\002\141\002\132\000\000\000\000\002\139\002\130\002\160\000\000\000\000\000\000\000\000\000\000\002\136\000\000\000\000\000\000\000\000\000\000\002\140\000\000\000\000\000\000\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002,\002+\000\167\000\000\002\127\000\000\000\000\002\131\000\000\000\000\002\129\000\000\000|\000}\000\000\000\000\000\000\000\000\000\140\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\198\000\199\000\133\000\000\000\132\000\000\000\000\0016\000\000\0017\0015\0022\000\000\000\000\0023\0021\000\000\000\000\000\000\000\000\000\000\001\t\000\000\000\000\001\n\000\000\000\000\000\170\000\000\001\012\001\011\000\000\000\000\002\168\002\161\000\000\002\177\000\000\002\178\002\176\000\000\002\182\000\000\002\183\002\181\000\000\000\000\002\163\002\162\000\000\000\000\000\000\002\026\000\000\001\204\000\000\000\000\000\000\002S\002\025\000\000\002\172\002\171\000\000\000\000\000\000\001W\000\000\002\143\000\000\002\144\002\142\000\000\002\170\002\169\000\000\000\000\000\000\002M\002\159\000\000\002\158\002\157\000\000\002\180\002\179\000\130\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\001^\000\000\000\000\000\000\000m\000\000\000\000\000n\000\000\000\000\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\227\000\000\000\000\000w\000\000\000\230\000\228\000\000\000\000\000\000\000\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000o\000\000\000\000\002\024\000\000\000\000\001\000\001\202\000\000\000\240\000\241\001\007\000\000\002\175\000\000\002\174\002\173\002\155\000\000\000\000\000\000\000\000\002\146\000\000\002\148\000\000\002\147\000\000\002z\002y\000\000\002{\000\000\000\000\000\000\000\000\001\217\001\211\000\000\001\216\000\000\001\214\000\000\001\215\000\000\001\212\000\000\000\000\001\213\000\000\001\151\000\000\000\000\000\000\001\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\003\022\000\000\000\000\003\021\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\000\000\000\000\000\000\000\000\003\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\135\000\000\002\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\006\000\000\000\000\002X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001z\000\000\000\000\000\000\000\000\001m\000\000\001l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022\002f\000\000\000\000\000\000\002d\000\000\000\000\000\000\002c\000\000\001`\000\000\000\000\000\000\000\000\002j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003U\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\001\130\000\000\001\129\000\000\000\000\000\000\000\000\000J\000\000\000\000\000\000\002\022\000\000\002\021\000\000\000\000\000\000\000\000\000K\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000Q\000O\000\000\000T\000\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000\000\000\000\000\000\000\000L\000\000\000S\000R\000\000\000M\000N\000\000\001'\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\018\000c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\000b\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\002k\002\\\000\000\002b\002]\002i\002h\002g\002e\001!\000\000\002Z\000\000\000\000\000\000\000\000\000\000\002'\000\000\000\000\001\026\002^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\146\001\142\000\000\000\000\000\000\000\212\000\000\000\000\002\029\002'\000\000\000\000\001\028\002\027\002\028\000\000\000\000\000\000\000\000\000\000\001\149\001\145\001\141\000\000\000\000\000\213\000\000\000\000\001\148\001\144\001\140\001\138\002_\002[\002l\001 \002\006\002Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003P\000\000\000\000\003R\000\000\0008\000\000\000\000\003X\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003O\000\000\000\000\003Q\000\000\000\000\000\000\002\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001E\000\000\000\000\001C\001A\000\000\0009\000\000\000\000\003[\000\000\003Z\000\000\000\000\000\000\001?\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001D\000\000\000\000\001B\001@\000\000\000\000\000\000\000;\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Z\000\000\000\000\000\000\000\000\000\000\000\000\0005\000\000\000\000\000Y\000\000\0003\001\004\000\000\000B\000/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000\000\000X\000W\000\000\000\000\000]\000\\\000\000\000\000\001\192\000\000\0007\000\000\000\000\000\000\0006\000\000\000\000\000\000\000:\000\000\000[\000^\000\000\000<\000=\000\000\001)\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\003\025\003\016\000\000\000\000\003\020\003\005\003\015\003\024\003\023\001%\000\000\000\000\003\r\000\000\003\017\003\014\003\026\002\005\000\000\000\000\003\011\000\000\000\191\003\n\000\000\000\000\000\224\000\000\000\000\001$\001#\000\000\001b\001a\000\000\000\000\002\208\002\191\000\000\000D\000\000\000\000\000E\000\000\000\000\002\150\002\149\000\000\000\000\000\136\000\000\000\000\002\014\000\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\003\019\002\"\002#\002\030\002 \002\031\002!\000\000\000\000\000\000\000\190\000\000\000\000\002'\000\000\000\216\000\000\000\000\000\000\000\000\003\018\000\000\000\187\000\000\000\000\000\000\000\000\001>\0018\000\000\000\000\0019\000\031\000\000\000\030\000\000\000\000\000\202\000\000\000\000\000\000\000\"\000\029\000\000\000\000\000\000\000\023\000\000\000\000\000\000\000\000\001\147\001\143\000\000\001\139\0033\000\000\002'\000\000\000\215\000\000\000\000\000\000\000\000\002a\002&\002$\002%\000\000\000\000\000\000\002'\000\000\000\214\000\000\000\000\000\000\000\000\002`\000\000\001o\001n\000\000\000\024\000\000\003S\000\000\000-\000\000\000\000\000\000\000\000\000\139\000\000\000\220\000\001\000\000\000\000\000\223\000\002\000\000\000\000\000\000\001K\001L\000\003\000\000\000\000\000\000\000\000\001N\001O\001M\000\021\001J\000\022\000\000\001\218\000\000\000\004\000\000\001\219\000\000\000\005\000\000\001\220\000\000\000\000\001\221\000\006\000\000\000\007\000\000\001\222\000\000\000\b\000\000\001\223\000\000\000\t\000\000\001\224\000\000\000\n\000\000\001\225\000\000\000\011\000\000\001\226\000\000\000\000\001\227\000\012\000\000\000\000\001\228\000\r\000\000\000\000\000\000\000\000\000\000\003&\003!\003\"\003%\003#\000\000\003*\000\014\000\000\003)\000\000\001+\000\000\000\000\003'\000\000\003(\000\000\000\000\000\000\000\000\001/\0010\000\000\000\000\001.\001-\000\015\000\000\000\000\000\000\003F\000\000\003E") + (16, "\000\000\000\000\000\000\003I\003H\003G\003F\003E\003\024\003D\003C\003B\003A\003@\003?\003>\003=\003<\003;\003:\0039\0038\0037\0036\0035\0034\0033\0032\003\023\0031\0030\003/\003.\003-\003,\003+\003*\003)\003(\003'\003&\003%\003$\003#\003\"\003!\003 \003\031\003\030\003\029\003\028\003\027\003\026\003\025\000\000\000\000\000\"\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\001\227\001\206\001\224\001\223\001\222\001\228\001\232\000\000\003\142\001\226\001\225\001\207\001\230\001\221\001\220\001\219\001\218\001\217\001\215\001\231\001\229\000\000\000\000\000\000\001\011\000\000\000\000\001\210\000\000\000\000\000\000\001\212\000\000\000\000\000\000\001\214\001\236\001\233\001\216\001\208\001\234\001\235\000\000\003\140\003\139\003\143\000\000\000\000\000 \001u\000\132\000\000\001\007\001\b\000\000\000\000\000\000\002\005\002\004\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\001\160\000\000\000\000\000\000\000\000\000\000\003\136\000\000\003\131\000\000\000\000\003\133\000\000\003\135\000\000\003\132\003\134\000\000\003~\000\000\003}\003y\002|\000\000\003|\000\000\002}\000\000\000\000\000\000\000\000\000c\000\000\000\000\000a\000\000\000\000\001s\000\000\000\000\000\000\000\000\000\000\000\237\001\129\000\000\000\000\000\000\000\000\000\000\000\000\002e\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\000\000\003\005\000\000\002\181\002\182\000\000\002\179\002\180\000\000\000\000\000\000\000\000\000\000\001\155\001\154\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\000\017\000\016\000\000\000\000\000\000\000\000\000\000\001\146\000\000\000\000\000\000\000\000\000\000\000\000\001\127\000\000\000\000\001\130\001\128\001\136\000:\002\214\000\000\001E\003a\003`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000`\000\000\001\022\000\000\002\184\002\183\000\000\000\000\000\000\001\240\000\000\000\000\000|\000\000\000\000\000\000\000\000\000\000\001\135\000\000\001\134\000\000\001v\001\133\000\000\001t\000[\000\027\000\000\000\000\001\181\000\024\000\000\000\000\000\000\000\000\000s\000\000\000\000\000\000\000\000\000\000\000\000\003x\000\246\000t\000\135\000u\000\023\000\000\000\000\000\000\000\000\000\028\000\025\000\018\000\000\000v\000r\000\000\000\000\000\000\000\019\000\030\000\000\000\248\002\138\002x\000\000\000y\000\000\002y\000\000\000\000\001\237\000\000\000\000\000\000\000\000\003b\000\000\003c\000\000\000\000\000x\000\000\000\000\000\000\000z\000\000\000{\000\000\000}\000\000\000\000\000~\002n\002m\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000\000\003\n\000_\000b\000]\002\255\003\144\003\000\0027\003\002\000\000\000\000\003\007\002\178\003\t\000\000\000\000\000\000\003\016\003\r\000\000\000\000\000\000\0023\002%\000\000\000\000\000\000\000\000\002)\000\000\002$\000\000\0026\003\022\000\000\000\000\000\000\000\000\001\183\000\000\000\000\0025\003\b\000j\000\000\000\000\000i\000\000\003\017\003\001\000\000\002/\000\000\000\000\003\020\000\000\003\019\003\018\000\000\002+\000\000\000\000\002'\002&\0024\002,\000\000\000h\000\000\003\015\003\014\000\000\003\012\000\000\002\186\002\185\000\000\000\000\002\151\003\011\000\000\000\000\000\000\000\000\001\242\001`\001a\002\188\000\000\002\189\002\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\166\000\000\000\000\000\000\000\000\000\000\000\000\003\167\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003{\000\000\000\000\000\000\000\000\000\000\001\165\000\000\000\000\000\000\001~\001\173\001}\001\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002v\000\000\000\000\002w\002j\002i\000\000\000\000\001\164\001\163\000\000\000\250\000\000\000\000\001\148\000\000\000\000\001\152\000\000\002\t\002\b\000\000\000\000\002\007\002\006\001\151\001\149\000\000\001\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\220\001\131\002\225\002\223\000\000\000\000\000\000\002\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\254\000\000\002\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002B\000\000\000\000\000\000\000\000\000\000\000\000\001\031\002A\001 \000\000\000\000\000\000\000\238\000\000\001#\001$\000\000\000\239\002h\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002s\002q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\207\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\003t\000\000\000\000\000\000\000\000\001\026\001\025\000\000\001\027\000\000\000\000\000\000\002\233\000\000\000\000\000\000\002\202\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\002\235\002\222\002\221\000\000\000\000\000\210\002\155\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\236\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\208\000\000\000\000\000\000\000\244\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003L\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\002p\000\000\000\000\000\000\001)\000\000\000\000\001(\001'\000\000\002\003\000\000\000\000\000\140\003M\002g\000\000\000\000\000\000\000\000\001,\000\000\000\000\001+\000\000\0022\000\000\000\000\002>\000\000\000\000\002@\000\000\000\000\002<\002;\0029\002:\000\000\000\000\000\000\001%\000\000\000\000\001K\000\020\001.\000\000\000\000\000\000\002\204\002\195\000\000\000\000\002\203\002\194\000\000\000\000\000\000\000\000\002\206\002\197\000\000\000\000\002\144\000\000\000\000\002\210\002\201\000\000\000\000\002\208\002\199\002\229\000\000\000\000\000\000\000\000\000\000\002\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002k\000\206\002\145\000\000\002\196\000\000\000\000\002\200\000\000\000\000\002\198\000\000\000\127\000\128\000\000\000\000\000\000\000\000\000\159\000\158\000\000\000\146\000\000\000\000\001c\000\000\001d\001b\002r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0016\000\000\000\000\0017\000\000\000\000\000\211\000\000\0019\0018\000\000\000\000\002\237\002\230\000\000\002\246\000\000\002\247\002\245\000\000\002\251\000\000\002\252\002\250\000\000\000\000\002\232\002\231\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\002\154\002W\000\000\002\241\002\240\000\000\000\000\000\000\001\132\000\000\002\212\000\000\002\213\002\211\000\000\002\239\002\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\148\002\228\000\000\002\227\002\226\000\000\002\249\002\248\000\145\000\000\000\000\000\000\000\000\000\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\000\000\000\000\000\000\000\000\000\142\000\000\001\140\000\000\000\000\000\000\000d\000\000\000\000\000e\000\000\000\000\000\000\000\000\001\175\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000n\000\000\001\019\001\017\000\000\000\000\000\000\000\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\143\000f\000\000\000\000\002V\000\000\000\000\001-\002\001\000\000\001\029\001\030\0014\000\000\000\000\000\000\000\000\000\000\002\244\000\000\002\243\002\242\002\224\000\000\000\000\000\000\000\000\002\215\000\000\002\217\000\000\002\216\000\000\002\191\002\190\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\023\002\011\000\000\002\021\000\000\002\017\000\000\002\019\000\000\002\r\000\000\000\000\002\015\000\000\002\022\002\n\000\000\002\020\000\000\002\016\000\000\002\018\000\000\002\012\000\000\000\000\002\014\000\000\001\203\000\000\000\000\000\000\001\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\171\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001A\003Z\000\000\000\000\003Y\000\000\000\000\000\000\000\000\000\000\002G\000\000\000\000\000\000\000\000\000\000\000\000\003_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\185\000\000\002M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003K\000\000\000\000\002\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\205\000\000\000\000\000\000\001\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\172\000\000\000\000\000\000\000\000\001\157\000\000\001\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001C\002\171\000\000\000\000\001\142\000\000\002\169\000\000\000\000\000\000\002\168\000\000\000\000\001\143\000\000\000\000\000\000\000\000\002\175\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\153\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\000\000\001\180\000\000\001\179\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\002T\000\000\002S\000\000\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000H\000F\000\000\000K\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000J\000I\000\000\000D\000E\000\000\001T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001?\000Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000W\000\000\000Y\000X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001=\002\176\002\161\000\000\002\167\002\162\002\174\002\173\002\172\002\170\001N\000\000\002\159\000\000\000\000\000\000\000\000\000\000\002e\000\000\000\000\001G\002\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\196\001\192\000\000\000\000\000\000\001\001\000\000\000\000\002[\002e\000\000\000\000\001I\002Y\002Z\000\000\000\000\000\000\000\000\000\000\001\199\001\195\001\191\000\000\000\000\001\002\000\000\000\000\001\198\001\194\001\190\001\188\002\164\002\160\002\177\001M\002D\002\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\148\000\000\000\000\003\150\000\000\000/\000\000\000\000\003\156\000\000\003\155\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\003\149\000\000\000\000\000\000\002O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000\000\000\000\001p\001n\000\000\0000\000\000\000\000\003\159\000\000\003\158\000\000\000\000\000\000\001l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\000\000\001o\001m\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\000\000\000\000\000\000\000\000\000\000\000\000\000,\000\000\000\000\000P\000\000\000*\0011\000\000\0009\000&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001/\000\000\000O\000N\000\000\000\000\000T\000S\000\000\000\000\001\244\000\000\000.\000\000\000\000\000\000\000-\000\000\000\000\000\000\0001\000\000\000R\000U\000\000\0003\0004\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\000\0007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001;\003]\003T\000\000\000\000\003X\003J\003S\003\\\003[\001R\000\000\000\000\003Q\000\000\003U\003R\003^\002C\000\000\000\000\003O\000#\003N\000\000\000\000\000\136\000\000\001\r\000\000\000\000\001Q\001P\000\000\001\145\001\144\000\000\000\000\003\021\003\004\000\000\000;\000\000\000\000\000<\000\000\000\000\002\219\002\218\000\000\000\000\000\149\000\000\000\000\002L\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\003W\002`\002a\002\\\002^\002]\002_\000\000\000\000\000\000\000\134\000\000\000\000\002e\000\000\001\005\000\000\000\000\000\000\000\000\003V\000\000\000\131\000\000\000\000\000\000\000\000\001k\001e\000\000\000\000\001f\001\201\000\000\001\200\000\000\000\000\000\247\000\000\000\000\000\000\000\029\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\197\001\193\000\000\001\189\003w\000\000\002e\000\000\001\004\000\000\000\000\000\000\000\000\002\166\002d\002b\002c\000\000\000\000\000\000\002e\000\000\001\003\000\000\000\000\000\000\000\000\002\165\000\000\001\159\001\158\000\000\000w\000\000\003\151\000\000\000$\000\000\000\000\000\000\000\000\000\157\000\156\000\000\001\t\000\001\000\000\000\000\001\012\000\002\000\000\000\000\000\000\001x\001y\000\003\000\000\000\000\000\000\000\000\001{\001|\001z\000\021\001w\000\022\000\000\002\024\000\000\000\004\000\000\002\025\000\000\000\005\000\000\002\026\000\000\000\000\002\027\000\006\000\000\000\007\000\000\002\028\000\000\000\b\000\000\002\029\000\000\000\t\000\000\002\030\000\000\000\n\000\000\002\031\000\000\000\011\000\000\002 \000\000\000\000\002!\000\012\000\000\000\000\002\"\000\r\000\000\000\000\000\000\000\000\000\000\003j\003e\003f\003i\003g\000\000\003n\000\014\000\000\003m\000\000\001X\000\000\000\000\003k\000\000\003l\000\000\000\000\000\000\000\000\001\\\001]\000\000\000\000\001[\001Z\000\015\000\000\000\000\000\000\003\138\000\000\003\137") and error = - (124, "'\225 \197\138\173\2433\208\020\015\228\000\003\142\0026\016\004\\(\223\018}\000@\248\000\000\024\224}\246D\b/\227P\000L\028\030\227\139\002\131@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235f\245\155\175\2437\252\149\031\226\017\007\158\007\223d@\130\2545\000\004\193\193\2388\176(4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241'\208\004\015\128\000\001\142\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\000\000\000\000\004\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\016(\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\128\179\160\b2R\028\012\025 v\017\"\017@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\002\012\\ \000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@@ \193\004\000\000\016\000\000\000\000\000\016\004\004\000\002\012\016@\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\003 \004\132\128 \128\b \002\020\000\016\000b\000\002\000\bH\002\b\000\130\000!\000\001\000\006 \000 \000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000$\128\004\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\000!\128\001\000\007`\017 \004\003 \000x\016\000\197\194\128\001\000\128 \000\016\bH\002(\000\194\t!\192\001\016\006a\016a\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\007\001\000\012\\(\000\016\b\002\000\001\000\003\000\bp\016 \197\194\000\001\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\187\128\b2R\028\012\017 v\001f\017`0\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\018\000\002\000\000\000\001\000\016\000\000\000@\000\000\001 \000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\0000\000\002H\000L\000\000\b\000\000\000\000\000\128\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\002\128\193#\144\000\001\128\000\001\140\b@\000\b\004\000(!@\192\000\000 \016\000\000\132\000\000\128\000\002\130\020\012\000\000\002\001\000\000\b@\000\b\000\000(!\000\192\000\000 \016\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\136G\224,\229\"\211\227!\176@\025,\184\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\131\000\000\000@\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\167\225 \197\138\173\2437\208\020\015\226\000\003\142\n~\018\012X\170\2233=\001@\254 \0008\224\167\225\"\197\138\173\2433\208\020\015\230\000\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@@\000\129\004\000\000\016\000\000\000\b\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\005\002\000@\000\000\129\000\000\000\016\000\000\000\000\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235w\253\155\239\247\255\252\157?\230!\003\158@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\n6\024\132~*\223R=>b\249\004\001\154\235\129!\bD\002\128\193#\144\000\001\128\000\001\140\0026\016\004X(\223\018=\000@\248\000\000\028\224\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\026\000\000\020@\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\003\000\002p\016\000\197\194\000\001\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\004\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\022\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\011\184\000\131!!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000@\000\000@\000\002\000\000\000\001\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\002\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000 \000\000\000\017 \000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\020\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\001\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\016@\003!\000@\192\004\193&\144\001\001\128\000\001\004\0002\016\004\b\000L\018i\000\016\024\000\000\016@\003!\000@\128\004\193\"\144\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\027P\144\020\193&\176\001\001\148 mU\000\000\016\000\b\000@\000\001\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\145\181\t\001L\018o\000\016\027A\006\213P\001\000\000\000\000\000\128\"\128\000\000\000\000\000\000\b2\016\132\b\000L\018-\000\016\026\000\000\144@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\027\000\000\016\000\004\000\000\000\020\000LQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147!\027@\128\020\193&\208\001\001\180\000MU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\017\180\b\001L\018m\000\016\027@\004\213P\131\161\136G\224,\229\"\211\227!\176@\025,\176\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000@\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018)\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000L\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001 \000\000\000\000@\000\000\000\000\004\133\016\131!\002@\128\004\193\"\208\001\001\160\000\001D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\000\000\004\129\016\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\016\000\000\004\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193&\176\t\001\144\000M\021\128\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016D\012\130L\018m\000\016\026\000\000\016@\001\002\000@@\000\129\004\000\000\016\000\000\000\b\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\003\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\000@\b\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\0000\000\007\129\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\001@0\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\001\"\001LH\002\168\000\131\001!\192\001\016\007`\018 \004\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\018 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\003 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\017\000v\016\"\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\025\000v\000&\000@P \132\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\b\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\025\000v\016&\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224#a\002E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000@\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\001!\000D\002\128\193#\144\000\001\128\000\001\140\012\000\001\016\000\000\000\000\000\0000\001\005\002@\000#a\000E\194\141\241'\208\004\015\130\000\001\142\0026\016\004X(\223\018}\000@\248 \000\024\224#a\000E\130\141\241#\208\004\015\130\000\001\142\000\018\016\004D(\012\018y\000\000\024\000\000\024\192\001!\000D\002\128\193'\144\000\001\128\000\001\140\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\001!\000D\002\128\193#\144\000\001\128\000\001\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237s\251\255\182\031}\183\255\223\001\000\000\000\000\000\192#\128\000\000\000\000\000\000\n6\024\132~*\223R=>b\249\004\001\154\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016\132X(\223\018=\000@\248\000\000\024\224\163a\bE\130\141\241#\208\004\015\128\000\001\142\b\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\004\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016\132X(\223\018=\000@\248\000\000\024\224\163a\bE\130\141\241#\208\004\015\128\000\001\142\b2\016\132\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\004\000\000\000\016\000L\017\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\001\000\000\000\000\001\000\000@\000\000\000\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\144\005\r\000L\018k\000\016\024\000\000\016@\003)\000P\144\004\193&\176\001\001\128\000\001\004\0002\144\005\t\000L\018+\000\016\024\000\000\016@\002\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\128\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\018\016\004D(\012\018y\000\000\024\000\000\024\192\001!\000D\002\128\193'\144\000\001\128\000\001\140\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\196\148\187\131\232>\022\028\015\251`w\219~p\240\018\016\004@(\012\0189\000\000\024\000\000\024\192\197\189\187\215\250\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\250\190\215?\191\251a\247\219\127\252\240\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\025\000\000\000\000\004\000\000\000\016\000\000\000\b0\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\144\000\000\000\000@\000\000\001\000\002\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b\000\001\144\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\197\189\187\215\250\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\012\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\250\190\215?\191\251a\247\219\127\252\252IK\184>\131\225a\192\255\182\007}\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237s\251\255\182\031}\183\255\207\196\148\187\131\232>\022\028\015\251`w\219~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\127[\188~\171\255s\253\255\214\255x\183\255\239}\246D\b/\227P\000L\028\030\227\139\002\131B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\003!\000@\128\004\193&\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\135\169\"\208\152$\211>\176\025\001\246\000o\021H:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000%\004\0002\016\004\b\000L\018)\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000%\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b8\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\144\006`\000 \004\132\128\"\128\b\"\018\024\012\025\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\128\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\t\176>\000\192@@>\002\001\000\005\134\003\163a\011E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\197\189\187\215\250\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\001\000\000\000\000\000\192\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\252[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\197\189\187\215\250\190\215?\191\251a\247\219\127\253\252[\219\189\127\171\237s\251\255\150\031x\183\255\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\161\136G\224,\229\"\211\227!\176@\025,\176\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\001L\018+\000\016\024\000\000P@\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\016\000\000\000\001\004\000\000\000\016\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\001\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\1306\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129!\bD\002\128\193#\144\000\001\128\000\001\140\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016$X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\002\128\193#\144\000\001\128\000\001\140\004\000\000\000\000\000\000\000\000\0000\000\005\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000\000\000\b\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\129\000\001\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\003\000\000P\000\000\000\016\000\000\000\000\012\0028\000\000\000\000\000\000\000\192\000\017\000\000\000\000\000\000\003\000\016P$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\251`w\219~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\145\003\224\012\004\004\003\224`\016\000X 8\000\001\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000\000\000\000@\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\004\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\025\000f\000\002\000@\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000@\000\000\000\000\016\000\004\000\000\000\016\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\025\000f\000\002\000@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000@\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\b\000\000\000\004\000\0000\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\001\016\000\000\000\000@\000\002\000\000\000\000\016\000\000\017\000\000\000\000\004\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@@\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\004\000\000 \000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\162\128\b0R\028\000\025\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\128\162\128\b R\028\000\025\000f\001\002\016@0\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\0000\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\"\128\b R\028\000\025\000f\001\002\016HX\n(\000\131\005!\192\001\144\006`\016!\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\"\128\b R\028\000\025\000f\001\002\016HX\n(\000\131\005!\192\001\144\006`\016!\004\000\000\000\000\000\000\000\004\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016D\b\000L\018m\000\016\024\000\000\016@\003!\004@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\128\000\001\004\bH\002(\000\130\001!\128\001\144\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\002\000@@\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\128\000\000\b\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\248\000\b\128>\000\192@@>\002\001\000\007\194\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\t!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000@\004\000\000\000@\000\000\000\000\000\000\000\001\000\000\000@\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\007`\000 \000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\001!\192\001\016\006`\000 \000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\000\000\000\000\004\000\000\000\000\000\000\000\0000\000@\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\003!\000@\128\004\193\"\208\001\001\160\000\001\004\001\000\000 \000\000\000\000@\000\000\000\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\001\002\000@@\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\128\"\128\b\"\018\028\012\017\000v\001\002\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\018(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130!!\192\193\016\007`\016 \000\001 \000\000@\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000`\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\128\000\132\128\"\128\b \018\028\000\017\000f\016\002\016\000\016\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\bH\002(\000\130\001!\192\001\016\006`\000 \000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000x\002/\001\130\012} \001\016\006\000\000 \000\132\128\"\128\b \002\016\000\016\000f\000\002\000\000\016\000\000\004\000\000\000@\000\000\000\000\000\000\128\001\000\000\000@\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000@\004\000\000\000@\000\000\000\000\000\000\000\001\000\000\000@\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\007`\001 \000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000@\000\000\000\000@\000\000\000\000\000\000\000\003\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\001@\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \130\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \004\132\128\"\128\b \002\016\000\016\000f\000\002\000@0\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \004\132\128\"\128\b \002\016\000\016\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000\bH\002(\000\130\000!\128\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\004\002\012\016@\000\001\000\000\000\000\000\001\000@@\000 \193\004\000\000\016\000\000\000\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000@\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\194\000!\192\001\000\006`\000`\000\b\128\000\000@\000@\006\000\000\000\000\000\000\000\000\128\000\000\004\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\002\000\000$\128\004\000\000\000\128\000\000\000\000\b\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\004\000 \005\016 \000\000\000\000\000\000\000\132\000\000\128\000\002\130\020\004\000\000\002\001\000\000\b@\000\b\000\000(!\000@\000\000 \016\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000@\000\000 \016\000\000\b\000\000\000\000@@\004\000\000\000\000\000\000\000\000\128\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\192@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000@\000\000\000\000\000\000\000\b\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\002\000Q\006\000\000\000\000\000\000\000\000\016\000\004\000 \005\016 \000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\128\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\016\000\004\000 \005\016 \000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000@\000\000\000\000\004\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192A\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\016\000\004\000 \005\016 \000\000\000\000\000\000\000\132\128*\128\b\"\018\028\004\017\000v\001\002\000H@\000\b\000\000 !\192@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\`\000\016\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\004\000 \005\016 \000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\133\128\170\128\b0B\028\000\017\000v\000\006\000@0\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\020\000\000\000 \000\000\000\000@\000\000\000\000\004\001\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\bX\n\168\000\131\004!\192\001\016\007`\000 \004\133\128\170\128\b0B\028\000\017\000v\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b \002\028\000\016\000v\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\000 \004\132\128\"\128\b \002\016\000\016\000f\000\002\000@\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\000 \004\132\128\"\128\b \002\016\000\016\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\016\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\016\000\016\000f\000\002\000@ \000\002H\000L\000@\b\000\000\000\000\000\128\002\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\016\000\016\000f\000\002\000@ \000\002H\000L\000@\b\000\000\000\000\000\128\002\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\0002\000\007\129\000\012\\(\000\016\b\002\000\001\000\003\000\002p\016\000\197\194\000\001\000\000\000\000\020\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bZ\002(\000\130\t!\160\001\016\014`\016 \004\132\128\"\128\012 \018\028\000\017\000f\001\006\016HH\002(\000\130\001!\192\001\016\006`\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016!\004\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\016 \004\132\128\"\128\b \002\016\000\016\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000v\001\002\000@\018\000\000\128\000\b\000(\000\000\b\002\000\001\000\001 \000\000\000\000\128\002\128\000\000\128 \000\016\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\012 \018\028\000\017\000f\001\006\016HH\002(\000\130\001!\192\001\016\006`\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\b\128\000\000@\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\b@\000\b\000\000(!@\192\000\000 \016\000\000\132\000\000\128\000\002\130\016\012\000\000\002\001\000\000\b@\000\b\000\000 !\000\192\000\000 \016\000\000\b\000\000\000\000@@\004\000\000\000\000\000\000\b\000\000\000\000\000\004\004\000@\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\004\000\000\000\000\000\000\b\000\000\000\000\128\000\004\000@\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\003\128\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\003\128\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000 \r\016`\000\000@\000\000\000\128\001\000\000@\002\000\209\006\000\000\004\000\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\0002\016D\012\128L\018m\000\016\024\000\000\016@}\246D\b/\227P\000L\028\030\227\139\002\131@2\016D\b\000L\018m\000\016\024\000\000\016@\003!\004@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\b\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\b\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018k\000\016\024\000\000\016@\003)\000P\144\004\193\"\176\001\001\128\000\001\004\0002\144\005\t\001L\018+\000\016\024\000\000\016@\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\169*\212\026\162\211?\188\017\001\230\001\007\141HZ\146\173A\170-3\251\193\016\030`\016x\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\003!\004@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\b\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\016\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\198\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000@0\000\007\001 \r\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000@2\144\005\t\000L\018+\000\016\025\000\000P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\003!\004@\192\004\193&\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\016\006`\000 \004\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\000\006`\000 \000\132\128\"\128\b \018\016\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\144\006`\000 \004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\016\000f\000\002\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007`\002 \004\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\193\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\017@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000a\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000a\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\130\b \018\024\000\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\001!\128\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\000\0000\000\006\000\000\012\\`\000\018\000\002\000\000\000\003\000\000`\000\000\197\194\000\001 \000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000\000\000\004\000\000\000\018\000\000\000\000\000\003\000\000`\000\000\197\194\000\001 \000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003 \000x\016\000\197\194\128\001\000\128 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\000!\128\001\000\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\000!\128\001\000\007`\017 \004\003 \000x\016\000\197\194\128\001\000\128 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\000!\128\001\000\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \002\016\000\016\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\192\002\000\000\000\128\000\000\000\b\000\b\128~\002\194@\000>\"\001\004\001\130\139\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\024(\176\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\000@\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000'\225 \197\138\173\2433\208\021\015\228\000\003\142\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\005\161 \128\b \210\016\016\017\000\228\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\016\000\017\000d\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\000\001\000\006\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\225 \197\138\173\2433\208\021\015\228\000\003\142\002~\018\012X\170\2233=\001P\254@\0008\224\004\128 \128\b \018\016\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\024\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\128\001\016\006@\000 \000\004\128 \128\b \018\016\000\017\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") + (124, "'\225 \197\138\173\2433\208\020\015\228\000\003\142\0026\016\004\\(\223\018}\000@\248\000\000\024\224}\246D\b/\227P\000L\028\030\227\139\002\131@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235f\245\155\175\2437\252\149\031\226\017\007\158\007\223d@\130\2545\000\004\193\193\2388\176(4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241'\208\004\015\128\000\001\142\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\000\000\000\000\004\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\016(\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\128\179\160\b2R\028\012\025 v\017\"\017@\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\002\012\\ \000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@@ \193\004\000\000\016\000\000\000\000\000\016$\004\000\002\012\016@\000\001\000\000\000\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\003 \004\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128 \128\b \002\020\000\016\000b\000\002\000\bH\002\b\000\130\000!\000\001\000\006 \000 \000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000$\128\004\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\000!\128\001\000\007`\017 \004\003 \000x\016\000\197\194\128\001\000\128 \000\016\bH\002(\000\194\t!\192\001\016\006a\016a\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\007\001\000\012\\(\000\016\b\002\000\001\000\003\000\bp\016 \197\194\000\001\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\187\128\b2R\028\012\017 v\001f\017`0\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\018\000\002\000\000\000\001\000\016\000\000\000@\000\000\001 \000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\0000\000\002H\000L\000\000\b\000\000\000\000\000\128\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\002\128\193#\144\000\001\128\000\001\140\b@\000\b\004\000(!@\192\000\000 \016\000\000\132\000\000\128\000\002\130\020\012\000\000\002\001\000\000\b@\000\b\000\000(!\000\192\000\000 \016\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\136G\224,\229\"\211\227!\176@\025,\184\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\131\000\000\000@\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\002@@\000\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\167\225 \197\138\173\2437\208\020\015\226\000\003\142\n~\018\012X\170\2233=\001@\254 \0008\224\167\225\"\197\138\173\2433\208\020\015\230\000\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@@\000\129\004\000\000\016\000\000\000\b\000\016$\004\004\000\b\016@\000\001\000\000\000\000\000\001\002@@\000\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\002@@\000\000\129\000\000\000\016\000\000\000\000\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235w\253\155\239\247\255\252\157?\230!\003\158@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\n6\024\132~*\223R=>b\249\004\001\154\235\129!\bD\002\128\193#\144\000\001\128\000\001\140\0026\016\004X(\223\018=\000@\248\000\000\028\224\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\026\000\000\020@\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\003\000\002p\016\000\197\194\000\001\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\004\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\022\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\011\184\000\131!!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\012 \000\000\000\000\000\000\000\003\000\000p\016 \197\194\000\001\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\187\128\b2R\028\012\017 v\001b\017`0\000\006\000\000\012\\ \000\016\000\000\000\000\000\197\128\187\128\b2R\028\012\017 v\001b\017`\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128;\128\b2\018\028\012\017 v\001b\017@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000@\000\000@\000\002\000\000\000\001\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\002\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\001\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\016@\003!\000@\192\004\193&\144\001\001\128\000\001\004\0002\016\004\b\000L\018i\000\016\024\000\000\016@\003!\000@\128\004\193\"\144\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\027P\144\020\193&\176\001\001\148 mU\000\000\016\000\b\000@\000\001\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\145\181\t\001L\018o\000\016\027A\006\213P\001\000\000\000\000\000\128\"\128\000\000\000\000\000\000\b2\016\132\b\000L\018-\000\016\026\000\000\144@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\027\000\000\016\000\004\000\000\000\020\000LQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147!\027@\128\020\193&\208\001\001\180\000MU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\017\180\b\001L\018m\000\016\027@\004\213P\131\161\136G\224,\229\"\211\227!\176@\025,\176\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000@\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018)\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000L\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001 \000\000\000\000@\000\000\000\000\004\133\016\131!\002@\128\004\193\"\208\001\001\160\000\001D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\000\000\004\129\016\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\016\000\000\004\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193&\176\t\001\144\000M\021\128\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016D\012\130L\018m\000\016\026\000\000\016@\001\002@@@\000\129\004\000\000\016\000\000\000\b\000\016$\004\004\000\b\016@\000\001\000\000\000\000\000\001\002@@\000\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\003\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\001\002H@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\000@\b\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\0000\000\007\129\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\001@0\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\001\"\001LH\002\168\000\131\001!\192\001\016\007`\018 \004\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\018 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\003 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\001\002@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\017\000v\016\"\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\000L\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\128\000\000\000\000\000\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\144\007`\002`\004\005\002H@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\128\004\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\144\007a\002`\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000@\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0026\016$X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000@\000\000\000@\000\000\000\000\b\000\001\000\000\000\000\000\000\000\004\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\192\000\017\000\000\000\000\000\000\003\000\016P$\000\0026\016\004\\(\223\018}\000@\248 \000\024\224#a\000E\130\141\241'\208\004\015\130\000\001\142\0026\016\004X(\223\018=\000@\248 \000\024\224\001!\000DB\128\193'\144\000\001\128\000\001\140\000\018\016\004@(\012\018y\000\000\024\000\000\024\192\001!\000D\002\128\193#\144\000\001\128\000\001\140\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\215?\191\251a\247\219\127\253\240\016\000\000\000\000\012\0028\000\000\000\000\000\000\000\163a\136G\226\173\245#\211\230/\144@\025\174\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\163a\bE\130\141\241#\208\004\015\128\000\001\142\n6\016\132X(\223\018=\000@\248\000\000\024\224\129\002@@@\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016@\000\001\000\000\000\000\000\001\002@@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\000\000\000\000@\000\129\002@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\163a\bE\130\141\241#\208\004\015\128\000\001\142\n6\016\132X(\223\018=\000@\248\000\000\024\224\131!\b@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0026\016\004\\(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\016@\016\000\000\000\000\016\000\004\000\000\000\000\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\003)\000P\208\004\193&\176\001\001\128\000\001\004\0002\144\005\t\000L\018k\000\016\024\000\000\016@\003)\000P\144\004\193\"\176\001\001\128\000\001\004\000 \000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\b\000\000\000\000\004\000\000\000\016\000L\017\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\161\136G\224,\229\"\211\227!\176@\025,\176\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\144\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\001L\018+\000\016\025\000\002P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\004\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\001\000\000\000\000\016@\000\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\012\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\001!\000DB\128\193'\144\000\001\128\000\001\140\000\018\016\004@(\012\018y\000\000\024\000\000\024\192\001!\000D\002\128\193#\144\000\001\128\000\001\140\012IK\184>\131\225a\192\255\182\007}\183\231\015\001!\000D\002\128\193#\144\000\001\128\000\001\140\012[\219\189\127\171\237s\251\255\182\031}\183\255\223\000\000\000\000\000\000\128\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\b\000\001\176\000\000\000\000\000\000\000\000\000\004\005\000\163a\011E\130\141\241#\208\004\015\128\000\001\206\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\215?\191\251a\247\219\127\252\240\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\000\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\025\000\000\000\000\004\000\000\000\016\000\000\000\b0\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\144\000\000\000\000@\000\000\001\000\002\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b\000\001\144\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\197\189\187\215\250\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\012\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\197\189\187\215\250\190\215?\191\251a\247\219\127\252\252IK\184>\131\225a\192\255\182\007}\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\215?\191\251a\247\219\127\252\252IK\184>\131\225a\192\255\182\007}\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\231\245\187\199\234\191\247?\223\253o\247\139\127\254\247\223d@\130\2545\000\004\193\193\2388\176(4#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2402\016\004\b\000L\018m\000\016\024\000\000\016@\003!\000@\128\004\193\"\208\001\001\128\000\001\004\bz\146-\t\130M3\235\001\144\031`\006\241T#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\128\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\144\006`\000 \004\132\128\"\128\b\"\018\024\012\025\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\128\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\t\176>\000\192@@>\002\001\000\005\134\003\163a\011E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@(\012\0189\000\000\024\000\000\024\192\197\189\187\215\250\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015\001\000\000\000\000\000\192\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\250\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\252[\219\189\127\171\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015\197\189\187\215\250\190\215?\191\251a\247\219\127\253\252[\219\189\127\171\237s\251\255\150\031x\183\255\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\016\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\240\000@\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\252IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\1306\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129!\bD\002\128\193#\144\000\001\128\000\001\140\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016$X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\002\128\193#\144\000\001\128\000\001\140\004\000\000\000\000\000\000\000\000\0000\000\005\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000$\000\b\000\001\016\000\000\000\000\000\000\000\001\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\0000\000\005\000\000\000\001\000\000\000\000\000\192#\128\000\000\000\000\000\000\012\000\001\016\000\000\000\000\000\0000\001\005\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\182\007}\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\128\000\017\000\000\000\000\000\000\000@\000\000@\016\b\000\t\016>\000\192@@>\006\001\000\005\130\003\128\000\016\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016$\004\000\000\b\016@\000\001\000\000\000\000\000\001\002@@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000@\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\001\002@@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\144\006`\000 \004\129\002@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\004\000\000\000\016\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\025\000f\000\002\000@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000@\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\b\000\000\000\004\000\0000\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\001\016\000\000\000\000@\000\002\000\000\000\000\016\000\000\017\000\000\000\000\004\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@@\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\004\000\000 \000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\162\128\b0R\028\000\025\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\128\162\128\b R\028\000\025\000f\001\002\016@0\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\0000\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\"\128\b R\028\000\025\000f\001\002\016HX\n(\000\131\005!\192\001\144\006`\016!\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\"\128\b R\028\000\025\000f\001\002\016HX\n(\000\131\005!\192\001\144\006`\016!\004\000\000\000\000\000\000\000\004\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016D\b\000L\018m\000\016\024\000\000\016@\003!\004@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\128\000\001\004\bH\002(\000\130\001!\128\001\144\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\192\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\196\148\187\131\232>\022\028\015\249`w\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\002@@@\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016@\000\001\000\000\000\000\000\001\002@@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\128\000\000\b\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\2402\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\128\000\b\000\000\000\000\000\000\000\000\000\000d\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\136\003\224\012\004\004\003\224 \016\000| 0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \146\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@\000\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\004\000@\000\000\004\000\000\000\000\000\000\000\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000v\000\002\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\018\028\000\017\000f\000\002\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000@\000\000\000\000@\000\000\000\000\000\000\000\003\000\004\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@0\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\0002\016\004\b\000L\018-\000\016\026\000\000\016@\016\000\002\000\000\000\000\004\000\000\000\000\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\000\016$\004\004\000\b\016@\000\001\000\000\000\000\000\001\002@@\000\000\129\004\000\000\016\000\000\000\000\000\016$\004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\bH\002(\000\130!!\192\193\016\007`\016 \000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\132\129\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b\"\018\028\012\017\000v\001\002\000\000\018\000\000\004\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\012 \018\028\000\017\000v\000\006\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\000\bH\002(\000\130\001!\192\001\016\006a\000!\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\132\128\"\128\b \018\028\000\017\000f\000\002\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\128\"\240\024 \199\210\000\017\000`\000\002\000\bH\002(\000\130\000!\000\001\000\006`\000 \000\001\000\000\000@\000\000\004\000\000\000\000\000\000\b\000\016\000\000\004\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \130\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \130\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\004\000@\000\000\004\000\000\000\000\000\000\000\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000v\000\018\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\000\000\000\000\004\000\000\000\000\000\000\000\0000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\020\000\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016$\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000\bH\002(\000\130\000!\128\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@@ \193\004\000\000\016\000\000\000\000\000\016$\004\000\002\012\016@\000\001\000\000\000\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\004\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\012 \002\028\000\016\000f\000\006\000\000\136\000\000\004\000\004\000`\000\000\000\000\000\000\000\b\000\000\000@\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\b@\000\b\000\000(!@@\000\000 \016\000\000\132\000\000\128\000\002\130\016\004\000\000\002\001\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\004\000\000\002\001\000\000\000\128\000\000\000\004\004\000@\000\000\000\000\000\000\000\b\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\004\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\128@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000 \005\016`\000\000\000\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\b\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000@\000\000\000\000 \000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\004\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\bH\002\168\000\130!!\192A\016\007`\016 \004\132\000\000\128\000\002\002\028\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\198\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\000\b@\000\b\000\000 !\128@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\bX\n\168\000\131\004!\192\001\016\007`\000`\004\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\002\000\000\000\000\004\000\000\000\000\000@\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\133\128\170\128\b0B\028\000\017\000v\000\002\000HX\n\168\000\131\004!\192\001\016\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130\000!\192\001\000\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \004\002\000\000$\128\004\192\004\000\128\000\000\000\000\b\000 \000\002H\000L\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \004\002\000\000$\128\004\192\004\000\128\000\000\000\000\b\000 \000\002H\000L\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\003 \000x\016\000\197\194\128\001\000\128 \000\016\0000\000'\001\000\012\\ \000\016\000\000\000\001@\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\160\"\128\b \146\026\000\017\000\230\001\002\000HH\002(\000\194\001!\192\001\016\006`\016a\004\132\128\"\128\b \018\028\000\017\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\016@\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\001\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\007`\016 \004\001 \000\b\000\000\128\002\128\000\000\128 \000\016\000\018\000\000\000\000\b\000(\000\000\b\002\000\001\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\194\001!\192\001\016\006`\016a\004\132\128\"\128\b \018\028\000\017\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\136\000\000\004\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\000\000\128\000\002\130\020\012\000\000\002\001\000\000\b@\000\b\000\000(!\000\192\000\000 \016\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\000\128\000\000\000\004\004\000@\000\000\000\000\000\000\128\000\000\000\000\000@@\004\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000@\000\000\000\000\000\000\128\000\000\000\b\000\000@\004\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\0008\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\0008\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\002\000\209\006\000\000\004\000\000\000\b\000\016\000\004\000 \r\016`\000\000@\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\003!\004@\200\004\193&\208\001\001\128\000\001\004\007\223d@\130\2545\000\004\193\193\2388\176(4\003!\004@\128\004\193&\208\001\001\128\000\001\004\0002\016D\b\000L\018-\000\016\024\000\000\016@\003!\000@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\128\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\128\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193&\176\001\001\128\000\001\004\0002\144\005\t\000L\018+\000\016\024\000\000\016@\003)\000P\144\020\193\"\176\001\001\128\000\001\004\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\016\000\004\000 \r\016 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bZ\146\173A\170-3\251\193\016\030`\016x\212\133\169*\212\026\162\211?\188\017\001\230\001\007\141@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@2\016D\b\000L\018-\000\016\024\000\000\016@\003!\000@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\128\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\001\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\`\000\016\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\003)\000P\144\004\193\"\176\001\001\144\000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\016\000f\000\002\000\0002\016D\012\000L\018m\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\017\000f\000\002\000HH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\016\000f\000\002\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\144\006`\000 \004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\016\000f\000\002\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007`\002 \004\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\193\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\017@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000a\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000a\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\130\b \018\024\000\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\001!\128\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\000\0000\000\006\000\000\012\\`\000\018\000\002\000\000\000\003\000\000`\000\000\197\194\000\001 \000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000\000\000\004\000\000\000\018\000\000\000\000\000\003\000\000`\000\000\197\194\000\001 \000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\007\129\000\012\\(\000\016\b\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\132\128\"\128\b \002\024\000\016\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\130\b \002\024\000\016\000v\001\018\000@2\000\007\129\000\012\\(\000\016\b\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\132\128\"\128\b \002\024\000\016\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \002\016\000\016\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\192\002\000\000\000\128\000\000\000\b\000\b\128~\002\194@\000>\"\001\004\001\130\139\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\024(\176\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\016\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\000@\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000'\225 \197\138\173\2433\208\021\015\228\000\003\142\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\005\161 \128\b \210\016\016\017\000\228\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\016\000\017\000d\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\000\001\000\006\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\225 \197\138\173\2433\208\021\015\228\000\003\142\002~\018\012X\170\2233=\001P\254@\0008\224\004\128 \128\b \018\016\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\024\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\128\001\016\006@\000 \000\004\128 \128\b \018\016\000\017\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") and start = 15 and action = - ((16, "C\170R\004Ff\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021HFf\000\000\000\000\020XFfC\170\020\182\000-\000[]\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\238\001\208\001d\000\000\002t\001\188\000\000\003\214\003$\007\140\000\000\005\244\003\132\b\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\000\000\003\190l*\000\000\000\000\000\000\005.\000\000\000\000R\232\004\196\006&\000\000\000\000V&\005.\000\000J\014\020X\021\178^T\020Xh:R\004\020XN`\000\000\005\144\000\000Dp\006\136\000\000C\146\000\000\027\158\000\000\000\000\003\224\000\000\005.\000\000\000\000\000\000\005\\\000\000C\146\000\000\006&|4`\020f\150\000\000\1340\136\022\000\000Mra\190\000\000Zr\026\206l*FfC\170\000\000\000\000R\004\020XTBDp\006\214x\"\000\000\130\142FfC\170R\004\020X\000\000\000\000\016xQ\254\020XG\030Y\222\000\000\001\026\000\000\000\000\004\250\000\000\000\000I\182\001\026\024\138\005\200\tR\000\000\000\000\002\026\000\000\021\178\007X\007\136\020X\028\254\020XC\170C\170\000\000\000\000\000\000R\012Q\182\020X\028\254A\248\020X\000\000\023\022\bZ\007\012\000\000\000\220\007\030\000\000\000\000\000\000\000\000\000\000\020X\000\000\000\000\000\000R\004\020X\000\000A\206x\168C\170\000\248\000\000Y\222{\230|\206\000\000\007\012\000\000\005J\000\000\000\000C,V&\136b\000\000jb\136b\000\000jbjb\000b\006\n\0008\000\000\020\190\000\000\b\004\000\000\000\000\b\004\000\000\000\000\000\000jb\005.\000\000\000\000X\244V&V\154a\190\000\000\000\000OL\000b\000\000\000\000a\190\n\236V&\000\000PBa\190Q8\000\000\000\000\000\000\003b\000\000jb\000\000\001\000m\"\000\000V&\005\216V&\000\000\022\\\011p\005.\000\000\000\000\023\224\000\000\006\208\000\000[\150\006\230\000\000\n\204jb\007\222\000\000\t\206\000\000\t\184\000\000\000\000\006\168\000\000\000\000\000\000\021 4Y\222Q\240\020XY\222\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\\\027v\000\000\000\000\000\000\001\244&\174u\242\000\000\000\000Q\240\020XY\222\000\000\000\000\138(Y\222\138p|\206\000\000\138\202\000\000Y\222\000\000\000\000Z\202I\182\001\154\001\154\000\000\012tY\222\000\000\000\000\000\000\004\250\014\014\000\000A\012\000\000\000\000}\022\000\000\139\012jb\000\000\004R\000\000\000\000}\162\000\000\139f\n\242\000\000\000\000\000\000\000\000\014\152\000\000\022\168\000\000\000\000}\162\000\000\005\220\000\000\000\000DHv~\000\000\000\000Bn\023|\019\252\023\174\000\000\000\000\000\000\000\000\002>\000\000\000\000\\`\t\192\014x\000\017V&\000\226\014\196\000\000\000\000\n\184\014x\003x\000\000R\004R\144Q\182\020X\028\254\000-\000\018\011\154\000\000\014x\021\178\021\178\000-\000\018\000\018\021\178\000\000k`\nXDp\007\012\011\020\139\156\000\000V&g6V&`\244g\214V&\003\202V&hp\000\000\012\002\b\022\0124\021\178l\000\000\000\b*\bL^v\000\000\000\000\000\000\000\000\021\178lX\021\178l\248\020d\0008a\148\007\030\0008a\236\000\000mP\nX\000\000\000\000\000\000\002\152\000\000\000\000\006x\000\000\tb\028\254\000\000_4A\248\000\000\031\138\000\000\000\000\021\178\003\144\000\000\000\000\000\000\000\000]\024\000\000\001\248\000\000Wf\n\024\0032\000\000\0226R\144R\004\020XH(\158\000\000\011\172\b\184\000\00056\000\000\n\202\t\176\000\0006.\000\000\014\164\n\168\000\0007&\004J\025\016\000\000\012\164\011\160\000\0008\030\000\000\n\224\012\152\000\0009\022\000\000\014\250\r\144\000\000:\014\014\136\000\000;\006\015\128\019`\000\000\000\000\000\000\r\156\000\000\000\000\012\186\000\000\000\000\015X\000\000\n:\000\000\000\000\000\000\016\016\000\000\0162\000\000\000\000Lz\001\154\016\246r\028a\190\000b\000\000\000\000r\028\000\000\000\000\000\000r\028\000\000\016\236\000\000\000\000\000\000\000\000\000\000\000\000;\254Y\222\000\000\000\000\017.\000\000<\246\000\000=\238\000\000#\250\000\000\000\000\005\134\000\000\000\000Y\222\000\000\000\000y\164\015L\000\000\000\000H\240\000\000\007\248\000\000\000\000X*\000\000\r\178\000\000\000\000\005@\011\254\000\000\000\000\0226\022\028\007\012\000\000A\214\000\000!,\023\176\021\220\000\000\000\000\015\156\000\000\000\000\001\238\025\030X\192\000\000\025\030\000\000\011\238\000\000\000\000\015\242\000\000\000\000i\018\t\002\005@\000\000\000\000\012\246\000\000\000\000\r\200\000\000\000\000\000\000\020X\028\254\003\202\000\000\000\000\023&\005\200\tR\004\128\028\254z2\021\178\020X\028\254z\138\016\206\000\000\000\000\004\128\000\000I\248\019\248\021\204\000\000\t*\017P\000\000\017P\000Va\190\000\244\000\000\017*\016\184l*\011\164V&\030\128\020F\r\018\003\b\000\000\031x\017l\000\000\000\244\000\000\000\000\017\136a\190b\140\000\000idg$\r\028a\190\017da\190n\156c,\017ha\190o\026c\204\001\024\017*\000\000\000\000\000\000\020X\130\216\000\000Y\222rj\000\000\000\000\017\166\000\000\000\000\000\000>\230\000\000\014\170\000\000\000\000\000\000Up\020X\028\254\003\202\000\000F\138\000\000\bh\000\000\000*\000\000\000\000\017\172\000\000\017\214{\230?\222j\016\000\000\000\000IZ\000\000\t`\000\000N\150\000\000\020X\000\000\021\178\nX\000\000\130\142\000\000\020X\028\254\130\142\000\000\025D\023\022\bZ\005.\132\202\021\178\127\144rj\000\000\005\200\tR\tR\004\128rj\134\164\005\200\tR\004\128rj\134\164\000\000\000\000\004\128rj\000\000FfC\170Y\222\027B\000\000\000\000FfC\170Q\182\020X\028\254\130\142\000\000\020\182\000-\000[\017\bl*\r(V&s\004\017<\017\236\133H\000\000rj\000\000s\128I\248\019\248\021\204{\b\023\228\tZ\128\012\014:\0178\020Xrj\000\000\020Xrj\000\000jbh:\019\134\003\214\005\200\0008P\012\000\000\005\200\0008P\012\000\000\0274\023\022\bZ\005.Q\002\021\178\130b\000\000\005\200\nJ\0212\005\236\000\000P\012\000\000\tR\017<\021\178\131\030\136\216\005\200\tR\017>\021\178\131\030\136\216\000\000\000\000\b`\000\000\135\158\000\000\021\178\133\160P\012\000\000\b`\000\000J\014\020X\021\178\130b\000\000I\248\019\248\021\204s\252B\138\026\222\019\170\002\142\000\000\014ZC\146\000\017\000\000\017\184\017f\024\196\020XV\206V&\015\n\000\000Y\172\n\254\007\188\011\246\000\000\011\234\000\000\017\198\017ZV&PJ\000\000\0032\002\228\014\192\000\000\r\000\000\000\017\216\017fl*PJ\000\000\020X\024\196\018\020\011\028\005\200\000\000\015\184\024\196V&\012\208\000b\000\000V&\004\018\004\176\000\000\000\000ot\000\000\000\000\015\212\024\196o\242PJ\000\000\020XV&\r\218V&MzPJ\000\000\0154\000\000\000\000PJ\000\000\000\000Y\172\000\000rj\134\178\019\170\002\142\014Z\017\252\017\182\024\196rj\134\178\000\000\000\000\019\170\002\142\014Z\018\012\017\150O\030Mha\190\018\030O\030jb\020\184\018$O\030a\190\018.O\030p\146q\018\000\000\131\156\000\000\000\000rj\136\230\019\170\002\142\014Z\018(\017\184O\030rj\136\230\000\000\000\000\000\000h:\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\012\000\000\135D\020XDp\018:x\"\000\000\130\142\135D\000\000\000\000\1372\020XDp\018>\017\220`\020\137\170\000\244\018\136\000\000\000\000q\144s\252\020X\000\000\128d\021\204\000\000\000\000\130\142\1372\000\000\000\000\000\000{`D\228F\134\000\244\018\140\000\000\000\000\000\000s\252\020X\000\000\000\244\018\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\028B\138\019\170\002\142\014Z\018jtl\023\204\020XG\030\\.\020(\003\b\000\244\018n\n\152\000\000\000\000\018\"\000\000\000\000b\186\000\000\t\172\014\222\000\000\r\248\000\000\018x\018\016V&Xr\018\160\011l\000\000\000\000\018R\000\000\000\000\020F\0032\015|\000\000\018\172t\238\140B\001\154\018JV&\015\024\000\000\000\000\018\\\000\000\000\000\000\000b\186\000\000\0068\015\202\000\000\015&\000\000\018\178\018Fl*\000\000\018\202up\140t\001\154\018lV&\015\202\000\000\000\000\018\130\000\000\000\000\000\000\020X\000\000b\186\000\000\020z\020X\023\204\023\204v\198Ff\020X\130\216Y\222\021\162\000\000\012V\005\200\000\000\015\252\023\204V&\015\184\007\012\000\000\020XY\222tl\023\204\015\146\023\204\000\000D\142Et\000\000d&\000\000\000\000d\194\000\000\000\000e^\000\000\016R\023\204e\250\130\216Y\222\021\162\000\000\000\"\000\000\000\000O\030\015\170\000\000\000\000Wf\018\242\000\000b\186\000\000\023\204Wfb\186\000\000\020XV&b\186\000\000\016\026\000\000\000\000b\186\000\000\000\000\\.\000\000\131\244O\030\018\160\023\204\132rtl\000\000rj\135R\019\170\002\142\014Z\019\002tlrj\135R\000\000\000\000\000\000\137\242Q\240\000\000\000\000\000\000\000\000\000\000\000\000\133\218rj\000\000\135D\000\000\000\000\000\000\000\000rj\137\242\000\000\019:\000\000\000\000\133\218\019<\000\000rj\137\242\000\000\000\000\016\198\000\000\000\000k\b\004\136\000\000\000\000B\158\000\000V&\016\234\000\000\\.\016\232\000\000\000\000\019j{\230\000\000@\214\019F\000\000\000\000\019@\026R\028B\021\204wN\023\228\020X\000\000rj\000\000\000\000\000\000\000\000\000\000\000\000\000\000wb\023\228\020X\000\000\014*x\"\000\000\130\142\000\000\019F\026R\028Brj\000\000\019^\000\000\004\206\t\166\020X\140\146\000\000\000\000\028\190\140\234\000\000\000\000\018\244\000\000\019TV&\000\000\016\162\007\206\000b\000\000\000\000V&\r@\014\020\000\000V&\0148\000\244\019\128\000\000\000\000\128\254\000\000\000\000`\020\000\000\130\142\000\000\019\130\026R\029:P\012\000\000\000\000\000\000\000\000\016\026\129\152`\020\000\000\130\142\000\000\019\136\026R\029:P\012\000\000\017$\000\000\000\000\012H\000\000rj\000\000\019\164\000\000\000\000\019\006\000\000\019\026\000\000\019@\000\000\000\000R\214\019^\000\000\000\000%\182]\188\019\250\000\000\000\000\000\000\012T\012,`\\\020$\000\000\000\000\000\000\000\000\000\000\000\000\019\190\000\000\023\228\000\000\019\218\000\000V&\000\000\016f\000\000\000\000\019\224\000\000\000\000\0008\000\000\b\170\000\000\000\000\000\000\016v\000\000\028\254\000\000\r\218\000\000\021\178\000\000\0040\000\000\b\022\000\000\019\226\000\000Y\222\022\168\000\000\000\000\r$\0200\000\000\000\000\020&\014\028H<\005.\130\022\000\000\000\000\000\000\000\000\000\000[b\000\000\000\000\020\214\000\000n\004\000\000\016\254\020\254\000\000\021\004\000\000H\240H\240]R]R\000\000\000\000rj]R\000\000\000\000\000\000rj]R\020\130\000\000\020\164\000\000"), (16, "\tQ\tQ\000\006\001\002\001\190\tQ\002\186\002\190\tQ\002\234\002\138\tQ\003\153\tQ\019j\002\246\tQ\024^\tQ\tQ\tQ\016\226\tQ\tQ\tQ\001\210\004Y\004Y\004F\002\250\tQ\003r\003v\nz\tQ\001\206\tQ\024b\002\254\000\238\003\150\016\230\tQ\tQ\003\202\003\206\tQ\003\210\003\222\003\234\003\242\007\030\007Z\tQ\tQ\002\178\001\206\007:\003\230\tQ\tQ\tQ\bz\b~\b\138\b\158\001*\005v\tQ\tQ\tQ\tQ\tQ\tQ\tQ\tQ\tQ\t\018\000\238\tQ\015\214\tQ\tQ\003\153\t\030\t6\t\130\005\130\005\134\tQ\tQ\tQ\r\250\tQ\tQ\tQ\tQ\002r\002\162\014*\tQ\006\250\tQ\tQ\0035\tQ\tQ\tQ\tQ\tQ\tQ\005\138\b\146\tQ\tQ\tQ\b\170\004r\t\150\0035\tQ\tQ\tQ\tQ\r)\r)\024f\t\202\004\154\r)\t\214\r)\r)\003\157\r)\r)\r)\r)\tF\r)\r)\006\165\r)\r)\r)\003\145\r)\r)\r)\r)\004Y\r)\0166\r)\r)\r)\r)\r)\r)\r)\r)\006\165\r)\015\222\r)\004\226\r)\r)\r)\r)\r)\005\237\r)\r)\000\238\r)\003\238\r)\r)\r)\tJ\tf\r)\r)\r)\r)\r)\r)\r)\000\238\r)\r)\r)\r)\r)\r)\r)\r)\r)\r)\r)\000\238\r)\r)\003\157\r)\r)\012b\003\022\003\170\004Y\r)\r)\r)\r)\r)\004Y\r)\r)\r)\r)\r)\006q\r)\r)\006\r\r)\r)\003\026\r)\r)\r)\r)\r)\r)\r)\r)\r)\r)\r)\r)\r)\006q\004Y\r)\r)\r)\r)\001\189\001\189\001\189\001f\003q\001\189\006\018\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001v\001\189\001j\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\006\226\001\189\003J\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\b>\001\189\001\189\001\189\006\r\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\000\238\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\bv\001\189\001\189\019Z\b\030\007f\001r\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\015\006\b\194\001\189\005\186\001\189\001\189\b\"\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\182\001\189\001\189\001\189\001\189\001\189\n\145\n\145\019\198\007\226\rM\n\145\003N\n\145\n\145\004\021\n\145\n\145\n\145\n\145\001\186\n\145\n\145\rM\n\145\n\145\n\145\000\238\n\145\n\145\n\145\n\145\019\206\n\145\006\230\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\007\t\n\145\004Y\n\145\004Y\n\145\n\145\n\145\n\145\n\145\bE\n\145\n\145\000\238\n\145\001\130\n\145\n\145\n\145\007\t\004Y\n\145\n\145\n\145\n\145\n\145\n\145\n\145\004Y\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\000\238\n\145\n\145\004\021\n\145\n\145\004\210\bZ\007f\004Y\n\145\n\145\n\145\n\145\n\145\007!\n\145\n\145\n\145\n\145\t\174\000\238\n\014\n\145\001\146\n\145\n\145\b^\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\n\145\007\t\n\145\n\145\n\145\n\145\n\145\003\185\003\185\002\225\007\226\b\134\003\185\002V\003\185\003\185\016\202\003\185\003\185\003\185\003\185\001f\003\185\003\185\003q\003\185\003\185\003\185\000\238\003\185\003\185\003\185\003\185\002Z\003\185\000\n\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\b>\003\185\007\026\003\185\007f\003\185\003\185\003\185\003\185\003\185\b\233\003\185\003\185\000\238\003\185\004\214\003\185\003\185\003\185\002\225\006^\003\185\003\185\003\185\003\185\003\185\003\185\003\185\015n\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\006b\t\166\n\006\007\154\003\185\003\185\007\226\025\158\007f\000\238\003\185\003\185\003\185\003\185\003\185\001\198\003\185\003\185\003\185\003\185\t\174\016\206\n\014\003\185\000\238\003\185\003\185\025\162\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\003\185\000\238\003\185\003\185\003\185\003\185\003\185\003\169\003\169\b\229\007\226\007:\003\169\b\233\003\169\003\169\028O\003\169\003\169\003\169\003\169\004Y\003\169\003\169\006\177\003\169\003\169\003\169\000\238\003\169\003\169\003\169\003\169\r>\003\169\003\170\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\006\177\003\169\001\234\003\169\000\238\003\169\003\169\003\169\003\169\003\169\015\134\003\169\003\169\001\218\003\169\t-\003\169\003\169\003\169\000\238\004\014\003\169\003\169\003\169\003\169\003\169\003\169\003\169\015\142\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\004Y\t\166\n\006\004\018\003\169\003\169\nF\003\"\b\229\002n\003\169\003\169\003\169\003\169\003\169\001\222\003\169\003\169\003\169\003\169\t\174\012\237\n\014\003\169\b\130\003\169\003\169\003&\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\012\237\003\169\003\169\003\169\003\169\003\169\t\249\t\249\004Y\004Y\011*\t\249\006\166\t\249\t\249\t-\t\249\t\249\t\249\t\249\018\190\t\249\t\249\004Y\t\249\t\249\t\249\001\206\t\249\t\249\t\249\t\249\004Y\t\249\006\170\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\001f\t\249\014n\t\249\003q\t\249\t\249\t\249\t\249\t\249\002r\t\249\t\249\001\206\t\249\012\194\t\249\t\249\t\249\023B\000\238\t\249\t\249\t\249\t\249\t\249\t\249\t\249\000\238\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\004B\t\249\t\249\023J\t\249\t\249\014v\002.\007f\004Y\t\249\t\249\t\249\t\249\t\249\002~\t\249\t\249\t\249\t\249\t\249\012\241\t\249\t\249\b=\t\249\t\249\b*\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\012\241\004Y\t\249\t\249\t\249\t\249\n\t\n\t\004\242\007\226\004^\n\t\005R\n\t\n\t\000\238\n\t\n\t\n\t\n\t\001\206\n\t\n\t\000\238\n\t\n\t\n\t\000\238\n\t\n\t\n\t\n\t\t\025\n\t\001\238\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\005&\n\t\t\014\n\t\002\190\n\t\n\t\n\t\n\t\n\t\011\138\n\t\n\t\003\174\n\t\012\218\n\t\n\t\n\t\002\214\n\026\n\t\n\t\n\t\n\t\n\t\n\t\n\t\000\238\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\030\n\t\n\t\003V\n\t\n\t\003\162\002:\007f\t\025\n\t\n\t\n\t\n\t\n\t\003\178\n\t\n\t\n\t\n\t\n\t\006y\n\t\n\t\004r\n\t\n\t\b\242\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\006y\t\025\n\t\n\t\n\t\n\t\n\001\n\001\019\154\007\226\b>\n\001\t\021\n\001\n\001\003Z\n\001\n\001\n\001\n\001\001\206\n\001\n\001\000\238\n\001\n\001\n\001\000\238\n\001\n\001\n\001\n\001\001\134\n\001\014\158\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\0056\n\001\019\162\n\001\004V\n\001\n\001\n\001\n\001\n\001\005\245\n\001\n\001\002\014\n\001\012\242\n\001\n\001\n\001\002\162\012V\n\001\n\001\n\001\n\001\n\001\n\001\n\001\b\230\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\007\198\n\001\n\001\012Z\n\001\n\001\004b\004Y\007f\026\170\n\001\n\001\n\001\n\001\n\001\001\222\n\001\n\001\n\001\n\001\n\001\006\129\n\001\n\001\004B\n\001\n\001\016\218\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\006\129\001\222\n\001\n\001\n\001\n\001\t\237\t\237\004Y\007\226\007:\t\237\004\214\t\237\t\237\000\238\t\237\t\237\t\237\t\237\000\238\t\237\t\237\014\162\t\237\t\237\t\237\000\238\t\237\t\237\t\237\t\237\001\150\t\237\007\194\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t)\t\237\011\166\t\237\004B\t\237\t\237\t\237\t\237\t\237\019\002\t\237\t\237\000\238\t\237\r\n\t\237\t\237\t\237\015:\011\150\t\237\t\237\t\237\t\237\t\237\t\237\t\237\019\014\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\002\150\t\237\t\237\011\202\t\237\t\237\003>\003B\007f\028\031\t\237\t\237\t\237\t\237\t\237\004R\t\237\t\237\t\237\t\237\t\237\017z\t\237\t\237\002\150\t\237\t\237\017\022\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t)\012F\t\237\t\237\t\237\t\237\t\245\t\245\022\182\007\226\b2\t\245\011\158\t\245\t\245\007:\t\245\t\245\t\245\t\245\026n\t\245\t\245\012J\t\245\t\245\t\245\000\238\t\245\t\245\t\245\t\245\005F\t\245\012\138\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\005>\t\245\022\190\t\245\015\198\t\245\t\245\t\245\t\245\t\245\005\237\t\245\t\245\012\142\t\245\r\030\t\245\t\245\t\245\006\242\007\n\t\245\t\245\t\245\t\245\t\245\t\245\t\245\0062\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\004\237\t\245\t\245\r\194\t\245\t\245\003>\018\182\007f\005J\t\245\t\245\t\245\t\245\t\245\007j\t\245\t\245\t\245\t\245\t\245\018\202\t\245\t\245\b\130\t\245\t\245\0172\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\012n\004\214\t\245\t\245\t\245\t\245\t\241\t\241\007\166\007\226\012\210\t\241\004\214\t\241\t\241\015B\t\241\t\241\t\241\t\241\012r\t\241\t\241\012F\t\241\t\241\t\241\000\238\t\241\t\241\t\241\t\241\012\214\t\241\012\138\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\006v\t\241\r\026\t\241\r\198\t\241\t\241\t\241\t\241\t\241\004Y\t\241\t\241\r^\t\241\r2\t\241\t\241\t\241\007\018\016\154\t\241\t\241\t\241\t\241\t\241\t\241\t\241\004Y\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\004\174\t\241\t\241\b\025\t\241\t\241\022\150\004Y\001\002\001\190\t\241\t\241\t\241\t\241\t\241\004Y\t\241\t\241\t\241\t\241\t\241\t\202\t\241\t\241\t\214\t\241\t\241\000\238\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\012\186\000\238\t\241\t\241\t\241\t\241\t\253\t\253\005\002\003>\003B\t\253\n\026\t\253\t\253\005.\t\253\t\253\t\253\t\253\012\190\t\253\t\253\007>\t\253\t\253\t\253\007v\t\253\t\253\t\253\t\253\r\006\t\253\011\150\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\007~\t\253\015\030\t\253\019\166\t\253\t\253\t\253\t\253\t\253\014\194\t\253\t\253\019\250\t\253\rN\t\253\t\253\t\253\002\190\007\170\t\253\t\253\t\253\t\253\t\253\t\253\t\253\022\222\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\007\198\t\253\t\253\t\202\t\253\t\253\t\214\019\158\007f\005\249\t\253\t\253\t\253\t\253\t\253\005\253\t\253\t\253\t\253\t\253\t\253\004Y\t\253\t\253\015\242\t\253\t\253\027V\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\027\186\001\222\t\253\t\253\t\253\t\253\n\r\n\r\006\030\007\226\014\198\n\r\012n\n\r\n\r\015\"\n\r\n\r\n\r\n\r\004B\n\r\n\r\012\210\n\r\n\r\n\r\000\238\n\r\n\r\n\r\n\r\rJ\n\r\000\238\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\012\006\n\r\r\174\n\r\007\178\n\r\n\r\n\r\n\r\n\r\015J\n\r\n\r\020\018\n\r\rb\n\r\n\r\n\r\019\210\007\218\n\r\n\r\n\r\n\r\n\r\n\r\n\r\027\182\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\002\190\n\r\n\r\016\002\n\r\n\r\023\214\003\133\001\002\001\190\n\r\n\r\n\r\n\r\n\r\011\150\n\r\n\r\n\r\n\r\n\r\011\150\n\r\n\r\bI\n\r\n\r\b\253\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\001\002\001\190\n\r\n\r\n\r\n\r\n\005\n\005\t\194\t\242\015N\n\005\012\186\n\005\n\005\020\026\n\005\n\005\n\005\n\005\012\154\n\005\n\005\014\178\n\005\n\005\n\005\000\238\n\005\n\005\n\005\n\005\r\162\n\005\015V\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\012\158\n\005\014\182\n\005\016>\n\005\n\005\n\005\n\005\n\005\017\254\n\005\n\005\015Z\n\005\rv\n\005\n\005\n\005\022\194\012\234\n\005\n\005\n\005\n\005\n\005\n\005\n\005\b\253\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\003\174\n\005\n\005\012\238\n\005\n\005\0066\001\206\b>\026\194\n\005\n\005\n\005\n\005\n\005\003\174\n\005\n\005\n\005\n\005\n\005\000\238\n\005\n\005\005\241\n\005\n\005\t\001\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\n\005\001\002\001\190\n\005\n\005\n\005\n\005\n}\n}\026:\000\238\020Z\n}\028?\n}\n}\018B\n}\n}\n}\n}\012V\n}\n}\016\174\n}\n}\n}\000\238\n}\n}\n}\n}\002\253\n}\006\138\n}\n}\n}\n}\n}\n}\n}\n}\r.\n}\019b\n}\006\246\n}\n}\n}\n}\n}\026\198\n}\n}\007\006\n}\r\130\n}\n}\n}\019\202\012\154\n}\n}\n}\n}\n}\n}\n}\t\001\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\bM\n}\n}\rr\n}\n}\023N\022\186\019\138\020n\n}\n}\n}\n}\n}\rU\n}\n}\n}\n}\n}\014\138\n}\n}\007F\n}\n}\012\234\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\014\142\tb\n}\n}\n}\n}\003\165\003\165\000\238\r\186\bA\003\165\016\178\003\165\003\165\000\238\003\165\003\165\003\165\003\165\014\250\003\165\003\165\tz\003\165\003\165\003\165\024n\003\165\003\165\003\165\003\165\022\254\003\165\t\198\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\014\254\003\165\023\030\003\165\024r\003\165\003\165\003\165\003\165\003\165\b=\003\165\003\165\023\238\003\165\t\238\003\165\003\165\003\165\020r\015*\003\165\003\165\003\165\003\165\003\165\003\165\003\165\023F\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\024\174\t\166\n\006\015.\003\165\003\165\t\250\001\206\024\n\ra\003\165\003\165\003\165\003\165\003\165\n\n\003\165\003\165\003\165\003\165\t\174\000\238\n\014\003\165\011B\003\165\003\165\020\006\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\020>\003\165\003\165\003\165\003\165\003\165\001\245\001\245\027\030\007\246\023~\001\245\011*\002\190\001\245\020\026\002\138\001\245\t\190\001\245\023\226\002\246\001\245\007\246\001\245\001\245\001\245\011Z\001\245\001\245\001\245\001\210\011\130\t\246\011\178\002\250\001\245\001\245\001\245\001\245\001\245\t\254\001\245\007\246\002\254\025\142\003\150\026\166\001\245\001\245\001\245\001\245\001\245\024\178\003\222\001\190\r\210\001\245\000\238\001\245\001\245\002\178\025\194\024B\003\230\001\245\001\245\001\245\bz\b~\b\138\r\218\012\166\005v\001\245\001\245\001\245\001\245\001\245\001\245\001\245\001\245\001\245\025\182\t\166\n\006\007\246\001\245\001\245\r\238\027\255\004q\027J\005\130\005\134\001\245\001\245\001\245\028/\001\245\001\245\001\245\001\245\012\174\007\246\012\250\001\245\014\030\001\245\001\245\014J\001\245\001\245\001\245\001\245\001\245\001\245\005\138\b\146\001\245\001\245\001\245\b\170\004r\000\238\015\162\001\245\001\245\001\245\001\245\ne\ne\026\182\002\226\015\202\ne\003\254\002\190\ne\025\146\002\138\ne\ne\ne\015\230\002\246\ne\015\234\ne\ne\ne\016\018\ne\ne\ne\001\210\025\198\ne\016&\002\250\ne\ne\ne\ne\ne\ne\ne\016F\002\254\016V\003\150\016j\ne\ne\ne\ne\ne\016\150\003\222\001\190\016\238\ne\016\246\ne\ne\002\178\027N\017\246\003\230\ne\ne\ne\bz\b~\b\138\018\n\ne\005v\ne\ne\ne\ne\ne\ne\ne\ne\ne\018\014\ne\ne\006\134\ne\ne\018\210\018\234\019r\019v\005\130\005\134\ne\ne\ne\019\174\ne\ne\ne\ne\ne\019\178\ne\ne\019\218\ne\ne\019\222\ne\ne\ne\ne\ne\ne\005\138\b\146\ne\ne\ne\b\170\004r\019\246\020\162\ne\ne\ne\ne\na\na\020\166\020\202\020\206\na\020\222\002\190\na\020\238\002\138\na\na\na\020\250\002\246\na\021.\na\na\na\0212\na\na\na\001\210\021\130\na\021\170\002\250\na\na\na\na\na\na\na\021\174\002\254\021\190\003\150\022\014\na\na\na\na\na\022.\003\222\001\190\022n\na\022\146\na\na\002\178\022\162\022\202\003\230\na\na\na\bz\b~\b\138\022\206\na\005v\na\na\na\na\na\na\na\na\na\022\218\na\na\022\234\na\na\023\006\023\022\023*\023V\005\130\005\134\na\na\na\023Z\na\na\na\na\na\023f\na\na\023v\na\na\023\138\na\na\na\na\na\na\005\138\b\146\na\na\na\b\170\004r\024~\024\214\na\na\na\na\0029\0029\024\254\025f\025v\0029\025\206\002\190\0029\025\222\002\138\0029\t\190\0029\025\234\002\246\0029\026N\0029\0029\0029\026b\0029\0029\0029\001\210\002\225\t\246\026\146\002\250\0029\0029\0029\0029\0029\t\254\0029\026\154\002\254\026\214\003\150\004Y\0029\0029\0029\0029\0029\026\254\003\222\001\190\0276\0029\000\n\0029\0029\002\178\027f\027r\003\230\0029\0029\0029\bz\b~\b\138\027z\012\166\005v\0029\0029\0029\0029\0029\0029\0029\0029\0029\027\131\004\197\0029\002\225\0029\0029\004Y\006\202\002\190\004Y\005\130\005\134\0029\0029\0029\027\147\0029\0029\0029\0029\027\166\000\238\004Y\0029\004\197\0029\0029\004Y\0029\0029\0029\0029\0029\0029\005\138\b\146\0029\0029\0029\b\170\004r\027\194\004Y\0029\0029\0029\0029\004Y\007f\004Y\003\162\004Y\004Y\004Y\004Y\004Y\004Y\004Y\018j\004Y\000\238\004Y\004Y\027\223\004Y\004Y\004Y\017&\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\027\239\004Y\004Y\028\011\028_\004Y\004Y\000\238\004Y\004Y\004Y\004Y\004Y\007\226\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\000\238\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\000\238\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\b\229\004N\004Y\028{\028\134\004Y\004Y\004Y\000\238\004Y\000\n\028\187\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\015\150\022\134\004Y\004Y\002\225\002\225\007\238\004Y\004B\007\005\028\207\004Y\004Y\028\215\007\246\017*\022\246\002\225\000\238\004Y\004Y\004Y\007\250\029\019\004Y\004Y\004Y\004Y\007\005\000\169\004Y\000\169\007\005\000\169\000\169\000\169\000\169\000\169\000\169\000\169\029\027\000\169\023\170\000\169\000\169\000\000\000\169\000\169\000\000\000\000\000\169\000\169\000\000\000\169\000\169\000\169\000\169\000\000\000\169\004R\000\169\000\169\b\229\000\000\000\169\000\169\005\165\000\169\000\169\000\169\000\238\000\169\t\025\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\000\b\234\000\169\000\169\000\000\000\000\000\169\000\169\002\014\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\002\018\007\005\000\169\015\190\tE\000\169\002\138\000\169\001\210\000\169\005\165\002\190\000\000\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\000\000\000\000\000\000\169\003R\018\186\tE\005\165\000\222\000\000\007J\001\222\000\169\000\000\002\226\000\000\014\210\002\178\000\169\000\169\000\169\000\169\000\000\015\194\000\169\000\169\000\169\000\169\0021\0021\004q\000\000\003\162\0021\000\000\002\190\0021\015\206\002\138\0021\001b\0021\000\000\002\246\0021\007N\0021\0021\0021\000\000\0021\0021\0021\001\210\001z\000\000\001\138\002\250\0021\0021\0021\0021\0021\005\134\0021\000\000\002\254\000\000\003\150\b\209\0021\0021\0021\0021\0021\004q\003\222\b\142\000\000\0021\000\000\0021\0021\002\178\000\000\006\146\003\230\0021\0021\0021\bz\b~\b\138\t\166\n\006\005v\0021\0021\0021\0021\0021\0021\0021\0021\0021\006\150\t\166\n\006\b\209\0021\0021\000\000\t\174\000\000\n\014\005\130\005\134\0021\0021\0021\000\000\0021\0021\0021\0021\t\174\000\000\n\014\0021\b\209\0021\0021\000\000\0021\0021\0021\0021\0021\0021\005\138\b\146\0021\0021\0021\b\170\004r\000\238\002\225\0021\0021\0021\0021\002E\002E\002\225\002\225\000\000\002E\000\000\000\000\002E\000\000\b\209\002E\000\000\002E\004\254\000\000\002E\b\209\002E\002E\002E\000\n\002E\002E\002E\000\000\028k\000\000\000\000\000\n\002E\002E\002E\002E\002E\000\000\002E\002\225\006F\004\193\000\000\005\234\002E\002E\002E\002E\002E\000\000\006f\002\225\000\000\002E\006r\002E\002E\000\000\000\000\002\225\006\198\002E\002E\002E\004\193\000\000\006\241\tA\000\000\000\000\002E\002E\002E\002E\002E\002E\002E\002E\002E\000\000\t\166\n\006\000\000\002E\002E\006\206\014\234\000\000\002\190\006\241\tA\002E\002E\002E\000\000\002E\002E\002E\002E\t\174\002\190\n\014\002E\002\138\002E\002E\001\210\002E\002E\002E\002E\002E\002E\b\205\000\000\002E\002E\002E\000\000\022v\000\000\000\000\002E\002E\002E\002E\002A\002A\000\000\023\178\003\162\002A\023\182\003\174\002A\000\000\002\178\002A\000\000\002A\000\000\0186\002A\023\230\002A\002A\002A\t\178\002A\002A\002A\012f\b\205\000\000\000\000\015\206\002A\002A\002A\002A\002A\r\166\002A\r\178\000\000\012\130\023\246\012\146\002A\002A\002A\002A\002A\b\205\b\198\001\190\001*\002A\000\000\002A\002A\005\134\002\225\002\225\014\146\002A\002A\002A\014\166\014\186\014\202\000\000\000\000\000\000\002A\002A\002A\002A\002A\002A\002A\002A\002A\000\000\t\166\n\006\b\205\002A\002A\000\n\004\254\000\000\001\206\b\205\000\000\002A\002A\002A\000\000\002A\002A\002A\002A\t\174\000\000\n\014\002A\000\000\002A\002A\001\210\002A\002A\002A\002A\002A\002A\002\225\000\000\002A\002A\002A\000\000\019z\000\000\000\000\002A\002A\002A\002A\0025\0025\000\000\000\000\002\162\0025\019\242\003\174\0025\000\000\002\178\0025\000\000\0025\000\000\000\000\0025\020\n\0025\0025\0025\012\178\0025\0025\0025\002\225\002\225\017R\000\000\000\000\0025\0025\0025\0025\0025\012\202\0025\012\226\000\000\000\000\002\225\rB\0025\0025\0025\0025\0025\000\000\b\198\015\n\000\000\0025\000\n\0025\0025\rV\000\000\rj\014\146\0025\0025\0025\014\166\014\186\014\202\000\000\000\000\000\000\0025\0025\0025\0025\0025\0025\0025\0025\0025\000\000\t\166\n\006\002\225\0025\0025\000\000\000\000\000\000\000\000\000\238\000\000\0025\0025\0025\000\000\0025\0025\0025\0025\t\174\000\000\n\014\0025\000\000\0025\0025\000\000\0025\0025\0025\0025\0025\0025\000\000\000\000\0025\0025\0025\000\000\t\146\000\000\000\000\0025\0025\0025\0025\002=\002=\000\000\000\000\000\000\002=\012\177\006F\002=\000\000\005\234\002=\000\000\002=\000\000\000\000\002=\006f\002=\002=\002=\006r\002=\002=\002=\012\177\012\177\000\000\000\000\012\177\002=\002=\002=\002=\002=\000\000\002=\b=\000\000\000\000\b=\000\000\002=\002=\002=\002=\002=\000\000\000\000\000\000\000\000\002=\000\000\002=\002=\000\000\000\000\000\000\022\254\002=\002=\002=\000\000\000\000\000\000\000\000\000\000\000\238\002=\002=\002=\002=\002=\002=\002=\002=\002=\000\000\b=\002=\000\000\002=\002=\000\000\000\000\000\000\000\000\000\000\000\000\002=\002=\002=\b=\002=\002=\002=\002=\012\177\000\000\005\021\002=\000\000\002=\002=\002\225\n&\002=\002=\002=\002=\002=\005\021\t\226\002=\002=\002=\000\000\000\000\b=\000\000\002=\002=\002=\002=\tM\tM\000\000\000\000\000\000\tM\000\000\000\000\tM\000\n\000\000\tM\000\000\tM\000\000\000\000\nR\005\021\tM\nv\tM\b=\tM\tM\tM\002\225\002\225\018\146\000\000\017\194\n\138\n\162\n\170\n\146\n\178\000\000\tM\002\225\002\225\000\000\002\225\000\000\tM\tM\n\186\n\194\tM\005\021\b\029\000\000\005\021\tM\000\n\n\202\tM\000\000\000\000\000\000\000\000\tM\tM\000\238\000\000\000\000\000\000\000\000\000\000\002\246\tM\tM\nZ\n\154\n\210\n\218\n\234\tM\tM\002\174\012\245\tM\002\225\tM\n\242\000\000\003\018\000\000\000\000\000\238\000\000\tM\tM\n\250\000\000\tM\tM\tM\tM\003\030\012\245\000\000\tM\000\000\tM\tM\002J\011\026\tM\011\"\n\226\tM\tM\000\000\000\000\tM\011\002\tM\000\000\002N\000\000\005v\tM\tM\011\n\011\018\002q\002q\000\000\000\000\000\000\002q\012\185\006F\002q\000\000\005\234\002q\000\000\002q\000\000\005\130\002q\006f\002q\002q\002q\006r\002q\002q\002q\012\185\012\185\000\000\000\000\012\185\002q\002q\002q\002q\002q\000\000\002q\015\190\000\000\005\138\002\138\000\000\002q\002q\002q\002q\002q\000\000\000\000\000\000\000\000\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\002q\002q\002q\000\000\000\000\000\000\000\000\000\000\000\238\002q\002q\nZ\002q\002q\002q\002q\002q\002q\000\000\015\194\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\015\206\002q\002q\002q\002q\012\185\000\000\001\206\002q\000\000\002q\002q\000\000\002q\002q\002q\002q\002q\002q\026\130\000\000\002q\002q\002q\000\000\000\000\005\134\000\000\002q\002q\002q\002q\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002\190\002Y\000\000\000\000\002Y\000\000\002Y\003b\000\000\002Y\002\162\002Y\002Y\002Y\025\242\002Y\002Y\002Y\001\210\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\002Y\015\190\000\000\000\000\002\138\000\000\002Y\002Y\002Y\002Y\002Y\004\154\003\138\000\000\004\241\002Y\000\000\002Y\002Y\002\178\000\000\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\nZ\002Y\002Y\002Y\002Y\002Y\002Y\000\000\015\194\002Y\000\000\002Y\002Y\0072\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\015\206\002Y\002Y\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\002Y\002Y\002Y\002Y\002Y\002Y\012\181\000\000\002Y\002Y\002Y\000\000\000\000\005\134\000\000\002Y\002Y\002Y\002Y\002e\002e\000\000\000\000\000\000\002e\012\181\012\181\002e\000\000\012\181\002e\000\000\002e\000\000\000\000\nR\000\000\002e\002e\002e\021\218\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\n\146\002e\000\000\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002e\000\000\000\238\000\000\000\000\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\nZ\n\154\002e\002e\002e\002e\002e\000\000\012\181\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\000\238\b1\002e\002e\002e\b1\002e\002e\002e\002e\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\002e\002e\000\000\011\214\000\000\000\000\002e\002e\002e\002e\002u\002u\000\000\000\000\000\000\002u\b1\011\222\002u\000\000\011\234\002u\000\000\002u\000\000\000\000\002u\011\246\002u\002u\002u\012\002\002u\002u\002u\000\000\000\000\b1\000\000\000\000\002u\002u\002u\002u\002u\000\000\002u\000\000\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002u\000\000\000\000\000\000\000\000\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\002u\002u\002u\000\000\000\000\004\254\000\000\000\000\000\000\002u\002u\nZ\002u\002u\002u\002u\002u\002u\000\000\bJ\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\000\238\b-\002u\002u\002u\b-\002u\002u\002u\002u\000\000\bN\000\000\002u\000\000\002u\002u\000\000\002u\002u\002u\002u\002u\002u\000\000\000\000\002u\002u\002u\000\000\007\201\000\000\000\000\002u\002u\002u\002u\002U\002U\b>\000\000\000\000\002U\b-\007\201\002U\000\000\005\234\002U\000\000\002U\000\000\000\238\002U\007\201\002U\002U\002U\007\201\002U\002U\002U\000\000\000\000\b-\000\000\000\000\002U\002U\002U\002U\002U\000\000\002U\000\000\000\000\007\025\000\000\000\000\002U\002U\002U\002U\002U\000\000\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\007\025\002U\002U\002U\007\025\bR\004\254\000\000\000\000\000\000\002U\002U\nZ\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\000\000\007\229\000\000\002U\002U\002U\000\000\002U\002U\002U\002U\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\002U\002U\000\000\007\229\000\000\000\000\002U\002U\002U\002U\002a\002a\000\000\000\000\000\000\002a\005f\007\229\002a\000\000\005\234\002a\000\000\002a\000\000\000\000\nR\007\229\002a\002a\002a\007\229\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\n\146\002a\000\000\002a\000\000\000\000\007\t\000\000\000\000\002a\002a\002a\002a\002a\000\000\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\007\t\002a\002a\002a\007\t\000\000\000\000\000\000\000\000\000\000\002a\002a\nZ\n\154\002a\002a\002a\002a\002a\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\000\000\000\238\000\000\002a\002a\002a\000\000\002a\002a\002a\002a\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\002a\002a\002a\002a\002a\002a\000\000\000\000\002a\002a\002a\000\000\b\001\000\000\000\000\002a\002a\002a\002a\002]\002]\000\000\000\000\000\000\002]\b\134\006F\002]\000\000\005\234\002]\000\000\002]\000\000\000\000\nR\b\001\002]\002]\002]\b\001\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\n\146\002]\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\002]\002]\000\000\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\000\000\000\000\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\nZ\n\154\002]\002]\002]\002]\002]\000\000\000\000\002]\000\000\002]\002]\000\000\000\000\000\000\000\000\007\249\000\000\002]\002]\002]\000\000\002]\002]\002]\002]\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\002]\002]\002]\002]\002]\002]\000\000\000\000\002]\002]\002]\000\000\007\249\000\000\000\000\002]\002]\002]\002]\002\133\002\133\000\000\000\000\000\000\002\133\000\000\012\026\002\133\000\000\007\249\002\133\000\000\002\133\000\000\000\000\nR\007\249\002\133\002\133\002\133\007\249\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\133\000\000\000\000\000\000\000\000\000\000\002\133\002\133\n\186\n\194\002\133\000\000\000\000\000\000\000\000\002\133\000\000\n\202\002\133\000\000\000\000\000\000\000\000\002\133\002\133\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\nZ\n\154\n\210\n\218\n\234\002\133\002\133\000\000\000\000\002\133\000\000\002\133\n\242\000\000\000\000\000\000\000\000\000\238\000\000\002\133\002\133\n\250\000\000\002\133\002\133\002\133\002\133\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\002\133\002\133\002\133\n\226\002\133\002\133\000\000\000\000\002\133\011\002\002\133\000\000\007\197\000\000\000\000\002\133\002\133\011\n\011\018\002m\002m\000\000\000\000\000\000\002m\000\000\007\197\002m\000\000\005\234\002m\000\000\002m\000\000\000\000\nR\007\197\002m\002m\002m\007\197\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\n\146\002m\000\000\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\002m\002m\000\000\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\000\000\000\000\000\000\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\000\000\002m\002m\nZ\n\154\002m\002m\002m\002m\002m\000\000\000\000\002m\000\000\002m\002m\000\000\000\000\000\000\000\000\000\238\000\000\002m\002m\002m\000\000\002m\002m\002m\002m\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\002m\002m\002m\002m\002m\002m\000\000\000\000\002m\002m\002m\000\000\014b\000\000\000\000\002m\002m\002m\002m\002i\002i\000\000\000\000\000\000\002i\000\000\011\222\002i\000\000\011\234\002i\000\000\002i\000\000\000\000\nR\011\246\002i\002i\002i\012\002\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\n\146\002i\000\000\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\nZ\n\154\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\002i\002i\002i\002i\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002}\002}\000\000\000\000\000\000\002}\000\000\002\014\002}\000\000\002\138\002}\000\000\002}\000\000\000\000\nR\000\000\002}\002}\002}\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002}\000\000\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\n\186\n\194\002}\000\000\027\158\001\222\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\002}\000\238\015\206\000\000\000\000\000\000\000\000\000\000\002}\002}\nZ\n\154\n\210\n\218\002}\002}\002}\000\000\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\000\000\005\134\002}\002}\002}\000\000\002}\002}\002}\002}\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\002}\002}\002}\n\226\002}\002}\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002Q\002Q\000\000\000\000\000\000\002Q\000\000\003\174\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\nR\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\n\146\002Q\000\000\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002Q\000\000\005\190\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\003\246\002Q\002Q\002Q\006\154\000\000\004\002\000\000\000\000\000\000\002Q\002Q\nZ\n\154\002Q\002Q\002Q\002Q\002Q\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\002Q\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\002Q\002Q\002Q\002Q\002Q\002Q\000\000\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002M\002M\000\000\000\000\000\000\002M\000\000\002\190\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\nR\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002M\000\000\002M\000\000\000\000\000\000\000\000\000\000\002M\002M\n\186\n\194\002M\000\000\n\018\003\162\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\002M\002M\000\238\012>\000\000\012N\000\000\000\000\000\000\002M\002M\nZ\n\154\n\210\n\218\002M\002M\002M\000\000\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\002M\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\002M\002M\002M\n\226\002M\002M\000\000\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\190\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\nR\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\n\186\n\194\002\169\000\000\012\254\003\162\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\r\018\000\000\r&\000\000\000\000\000\000\002\169\002\169\nZ\n\154\n\210\002\169\002\169\002\169\002\169\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\002\169\002\169\002\169\n\226\002\169\002\169\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002I\002I\000\000\000\000\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\000\000\002I\000\000\000\000\nR\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002I\000\000\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\n\186\n\194\002I\000\000\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\002I\002I\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\nZ\n\154\n\210\n\218\002I\002I\002I\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\002I\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\002I\002I\002I\n\226\002I\002I\000\000\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002\129\002\129\000\000\000\000\000\000\002\129\000\000\000\000\002\129\000\000\000\000\002\129\000\000\002\129\000\000\000\000\nR\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\n\186\n\194\002\129\000\000\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\nZ\n\154\n\210\n\218\002\129\002\129\002\129\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\n\226\002\129\002\129\000\000\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002y\002y\000\000\000\000\000\000\002y\000\000\000\000\002y\000\000\000\000\002y\000\000\002y\000\000\000\000\nR\000\000\002y\002y\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002y\000\000\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\n\186\n\194\002y\000\000\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\002y\002y\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\nZ\n\154\n\210\n\218\002y\002y\002y\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\002y\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\002y\002y\002y\n\226\002y\002y\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002\137\002\137\000\000\000\000\000\000\002\137\000\000\000\000\002\137\000\000\000\000\002\137\000\000\002\137\000\000\000\000\nR\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n\186\n\194\002\137\000\000\000\000\000\000\000\000\002\137\000\000\n\202\002\137\000\000\000\000\000\000\000\000\002\137\002\137\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\nZ\n\154\n\210\n\218\n\234\002\137\002\137\000\000\000\000\002\137\000\000\002\137\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n\250\000\000\002\137\002\137\002\137\002\137\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\002\137\002\137\002\137\n\226\002\137\002\137\000\000\000\000\002\137\011\002\002\137\000\000\000\000\000\000\000\000\002\137\002\137\011\n\011\018\002\141\002\141\000\000\000\000\000\000\002\141\000\000\000\000\002\141\000\000\000\000\002\141\000\000\002\141\000\000\000\000\nR\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002\141\000\000\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n\186\n\194\002\141\000\000\000\000\000\000\000\000\002\141\000\000\n\202\002\141\000\000\000\000\000\000\000\000\002\141\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\nZ\n\154\n\210\n\218\n\234\002\141\002\141\000\000\000\000\002\141\000\000\002\141\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n\250\000\000\002\141\002\141\002\141\002\141\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\n\226\002\141\002\141\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\011\n\011\018\002\145\002\145\000\000\000\000\000\000\002\145\000\000\000\000\002\145\000\000\000\000\002\145\000\000\002\145\000\000\000\000\nR\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\002\145\000\000\002\145\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n\186\n\194\002\145\000\000\000\000\000\000\000\000\002\145\000\000\n\202\002\145\000\000\000\000\000\000\000\000\002\145\002\145\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\nZ\n\154\n\210\n\218\n\234\002\145\002\145\000\000\000\000\002\145\000\000\002\145\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n\250\000\000\002\145\002\145\002\145\002\145\000\000\000\000\000\000\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\n\226\002\145\002\145\000\000\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\002\145\002\145\011\n\011\018\t\t\t\t\000\000\000\000\000\000\t\t\000\000\000\000\t\t\000\000\000\000\t\t\000\000\t\t\000\000\000\000\nR\000\000\t\t\t\t\t\t\000\000\t\t\t\t\t\t\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\t\t\000\000\000\000\000\000\000\000\000\000\t\t\t\t\n\186\n\194\t\t\000\000\000\000\000\000\000\000\t\t\000\000\n\202\t\t\000\000\000\000\000\000\000\000\t\t\t\t\000\238\000\000\000\000\000\000\000\000\000\000\000\000\t\t\t\t\nZ\n\154\n\210\n\218\n\234\t\t\t\t\000\000\000\000\t\t\000\000\t\t\n\242\000\000\000\000\000\000\000\000\000\000\000\000\t\t\t\t\n\250\000\000\t\t\t\t\t\t\t\t\000\000\000\000\000\000\t\t\000\000\t\t\t\t\000\000\t\t\t\t\t\t\n\226\t\t\t\t\000\000\000\000\t\t\011\002\t\t\000\000\000\000\000\000\000\000\t\t\t\t\011\n\011\018\002\149\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\nR\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n\186\n\194\002\149\000\000\000\000\000\000\000\000\002\149\000\000\n\202\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\nZ\n\154\n\210\n\218\n\234\002\149\002\149\000\000\000\000\002\149\000\000\002\149\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n\250\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\011\026\002\149\011\"\n\226\002\149\002\149\000\000\000\000\002\149\011\002\002\149\000\000\000\000\000\000\000\000\002\149\002\149\011\n\011\018\t\005\t\005\000\000\000\000\000\000\t\005\000\000\000\000\t\005\000\000\000\000\t\005\000\000\t\005\000\000\000\000\nR\000\000\t\005\t\005\t\005\000\000\t\005\t\005\t\005\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\t\005\000\000\000\000\000\000\000\000\000\000\t\005\t\005\n\186\n\194\t\005\000\000\000\000\000\000\000\000\t\005\000\000\n\202\t\005\000\000\000\000\000\000\000\000\t\005\t\005\000\238\000\000\000\000\000\000\000\000\000\000\000\000\t\005\t\005\nZ\n\154\n\210\n\218\n\234\t\005\t\005\000\000\000\000\t\005\000\000\t\005\n\242\000\000\000\000\000\000\000\000\000\000\000\000\t\005\t\005\n\250\000\000\t\005\t\005\t\005\t\005\000\000\000\000\000\000\t\005\000\000\t\005\t\005\000\000\t\005\t\005\t\005\n\226\t\005\t\005\000\000\000\000\t\005\011\002\t\005\000\000\000\000\000\000\000\000\t\005\t\005\011\n\011\018\002\193\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\nR\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n\186\n\194\002\193\000\000\000\000\000\000\000\000\002\193\000\000\n\202\002\193\000\000\000\000\000\000\000\000\002\193\002\193\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\nZ\n\154\n\210\n\218\n\234\002\193\002\193\000\000\000\000\002\193\000\000\002\193\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n\250\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\011\026\002\193\011\"\n\226\002\193\002\193\000\000\000\000\002\193\011\002\002\193\000\000\000\000\000\000\000\000\002\193\002\193\011\n\011\018\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\000\000\002\209\000\000\000\000\nR\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n\186\n\194\002\209\000\000\000\000\000\000\000\000\002\209\000\000\n\202\002\209\000\000\000\000\000\000\000\000\002\209\002\209\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\nZ\n\154\n\210\n\218\n\234\002\209\002\209\000\000\000\000\002\209\000\000\002\209\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n\250\000\000\002\209\002\209\002\209\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\011\026\002\209\011\"\n\226\002\209\002\209\000\000\000\000\002\209\011\002\002\209\000\000\000\000\000\000\000\000\002\209\002\209\011\n\011\018\002\201\002\201\000\000\000\000\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\nR\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n\186\n\194\002\201\000\000\000\000\000\000\000\000\002\201\000\000\n\202\002\201\000\000\000\000\000\000\000\000\002\201\002\201\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\nZ\n\154\n\210\n\218\n\234\002\201\002\201\000\000\000\000\002\201\000\000\002\201\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n\250\000\000\002\201\002\201\002\201\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\011\026\002\201\011\"\n\226\002\201\002\201\000\000\000\000\002\201\011\002\002\201\000\000\000\000\000\000\000\000\002\201\002\201\011\n\011\018\002\181\002\181\000\000\000\000\000\000\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\nR\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n\186\n\194\002\181\000\000\000\000\000\000\000\000\002\181\000\000\n\202\002\181\000\000\000\000\000\000\000\000\002\181\002\181\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\nZ\n\154\n\210\n\218\n\234\002\181\002\181\000\000\000\000\002\181\000\000\002\181\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n\250\000\000\002\181\002\181\002\181\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\011\026\002\181\011\"\n\226\002\181\002\181\000\000\000\000\002\181\011\002\002\181\000\000\000\000\000\000\000\000\002\181\002\181\011\n\011\018\002\189\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\nR\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n\186\n\194\002\189\000\000\000\000\000\000\000\000\002\189\000\000\n\202\002\189\000\000\000\000\000\000\000\000\002\189\002\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\nZ\n\154\n\210\n\218\n\234\002\189\002\189\000\000\000\000\002\189\000\000\002\189\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n\250\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\011\026\002\189\011\"\n\226\002\189\002\189\000\000\000\000\002\189\011\002\002\189\000\000\000\000\000\000\000\000\002\189\002\189\011\n\011\018\002\185\002\185\000\000\000\000\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\nR\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n\186\n\194\002\185\000\000\000\000\000\000\000\000\002\185\000\000\n\202\002\185\000\000\000\000\000\000\000\000\002\185\002\185\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\nZ\n\154\n\210\n\218\n\234\002\185\002\185\000\000\000\000\002\185\000\000\002\185\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n\250\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\011\026\002\185\011\"\n\226\002\185\002\185\000\000\000\000\002\185\011\002\002\185\000\000\000\000\000\000\000\000\002\185\002\185\011\n\011\018\002\197\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\nR\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n\186\n\194\002\197\000\000\000\000\000\000\000\000\002\197\000\000\n\202\002\197\000\000\000\000\000\000\000\000\002\197\002\197\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\nZ\n\154\n\210\n\218\n\234\002\197\002\197\000\000\000\000\002\197\000\000\002\197\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n\250\000\000\002\197\002\197\002\197\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\011\026\002\197\011\"\n\226\002\197\002\197\000\000\000\000\002\197\011\002\002\197\000\000\000\000\000\000\000\000\002\197\002\197\011\n\011\018\002\213\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\nR\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n\186\n\194\002\213\000\000\000\000\000\000\000\000\002\213\000\000\n\202\002\213\000\000\000\000\000\000\000\000\002\213\002\213\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\nZ\n\154\n\210\n\218\n\234\002\213\002\213\000\000\000\000\002\213\000\000\002\213\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n\250\000\000\002\213\002\213\002\213\002\213\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\011\026\002\213\011\"\n\226\002\213\002\213\000\000\000\000\002\213\011\002\002\213\000\000\000\000\000\000\000\000\002\213\002\213\011\n\011\018\002\205\002\205\000\000\000\000\000\000\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\nR\000\000\002\205\002\205\002\205\000\000\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\205\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n\186\n\194\002\205\000\000\000\000\000\000\000\000\002\205\000\000\n\202\002\205\000\000\000\000\000\000\000\000\002\205\002\205\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\nZ\n\154\n\210\n\218\n\234\002\205\002\205\000\000\000\000\002\205\000\000\002\205\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n\250\000\000\002\205\002\205\002\205\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\011\026\002\205\011\"\n\226\002\205\002\205\000\000\000\000\002\205\011\002\002\205\000\000\000\000\000\000\000\000\002\205\002\205\011\n\011\018\002\177\002\177\000\000\000\000\000\000\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\nR\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\177\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n\186\n\194\002\177\000\000\000\000\000\000\000\000\002\177\000\000\n\202\002\177\000\000\000\000\000\000\000\000\002\177\002\177\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\nZ\n\154\n\210\n\218\n\234\002\177\002\177\000\000\000\000\002\177\000\000\002\177\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n\250\000\000\002\177\002\177\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\011\026\002\177\011\"\n\226\002\177\002\177\000\000\000\000\002\177\011\002\002\177\000\000\000\000\000\000\000\000\002\177\002\177\011\n\011\018\002\t\002\t\000\000\000\000\000\000\002\t\000\000\000\000\002\t\000\000\000\000\002\t\000\000\002\t\000\000\000\000\002\t\000\000\002\t\002\t\002\t\000\000\002\t\002\t\002\t\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002\t\000\000\002\t\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002\t\000\000\000\000\000\000\000\000\002\t\000\000\002\t\002\t\000\000\000\000\000\000\000\000\002\t\002\t\002\t\000\000\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002\t\002\t\002\t\002\t\002\t\000\000\000\000\002\t\000\000\002\t\002\t\000\000\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\000\000\002\t\002\t\002\t\002\t\000\000\000\000\000\000\002\t\000\000\002\t\002\t\000\000\002\t\002\t\002\t\002\t\002\t\002\t\000\000\000\000\002\t\002\t\014:\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002%\002%\000\000\000\000\000\000\002%\000\000\000\000\002%\000\000\000\000\002%\000\000\002%\000\000\000\000\nR\000\000\002%\002%\002%\000\000\002%\002%\002%\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002%\000\000\000\000\000\000\000\000\000\000\002%\002%\n\186\n\194\002%\000\000\000\000\000\000\000\000\002%\000\000\n\202\002%\000\000\000\000\000\000\000\000\002%\002%\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002%\002%\nZ\n\154\n\210\n\218\n\234\002%\002%\000\000\000\000\002%\000\000\002%\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002%\002%\n\250\000\000\002%\002%\014R\002%\000\000\000\000\000\000\002%\000\000\002%\002%\000\000\011\026\002%\011\"\n\226\002%\002%\000\000\000\000\002%\011\002\002%\000\000\000\000\000\000\000\000\002%\002%\011\n\011\018\002!\002!\000\000\000\000\000\000\002!\000\000\000\000\002!\000\000\000\000\002!\000\000\002!\000\000\000\000\nR\000\000\002!\002!\002!\000\000\002!\002!\002!\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002!\000\000\000\000\000\000\000\000\000\000\002!\002!\n\186\n\194\002!\000\000\000\000\000\000\000\000\002!\000\000\n\202\002!\000\000\000\000\000\000\000\000\002!\002!\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002!\002!\nZ\n\154\n\210\n\218\n\234\002!\002!\000\000\000\000\002!\000\000\002!\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002!\002!\n\250\000\000\002!\002!\002!\002!\000\000\000\000\000\000\002!\000\000\002!\002!\000\000\011\026\002!\011\"\n\226\002!\002!\000\000\000\000\002!\011\002\002!\000\000\000\000\000\000\000\000\002!\002!\011\n\011\018\002\173\002\173\000\000\000\000\000\000\002\173\000\000\000\000\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\nR\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\n\138\n\162\n\170\n\146\n\178\000\000\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\n\186\n\194\002\173\000\000\000\000\000\000\000\000\002\173\000\000\n\202\002\173\000\000\000\000\000\000\000\000\002\173\002\173\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\nZ\n\154\n\210\n\218\n\234\002\173\002\173\000\000\000\000\002\173\000\000\002\173\n\242\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\n\250\000\000\002\173\002\173\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\011\026\002\173\011\"\n\226\002\173\002\173\000\000\000\000\002\173\011\002\002\173\000\000\000\000\000\000\000\000\002\173\002\173\011\n\011\018\002\021\002\021\000\000\000\000\000\000\002\021\000\000\000\000\002\021\000\000\000\000\002\021\000\000\002\021\000\000\000\000\002\021\000\000\002\021\002\021\002\021\000\000\002\021\002\021\002\021\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\021\000\000\002\021\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\021\000\000\000\000\000\000\000\000\002\021\000\000\002\021\002\021\000\000\000\000\000\000\000\000\002\021\002\021\002\021\000\000\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\021\002\021\002\021\002\021\002\021\000\000\000\000\002\021\000\000\002\021\002\021\000\000\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\000\000\002\021\002\021\002\021\002\021\000\000\000\000\000\000\002\021\000\000\002\021\002\021\000\000\002\021\002\021\002\021\002\021\002\021\002\021\000\000\000\000\002\021\002\021\014:\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\025\002\025\000\000\000\000\000\000\002\025\000\000\000\000\002\025\000\000\000\000\002\025\000\000\002\025\000\000\000\000\002\025\000\000\002\025\002\025\002\025\000\000\002\025\002\025\002\025\000\000\000\000\006>\000\000\000\000\002\025\002\025\002\025\002\025\002\025\000\000\002\025\000\000\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\002\025\006B\000\000\000\000\000\000\002\025\000\000\002\025\002\025\000\000\000\000\000\000\000\000\002\025\002\025\002\025\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\002\025\002\025\002\025\002\025\002\025\000\000\000\000\002\025\000\000\002\025\002\025\000\000\000\000\000\000\000\000\000\000\000\238\002\025\002\025\002\025\000\000\002\025\002\025\002\025\002\025\000\000\000\000\000\000\002\025\000\000\002\025\002\025\000\000\002\025\002\025\002\025\002\025\002\025\002\025\000\000\000\000\002\025\002\025\014:\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\001\006\000\000\000\006\000\000\007)\000\000\002\186\002\190\006F\002\234\002\138\005\234\006R\000\000\000\000\002\246\001\n\000\000\006f\000\000\002\150\000\000\006r\007)\000\000\001\210\003\142\007)\002\190\003\226\001\018\b\206\b\210\001\030\001\"\003b\000\000\000\000\002\254\000\000\003\150\bB\016\186\000\000\b\246\b\250\001\210\003\210\003\222\003\234\b\254\007\030\000\000\001:\000\000\002\178\000\000\000\000\003\230\000\000\000\000\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\003\138\001>\001B\001F\001J\001N\000\000\002\178\t\018\001R\000\000\007\029\000\000\001V\000\000\t\030\t6\t\130\005\130\005\134\000\000\000\000\001Z\000\000\000\000\000\000\007)\000\000\001^\002\225\007\029\000\000\000\000\019N\007\029\0072\000\000\000\000\001\154\0062\000\000\t\202\005\138\b\146\t\214\001\158\000\000\014\130\004r\t\150\001\006\001\166\000\006\001\170\001\174\025\170\002\186\002\190\000\n\002\234\002\138\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\b\202\000\000\000\238\000\000\002\225\001\210\000\000\000\000\000\000\003\226\001\018\b\206\b\210\001\030\001\"\000\000\002\225\002\225\002\254\000\000\003\150\000\000\b\214\000\000\b\246\b\250\000\238\003\210\003\222\003\234\b\254\007\030\000\000\001:\000\000\002\178\007\001\000\000\003\230\000\000\000\000\000\000\bz\b~\b\138\b\158\006F\005v\000\000\005\234\001>\001B\001F\001J\001N\007\001\006f\t\018\001R\007\001\006r\000\000\001V\000\000\t\030\t6\t\130\005\130\005\134\000\000\006F\001Z\000\000\005\234\025\174\000\000\000\000\001^\000\000\000\000\006f\000\000\000\000\000\000\006r\000\000\000\000\001\154\006\134\000\000\000\000\005\138\b\146\012\233\001\158\000\000\014\130\004r\t\150\004\133\001\166\000\006\001\170\001\174\000\246\002\186\002\190\002\194\002\234\002\138\000\000\000\000\000\000\012\233\002\246\000\000\002&\003j\000\000\002*\000\000\004\133\000\000\003n\001\210\000\000\017\186\007\001\002\250\000\000\003r\003v\0026\000\000\000\000\003z\000\000\002\254\000\000\003\150\000\000\017N\000\000\003\202\003\206\004\026\003\210\003\222\003\234\003\242\007\030\000\000\000\000\017\178\002\178\000\000\000\000\003\230\017\202\002B\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\210\000\000\t\018\000\000\t5\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\017\230\018\"\000\000\000\000\004\133\004\133\000\000\000\000\000\000\006\178\004\017\000\000\t5\000\000\000\000\002F\012\233\012\213\000\000\000\000\018^\022Z\005\138\b\146\016\166\000\181\000\000\b\170\004r\t\150\000\181\000\000\002\190\000\181\000\000\002\138\012\233\t\190\000\000\002&\002\246\000\000\002*\000\181\000\000\000\181\000\000\000\181\000\000\000\181\001\210\000\238\t\246\000\000\002\250\0026\000\000\000\000\002>\012\213\t\254\000\181\000\000\002\254\000\000\003\150\000\000\000\181\000\000\000\000\000\000\000\181\000\000\003\222\001\190\015\190\000\181\000\000\002\138\000\181\002\178\004\017\002B\003\230\000\181\000\181\000\181\bz\b~\b\138\000\000\012\166\005v\000\181\000\181\006F\022\002\000\000\005\234\tR\000\181\000\000\000\000\t5\000\181\006f\000\000\000\000\000\000\006r\000\000\000\000\005\130\005\134\000\181\000\181\015\194\000\000\000\181\000\181\000\000\000\000\000\000\000\000\000\000\000\000\002F\000\000\000\181\000\000\015\206\000\000\022&\000\000\000\181\000\181\005\138\b\146\000\000\000\000\000\205\b\170\004r\000\000\000\181\000\205\000\181\002\190\000\205\000\000\002\138\000\000\t\190\000\000\000\000\002\246\005\134\000\000\000\205\000\000\000\205\000\000\000\205\000\000\000\205\001\210\0222\t\246\000\000\002\250\000\000\000\000\000\000\000\000\000\000\t\254\000\205\000\000\002\254\000\000\003\150\000\000\000\205\021\198\000\000\000\000\000\205\000\000\003\222\001\190\000\000\000\205\000\000\000\000\000\205\002\178\000\000\000\000\003\230\000\205\000\205\000\205\bz\b~\b\138\000\000\012\166\005v\000\205\000\205\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\205\000\205\000\000\000\000\000\205\000\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\205\000\205\005\138\b\146\000\000\000\000\000\000\b\170\004r\000\000\000\205\000\000\000\205\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\000:\000\000\000\000\000>\016\210\000\000\000\000\000B\000\000\015\190\000\000\002\014\002\138\000\000\000F\000\000\000\000\000\000\000\000\000\000\000J\002\018\000N\000R\000V\000Z\000^\000b\000f\001\210\000\000\000\000\000j\000n\000\000\000r\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\015\194\000z\007J\001\222\000~\000\130\000\000\000\000\000\000\002\178\000\000\000\134\000\138\000\142\015\206\000\000\022\006\000\000\000\000\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\001\021\000\000\000\174\000\178\000\182\001\021\000\000\000\000\000\186\007N\000\190\000\194\005\134\000\000\000\000\000\000\000\000\000\000\000\198\000\000\000\202\000\000\022\018\000\000\001\021\003\225\000\206\000\210\000\000\000\214\003\225\003\014\002\190\003\225\000\000\002\138\000\000\006\238\000\000\021\198\002\246\000\000\000\000\003\225\000\000\000\000\001\021\003\225\003\n\003\225\001\210\007\209\007\014\000\000\001\021\000\000\000\000\003\018\000\000\001\021\tB\003\225\000\000\n\233\000\000\000\000\000\000\003\225\001\021\001\021\003\030\000\000\000\000\0116\001\190\000\000\003\225\000\000\000\000\003\225\002\178\007\209\000\000\003\246\003\225\003\225\n\229\003\250\000\000\004\002\000\000\011F\005v\n\233\001\021\007\209\000\000\000\000\007\209\t\006\003\225\003\225\000\000\001\021\005z\007\209\000\000\n\233\000\000\007\209\n\233\011\194\005\130\005\134\003\225\003\225\011N\n\233\003\225\003\225\000\000\n\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\229\t\202\000\000\n\229\011v\003\225\005\138\000\000\000\000\000\000\n\229\000\000\004r\t!\n\229\000\006\003\225\000\000\000\246\002\186\002\190\002\194\002\234\002\138\000\000\000\000\000\000\000\000\002\246\000\000\000\000\004\165\000\000\t!\000\000\t!\t!\003n\001\210\000\000\000\000\000\000\002\250\000\000\003r\003v\000\000\000\000\000\000\003z\000\000\002\254\000\000\003\150\000\000\017N\000\000\003\202\003\206\000\000\003\210\003\222\003\234\003\242\007\030\000\000\000\000\017\178\002\178\000\000\000\000\003\230\017\202\000\000\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\210\000\000\t\018\000\000\028\142\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\017\230\018\"\000\000\000\006\028\175\015\022\000\246\002\186\002\190\002\194\002\234\002\138\000\000\000\000\000\000\000\000\002\246\000\000\000\000\028\222\000\000\022Z\005\138\b\146\t!\003n\001\210\b\170\004r\t\150\002\250\000\000\003r\003v\000\000\000\000\000\000\003z\000\000\002\254\000\000\003\150\000\000\017N\000\000\003\202\003\206\000\000\003\210\003\222\003\234\003\242\007\030\000\000\017\014\017\178\002\178\000\000\000\000\003\230\017\202\002\014\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\002\018\000\000\000\000\000\000\000\000\017\210\000\000\t\018\001\210\028\142\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\017\230\018\"\000\000\000\000\004\173\000\000\003R\000\000\000\000\000\000\001\006\000\000\007J\001\222\000\000\000\000\003\014\002\190\006\014\002\178\002\138\022Z\005\138\b\146\014\150\002\246\001\n\b\170\004r\t\150\002\150\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003.\001\030\001\"\000\000\000\000\007N\000\000\000\000\002\225\000\000\0032\002\225\001.\006.\000\000\000\000\003*\001\190\0016\002\225\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\002\225\003\250\000\000\004\002\005j\000\n\005v\000\000\002\225\001>\001B\001F\001J\001N\000\000\000\000\000\n\001R\005z\000\000\002\225\001V\000\000\000\000\000\000\002\225\005\130\005\134\000\000\005\202\001Z\002\225\002\225\002\225\002\225\000\000\001^\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\002\225\001\170\001\174\003\014\002\190\tr\002\225\002\138\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\002\150\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003.\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\001.\006.\000\000\000\000\003*\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\000\000\001\170\001\174\003\014\002\190\011:\000\000\002\138\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\002\150\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003.\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\001.\006.\000\000\000\000\003*\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\000\000\001\170\001\174\003\014\002\190\r\230\000\000\002\138\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\002\150\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003.\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\001.\006.\000\000\000\000\003*\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\000\000\005\021\001\166\000\000\001\170\001\174\005\021\005\021\005\021\005\021\001\205\005\021\000\000\005\021\005\021\001\205\000\000\005\021\000\000\005\021\000\000\005\021\005\021\005\021\005\021\005\021\005\021\000\000\005\021\005\021\005\021\000\000\000\000\000\000\001\205\000\000\000\000\005\021\000\000\000\000\000\000\000\000\005\021\005\021\005\021\000\000\000\000\000\000\005\021\005\021\005\021\000\000\005\021\000\000\000\000\005\021\001\205\005\021\000\000\000\000\005\021\005\021\005\021\000\000\001\205\005\021\005\021\005\021\000\000\001\205\001\205\000\238\000\000\000\000\005\021\005\021\005\021\000\000\001\205\001\205\005\021\005\021\000\000\000\000\000\000\005\021\000\000\000\000\005\021\000\000\005\021\005\021\005\021\000\000\005\021\005\021\005\021\005\021\000\000\005\021\005\021\000\000\000\000\000\000\001\205\000\000\000\000\t2\000\000\005\021\020\214\005\021\005\021\001\205\000\000\002\158\005\021\000\000\000\000\000\000\000\000\005\021\005\021\011\001\000\000\005\021\011\001\005\021\005\021\011\001\011\001\012\233\012\213\011\001\000\000\011\001\000\000\000\000\011\001\000\000\000\000\000\000\011\001\011\001\000\000\011\001\011\001\014&\011\001\000\000\011\001\012\233\017\030\000\000\002&\011\001\000\000\002*\011\001\002\014\000\000\000\000\000\000\000\000\0022\000\238\011\001\000\000\011\001\002\018\0026\011\001\011\001\002>\012\213\000\000\000\000\001\210\011\001\000\000\000\000\011\001\000\000\000\000\011\001\011\001\000\000\011\001\000\000\011\001\011\001\000\000\000\000\000\000\003R\000\000\000\000\002B\000\000\000\000\007J\001\222\011\001\000\000\000\000\000\000\000\000\002\178\000\000\006F\011\001\011\001\005\234\000\000\011\001\000\000\011\001\000\000\000\000\006f\000\000\005\166\000\000\006r\000\000\000\000\001\202\001\206\011\001\011\001\000\000\011\001\011\001\000\000\011\001\007N\011\001\000\000\011\001\000\000\011\001\002F\011\001\t\r\t\r\001\210\001\250\001\230\t\r\000\000\001\206\t\r\000\000\000\000\000\000\001\242\000\000\000\000\019z\t\r\000\000\t\r\t\r\t\r\000\000\t\r\t\r\t\r\001\246\020\210\000\000\019\242\000\000\002\166\000\000\002\178\004\030\004*\000\000\t\r\000\000\000\000\020\226\000\000\000\000\t\r\t\r\000\000\000\000\t\r\000\000\000\000\002\162\000\000\t\r\000\000\000\000\t\r\000\000\004:\000\000\000\000\t\r\t\r\t\r\000\000\000\000\000\000\000\000\000\000\000\000\t\r\t\r\000\000\000\000\000\000\000\000\000\000\t\r\000\000\000\000\000\000\004\154\000\000\000\000\t\r\000\000\000\000\000\000\000\000\000\000\000\000\t\r\t\r\t\r\000\000\t\r\t\r\000\000\004q\000\000\000\000\000\000\000\000\004q\000\000\t\r\004q\t\r\t\r\000\000\000\000\000\000\t\r\000\000\000\000\000\000\004q\t\r\000\000\000\000\004q\t\r\004q\t\r\t\r\012\169\012\169\000\000\000\000\004q\012\169\000\000\001\206\012\169\004q\000\000\000\000\000\000\000\000\000\000\004q\004\186\000\000\012\169\012\169\012\169\004B\012\169\012\169\012\169\000\000\000\000\004q\004q\000\000\000\000\000\000\004q\002\226\000\000\000\000\012\169\000\000\000\000\000\000\000\000\000\000\012\169\012\169\000\000\000\000\012\169\000\000\004q\002\162\004q\012\169\000\000\000\000\012\169\000\000\000\000\000\000\004q\012\169\012\169\012\169\004q\004q\002\226\000\238\004q\004q\012\169\012\169\000\000\000\000\004R\004q\000\000\012\169\000\000\000\000\000\000\004\154\000\000\000\000\012\169\004q\000\000\000\000\000\000\000\000\021\218\012\169\012\169\012\169\000\000\012\169\012\169\000\000\007\017\000\000\004q\000\000\000\000\007\017\000\000\012\169\007\017\012\169\012\169\004q\000\000\000\000\012\169\000\000\000\000\000\000\007\017\012\169\000\000\000\000\007\017\012\169\007\017\012\169\012\169\t\017\t\017\000\000\000\000\000\000\t\017\000\000\001\206\t\017\007\017\000\000\000\000\000\000\000\000\000\000\007\017\t\017\000\000\t\017\t\017\t\017\000\000\t\017\t\017\t\017\000\000\000\000\007\017\000\000\000\000\000\000\000\000\007\017\007\017\000\000\000\000\t\017\000\000\000\000\000\000\000\000\000\000\t\017\t\017\000\000\000\000\t\017\000\000\007\017\002\162\000\000\t\017\000\000\000\000\t\017\000\000\000\000\000\000\000\000\t\017\t\017\t\017\007\017\007\017\017b\000\000\007\017\007\017\t\017\t\017\002\225\000\000\000\000\000\000\000\000\t\017\000\000\002\225\000\000\004\154\018\162\000\000\t\017\007\017\000\000\000\000\000\000\000\000\002\225\t\017\t\017\t\017\000\000\t\017\t\017\000\000\000\n\000\000\002\225\002\225\000\000\000\000\002\225\t\017\002\225\t\017\t\017\002\225\002\225\002\225\t\017\002\225\002\225\002\225\002\225\t\017\000\000\002\225\002\225\t\017\002\225\t\017\t\017\002\225\002\225\000\n\000\000\002\225\002\225\002\225\000\000\002\225\000\n\002\225\002\225\000\n\000\000\002\225\007\"\000\n\002\225\002\225\002\225\000\000\015v\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\002\225\000\000\002\225\005E\r)\002\225\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\005E\015\178\002\225\000\000\005E\002\225\002\225\000\000\000\000\000\000\000\000\002\225\002\225\000\000\000\n\000\000\002\225\000\000\002\225\000\000\000\000\000\246\002\225\002\225\002\026\000a\000\000\002\225\002\225\002\225\000a\003~\000a\000a\018b\000\000\002\225\000\000\000\000\000\000\003n\000a\002\225\000a\000a\000\000\000\000\000a\000a\000a\000\000\b\185\018f\000\000\000\000\000\000\000\000\000\000\018\142\r)\r)\000a\000\000\000\000\002\225\000\000\000\000\000a\000a\000\000\017\178\000a\005E\000\000\000a\017\202\000a\000\000\r)\000a\r)\000\000\000\000\000\000\000a\000a\000a\005E\000\000\000\000\005E\019&\000\000\000a\000a\000\000\000\000\007&\000\000\000\000\000a\000a\000\000\000\000\000a\017\230\019:\000a\000\000\004y\000\000\000\000\000\000\000\000\000a\000a\000a\000\000\000a\000a\000\000\000\000\000\000\006\169\b\185\000A\019J\000\000\000a\000A\000A\000a\000A\000A\000\000\000a\000\000\000\000\000A\000\000\000a\000\000\000\000\006\169\000a\000\000\000a\000\000\000A\000\000\000\000\000\000\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000\000\000A\000\000\000A\000\000\000\000\000\000\000A\000A\000\000\000A\000A\000A\000A\000A\000\000\000\000\000\000\000A\000\000\000\000\000A\000\000\000\000\000\000\000A\000A\000A\000A\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\012\233\012\213\000\000\000A\000A\000A\000A\000A\000\000\006\165\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\012\233\000\000\000\000\002&\000=\000\000\002*\000\000\000\000\006\165\000A\000A\000\000\002\206\000=\000A\000A\000A\000=\0026\000=\000=\002>\012\213\000\000\000\000\000\000\000=\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\000=\000=\000=\000\000\000\000\000\000\000=\000\000\002B\000=\000\000\000\000\000\000\000=\000=\000=\000=\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000=\000=\000=\000=\000=\000\000\006\181\000\000\012q\000\000\000\000\000\000\012q\012q\000\000\012q\012q\002F\000\000\000\000\000\000\012q\000\000\000\000\000\000\000\000\006\181\000=\000=\000\000\000\000\012q\000=\000=\000=\012q\000\000\012q\012q\000\000\000\000\000\000\000\000\000\000\012q\000\000\012q\000\000\000\000\000\000\012q\012q\001*\012q\012q\012q\012q\012q\000\000\002\225\000\000\012q\000\000\000\000\012q\000\000\002\225\000\000\012q\012q\012q\012q\000\000\012q\000\000\000\000\000\000\002\225\000\000\000\000\000\000\000\000\000\000\012q\000\000\000\n\000\000\000\000\000\000\000\000\012q\012q\012q\012q\012q\000\000\006\177\000\000\012m\000\000\002\225\000\000\012m\012m\000\000\012m\012m\002\225\000\000\000\000\000\000\012m\000\000\002\225\000\000\000\000\006\177\012q\012q\000\000\000\000\012m\012q\012q\012q\012m\000\000\012m\012m\000\000\000\000\000\000\000\000\000\000\012m\002\225\012m\000\000\000\000\000\000\012m\012m\000\000\012m\012m\012m\012m\012m\000\000\001\202\001\206\012m\000\000\000\000\012m\000\000\000\000\000\000\012m\012m\012m\012m\000\000\012m\000\000\000\000\000\000\000\000\001\210\001\250\001\230\000\000\000\000\012m\000\000\000\000\000\000\000\000\001\242\000\000\012m\012m\012m\012m\012m\002\002\000\000\000\000\000\000\000\000\000\000\001\246\002\154\000\000\000\000\000\000\002\166\000\000\002\178\004\030\004*\012\173\012\173\000\000\000\000\0046\012\173\012m\012m\012\173\000\000\000\000\012m\012m\012m\000\000\000\000\004\138\000\000\012\173\012\173\012\173\004:\012\173\012\173\012\173\000\000\001\029\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\000\000\012\173\000\000\000\000\000\000\000\000\000\000\012\173\012\173\000\000\000\000\012\173\000\000\000\000\000\000\001\029\012\173\000\000\000\000\012\173\000\000\000\000\000\000\000\000\012\173\012\173\012\173\000\000\000\000\000\000\000\000\000\000\000\000\012\173\012\173\000\000\000\000\001\029\000\000\019\130\012\173\000\000\000\000\000\000\012\173\001\029\000\000\012\173\000\000\000\000\001\029\000\000\000\000\000\000\012\173\012\173\012\173\000\000\012\173\012\173\001\029\000\000\000\000\000\000\000\000\000\000\000\000\006\249\012\173\000\006\012\173\012\173\006\249\002\186\002\190\012\173\002\234\002\138\000\000\000\000\012\173\000\000\002\246\000\000\012\173\001\029\012\173\012\173\000\000\003\254\000\000\006\249\001\210\000\000\001\029\000\000\002\250\000\000\003r\003v\000\000\000\000\000\000\000\000\000\000\002\254\000\000\003\150\000\000\000\000\000\000\003\202\003\206\006\249\003\210\003\222\003\234\003\242\007\030\000\000\000\000\006\249\002\178\000\000\000\000\003\230\006\249\006\249\000\238\bz\b~\b\138\b\158\000\000\005v\006\249\006\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\018\000\000\000\000\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\000\000\000\000\000\000\000\000\000\000\006\249\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\006\249\002\186\002\190\000\000\002\234\002\138\000\000\000\000\005\138\b\146\002\246\000\000\000\000\b\170\004r\t\150\024z\014\170\000\000\000\000\001\210\000\000\000\000\000\000\002\250\000\000\003r\003v\000\000\000\000\000\000\r5\000\000\002\254\000\000\003\150\r5\000\000\000\000\003\202\003\206\000\000\003\210\003\222\003\234\003\242\007\030\000\000\000\000\000\000\002\178\000\000\000\000\003\230\000\000\r5\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005I\r)\t\018\000\000\000\000\000\000\000\000\r5\000\000\t\030\t6\t\130\005\130\005\134\000\000\r5\000\000\000\000\000\000\005I\r5\r5\000\238\005I\000\000\000\000\003\029\003\029\000\000\r5\r5\003\029\000\000\000\000\003\029\000\000\005\138\b\146\000\000\000\000\000\000\b\170\004r\t\150\003\029\003\029\003\029\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\r5\000\000\000\000\000\000\000\000\000\000\000\000\003\029\000\000\r5\000\000\000\000\000\000\003\029\004\130\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\r)\r)\003\029\000\000\000\000\000\000\000\000\003\029\003\029\003\029\000\000\000\000\000\000\005I\000\000\000\000\003\029\003\029\000\000\r)\000\000\r)\000\000\003\029\000\000\000\000\000\000\003\029\005I\000\000\003\029\005I\000\000\000\000\000\000\000\000\000\000\003\029\003\029\003\029\004\149\003\029\003\029\000\000\000\000\019\146\000\000\000\000\000\000\000\000\000\000\003\029\000\000\003\029\003\029\000\000\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\003n\011\r\000\000\003\029\011\r\003\029\003\029\003\014\002\190\000\000\000\000\002\138\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\011\r\011\r\019\190\011\r\011\r\000\000\001\210\000\000\007\014\000\000\017\178\000\000\000\000\003\018\000\000\017\202\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\r\019\234\003\030\000\000\000\000\003*\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\011\r\003\250\000\000\004\002\005j\011F\005v\000\000\004\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020N\005z\001\202\001\206\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\011\r\000\000\011\r\000\000\000\000\000\000\000\000\000\000\001\210\001\250\000\000\000\000\000\000\000\000\011\r\000\000\000\000\011\r\011\r\000\000\005\138\000\000\011\r\000\000\011\r\000\000\004r\011\t\011\r\000\000\011\t\001\246\002\170\003\014\002\190\000\000\002\166\002\138\002\178\004\030\004*\000\000\002\246\000\000\000\000\0046\011\t\011\t\000\000\011\t\011\t\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\004:\000\000\000\000\026\138\000\000\000\000\000\000\000\000\011\t\000\000\003\030\000\000\000\000\006\n\001\190\000\000\000\000\000\000\000\000\026v\002\178\000\000\000\000\003\246\000\000\000\000\011\t\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\012\141\000\000\000\000\012\141\000\000\000\000\005\130\005\134\000\000\005\202\011\t\000\000\011\t\012\141\000\000\000\000\000\000\000\000\000\000\012\141\000\000\001\229\001\229\000\000\011\t\000\000\001\229\011\t\011\t\001\229\005\138\012\141\011\t\000\000\011\t\000\000\004r\012\141\011\t\001\229\001\229\001\229\000\000\001\229\001\229\001\229\012\141\000\000\000\000\012\141\000\000\000\000\000\000\000\000\012\141\000\000\000\000\001\229\000\000\000\000\000\000\000\000\000\000\001\229\001\229\000\000\000\000\001\229\000\000\000\000\012\141\000\000\001\229\000\000\012\141\001\229\000\000\000\000\000\000\000\000\001\229\001\229\001\229\000\000\012\141\012\141\000\000\000\000\012\141\001\229\001\229\000\000\000\000\000\000\028\134\000\000\001\229\004\157\000\000\000\000\001\229\000\000\022\130\001\229\000\000\012\141\000\000\000\000\000\000\000\000\001\229\001\229\001\229\000\000\001\229\001\229\000\000\000\000\000\000\000\000\000\000\003n\000\000\000\000\001\229\000\000\001\229\001\229\003\014\002\190\000\000\001\229\002\138\000\000\006\238\000\000\001\229\002\246\000\000\000\000\004\254\000\000\001\229\022\242\000\000\000\000\000\000\001\210\000\000\007\014\000\000\017\178\000\000\000\000\003\018\000\000\017\202\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\150\023\166\003\030\000\000\000\000\0116\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\n\229\003\250\000\000\004\002\000\000\011F\005v\000\000\004\157\000\000\000\000\000\000\000\000\000\000\000\000\004\029\000\000\024\154\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\000\000\011N\005\149\005\149\000\000\000\000\000\000\005\149\000\000\000\000\005\149\000\000\000\000\000\000\000\000\n\229\000\000\000\000\n\229\n\229\005\149\005\138\005\149\000\000\005\149\n\229\005\149\004r\000\000\n\229\004\029\000\000\000\000\000\000\000\000\000\000\000\246\000\000\005\149\002\194\000\000\000\000\000\000\000\000\005\149\005\149\000\000\000\000\000\000\028\222\005\149\000\000\000\000\005\149\000\000\003n\005\149\000\000\000\000\000\000\000\000\005\149\005\149\005\149\000\000\000\000\000\000\003z\000\000\000\000\000\000\000\000\000\000\017N\000\000\000\000\000\000\005\149\005\149\000\000\000\000\005\149\025\026\000\000\001\006\017\178\000\000\000\000\000\000\000\000\017\202\005\149\005\149\005\149\000\000\005\149\005\149\000\000\000\000\000\000\001\n\007\246\000\000\000\000\002\150\000\000\017\210\000\000\005\149\000\000\028\142\005\149\005\149\001\014\001\018\001\022\001\026\001\030\001\"\000\000\017\230\018\"\000\000\005\149\004\173\000\000\001&\000\000\001.\0012\000\000\000\000\000\000\000\000\0016\000\000\000\000\001:\000\000\000\000\000\000\022Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\003e\003e\001R\000\000\000\000\003e\001V\000\000\003e\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\003e\003e\000\000\003e\001^\003e\000\000\003e\003e\000\000\000\000\000\000\000\000\000\000\001\154\027\162\000\000\000\000\003e\003e\003e\001\158\003e\001\162\003e\003e\003e\001\166\000\000\001\170\001\174\005\029\000\000\000\000\003e\000\000\003e\003e\000\000\000\000\000\000\000\000\003e\003e\003e\000\000\000\000\000\000\005!\000\000\000\000\003e\000\000\000\000\003e\000\000\000\000\000\000\003e\003e\003e\003e\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\003e\003e\003e\003e\000\000\003e\000\000\000\000\005\029\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\003e\000\000\003e\003e\005\137\005\137\000\000\000\000\005!\005\137\000\000\000\000\005\137\003e\000\000\003e\003e\000\000\000\000\003e\000\000\000\000\005\137\000\000\005\137\000\000\005\137\000\000\005\137\000\000\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\137\000\000\000\000\000\000\000\000\000\000\005\137\005\137\000\000\000\000\000\000\000\000\b>\000\000\000\000\005\137\000\000\000\000\005\137\000\000\000\000\000\000\000\000\005\137\005\137\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\137\005\137\000\000\000\000\005\137\000\000\t\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\137\005\137\005\137\000\000\005\137\005\137\000\000\000\000\nR\000\000\000\000\012z\t\029\000\000\t\029\t\029\000\000\005\137\000\000\000\000\005\137\005\137\n\138\n\162\n\170\n\146\n\178\000\000\000\000\001\202\002\134\000\000\005\137\002\138\000\000\000\000\n\186\n\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\202\000\000\000\000\001\210\001\250\001\230\002\142\000\000\000\238\000\000\000\000\000\000\000\000\001\242\001\006\000\000\000\000\nZ\n\154\n\210\n\218\n\234\000\000\000\000\000\000\000\000\002\146\002\154\000\000\n\242\001\n\002\166\000\000\002\178\004\030\004*\000\000\000\000\n\250\000\000\021\178\000\000\021\182\001\014\001\018\001\022\001\026\001\030\001\"\000\000\000\000\000\000\011\026\000\000\011\"\n\226\001&\004:\001.\0012\t\029\011\002\000\000\000\000\0016\000\000\005\134\001:\000\000\011\n\011\018\000\000\000\000\000\000\000\000\000\000\021\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\b\153\b\153\001R\021\198\000\000\b\153\001V\000\000\b\153\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\b\153\000\000\b\153\001^\b\153\000\000\b\153\000\000\000\000\000\000\000\000\000\000\000\000\001\154\027\190\000\000\000\000\000\000\b\153\000\000\001\158\000\000\001\162\000\000\b\153\b\153\001\166\000\000\001\170\001\174\000\000\000\000\000\000\b\153\000\000\000\000\b\153\000\000\000\000\000\000\000\000\b\153\b\153\b\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\000\000\b\153\ru\ru\000\000\000\000\000\000\ru\000\000\000\000\ru\b\153\b\153\b\153\000\000\b\153\b\153\000\000\000\000\000\000\ru\000\000\ru\000\000\ru\b\153\ru\000\000\b\153\001\202\001\206\000\000\b\153\000\000\000\000\000\000\000\000\000\000\ru\000\000\000\000\004\254\000\000\b\153\ru\ru\ry\ry\001\210\001\250\004B\ry\000\000\ru\ry\000\000\ru\000\000\000\000\000\000\000\000\ru\ru\ru\ry\000\000\ry\000\000\ry\000\000\ry\001\246\002\162\000\000\000\000\000\000\002\166\ru\002\178\004\030\004*\ru\ry\000\000\000\000\0046\000\000\015\218\ry\ry\000\000\ru\ru\ru\004B\ru\ru\ry\000\000\000\000\ry\004R\004:\000\000\000\000\ry\ry\ry\ru\000\000\000\000\000\000\ru\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ry\000\000\ru\000\000\ry\001\213\000\000\000\000\000\000\000\000\001\213\000\000\001\206\001\213\ry\ry\ry\000\000\ry\ry\000\000\b\249\000\000\001\213\004R\000\000\000\000\001\213\004q\001\213\000\000\ry\000\000\004q\000\000\ry\000\000\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\000\000\ry\001\213\001\213\000\000\000\000\000\000\004q\000\000\002\162\000\000\001\213\000\000\000\000\001\213\000\000\000\000\000\000\000\000\001\213\001\213\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004q\000\000\000\000\000\000\000\000\000\000\001\213\001\213\004q\000\000\004\154\003I\000\000\004q\002\226\000\000\003I\000\000\001\206\003I\001\213\001\213\004q\004q\001\213\001\213\000\000\b\245\000\000\003I\000\000\000\000\000\000\003I\001\213\003I\000\000\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\000\000\001\213\003I\004q\000\000\000\000\000\000\001\213\003I\001\209\000\000\000\000\004q\000\000\000\000\002\162\000\000\003I\000\000\000\000\003I\000\000\000\000\000\000\000\000\003I\003I\003I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003I\003I\000\000\000\000\004\154\003E\000\000\000\000\000\000\000\000\003E\000\000\001\206\003E\003I\003I\000\000\000\000\003I\003I\000\000\b\245\000\000\003E\000\000\000\000\000\000\003E\003I\003E\000\000\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\003I\003E\000\000\000\000\000\000\000\000\003I\003E\001\209\000\000\000\189\000\000\000\000\000\000\002\162\000\189\003E\000\000\000\189\003E\000\000\000\000\000\000\000\000\003E\003E\003E\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\000\000\000\000\000\000\000\003E\003E\000\000\000\000\004\154\000\000\000\189\000\000\000\000\000\000\000\000\000\000\000\189\000\000\003E\003E\000\189\000\000\003E\003E\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\000\003E\000\189\000\189\000\238\000\000\000\000\000\000\003E\000\000\000\000\000\189\000\189\003E\000\000\000\000\000\000\000\000\000\189\003E\000\000\001\001\000\189\000\000\000\000\000\000\001\001\000\000\000\000\001\001\000\000\000\000\000\189\000\189\000\000\000\000\000\189\000\189\000\000\001\001\000\000\001\001\000\000\001\001\000\000\001\001\000\189\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\189\001\001\000\189\000\000\000\000\001\001\000\000\000\000\000\000\000\000\001\001\000\000\000\000\001\001\000\000\000\000\000\000\000\000\001\001\001\001\000\238\000\000\000\000\000\000\000\000\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\197\001\001\000\000\000\000\000\000\000\197\000\000\000\000\000\197\000\000\000\000\001\001\001\001\000\000\000\000\001\001\001\001\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\197\001\001\000\000\000\000\000\000\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\001\001\000\197\001\001\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\197\000\197\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\197\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\193\000\197\000\000\000\000\000\000\000\193\000\000\000\000\000\193\000\000\000\000\000\197\000\197\000\000\000\000\000\197\000\197\000\000\000\193\000\000\000\193\000\000\000\193\000\000\000\193\000\197\000\000\000\000\000\000\000\000\000\000\000\197\000\197\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\197\000\193\000\197\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\193\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\193\000\193\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\193\000\193\000\000\000\000\000\000\000\000\000\000\000\193\000\000\000\000\001\177\000\193\000\000\000\000\000\000\001\177\000\000\000\000\001\177\000\000\000\000\000\193\000\193\000\000\000\000\000\193\000\193\000\000\001\177\000\000\000\000\000\000\001\177\000\000\001\177\000\193\000\000\000\000\000\000\000\000\000\000\000\193\000\193\000\000\000\000\000\000\001\177\001\177\000\000\000\000\000\000\000\193\001\177\000\193\000\000\000\000\000\000\000\000\005\029\000\000\000\000\001\177\000\000\000\000\001\177\000\000\000\000\000\000\000\000\001\177\001\177\001\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\177\000\000\001\202\001\206\001\177\rq\rq\000\000\000\000\000\000\rq\000\000\000\000\rq\001\177\001\177\000\000\000\000\001\177\001\177\000\000\001\210\001\214\rq\005\029\rq\000\000\rq\001\177\rq\000\000\000\000\000\000\000\000\001\177\001\177\000\000\000\000\000\000\000\000\001\177\rq\000\000\000\000\001\246\002\162\001\177\rq\rq\002\166\000\000\002\178\004\030\004*\000\000\000\000\rq\000\000\0046\rq\015\218\000\000\000\000\000\000\rq\rq\rq\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\000\rq\000\000\000\000\000\000\rq\rm\rm\000\000\000\000\000\000\rm\000\000\000\000\rm\rq\rq\rq\000\000\rq\rq\000\000\000\000\000\000\rm\000\000\rm\000\000\rm\000\000\rm\000\000\rq\000\000\000\000\000\000\rq\000\000\000\000\000\000\000\000\000\000\rm\000\000\000\000\004\254\000\000\rq\rm\rm\000\000\000\000\000\000\000\000\000\000\000\000\004y\rm\000\000\000\000\rm\000\246\000\000\000\000\002\026\rm\rm\rm\000\000\000\000\000\000\000\000\000\000\000\000\018b\000\000\000\000\000\000\004y\000\000\003n\rm\000\000\b\157\b\157\rm\000\000\000\000\b\157\000\000\000\000\b\157\018f\000\000\000\000\rm\rm\rm\018\142\rm\rm\b\157\000\000\b\157\000\000\b\157\000\000\b\157\000\000\007\146\017\178\000\000\rm\000\000\000\000\017\202\rm\000\000\000\000\b\157\000\000\000\000\000\000\000\000\000\000\b\157\b\157\rm\000\000\000\000\000\000\019&\000\000\000\000\b\157\000\000\000\000\b\157\000\000\000\000\000\000\000\000\b\157\b\157\000\238\017\230\019:\000\000\000\000\004y\004y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\157\000\000\000\000\000\000\b\157\000\000\007\r\000\000\019J\000\000\000\000\000\000\000\000\000\000\b\157\b\157\b\157\000\000\b\157\b\157\000\000\000\000\nR\000\000\000\000\007\r\000\000\000\000\b\157\007\r\000\000\b\157\000\000\000\000\000\000\b\157\n\138\n\162\n\170\n\146\n\178\000\000\000\000\000\000\000\000\000\000\b\157\001\209\000\000\000\000\n\186\n\194\001\209\000\000\001\206\001\209\000\000\000\000\000\000\n\202\000\000\000\000\000\000\b\245\000\000\001\209\000\000\000\238\000\000\001\209\000\000\001\209\000\000\000\000\000\000\000\000\nZ\n\154\n\210\n\218\n\234\000\000\000\000\001\209\000\000\000\000\000\000\007\r\n\242\001\209\000\000\000\000\000\000\000\000\000\000\000\000\002\162\n\250\001\209\000\000\000\000\001\209\000\000\000\000\000\000\000\000\001\209\001\209\001\209\000\000\000\000\011\026\000\000\011\"\n\226\000\000\000\000\000\000\000\000\000\000\011\002\000\000\001\209\001\209\000\000\000\000\004\154\000\000\011\n\011\018\000\000\000\000\000\000\017\002\000\000\000\000\001\209\001\209\000\000\000\000\001\209\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nR\001\209\000\000\000\000\017\006\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\001\209\n\138\n\162\n\170\n\146\n\178\001\209\000\000\000\000\000\000\000\000\000\000\006V\000\000\000\000\n\186\n\194\000\246\001\202\001\206\002\026\000\000\000\000\000\000\n\202\000\000\000\000\000\000\000\000\000\000\018b\000\000\000\238\000\000\004y\000\000\003n\001\210\001\250\001\230\000\000\nZ\n\154\n\210\n\218\n\234\000\000\001\242\018f\000\000\000\000\000\000\000\000\n\242\018\142\000\000\000\000\000\000\000\000\000\000\001\246\002\154\n\250\000\000\000\000\002\166\017\178\002\178\004\030\004*\000\000\017\202\000\000\000\000\0046\000\000\011\026\017\n\011\"\n\226\017\026\000\000\000\000\000\000\000\000\011\002\000\000\019&\000\000\000\000\000\000\004:\000\000\011\n\011\018\005\193\005\193\000\000\000\000\000\000\005\193\017\230\019:\005\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\193\000\000\005\193\000\000\005\193\000\000\005\193\000\000\000\000\019J\000\000\000\000\000\000\000\000\004n\000\000\004r\000\000\005\193\000\000\000\000\000\000\000\000\000\000\005\193\005\193\005\189\007f\000\000\000\000\b>\005\189\000\000\005\193\005\189\000\000\005\193\000\000\000\000\000\000\000\000\005\193\005\193\000\238\005\189\000\000\005\189\000\000\005\189\000\000\005\189\000\000\000\000\000\000\000\000\000\000\000\000\005\193\000\000\000\000\000\000\005\193\005\189\000\000\000\000\000\000\000\000\000\000\005\189\007\226\000\000\005\193\005\193\005\193\000\000\005\193\005\193\005\189\000\000\000\000\005\189\000\000\000\000\000\000\000\000\005\189\005\189\000\238\005\193\000\000\000\000\000\000\005\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\189\000\000\005\193\000\000\005\189\r}\r}\000\000\000\000\000\000\r}\000\000\000\000\r}\005\189\005\189\005\189\000\000\005\189\005\189\000\000\000\000\000\000\r}\000\000\r}\t\218\r}\000\000\r}\000\000\005\189\001\202\001\206\011z\005\189\000\000\000\000\000\000\000\000\000\000\r}\000\000\000\000\000\000\000\000\005\189\r}\r}\r\129\r\129\001\210\001\214\001\230\r\129\000\000\r}\r\129\000\000\r}\000\000\001\242\000\000\000\000\r}\r}\000\238\r\129\000\000\r\129\000\000\r\129\000\000\r\129\001\246\002\154\000\000\000\000\000\000\002\166\r}\002\178\004\030\004*\r}\r\129\000\000\000\000\0046\000\000\000\000\r\129\007\226\000\000\r}\r}\r}\000\000\r}\r}\r\129\000\000\000\000\r\129\000\000\004:\000\000\000\000\r\129\r\129\000\238\r}\000\000\000\000\000\000\r}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\129\000\000\r}\000\000\r\129\005\213\007f\000\000\000\000\000\000\005\213\000\000\000\000\005\213\r\129\r\129\r\129\000\000\r\129\r\129\000\000\000\000\000\000\005\213\000\000\005\213\000\000\005\213\000\000\005\213\000\000\r\129\006\229\006\229\000\000\r\129\000\000\000\000\000\000\000\000\000\000\005\213\000\000\000\000\000\000\000\000\r\129\005\213\007\226\005\217\005\217\006\229\006\229\006\229\005\217\000\000\005\213\005\217\000\000\005\213\000\000\006\229\000\000\000\000\005\213\005\213\000\238\005\217\000\000\005\217\000\000\005\217\000\000\005\217\006\229\006\229\000\000\000\000\000\000\006\229\005\213\006\229\006\229\006\229\005\213\005\217\000\000\000\000\006\229\000\000\000\000\005\217\005\217\000\000\005\213\005\213\005\213\000\000\005\213\005\213\005\217\000\000\000\000\005\217\000\000\006\229\000\000\000\000\005\217\005\217\005\217\005\213\000\000\000\000\000\000\005\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\217\000\000\005\213\000\000\005\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\217\005\217\005\217\000\000\005\217\005\217\000\246\003\014\002\190\002\194\004\230\002\138\000\000\006\238\000\000\000\000\002\246\005\217\000\000\004\165\000\000\005\217\000\000\000\000\000\000\003n\001\210\000\000\007\014\000\000\000\000\000\000\b\n\003\018\000\000\000\000\tB\003z\000\000\000\000\000\000\000\000\000\000\017N\000\000\000\000\003\030\000\000\000\000\0116\001\190\000\000\025\026\000\000\000\000\017\178\002\178\000\000\000\000\003\246\017\202\000\000\000\000\003\250\000\000\004\002\000\000\011F\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\210\003A\000\000\000\000\005z\000\000\003A\000\000\001\206\003A\000\000\000\000\005\130\005\134\017\230\018\"\011N\000\000\000\000\003A\000\000\000\000\000\000\003A\000\000\003A\000\000\000\000\000\000\000\000\000\000\t\202\000\000\000\000\t\214\022Z\005\138\003A\000\000\000\000\000\000\000\000\004r\003A\000\000\000\000\000\000\000\000\000\000\000\000\002\162\000\000\003A\000\000\000\000\003A\000\000\000\000\000\000\000\000\003A\003A\003A\000\000\003=\000\000\000\000\000\000\000\000\003=\000\000\001\206\003=\000\000\000\000\000\000\003A\003A\000\000\000\000\004\154\000\000\003=\000\000\000\000\000\000\003=\000\000\003=\000\000\003A\003A\000\000\000\000\003A\003A\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\003A\000\000\003=\000\000\000\000\001U\000\000\003A\000\000\002\162\001U\003=\003A\001U\003=\000\000\000\000\000\000\003A\003=\003=\003=\000\000\001U\000\000\001U\000\000\001U\000\000\001U\000\000\000\000\000\000\000\000\000\000\003=\003=\000\000\000\000\004\154\000\000\001U\000\000\000\000\000\000\000\000\000\000\001U\000\000\003=\003=\001U\000\000\003=\003=\000\000\001U\000\000\000\000\001U\000\000\000\000\000\000\003=\001U\001U\000\238\000\000\001Q\000\000\003=\000\000\000\000\001Q\001U\003=\001Q\000\000\000\000\000\000\001U\003=\000\000\000\000\001U\000\000\001Q\000\000\001Q\000\000\001Q\000\000\001Q\000\000\001U\001U\001U\000\000\001U\001U\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\001U\000\000\001Q\000\000\000\000\000\000\001Q\001U\000\000\000\000\000\000\001Q\000\000\000\000\001Q\000\000\000\000\000\000\001U\001Q\001Q\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\001Q\001\141\000\000\000\000\000\000\000\000\001\141\000\000\012\205\001\141\001Q\001Q\001Q\000\000\001Q\001Q\000\000\012\205\000\000\001\141\000\000\001\141\000\000\001\141\001Q\001\141\000\000\000\000\000\000\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\001Q\001\141\012\205\000\000\000\000\000\000\000\000\000\000\012\205\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\001\141\001\141\001\141\000\000\000\000\001A\000\000\000\000\000\000\000\000\001A\000\000\000\165\001A\000\000\000\000\001\141\000\000\000\000\000\000\012\205\000\165\000\000\001A\000\000\001A\000\000\001A\000\000\001A\001\141\001\141\001\141\000\000\001\141\001\141\000\000\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\001A\000\165\000\000\000\000\001\141\000\000\000\000\000\165\000\000\000\000\000\000\000\000\001A\000\000\000\000\001\141\000\000\001A\001A\001A\000\000\001\221\000\000\000\000\000\000\000\000\001\221\000\000\015\190\001\221\000\000\002\138\000\000\001A\000\000\000\000\000\000\000\165\000\000\001\221\000\000\000\000\000\000\001\221\000\000\001\221\000\000\001A\001A\001A\000\000\001A\001A\000\000\000\000\000\000\000\000\001\221\000\000\000\000\000\000\000\000\000\000\001\221\000\000\000\000\000\000\000\000\001A\015\194\000\000\000\000\001\221\000\000\000\000\001\221\000\000\000\000\000\000\001A\001\221\001\221\000\000\015\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\221\003\014\002\190\000\000\001\221\002\138\000\000\006\238\000\000\000\000\002\246\000\000\000\000\005\134\001\221\001\221\000\000\000\000\001\221\001\221\001\210\000\000\007\014\000\000\000\000\000\000\000\000\003\018\001\221\000\000\tB\000\000\000\000\000\000\004q\001\221\000\000\000\000\t~\004q\003\030\000\000\004q\r\226\001\190\000\000\001\221\000\000\000\000\000\000\002\178\000\000\004q\003\246\000\000\000\000\004q\003\250\004q\004\002\000\000\011F\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004q\000\000\000\000\000\000\005z\000\000\004q\000\000\000\000\000\000\004q\000\000\005\130\005\134\000\000\004q\000\000\000\000\004q\000\000\000\000\000\000\000\000\004q\002\226\000\238\000\000\000\000\000\000\000\000\000\000\000\000\004q\004q\r\242\000\000\005\138\000\000\000\000\004q\004q\b)\004r\004q\000\000\000\000\b)\000\000\000\000\b)\000\000\000\000\000\000\004q\004q\000\000\000\000\004q\004q\b)\000\000\000\000\000\000\b)\000\000\b)\000\000\004q\000\000\000\000\000\000\000\000\000\000\000\000\004q\000\000\000\000\b)\000\000\025\242\000\000\000\000\000\000\b)\000\000\004q\000\000\b)\000\000\000\000\000\000\000\000\b)\000\000\000\000\b)\000\000\000\000\000\000\000\000\b)\b)\000\238\b%\000\000\000\000\000\000\000\000\b%\b)\b)\b%\000\000\000\000\000\000\000\000\b)\000\000\000\000\000\000\b)\b%\000\000\000\000\000\000\b%\000\000\b%\000\000\000\000\b)\b)\b)\000\000\b)\b)\000\000\000\000\000\000\b%\000\000\000\000\000\000\000\000\b)\b%\000\000\000\000\000\000\b%\000\000\b)\000\000\000\000\b%\000\000\000\000\b%\000\000\000\000\000\000\000\000\b%\b%\000\238\0035\000\000\000\000\000\000\000\000\0035\b%\b%\0035\000\000\000\000\000\000\000\000\b%\000\000\000\000\000\000\b%\0035\000\000\000\000\000\000\0035\000\000\0035\000\000\000\000\b%\b%\b%\000\000\b%\b%\000\000\000\000\000\000\0035\015\214\000\000\000\000\000\000\b%\0035\000\000\000\000\000\000\000\000\000\000\b%\000\000\000\000\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\003\014\002\190\000\000\000\000\002\138\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\001\210\000\000\007\014\000\000\000\000\000\000\000\000\003\018\0035\0035\tB\000\000\0035\0035\000\000\000\000\000\000\000\000\024\002\000\000\003\030\000\000\0035\003*\001\190\000\000\000\000\000\000\0166\0035\002\178\000\000\000\000\003\246\0035\000\000\000\000\003\250\000\000\004\002\0035\011F\005v\000\000\000\000\000\000\003\014\002\190\000\000\000\000\002\138\000\000\006\238\000\000\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\022r\007\014\000\000\000\000\000\000\000\000\003\018\000\000\000\000\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\206\003\030\005\138\000\000\0116\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\000\000\011F\005v\000\000\000\000\000\000\003\014\002\190\000\000\000\000\002\138\000\000\006\238\000\000\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\011N\007\014\000\000\000\000\000\000\000\000\003\018\000\000\000\000\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\n\003\030\005\138\000\000\0116\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005\194\011F\005v\000\000\000\000\000\000\003\014\002\190\000\000\000\000\002\138\000\000\000\000\000\000\005z\002\246\000\000\000\000\000\000\000\000\005\198\000\000\005\130\005\134\000\000\001\210\011N\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023j\003\030\005\138\000\000\003*\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\t9\000\000\000\000\000\000\000\000\000\000\003\014\002\190\000\000\005z\002\138\000\000\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\t9\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\000\000\000\000\000\000\006\134\000\000\000\000\005\138\004Y\004Y\000\000\003\030\004Y\004r\003*\001\190\000\000\004Y\000\000\000\000\000\000\002\178\000\000\004Y\003\246\000\000\000\000\004Y\003\250\000\000\004\002\005j\000\000\005v\004Y\023\186\000\000\000\000\023\210\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\004Y\000\000\000\000\004Y\004Y\000\000\005\130\005\134\000\000\005\202\004Y\000\000\000\000\004Y\000\000\000\000\000\238\004Y\000\000\004Y\004Y\000\000\004Y\0035\000\000\000\000\000\000\000\000\0035\000\000\005\138\0035\t9\0035\004Y\000\000\004r\000\000\0035\000\000\000\000\0035\004Y\004Y\000\000\0035\000\000\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\0035\000\000\0035\015\214\000\000\000\000\000\000\000\000\0035\004Y\000\000\000\000\0035\015\214\000\000\004Y\000\000\0035\0035\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\0035\025\250\000\000\0035\0035\000\000\000\000\000\000\000\000\0035\0035\026*\000\000\0035\0035\000\000\012\197\000\000\000\000\0166\0035\012\197\000\000\000\000\012\197\0035\000\000\000\000\000\000\0166\0035\000\000\000\000\000\000\012\197\0035\000\000\000\000\012\197\000\000\012\197\000\000\000\000\000\000\000\000\000\000\005\021\000\000\000\000\000\000\000\000\000\000\012\197\000\000\000\000\000\000\000\000\000\000\012\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\197\000\000\000\000\012\197\000\000\000\000\000\000\000\000\012\197\012\197\000\000\000\000\000\000\000\000\000\000\000\000\006e\000\000\000\000\000\000\000\000\000\000\000\000\002\190\012\197\000\000\002\138\000\000\012\197\000\000\000\000\002\246\000\000\000\000\000\000\000\000\006e\000\000\012\197\012\197\002\130\001\210\012\197\012\197\000\000\002\250\000\000\000\000\000\000\000\000\000\000\000\000\012\197\000\000\002\254\000\000\003\150\000\000\000\000\012\197\000\000\000\000\000\000\000\000\003\222\001\190\000\000\000\000\000\000\000\000\012\197\002\178\000\000\000\000\003\230\000\000\000\000\000\000\bz\b~\b\138\000\000\000\000\005v\000\000\000\000\000\000\003\014\002\190\000\000\000\000\002\138\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\000\000\007\014\000\000\000\000\000\000\000\000\003\018\000\000\000\000\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\030\005\138\b\146\tn\001\190\000\000\b\170\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\006\141\003\250\000\000\004\002\000\000\011F\005v\002\190\000\000\000\000\002\138\000\000\000\000\000\000\000\000\002\246\000\000\000\000\005z\000\000\006\141\000\000\000\000\000\000\000\000\001\210\005\130\005\134\000\000\002\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\254\000\000\003\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\222\001\190\005\138\000\000\000\000\000\000\000\000\002\178\004r\000\000\003\230\000\000\000\000\000\000\bz\b~\b\138\000\000\000\000\005v\000\000\000\000\000\000\005m\000\000\000\000\000\000\000\000\005m\000\000\000\000\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\005m\000\000\000\000\000\000\005m\000\000\005m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005m\000\000\000\000\000\000\005\138\b\146\005m\000\000\005q\b\170\004r\000\000\b>\005q\000\000\005m\005q\000\000\005m\000\000\000\000\000\000\000\000\005m\005m\000\238\005q\000\000\000\000\000\000\005q\000\000\005q\000\000\000\000\000\000\000\000\000\000\000\000\005m\005m\000\000\000\000\005m\005q\000\000\000\000\000\000\000\000\000\000\005q\000\000\000\000\005m\005m\000\000\b>\005m\005m\005q\000\000\000\000\005q\000\000\000\000\000\000\000\000\005q\005q\000\238\000\000\0035\000\000\000\000\005m\000\000\0035\000\000\000\000\0035\000\000\000\000\000\000\005q\005q\005m\000\000\005q\000\000\0035\000\000\000\000\000\000\0035\000\000\0035\000\000\005q\005q\000\000\000\000\005q\005q\000\000\000\000\000\000\000\000\0035\015\214\000\000\000\000\000\000\000\000\0035\000\000\006\029\000\000\000\000\005q\000\000\006\029\000\000\0035\006\029\000\000\0035\000\000\000\000\000\000\005q\0035\0035\0035\006\029\000\000\000\000\000\000\006\029\000\000\006\029\000\000\000\000\000\000\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\006\029\000\000\000\000\000\000\000\000\000\000\006\029\000\000\000\000\0035\0035\0182\000\000\0035\0035\006\029\000\000\000\000\006\029\000\000\000\000\000\000\000\000\006\029\006\029\000\238\000\000\000\000\000\000\0166\0035\025\210\000\000\000\000\000\000\000\000\000\000\003\014\002\190\006\029\000\000\002\138\000\000\006\029\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\006\029\006\029\021\254\001\210\006\029\006\029\000\000\000\000\000\000\000\000\003\018\000\000\000\000\000\000\006\029\000\000\000\000\012\197\000\000\000\000\000\000\006\029\012\197\003\030\000\000\012\197\003*\001\190\000\000\000\000\000\000\000\000\006\029\002\178\000\000\012\197\003\246\000\000\000\000\012\197\003\250\012\197\004\002\005j\000\000\005v\000\000\005\021\000\000\000\000\000\000\000\000\000\000\012\197\000\000\000\000\000\000\005z\000\000\012\197\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\000\000\000\000\012\197\000\000\000\000\000\000\000\000\012\197\012\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\000\000\006\218\012\197\t*\005\238\004r\000\000\000\000\000\000\000\000\003\014\002\190\000\000\000\000\002\138\000\000\012\197\012\197\002\130\002\246\012\197\012\197\000\000\000\000\000\000\000\000\003\254\000\000\000\000\001\210\012\197\000\000\000\000\000\000\026\234\000\000\003\018\012\197\000\000\000\000\006J\000\000\000\000\000\000\000\000\000\000\003\014\002\190\012\197\003\030\002\138\000\000\003*\001\190\000\000\002\246\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\003\030\000\000\000\000\003*\001\190\000\000\005\130\005\134\000\000\005\202\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\006j\000\000\000\000\000\000\000\000\005\138\003\014\002\190\000\000\005z\002\138\004r\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\006\158\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\000\000\006i\000\000\000\000\000\000\000\000\005\138\003\014\002\190\000\000\003\030\002\138\004r\003*\001\190\000\000\002\246\000\000\000\000\000\000\002\178\006i\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\003\030\000\000\000\000\003*\001\190\000\000\005\130\005\134\000\000\005\202\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\011\226\000\000\000\000\000\000\000\000\005\138\003\014\002\190\000\000\005z\002\138\004r\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\000\000\011\238\000\000\000\000\000\000\000\000\005\138\003\014\002\190\000\000\003\030\002\138\004r\003*\001\190\000\000\002\246\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\003\030\000\000\000\000\003*\001\190\000\000\005\130\005\134\000\000\005\202\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\011\250\000\000\000\000\000\000\000\000\005\138\003\014\002\190\000\000\005z\002\138\004r\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\007\021\007f\000\000\000\000\000\000\007\021\005\138\000\000\007\021\000\000\003\030\000\000\004r\003*\001\190\000\000\000\000\000\000\007\021\000\000\002\178\000\000\007\021\003\246\007\021\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\007\021\000\000\000\000\000\000\000\000\000\000\007\021\007\226\005z\000\000\000\000\000\000\000\000\000\000\000\000\007\021\005\130\005\134\007\021\005\202\000\000\000\000\000\000\007\021\007\021\000\238\001\189\000\000\000\000\000\000\000\000\001\189\000\000\000\000\001\189\000\000\000\000\000\000\000\000\007\021\005\138\000\000\000\000\007\021\001\189\000\000\004r\000\000\001\189\000\000\001\189\000\000\000\000\007\021\007\021\000\000\000\000\007\021\007\021\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\000\000\001\189\000\000\001\225\000\000\000\000\000\000\007\021\001\225\000\000\001\189\001\225\000\000\001\189\000\000\000\000\000\000\000\000\001\189\001\189\001\189\001\225\000\000\000\000\000\000\001\225\000\000\001\225\000\000\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\001\189\001\225\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\001\189\001\189\000\000\000\000\001\189\001\189\001\225\000\000\000\000\001\225\018>\000\000\000\000\000\000\001\225\001\225\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\001\225\000\000\006!\000\000\001\225\000\000\000\000\006!\000\000\000\000\006!\000\000\000\000\000\000\001\225\001\225\000\000\000\000\001\225\001\225\006!\000\000\000\000\000\000\006!\000\000\006!\000\000\001\225\000\000\000\000\000\000\000\000\000\000\000\000\001\225\000\000\000\000\006!\000\000\021\218\000\000\000\000\000\000\006!\000\000\001\225\000\000\000\000\000\000\000\000\000\000\000\000\006!\000\000\000\000\006!\000\000\000\000\000\000\000\000\006!\006!\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006!\000\000\012\197\000\000\006!\000\000\000\000\012\197\000\000\000\000\012\197\000\000\000\000\000\000\006!\006!\000\000\000\000\006!\006!\012\197\000\000\000\000\000\000\012\197\000\000\012\197\000\000\006!\000\000\000\000\000\000\005\021\000\000\000\000\006!\000\000\000\000\012\197\000\000\000\000\000\000\000\000\000\000\012\197\000\000\006!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\197\000\000\000\000\000\000\000\000\012\197\012\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012}\000\000\002\190\012}\000\000\028\150\000\000\012\197\000\000\000\000\028\154\000\000\000\000\012}\000\000\000\000\000\000\000\000\000\000\012}\000\000\012\197\012\197\002\130\000\000\012\197\012\197\000\000\000\000\000\000\000\000\012}\000\000\004q\007f\012\197\000\000\012}\004q\027\"\000\000\004q\012\197\001\002\001\190\000\000\012}\000\000\000\000\012}\000\000\004q\000\000\012\197\012}\004q\000\000\004q\000\000\000\000\004q\000\000\028\158\004q\000\000\000\000\000\000\000\000\000\000\004q\012}\000\000\000\000\004q\012}\004q\007\226\004q\000\000\004q\000\000\000\000\000\000\028\162\012}\012}\000\000\004q\012}\000\000\000\000\004q\004q\002\226\000\238\000\000\000\000\004q\bY\bY\000\000\000\000\bY\b>\000\000\012}\004q\bY\004q\004q\000\000\000\000\000\000\016~\004q\002\226\000\238\bY\000\000\000\000\000\000\000\000\004q\004q\bY\000\000\004q\004q\007f\000\000\004q\000\000\004q\000\000\004q\004q\000\000\bY\000\000\000\000\bY\bY\000\000\004q\004q\004q\000\000\bY\004q\004q\bY\004q\000\000\000\000\bY\000\000\bY\bY\007\146\bY\000\000\000\000\000\000\004q\000\000\004q\000\000\000\000\000\000\004q\007\226\bY\000\000\000\000\000\000\000\000\004q\000\000\000\000\bY\bY\004q\000\000\000\000\000\000\000\000\004q\002\226\000\238\000\000\001y\000\000\000\000\000\000\000\000\001y\000\000\000\000\001y\000\000\000\000\000\000\004q\bY\000\000\000\000\000\000\000\000\001y\bY\001y\000\000\001y\000\000\001y\000\000\004q\004q\000\000\000\000\004q\004q\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\245\000\000\000\000\004q\000\000\000\245\000\000\000\000\000\245\000\000\001y\000\000\000\000\000\000\004q\001y\001y\000\238\000\245\000\000\000\000\000\000\000\245\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\001y\001y\001y\000\000\001y\001y\000\245\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\245\000\245\000\238\000\000\000\249\000\000\000\000\001y\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\000\000\245\000\000\001y\000\000\000\245\000\000\000\249\000\000\000\000\000\000\000\249\000\000\000\249\000\000\000\245\000\245\000\000\000\000\000\245\000\245\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\249\000\000\007\017\000\000\000\000\000\245\000\000\007\017\000\000\000\249\007\017\000\000\000\249\000\000\000\000\000\000\000\245\000\249\000\249\000\238\007\017\000\000\000\000\000\000\007\017\000\000\007\017\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\249\007\017\000\000\000\000\000\000\000\000\000\000\007\017\000\000\000\000\000\249\000\249\000\000\000\000\000\249\000\249\007\017\000\000\000\000\007\017\000\000\000\000\000\000\000\000\007\017\007\017\000\000\000\000\006\021\000\000\000\000\000\249\000\000\006\021\000\000\000\000\006\021\000\000\000\000\000\000\007\017\000\000\000\249\018\014\007\017\000\000\006\021\000\000\000\000\000\000\006\021\000\000\006\021\000\000\007\017\007\017\017b\000\000\007\017\007\017\000\000\000\000\000\000\000\000\006\021\000\000\000\000\000\000\000\000\000\000\006\021\000\000\005y\007f\000\000\007\017\000\000\005y\000\000\006\021\005y\000\000\006\021\000\000\000\000\000\000\000\000\006\021\006\021\000\000\005y\000\000\000\000\000\000\005y\000\000\005y\000\000\000\000\000\000\000\000\012-\000\000\006\021\000\000\000\000\012-\006\021\005y\012-\000\000\000\000\000\000\000\000\005y\007\226\000\000\006\021\006\021\012-\000\000\006\021\006\021\012-\000\000\012-\005y\000\000\000\000\000\000\000\000\005y\005y\000\238\000\000\000\000\000\000\012-\006\021\000\000\000\000\000\000\000\000\012-\000\000\000\000\000\000\005y\000\000\000\000\001\202\002\134\012-\000\000\002\138\012-\000\000\000\000\000\000\000\000\012-\005y\005y\000\000\000\000\005y\005y\000\000\000\000\001\210\001\250\001\230\000\000\000\000\000\000\000\000\012-\nF\000\000\001\242\012-\000\000\005y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012-\012-\002\146\002\154\012-\012-\000\000\002\166\000\000\002\178\004\030\004*\004I\000\000\000\000\000\000\021\178\004I\026\206\004A\004I\012-\000\000\000\000\004A\000\000\000\000\004A\000\000\000\000\004I\000\000\011*\004:\004I\000\000\004I\004A\000\000\000\000\000\000\004A\005\134\004A\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\026\218\000\000\004I\004A\000\000\000\000\000\000\000\000\000\000\004A\000\000\004I\000\000\000\000\004I\000\000\000\000\021\198\004A\004I\000\000\004A\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004I\000\000\000\000\000\000\004I\004a\000\000\004A\000\000\000\000\004a\004A\0041\004a\004I\004I\000\000\0041\004I\004I\0041\004A\004A\004a\000\000\004A\004A\004a\000\000\004a\0041\000\000\000\000\000\000\0041\004I\0041\000\000\000\000\000\000\000\000\004a\004A\000\000\000\000\000\000\017\138\004a\0041\000\000\004q\000\000\000\000\020\146\0041\004q\004a\000\000\004q\004a\000\000\000\000\000\000\0041\004a\000\000\0041\000\000\004q\000\000\000\000\0041\004q\000\000\004q\000\000\000\000\000\000\000\000\000\000\004a\000\000\000\000\000\000\004a\000\000\004q\0041\000\000\000\000\000\000\0041\004q\000\000\004a\004a\000\000\000\000\004a\004a\000\000\0041\0041\000\000\004q\0041\0041\000\000\000\000\004q\002\226\000\000\000\000\000\000\000\000\004a\001\202\001\206\000\000\000\000\000\000\000\000\0041\000\000\000\000\004q\021v\000\000\000\000\000\000\002\150\000\000\000\000\024\238\000\000\001\210\001\250\001\230\000\000\004q\004q\000\000\000\000\004q\004q\001\242\000\000\000\000\000\000\007\246\000\000\000\000\002\002\000\000\006\233\006\233\000\000\000\000\001\246\002\154\004q\000\000\000\000\002\166\000\000\002\178\004\030\004*\000\000\000\000\004.\000\000\0046\006\233\006\233\006\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\233\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\000\000\000\000\000\006\233\006\233\000\000\000\000\000\000\006\233\000\000\006\233\006\233\006\233\000\000\004Q\000\000\000\000\006\233\000\000\004Q\000\000\0049\004Q\000\000\000\000\015\198\0049\000\000\000\000\0049\000\000\000\000\004Q\000\000\006\233\000\000\004Q\000\000\004Q\0049\000\000\000\000\000\000\0049\000\000\0049\000\000\000\000\000\000\000\000\004Q\000\000\000\000\000\000\000\000\000\000\004Q\0049\000\000\004i\000\000\000\000\000\000\0049\004i\000\000\000\000\004i\004Q\000\000\004\"\000\000\006\233\004Q\000\000\0049\000\000\004i\000\000\000\000\0049\004i\000\000\004i\000\000\000\000\000\000\000\000\000\000\004Q\000\000\000\000\000\000\000\000\000\000\004i\0049\000\000\000\000\000\000\000\000\004i\000\000\004Q\004Q\000\000\000\000\004Q\004Q\000\000\0049\0049\000\000\004i\0049\0049\000\000\000\000\004i\t\206\000\000\000\000\000\000\000\000\004Q\001\202\001\206\000\000\000\000\000\000\000\000\0049\000\000\000\000\004i\018\222\000\000\000\000\000\000\000\000\000\000\003\254\021\030\000\000\001\210\001\250\001\230\000\000\004i\004i\000\000\000\000\004i\004i\001\242\004\133\000\000\000\000\000\000\000\000\000\246\000\000\000\000\002\194\000\000\000\000\000\000\001\246\002\154\004i\000\000\000\000\002\166\003j\002\178\004\030\004*\004\133\000\000\003n\021\158\0046\007\165\000\000\000\000\007\165\000\000\000\000\000\000\000\000\000\000\003z\000\000\000\000\000\000\000\000\000\000\017N\004:\000\000\000\000\007\165\007\165\000\000\007\165\007\165\025\026\000\000\000\000\017\178\000\000\000\000\000\000\000\000\017\202\000\000\000\000\000\000\007\185\000\000\000\000\007\185\000\000\000\000\000\000\007\165\000\000\000\000\000\000\000\000\017\210\000\000\000\000\000\000\004n\000\000\004r\007\185\007\185\000\000\007\185\007\185\000\000\007\165\017\230\018\"\000\000\000\000\004\133\004\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\185\000\000\007\145\000\000\022Z\007\145\000\000\000\000\000\000\000\000\000\000\000\000\007\165\000\000\007\165\000\000\000\000\000\000\000\238\000\000\000\000\007\145\007\145\000\000\007\145\007\145\005\226\000\000\000\000\007\165\007\165\000\000\000\000\000\000\007\165\007\189\007\165\000\000\007\189\000\000\007\165\000\000\000\000\000\000\000\000\007\145\000\000\000\000\007\185\000\000\007\185\000\000\000\000\000\000\007\189\007\189\000\000\007\189\007\189\000\000\000\000\000\000\007\185\007\145\000\000\005\234\007\185\000\000\000\000\000\000\007\185\000\000\007\185\000\000\000\000\000\000\007\185\000\000\007\189\000\000\007\173\000\000\000\000\007\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\145\000\000\007\145\000\238\000\000\000\000\007\173\007\173\000\000\007\173\007\173\000\000\000\000\000\000\007\145\000\000\000\000\005\234\007\145\000\000\r\133\r\133\007\145\000\000\007\145\000\000\000\000\000\000\007\145\000\000\007\173\000\000\000\000\007\189\000\000\007\189\000\000\000\000\000\000\r\133\r\133\r\133\007z\000\000\000\000\000\000\000\000\007\189\000\238\r\133\005\234\007\189\000\000\000\000\000\000\007\189\000\000\007\189\000\000\t\218\000\000\007\189\r\133\r\133\000\000\001\202\001\206\r\133\000\000\r\133\r\133\r\133\000\000\000\000\000\000\000\000\r\133\000\000\007\173\000\000\007\173\000\000\000\000\000\000\001\210\001\250\001\230\000\000\000\000\000\000\000\000\000\000\006F\r\133\001\242\005\234\007\173\000\000\000\000\000\000\007\173\000\000\007\173\001\202\001\206\023\014\007\173\001\246\002\154\000\000\000\000\000\000\002\166\000\000\002\178\004\030\004*\000\000\000\000\000\000\000\000\0046\001\210\001\214\001\230\000\000\000\000\000\000\001\202\001\206\023n\000\000\001\242\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\000\001\202\001\206\001\246\002\154\001\210\001\214\001\230\002\166\000\000\002\178\004\030\004*\000\000\000\000\001\242\000\000\0046\000\000\000\000\001\210\001\250\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002\154\000\000\000\000\000\000\002\166\004:\002\178\004\030\004*\000\000\000\000\000\000\000\000\0046\001\246\002\170\001\202\001\206\000\000\002\166\000\000\002\178\004\030\004*\000\000\000\000\000\000\000\000\0046\000\000\004:\000\000\000\000\000\000\000\000\001\210\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\004\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002\170\000\000\000\000\000\000\002\166\026v\002\178\004\030\004*\000\000\000\000\000\000\000\000\0046\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\004\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026v")) + ((16, "kby\132n\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021Hn\030\000\000\000\000\020Xn\030kb\020\182\000-\000[\164L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\138\001\208\001d\000\000\002t\001\188\000\000\003\214\003$\007\140\000\000\005\244\003r\b\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\000\000\002\216tj\000\000\000\000\000\000\006&\000\000\000\000zh\0046\0046\000\000\000\000\179N\006&\000\000y\140\020Xj6\164\228\005\236\000\000\020X\129&o8\020Xzx\000\000\005\144\000\000l(\006\136\000\000kJ\000\000\021\224\000\000\000\000\003\224\000\000\006&\000\000\000\000\000\000\006\242\000\000kJ\000\000\006\214\194L\166\164\173&\000\000\203\252\205\226\000\000t\242\132\164\000\000\132\"\0218tjn\030kb\000\000\000\000o8\020X{\194l(\007\030\190\180\000\000\185\024n\030kby\132\020X\000\000\000\000\016xy~\020X\130\172\131\142\000\000\001\026\000\000\000\000\004\250\000\000\000\000qn\001\026\025\130\005\200\b$\000\000\000\000\002\026\000\000j6\005\248\005\228\020X\023.\020Xkbkb\000\000\000\000\000\000u\254u\254\020X\023.\b`\000\000q\152\020X\129&\023\022\bZ\b\004\000\000\000\220\b\022\000\000\000\000\000\000\000\000\000\000\020X\000\000\000\000\000\000y\132\020X\000\000i\134\191:}\252\000\248\129\218\131\142\193\254\194\230\000\000\b\004\000\000\007:\000\000\000\000\020\250\177\148~X\000\000\177\148~X\000\000\177\148\177\148\000b\006\n\0008\000\000\020\190\000\000\bL\000\000\000\000\bL\000\000\000\000\000\000\177\148\006&\000\000\000\000\130\164\177\148~\224\132\164\000\000\0072\028\254\179N\132\164\011\228\177\148\000\000\000\000\000\000\000\000\000\000\000\000v\204\132\164w\194\000b\000\000\000\000\000\000\004\006\000\000\000\000\162&\012$\006&\000\000\000\000x\184\000\000\000\000\000\000\003b\000\000\177\148\000\000\001\000\180F\000\000\177\148\005\216\177\148\023\224\000\000\024\216\000\000\006\208\006\230\000\000\011\132\177\148\t\206\000\000\t\246\000\000\t\184\000\000\000\000\005\016\000\000\000\000\000\000\029\n\030D\131\142yp\020X\131\142\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000u\220\027v\000\000\000\000\000\000\001\244%\182\188\132\000\000\000\000yp\020X\131\142\000\000\000\000\207p\131\142\207\184\194\230\000\000\208N\000\000\131\142\000\000\000\000\132zqn\001\154\001\154\000\000\014\020\131\142\000\000\000\000\000\000\004\250\014,\000\000h\196\000\000\000\000\195.\000\000\208`\177\148\000\000\004R\000\000\000\000\195\186\000\000\208\150\012\226\000\000\000\000\000\000\000\000\014\178\000\000\023\160\000\000\000\000\195\186\000\000\004\224\000\000\000\000l\000\189\016\000\000\000\000j&\024t\019\252\025\"\000\000\000\000\000\000\000\000\002>\000\000\000\000\162\240\n\238\014\168\000\017\177\148\000\226\015t\000\000\000\000\011\176\014\168\005\"\000\000y\132yvu\254\020X\023.\000-\000\018\r\138\000\000\015Lj6\131\196\015\212j6\000-\000\018\000\018j6\000\000\178\132\t`l(\b\004\bT\209 \000\000\177\148\173\198\177\148\167\132\174f\177\148\006`\177\148\175\000\000\000\012\250\tD\nDj6\179$\000\000\b*\t\190\165\006\000\000\000\000\000\000\000\000j6\179|j6\180\028\020d\0008\168$\b\022\0008\168|\000\000\180t\t`\000\000\000\000\000\000\181\020\002\152\000\000\000\000\006x\000\000\007|\023.\000\000\165\196q\152\000\000\0268\000\000\000\000j6\003\144\000\000\000\000\000\000\000\000\163\168\000\000\001\248\000\000\127\172\t \0032\133<\0226\131\132y\132\020Xo\244y\132\020X\016x\016x\000\000\000\000\000\000\000\000\001\240\025\030jt\000\000{,{\224u\254\020X\023.\007hnB\000\000\007p\000\000|\148}H\196\002qZ\177\148\006p\000\000y\132\020X\000\000yp\020X\193\254\131\142ih\000\000y\132\020Xo\b\001\b\000\000\131\142ih\177\148\002\210\005\"\016r\000\000\000\000\000\000rZ\001\154\016\136\000\000\131\142\000\000\000\000\175\140\000\000\000\000\t\014\132\164\000b\016\200\133\240yp\020X\193\254\026\022\134\164yp\020X\193\254\027\014\131\142\000\000\000\000yp\020X\131\142\026J\000\000y\132\020X\016x\0226\016x\002\232\021\238sHyp\020X\193\254m\200sH\135Xyp\020X\193\254\000\000\016x\r\160\016\190\000*\177\180\000\000\021\146\179N\000\000\026\"\177\148\028\018\016\250\000\000\000\000\016\206\000\000\016x\003\224\017\004\000\000&\174\000\000\n\202\000\000\000\000\028\006\136\012yp\020X\193\254\028\254\017p\023.\000\000\000\000\000\000\000\000\004\234\000\000\000\000\000\000\029\246\136\192yp\020X\193\254\030\238\031\230\137typ\020X\193\254 \222!\214\000\000\018h\024&\138(yp\020X\193\254\000\000\000\000\000\000n\030\000\000\000\000\000\000\138\220yp\020X\193\254\"\206#\198\139\144yp\020X\193\254$\190%\182\140Dyp\020X\193\254&\174'\166\140\248yp\020X\193\254(\158)\150\141\172yp\020X\193\254*\142+\134\142`yp\020X\193\254,~-v\143\020yp\020X\193\254.n/f\143\200yp\020X\193\2540^1V\144|yp\020X\193\2542N3F\1450yp\020X\193\2544>56\145\228yp\020X\193\2546.7&\146\152yp\020X\193\2548\0309\022\147Lyp\020X\193\254:\014;\006\148\000yp\020X\193\254;\254<\246\148\180yp\020X\193\254=\238>\230\149hyp\020X\193\254?\222@\214\150\028yp\020X\193\254A\206B\198\150\208yp\020X\193\254C\190D\182\151\132yp\020X\193\254E\174F\166\1528yp\020X\193\254G\158H\150\020X\131\142o\b\000\000\000\000tj\001\154\016\182\177\148\bP\000\000\000\000\nF\006&\000\000\177\148\b\162\000\000\000\000\017\"\000\000\000\000\000\000\004\164\000\000\017,\133\240\000\000\000\000\000\000q\154\177\148\t\154\000\000\000\000\0292\000\000\000\000\196\142\000\000\030*\196\214\000\000\031\"\197b\000\000 \026\014\210\000\000\000\000\000\000\000\000!\018\131\142\"\n\000\000\185\004\185\004\000\000\000\000\000\000I\142\000\000\006\212\000\000\000\000\000\000\011\188\000\000\000\000\000\220\025\158sH\011\172\000\000\000\000\166ft\014\000\000sH\t\210\000\000\000\000sH\012\140\000\000\000\000\000\000\016x\004\216\026\bsH\012\164\000\000\005\208\152\236yp\020X\193\254J\134K~sH\r\156\000\000\006\200\153\160yp\020X\193\254LvMnsH\r\172\000\000\007\192\154Typ\020X\193\254NfO^'\166\000\000\r\186\b\184\155\byp\020X\193\254PVQN\000\000\014\144\t\176\155\188yp\020X\193\254RFS>\000\000\014\250\n\168\156pyp\020X\193\254T6U.\007H\026\198sH\015L\011\160\157$yp\020X\193\254V&W\030sH\014\148\012\152\157\216yp\020X\193\254X\022Y\014sH\015\134\r\144\158\140yp\020X\193\254Z\006Z\254\014\136\159@yp\020X\193\254[\246\\\238\015\128\019`\000\000\000\000\000\000\000\000\015\162\000\000sH\014\170\000\000sH\015\242\000\000\t\236\000\000\000\000\000\000\017J\000\000\n\224\000\000\000\000]\230\000\000\017\196\000\000\000\000\000\000\000\000\000\000\000\000^\222\018\014\159\244yp\020X\193\254_\214\160\168yp\020X\193\254`\206a\198b\190\161\\yp\020X\193\254c\182d\174\000\000#\002\000\000\000\000\005\134\000\000\000\000\131\142\000\000\000\000\191\150\016D\000\000\000\000\127\172\000\000\b\218\000\000\000\000\128r\000\000\015\140\000\000\000\000\005@\011\194\000\000\000\000\0226\022\028\b\004\000\000j\228\031<\027\\\021\218\000\000\000\000\016\148\000\000\000\000\001\238\026\022\133D\000\000\025\030\000\000\n\246\000\000\000\000\016\234\000\000\000\000yp\020X\193\254i*\175\244\t\002\005@\000\000\000\000\012H\000\000\000\000\016\128\000\000\000\000\000\000\020X\023.\003\202\000\000\000\000\023\022\005\200\b$\b`\023.\192&\162\016\000\000\020X\023.\192\164\017\162\000\000\000\000\b`\000\000n\174\019\248\023\228\000\000\011\220\0184\000\000\018H\000V\132\164\000\244\000\000\018\024\017\170tj\011,\177\148\026\160\020F\016V\003\b\000\000\029\136\018d\000\000\000\244\000\000\000\000\018|\132\164\169\028\000\000\176\146\168N\012\156\132\164\018J\132\164\181\146\169\188\018\\\132\164\182\016\170\\\001\024\018\030\000\000\000\000\000\000\020X\200\164\000\000\131\142\185\004\000\000\000\000\018\146\000\000\000\000\000\000yp\020X\193\254e\166f\158\000\000\015\228\000\000\000\000\000\000u\254\020X\023.\003\202\000\000\163\148\000\000\bh\000\000\000*\000\000\000\000\018\158\000\000\018\202\193\254g\150yp\020X\193\254\022`\000\000\000\000\165\228\000\000\t`\000\000\167\164\000\000\020X\000\000j6\nX\000\000\176\250\000\000\000\000\171(\000\000\011P\000\000\171\196\000\000\025\198\000\000j6\012H\000\000\200\234\000\000\020X\023.\200\234\000\000\023l\023\022\bZ\006&\202\150j6\197\168\185\004\000\000\005\200\tR\b$\b`\185\004\204p\005\200\b$\b`\185\004\204p\000\000\000\000\b`\185\004\000\000n\030kb\131\142\027B\000\000\000\000n\030kbu\254\020X\023.\200\234\000\000\020\182\000-\000[\017\246tj\r(\177\148\185\150\018$\018\204\203\020\000\000\185\004\000\000\186\018n\174\019\248\023\228\192\252\024\220\r\204\198$\n<\018*\020X\185\004\000\000\020X\185\004\000\000\177\180\174\202\019\134\003\214\005\200\0008w\140\000\000\005\200\0008w\140\000\000\026\178\023\022\bZ\006&x\130j6\185\024\000\000\005\200\nJ\022\214\012\156\000\000w\140\000\000\b$\0184j6\185\024\206*\005\200\b$\0186j6\185\024\206*\000\000\000\000\tX\r\148\000\000\205j\000\000j6\203lw\140\000\000\nP\r\148\000\000y\140\020Xj6\185\024\000\000n\174\019\248\023\228\186\142kr\024\014\019\170\002\142\000\000\rbkJ\000\017\000\000\018\176\018^\024\196\020X\162\190\177\148\n@\000\000\135X\012\238\004\212\r\230\000\000\014\132\000\000\018\190\018X\177\148w\202\000\000\0032\002\228\011\016\000\000\014\240\000\000\018\214\018ztjw\202\000\000\020X\024\196\019\014\011^\005\200\000\000\016\176\024\196\177\148\012\020\000b\000\000\177\148\004\018\007\242\000\000\000\000\182j\000\000\000\000\016\204\024\196\182\232w\202\000\000\020X\177\148\015d\177\148tXw\202\000\000\016\232\000\000\000\000w\202\000\000\000\000\135X\000\000\185\024\204~\019\170\002\142\rb\019\002\018\176\024\196\185\024\204~\000\000\000\000\019\170\002\142\rb\019\006\018\146v\158t\252\132\164\019\028v\158\177\148\020\184\019&v\158\132\164\019,v\158\183\136\184\b\000\000\201h\000\000\000\000\185\004\206d\019\170\002\142\rb\019(\018\190v\158\185\004\206d\000\000\000\000\000\000\174\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000w\140\000\000\205\016\020Xl(\019H\190\180\000\000\185\024\205\016\000\000\000\000\206\152\020Xl(\019L\018\232\166\164\206\202\000\244\019\150\000\000\000\000\184\134\186\142\020X\000\000\198|\023\228\000\000\000\000\185\024\206\152\000\000\000\000\000\000\193xl\156n>\000\244\019\162\000\000\000\000\000\000\186\142\020X\000\000\000\244\019\164\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Xkr\019\170\002\142\rb\019\128\186\254\023\204\020X\130\172\134\164\020(\003\b\000\244\019\152\012d\000\000\000\000\019b\000\000\000\000\128r\000\000\011\156\014\222\000\000\015&\000\000\019\192\019r\177\148~F\020\022\r\\\000\000\000\000\019\222\000\000\000\000\020F\0032\016\218\000\000\0208\187\128\209\146\001\154\019\214\177\148\017\b\000\000\000\000\0204\000\000\000\000\000\000\128r\000\000\0068\017\168\000\000\015\232\000\000\020\138\020Htj\000\000\020\218\188\002\209\168\001\154\020\136\177\148\017Z\000\000\000\000\020\178\000\000\000\000\000\000\020X\000\000\128r\000\000\020z\020X\023\204\023\204\189Xn\030\020X\200\164\131\142\025p\000\000\012\020\005\200\000\000\016\244\023\204\177\148\014\192\b\004\000\000\020X\131\142\186\254\023\204\0162\023\204\000\000lFm,\000\000\170\182\000\000\000\000\171R\000\000\000\000\171\238\000\000\017\168\023\204\172\138\200\164\131\142\025p\000\000\000\"\000\000\000\000v\158\017\154\000\000\000\000\127\172\021\012\000\000\128r\000\000\023\204\127\172\128r\000\000\020X\177\148\128r\000\000\017x\000\000\000\000\128r\000\000\000\000\134\164\000\000\201\192v\158\020\186\023\204\202>\186\254\000\000\185\004\205\030\019\170\002\142\rb\021\020\186\254\185\004\205\030\000\000\000\000\000\000\207byp\000\000\000\000\000\000\000\000\000\000\000\000\203\166\185\004\000\000\205\016\000\000\000\000\000\000\000\000\185\004\207b\000\000\000\000\000\000\203\166\021T\000\000\021`\000\000\185\004\207b\000\000\000\000\017\206\000\000\000\000\178,\004\136\000\000\000\000jV\000\000\177\148\016\016\000\000\134\164\018\028\000\000\000\000\021\176\193\254\000\000h\142\021\180\000\000\000\000\021\168\028B$\002\023\228\189\224\024\220\020X\000\000\185\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\244\024\220\020X\000\000\012>\190\180\000\000\185\024\000\000\021\194\028B$\002\185\024\000\000\021\212\000\000\004\206\017N\020X\210,\000\000\000\000\028\190\210J\000\000\000\000\021^\000\000\021\186\177\148\000\000\0186\n\182\000b\000\000\000\000\177\148\0150\016\004\177\148\016(\000\244\021\234\000\000\000\000\199\022\000\000\000\000\166\164\000\000\185\024\000\000\021\222\028B$\250w\140\000\000\000\000\000\000\000\000\015\020\199\176\166\164\000\000\185\024\000\000\021\224\028B$\250w\140\000\000\018p\000\000\000\000\0148\000\000\185\004\000\000\021\254\000\000\000\000\021`\000\000\016\224\000\000\000\000\021\132\000\000\000\000sH\021\136\000\000\000\000$\190\164L\022*\000\000\000\000\000\000\016|\0114\166\236\0220\000\000\000\000\000\000\000\000\000\000\000\000\021\178\000\000\024\220\000\000\021\194\000\000\177\148\000\000\r\224\000\000\000\000\021\198\000\000\000\000\0008\000\000\004\202\000\000\000\000\000\000\006\168\000\000\023.\000\000\015n\000\000j6\000\000\0040\000\000\tD\000\000\021\202\000\000\131\142\026J\000\000\000\000\r$\021\218\000\000\000\000\021\212\014\028o\244\006&\200.\000\000\000\000\000\000\000\000\000\000\163\226\000\000\000\000\022z\000\000\190\238\000\000\017\244\022\130\000\000\022\132\000\000p\168p\168\209\214\209\214\000\000\000\000\184\254\209\214\000\000\000\000\000\000\184\254\209\214\022\022\000\000\022\028\000\000"), (16, "\003\197\003\197\000\006\001\002\001\190\003\197\002\194\002\198\003\197\002\242\002\146\003\197\004M\003\197\022\158\002\254\003\197\027\146\003\197\003\197\003\197\019\202\003\197\003\197\003\197\001\210\005\r\005\r\004V\003\002\003\197\003z\003~\011~\003\197\001\206\003\197\027\150\003\006\000\238\003\166\019\206\003\197\003\197\003\218\003\222\003\197\003\226\003\238\003\250\004\002\007V\007\154\003\197\003\197\002\186\001\206\007r\003\246\003\197\003\197\003\197\b\190\b\194\b\206\b\226\001*\005\174\003\197\003\197\003\197\003\197\003\197\003\197\003\197\003\197\003\197\tV\000\238\003\197\018\174\003\197\003\197\004M\tb\tz\n\030\005\186\005\190\003\197\003\197\003\197\007\213\003\197\003\197\003\197\003\197\002z\002\170\016\198\003\197\0072\003\197\003\197\003\233\003\197\003\197\003\197\003\197\003\197\003\197\005\194\b\214\003\197\003\197\003\197\b\238\004\130\n2\003\233\003\197\003\197\003\197\003\197\0149\0149\027\154\n\138\004\222\0149\n\150\0149\0149\004Q\0149\0149\0149\0149\t\138\0149\0149\007u\0149\0149\0149\004E\0149\0149\0149\0149\005\r\0149\019\014\0149\0149\0149\0149\0149\0149\0149\0149\007u\0149\018\182\0149\0052\0149\0149\0149\0149\0149\006\181\0149\0149\000\238\0149\003\254\0149\0149\0149\t\142\t\170\0149\0149\0149\0149\0149\0149\0149\000\238\0149\0149\0149\0149\0149\0149\0149\0149\0149\0149\0149\000\238\0149\0149\004Q\0149\0149\014\138\003\030\003\186\005\r\0149\0149\0149\0149\0149\005\r\0149\0149\0149\0149\0149\007A\0149\0149\006\213\0149\0149\003\"\0149\0149\0149\0149\0149\0149\0149\0149\0149\0149\0149\0149\0149\007A\005\r\0149\0149\0149\0149\001\153\001\153\001\153\001f\004%\001\153\006J\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001v\001\153\001j\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\007\026\001\153\003R\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\b\130\001\153\001\153\001\153\006\213\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\000\238\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\b\186\001\153\001\153\022\142\bb\007\166\001r\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\017\202\t\006\001\153\005\242\001\153\001\153\bf\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\182\001\153\001\153\001\153\001\153\001\153\011\165\011\165\022\250\b\"\014]\011\165\003V\011\165\011\165\004\201\011\165\011\165\011\165\011\165\001\186\011\165\011\165\014]\011\165\011\165\011\165\000\238\011\165\011\165\011\165\011\165\023\002\011\165\007\030\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\007\225\011\165\005\r\011\165\005\r\011\165\011\165\011\165\011\165\011\165\t=\011\165\011\165\000\238\011\165\001\130\011\165\011\165\011\165\007\225\005\r\011\165\011\165\011\165\011\165\011\165\011\165\011\165\005\r\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\000\238\011\165\011\165\004\201\011\165\011\165\005\"\b\158\007\166\005\r\011\165\011\165\011\165\011\165\011\165\001\146\011\165\011\165\011\165\011\165\nJ\000\238\n\206\011\165\001\198\011\165\011\165\b\162\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\011\165\007\225\011\165\011\165\011\165\011\165\011\165\004m\004m\002\001\b\"\b\202\004m\002^\004m\004m\019\178\004m\004m\004m\004m\001f\004m\004m\004%\004m\004m\004m\000\238\004m\004m\004m\004m\002b\004m\000\n\004m\004m\004m\004m\004m\004m\004m\004m\b\130\004m\004\242\004m\007\166\004m\004m\004m\004m\004m\t\233\004m\004m\000\238\004m\005&\004m\004m\004m\002\001\006\150\004m\004m\004m\004m\004m\004m\004m\018B\004m\004m\004m\004m\004m\004m\004m\004m\004m\004m\004m\006\154\nB\n\198\000\238\004m\004m\b\"\028\214\007\166\000\238\004m\004m\004m\004m\004m\001\234\004m\004m\004m\004m\nJ\019\182\n\206\004m\000\238\004m\004m\028\218\004m\004m\004m\004m\004m\004m\004m\004m\004m\004m\004m\004m\004m\000\238\004m\004m\004m\004m\004m\004]\004]\022\206\b\"\006\222\004]\t\233\004]\004]\031\135\004]\004]\004]\004]\005\r\004]\004]\007\129\004]\004]\004]\000\238\004]\004]\004]\004]\006\226\004]\001\238\004]\004]\004]\004]\004]\004]\004]\004]\007\129\004]\022\214\004]\004R\004]\004]\004]\004]\004]\006\189\004]\004]\005\138\004]\nI\004]\004]\004]\000\238\007\253\004]\004]\004]\004]\004]\004]\004]\b\005\004]\004]\004]\004]\004]\004]\004]\004]\004]\004]\004]\005\r\nB\n\198\n\138\004]\004]\n\150\003*\011\022\031W\004]\004]\004]\004]\004]\004b\004]\004]\004]\004]\nJ\r\253\n\206\004]\b\198\004]\004]\003.\004]\004]\004]\004]\004]\004]\004]\004]\004]\004]\004]\004]\004]\r\253\004]\004]\004]\004]\004]\011\r\011\r\005\r\005\r\007R\011\r\rn\011\r\011\r\nI\011\r\011\r\011\r\011\r\002\022\011\r\011\r\005\r\011\r\011\r\011\r\004\130\011\r\011\r\011\r\011\r\005\r\011\r\003^\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\001f\011\r\0176\011\r\004%\011\r\011\r\011\r\011\r\011\r\003b\011\r\011\r\001\218\011\r\014\234\011\r\011\r\011\r\026v\000\238\011\r\011\r\011\r\011\r\011\r\011\r\011\r\000\238\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\004R\011\r\011\r\026~\011\r\011\r\017>\0026\007\166\005\r\011\r\011\r\011\r\011\r\011\r\001\222\011\r\011\r\011\r\011\r\011\r\014\001\011\r\011\r\t5\011\r\011\r\bn\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\011\r\014\001\005\r\011\r\011\r\011\r\011\r\011\029\011\029\005B\b\"\004n\011\029\014n\011\029\011\029\000\238\011\029\011\029\011\029\011\029\001\206\011\029\011\029\000\238\011\029\011\029\011\029\000\238\011\029\011\029\011\029\011\029\n)\011\029\014r\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\005^\011\029\007\218\011\029\002v\011\029\011\029\011\029\011\029\011\029\tR\011\029\011\029\001\206\011\029\015\018\011\029\011\029\011\029\002\134\004\030\011\029\011\029\011\029\011\029\011\029\011\029\011\029\000\238\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\031g\011\029\011\029\004\"\011\029\011\029\b6\002B\007\166\n)\011\029\011\029\011\029\011\029\011\029\002\222\011\029\011\029\011\029\011\029\011\029\007I\011\029\011\029\004R\011\029\011\029\t6\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\011\029\007I\n)\011\029\011\029\011\029\011\029\011\021\011\021\002z\b\"\b\130\011\021\n%\011\021\011\021\bv\011\021\011\021\011\021\011\021\007r\011\021\011\021\000\238\011\021\011\021\011\021\000\238\011\021\011\021\011\021\011\021\001\134\011\021\004\166\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\015\198\011\021\003\186\011\021\002\198\011\021\011\021\011\021\011\021\011\021\t\229\011\021\011\021\003\190\011\021\015:\011\021\011\021\011\021\003F\003J\011\021\011\021\011\021\011\021\011\021\011\021\011\021\t*\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\004f\011\021\011\021\003\150\011\021\011\021\003\178\005\r\007\166\000\238\011\021\011\021\011\021\011\021\011\021\003\194\011\021\011\021\011\021\011\021\011\021\007Q\011\021\011\021\004R\011\021\011\021\019\194\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\011\021\007Q\004r\011\021\011\021\011\021\011\021\011\001\011\001\005\r\b\"\007r\011\001\t\229\011\001\011\001\000\238\011\001\011\001\011\001\011\001\000\238\011\001\011\001\017f\011\001\011\001\011\001\000\238\011\001\011\001\011\001\011\001\001\150\011\001\b\002\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\nE\011\001\r\150\011\001\007\182\011\001\011\001\011\001\011\001\011\001\018Z\011\001\011\001\000\238\011\001\015b\011\001\011\001\011\001\018\014\007\190\011\001\011\001\011\001\011\001\011\001\011\001\011\001\018b\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\002\014\011\001\011\001\r\178\011\001\011\001\003F\003J\007\166\007\209\011\001\011\001\011\001\011\001\011\001\007\170\011\001\011\001\011\001\011\001\011\001\020\166\011\001\011\001\b\198\011\001\011\001\020\n\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\011\001\nE\001\222\011\001\011\001\011\001\011\001\011\t\011\t\007\230\b\"\007r\011\t\017j\011\t\011\t\018\022\011\t\011\t\011\t\011\t\b\006\011\t\011\t\014\178\011\t\011\t\011\t\000\238\011\t\011\t\011\t\011\t\005~\011\t\t\222\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\005n\011\t\014\182\011\t\016\142\011\t\011\t\011\t\011\t\011\t\022.\011\t\011\t\000\238\011\t\015\134\011\t\011\t\011\t\001\222\005v\011\t\011\t\011\t\011\t\011\t\011\t\011\t\022>\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\003\190\011\t\011\t\r\242\011\t\011\t\003F\021\226\007\166\005\130\011\t\011\t\011\t\011\t\011\t\022\190\011\t\011\t\011\t\011\t\011\t\021\246\011\t\011\t\r\162\011\t\011\t\020&\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\011\t\021n\005&\011\t\011\t\011\t\011\t\011\005\011\005\016\146\b\"\007r\011\005\005&\011\005\011\005\000\238\011\005\011\005\011\005\011\005\001\206\011\005\011\005\n\218\011\005\011\005\011\005\000\238\011\005\011\005\011\005\011\005\005&\011\005\016\166\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\n\222\011\005\017\226\011\005\007\242\011\005\011\005\011\005\011\005\011\005\022R\011\005\011\005\r\170\011\005\015\170\011\005\011\005\011\005\002\170\b\026\011\005\011\005\011\005\011\005\011\005\011\005\011\005\022>\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\b\006\011\005\011\005\022\254\011\005\011\005\007*\007B\007\166\029\226\011\005\011\005\011\005\011\005\011\005\r\162\011\005\011\005\011\005\011\005\011\005\005\r\011\005\011\005\tE\011\005\011\005\020B\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\011\005\030\242\001\222\011\005\011\005\011\005\011\005\011\017\011\017\025\234\b\"\016\170\011\017\014\150\011\017\011\017\017\230\011\017\011\017\011\017\011\017\014~\011\017\011\017\017\138\011\017\011\017\011\017\000\238\011\017\011\017\011\017\011\017\014\154\011\017\000\238\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\014\130\011\017\025\242\011\017\018\202\011\017\011\017\011\017\011\017\011\017\006\181\011\017\011\017\002\158\011\017\015\214\011\017\011\017\011\017\007J\019r\011\017\011\017\011\017\011\017\011\017\011\017\011\017\005\r\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\004\182\011\017\011\017\023F\011\017\011\017\023.\018\030\007\166\001\206\011\017\011\017\011\017\011\017\011\017\005\002\011\017\011\017\011\017\011\017\011\017\017\142\011\017\011\017\005f\011\017\011\017\020^\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\011\017\014\194\000\238\011\017\011\017\011\017\011\017\011!\011!\021\234\b\"\029r\011!\014\226\011!\011!\001\206\011!\011!\011!\011!\018\158\011!\011!\014\198\011!\011!\011!\000\238\011!\011!\011!\011!\014\230\011!\r\162\011!\011!\011!\011!\011!\011!\011!\011!\006\174\011!\023N\011!\018\"\011!\011!\011!\011!\011!\005\r\011!\011!\027\n\011!\015\250\011!\011!\011!\002\198\007\234\011!\011!\011!\011!\011!\011!\011!\025\202\011!\011!\011!\011!\011!\011!\011!\011!\011!\011!\011!\002\198\011!\011!\n\138\011!\011!\n\150\005\r\001\002\001\190\011!\011!\011!\011!\011!\005\r\011!\011!\011!\011!\011!\r\162\011!\011!\019\022\011!\011!\000\238\011!\011!\011!\011!\011!\011!\011!\011!\011!\011!\011!\011!\011!\001\002\001\190\011!\011!\011!\011!\011\025\011\025\0222\003F\003J\011\025\015\n\011\025\011\025\002\198\011\025\011\025\011\025\011\025\0152\011\025\011\025\007v\011\025\011\025\011\025\n\218\011\025\011\025\011\025\011\025\002!\011\025\015\014\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\0156\011\025\022\150\011\025\015^\011\025\011\025\011\025\011\025\011\025\021*\011\025\011\025\002\158\011\025\016\030\011\025\011\025\011\025\n\130\n\178\011\025\011\025\011\025\011\025\011\025\011\025\011\025\026\018\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\003\190\011\025\011\025\n\138\011\025\011\025\n\150\022\210\007\166\006V\011\025\011\025\011\025\011\025\011\025\006\197\011\025\011\025\011\025\011\025\011\025\006n\011\025\011\025\000\238\011\025\011\025\030\138\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\011\025\001\002\001\190\011\025\011\025\011\025\011\025\011\145\011\145\022\218\b\"\014n\011\145\014\178\011\145\011\145\0317\011\145\011\145\011\145\011\145\006j\011\145\011\145\015\n\011\145\011\145\011\145\000\238\011\145\011\145\011\145\011\145\015\130\011\145\015\246\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\014.\011\145\016z\011\145\006\194\011\145\011\145\011\145\011\145\011\145\006\193\011\145\011\145\027\"\011\145\016:\011\145\011\145\011\145\023\006\014~\011\145\011\145\011\145\011\145\011\145\011\145\011\145\007.\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\001\206\011\145\011\145\015\166\011\145\011\145\025\246\025\238\001\002\001\190\011\145\011\145\011\145\011\145\011\145\014e\011\145\011\145\011\145\011\145\011\145\014\150\011\145\011\145\tA\011\145\011\145\t\253\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\011\145\015\210\030R\011\145\011\145\011\145\011\145\004Y\004Y\t\017\014\194\006\185\004Y\017z\004Y\004Y\023N\004Y\004Y\004Y\004Y\007>\004Y\004Y\014\226\004Y\004Y\004Y\000\238\004Y\004Y\004Y\004Y\016\026\004Y\017~\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\016n\004Y\b\130\004Y\000\238\004Y\004Y\004Y\004Y\004Y\000\238\004Y\004Y\019\150\004Y\000\238\004Y\004Y\004Y\026\130\0152\004Y\004Y\004Y\004Y\004Y\004Y\004Y\t\253\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\023\142\nB\n\198\016\134\004Y\004Y\007~\031w\007\138\004\242\004Y\004Y\004Y\004Y\004Y\028\238\004Y\004Y\004Y\004Y\nJ\017R\n\206\004Y\t9\004Y\004Y\n\001\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\004Y\017V\004Y\004Y\004Y\004Y\004Y\0021\0021\018\218\000\238\018*\0021\0049\002\198\0021\000\238\002\146\0021\n~\0021\017\190\002\254\0021\t\166\0021\0021\0021\000\238\0021\0021\0021\001\210\018.\n\182\t\190\003\002\0021\0021\0021\0021\0021\n\190\0021\017\194\003\006\019\154\003\166\027>\0021\0021\0021\0021\0021\029\250\003\238\001\190\004R\0021\030\174\0021\0021\002\186\023\162\017\238\003\246\0021\0021\0021\b\190\b\194\b\206\n\001\014\206\005\174\0021\0021\0021\0021\0021\0021\0021\0021\0021\0262\nB\n\198\017\242\0021\0021\t\234\n\134\n\174\rn\005\186\005\190\0021\0021\0021\n\186\0021\0021\0021\0021\014\214\t5\015R\0021\030\238\0021\0021\023:\0021\0021\0021\0021\0021\0021\005\194\b\214\0021\0021\0021\b\238\004\130\023r\n\202\0021\0021\0021\0021\011y\011y\029\166\b6\027\226\011y\r\142\002\198\011y\000\238\002\146\011y\011y\011y\027\022\002\254\011y\b6\011y\011y\011y\027\162\011y\011y\011y\001\210\023\166\011y\030\178\003\002\011y\011y\011y\011y\011y\011y\011y\b6\003\006\026R\003\166\027\166\011y\011y\011y\011y\011y\028\198\003\238\001\190\000\238\011y\r\190\011y\011y\002\186\026z\r\214\003\246\011y\011y\011y\b\190\b\194\b\206\005\161\011y\005\174\011y\011y\011y\011y\011y\011y\011y\011y\011y\014q\011y\011y\026\178\011y\011y\016\158\005%\016\186\028\250\005\186\005\190\011y\011y\011y\016\218\011y\011y\011y\011y\011y\027\230\011y\011y\018z\011y\011y\027v\011y\011y\011y\011y\011y\011y\005\194\b\214\011y\011y\011y\b\238\004\130\018\162\029\222\011y\011y\011y\011y\011u\011u\002\234\b6\030~\011u\004\014\002\198\011u\018\190\002\146\011u\011u\011u\018\194\002\254\011u\028\202\011u\011u\011u\018\234\011u\011u\011u\001\210\018\254\011u\019\030\003\002\011u\011u\011u\011u\011u\011u\011u\019.\003\006\019B\003\166\019n\011u\011u\011u\011u\011u\019\214\003\238\001\190\019\222\011u\021\"\011u\011u\002\186\028\254\0216\003\246\011u\011u\011u\b\190\b\194\b\206\021:\011u\005\174\011u\011u\011u\011u\011u\011u\011u\011u\011u\006\190\011u\011u\029\238\011u\011u\021\254\022\022\022\166\022\170\005\186\005\190\011u\011u\011u\022\226\011u\011u\011u\011u\011u\030\130\011u\011u\022\230\011u\011u\023\014\011u\011u\011u\011u\011u\011u\005\194\b\214\011u\011u\011u\b\238\004\130\023\018\023*\011u\011u\011u\011u\002\133\002\133\023\214\023\218\023\254\002\133\024\002\002\198\002\133\024\018\002\146\002\133\n~\002\133\024\"\002\254\002\133\024.\002\133\002\133\002\133\024b\002\133\002\133\002\133\001\210\002\001\n\182\024f\003\002\002\133\002\133\002\133\002\133\002\133\n\190\002\133\024\182\003\006\024\222\003\166\005\r\002\133\002\133\002\133\002\133\002\133\024\226\003\238\001\190\024\242\002\133\000\n\002\133\002\133\002\186\025B\025b\003\246\002\133\002\133\002\133\b\190\b\194\b\206\025\162\014\206\005\174\002\133\002\133\002\133\002\133\002\133\002\133\002\133\002\133\002\133\025\198\005y\002\133\002\001\002\133\002\133\005\r\007\002\002\198\005\r\005\186\005\190\002\133\002\133\002\133\025\214\002\133\002\133\002\133\002\133\025\254\000\238\005\r\002\133\005y\002\133\002\133\005\r\002\133\002\133\002\133\002\133\002\133\002\133\005\194\b\214\002\133\002\133\002\133\b\238\004\130\026\002\005\r\002\133\002\133\002\133\002\133\005\r\007\166\005\r\003\178\005\r\005\r\005\r\005\r\005\r\005\r\005\r\021\150\005\r\000\238\005\r\005\r\026\014\005\r\005\r\005\r\020\026\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\026\030\005\r\005\r\026:\026J\005\r\005\r\000\238\005\r\005\r\005\r\005\r\005\r\b\"\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\000\238\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\000\238\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\t\229\004^\005\r\026^\026\138\005\r\005\r\005\r\000\238\005\r\000\n\007\217\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\018n\025\186\005\r\005\r\002\001\002\001\b.\005\r\004R\007\217\026\142\005\r\005\r\007\217\b6\020\030\026*\002\001\000\238\005\r\005\r\005\r\b:\026\154\005\r\005\r\005\r\005\r\005\201\000\129\005\r\000\129\026\170\000\129\000\129\000\129\000\129\000\129\000\129\000\129\005\201\000\129\026\222\000\129\000\129\026\190\000\129\000\129\027\178\028\n\000\129\000\129\0282\000\129\000\129\000\129\000\129\028\166\000\129\004b\000\129\000\129\t\229\028\174\000\129\000\129\r\201\000\129\000\129\000\129\005\201\000\129\n)\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\007\217\029\006\000\129\000\129\r\201\r\201\000\129\000\129\r\201\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\004*\005\201\000\129\na\005\201\000\129\029\022\000\129\029\"\000\129\002\198\001b\014\005\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\029\134\029\154\029\202\000\129\001z\na\001\138\000\238\000\222\029\210\002\182\014\005\000\129\030\n\0302\030j\017\154\002R\000\129\000\129\000\129\000\129\030\154\030\166\000\129\000\129\000\129\000\129\002}\002}\002V\003\178\030\187\002}\030\203\002\198\002}\r\201\002\146\002}\nN\002}\030\222\002\254\002}\030\250\002}\002}\002}\019\246\002}\002}\002}\001\210\016r\031\023\016~\003\002\002}\002}\002}\002}\002}\031'\002}\031C\003\006\031\151\003\166\019\250\002}\002}\002}\002}\002}\031\179\003\238\b\210\031\190\002}\031\243\002}\002}\002\186 \007 \015\003\246\002}\002}\002}\b\190\b\194\b\206\nB\n\198\005\174\002}\002}\002}\002}\002}\002}\002}\002}\002} K\nB\n\198 S\002}\002}\000\000\nJ\000\000\n\206\005\186\005\190\002}\002}\002}\000\000\002}\002}\002}\002}\nJ\000\000\n\206\002}\000\000\002}\002}\000\000\002}\002}\002}\002}\002}\002}\005\194\b\214\002}\002}\002}\b\238\004\130\002\001\002\001\002}\002}\002}\002}\002\145\002\145\t\254\019\254\006e\002\145\020\014\002\198\002\145\000\000\000\000\002\145\n\018\002\145\003j\000\000\002\145\003\146\002\145\002\145\002\145\000\n\002\145\002\145\002\145\001\210\000\000\000\000\000\000\000\000\002\145\002\145\002\145\002\145\002\145\000\000\002\145\002\001\002\001\020~\000\000\000\000\002\145\002\145\002\145\002\145\002\145\006e\003\154\002\001\000\000\002\145\002\001\002\145\002\145\002\186\000\000\006\202\000\000\002\145\002\145\002\145\000\000\021\230\000\n\006e\000\000\000\000\002\145\002\145\002\145\002\145\002\145\002\145\002\145\002\145\002\145\006\206\nB\n\198\000\000\002\145\002\145\007j\000\000\000\000\002\198\000\000\000\000\002\145\002\145\002\145\002\001\002\145\002\145\002\145\002\145\nJ\018\150\n\206\002\145\002\146\002\145\002\145\001\210\002\145\002\145\002\145\002\145\002\145\002\145\t\209\000\000\002\145\002\145\002\145\002\001\025\170\000\238\000\000\002\145\002\145\002\145\002\145\002\141\002\141\000\000\026\230\003\178\002\141\026\234\000\000\002\141\000\000\002\186\002\141\000\000\002\141\000\000\018\154\002\141\027\026\002\141\002\141\002\141\000\n\002\141\002\141\002\141\000\000\t\209\000\000\000\000\018\166\002\141\002\141\002\141\002\141\002\141\000\000\002\141\002\001\006~\005u\027*\006\"\002\141\002\141\002\141\002\141\002\141\t\209\006\158\002\001\002\001\002\141\006\170\002\141\002\141\005\190\000\000\000\000\006\254\002\141\002\141\002\141\005u\000\000\000\000\000\000\000\000\000\000\002\141\002\141\002\141\002\141\002\141\002\141\002\141\002\141\002\141\000\000\nB\n\198\t\209\002\141\002\141\000\000\004\254\000\000\001\206\t\209\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\002\141\nJ\002\198\n\206\002\141\002\146\002\141\002\141\001\210\002\141\002\141\002\141\002\141\002\141\002\141\t\205\000\000\002\141\002\141\002\141\000\000\022\174\000\000\000\000\002\141\002\141\002\141\002\141\002\129\002\129\007\193\000\000\002\170\002\129\023&\003\190\002\129\000\000\002\186\002\129\000\000\002\129\000\000\021b\002\129\023>\002\129\002\129\002\129\007\006\002\129\002\129\002\129\007\193\t\205\000\000\000\000\018\166\002\129\002\129\002\129\002\129\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002\129\t\205\t\n\001\190\001*\002\129\000\000\002\129\002\129\005\190\002\001\002\001\017Z\002\129\002\129\002\129\017n\017\130\017\146\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002\129\002\129\002\129\002\129\002\129\000\000\nB\n\198\t\205\002\129\002\129\000\n\004\254\007\166\000\000\t\205\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\nJ\000\000\n\206\002\129\002\234\002\129\002\129\020R\002\129\002\129\002\129\002\129\002\129\002\129\002\001\014\142\002\129\002\129\002\129\000\000\005%\000\000\000\000\002\129\002\129\002\129\002\129\002)\002)\014\170\b\"\014\186\002)\r\193\003\190\002)\000\000\000\000\002)\000\000\002)\000\000\000\000\002)\b\142\002)\002)\002)\000\238\002)\002)\002)\r\193\r\193\000\000\000\000\r\193\002)\002)\002)\002)\002)\000\000\002)\b\146\005%\000\000\000\000\014\218\002)\002)\002)\002)\002)\000\000\t\n\017\206\000\000\002)\000\000\002)\002)\015\002\000\000\015*\017Z\002)\002)\002)\017n\017\130\017\146\b\130\020V\000\238\002)\002)\002)\002)\002)\002)\002)\002)\002)\000\000\000\238\002)\000\000\002)\002)\000\000\002\001\002\001\021\190\000\238\t)\002)\002)\002)\t)\002)\002)\002)\002)\r\193\000\000\002\001\002)\000\000\002)\002)\000\000\t\254\002)\002)\002)\002)\002)\000\n\n\162\002)\002)\n\018\000\000\n.\000\000\031\163\002)\002)\002)\002)\n\025\n\025\b\150\000\000\000\000\n\025\t)\006~\n\025\000\000\006\"\n\025\015\202\n\025\000\000\002\001\n\025\006\158\n\025\n\025\n\025\006\170\n\025\n\025\n\025\000\000\015\238\t)\016\018\020\238\n\025\n\025\n\025\n\025\n\025\000\000\n\025\000\000\000\000\n]\000\000\000\000\n\025\n\025\n\025\n\025\n\025\000\000\t\021\000\000\000\000\n\025\000\000\n\025\n\025\000\000\000\000\000\000\017\174\n\025\n\025\n\025\n]\000\000\004\254\000\000\000\000\002\254\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\000\000\000\000\n\025\000\000\n\025\n\025\000\000\003\026\000\000\000\000\000\238\000\000\n\025\n\025\n\025\000\000\n\025\n\025\n\025\n\025\003&\000\000\000\000\n\025\000\000\n\025\n\025\000\000\t\254\n\025\n\025\n\025\n\025\n\025\000\000\000\000\n\025\n\025\n\018\000\000\000\000\000\000\005\174\n\025\n\025\n\025\n\025\002\137\002\137\000\000\000\000\000\000\002\137\r\197\006~\002\137\000\000\006\"\002\137\000\000\002\137\000\000\005\186\002\137\006\158\002\137\002\137\002\137\006\170\002\137\002\137\002\137\r\197\r\197\000\000\000\000\r\197\002\137\002\137\002\137\002\137\002\137\000\000\002\137\t5\000\000\005\194\t5\000\000\002\137\002\137\002\137\002\137\002\137\000\000\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\000\000\000\000\0262\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\000\238\002\137\002\137\002\137\002\137\002\137\002\137\002\137\002\137\002\137\000\000\t5\002\137\000\000\002\137\002\137\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\002\137\t5\002\137\002\137\002\137\002\137\r\197\000\000\001\206\002\137\000\000\002\137\002\137\000\000\n\230\002\137\002\137\002\137\002\137\002\137\029\186\000\000\002\137\002\137\002\137\000\000\000\000\t5\000\000\002\137\002\137\002\137\002\137\n\t\n\t\000\000\000\000\000\000\n\t\007\221\004f\n\t\000\000\000\000\n\t\000\000\n\t\000\000\000\000\n\t\002\170\n\t\n\t\n\t\t5\n\t\n\t\n\t\007\221\000\000\000\000\000\000\007\221\n\t\n\t\n\t\n\t\n\t\000\000\n\t\000\000\000\000\000\000\000\000\000\000\n\t\n\t\n\t\n\t\n\t\004\222\004\170\004r\005\165\n\t\000\000\n\t\n\t\000\000\004.\004:\000\000\n\t\n\t\n\t\004F\000\000\000\000\000\000\000\000\000\238\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\000\000\000\000\n\t\000\000\n\t\n\t\000\000\000\000\000\000\000\000\000\238\t%\n\t\n\t\n\t\t%\n\t\n\t\n\t\n\t\007\221\000\000\000\000\n\t\000\000\n\t\n\t\000\000\t\254\n\t\n\t\n\t\n\t\n\t\000\000\000\000\n\t\n\t\n\018\000\000\r\254\000\000\000\000\n\t\n\t\n\t\n\t\003\193\003\193\000\000\000\000\000\000\003\193\t%\014\006\003\193\000\000\014\018\003\193\000\000\003\193\000\000\000\000\011&\014\030\003\193\011z\003\193\014*\003\193\003\193\003\193\000\000\000\000\t%\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\193\000\000\000\000\007\245\000\000\000\000\003\193\003\193\012\030\0126\003\193\000\000\000\000\000\000\000\000\003\193\000\000\012N\003\193\000\000\000\000\000\000\007\245\003\193\003\193\000\238\007\245\000\000\004\254\000\000\000\000\000\000\003\193\003\193\011>\011\190\012f\012~\012\174\003\193\003\193\000\000\000\000\003\193\000\000\003\193\012\198\000\000\000\000\000\000\000\000\000\238\000\000\003\193\003\193\012\222\000\000\003\193\003\193\003\193\003\193\000\000\000\000\000\000\003\193\000\000\003\193\003\193\000\000\r>\003\193\rV\012\150\003\193\003\193\000\000\000\000\003\193\012\246\003\193\000\000\b\193\000\000\000\000\003\193\003\193\r\014\r&\002\233\002\233\000\000\000\000\000\000\002\233\005\158\b\193\002\233\000\000\006\"\002\233\000\000\002\233\000\000\000\000\002\233\b\193\002\233\002\233\002\233\b\193\002\233\002\233\002\233\000\000\000\000\000\000\000\000\000\000\002\233\002\233\002\233\002\233\002\233\000\000\002\233\000\000\000\000\007\225\000\000\000\000\002\233\002\233\002\233\002\233\002\233\000\000\000\000\000\000\000\000\002\233\000\000\002\233\002\233\000\000\000\000\000\000\007\225\002\233\002\233\002\233\007\225\000\000\000\000\000\000\000\000\000\000\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\000\000\000\000\002\233\000\000\002\233\002\233\000\000\000\000\000\000\000\000\b\221\000\000\002\233\002\233\002\233\000\000\002\233\002\233\002\233\002\233\000\000\000\000\000\000\002\233\000\000\002\233\002\233\000\000\t\254\002\233\002\233\002\233\002\233\002\233\000\000\000\000\002\233\002\233\n\018\000\000\b\221\000\000\000\000\002\233\002\233\002\233\002\233\002\229\002\229\000\000\000\000\000\000\002\229\b\202\b\221\002\229\000\000\006\"\002\229\000\000\002\229\000\000\000\000\002\229\b\221\002\229\002\229\002\229\b\221\002\229\002\229\002\229\000\000\000\000\000\000\000\000\000\000\002\229\002\229\002\229\002\229\002\229\000\000\002\229\000\000\000\000\000\000\000\000\000\000\002\229\002\229\002\229\002\229\002\229\000\000\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\000\000\000\000\000\000\002\229\002\229\002\229\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\011>\002\229\002\229\002\229\002\229\002\229\002\229\000\000\000\000\002\229\000\000\002\229\002\229\000\000\000\000\000\000\000\000\000\238\000\000\002\229\002\229\002\229\000\000\002\229\002\229\002\229\002\229\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\002\229\002\229\002\229\002\229\002\229\002\229\000\000\000\000\002\229\002\229\002\229\000\000\b\249\000\000\000\000\002\229\002\229\002\229\002\229\002\185\002\185\000\000\000\000\000\000\002\185\000\000\006~\002\185\000\000\006\"\002\185\000\000\002\185\000\000\000\000\002\185\b\249\002\185\002\185\002\185\b\249\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\185\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\185\000\000\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\000\000\000\000\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\185\002\185\002\185\002\185\002\185\000\000\000\000\002\185\000\000\002\185\002\185\000\000\000\000\000\000\000\000\b\241\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\t\254\002\185\002\185\002\185\002\185\002\185\000\000\000\000\002\185\002\185\n\018\000\000\b\241\000\000\000\000\002\185\002\185\002\185\002\185\002\181\002\181\000\000\000\000\000\000\002\181\000\000\014B\002\181\000\000\b\241\002\181\000\000\002\181\000\000\000\000\002\181\b\241\002\181\002\181\002\181\b\241\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\002\181\002\181\002\181\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\002\181\002\181\002\181\000\000\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\000\000\000\000\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011>\002\181\002\181\002\181\002\181\002\181\002\181\000\000\000\000\002\181\000\000\002\181\002\181\000\000\000\000\000\000\000\000\000\238\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\002\181\002\181\002\181\002\181\002\181\002\181\000\000\000\000\002\181\002\181\002\181\000\000\b\189\000\000\000\000\002\181\002\181\002\181\002\181\002\209\002\209\000\000\000\000\000\000\002\209\000\000\b\189\002\209\000\000\006\"\002\209\000\000\002\209\000\000\000\000\002\209\b\189\002\209\002\209\002\209\b\189\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\002\209\002\209\002\209\000\000\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\002\209\002\209\002\209\000\000\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\000\000\000\000\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\002\209\002\209\002\209\002\209\002\209\002\209\002\209\000\000\000\000\002\209\000\000\002\209\002\209\000\000\000\000\000\000\000\000\000\238\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\t\254\002\209\002\209\002\209\002\209\002\209\000\000\000\000\002\209\002\209\n\018\000\000\017*\000\000\000\000\002\209\002\209\002\209\002\209\002\205\002\205\000\000\000\000\000\000\002\205\000\000\014\006\002\205\000\000\014\018\002\205\000\000\002\205\000\000\000\000\011&\014\030\002\205\002\205\002\205\014*\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\002\205\002\205\002\205\011\166\002\205\000\000\002\205\018\150\000\000\000\000\002\146\000\000\002\205\002\205\002\205\002\205\002\205\000\000\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\000\000\000\000\000\000\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\011>\011\190\002\205\002\205\002\205\002\205\002\205\000\000\018\154\002\205\000\000\002\205\002\205\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\002\205\018\166\002\205\002\205\002\205\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\002\205\002\205\002\205\002\205\002\205\002\205\000\000\000\000\002\205\002\205\002\205\000\000\000\000\005\190\000\000\002\205\002\205\002\205\002\205\002\241\002\241\000\000\000\000\000\000\002\241\000\000\002\014\002\241\000\000\002\146\002\241\000\000\002\241\000\000\000\000\002\241\000\000\002\241\002\241\002\241\029*\002\241\002\241\002\241\000\000\000\000\000\000\000\000\000\000\002\241\002\241\002\241\002\241\002\241\000\000\002\241\018\150\000\000\000\000\002\146\000\000\002\241\002\241\002\241\002\241\002\241\000\000\030\214\001\222\000\000\002\241\000\000\002\241\002\241\000\000\000\000\000\000\000\000\002\241\002\241\002\241\018\166\000\000\000\000\000\000\000\000\000\000\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\000\000\018\154\002\241\000\000\002\241\002\241\000\000\000\000\000\000\000\000\000\000\005\190\002\241\002\241\002\241\018\166\002\241\002\241\002\241\002\241\000\000\000\000\000\000\002\241\000\000\002\241\002\241\000\000\t\254\002\241\002\241\002\241\002\241\002\241\000\000\000\000\002\241\002\241\n\018\000\000\000\000\005\190\000\000\002\241\002\241\002\241\002\241\002\237\002\237\000\000\000\000\000\000\002\237\000\000\003\190\002\237\000\000\000\000\002\237\000\000\002\237\000\000\000\000\002\237\000\000\002\237\002\237\002\237\025\014\002\237\002\237\002\237\000\000\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\237\000\000\002\237\000\000\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\237\000\000\005\246\000\000\000\000\002\237\000\000\002\237\002\237\000\000\000\000\000\000\004\006\002\237\002\237\002\237\006\210\000\000\004\018\000\000\000\000\000\000\002\237\002\237\011>\002\237\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\000\000\002\237\002\237\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\002\237\000\000\002\237\002\237\002\237\002\237\000\000\000\000\000\000\002\237\000\000\002\237\002\237\000\000\002\237\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\002\237\002\237\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\198\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\002\177\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\177\000\000\002\177\000\000\000\000\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\177\000\000\n\210\003\178\000\000\002\177\000\000\002\177\002\177\000\000\000\000\000\000\000\000\002\177\002\177\002\177\014f\000\000\014v\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\177\002\177\002\177\002\177\002\177\000\000\000\000\002\177\000\000\002\177\002\177\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\t\254\002\177\002\177\002\177\002\177\002\177\000\000\000\000\002\177\002\177\n\018\000\000\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\198\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\002\173\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\173\000\000\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\173\000\000\015V\003\178\000\000\002\173\000\000\002\173\002\173\000\000\000\000\000\000\000\000\002\173\002\173\002\173\015z\000\000\015\158\000\000\000\000\000\000\002\173\002\173\011>\002\173\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\000\000\002\173\002\173\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\002\173\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\201\002\201\000\000\000\000\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\002\201\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\201\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\201\000\000\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\000\000\000\000\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\201\002\201\002\201\002\201\002\201\000\000\000\000\002\201\000\000\002\201\002\201\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\t\254\002\201\002\201\002\201\002\201\002\201\000\000\000\000\002\201\002\201\n\018\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\197\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\011&\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\011\166\002\197\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\002\197\002\197\000\000\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\000\000\000\000\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\011>\011\190\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\000\000\002\197\002\197\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\002\197\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\002\197\002\197\002\197\002\197\002\193\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\002\193\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\193\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\193\000\000\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\000\000\000\000\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\000\000\002\193\002\193\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\t\254\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\002\193\n\018\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\189\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\011&\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\011\166\002\189\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\002\189\002\189\000\000\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\000\000\000\000\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\011>\011\190\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\000\000\002\189\002\189\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\002\189\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\002\189\002\189\002\189\002\189\003\017\003\017\000\000\000\000\000\000\003\017\000\000\000\000\003\017\000\000\000\000\003\017\000\000\003\017\000\000\000\000\003\017\000\000\003\017\003\017\003\017\000\000\003\017\003\017\003\017\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\000\000\003\017\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\000\000\000\000\000\000\000\000\003\017\000\000\003\017\003\017\000\000\000\000\000\000\000\000\003\017\003\017\003\017\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\000\000\000\000\003\017\000\000\003\017\003\017\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\000\000\003\017\003\017\003\017\003\017\000\000\000\000\000\000\003\017\000\000\003\017\003\017\000\000\t\254\003\017\003\017\003\017\003\017\003\017\000\000\000\000\003\017\003\017\n\018\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\r\003\r\000\000\000\000\000\000\003\r\000\000\000\000\003\r\000\000\000\000\003\r\000\000\003\r\000\000\000\000\011&\000\000\003\r\003\r\003\r\000\000\003\r\003\r\003\r\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\r\000\000\000\000\000\000\000\000\000\000\003\r\003\r\012\030\0126\003\r\000\000\000\000\000\000\000\000\003\r\000\000\012N\003\r\000\000\000\000\000\000\000\000\003\r\003\r\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\011>\011\190\012f\012~\012\174\003\r\003\r\000\000\000\000\003\r\000\000\003\r\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\012\222\000\000\003\r\003\r\003\r\003\r\000\000\000\000\000\000\003\r\000\000\003\r\003\r\000\000\003\r\003\r\003\r\012\150\003\r\003\r\000\000\000\000\003\r\012\246\003\r\000\000\000\000\000\000\000\000\003\r\003\r\r\014\r&\002\225\002\225\000\000\000\000\000\000\002\225\000\000\000\000\002\225\000\000\000\000\002\225\000\000\002\225\000\000\000\000\002\225\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\000\000\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\000\000\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\000\000\000\000\000\000\002\225\002\225\002\225\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\002\225\002\225\002\225\002\225\000\000\000\000\002\225\000\000\002\225\002\225\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\t\254\002\225\002\225\002\225\002\225\002\225\000\000\000\000\002\225\002\225\n\018\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\221\002\221\000\000\000\000\000\000\002\221\000\000\000\000\002\221\000\000\000\000\002\221\000\000\002\221\000\000\000\000\011&\000\000\002\221\002\221\002\221\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\011\166\002\221\000\000\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\221\000\000\000\000\000\000\000\000\002\221\000\000\002\221\002\221\000\000\000\000\000\000\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\011>\011\190\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\000\000\002\221\002\221\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\000\000\002\221\002\221\002\221\002\221\000\000\000\000\000\000\002\221\000\000\002\221\002\221\000\000\002\221\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\217\002\217\000\000\000\000\000\000\002\217\000\000\000\000\002\217\000\000\000\000\002\217\000\000\002\217\000\000\000\000\002\217\000\000\002\217\002\217\002\217\000\000\002\217\002\217\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\217\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\217\000\000\000\000\000\000\000\000\002\217\000\000\002\217\002\217\000\000\000\000\000\000\000\000\002\217\002\217\002\217\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\217\002\217\002\217\002\217\002\217\000\000\000\000\002\217\000\000\002\217\002\217\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\000\000\002\217\002\217\002\217\002\217\000\000\000\000\000\000\002\217\000\000\002\217\002\217\000\000\t\254\002\217\002\217\002\217\002\217\002\217\000\000\000\000\002\217\002\217\n\018\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\213\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\011&\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\002\213\011\166\002\213\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\002\213\002\213\002\213\000\000\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\000\000\000\000\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\011>\011\190\002\213\002\213\002\213\002\213\002\213\000\000\000\000\002\213\000\000\002\213\002\213\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\002\213\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\002\213\002\213\002\213\002\213\002\213\002\213\000\000\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\002\213\002\213\002\213\002\213\003\001\003\001\000\000\000\000\000\000\003\001\000\000\000\000\003\001\000\000\000\000\003\001\000\000\003\001\000\000\000\000\003\001\000\000\003\001\003\001\003\001\000\000\003\001\003\001\003\001\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\003\001\000\000\003\001\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\003\001\000\000\000\000\000\000\000\000\003\001\000\000\003\001\003\001\000\000\000\000\000\000\000\000\003\001\003\001\003\001\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\000\000\000\000\003\001\000\000\003\001\003\001\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\000\000\003\001\003\001\003\001\003\001\000\000\000\000\000\000\003\001\000\000\003\001\003\001\000\000\t\254\003\001\003\001\003\001\003\001\003\001\000\000\000\000\003\001\003\001\n\018\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\002\253\002\253\000\000\000\000\000\000\002\253\000\000\000\000\002\253\000\000\000\000\002\253\000\000\002\253\000\000\000\000\011&\000\000\002\253\002\253\002\253\000\000\002\253\002\253\002\253\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\002\253\000\000\002\253\000\000\000\000\000\000\000\000\000\000\002\253\002\253\012\030\0126\002\253\000\000\000\000\000\000\000\000\002\253\000\000\002\253\002\253\000\000\000\000\000\000\000\000\002\253\002\253\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\011>\011\190\012f\012~\002\253\002\253\002\253\000\000\000\000\002\253\000\000\002\253\002\253\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\002\253\000\000\002\253\002\253\002\253\002\253\000\000\000\000\000\000\002\253\000\000\002\253\002\253\000\000\002\253\002\253\002\253\012\150\002\253\002\253\000\000\000\000\002\253\002\253\002\253\000\000\000\000\000\000\000\000\002\253\002\253\002\253\002\253\002\169\002\169\000\000\000\000\000\000\002\169\000\000\000\000\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\002\169\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\169\000\000\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\169\002\169\002\169\002\169\002\169\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\t\254\002\169\002\169\002\169\002\169\002\169\000\000\000\000\002\169\002\169\n\018\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\165\002\165\000\000\000\000\000\000\002\165\000\000\000\000\002\165\000\000\000\000\002\165\000\000\002\165\000\000\000\000\011&\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\011\166\002\165\000\000\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\165\000\000\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\000\000\000\000\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\011>\011\190\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\000\000\002\165\002\165\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\002\165\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\002\165\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\002\165\002\165\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\161\002\161\000\000\000\000\000\000\002\161\000\000\000\000\002\161\000\000\000\000\002\161\000\000\002\161\000\000\000\000\002\161\000\000\002\161\002\161\002\161\000\000\002\161\002\161\002\161\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\161\000\000\002\161\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\161\000\000\000\000\000\000\000\000\002\161\000\000\002\161\002\161\000\000\000\000\000\000\000\000\002\161\002\161\002\161\000\000\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\000\000\002\161\002\161\000\000\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\000\000\002\161\002\161\002\161\002\161\000\000\000\000\000\000\002\161\000\000\002\161\002\161\000\000\t\254\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\002\161\n\018\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\157\002\157\000\000\000\000\000\000\002\157\000\000\000\000\002\157\000\000\000\000\002\157\000\000\002\157\000\000\000\000\011&\000\000\002\157\002\157\002\157\000\000\002\157\002\157\002\157\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\002\157\000\000\002\157\000\000\000\000\000\000\000\000\000\000\002\157\002\157\012\030\0126\002\157\000\000\000\000\000\000\000\000\002\157\000\000\002\157\002\157\000\000\000\000\000\000\000\000\002\157\002\157\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\011>\011\190\012f\012~\002\157\002\157\002\157\000\000\000\000\002\157\000\000\002\157\002\157\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\002\157\000\000\002\157\002\157\002\157\002\157\000\000\000\000\000\000\002\157\000\000\002\157\002\157\000\000\002\157\002\157\002\157\012\150\002\157\002\157\000\000\000\000\002\157\002\157\002\157\000\000\000\000\000\000\000\000\002\157\002\157\002\157\002\157\003Q\003Q\000\000\000\000\000\000\003Q\000\000\000\000\003Q\000\000\000\000\003Q\000\000\003Q\000\000\000\000\003Q\000\000\003Q\003Q\003Q\000\000\003Q\003Q\003Q\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003Q\000\000\003Q\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003Q\000\000\000\000\000\000\000\000\003Q\000\000\003Q\003Q\000\000\000\000\000\000\000\000\003Q\003Q\003Q\000\000\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003Q\003Q\003Q\003Q\003Q\000\000\000\000\003Q\000\000\003Q\003Q\000\000\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\000\000\003Q\003Q\003Q\003Q\000\000\000\000\000\000\003Q\000\000\003Q\003Q\000\000\t\254\003Q\003Q\003Q\003Q\003Q\000\000\000\000\003Q\003Q\n\018\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003M\003M\000\000\000\000\000\000\003M\000\000\000\000\003M\000\000\000\000\003M\000\000\003M\000\000\000\000\011&\000\000\003M\003M\003M\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\003M\000\000\003M\000\000\000\000\000\000\000\000\000\000\003M\003M\012\030\0126\003M\000\000\000\000\000\000\000\000\003M\000\000\003M\003M\000\000\000\000\000\000\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\011>\011\190\012f\003M\003M\003M\003M\000\000\000\000\003M\000\000\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\003M\000\000\003M\003M\003M\003M\000\000\000\000\000\000\003M\000\000\003M\003M\000\000\003M\003M\003M\012\150\003M\003M\000\000\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\003M\003M\003M\003M\002\153\002\153\000\000\000\000\000\000\002\153\000\000\000\000\002\153\000\000\000\000\002\153\000\000\002\153\000\000\000\000\002\153\000\000\002\153\002\153\002\153\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\153\000\000\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\153\000\000\000\000\000\000\000\000\002\153\000\000\002\153\002\153\000\000\000\000\000\000\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\000\000\002\153\002\153\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\000\000\002\153\002\153\002\153\002\153\000\000\000\000\000\000\002\153\000\000\002\153\002\153\000\000\t\254\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\002\153\n\018\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\149\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\011&\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\002\149\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\012\030\0126\002\149\000\000\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\011>\011\190\012f\012~\002\149\002\149\002\149\000\000\000\000\002\149\000\000\002\149\002\149\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\002\149\002\149\002\149\012\150\002\149\002\149\000\000\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\002\149\002\149\002\149\002\149\003\t\003\t\000\000\000\000\000\000\003\t\000\000\000\000\003\t\000\000\000\000\003\t\000\000\003\t\000\000\000\000\003\t\000\000\003\t\003\t\003\t\000\000\003\t\003\t\003\t\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\t\000\000\003\t\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\t\000\000\000\000\000\000\000\000\003\t\000\000\003\t\003\t\000\000\000\000\000\000\000\000\003\t\003\t\003\t\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\t\003\t\003\t\003\t\003\t\000\000\000\000\003\t\000\000\003\t\003\t\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\000\000\003\t\003\t\003\t\003\t\000\000\000\000\000\000\003\t\000\000\003\t\003\t\000\000\t\254\003\t\003\t\003\t\003\t\003\t\000\000\000\000\003\t\003\t\n\018\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\005\003\005\000\000\000\000\000\000\003\005\000\000\000\000\003\005\000\000\000\000\003\005\000\000\003\005\000\000\000\000\011&\000\000\003\005\003\005\003\005\000\000\003\005\003\005\003\005\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\003\005\000\000\003\005\000\000\000\000\000\000\000\000\000\000\003\005\003\005\012\030\0126\003\005\000\000\000\000\000\000\000\000\003\005\000\000\003\005\003\005\000\000\000\000\000\000\000\000\003\005\003\005\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\011>\011\190\012f\012~\003\005\003\005\003\005\000\000\000\000\003\005\000\000\003\005\003\005\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\003\005\000\000\003\005\003\005\003\005\003\005\000\000\000\000\000\000\003\005\000\000\003\005\003\005\000\000\003\005\003\005\003\005\012\150\003\005\003\005\000\000\000\000\003\005\003\005\003\005\000\000\000\000\000\000\000\000\003\005\003\005\003\005\003\005\002\249\002\249\000\000\000\000\000\000\002\249\000\000\000\000\002\249\000\000\000\000\002\249\000\000\002\249\000\000\000\000\002\249\000\000\002\249\002\249\002\249\000\000\002\249\002\249\002\249\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\249\000\000\002\249\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\249\000\000\000\000\000\000\000\000\002\249\000\000\002\249\002\249\000\000\000\000\000\000\000\000\002\249\002\249\002\249\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\249\002\249\002\249\002\249\002\249\000\000\000\000\002\249\000\000\002\249\002\249\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\000\000\002\249\002\249\002\249\002\249\000\000\000\000\000\000\002\249\000\000\002\249\002\249\000\000\t\254\002\249\002\249\002\249\002\249\002\249\000\000\000\000\002\249\002\249\n\018\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\245\002\245\000\000\000\000\000\000\002\245\000\000\000\000\002\245\000\000\000\000\002\245\000\000\002\245\000\000\000\000\011&\000\000\002\245\002\245\002\245\000\000\002\245\002\245\002\245\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\002\245\000\000\002\245\000\000\000\000\000\000\000\000\000\000\002\245\002\245\012\030\0126\002\245\000\000\000\000\000\000\000\000\002\245\000\000\002\245\002\245\000\000\000\000\000\000\000\000\002\245\002\245\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\011>\011\190\012f\012~\002\245\002\245\002\245\000\000\000\000\002\245\000\000\002\245\002\245\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\002\245\000\000\002\245\002\245\002\245\002\245\000\000\000\000\000\000\002\245\000\000\002\245\002\245\000\000\002\245\002\245\002\245\012\150\002\245\002\245\000\000\000\000\002\245\002\245\002\245\000\000\000\000\000\000\000\000\002\245\002\245\002\245\002\245\003\025\003\025\000\000\000\000\000\000\003\025\000\000\000\000\003\025\000\000\000\000\003\025\000\000\003\025\000\000\000\000\003\025\000\000\003\025\003\025\003\025\000\000\003\025\003\025\003\025\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\025\000\000\003\025\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\025\000\000\000\000\000\000\000\000\003\025\000\000\003\025\003\025\000\000\000\000\000\000\000\000\003\025\003\025\003\025\000\000\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\025\003\025\003\025\003\025\003\025\000\000\000\000\003\025\000\000\003\025\003\025\000\000\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\000\000\003\025\003\025\003\025\003\025\000\000\000\000\000\000\003\025\000\000\003\025\003\025\000\000\t\254\003\025\003\025\003\025\003\025\003\025\000\000\000\000\003\025\003\025\n\018\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\021\003\021\000\000\000\000\000\000\003\021\000\000\000\000\003\021\000\000\000\000\003\021\000\000\003\021\000\000\000\000\011&\000\000\003\021\003\021\003\021\000\000\003\021\003\021\003\021\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\021\000\000\000\000\000\000\000\000\000\000\003\021\003\021\012\030\0126\003\021\000\000\000\000\000\000\000\000\003\021\000\000\012N\003\021\000\000\000\000\000\000\000\000\003\021\003\021\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\021\003\021\011>\011\190\012f\012~\012\174\003\021\003\021\000\000\000\000\003\021\000\000\003\021\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\021\003\021\012\222\000\000\003\021\003\021\003\021\003\021\000\000\000\000\000\000\003\021\000\000\003\021\003\021\000\000\003\021\003\021\003\021\012\150\003\021\003\021\000\000\000\000\003\021\012\246\003\021\000\000\000\000\000\000\000\000\003\021\003\021\r\014\r&\003!\003!\000\000\000\000\000\000\003!\000\000\000\000\003!\000\000\000\000\003!\000\000\003!\000\000\000\000\003!\000\000\003!\003!\003!\000\000\003!\003!\003!\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003!\000\000\003!\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003!\000\000\000\000\000\000\000\000\003!\000\000\003!\003!\000\000\000\000\000\000\000\000\003!\003!\003!\000\000\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003!\003!\003!\003!\003!\000\000\000\000\003!\000\000\003!\003!\000\000\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\000\000\003!\003!\003!\003!\000\000\000\000\000\000\003!\000\000\003!\003!\000\000\t\254\003!\003!\003!\003!\003!\000\000\000\000\003!\003!\n\018\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003\029\003\029\000\000\000\000\000\000\003\029\000\000\000\000\003\029\000\000\000\000\003\029\000\000\003\029\000\000\000\000\011&\000\000\003\029\003\029\003\029\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\003\029\000\000\003\029\000\000\000\000\000\000\000\000\000\000\003\029\003\029\012\030\0126\003\029\000\000\000\000\000\000\000\000\003\029\000\000\012N\003\029\000\000\000\000\000\000\000\000\003\029\003\029\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003\029\011>\011\190\012f\012~\012\174\003\029\003\029\000\000\000\000\003\029\000\000\003\029\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003\029\012\222\000\000\003\029\003\029\003\029\003\029\000\000\000\000\000\000\003\029\000\000\003\029\003\029\000\000\003\029\003\029\003\029\012\150\003\029\003\029\000\000\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\003\029\003\029\r\014\r&\003)\003)\000\000\000\000\000\000\003)\000\000\000\000\003)\000\000\000\000\003)\000\000\003)\000\000\000\000\003)\000\000\003)\003)\003)\000\000\003)\003)\003)\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003)\000\000\003)\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003)\000\000\000\000\000\000\000\000\003)\000\000\003)\003)\000\000\000\000\000\000\000\000\003)\003)\003)\000\000\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003)\003)\003)\003)\003)\000\000\000\000\003)\000\000\003)\003)\000\000\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\000\000\003)\003)\003)\003)\000\000\000\000\000\000\003)\000\000\003)\003)\000\000\t\254\003)\003)\003)\003)\003)\000\000\000\000\003)\003)\n\018\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003%\003%\000\000\000\000\000\000\003%\000\000\000\000\003%\000\000\000\000\003%\000\000\003%\000\000\000\000\011&\000\000\003%\003%\003%\000\000\003%\003%\003%\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\003%\000\000\003%\000\000\000\000\000\000\000\000\000\000\003%\003%\012\030\0126\003%\000\000\000\000\000\000\000\000\003%\000\000\012N\003%\000\000\000\000\000\000\000\000\003%\003%\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003%\003%\011>\011\190\012f\012~\012\174\003%\003%\000\000\000\000\003%\000\000\003%\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003%\003%\012\222\000\000\003%\003%\003%\003%\000\000\000\000\000\000\003%\000\000\003%\003%\000\000\003%\003%\003%\012\150\003%\003%\000\000\000\000\003%\003%\003%\000\000\000\000\000\000\000\000\003%\003%\r\014\r&\n\017\n\017\000\000\000\000\000\000\n\017\000\000\000\000\n\017\000\000\000\000\n\017\000\000\n\017\000\000\000\000\n\017\000\000\n\017\n\017\n\017\000\000\n\017\n\017\n\017\000\000\000\000\000\000\000\000\000\000\n\017\n\017\n\017\n\017\n\017\000\000\n\017\000\000\000\000\000\000\000\000\000\000\n\017\n\017\n\017\n\017\n\017\000\000\000\000\000\000\000\000\n\017\000\000\n\017\n\017\000\000\000\000\000\000\000\000\n\017\n\017\n\017\000\000\000\000\000\000\000\000\000\000\000\000\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\000\000\000\000\n\017\000\000\n\017\n\017\000\000\000\000\000\000\000\000\000\000\000\000\n\017\n\017\n\017\000\000\n\017\n\017\n\017\n\017\000\000\000\000\000\000\n\017\000\000\n\017\n\017\000\000\t\254\n\017\n\017\n\017\n\017\n\017\000\000\000\000\n\017\n\017\n\018\000\000\000\000\000\000\000\000\n\017\n\017\n\017\n\017\n\r\n\r\000\000\000\000\000\000\n\r\000\000\000\000\n\r\000\000\000\000\n\r\000\000\n\r\000\000\000\000\011&\000\000\n\r\n\r\n\r\000\000\n\r\n\r\n\r\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\n\r\000\000\000\000\000\000\000\000\000\000\n\r\n\r\012\030\0126\n\r\000\000\000\000\000\000\000\000\n\r\000\000\012N\n\r\000\000\000\000\000\000\000\000\n\r\n\r\000\238\000\000\000\000\000\000\000\000\000\000\000\000\n\r\n\r\011>\011\190\012f\012~\012\174\n\r\n\r\000\000\000\000\n\r\000\000\n\r\012\198\000\000\000\000\000\000\000\000\000\000\000\000\n\r\n\r\012\222\000\000\n\r\n\r\n\r\n\r\000\000\000\000\000\000\n\r\000\000\n\r\n\r\000\000\n\r\n\r\n\r\012\150\n\r\n\r\000\000\000\000\n\r\012\246\n\r\000\000\000\000\000\000\000\000\n\r\n\r\r\014\r&\0031\0031\000\000\000\000\000\000\0031\000\000\000\000\0031\000\000\000\000\0031\000\000\0031\000\000\000\000\0031\000\000\0031\0031\0031\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\0031\0031\000\000\0031\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\0031\0031\000\000\000\000\000\000\000\000\0031\000\000\0031\0031\000\000\000\000\000\000\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\0031\0031\0031\0031\0031\0031\000\000\000\000\0031\000\000\0031\0031\000\000\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\000\000\0031\0031\0031\0031\000\000\000\000\000\000\0031\000\000\0031\0031\000\000\t\254\0031\0031\0031\0031\0031\000\000\000\000\0031\0031\n\018\000\000\000\000\000\000\000\000\0031\0031\0031\0031\003-\003-\000\000\000\000\000\000\003-\000\000\000\000\003-\000\000\000\000\003-\000\000\003-\000\000\000\000\011&\000\000\003-\003-\003-\000\000\003-\003-\003-\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003-\000\000\000\000\000\000\000\000\000\000\003-\003-\012\030\0126\003-\000\000\000\000\000\000\000\000\003-\000\000\012N\003-\000\000\000\000\000\000\000\000\003-\003-\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003-\003-\011>\011\190\012f\012~\012\174\003-\003-\000\000\000\000\003-\000\000\003-\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003-\003-\012\222\000\000\003-\003-\003-\003-\000\000\000\000\000\000\003-\000\000\003-\003-\000\000\r>\003-\rV\012\150\003-\003-\000\000\000\000\003-\012\246\003-\000\000\000\000\000\000\000\000\003-\003-\r\014\r&\n\005\n\005\000\000\000\000\000\000\n\005\000\000\000\000\n\005\000\000\000\000\n\005\000\000\n\005\000\000\000\000\011&\000\000\n\005\n\005\n\005\000\000\n\005\n\005\n\005\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\n\005\000\000\000\000\000\000\000\000\000\000\n\005\n\005\012\030\0126\n\005\000\000\000\000\000\000\000\000\n\005\000\000\012N\n\005\000\000\000\000\000\000\000\000\n\005\n\005\000\238\000\000\000\000\000\000\000\000\000\000\000\000\n\005\n\005\011>\011\190\012f\012~\012\174\n\005\n\005\000\000\000\000\n\005\000\000\n\005\012\198\000\000\000\000\000\000\000\000\000\000\000\000\n\005\n\005\012\222\000\000\n\005\n\005\n\005\n\005\000\000\000\000\000\000\n\005\000\000\n\005\n\005\000\000\n\005\n\005\n\005\012\150\n\005\n\005\000\000\000\000\n\005\012\246\n\005\000\000\000\000\000\000\000\000\n\005\n\005\r\014\r&\003\129\003\129\000\000\000\000\000\000\003\129\000\000\000\000\003\129\000\000\000\000\003\129\000\000\003\129\000\000\000\000\003\129\000\000\003\129\003\129\003\129\000\000\003\129\003\129\003\129\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\000\000\003\129\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\000\000\000\000\000\000\000\000\003\129\000\000\003\129\003\129\000\000\000\000\000\000\000\000\003\129\003\129\003\129\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\003\129\003\129\003\129\003\129\000\000\000\000\003\129\000\000\003\129\003\129\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\000\000\003\129\003\129\003\129\003\129\000\000\000\000\000\000\003\129\000\000\003\129\003\129\000\000\t\254\003\129\003\129\003\129\003\129\003\129\000\000\000\000\003\129\003\129\n\018\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003}\003}\000\000\000\000\000\000\003}\000\000\000\000\003}\000\000\000\000\003}\000\000\003}\000\000\000\000\011&\000\000\003}\003}\003}\000\000\003}\003}\003}\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003}\000\000\000\000\000\000\000\000\000\000\003}\003}\012\030\0126\003}\000\000\000\000\000\000\000\000\003}\000\000\012N\003}\000\000\000\000\000\000\000\000\003}\003}\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003}\003}\011>\011\190\012f\012~\012\174\003}\003}\000\000\000\000\003}\000\000\003}\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003}\003}\012\222\000\000\003}\003}\003}\003}\000\000\000\000\000\000\003}\000\000\003}\003}\000\000\r>\003}\rV\012\150\003}\003}\000\000\000\000\003}\012\246\003}\000\000\000\000\000\000\000\000\003}\003}\r\014\r&\003\161\003\161\000\000\000\000\000\000\003\161\000\000\000\000\003\161\000\000\000\000\003\161\000\000\003\161\000\000\000\000\003\161\000\000\003\161\003\161\003\161\000\000\003\161\003\161\003\161\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\161\000\000\003\161\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\161\000\000\000\000\000\000\000\000\003\161\000\000\003\161\003\161\000\000\000\000\000\000\000\000\003\161\003\161\003\161\000\000\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\000\000\000\000\003\161\000\000\003\161\003\161\000\000\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\000\000\003\161\003\161\003\161\003\161\000\000\000\000\000\000\003\161\000\000\003\161\003\161\000\000\t\254\003\161\003\161\003\161\003\161\003\161\000\000\000\000\003\161\003\161\n\018\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\157\003\157\000\000\000\000\000\000\003\157\000\000\000\000\003\157\000\000\000\000\003\157\000\000\003\157\000\000\000\000\011&\000\000\003\157\003\157\003\157\000\000\003\157\003\157\003\157\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\157\000\000\000\000\000\000\000\000\000\000\003\157\003\157\012\030\0126\003\157\000\000\000\000\000\000\000\000\003\157\000\000\012N\003\157\000\000\000\000\000\000\000\000\003\157\003\157\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\157\003\157\011>\011\190\012f\012~\012\174\003\157\003\157\000\000\000\000\003\157\000\000\003\157\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\157\003\157\012\222\000\000\003\157\003\157\003\157\003\157\000\000\000\000\000\000\003\157\000\000\003\157\003\157\000\000\r>\003\157\rV\012\150\003\157\003\157\000\000\000\000\003\157\012\246\003\157\000\000\000\000\000\000\000\000\003\157\003\157\r\014\r&\003\145\003\145\000\000\000\000\000\000\003\145\000\000\000\000\003\145\000\000\000\000\003\145\000\000\003\145\000\000\000\000\003\145\000\000\003\145\003\145\003\145\000\000\003\145\003\145\003\145\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\003\145\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\000\000\000\000\000\000\003\145\000\000\003\145\003\145\000\000\000\000\000\000\000\000\003\145\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\003\145\003\145\003\145\003\145\000\000\000\000\003\145\000\000\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\000\000\003\145\003\145\003\145\003\145\000\000\000\000\000\000\003\145\000\000\003\145\003\145\000\000\t\254\003\145\003\145\003\145\003\145\003\145\000\000\000\000\003\145\003\145\n\018\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\141\003\141\000\000\000\000\000\000\003\141\000\000\000\000\003\141\000\000\000\000\003\141\000\000\003\141\000\000\000\000\011&\000\000\003\141\003\141\003\141\000\000\003\141\003\141\003\141\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\141\000\000\000\000\000\000\000\000\000\000\003\141\003\141\012\030\0126\003\141\000\000\000\000\000\000\000\000\003\141\000\000\012N\003\141\000\000\000\000\000\000\000\000\003\141\003\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\141\011>\011\190\012f\012~\012\174\003\141\003\141\000\000\000\000\003\141\000\000\003\141\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\141\012\222\000\000\003\141\003\141\003\141\003\141\000\000\000\000\000\000\003\141\000\000\003\141\003\141\000\000\r>\003\141\rV\012\150\003\141\003\141\000\000\000\000\003\141\012\246\003\141\000\000\000\000\000\000\000\000\003\141\003\141\r\014\r&\003i\003i\000\000\000\000\000\000\003i\000\000\000\000\003i\000\000\000\000\003i\000\000\003i\000\000\000\000\003i\000\000\003i\003i\003i\000\000\003i\003i\003i\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003i\000\000\003i\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003i\000\000\000\000\000\000\000\000\003i\000\000\003i\003i\000\000\000\000\000\000\000\000\003i\003i\003i\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003i\003i\003i\003i\003i\000\000\000\000\003i\000\000\003i\003i\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\000\000\003i\003i\003i\003i\000\000\000\000\000\000\003i\000\000\003i\003i\000\000\t\254\003i\003i\003i\003i\003i\000\000\000\000\003i\003i\n\018\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003e\003e\000\000\000\000\000\000\003e\000\000\000\000\003e\000\000\000\000\003e\000\000\003e\000\000\000\000\011&\000\000\003e\003e\003e\000\000\003e\003e\003e\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003e\000\000\000\000\000\000\000\000\000\000\003e\003e\012\030\0126\003e\000\000\000\000\000\000\000\000\003e\000\000\012N\003e\000\000\000\000\000\000\000\000\003e\003e\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\011>\011\190\012f\012~\012\174\003e\003e\000\000\000\000\003e\000\000\003e\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\012\222\000\000\003e\003e\003e\003e\000\000\000\000\000\000\003e\000\000\003e\003e\000\000\r>\003e\rV\012\150\003e\003e\000\000\000\000\003e\012\246\003e\000\000\000\000\000\000\000\000\003e\003e\r\014\r&\003y\003y\000\000\000\000\000\000\003y\000\000\000\000\003y\000\000\000\000\003y\000\000\003y\000\000\000\000\003y\000\000\003y\003y\003y\000\000\003y\003y\003y\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003y\000\000\003y\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003y\000\000\000\000\000\000\000\000\003y\000\000\003y\003y\000\000\000\000\000\000\000\000\003y\003y\003y\000\000\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003y\003y\003y\003y\003y\000\000\000\000\003y\000\000\003y\003y\000\000\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\000\000\003y\003y\003y\003y\000\000\000\000\000\000\003y\000\000\003y\003y\000\000\t\254\003y\003y\003y\003y\003y\000\000\000\000\003y\003y\n\018\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003u\003u\000\000\000\000\000\000\003u\000\000\000\000\003u\000\000\000\000\003u\000\000\003u\000\000\000\000\011&\000\000\003u\003u\003u\000\000\003u\003u\003u\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003u\000\000\000\000\000\000\000\000\000\000\003u\003u\012\030\0126\003u\000\000\000\000\000\000\000\000\003u\000\000\012N\003u\000\000\000\000\000\000\000\000\003u\003u\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003u\003u\011>\011\190\012f\012~\012\174\003u\003u\000\000\000\000\003u\000\000\003u\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003u\003u\012\222\000\000\003u\003u\003u\003u\000\000\000\000\000\000\003u\000\000\003u\003u\000\000\r>\003u\rV\012\150\003u\003u\000\000\000\000\003u\012\246\003u\000\000\000\000\000\000\000\000\003u\003u\r\014\r&\003q\003q\000\000\000\000\000\000\003q\000\000\000\000\003q\000\000\000\000\003q\000\000\003q\000\000\000\000\003q\000\000\003q\003q\003q\000\000\003q\003q\003q\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003q\000\000\003q\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003q\000\000\000\000\000\000\000\000\003q\000\000\003q\003q\000\000\000\000\000\000\000\000\003q\003q\003q\000\000\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003q\003q\003q\003q\003q\000\000\000\000\003q\000\000\003q\003q\000\000\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\000\000\003q\003q\003q\003q\000\000\000\000\000\000\003q\000\000\003q\003q\000\000\t\254\003q\003q\003q\003q\003q\000\000\000\000\003q\003q\n\018\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003m\003m\000\000\000\000\000\000\003m\000\000\000\000\003m\000\000\000\000\003m\000\000\003m\000\000\000\000\011&\000\000\003m\003m\003m\000\000\003m\003m\003m\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003m\000\000\000\000\000\000\000\000\000\000\003m\003m\012\030\0126\003m\000\000\000\000\000\000\000\000\003m\000\000\012N\003m\000\000\000\000\000\000\000\000\003m\003m\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\011>\011\190\012f\012~\012\174\003m\003m\000\000\000\000\003m\000\000\003m\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\012\222\000\000\003m\003m\003m\003m\000\000\000\000\000\000\003m\000\000\003m\003m\000\000\r>\003m\rV\012\150\003m\003m\000\000\000\000\003m\012\246\003m\000\000\000\000\000\000\000\000\003m\003m\r\014\r&\003\137\003\137\000\000\000\000\000\000\003\137\000\000\000\000\003\137\000\000\000\000\003\137\000\000\003\137\000\000\000\000\003\137\000\000\003\137\003\137\003\137\000\000\003\137\003\137\003\137\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\137\000\000\003\137\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\137\000\000\000\000\000\000\000\000\003\137\000\000\003\137\003\137\000\000\000\000\000\000\000\000\003\137\003\137\003\137\000\000\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\137\003\137\003\137\003\137\003\137\000\000\000\000\003\137\000\000\003\137\003\137\000\000\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\000\000\003\137\003\137\003\137\003\137\000\000\000\000\000\000\003\137\000\000\003\137\003\137\000\000\t\254\003\137\003\137\003\137\003\137\003\137\000\000\000\000\003\137\003\137\n\018\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\133\003\133\000\000\000\000\000\000\003\133\000\000\000\000\003\133\000\000\000\000\003\133\000\000\003\133\000\000\000\000\011&\000\000\003\133\003\133\003\133\000\000\003\133\003\133\003\133\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\133\000\000\000\000\000\000\000\000\000\000\003\133\003\133\012\030\0126\003\133\000\000\000\000\000\000\000\000\003\133\000\000\012N\003\133\000\000\000\000\000\000\000\000\003\133\003\133\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\133\003\133\011>\011\190\012f\012~\012\174\003\133\003\133\000\000\000\000\003\133\000\000\003\133\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\133\003\133\012\222\000\000\003\133\003\133\003\133\003\133\000\000\000\000\000\000\003\133\000\000\003\133\003\133\000\000\r>\003\133\rV\012\150\003\133\003\133\000\000\000\000\003\133\012\246\003\133\000\000\000\000\000\000\000\000\003\133\003\133\r\014\r&\003\169\003\169\000\000\000\000\000\000\003\169\000\000\000\000\003\169\000\000\000\000\003\169\000\000\003\169\000\000\000\000\003\169\000\000\003\169\003\169\003\169\000\000\003\169\003\169\003\169\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\169\000\000\003\169\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\169\000\000\000\000\000\000\000\000\003\169\000\000\003\169\003\169\000\000\000\000\000\000\000\000\003\169\003\169\003\169\000\000\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\000\000\000\000\003\169\000\000\003\169\003\169\000\000\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\000\000\003\169\003\169\003\169\003\169\000\000\000\000\000\000\003\169\000\000\003\169\003\169\000\000\t\254\003\169\003\169\003\169\003\169\003\169\000\000\000\000\003\169\003\169\n\018\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\165\003\165\000\000\000\000\000\000\003\165\000\000\000\000\003\165\000\000\000\000\003\165\000\000\003\165\000\000\000\000\011&\000\000\003\165\003\165\003\165\000\000\003\165\003\165\003\165\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\165\000\000\000\000\000\000\000\000\000\000\003\165\003\165\012\030\0126\003\165\000\000\000\000\000\000\000\000\003\165\000\000\012N\003\165\000\000\000\000\000\000\000\000\003\165\003\165\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\165\003\165\011>\011\190\012f\012~\012\174\003\165\003\165\000\000\000\000\003\165\000\000\003\165\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\165\003\165\012\222\000\000\003\165\003\165\003\165\003\165\000\000\000\000\000\000\003\165\000\000\003\165\003\165\000\000\r>\003\165\rV\012\150\003\165\003\165\000\000\000\000\003\165\012\246\003\165\000\000\000\000\000\000\000\000\003\165\003\165\r\014\r&\003\153\003\153\000\000\000\000\000\000\003\153\000\000\000\000\003\153\000\000\000\000\003\153\000\000\003\153\000\000\000\000\003\153\000\000\003\153\003\153\003\153\000\000\003\153\003\153\003\153\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\153\000\000\003\153\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\153\000\000\000\000\000\000\000\000\003\153\000\000\003\153\003\153\000\000\000\000\000\000\000\000\003\153\003\153\003\153\000\000\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\153\003\153\003\153\003\153\003\153\000\000\000\000\003\153\000\000\003\153\003\153\000\000\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\000\000\003\153\003\153\003\153\003\153\000\000\000\000\000\000\003\153\000\000\003\153\003\153\000\000\t\254\003\153\003\153\003\153\003\153\003\153\000\000\000\000\003\153\003\153\n\018\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\149\003\149\000\000\000\000\000\000\003\149\000\000\000\000\003\149\000\000\000\000\003\149\000\000\003\149\000\000\000\000\011&\000\000\003\149\003\149\003\149\000\000\003\149\003\149\003\149\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003\149\000\000\000\000\000\000\000\000\000\000\003\149\003\149\012\030\0126\003\149\000\000\000\000\000\000\000\000\003\149\000\000\012N\003\149\000\000\000\000\000\000\000\000\003\149\003\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003\149\003\149\011>\011\190\012f\012~\012\174\003\149\003\149\000\000\000\000\003\149\000\000\003\149\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003\149\003\149\012\222\000\000\003\149\003\149\003\149\003\149\000\000\000\000\000\000\003\149\000\000\003\149\003\149\000\000\r>\003\149\rV\012\150\003\149\003\149\000\000\000\000\003\149\012\246\003\149\000\000\000\000\000\000\000\000\003\149\003\149\r\014\r&\003a\003a\000\000\000\000\000\000\003a\000\000\000\000\003a\000\000\000\000\003a\000\000\003a\000\000\000\000\003a\000\000\003a\003a\003a\000\000\003a\003a\003a\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003a\000\000\003a\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003a\000\000\000\000\000\000\000\000\003a\000\000\003a\003a\000\000\000\000\000\000\000\000\003a\003a\003a\000\000\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003a\003a\003a\003a\003a\000\000\000\000\003a\000\000\003a\003a\000\000\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\000\000\003a\003a\003a\003a\000\000\000\000\000\000\003a\000\000\003a\003a\000\000\t\254\003a\003a\003a\003a\003a\000\000\000\000\003a\003a\n\018\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003]\003]\000\000\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\003]\000\000\003]\000\000\000\000\011&\000\000\003]\003]\003]\000\000\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003]\000\000\000\000\000\000\000\000\000\000\003]\003]\012\030\0126\003]\000\000\000\000\000\000\000\000\003]\000\000\012N\003]\000\000\000\000\000\000\000\000\003]\003]\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\011>\011\190\012f\012~\012\174\003]\003]\000\000\000\000\003]\000\000\003]\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\012\222\000\000\003]\003]\003]\003]\000\000\000\000\000\000\003]\000\000\003]\003]\000\000\r>\003]\rV\012\150\003]\003]\000\000\000\000\003]\012\246\003]\000\000\000\000\000\000\000\000\003]\003]\r\014\r&\n\021\n\021\000\000\000\000\000\000\n\021\000\000\000\000\n\021\000\000\000\000\n\021\000\000\n\021\000\000\000\000\011&\000\000\n\021\n\021\n\021\000\000\n\021\n\021\n\021\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\n\021\000\000\000\000\000\000\000\000\000\000\n\021\n\021\012\030\0126\n\021\000\000\000\000\000\000\000\000\n\021\000\000\012N\n\021\000\000\000\000\000\000\000\000\n\021\n\021\000\238\000\000\000\000\000\000\000\000\000\000\000\000\n\021\n\021\011>\011\190\012f\012~\012\174\n\021\n\021\000\000\000\000\n\021\000\000\n\021\012\198\000\000\000\000\000\000\000\000\000\000\000\000\n\021\n\021\012\222\000\000\n\021\n\021\n\021\n\021\000\000\000\000\000\000\n\021\000\000\n\021\n\021\000\000\n\021\n\021\n\021\012\150\n\021\n\021\000\000\000\000\n\021\012\246\n\021\000\000\000\000\000\000\000\000\n\021\n\021\r\014\r&\nm\nm\000\000\000\000\000\000\nm\000\000\000\000\nm\000\000\000\000\nm\000\000\nm\000\000\000\000\nm\000\000\nm\nm\nm\000\000\nm\nm\nm\000\000\000\000\000\000\000\000\000\000\nm\nm\nm\nm\nm\000\000\nm\000\000\000\000\000\000\000\000\000\000\nm\nm\nm\nm\nm\000\000\000\000\000\000\000\000\nm\000\000\nm\nm\000\000\000\000\000\000\000\000\nm\nm\nm\000\000\000\000\000\000\000\000\000\000\000\000\nm\nm\nm\nm\nm\nm\nm\nm\nm\000\000\000\000\nm\000\000\nm\nm\000\000\000\000\000\000\000\000\000\000\000\000\nm\nm\nm\000\000\nm\nm\nm\nm\000\000\000\000\000\000\nm\000\000\nm\nm\000\000\t\254\nm\nm\nm\nm\nm\000\000\000\000\nm\nm\n\018\000\000\000\000\000\000\000\000\nm\nm\nm\nm\002i\002i\000\000\000\000\000\000\002i\000\000\000\000\002i\000\000\000\000\002i\000\000\002i\000\000\000\000\002i\000\000\002i\002i\002i\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\002i\002i\016\238\002i\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\t\254\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\n\018\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002a\002a\000\000\000\000\000\000\002a\000\000\000\000\002a\000\000\000\000\002a\000\000\002a\000\000\000\000\002a\000\000\002a\002a\002a\000\000\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\002a\002a\000\000\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\002a\002a\000\000\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\000\000\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\002a\002a\002a\002a\002a\002a\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\000\000\002a\002a\002a\002a\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\t\254\002a\002a\002a\002a\002a\000\000\000\000\002a\002a\n\018\000\000\000\000\000\000\000\000\002a\002a\002a\002a\002]\002]\000\000\000\000\000\000\002]\000\000\000\000\002]\000\000\000\000\002]\000\000\002]\000\000\000\000\011&\000\000\002]\002]\002]\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\012\030\0126\002]\000\000\000\000\000\000\000\000\002]\000\000\012N\002]\000\000\000\000\000\000\000\000\002]\002]\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\011>\011\190\012f\012~\012\174\002]\002]\000\000\000\000\002]\000\000\002]\012\198\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\012\222\000\000\002]\002]\002]\002]\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\r>\002]\rV\012\150\002]\002]\000\000\000\000\002]\012\246\002]\000\000\000\000\000\000\000\000\002]\002]\r\014\r&\002e\002e\000\000\000\000\000\000\002e\000\000\000\000\002e\000\000\000\000\002e\000\000\002e\000\000\000\000\011&\000\000\002e\002e\002e\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\012\030\0126\002e\000\000\000\000\000\000\000\000\002e\000\000\012N\002e\000\000\000\000\000\000\000\000\002e\002e\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\011>\011\190\012f\012~\012\174\002e\002e\000\000\000\000\002e\000\000\002e\012\198\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\012\222\000\000\002e\002e\017\n\002e\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\r>\002e\rV\012\150\002e\002e\000\000\000\000\002e\012\246\002e\000\000\000\000\000\000\000\000\002e\002e\r\014\r&\002Y\002Y\000\000\000\000\000\000\002Y\000\000\000\000\002Y\000\000\000\000\002Y\000\000\002Y\000\000\000\000\002Y\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\000\000\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\002Y\002Y\002Y\002Y\000\000\000\000\002Y\000\000\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\t\254\002Y\002Y\002Y\002Y\002Y\000\000\000\000\002Y\002Y\n\018\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002U\002U\000\000\000\000\000\000\002U\000\000\000\000\002U\000\000\000\000\002U\000\000\002U\000\000\000\000\011&\000\000\002U\002U\002U\000\000\002U\002U\002U\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\002U\000\000\000\000\000\000\000\000\000\000\002U\002U\012\030\0126\002U\000\000\000\000\000\000\000\000\002U\000\000\012N\002U\000\000\000\000\000\000\000\000\002U\002U\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\011>\011\190\012f\012~\012\174\002U\002U\000\000\000\000\002U\000\000\002U\012\198\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\012\222\000\000\002U\002U\002U\002U\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\r>\002U\rV\012\150\002U\002U\000\000\000\000\002U\012\246\002U\000\000\000\000\000\000\000\000\002U\002U\r\014\r&\003Y\003Y\000\000\000\000\000\000\003Y\000\000\000\000\003Y\000\000\000\000\003Y\000\000\003Y\000\000\000\000\003Y\000\000\003Y\003Y\003Y\000\000\003Y\003Y\003Y\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003Y\000\000\003Y\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003Y\000\000\000\000\000\000\000\000\003Y\000\000\003Y\003Y\000\000\000\000\000\000\000\000\003Y\003Y\003Y\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003Y\003Y\003Y\003Y\003Y\000\000\000\000\003Y\000\000\003Y\003Y\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\000\000\003Y\003Y\003Y\003Y\000\000\000\000\000\000\003Y\000\000\003Y\003Y\000\000\t\254\003Y\003Y\003Y\003Y\003Y\000\000\000\000\003Y\003Y\n\018\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003U\003U\000\000\000\000\000\000\003U\000\000\000\000\003U\000\000\000\000\003U\000\000\003U\000\000\000\000\011&\000\000\003U\003U\003U\000\000\003U\003U\003U\000\000\000\000\000\000\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\003U\000\000\000\000\000\000\000\000\000\000\003U\003U\012\030\0126\003U\000\000\000\000\000\000\000\000\003U\000\000\012N\003U\000\000\000\000\000\000\000\000\003U\003U\000\238\000\000\000\000\000\000\000\000\000\000\000\000\003U\003U\011>\011\190\012f\012~\012\174\003U\003U\000\000\000\000\003U\000\000\003U\012\198\000\000\000\000\000\000\000\000\000\000\000\000\003U\003U\012\222\000\000\003U\003U\003U\003U\000\000\000\000\000\000\003U\000\000\003U\003U\000\000\r>\003U\rV\012\150\003U\003U\000\000\000\000\003U\012\246\003U\000\000\000\000\000\000\000\000\003U\003U\r\014\r&\002I\002I\000\000\000\000\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\000\000\002I\000\000\000\000\002I\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\000\000\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\000\000\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\002I\002I\002I\002I\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\002I\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\002I\002I\002I\002I\002I\002I\000\000\000\000\002I\002I\n\018\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002M\002M\000\000\000\000\000\000\002M\000\000\000\000\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\002M\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\000\000\006v\000\000\000\000\002M\002M\002M\002M\002M\000\000\002M\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002M\006z\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002M\002M\002M\002M\002M\000\000\007\233\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\000\000\000\238\002M\002M\002M\000\000\002M\002M\002M\002M\007\233\000\000\000\000\002M\007\233\002M\002M\000\000\002M\002M\002M\002M\002M\002M\000\000\tv\002M\002M\n\018\000\000\000\000\000\000\000\000\002M\002M\002M\002M\001\006\000\000\000\006\000\000\000\000\004\197\002\194\002\198\006~\002\242\002\146\006\"\006\138\000\000\000\000\002\254\001\n\000\000\006\158\000\000\002\158\000\000\006\170\000\000\000\000\001\210\000\000\000\000\016\194\003\242\001\018\t\018\t\022\001\030\001\"\007\233\000\000\000\000\003\006\000\000\003\166\000\000\019\162\000\000\t:\t>\000\238\003\226\003\238\003\250\tB\007V\000\000\001:\000\000\002\186\000\000\000\000\003\246\t\254\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\n\018\001>\001B\001F\001J\001N\000\000\004\197\tV\001R\000\000\007\249\000\000\001V\000\000\tb\tz\n\030\005\186\005\190\000\000\006~\001Z\000\000\006\"\t\150\002\014\000\000\001^\000\000\007\249\006\158\000\000\002\018\007\249\006\170\002\026\000\000\001\154\006j\000\000\000\000\005\194\b\214\001\210\001\158\000\000\017J\004\130\n2\001\006\001\166\000\006\001\170\001\174\028\226\002\194\002\198\000\000\002\242\002\146\003Z\000\000\000\000\000\000\002\254\001\n\007\130\001\222\000\000\t\014\000\000\000\238\000\000\002\186\001\210\000\000\000\000\000\000\003\242\001\018\t\018\t\022\001\030\001\"\000\000\000\000\000\000\003\006\000\000\003\166\000\000\t\026\000\000\t:\t>\000\238\003\226\003\238\003\250\tB\007V\007\142\001:\000\000\002\186\b\005\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\006~\005\174\000\000\006\"\001>\001B\001F\001J\001N\b\005\006\158\tV\001R\b\005\006\170\000\000\001V\000\000\tb\tz\n\030\005\186\005\190\000\000\006~\001Z\000\000\006\"\028\230\000\000\000\000\001^\000\000\000\000\006\158\000\000\000\000\000\000\006\170\000\000\000\000\001\154\006\190\000\000\000\000\005\194\b\214\r\249\001\158\000\000\017J\004\130\n2\0059\001\166\000\006\001\170\001\174\000\246\002\194\002\198\002\202\002\242\002\146\000\000\002\001\000\000\r\249\002\254\022\130\002.\003r\000\000\0022\000\000\0059\000\000\003v\001\210\000\000\020\230\b\005\003\002\000\000\003z\003~\002>\000\000\000\000\003\130\000\000\003\006\000\000\003\166\000\n\020z\n\138\003\218\003\222\n\150\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\002\001\003\246\020\246\002J\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\002\001\002\001\000\000\000\000\000\000\000\000\020\254\000\000\tV\000\000\nQ\000\000\000\000\000\000\000\000\tb\tz\n\030\005\186\005\190\021\018\021N\000\000\000\000\0059\0059\000\000\000\000\000\000\006\234\000\000\000\000\nQ\000\000\000\000\002N\r\249\r\229\000\000\000\000\021\138\025\142\005\194\b\214\000\000\000\145\000\000\b\238\004\130\n2\000\145\000\000\002\198\000\145\000\000\002\146\r\249\n~\000\000\002.\002\254\000\000\0022\000\145\000\000\000\145\000\000\000\145\000\000\000\145\001\210\000\238\n\182\000\000\003\002\002>\000\000\000\000\002F\r\229\n\190\000\145\000\000\003\006\000\000\003\166\000\000\000\145\000\000\000\000\000\000\000\145\000\000\003\238\001\190\018\150\000\145\000\000\002\146\000\145\002\186\000\000\002J\003\246\000\145\000\145\000\145\b\190\b\194\b\206\000\000\014\206\005\174\000\145\000\145\006~\0256\000\000\006\"\000\000\000\145\000\000\000\000\nQ\000\145\006\158\000\000\000\000\000\000\006\170\000\000\000\000\005\186\005\190\000\145\000\145\018\154\000\000\000\145\000\145\000\000\000\000\000\000\000\000\000\000\000\000\002N\000\000\000\145\000\000\018\166\000\000\025Z\000\000\000\145\000\145\005\194\b\214\000\000\000\000\000\169\b\238\004\130\000\000\000\145\000\169\000\145\002\198\000\169\000\000\002\146\000\000\n~\000\000\000\000\002\254\005\190\000\000\000\169\000\000\000\169\000\000\000\169\000\000\000\169\001\210\025f\n\182\000\000\003\002\000\000\000\000\000\000\000\000\000\000\n\190\000\169\000\000\003\006\000\000\003\166\000\000\000\169\024\250\000\000\000\000\000\169\000\000\003\238\001\190\000\000\000\169\000\000\000\000\000\169\002\186\000\000\000\000\003\246\000\169\000\169\000\169\b\190\b\194\b\206\000\000\014\206\005\174\000\169\000\169\000\000\000\000\000\000\000\000\000\000\000\169\000\000\000\000\n5\000\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\186\005\190\000\169\000\169\000\000\000\000\000\169\000\169\000\000\000\000\nb\n5\000\000\n5\n5\000\000\000\169\000\000\000\000\000\000\000\000\000\000\000\169\000\169\005\194\b\214\000\000\000\000\000\000\b\238\004\130\000\000\000\169\000\000\000\169\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\000:\000\000\000\000\000>\t.\000\000\000\000\000B\000\000\018\150\000\000\002\014\002\146\000\000\000F\000\000\000\000\000\000\002\018\000\000\000J\002\026\000N\000R\000V\000Z\000^\000b\000f\001\210\000\000\000\000\000j\000n\000\000\000r\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\t\254\000\000\018\154\000z\007\130\001\222\000~\000\130\n5\000\000\n\018\002\186\000\000\000\134\000\138\000\142\018\166\002\001\025:\000\000\002\001\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\000\000\000\000\000\174\000\178\000\182\000\000\000\000\000\000\000\186\007\142\000\190\000\194\005\190\000\n\000\000\000\000\000\000\000\000\000\198\000\000\000\202\000\000\025F\000\000\000\000\004\149\000\206\000\210\002\001\000\214\004\149\003\022\002\198\004\149\000\000\002\146\000\000\007&\000\000\024\250\002\254\002\001\002\001\004\149\000\000\000\000\000\000\004\149\000\000\004\149\001\210\000\000\007F\000\000\000\000\002\001\002\001\003\026\000\000\000\000\t\134\004\149\000\000\000\000\000\000\000\000\000\000\004\149\002\001\000\000\003&\000\000\000\000\t\178\001\190\002\001\004\149\000\000\002\001\004\149\002\186\002\001\000\n\004\006\004\149\004\149\011\249\004\n\002\001\004\018\000\000\t\194\005\174\000\000\002\001\000\000\000\000\002\001\002\001\000\000\004\149\004\149\000\000\000\000\005\178\000\000\000\000\000\000\000\000\000\000\002\001\000\000\005\186\005\190\004\149\004\149\rz\000\000\004\149\004\149\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\249\n\138\000\000\011\249\r\130\004\149\005\194\000\000\000\000\000\000\011\249\000\000\004\130\000\000\011\249\000\006\004\149\000\000\000\246\002\194\002\198\002\202\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\005Y\000\000\000\000\000\000\002\001\000\000\003v\001\210\000\000\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\003\130\000\000\003\006\000\000\003\166\000\000\020z\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\000\000\003\246\020\246\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\254\000\000\tV\000\000\031\198\000\000\000\000\000\000\000\000\tb\tz\n\030\005\186\005\190\021\018\021N\000\000\000\006\031\231\017\218\000\246\002\194\002\198\002\202\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000 \022\000\000\025\142\005\194\b\214\000\000\003v\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\003\130\000\000\003\006\000\000\003\166\000\000\020z\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\000\000\003\246\020\246\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\254\000\000\tV\000\000\031\198\000\000\000\000\000\000\000\000\tb\tz\n\030\005\186\005\190\021\018\021N\000\000\000\000\005a\000\000\000\000\000\000\000\000\000\000\001\006\000\000\000\000\000\000\000\000\000\000\003\022\002\198\006F\000\000\002\146\025\142\005\194\b\214\000\000\002\254\001\n\b\238\004\130\n2\002\158\000\000\000\000\000\000\000\000\001\210\003\158\000\000\002\198\001\014\001\018\001\022\0036\001\030\001\"\003j\000\000\000\000\003\146\000\000\000\000\b\134\003:\000\000\001.\006f\001\210\000\000\0032\001\190\0016\b\201\000\000\001:\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\003\154\001>\001B\001F\001J\001N\000\000\002\186\000\000\001R\005\178\000\000\b\201\001V\011\253\000\000\000\000\000\000\005\186\005\190\000\000\006\002\001Z\000\000\000\000\000\000\b\201\000\000\001^\b\201\tJ\000\000\000\000\000\000\000\000\007j\b\201\000\000\001\154\006j\b\201\000\000\005\194\000\000\011\253\001\158\000\000\001\162\004\130\001\006\000\000\001\166\000\000\001\170\001\174\003\022\002\198\t\182\011\253\002\146\000\000\011\253\r\234\000\000\002\254\001\n\000\000\000\000\011\253\002\158\000\000\000\000\011\253\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\0036\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003:\000\000\001.\006f\000\000\000\000\0032\001\190\0016\000\000\000\000\001:\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005\178\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\186\005\190\000\000\006\002\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\006j\000\000\000\000\005\194\000\000\000\000\001\158\000\000\001\162\004\130\000\000\n9\001\166\000\006\001\170\001\174\000\246\002\194\002\198\002\"\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\021\142\000\000\n9\000\000\n9\n9\003v\001\210\000\000\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\021\146\000\000\003\006\000\000\003\166\000\000\021\186\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\000\000\003\246\020\246\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022Z\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\nR\tz\n\030\005\186\005\190\021\018\022n\000\000\000\000\005-\000\000\000\000\000\000\000\000\000\000\n1\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\022~\005\194\b\214\n9\002\254\000\000\b\238\004\130\n2\n1\000\000\n1\n1\000\000\001\210\000\000\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\001\169\003\006\000\000\003\166\000\000\001\169\000\000\003\218\003\222\n\154\003\226\003\238\003\250\004\002\007V\001\202\001\206\r\134\002\186\000\000\000\000\003\246\000\000\000\000\001\169\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\001\210\001\214\001\230\000\000\000\000\000\000\tV\000\000\000\000\000\000\001\242\000\000\001\169\nR\tz\n\030\005\186\005\190\000\000\000\000\001\169\000\000\000\000\001\246\002\162\001\169\001\169\000\238\002\174\000\000\002\186\004.\004:\000\000\001\169\001\169\000\000\004F\000\000\000\000\005\194\b\214\n1\005\201\005\201\b\238\004\130\n2\005\201\000\000\005\201\005\201\000\000\005\201\004J\005\201\005\201\000\000\000\000\005\201\001\169\005\201\005\201\005\201\005\201\005\201\005\201\005\201\005\201\001\169\005\201\000\000\005\201\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\005\201\000\000\000\000\005\201\005\201\005\201\005\201\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\005\201\000\000\000\000\005\201\005\201\005\201\000\000\005\201\005\201\000\000\000\000\000\000\000\000\000\000\005\201\000\000\000\000\000\000\005\201\005\201\000\000\005\201\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\005\201\000\000\005\201\005\201\005\201\005\201\000\000\005\201\005\201\000\000\000\000\000\000\005\201\000\000\005\201\005\201\000\000\000\000\002\166\005\201\000\000\000\000\000\000\024\n\005\201\000\000\012\021\000\000\005\201\012\021\005\201\005\201\012\021\012\021\000\000\005\201\012\021\000\000\012\021\000\000\000\000\012\021\000\000\001*\000\000\012\021\012\021\000\000\012\021\012\021\002\001\012\021\000\000\012\021\000\000\000\000\000\000\002\001\012\021\000\000\002\001\012\021\000\000\000\000\000\000\000\000\000\000\000\000\002\001\012\021\000\000\012\021\000\000\000\000\012\021\012\021\000\n\000\000\000\000\000\000\000\000\012\021\000\000\000\000\012\021\000\000\000\000\012\021\012\021\000\000\012\021\002\001\012\021\012\021\000\000\000\000\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\000\002\001\012\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\021\012\021\000\000\000\000\012\021\000\000\012\021\000\000\000\000\000\000\000\000\005\222\000\000\002\001\000\000\000\000\001\202\001\206\012\021\012\021\000\000\012\021\012\021\000\000\012\021\000\000\012\021\000\000\012\021\000\000\012\021\000\000\012\021\r\185\r\185\001\210\001\250\001\230\r\185\000\000\001\206\r\185\000\000\000\000\000\000\001\242\003\134\000\000\022\174\004\214\000\000\r\185\r\185\r\185\000\000\r\185\r\185\r\185\001\246\024\006\000\000\023&\000\000\002\174\000\000\002\186\004.\004:\000\000\r\185\000\000\000\000\024\022\000\000\000\000\r\185\r\185\000\000\000\000\r\185\000\000\000\000\002\170\000\000\r\185\000\000\000\000\r\185\000\000\004J\000\000\000\000\r\185\r\185\r\185\000\000\000\000\000\000\000\000\000\000\000\000\r\185\r\185\000\000\000\000\000\000\000\000\000\000\r\185\000\000\000\000\000\000\004\222\000\000\000\000\r\185\000\000\000\000\000\000\000\000\000\000\000\000\r\185\r\185\r\185\000\000\r\185\r\185\000\000\005%\000\000\000\000\000\000\000\000\005%\000\000\r\185\005%\r\185\r\185\000\000\000\000\000\000\r\185\000\000\000\000\000\000\005%\r\185\000\000\000\000\005%\r\185\005%\r\185\r\185\n!\n!\000\000\000\000\005%\n!\000\000\001\206\n!\005%\000\000\000\000\000\000\000\000\000\000\005%\n!\000\000\n!\n!\n!\004R\n!\n!\n!\000\000\000\000\005%\005%\000\000\000\000\000\000\005%\002\234\000\000\000\000\n!\000\000\000\000\000\000\000\000\000\000\n!\n!\000\000\000\000\n!\000\000\005%\002\170\005%\n!\000\000\000\000\n!\000\000\000\000\000\000\005%\n!\n!\n!\005%\005%\002\234\000\238\005%\005%\n!\n!\000\000\000\000\004b\005%\000\000\n!\000\000\000\000\000\000\004\222\000\000\000\000\n!\005%\000\000\000\000\000\000\000\000\025\014\n!\n!\n!\000\000\n!\n!\000\000\007\237\000\000\005%\000\000\000\000\007\237\000\000\n!\007\237\n!\n!\005%\000\000\000\000\n!\000\000\000\000\000\000\007\237\n!\000\000\000\000\007\237\n!\007\237\n!\n!\n\029\n\029\000\000\000\000\000\000\n\029\000\000\001\206\n\029\007\237\000\000\000\000\000\000\000\000\000\000\007\237\n\029\000\000\n\029\n\029\n\029\000\000\n\029\n\029\n\029\000\000\000\000\007\237\000\000\000\000\000\000\000\000\007\237\007\237\000\000\000\000\n\029\000\000\000\000\000\000\000\000\000\000\n\029\n\029\000\000\000\000\n\029\000\000\007\237\002\170\000\000\n\029\000\000\000\000\n\029\000\000\000\000\000\000\000\000\n\029\n\029\n\029\007\237\007\237\020\142\000\000\007\237\007\237\n\029\n\029\000\000\000\000\000\000\000\000\000\000\n\029\000\000\000\000\000\000\004\222\021\206\000\000\n\029\007\237\000\000\000\000\000\000\000\000\000\000\n\029\n\029\n\029\000\000\n\029\n\029\000\000\000\000\000\000\002\001\002\001\000\000\000\000\002\001\n\029\002\001\n\029\n\029\002\001\002\001\002\001\n\029\002\001\002\001\002\001\002\001\n\029\000\000\002\001\000\000\n\029\002\001\n\029\n\029\002\001\002\001\000\n\000\000\002\001\000\n\002\001\000\000\002\001\000\n\002\001\002\001\000\n\000\000\002\001\007Z\000\n\002\001\002\001\002\001\002\001\018J\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\000\000\002\001\002\001\002\001\002\001\002\001\002\001\002\001\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\018\138\002\001\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\000\002\001\002\001\000\000\000\000\000\000\002\001\000\000\002\001\000\000\007^\000\000\002\001\002\001\000\000\000y\000\000\002\001\002\001\002\001\000y\000\000\000y\000y\000\000\000\000\000\000\000\000\000\000\r\249\r\229\000y\000\000\000y\000y\000\000\000\000\000y\000y\000y\000\000\t\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\249\000\000\000y\002.\000\000\000\000\0022\000\000\000y\000y\000\000\000\000\000y\002:\000\000\000y\000\000\000y\000\000\002>\000y\000\000\002F\r\229\000\000\000y\000y\000y\000\000\000\000\000\000\000\000\000\000\000\000\000y\000y\000\000\000\000\000\000\000\000\000\000\000y\000y\000\000\000\000\000y\002J\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000y\000y\000y\000\000\000y\000y\000\000\000\000\000\000\007y\t\185\000A\000\000\000\000\000y\000A\000A\000y\000A\000A\000\000\000y\000\000\000\000\000A\000\000\000y\000\000\000\000\007y\000y\000\000\000y\000\000\000A\002N\000\000\000\000\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000\000\000A\000\000\000A\000\000\000\000\000\000\000A\000A\000\000\000A\000A\000A\000A\000A\000\000\000\000\000\000\000A\000\000\000\000\000A\000\000\000\000\000\000\000A\000A\000A\000A\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\r\249\r\229\000\000\000A\000A\000A\000A\000A\000\000\007u\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\r\249\000\000\000\000\002.\000=\000\000\0022\000\000\000\000\007u\000A\000A\000\000\002\214\000=\000A\000A\000A\000=\002>\000=\000=\002F\r\229\000\000\000\000\000\000\000=\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\000=\000=\000=\000\000\000\000\000\000\000=\000\000\002J\000=\000\000\000\000\000\000\000=\000=\000=\000=\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000=\000=\000=\000=\000=\000\000\007\133\000\000\r\129\000\000\000\000\000\000\r\129\r\129\000\000\r\129\r\129\002N\000\000\000\000\000\000\r\129\000\000\000\000\000\000\000\000\007\133\000=\000=\000\000\000\000\r\129\000=\000=\000=\r\129\000\000\r\129\r\129\000\000\000\000\000\000\000\000\000\000\r\129\000\000\r\129\000\000\000\000\000\000\r\129\r\129\000\000\r\129\r\129\r\129\r\129\r\129\000\000\000\000\000\000\r\129\000\000\000\000\r\129\000\000\000\000\000\000\r\129\r\129\r\129\r\129\000\000\r\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\129\000\000\000\000\000\000\000\000\000\000\000\000\r\129\r\129\r\129\r\129\r\129\000\000\007\129\000\000\r}\000\000\000\000\000\000\r}\r}\000\000\r}\r}\000\000\000\000\000\000\000\000\r}\000\000\000\000\000\000\000\000\007\129\r\129\r\129\000\000\000\000\r}\r\129\r\129\r\129\r}\000\000\r}\r}\000\000\000\000\000\000\000\000\000\000\r}\000\000\r}\000\000\000\000\000\000\r}\r}\000\000\r}\r}\r}\r}\r}\000\000\000\000\000\000\r}\000\000\000\000\r}\000\000\000\000\000\000\r}\r}\r}\r}\000\000\r}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r}\000\000\000\000\000\000\000\000\000\000\000\000\r}\r}\r}\r}\r}\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\r}\r}\000\000\000\000\001\210\r}\r}\r}\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\014E\003\006\000\000\003\166\000\000\014E\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\007\185\007\185\000\000\002\186\000\000\000\000\003\246\000\000\000\000\014E\b\190\b\194\b\206\b\226\000\000\005\174\004>\000\000\000\000\007\185\007\185\007\185\000\000\000\000\000\000\tV\000\000\000\000\000\000\007\185\000\000\014E\nR\tz\n\030\005\186\005\190\000\000\000\000\014E\000\000\000\000\007\185\007\185\014E\014E\000\238\007\185\000\000\007\185\007\185\007\185\000\000\014E\014E\000\000\007\185\000\000\000\000\005\194\b\214\019\142\r\189\r\189\b\238\004\130\n2\r\189\000\000\000\000\r\189\000\000\000\000\007\185\000\000\000\000\000\000\000\000\004\154\014E\r\189\r\189\r\189\000\000\r\189\r\189\r\189\000\000\014E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\189\000\000\000\000\000\000\000\000\000\000\r\189\r\189\000\000\000\000\r\189\0042\000\000\007\185\000\000\r\189\000\000\000\000\r\189\000\000\000\000\000\000\000\000\r\189\r\189\r\189\000\000\000\000\000\000\000\000\000\000\000\000\r\189\r\189\000\000\000\000\000\000\000\000\000\000\r\189\000\000\000\000\000\000\r\189\000\000\000\000\r\189\000\000\000\000\000\000\000\000\000\000\000\000\r\189\r\189\r\189\000\000\r\189\r\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\201\r\189\000\006\r\189\r\189\007\201\002\194\002\198\r\189\002\242\002\146\000\000\000\000\r\189\000\000\002\254\000\000\r\189\000\000\r\189\r\189\000\000\004\014\000\000\007\201\001\210\000\000\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\007\201\003\226\003\238\003\250\004\002\007V\000\000\000\000\007\201\002\186\000\000\000\000\003\246\007\201\007\201\000\238\b\190\b\194\b\206\b\226\000\000\005\174\007\201\007\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\nR\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\000\000\000\007\201\000\000\000\000\000\000\000\000\005%\000\000\000\006\000\000\007\201\005%\002\194\002\198\000\000\002\242\002\146\000\000\005\194\b\214\017^\002\254\000\000\b\238\004\130\n2\027\174\000\000\017r\000\000\005%\001\210\000\000\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\005%\003\226\003\238\003\250\004\002\007V\000\000\000\000\005%\002\186\000\000\000\000\003\246\005%\002\234\000\000\b\190\b\194\b\206\b\226\000\000\005\174\005%\005%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\nR\tz\n\030\005\186\005\190\000\000\005-\000\000\000\006\000\000\005%\000\246\002\194\002\198\002\"\002\242\002\146\000\000\000\000\005%\000\000\002\254\000\000\000\000\021\142\000\000\000\000\005\194\b\214\000\000\003v\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\021\146\000\000\003\006\000\000\003\166\000\000\021\186\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\000\000\003\246\020\246\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022Z\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\019\230\tz\n\030\005\186\005\190\021\018\022n\000\000\000\006\000\000\005-\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\022~\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\019z\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\209\003\209\000\000\000\000\000\241\003\209\000\000\000\000\003\209\000\241\005\194\b\214\000\000\000\000\000\000\b\238\004\130\n2\003\209\003\209\003\209\000\000\003\209\003\209\003\209\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\209\000\000\000\000\000\000\000\000\000\000\003\209\004\146\000\000\000\000\003\209\000\000\000\000\000\000\000\241\003\209\003\018\000\000\003\209\000\000\000\000\000\000\000\241\003\209\003\209\003\209\000\000\000\241\000\000\000\000\000\000\000\000\003\209\003\209\000\000\000\000\000\241\000\241\000\000\003\209\000\000\000\000\000\000\003\209\000\000\000\000\003\209\000\000\000\000\000\000\000\000\000\000\000\000\003\209\003\209\003\209\000\000\003\209\003\209\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\000\003\209\000\000\003\209\003\209\000\241\000\000\000\000\003\209\000\000\005\249\0149\000\000\003\209\000\000\012!\000\000\003\209\012!\003\209\003\209\003\022\002\198\000\000\000\000\002\146\000\000\007&\000\000\005\249\002\254\000\000\000\000\005\249\012!\012!\000\000\012!\012!\000\000\001\210\000\000\007F\000\000\000\000\000\000\000\000\003\026\000\000\002\014\t\134\000\000\000\000\000\000\000\000\000\000\002\018\000\000\012!\002\026\003&\000\000\007\134\0032\001\190\000\000\000\000\001\210\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\012!\004\n\000\000\004\018\005\162\t\194\005\174\000\000\003Z\000\000\000\000\000\000\0149\0149\007\130\001\222\000\000\000\000\005\178\001\202\001\206\002\186\000\000\000\000\000\000\005\249\005\186\005\190\000\000\006\002\012!\0149\012!\0149\000\000\000\000\000\000\000\000\001\210\001\250\005\249\000\000\000\000\005\249\012!\000\000\000\000\012!\012!\007\142\005\194\000\000\012!\000\000\012!\000\000\004\130\012\029\012!\000\000\012\029\001\246\002\178\003\022\002\198\000\000\002\174\002\146\002\186\004.\004:\000\000\002\254\000\000\000\000\004F\012\029\012\029\000\000\012\029\012\029\000\000\001\210\000\000\001\202\001\206\000\000\000\000\000\000\003\026\000\000\000\000\004J\000\000\000\000\029\194\000\000\000\000\000\000\000\000\012\029\000\000\003&\001\210\001\250\006B\001\190\000\000\000\000\000\000\000\000\029\174\002\186\000\000\000\000\004\006\000\000\000\000\012\029\004\n\000\000\004\018\005\162\000\000\005\174\000\000\001\246\002\170\000\000\000\000\000\000\002\174\000\000\002\186\004.\004:\005\178\000\000\000\000\000\000\004F\000\000\018\178\000\000\005\186\005\190\000\000\006\002\012\029\000\000\012\029\000\000\000\000\000\000\000\000\000\000\000\006\004J\005\253\0149\002\194\002\198\012\029\002\242\002\146\012\029\012\029\000\000\005\194\002\254\012\029\000\000\012\029\000\000\004\130\000\000\012\029\005\253\000\000\001\210\000\000\005\253\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\0149\0149\017\246\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\005\253\002\194\002\198\000\000\002\242\002\146\0149\000\000\0149\000\000\002\254\000\000\000\000\000\000\000\000\005\253\005\194\b\214\005\253\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\t\238\tz\n\030\005\186\005\190\000\000\005Q\000\000\000\006\000\000\000\000\025\182\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\003v\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\026&\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\000\000\003\246\020\246\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\026\202\026\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\n\002\tz\n\030\005\186\005\190\000\000\005I\000\000\000\006\000\000\005Q\022\198\002\194\002\198\000\000\002\242\002\146\000\000\000\000\027\206\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\003v\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\022\242\003\226\003\238\003\250\004\002\007V\000\000\000\000\020\222\002\186\000\000\000\000\003\246\020\246\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\023\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\nj\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\005I\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\023\130\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\n\234\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011*\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011B\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011f\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011\146\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011\170\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011\194\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011\218\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\011\242\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\n\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\"\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012:\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012R\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012j\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\130\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\154\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\178\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\202\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\226\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\012\250\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\r\018\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\r*\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\rB\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\rZ\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\014\238\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015\022\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015>\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015f\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015\138\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015\174\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015\218\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\015\254\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\016\"\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\016>\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\016\222\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\016\242\tz\n\030\005\186\005\190\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007V\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\b\226\000\000\005\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tV\000\000\000\000\000\000\000\000\000\000\000\000\017\014\tz\n\030\005\186\005\190\000\000\018f\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\000\000\001\193\001\193\000\000\002\018\000\000\001\193\002\026\000\000\001\193\000\000\005\194\b\214\000\000\000\000\001\210\b\238\004\130\n2\001\193\001\193\001\193\000\000\001\193\001\193\001\193\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\000\001\193\007\130\001\222\000\000\000\000\000\000\001\193\001\193\002\186\000\000\001\193\000\000\000\000\000\000\000\000\001\193\000\000\000\000\001\193\000\000\000\000\000\000\000\000\001\193\001\193\001\193\000\000\000\000\000\000\000\000\000\000\000\000\001\193\001\193\000\000\000\000\007\142\000\000\000\000\001\193\000\249\000\000\000\000\001\193\000\000\000\249\001\193\000\000\000\000\000\000\000\000\000\000\000\000\001\193\001\193\001\193\000\000\001\193\001\193\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\001\193\000\000\001\193\001\193\003\022\002\198\000\000\001\193\002\146\000\000\007&\000\000\001\193\002\254\000\000\000\000\004\254\000\000\001\193\000\249\000\000\022\182\000\000\001\210\000\000\007F\000\000\000\249\000\000\000\000\003\026\000\000\000\249\t\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\249\003&\000\000\000\000\t\178\001\190\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\011\249\004\n\000\000\004\018\000\000\t\194\005\174\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\004\209\000\000\000\249\005\178\000\000\000\000\019\186\000\000\000\000\000\000\000\000\005\186\005\190\002\014\000\000\rz\006U\006U\000\000\000\000\002\018\006U\000\000\002\026\006U\000\000\000\000\000\000\000\000\011\249\000\000\001\210\011\249\011\249\006U\005\194\006U\000\000\006U\011\249\006U\004\130\000\000\011\249\004\209\000\000\000\000\000\000\003Z\000\000\r\157\000\000\006U\r\157\007\130\001\222\000\000\000\000\006U\006U\000\000\002\186\000\000\r\157\006U\000\000\000\000\006U\000\000\r\157\006U\000\000\000\000\000\000\000\000\006U\006U\006U\000\000\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\r\157\000\000\007\142\000\000\006U\006U\000\000\000\000\006U\r\157\000\000\001\006\r\157\000\000\000\000\000\000\000\000\r\157\006U\006U\006U\000\000\006U\006U\000\000\000\000\000\000\001\n\b6\000\000\000\000\002\158\000\000\r\157\000\000\006U\000\000\r\157\006U\006U\001\014\001\018\001\022\001\026\001\030\001\"\000\000\r\157\r\157\000\000\006U\r\157\000\000\001&\000\000\001.\0012\031\190\000\000\000\000\000\000\0016\000\000\000\000\001:\000\000\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\004\025\004\025\001R\000\000\000\000\004\025\001V\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\004\025\004\025\000\000\004\025\001^\004\025\000\000\004\025\004\025\000\000\000\000\000\000\000\000\000\000\001\154\030\218\000\000\000\000\004\025\004\025\004\025\001\158\004\025\001\162\004\025\004\025\004\025\001\166\000\000\001\170\001\174\005\209\000\000\000\000\004\025\000\000\004\025\004\025\000\000\000\000\000\000\000\000\004\025\004\025\004\025\000\000\000\000\000\000\005\213\000\000\000\000\004\025\000\000\000\000\004\025\000\000\000\000\000\000\004\025\004\025\004\025\004\025\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\025\004\025\004\025\004\025\004\025\004\025\000\000\004\025\000\000\000\000\005\209\000\000\000\000\000\000\000\000\000\000\000\000\004\025\004\025\004\025\000\000\004\025\004\025\006I\006I\000\000\000\000\005\213\006I\000\000\000\000\006I\004\025\000\000\004\025\004\025\000\000\000\000\004\025\020\002\000\000\006I\000\000\006I\000\000\006I\002\014\006I\000\000\004\025\000\000\000\000\000\000\002\018\000\000\000\000\002\026\000\000\000\000\006I\000\000\000\000\000\000\000\000\001\210\006I\006I\000\000\000\000\000\000\000\000\b\130\000\000\000\000\006I\000\000\000\000\006I\000\000\000\000\000\000\003Z\006I\006I\000\238\000\000\000\000\007\130\001\222\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\000\000\006I\006I\000\000\000\000\006I\000\000\n-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006I\006I\006I\000\000\006I\006I\000\000\000\000\011&\000\000\007\142\014\162\n-\000\000\n-\n-\000\000\006I\000\000\000\000\006I\006I\011\142\011\214\011\238\011\166\012\006\000\000\000\000\001\202\002\142\000\000\006I\002\146\000\000\000\000\012\030\0126\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012N\000\000\000\000\001\210\001\250\001\230\002\150\000\000\000\238\000\000\000\000\000\000\000\000\001\242\001\006\000\000\000\000\011>\011\190\012f\012~\012\174\000\000\000\000\000\000\000\000\002\154\002\162\000\000\012\198\001\n\002\174\000\000\002\186\004.\004:\000\000\000\000\012\222\000\000\024\230\000\000\024\234\001\014\001\018\001\022\001\026\001\030\001\"\000\000\000\000\000\000\r>\000\000\rV\012\150\001&\004J\001.\0012\n-\012\246\000\000\000\000\0016\000\000\005\190\001:\000\000\r\014\r&\000\000\000\000\000\000\000\000\000\000\024\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\t\145\t\145\001R\024\250\000\000\t\145\001V\000\000\t\145\000\000\000\000\000\000\000\000\000\000\000\000\001Z\020\018\000\000\t\145\000\000\t\145\001^\t\145\002\014\t\145\000\000\000\000\000\000\000\000\000\000\002\018\001\154\030\246\002\026\000\000\000\000\t\145\000\000\001\158\000\000\001\162\001\210\t\145\t\145\001\166\000\000\001\170\001\174\000\000\000\000\000\000\t\145\000\000\000\000\t\145\000\000\000\000\000\000\003Z\t\145\t\145\t\145\000\000\000\000\007\130\001\222\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\000\000\t\145\000\000\000\000\000\000\t\145\014\133\014\133\000\000\000\000\000\000\014\133\000\000\000\000\014\133\t\145\t\145\t\145\000\000\t\145\t\145\000\000\000\000\000\000\014\133\007\142\014\133\000\000\014\133\t\145\014\133\000\000\t\145\001\202\001\206\000\000\t\145\000\000\000\000\000\000\000\000\000\000\014\133\000\000\000\000\004\254\000\000\t\145\014\133\014\133\014\137\014\137\001\210\001\214\004R\014\137\000\000\014\133\014\137\000\000\014\133\000\000\000\000\000\000\000\000\014\133\014\133\014\133\014\137\000\000\014\137\000\000\014\137\000\000\014\137\001\246\002\170\000\000\000\000\000\000\002\174\014\133\002\186\004.\004:\014\133\014\137\000\000\000\000\004F\000\000\018\178\014\137\014\137\000\000\014\133\014\133\014\133\004R\014\133\014\133\014\137\000\000\000\000\014\137\004b\004J\000\000\000\000\014\137\014\137\014\137\014\133\000\000\000\000\000\000\014\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\137\000\000\014\133\000\000\014\137\001\177\000\000\000\000\000\000\000\000\001\177\000\000\001\206\001\177\014\137\014\137\014\137\000\000\014\137\014\137\000\000\t\249\000\000\001\177\004b\000\000\000\000\001\177\000\000\001\177\000\000\014\137\000\000\000\000\000\000\014\137\000\000\000\000\000\000\000\000\000\000\001\177\000\000\000\000\000\000\000\000\014\137\001\177\001\177\000\000\000\000\000\000\000\000\000\000\002\170\000\000\001\177\000\000\000\000\001\177\000\000\000\000\000\000\000\000\001\177\001\177\001\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\177\001\177\000\000\000\000\004\222\003\253\000\000\000\000\000\000\000\000\003\253\000\000\001\206\003\253\001\177\001\177\000\000\000\000\001\177\001\177\000\000\t\245\000\000\003\253\000\000\000\000\000\000\003\253\001\177\003\253\000\000\000\000\000\000\000\000\000\000\001\177\000\000\000\000\000\000\000\000\001\177\003\253\000\000\000\000\000\000\000\000\001\177\003\253\001\173\000\000\000\000\000\000\000\000\000\000\002\170\000\000\003\253\000\000\000\000\003\253\000\000\000\000\000\000\000\000\003\253\003\253\003\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\253\003\253\000\000\000\000\004\222\003\249\000\000\000\000\000\000\000\000\003\249\000\000\001\206\003\249\003\253\003\253\000\000\000\000\003\253\003\253\000\000\t\245\000\000\003\249\000\000\000\000\000\000\003\249\003\253\003\249\000\000\000\000\000\000\000\000\000\000\003\253\000\000\000\000\000\000\000\000\003\253\003\249\000\000\000\000\000\000\000\000\003\253\003\249\001\173\000\000\000\153\000\000\000\000\000\000\002\170\000\153\003\249\000\000\000\153\003\249\000\000\000\000\000\000\000\000\003\249\003\249\003\249\000\000\000\153\000\000\000\153\000\000\000\153\000\000\000\153\000\000\000\000\000\000\000\000\000\000\003\249\003\249\000\000\000\000\004\222\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\153\000\000\003\249\003\249\000\153\000\000\003\249\003\249\000\000\000\153\000\000\000\000\000\153\000\000\000\000\020:\003\249\000\153\000\153\000\238\000\000\000\000\002\014\003\249\000\000\000\000\000\153\000\153\003\249\002\018\000\000\000\000\002\026\000\153\003\249\000\000\000\221\000\153\000\000\000\000\001\210\000\221\000\000\000\000\000\221\000\000\000\000\000\153\000\153\000\000\000\000\000\153\000\153\000\000\000\221\000\000\000\221\003Z\000\221\000\000\000\221\000\153\000\000\007\130\001\222\000\000\000\000\000\153\000\153\000\000\002\186\000\000\000\221\000\000\000\000\000\000\000\000\000\153\000\221\000\153\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\221\000\000\000\000\020J\000\000\000\221\000\221\000\238\007\142\000\000\002\014\000\000\000\000\000\000\000\221\000\221\000\000\002\018\000\000\000\000\002\026\000\221\000\000\000\000\000\161\000\221\000\000\000\000\001\210\000\161\000\000\000\000\000\161\000\000\000\000\000\221\000\221\000\000\000\000\000\221\000\221\000\000\000\161\000\000\000\161\003Z\000\161\000\000\000\161\000\221\000\000\007\130\001\222\000\000\000\000\000\221\000\221\000\000\002\186\000\000\000\161\000\000\000\000\000\000\000\000\000\221\000\161\000\221\000\000\000\000\000\161\000\000\000\000\000\000\000\000\000\161\000\000\000\000\000\161\000\000\000\000\000\000\000\000\000\161\000\161\000\238\007\142\000\000\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\000\000\000\000\000\000\161\000\000\000\000\000\157\000\161\000\000\000\000\000\000\000\157\000\000\000\000\000\157\000\000\000\000\000\161\000\161\000\000\000\000\000\161\000\161\000\000\000\157\000\000\000\157\000\000\000\157\000\000\000\157\000\161\000\000\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\000\000\157\000\000\000\000\000\000\000\000\000\161\000\157\000\161\000\000\000\000\000\157\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\157\000\000\000\000\000\000\000\000\000\157\000\157\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\157\000\157\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\001\141\000\157\000\000\000\000\000\000\001\141\000\000\000\000\001\141\000\000\000\000\000\157\000\157\000\000\000\000\000\157\000\157\000\000\001\141\000\000\000\000\000\000\001\141\000\000\001\141\000\157\000\000\000\000\000\000\000\000\000\000\000\157\000\157\000\000\000\000\000\000\001\141\001\141\000\000\000\000\000\000\000\157\001\141\000\157\000\000\000\000\000\000\000\000\005\209\000\000\000\000\001\141\000\000\000\000\001\141\000\000\000\000\000\000\000\000\001\141\001\141\001\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\001\141\014\129\014\129\000\000\000\000\000\000\014\129\000\000\000\000\014\129\001\141\001\141\000\000\000\000\001\141\001\141\000\000\000\000\000\000\014\129\005\209\014\129\000\000\014\129\001\141\014\129\000\000\000\000\000\000\000\000\001\141\001\141\000\000\000\000\000\000\000\000\001\141\014\129\000\000\000\000\000\000\000\000\001\141\014\129\014\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\129\000\000\000\000\014\129\000\000\000\000\000\000\000\000\014\129\014\129\014\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\129\000\000\000\000\000\000\014\129\014}\014}\000\000\000\000\000\000\014}\000\000\000\000\014}\014\129\014\129\014\129\000\000\014\129\014\129\000\000\000\000\000\000\014}\000\000\014}\000\000\014}\000\000\014}\000\000\014\129\000\000\000\000\000\000\014\129\000\000\000\000\000\000\000\000\000\000\014}\000\000\000\000\004\254\000\000\014\129\014}\014}\000\000\000\000\000\000\000\000\000\000\000\000\005-\014}\000\000\000\000\014}\000\246\000\000\000\000\002\"\014}\014}\014}\000\000\000\000\000\000\000\000\000\000\000\000\021\142\000\000\000\000\000\000\005-\000\000\003v\014}\000\000\t\149\t\149\014}\000\000\000\000\t\149\000\000\000\000\t\149\021\146\000\000\000\000\014}\014}\014}\021\186\014}\014}\t\149\000\000\t\149\000\000\t\149\000\000\t\149\000\000\007\210\020\222\000\000\014}\000\000\000\000\020\246\014}\000\000\000\000\t\149\000\000\000\000\000\000\000\000\000\000\t\149\t\149\014}\000\000\000\000\000\000\022Z\000\000\000\000\t\149\000\000\000\000\t\149\000\000\000\000\000\000\000\000\t\149\t\149\000\238\021\018\022n\000\000\000\000\005-\005-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\149\003\022\002\198\000\000\t\149\002\146\000\000\007&\022~\000\000\002\254\000\000\000\000\000\000\t\149\t\149\t\149\000\000\t\149\t\149\001\210\000\000\007F\000\000\000\000\000\000\000\000\003\026\t\149\000\000\t\134\t\149\000\000\000\000\000\000\t\149\000\000\000\000\003\189\000\000\003&\000\000\000\000\t\178\001\190\000\000\t\149\007\229\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\t\194\005\174\011&\000\000\000\000\007\229\000\000\000\000\000\000\007\229\000\000\000\000\000\000\005\178\000\000\000\000\011\142\011\214\011\238\011\166\012\006\005\186\005\190\000\000\000\000\003\189\000\000\000\000\000\000\000\000\012\030\0126\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012N\003\189\000\000\000\000\003\189\000\000\005\194\000\000\000\238\000\000\000\000\000\000\004\130\000\000\000\000\000\000\000\000\011>\011\190\012f\012~\012\174\000\000\000\000\000\000\000\000\001\173\000\000\007\229\012\198\000\000\001\173\000\000\001\206\001\173\000\000\000\000\000\000\012\222\000\000\000\000\000\000\t\245\000\000\001\173\000\000\000\000\000\000\001\173\000\000\001\173\000\000\r>\000\000\rV\012\150\000\000\000\000\000\000\000\000\000\000\012\246\001\173\000\000\000\000\000\000\000\000\000\000\001\173\r\014\r&\000\000\000\000\000\000\000\000\002\170\000\000\001\173\020.\000\000\001\173\000\000\000\000\000\000\000\000\001\173\001\173\001\173\000\000\000\000\000\000\000\000\000\000\000\000\011&\000\000\000\000\000\000\0202\000\000\000\000\001\173\001\173\000\000\000\000\004\222\000\000\000\000\011\142\011\214\011\238\011\166\012\006\000\000\000\000\001\173\001\173\000\000\000\000\001\173\001\173\000\000\012\030\0126\000\000\000\000\000\000\000\000\000\000\001\173\000\000\012N\000\000\000\000\000\000\000\000\001\173\000\000\000\000\000\238\000\000\001\173\000\000\000\000\000\000\000\000\000\000\001\173\011>\011\190\012f\012~\012\174\000\000\000\000\006\142\000\000\000\000\000\000\000\000\012\198\001\202\001\206\000\000\000\000\000\000\000\000\000\000\000\000\012\222\000\000\n\142\000\000\000\000\000\000\000\000\000\246\001\202\001\206\002\"\001\210\001\250\001\230\r>\0206\rV\012\150\020F\000\000\021\142\001\242\000\000\012\246\005-\000\000\003v\001\210\001\250\001\230\000\000\r\014\r&\000\000\001\246\002\162\000\000\001\242\021\146\002\174\000\000\002\186\004.\004:\021\186\000\000\000\000\000\000\004F\000\000\001\246\002\162\000\000\000\000\000\000\002\174\020\222\002\186\004.\004:\000\000\020\246\006\133\006\133\004F\004J\000\000\006\133\000\000\000\000\006\133\000\000\000\000\000\000\000\000\000\000\000\000\022Z\000\000\000\000\006\133\004J\006\133\000\000\006\133\000\000\006\133\000\000\000\000\000\000\000\000\021\018\022n\000\000\000\000\000\000\000\000\000\000\006\133\000\000\000\000\004~\000\000\004\130\006\133\006\133\006\129\007\166\000\000\000\000\b\130\006\129\022~\006\133\006\129\000\000\006\133\000\000\000\000\000\000\000\000\006\133\006\133\000\238\006\129\000\000\006\129\000\000\006\129\000\000\006\129\000\000\000\000\000\000\000\000\000\000\000\000\006\133\000\000\000\000\000\000\006\133\006\129\000\000\000\000\000\000\000\000\000\000\006\129\b\"\000\000\006\133\006\133\006\133\000\000\006\133\006\133\006\129\000\000\000\000\006\129\000\000\000\000\000\000\000\000\006\129\006\129\000\238\006\133\000\000\000\000\000\000\006\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\129\000\000\006\133\000\000\006\129\014\141\014\141\000\000\000\000\000\000\014\141\000\000\000\000\014\141\006\129\006\129\006\129\000\000\006\129\006\129\000\000\000\000\000\000\014\141\000\000\014\141\n\154\014\141\000\000\014\141\000\000\006\129\001\202\001\206\000\000\006\129\000\000\000\000\000\000\000\000\000\000\014\141\000\000\000\000\000\000\000\000\006\129\014\141\014\141\014\145\014\145\001\210\001\250\001\230\014\145\000\000\014\141\014\145\000\000\014\141\000\000\001\242\000\000\000\000\014\141\014\141\000\238\014\145\002\002\014\145\000\000\014\145\000\000\014\145\001\246\002\162\000\000\000\000\000\000\002\174\014\141\002\186\004.\004:\014\141\014\145\000\000\000\000\004F\000\000\000\000\014\145\b\"\000\000\014\141\014\141\014\141\000\000\014\141\014\141\014\145\000\000\000\000\014\145\000\000\004J\000\000\000\000\014\145\014\145\000\238\014\141\000\000\000\000\000\000\014\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\145\000\000\014\141\000\000\014\145\006\157\007\166\000\000\000\000\000\000\006\157\000\000\000\000\006\157\014\145\014\145\014\145\000\000\014\145\014\145\000\000\000\000\000\000\006\157\000\000\006\157\000\000\006\157\000\000\006\157\000\000\014\145\007\181\007\181\000\000\014\145\000\000\000\000\000\000\000\000\000\000\006\157\000\000\000\000\000\000\000\000\014\145\006\157\b\"\006\161\006\161\007\181\007\181\007\181\006\161\000\000\006\157\006\161\000\000\006\157\000\000\007\181\000\000\000\000\006\157\006\157\000\238\006\161\000\000\006\161\000\000\006\161\000\000\006\161\007\181\007\181\000\000\000\000\000\000\007\181\006\157\007\181\007\181\007\181\006\157\006\161\000\000\000\000\007\181\000\000\000\000\006\161\006\161\000\000\006\157\006\157\006\157\000\000\006\157\006\157\006\161\000\000\000\000\006\161\000\000\007\181\000\000\000\000\006\161\006\161\006\161\006\157\000\000\000\000\000\000\006\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\161\000\000\006\157\000\000\006\161\006\153\006\153\000\000\000\000\000\000\006\153\000\000\000\000\006\153\006\161\006\161\006\161\000\000\006\161\006\161\000\000\000\000\000\000\006\153\0056\006\153\000\000\006\153\000\000\006\153\000\000\006\161\000\000\000\000\000\000\006\161\000\000\000\000\000\000\000\000\000\000\006\153\000\000\000\000\000\000\000\000\bJ\006\153\b\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\153\000\000\000\000\006\153\000\000\000\000\000\000\000\000\006\153\006\153\000\238\000\000\003\245\000\000\000\000\000\000\000\000\003\245\000\000\001\206\003\245\000\000\000\000\000\000\006\153\000\000\000\000\000\000\006\153\000\000\003\245\000\000\000\000\000\000\003\245\000\000\003\245\000\000\006\153\006\153\006\153\000\000\006\153\006\153\000\000\000\000\000\000\000\000\003\245\000\000\000\000\000\000\000\000\000\000\003\245\006\153\000\000\000\000\000\000\006\153\000\000\002\170\000\000\003\245\000\000\000\000\003\245\000\000\000\000\000\000\006\153\003\245\003\245\003\245\000\000\003\241\000\000\000\000\000\000\000\000\003\241\000\000\001\206\003\241\000\000\000\000\000\000\003\245\003\245\000\000\000\000\004\222\000\000\003\241\000\000\000\000\000\000\003\241\000\000\003\241\000\000\003\245\003\245\000\000\000\000\003\245\003\245\000\000\000\000\000\000\000\000\003\241\000\000\000\000\000\000\003\245\000\000\003\241\000\000\000\000\0011\000\000\003\245\000\000\002\170\0011\003\241\003\245\0011\003\241\000\000\000\000\000\000\003\245\003\241\003\241\003\241\000\000\0011\000\000\0011\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\000\000\003\241\003\241\000\000\000\000\004\222\000\000\0011\000\000\000\000\000\000\000\000\000\000\0011\000\000\003\241\003\241\0011\000\000\003\241\003\241\000\000\0011\000\000\000\000\0011\000\000\000\000\000\000\003\241\0011\0011\000\238\000\000\001-\000\000\003\241\000\000\000\000\001-\0011\003\241\001-\000\000\000\000\000\000\0011\003\241\000\000\000\000\0011\000\000\001-\000\000\001-\000\000\001-\000\000\001-\000\000\0011\0011\0011\000\000\0011\0011\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\0011\000\000\001-\000\000\000\000\000\000\001-\0011\000\000\000\000\000\000\001-\000\000\000\000\001-\000\000\000\000\000\000\0011\001-\001-\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\001-\001i\000\000\000\000\000\000\000\000\001i\000\000\r\221\001i\001-\001-\001-\000\000\001-\001-\000\000\r\221\000\000\001i\000\000\001i\000\000\001i\001-\001i\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\001-\001i\r\221\000\000\000\000\000\000\000\000\000\000\r\221\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\001i\001i\001i\000\000\000\000\001\029\000\000\000\000\000\000\000\000\001\029\000\000\002\025\001\029\000\000\000\000\001i\000\000\000\000\000\000\r\221\002\025\000\000\001\029\000\000\001\029\000\000\001\029\000\000\001\029\001i\001i\001i\000\000\001i\001i\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001\029\002\025\000\000\000\000\001i\000\000\000\000\002\025\000\000\000\000\000\000\000\000\001\029\000\000\000\000\001i\000\000\001\029\001\029\001\029\000\000\001\185\000\000\000\000\000\000\000\000\001\185\000\000\018\150\001\185\000\000\002\146\000\000\001\029\000\000\000\000\000\000\002\025\000\000\001\185\000\000\000\000\000\000\001\185\000\000\001\185\000\000\001\029\001\029\001\029\000\000\001\029\001\029\000\000\000\000\000\000\000\000\001\185\000\000\000\000\000\000\000\000\000\000\001\185\000\000\000\000\000\000\000\000\001\029\018\154\000\000\000\000\001\185\000\000\000\000\001\185\000\000\000\000\000\000\001\029\001\185\001\185\000\000\018\166\005%\000\000\005%\000\000\000\000\005%\000\000\000\000\005%\000\000\005%\007\166\001\185\000\000\000\000\005%\001\185\000\000\005%\000\000\000\000\005%\005%\000\000\005%\005\190\001\185\001\185\005%\000\000\001\185\001\185\005%\005%\005%\000\000\005%\000\000\000\000\005%\001\185\000\000\005%\000\000\000\000\000\000\005%\001\185\005%\000\000\000\000\005%\005%\b\"\005%\000\000\005%\002\234\001\185\005%\002\234\005%\000\000\000\000\005%\000\000\000\000\000\000\005%\005%\002\234\000\238\005%\t!\000\000\005%\005%\000\000\t!\005%\000\000\t!\000\000\000\000\000\000\005%\005%\005%\000\000\005%\005%\t!\000\000\005%\005%\t!\000\000\t!\000\000\005%\005%\000\000\000\000\005%\005%\000\000\000\000\005%\000\000\t!\005%\000\000\000\000\007\210\000\000\t!\000\000\000\000\000\000\t!\005%\005%\000\000\000\000\t!\029*\000\000\t!\000\000\000\000\000\000\005%\t!\t!\000\238\t\029\000\000\000\000\000\000\000\000\t\029\t!\t!\t\029\000\000\000\000\000\000\000\000\t!\000\000\000\000\000\000\t!\t\029\000\000\000\000\000\000\t\029\000\000\t\029\000\000\000\000\t!\t!\t!\000\000\t!\t!\000\000\000\000\000\000\t\029\000\000\000\000\000\000\000\000\t!\t\029\000\000\000\000\000\000\t\029\000\000\t!\000\000\000\000\t\029\000\000\000\000\t\029\000\000\000\000\000\000\000\000\t\029\t\029\000\238\003\233\000\000\000\000\000\000\000\000\003\233\t\029\t\029\003\233\000\000\000\000\000\000\000\000\t\029\000\000\000\000\000\000\t\029\003\233\000\000\000\000\000\000\003\233\000\000\003\233\000\000\000\000\t\029\t\029\t\029\000\000\t\029\t\029\000\000\000\000\000\000\003\233\018\174\000\000\000\000\000\000\t\029\003\233\000\000\000\000\000\000\000\000\000\000\t\029\000\000\000\000\003\233\000\000\000\000\003\233\000\000\000\000\000\000\000\000\003\233\003\233\003\233\003\022\002\198\000\000\000\000\002\146\000\000\007&\000\000\000\000\002\254\000\000\000\000\000\000\003\233\000\000\000\000\000\000\003\233\000\000\001\210\000\000\007F\000\000\000\000\000\000\000\000\003\026\003\233\003\233\t\134\000\000\003\233\003\233\000\000\000\000\000\000\000\000\0276\000\000\003&\000\000\003\233\0032\001\190\000\000\000\000\000\000\019\014\003\233\002\186\000\000\000\000\004\006\003\233\000\000\000\000\004\n\000\000\004\018\003\233\t\194\005\174\000\000\000\000\000\000\003\022\002\198\000\000\000\000\002\146\000\000\007&\000\000\005\178\002\254\000\000\000\000\000\000\000\000\000\000\000\000\005\186\005\190\000\000\001\210\025\166\007F\000\000\000\000\000\000\000\000\003\026\000\000\000\000\t\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\002\003&\005\194\000\000\t\178\001\190\000\000\000\000\004\130\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\t\194\005\174\000\000\000\000\000\000\003\022\002\198\000\000\000\000\002\146\000\000\007&\000\000\005\178\002\254\000\000\000\000\000\000\000\000\000\000\000\000\005\186\005\190\000\000\001\210\rz\007F\000\000\000\000\000\000\000\000\003\026\000\000\000\000\t\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026>\003&\005\194\000\000\t\178\001\190\000\000\000\000\004\130\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\250\t\194\005\174\000\000\000\000\000\000\003\022\002\198\000\000\000\000\002\146\000\000\000\000\000\000\005\178\002\254\000\000\000\000\000\000\000\000\005\254\000\000\005\186\005\190\000\000\001\210\rz\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\158\003&\005\194\000\000\0032\001\190\000\000\000\000\004\130\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\000\000\nU\000\000\000\000\000\000\000\000\000\000\003\022\002\198\000\000\005\178\002\146\000\000\000\000\000\000\000\000\002\254\000\000\005\186\005\190\000\000\006\002\000\000\nU\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\000\000\000\000\006\190\000\000\000\000\005\194\005\r\005\r\000\000\003&\005\r\004\130\0032\001\190\000\000\005\r\000\000\000\000\000\000\002\186\000\000\005\r\004\006\000\000\000\000\005\r\004\n\000\000\004\018\005\162\000\000\005\174\005\r\026\238\000\000\000\000\027\006\000\000\000\000\000\000\000\000\000\000\000\000\005\178\000\000\005\r\000\000\000\000\005\r\005\r\000\000\005\186\005\190\000\000\006\002\005\r\000\000\000\000\005\r\000\000\000\000\000\238\005\r\000\000\005\r\005\r\000\000\005\r\003\233\000\000\000\000\000\000\000\000\003\233\000\000\005\194\003\233\nU\003\233\005\r\000\000\004\130\000\000\003\233\000\000\000\000\003\233\005\r\005\r\000\000\003\233\000\000\003\233\000\000\000\000\000\000\003\233\000\000\000\000\000\000\003\233\000\000\003\233\000\000\003\233\018\174\000\000\000\000\000\000\000\000\003\233\005\r\000\000\000\000\003\233\018\174\000\000\005\r\000\000\003\233\003\233\000\000\003\233\000\000\000\000\000\000\000\000\003\233\003\233\003\233\000\000\000\000\003\233\000\000\000\000\000\000\000\000\003\233\003\233\003\233\000\000\000\000\000\000\003\233\000\000\000\000\000\000\003\233\000\000\000\000\000\000\000\000\000\000\003\233\000\000\000\000\000\000\003\233\003\233\0292\000\000\003\233\003\233\000\000\000\000\000\000\000\000\003\233\003\233\029b\000\000\003\233\003\233\000\000\r\213\000\000\000\000\019\014\003\233\r\213\000\000\000\000\r\213\003\233\000\000\000\000\000\000\019\014\003\233\000\000\000\000\000\000\r\213\003\233\000\000\000\000\r\213\000\000\r\213\000\000\000\000\000\000\000\000\000\000\005\201\000\000\000\000\000\000\000\246\000\000\r\213\002\202\000\000\000\000\000\000\000\000\r\213\000\000\000\000\000\000\000\000\005Y\000\000\000\000\000\000\r\213\000\000\003v\r\213\000\000\000\000\000\000\000\000\r\213\r\213\000\000\000\000\000\000\000\000\003\130\000\000\0075\000\000\000\000\000\000\020z\000\000\000\000\002\198\r\213\000\000\002\146\000\000\r\213\028N\000\000\002\254\020\222\000\000\000\000\000\000\0075\020\246\r\213\r\213\002\138\001\210\r\213\r\213\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\r\213\020\254\003\006\000\000\003\166\000\000\000\000\r\213\000\000\000\000\007]\000\000\003\238\001\190\000\000\021\018\021N\002\198\r\213\002\186\002\146\000\000\003\246\000\000\000\000\002\254\b\190\b\194\b\206\000\000\007]\005\174\000\000\000\000\000\000\001\210\025\142\000\000\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\005\186\005\190\000\000\000\000\000\000\000\000\000\000\003\238\001\190\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\190\b\194\b\206\005\194\b\214\005\174\000\000\000\000\b\238\004\130\006!\000\000\000\000\000\000\000\000\006!\000\000\000\000\006!\000\000\000\000\000\000\000\000\000\000\000\000\005\186\005\190\000\000\006!\000\000\000\000\000\000\006!\000\000\006!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006!\000\000\000\000\005\194\b\214\000\000\006!\000\000\b\238\004\130\000\000\000\000\b\130\000\000\000\000\006!\000\000\000\000\006!\000\000\000\000\000\000\000\000\006!\006!\000\238\000\000\006)\000\000\000\000\000\000\000\000\006)\000\000\000\000\006)\000\000\000\000\000\000\006!\006!\000\000\000\000\006!\000\000\006)\000\000\000\000\000\000\006)\000\000\006)\000\000\006!\006!\000\000\000\000\006!\006!\000\000\000\000\000\000\000\000\006)\000\000\000\000\000\000\000\000\000\000\006)\000\000\003\233\000\000\000\000\006!\b\130\003\233\000\000\006)\003\233\000\000\006)\000\000\000\000\000\000\006!\006)\006)\000\238\003\233\000\000\000\000\000\000\003\233\000\000\003\233\000\000\000\000\000\000\000\000\000\000\000\000\006)\006)\000\000\000\000\006)\003\233\018\174\000\000\000\000\000\000\000\000\003\233\000\000\000\000\006)\006)\000\000\000\000\006)\006)\003\233\000\000\000\000\003\233\000\000\000\000\000\000\000\000\003\233\003\233\003\233\006\229\000\000\000\000\000\000\006)\006\229\000\000\000\000\006\229\000\000\000\000\000\000\000\000\003\233\000\000\006)\000\000\003\233\006\229\000\000\000\000\000\000\006\229\000\000\006\229\000\000\000\000\003\233\003\233\021^\000\000\003\233\003\233\000\000\000\000\000\000\006\229\000\000\000\000\000\000\000\000\000\000\006\229\000\000\000\000\000\000\000\000\019\014\003\233\000\000\000\000\006\229\000\000\000\000\006\229\000\000\000\000\000\000\000\000\006\229\006\229\000\238\000\000\000\000\000\000\000\000\000\000\029\n\000\000\000\000\000\000\000\000\000\000\003\022\002\198\006\229\000\000\002\146\000\000\006\229\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\000\000\006\229\006\229\0252\001\210\006\229\006\229\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\006\229\000\000\000\000\r\213\000\000\000\000\000\000\006\229\r\213\003&\000\000\r\213\0032\001\190\000\000\000\000\000\000\000\000\006\229\002\186\000\000\r\213\004\006\000\000\000\000\r\213\004\n\r\213\004\018\005\162\000\000\005\174\000\000\005\201\000\000\000\000\000\000\000\000\000\000\r\213\000\000\000\000\000\000\005\178\000\000\r\213\000\000\000\000\000\000\000\000\000\000\005\186\005\190\000\000\006\002\000\000\000\000\r\213\000\000\000\000\000\000\000\000\r\213\r\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\194\000\000\007\018\r\213\tn\006&\004\130\000\000\000\000\000\000\000\000\003\022\002\198\000\000\000\000\002\146\000\000\r\213\r\213\002\138\002\254\r\213\r\213\000\000\000\000\000\000\000\000\004\014\000\000\000\000\001\210\r\213\000\000\000\000\000\000\030\030\000\000\003\026\r\213\000\000\000\000\006\130\000\000\000\000\000\000\000\000\000\000\003\022\002\198\r\213\003&\002\146\000\000\0032\001\190\000\000\002\254\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\001\210\004\n\000\000\004\018\005\162\000\000\005\174\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\178\000\000\003&\000\000\000\000\0032\001\190\000\000\005\186\005\190\000\000\006\002\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\000\000\006\162\000\000\000\000\000\000\000\000\005\194\003\022\002\198\000\000\005\178\002\146\004\130\000\000\000\000\000\000\002\254\000\000\005\186\005\190\000\000\006\002\000\000\006\214\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\005\194\003\022\002\198\000\000\003&\002\146\004\130\0032\001\190\000\000\002\254\000\000\000\000\000\000\002\186\0079\000\000\004\006\000\000\000\000\001\210\004\n\000\000\004\018\005\162\000\000\005\174\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\178\000\000\003&\000\000\000\000\0032\001\190\000\000\005\186\005\190\000\000\006\002\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\000\000\014\n\000\000\000\000\000\000\000\000\005\194\003\022\002\198\000\000\005\178\002\146\004\130\000\000\000\000\000\000\002\254\000\000\005\186\005\190\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\014\022\000\000\000\000\000\000\000\000\005\194\003\022\002\198\000\000\003&\002\146\004\130\0032\001\190\000\000\002\254\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\001\210\004\n\000\000\004\018\005\162\000\000\005\174\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\178\000\000\003&\000\000\000\000\0032\001\190\000\000\005\186\005\190\000\000\006\002\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\000\000\014\"\000\000\000\000\000\000\000\000\005\194\003\022\002\198\000\000\005\178\002\146\004\130\000\000\000\000\000\000\002\254\000\000\005\186\005\190\000\000\006\002\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\007\241\007\166\000\000\000\000\000\000\007\241\005\194\000\000\007\241\000\000\003&\000\000\004\130\0032\001\190\000\000\000\000\000\000\007\241\000\000\002\186\000\000\007\241\004\006\007\241\000\000\000\000\004\n\000\000\004\018\005\162\000\000\005\174\000\000\000\000\000\000\007\241\000\000\000\000\000\000\000\000\000\000\007\241\b\"\005\178\000\000\000\000\000\000\000\000\000\000\000\000\007\241\005\186\005\190\007\241\006\002\000\000\000\000\000\000\007\241\007\241\000\238\001\153\000\000\000\000\000\000\000\000\001\153\000\000\000\000\001\153\000\000\000\000\000\000\000\000\007\241\005\194\000\000\000\000\007\241\001\153\000\000\004\130\000\000\001\153\000\000\001\153\000\000\000\000\007\241\007\241\000\000\000\000\007\241\007\241\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\000\000\001\153\000\000\001\189\000\000\000\000\000\000\007\241\001\189\000\000\001\153\001\189\000\000\001\153\000\000\000\000\000\000\000\000\001\153\001\153\001\153\001\189\000\000\000\000\000\000\001\189\000\000\001\189\000\000\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\153\001\189\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\001\153\001\153\000\000\000\000\001\153\001\153\001\189\000\000\000\000\001\189\021j\000\000\000\000\000\000\001\189\001\189\000\000\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\189\000\000\006\233\000\000\001\189\000\000\000\000\006\233\000\000\000\000\006\233\000\000\000\000\000\000\001\189\001\189\000\000\000\000\001\189\001\189\006\233\000\000\000\000\000\000\006\233\000\000\006\233\000\000\001\189\000\000\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\006\233\000\000\025\014\000\000\000\000\000\000\006\233\000\000\001\189\000\000\000\000\000\000\000\000\000\000\000\000\006\233\000\000\000\000\006\233\000\000\000\000\000\000\000\000\006\233\006\233\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\233\000\000\r\213\000\000\006\233\000\000\000\000\r\213\000\000\000\000\r\213\000\000\000\000\000\000\006\233\006\233\000\000\000\000\006\233\006\233\r\213\000\000\000\000\000\000\r\213\000\000\r\213\000\000\006\233\000\000\000\000\000\000\005\201\000\000\000\000\006\233\000\000\000\000\r\213\000\000\000\000\000\000\000\000\000\000\r\213\000\000\006\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\213\000\000\000\000\000\000\000\000\r\213\r\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\141\000\000\002\198\r\141\000\000\031\206\000\000\r\213\000\000\000\000\031\210\000\000\000\000\r\141\000\000\000\000\000\000\000\000\000\000\r\141\000\000\r\213\r\213\002\138\000\000\r\213\r\213\000\000\000\000\000\000\000\000\r\141\000\000\000\000\000\000\r\213\000\000\r\141\000\000\030V\000\000\000\000\r\213\001\002\001\190\000\000\r\141\000\000\000\000\r\141\000\000\000\000\000\000\r\213\r\141\000\000\000\000\000\000\000\000\000\000\tQ\tQ\031\214\000\000\tQ\000\000\000\000\000\000\000\000\tQ\r\141\000\000\000\000\000\000\r\141\019V\000\000\000\000\000\000\tQ\000\000\000\000\000\000\031\218\r\141\r\141\tQ\000\000\r\141\005%\000\000\000\000\000\000\000\000\005%\000\000\000\000\005%\000\000\tQ\000\000\000\000\tQ\tQ\000\000\r\141\000\000\005%\000\000\tQ\000\000\005%\tQ\005%\000\000\000\000\tQ\000\000\tQ\tQ\000\000\tQ\000\000\000\000\000\000\005%\000\000\000\000\000\000\000\000\000\000\005%\000\000\tQ\000\000\000\000\000\000\b\130\000\000\000\000\005%\tQ\tQ\005%\000\000\000\000\000\000\000\000\005%\002\234\000\238\000\000\001U\000\000\000\000\000\000\000\000\001U\000\000\000\000\001U\000\000\000\000\000\000\005%\tQ\000\000\000\000\005%\000\000\001U\tQ\001U\000\000\001U\000\000\001U\000\000\005%\005%\000\000\000\000\005%\005%\000\000\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\000\001U\000\000\000\209\000\000\000\000\005%\000\000\000\209\000\000\000\000\000\209\000\000\001U\000\000\000\000\000\000\000\000\001U\001U\000\238\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\000\000\000\000\000\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\000\001U\001U\001U\000\000\001U\001U\000\209\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\209\000\209\000\238\000\000\000\213\000\000\000\000\001U\000\000\000\213\000\000\000\000\000\213\000\000\000\000\000\000\000\209\000\000\001U\000\000\000\209\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\213\000\000\000\209\000\209\000\000\000\000\000\209\000\209\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\213\000\000\007\237\000\000\000\000\000\209\000\000\007\237\000\000\000\213\007\237\000\000\000\213\000\000\000\000\000\000\000\209\000\213\000\213\000\238\007\237\000\000\000\000\000\000\007\237\000\000\007\237\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\213\007\237\000\000\000\000\000\000\000\000\000\000\007\237\000\000\000\000\000\213\000\213\000\000\000\000\000\213\000\213\007\237\000\000\000\000\007\237\000\000\000\000\000\000\000\000\007\237\007\237\000\000\000\000\006\221\000\000\000\000\000\213\000\000\006\221\000\000\000\000\006\221\000\000\000\000\000\000\007\237\000\000\000\213\021:\007\237\000\000\006\221\000\000\000\000\000\000\006\221\000\000\006\221\000\000\007\237\007\237\020\142\000\000\007\237\007\237\000\000\000\000\000\000\000\000\006\221\000\000\000\000\000\000\000\000\000\000\006\221\000\000\0061\007\166\000\000\007\237\000\000\0061\000\000\006\221\0061\000\000\006\221\000\000\000\000\000\000\000\000\006\221\006\221\000\000\0061\000\000\000\000\000\000\0061\000\000\0061\000\000\000\000\000\000\000\000\r=\000\000\006\221\000\000\000\000\r=\006\221\0061\r=\000\000\000\000\000\000\000\000\0061\b\"\000\000\006\221\006\221\r=\000\000\006\221\006\221\r=\000\000\r=\0061\000\000\000\000\000\000\000\000\0061\0061\000\238\000\000\000\000\000\000\r=\006\221\000\000\000\000\000\000\000\000\r=\000\000\000\000\000\000\0061\000\000\000\000\001\202\002\142\r=\000\000\002\146\r=\000\000\000\000\000\000\000\000\r=\0061\0061\000\000\000\000\0061\0061\000\000\000\000\001\210\001\250\001\230\000\000\000\000\000\000\000\000\r=\011\022\000\000\001\242\r=\000\000\0061\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r=\r=\002\154\002\162\r=\r=\000\000\002\174\000\000\002\186\004.\004:\004\253\000\000\000\000\000\000\024\230\004\253\030\002\004\245\004\253\r=\000\000\000\000\004\245\000\000\000\000\004\245\000\000\000\000\004\253\000\000\rn\004J\004\253\000\000\004\253\004\245\000\000\000\000\000\000\004\245\005\190\004\245\000\000\000\000\000\000\000\000\004\253\000\000\000\000\000\000\030\014\000\000\004\253\004\245\000\000\000\000\000\000\000\000\000\000\004\245\000\000\004\253\000\000\000\000\004\253\000\000\000\000\024\250\004\245\004\253\000\000\004\245\000\000\000\000\000\000\000\000\004\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\253\000\000\000\000\000\000\004\253\005\021\000\000\004\245\000\000\000\000\005\021\004\245\004\229\005\021\004\253\004\253\000\000\004\229\004\253\004\253\004\229\004\245\004\245\005\021\000\000\004\245\004\245\005\021\000\000\005\021\004\229\000\000\000\000\000\000\004\229\004\253\004\229\000\000\000\000\000\000\000\000\005\021\004\245\000\000\000\000\000\000\020\182\005\021\004\229\000\000\005%\000\000\000\000\023\198\004\229\005%\005\021\000\000\005%\005\021\000\000\000\000\000\000\004\229\005\021\000\000\004\229\000\000\005%\000\000\000\000\004\229\005%\000\000\005%\000\000\000\000\000\000\000\000\000\000\005\021\000\000\000\000\000\000\005\021\000\000\005%\004\229\000\000\000\000\000\000\004\229\005%\000\000\005\021\005\021\000\000\000\000\005\021\005\021\000\000\004\229\004\229\000\000\005%\004\229\004\229\000\000\000\000\005%\002\234\000\000\000\000\000\000\000\000\005\021\001\202\001\206\000\000\000\000\000\000\000\000\004\229\000\000\000\000\005%\024\170\000\000\000\000\000\000\002\158\000\000\000\000\028\"\000\000\001\210\001\250\001\230\000\000\005%\005%\000\000\000\000\005%\005%\001\242\005\005\000\000\000\000\b6\000\000\005\005\002\002\000\000\005\005\000\000\000\000\000\000\001\246\002\162\005%\000\000\000\000\002\174\005\005\002\186\004.\004:\005\005\000\000\005\005\000\000\004F\000\000\000\000\004\237\000\000\000\000\000\000\000\000\004\237\000\000\005\005\004\237\000\000\000\000\000\000\000\000\005\005\004J\000\000\000\000\000\000\004\237\000\000\000\000\000\000\004\237\000\000\004\237\005\005\005\029\000\000\000\000\000\000\005\005\005\029\000\000\000\000\005\029\000\000\004\237\000\000\000\000\000\000\000\000\000\000\004\237\018\158\005\029\000\000\005\005\000\000\005\029\000\000\005\029\000\000\000\000\000\000\004\237\000\000\000\000\001\202\001\206\004\237\005\005\005\005\005\029\000\000\005\005\005\005\000\000\000\000\005\029\000\000\000\000\000\000\000\000\004\014\000\000\004\237\001\210\001\250\001\230\000\000\005\029\005\005\000\000\000\000\000\000\005\029\001\242\000\000\000\000\004\237\004\237\000\000\022\n\004\237\004\237\000\000\000\000\000\000\000\000\001\246\002\162\005\029\000\000\000\000\002\174\000\000\002\186\004.\004:\000\000\004\237\000\000\000\000\004F\000\000\005\029\005\029\000\000\000\000\005\029\005\029\024R\000\000\000\000\000\000\000\000\000\000\0059\000\000\000\000\004J\000\000\000\246\000\000\b\157\002\202\005\029\b\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003r\000\000\024\210\000\000\0059\000\000\003v\000\000\b\157\b\157\000\000\b\157\b\157\000\000\000\000\000\000\000\000\000\000\003\130\000\000\000\000\004~\000\000\004\130\020z\b\177\000\000\000\000\b\177\000\000\000\000\000\000\b\157\028N\000\000\000\000\020\222\000\000\000\000\000\000\000\000\020\246\000\000\000\000\b\177\b\177\000\000\b\177\b\177\000\000\b\157\000\000\000\000\000\000\000\000\000\000\000\000\020\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\177\000\000\000\000\021\018\021N\000\000\000\000\0059\0059\000\000\000\000\000\000\b\157\000\000\b\157\000\000\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\025\142\000\000\006\026\000\000\000\000\b\157\b\157\000\000\b\137\000\000\b\157\b\137\b\157\000\000\000\000\000\000\b\157\b\181\000\000\000\000\b\181\000\000\000\000\000\000\b\177\000\000\b\177\b\137\b\137\000\000\b\137\b\137\000\000\000\000\000\000\000\000\b\181\b\181\b\177\b\181\b\181\006\"\b\177\000\000\b\165\000\000\b\177\b\165\b\177\000\000\000\000\b\137\b\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\181\000\000\000\000\b\165\b\165\000\000\b\165\b\165\000\000\b\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\137\000\000\b\137\000\000\000\000\000\000\000\238\000\000\000\000\b\181\000\000\b\181\000\000\000\000\b\137\000\000\000\000\006\"\b\137\000\000\014\149\014\149\b\137\b\181\b\137\000\000\006\"\b\181\b\137\000\000\000\000\b\181\000\000\b\181\000\000\000\000\b\165\b\181\b\165\014\149\014\149\014\149\007\186\000\000\000\000\000\000\000\000\000\000\000\000\014\149\006~\000\000\000\000\006\"\b\165\000\000\000\000\000\000\b\165\000\000\b\165\000\000\014\149\014\149\b\165\000\000\000\000\014\149\000\000\014\149\014\149\014\149\000\000\000\000\000\000\000\000\014\149\001\202\001\206\026B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\026\162\000\000\000\000\014\149\000\000\000\000\001\210\001\214\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\001\210\001\214\001\230\000\246\000\000\000\000\002\202\000\000\000\000\000\000\001\242\000\000\001\246\002\162\000\000\000\000 \022\002\174\000\000\002\186\004.\004:\003v\001\246\002\162\000\000\004F\000\000\002\174\000\000\002\186\004.\004:\000\000\003\130\000\000\000\000\004F\000\000\000\000\020z\000\000\000\000\004J\000\000\000\000\000\000\001\202\001\206\028N\000\000\000\000\020\222\000\000\004J\000\000\000\000\020\246\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001\210\001\250\000\000\000\000\000\000\000\000\000\000\020\254\000\000\000\000\000\000\031\198\000\000\000\000\000\000\001\210\001\250\000\000\000\000\000\000\000\000\021\018\021N\001\246\002\178\005a\000\000\000\000\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\004F\001\246\002\178\000\000\000\000\025\142\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\004J\000\000\000\000\005\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J\000\000\000\000\005\157\029\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\174")) and lhs = - (8, "\014\r\012\011\n\t\b\007\006\005\004\003\002\001\000\222\222\221\221\220\219\219\218\218\218\218\218\218\218\218\218\218\218\218\218\218\218\218\218\218\218\218\217\217\216\215\215\215\215\215\215\215\215\214\214\214\214\214\214\214\214\213\213\213\212\212\211\210\210\210\209\209\208\208\208\208\208\208\207\207\207\207\207\207\207\207\206\206\206\206\206\206\206\206\205\205\205\205\204\203\202\202\202\202\201\201\201\201\200\200\200\199\199\199\199\198\197\197\197\196\196\195\195\194\194\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\193\192\192\191\191\190\189\188\187\187\186\186\185\185\185\185\184\184\184\184\183\183\182\182\182\182\182\182\181\180\179\179\178\178\177\177\176\175\175\174\173\173\172\171\170\170\170\169\169\168\167\167\167\167\167\167\166\166\166\166\166\166\166\166\165\165\164\164\164\164\164\164\163\163\162\162\162\161\161\160\160\160\160\159\159\158\158\157\157\156\156\155\155\154\154\153\153\152\152\151\151\150\150\149\149\149\148\148\148\148\147\147\146\146\145\145\144\144\144\144\144\143\143\143\143\142\142\142\141\141\141\141\141\141\141\140\140\140\140\140\140\140\139\139\138\138\137\137\137\137\137\137\136\136\135\135\134\134\133\133\132\132\132\131\130\130\130\129\129\128\128\128\128\128\128\128\128\128\127\127~~}}}}}}}}}}}|{zyyxxxxxwvvuuttttttttttttttssrrqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqppoonnmmllkkjjiihhggffeeeeeeeeeeedcba`_^]\\[ZYYYYYYYYYYXXXWWWVVVVVUUUUUUUUUTTSSSSSRRQQPONNMMMMMLLKKJJJIIIIIIHHHGGFFEEDDCCBBBAA@@??>>==<<;;::99887776665554443333210000000000000000000/////.......-----------------------------------------------------------------,,++++++++++++++++++++++***************************************************))(((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \031\031\030\029\028\028\028\027\027\026\026\026\026\026\026\026\026\026\026\025\025\024\024\024\024\023\023\022\021\021\021\021\021\020\019\019\018\018\018\017\017\017\016\016\016\016\016\016\015\015") + (8, "\014\r\012\011\n\t\b\007\006\005\004\003\002\001\000\231\231\230\230\229\228\228\227\227\227\227\227\227\227\227\227\227\226\226\225\224\223\223\223\223\223\223\223\223\222\222\222\222\222\222\222\222\221\221\221\220\220\219\218\218\218\217\217\216\216\216\216\216\216\215\215\215\215\215\215\215\215\214\214\214\214\214\214\214\214\213\213\213\213\212\211\210\210\210\210\209\209\209\209\208\208\208\207\207\207\207\206\205\205\205\204\204\203\203\202\202\202\201\201\201\201\201\201\201\201\201\200\200\199\199\198\198\197\196\195\194\193\193\192\192\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\191\190\190\189\188\188\188\188\187\187\187\187\186\186\185\185\185\185\185\185\184\183\182\182\181\181\180\180\179\178\178\177\176\176\175\174\173\173\173\172\172\171\170\170\170\170\170\170\169\169\169\169\169\169\169\169\168\168\167\167\167\167\167\167\166\166\165\165\165\164\164\163\163\163\163\162\162\161\161\160\160\159\159\158\158\157\157\156\156\155\155\154\154\153\153\152\152\152\151\151\151\151\150\150\149\149\148\148\147\147\147\147\147\146\146\146\146\145\145\145\144\144\144\144\144\144\144\143\143\143\143\143\143\143\142\142\141\141\140\140\140\140\140\140\139\139\138\138\137\137\136\136\135\135\135\134\133\133\133\133\132\132\132\131\131\131\131\131\131\131\131\131\131\130\130\129\129\128\128\128\128\128\128\128\128\128\128\128\128\128\127~}||{{{{{zyyxxwwwwwwwwwwwwwwvvuuttsssssssssssssssssssssssssssssssrrqqppoonnmmlllkkjjiihhggffffffffffffffffffedcba`_^]\\[ZZZZZZZZZZYYYXXXWWWWWVVVVVVVVVUUTTTTTSSRRQPOONNNNNMMLLKKKJJJJJJIIIHHGGFFEEDDCCBBBAA@@??>>==<<;;::::::998877777766655544433210000000000000000000/////.......-----------------------------------------------------------------,,++++++++++++++++++++++***************************************************))((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \031\031\030\029\028\028\028\027\027\026\026\026\026\026\026\026\026\026\026\025\025\024\024\024\024\023\023\022\021\021\021\021\021\020\019\019\018\018\018\017\017\017\016\016\016\016\016\016\015\015") and goto = - ((16, "\000)\001A\000S\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000v\000\000\000\000\000\203\000\134\000\"\000\024\000\165\000\164\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\000\000\000\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000;n\000\000\000\000\000\000\000\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007 \000\250\000\000\001\022\000\141\000\225\000\000\000\214\023R\001r\001\158\000 \000\000\000\000\000\000\001\138\000\000\000\000\000v\000\000\000\000\000\000\000\000\003\012\000\000\002*\000\000\000\000\000\000\000\000\000\000\000~\000\000\000z\003R\b2\000\000\000\000\011:\007 \000\000\000\000\000-\000\000\001D\000\000%\156\001\026\001~\000\000\000\000\002\020\0028\003\178\007\026\005\216\003R\0038\000\023\002\002\001\200\002`\002p\011\200\000\000>\018\002r\002\214\002z2n\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\224\000\000\002\168\003\014\003.\000\000\000\000\000\000\000\000\tZ\000\000\000\000\003\030\000Y\003h\006p\b\022\000\000\000\000\000\000\002\238\003\014\003v\001:\003<\003\158\001H\003T\003\168\001\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\196\000\000\000\000\000\000\003h\005D\011\236\t\180>\018\012F\000\000\002\238\012\142#\250$\152\000\000\000\143\000\000\000\000\000\000\000\000\004F>p\004\\\000\0002\152\004~\000\0002\1828d\000\221\000\000\001\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\006\004\020\000\000\000\000\000\000\022\182\000\000\006$\000\000\000\000\006\136\000\230\000\000\000\000\007\174\000\0002\210\000\000\006\136\b\196\006\136\000\000\000\000\000\000\000\000\000\0008\234\000\000\005\130\004\160\000\000>\232\005\170\027p\000\000\000\000\000\000\0044\000\000\000\000\000\000\000\000\004\012\000\000\000\000\000\000\000\000\000\0003\024\000\000\000\000\000\000\000\000\000\000\000\000\000\015\004\224\000\000\000\000\000\000\004\012\005\0163\226\004\152\006\n\016\020\000\000\007\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\005\1924\002\000\000\000\000\004\172\006.4J\000\000\000\000\000\0004l\004\1644\246\000\000\004\164\000\0005X\004\164\000\0005\138#\224\005\134\005\148\000\000\000\000,\022\000\000\000\000\000\000\000\000\000\000\000\000\004\164\000\000\000\0005\190\000\000\004\164>\154\000\000\004\012\000\000\000\0005\242\000\000\004\164\0014\000\000\000\000\004\164\004\164\000\000\000\000\004\164\000\000\000\000$\152\000\000\000\000\000\000\000\000\004\164$\250\000\000\000\000\004\164\000\000\001\148\005\178\000\000\000\000\000\000\000\000\000\000\000\000\000\00098\000\000\005\134\000\000?\026\004\012\000\000\000\000\000\000\000\000\005\192\006F\012\176\005\242\006\b\006\012\006\194\003X\006\200\000\144\006\168\000\000\000\000\n\138\011*\007\024\000\158\006F\011\134\000\000\004\128\000\023\007v\003T\007\160\000\000\000\000&\196\000\0009@\0074\000\000?\\\004\012?\150\004\012\000\000\003~\004\\\000\000\011\158\004\128\000\000\000\000\006p\000\000\000\000\000\000\000\000\000\000\012\018\004\128\012\182\004\128\000\000\006d\000\000\000\000\007\006\000\000\000\000\000\000\007\220\000\000\000\000\000\000\004\128\000\000\000\000\004\128\000\000\006F\007\006\000\000\000?\003<\000\000\000?\000\000\000\000\rb\004\128\000\000\000\000\000\000\000\000\000\000\000\000\000?\rv\r\204\007\176\007T\004\1486&\000\000\006\186\007n\014\030\006\254\007x?\238@\020\000\000\000\000\000\000\000\000\000\000\001\164\t\212\000\000\000\000\000\000\007\002\007\214\007\140\000?\r\234\000\000\004\128\000\000\000\000\000\000\012\142\000\000?\234\004\012\014h\007\006\b\130\014\156\007z\b\132\014\230%\004\004\164\015P\007\170\b\184\004\012\b\194\000\000\000\000\000\000\000\000#\224\b\218\000\000\021N\015\154\bJ\b\2506\004\004\164\016\b\b\162\t>@\144\000\000@\252\000\000\000\000\016R\006:\t\198\000\000\000\000\t\252@\204\000\000\004\012)\128\000\000\004\012A\"\004\012\000\000\000\000\000\000\000\000\000\000A\006\000\000\000\000\000\000\004\168\016\188\000\000\000\000\000\000\000\000%\238AZ\000\000\000\000\000\000\000\000\000\000\b\180\017\006\000\000\b\206& \b\206&@\b\206\000\000A\236\000\000&\144\b\206\017:\002\012\017\132\000\000\000\000&\244\b\206'\\\b\206'\186\b\206'\220\b\206(\016\b\206(~\b\206(\220\b\206(\228\b\206)6\b\206)\134\b\206*\006\b\206*v\b\206*\204\b\206+0\b\206+z\b\206+\156\b\206+\206\b\206,l\b\206,\198\b\206-\026\b\206\tV\017\1687\b#\224\t\186\000\000-@=\180\000\000\018v\000\000\000\000\018\170\000\000\000\000\000\000-~\000\000\000\000)\128\t\218\000\000A\142\004\012\018\222\000\000\000\000\t\134\000\000A\162\004\012\019F\000\000\000\000\019z\000\000\000\000\000\000B\026\004\012\019\224\000\000\t<\020J\000\0007\022\000\000\004\1647x\000\000\004\1647\130\000\000\004\164\002\026\000\000\000\000\000\000\000\000\000\0007\194\004\164\000\000\001\222\005*\000\000\000\000\000\000\b\206\020|\000\000\000\000\000\000\020\176\000\000\000\000\000\000\000\000\000\000\020\228\000\000\000\000\000\000\b\206\021\022\000\000\021\184\000\000\000\000\000\000\022\026\000\000\000\000\000\000\000\000BD\000\000\000\000\022\128\000\000\000\000\000\000-\154\b\206\022\212\000\000\000\000\000\000.6\b\206\022\226\000\000\000\000\000\000.D\b\206\004\218\023\182\000\000\000\000.f\b\206\023\216\000\000\000\000/,\b\206\024X\000\000\000\000/6\b\206\000\000\000\000\024z\000\000\000\000/\144\b\206\024\172\000\000\000\000/\224\b\206\025N\000\000\000\0000\000\b\206\000\0000\208\b\206\000\000%T\000\000\000\000\b\206\000\000\000\000\025t\000\000\000\000\025\164\000\000\000\000\tz\000\000\000\000\026\"\000\000\026t\000\000\000\000\000\000#\224\n\022\000\0009t\t\016\006\136\027\016\000\0009\172\000\000\000\000\000\0009\228\000\000\000\000\027D\000\000\027d\000\000\000\000\000\000\000\00002\000\000\000\000\000\0001\006\b\2061&\b\206\000\000\t<\027\254\000\000\000\000\028j\000\0001r\000\000\000\000@\020\000\000\000\000\000\000\028\206\000\000\000\000\000\000\000\000\029\004\000\000\000\000\000\000\000\000\n\176\000\000\000\000\000\00080\000\000\004\250\000\000\000\019\000\000\nb\000\000\005\252\000\000\000\000\000\000\000\000\000\000\000\000\001\164\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\206\000\000\n\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t^\007\204\000?\029$\000\000\n0\tb\n\196\002\204\b\006\000?\0158\004\128\t\172\000?\000\000\029\244\000\000\004$\000\000\nV\t~\001\232\000\000\000\000\000\000\000\000\000\000\n\150\000\198\003X\000\000\000\000\000\000=\128\000\000E|\000\000\t\190\000\000\t\210\000\000\000\000\000\000\000\000\004\156\000\000\000\000\000\000\012.\006\136\000\000\006\136\000\012\000\000\002P\000\000\rr\006\136\006\136\000\000\016x\006\136\006\136\t\218\000\000\030\020\000\000\000\000\t\228\011\144\000\000\026\238\007\004\000\000\000\000\000\000\000\000\000\000\000\000\b\206\000\000\000\000\000\000\000\000\000\000\n\220\t\236\n\228\000?\000\000\015\196\000\000\004\128\000\000\012&\000\000\000\000\000\000\000\000\000\000\030\232\000\000\b\206\000\000\000\000\018:\000\000\004\128\000\000\019\012\000\000\004\128\000\000\019\158\004\128\000\000\000?\000\000\t\246\012`\001x\000\000\011\030\011,\n\002\011f\011\252\021 \004\128\b\254\000\000\n\n\011\242\012\"\004\206\t.\011\250\n\024\012@\004\216\t4\012\n\000\000\000\000\006\024\tH\000\000\003\132\003$8\012\004\164\030F\000\000\006\162\003n\011\200\n*\012\232\001\244\000\000\011\240\n2\006\016\000\000<$\000\000Bp\004\012\000\000\012\140\012\142\000\000\t\158\000\000\004\012\0124\nB\007Z\012V\000\251\000\000\000\000\000\000\000\000\nT\n4\000\000\n\166\n`\000\000\bX1\132\012l\012\136\n\174\bJ\n\144\000\000\n\188\bx\011\004\000\000\012\138\012\188\n\200\012\228\011\252\021\192\004\128\000\000\n\204\rR\000\000\b\242\000\000\011\\\000\000\rV\000\000\023\132\005N\r$\n\206\rb\000\000\024\020\006\170\r<\000\000\000\000\000\012\003\146\011\170\000\000\024H\004\128\011\172\000\000\000\022\000\000\r\n\n\228\025|\007\130\000\000\r*\0112\007\200\012V\r0\r>\011R\014\154\000\000\rl\001\246\000\000\000\000\000\000\000\000\000\211\011X\rFB\136\004\012\000\000\004$\011~\014*\000\000\000\000\000\000\000\000\000\000\000\000B\146\007\132\000\000\011\222\014\130\000\000\000\000\000\000\000\000\000\000\000\000\r\234\0126\015\020\r\210\000\000\000\000\n\162\b\240\014\028\000\000\000\000\012P\015J\014\000\000\000\000\000)\210\000\000\t\244\000\0000\1448\006\004\012\000\000Ch\012\220\000\000C\160\000\000\000\000\000\000\007\204\000\000\000\000\012^\014H\012T\015h\014\030\000\000\000\000C\200\012\140\014j\000\000\000\000\000\000<\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\210\000\000\014\132\012V\t\220\000\000\015|\015.\012\248\014\142\000\000\000\000\014\148\012d\n\012\000\000\000\000\b\2448d\006\140\000\000\000\000\000\000\b\250\014b\012j\000\000\014f\b\250\000\000\015J\r\000\014\176\000\000\000\000\000\000\004\012\0005\002\024\007\192\000\000\000\000\000\000\000\000\014\130\012\220\000\000\tF\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\012\014p\012\222\015\216\014\146\000\000:\b\000\169\012\236\014f\007d\007\252\012\246\015\026\000\000\015\208\031\146\000\000\000\000\031\178\000\000\rr\000\000\003D\000\000\000\000\000\000\000\000\000\000\000\000D\002\004\012\000\000\015\212\031\226\000\000\000\000 \018\000\000\001\252\012\248\015z\000\000\000\000:x<\144\015,\000\000D\030\004\012 |\000\000\000\000 \216\000\000\000\000\r\168\000\000\002\152\000\000\000\000\000\000\000\000\000\000\000\000=Z\000\000\000\000:\180=|\0154\000\000Dd\004\012!\128\000\000\000\000!\194\000\000\000\000\012\254!\232\r\190\000\000\r\004\r\006\000m\000:\r \n\130\r<\015\138\"L\r\194\000\000\rL\rh\011b\000\000\001\224>8\000\000\005\192\000\000\rn:\208:\236\0020\014n\003\134\000\000\030&%T\000\000\003\152\000\000\000\000\003\152\000\000\000\000\003\152\012X\000\000\003\214\003\152\015\144\"\134\r\212\000\000\003\152\000\000\000\000DF\000\000\000\000\000\000\003\152\000\000\000\000\014\002\000\000\005,\t\030\014\004\000\000\r\1344\012\014\012\000\000\000\000\000\000\000\000\014&\000\000\000\000\007\204\000\000\003\152D\158\000\000\005|\003\152;\184\000\000\014:\014\254\r\212\016\022\014\208\000\000;\244\014\140\015\014\000\000\000\000\000\000 d\005\242\000\000\000\000\000\000\000\000\000\000\000\000\b\180\014\148\000\000\015\030\000\000\000\000\000\000\000\000\014\160#\134\000\000\000\000\000\000\000\000\b\180\000\000\000\000\014\166-\208\000\000\000\000\000\000\000\000\000\000\000?\004\128\000\000\000\000\004\164\000\000D\210\004\012\000\000\007\222\000\000\000\000\000\000\000\000#B\000\000\000\000\000\000\000\000\000\000\000\000\015\180\002\134\0114\014b\001l\r\220\000\000\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\130\002$\r\238\000\000\007H\016\022\015\208\014\176\000\000\000\000\015\196\002\148\005\204\000\000\000\000\000\000\014&\000\000\0140\004\144\000\000\000\000\006\136\005\156\000\000\000\000\000\000\000\000\000\000E\176\000\000\000\000\b`\007\206\000\000\000\000EN\004\012\004\012\000\000EX\004\012\t\142\000\000\000\000\000\000\004\012\000\000\000\000\n\016\015\216\014\188\000\000\000\000\015\204\001\024\003\200\000\000\000\000\000\000\000\000\tB\016\022\nV\015\232\014\204\000\000\000\000\015\232\001v\005\250\000\000\000\000\000\000\000\000\004\128\000\000\014\216\000\000\000\000\000\000\"\244\000\000#\146\000\000\000\000\000\000\000\000\000\000\018\002\000\000\000\000\000\000\007\224\000\186\000\000\000\000\000\000\000\000\000\000\004F\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\192\000\000\000\000\000\000>\\\000\000\004\012\000\000\n\198\000\000\000\000\000\000\000D\000\000\000\000\000\000\000\177\000\000\000\000\000\000\004\254\000\000\000?\000\000\006z\000\000\004\128\000\000\003>\000\000\000\000\000\0001\164\004\164\000\000\000\000\000\017\000\000\000\000\000\000\000\000\001\164\004\202\015$\011 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007H\000\000\014\218\000\000\000\000\000\000\000\000\005\020\006\186\000\166\002L\000\000\000\000\014\230\003\242\000\000\000\000\000\000\014\240\005\152\000\000\000\000\000\000\000\000"), (16, "\006E\0007\002,\002-\001e\002\001\004\143\007\n\001\031\000\238\001\216\006\166\001k\006\213\007\030\002-\001e\002n\006F\006\224\001\240\006H\001\016\003\184\001\244\002o\001\023\001\016\001\023\001\026\006I\006V\000;\001\023\001\026\001\"\001\031\006E\002\137\002,\002-\001e\000\149\007\011\006\199\001\233\000\238\000\234\005v\003\011\000\238\000\239\006\219\002\002\002n\006F\006U\002\014\006H\006J\000\234\001T\002o\000\238\001\002\001\245\004\t\006I\006V\003\011\002\025\000@\001\003\004\015\004\146\002\137\001\139\000\234\006\002\001\246\000\238\000\239\007 \000\131\006f\000\149\005\n\002\027\000\154\000\149\000\238\006\191\000\158\001\027\003\185\006K\006J\001\006\005\011\002\139\006\217\0007\005#\006E\006L\000q\001e\006\004\006\002\0007\001\016\0020\001W\002\141\000\238\000\241\001\023\001$\0079\004O\000\155\007:\006\005\007!\006H\002\141\000\238\006\007\006[\001\031\007\006\0063\006K\006I\000\241\004\198\002\139\006\004\001\016\006y\004\201\006L\002\012\006\\\001\023\001$\000\241\002\028\0020\001\214\002\141\000\238\006\005\006O\005}\005~\006\226\006\007\006Q\004\t\000\234\006\030\006J\000\238\000\239\006[\007\007\001l\006S\001%\005\142\002\142\001\023\002\148\005\135\004\029\000:\001\159\001e\002\154\006\\\001\139\002\144\0007\006T\002\026\002,\002-\001e\004\200\006O\006\002\001\031\001\016\004\200\006Q\001.\001%\006K\001\023\001$\002n\002\156\004\021\000?\006S\000m\006L\002\142\002o\002\148\006E\006\194\002,\002-\001e\002\154\000\\\001\139\002\144\006\004\006T\002\137\000\149\004\024\000\159\001\233\007<\002n\006F\006U\001\016\006H\003\196\001e\006\005\002o\001\023\001$\002\156\006\007\006I\006V\000`\006\023\000d\006N\001\016\006E\002\137\002,\002-\001e\001\023\001\026\002\006\006O\001\016\002\014\006\208\000\134\006Q\002\006\001\023\001\026\002n\006F\006U\003\011\006H\006J\006S\000y\002o\006\152\001\016\0009\000\149\006I\006V\000\154\001\023\001\026\002\139\000=\004N\002\137\006T\002\027\002\025\001%\000\238\003\003\001e\001\016\0020\004\012\002\141\000\238\0007\001\023\001$\000\128\006\164\0007\000\234\006K\006J\000\238\000\239\002\139\006w\004\218\004\143\006E\006L\000\238\004\r\001(\003\011\006\197\006\198\0020\000\241\002\141\000\238\001\031\002\145\005\006\0079\003\011\000\130\007:\000\234\005\n\006H\000\238\001\002\004S\006[\005\135\004\029\005v\006K\006I\001\182\005\011\002\139\002\028\005\213\005\018\002\025\006L\001%\006\\\002\142\004\t\004@\000\174\0020\000\137\002\141\000\238\002\154\006O\001\139\002\144\006\197\006\198\006Q\001\006\000\234\001\019\006J\000\238\000\239\006[\000\136\001\023\006S\006\160\006\128\002\142\001\139\002\148\000\240\002\156\005\135\004\029\003\r\002\154\006\\\001\139\002\144\005\206\006T\006\130\002,\002-\001e\004y\006O\006\002\006\150\002\026\004\143\006Q\005\208\000\238\006K\005\217\000\234\002n\002\156\000\238\000\239\006S\000\153\006L\002\142\002o\002\148\006E\000\241\002,\002-\001e\002\154\001\016\001\139\002\144\006\004\006T\002\137\001\023\001$\005\178\000\179\007;\002n\006F\006U\006\002\006H\003\245\004\029\006\005\002o\005}\005~\002\156\006\007\006I\006V\000\152\006\014\000\183\006N\000\178\006E\002\137\002,\002-\001e\005\134\000\189\002\026\006O\005\135\004\029\000\241\006\004\006Q\006\140\000\186\001\139\002n\006F\006U\002\160\006H\006J\006S\000\184\002o\006]\006\005\001%\003\232\006I\006V\006\007\0007\004\017\002\139\006\011\000\188\002\137\006T\000\149\000\241\006\142\001\233\006\134\006\135\000\193\0020\007\022\002\141\000\238\006\134\006\135\006\136\006\137\004\020\002\014\000\194\006K\006J\006\136\006\137\002\139\006Y\006\138\004\029\006E\006L\006o\000\241\002\014\006\138\004\029\000\206\0020\000\210\002\141\000\238\007\023\002\145\005\182\0079\003\235\002\018\007:\000\207\002\027\006H\001\240\000\238\003\249\006[\001\244\000\216\001\023\006K\006I\002\029\000\234\002\139\002\027\000\238\001\002\000\238\006L\003\011\006\\\002\142\004P\004)\006!\0020\006\242\002\141\000\238\002\154\006O\001\139\002\144\001\251\000\241\006Q\000\238\000\234\000\225\006J\000\238\000\239\006[\004\194\000\218\006S\000\238\001\245\002\142\001\221\002\148\000\226\002\156\004\004\004\006\004\b\002\154\006\\\001\139\002\144\002\028\006T\000\241\002,\002-\001e\003\011\006O\006\002\001\031\000\241\000\229\006Q\000\231\002\028\006K\000\232\000\234\002n\002\156\000\238\000\239\006S\000\246\006L\002\142\002o\002\148\006E\006\195\002,\002-\001e\002\154\001\016\001\139\002\144\006\004\006T\002\137\001\023\001\026\007-\007.\007?\002n\0070\000\241\006\002\006H\001Y\003\011\006\005\002o\000\241\003\236\002\156\006\007\006I\0072\006\196\006\b\004n\006N\001\n\006E\002\137\002,\002-\001e\007A\006\t\005\027\006O\000\241\001\236\006\131\006\004\006Q\000\241\0079\001\r\002n\007:\003\182\001\240\006H\006J\006S\001\244\002o\001\023\006\005\005\n\001\030\006I\007B\006\007\005\030\001;\002\139\006\018\006\250\002\137\006T\005\011\003\249\006\132\003\235\005\012\001B\001\016\0020\005 \002\141\000\238\006\133\001\023\001$\006\243\006\159\004\171\003\024\006K\006J\000\238\001\002\002\139\007\014\001G\001\245\006E\006L\005!\004\143\002\014\003\011\000\238\001V\0020\004a\002\141\000\238\001\031\002\145\004f\0079\003O\001\177\007:\000\238\001\002\006H\0075\003\011\004\007\004\006\004\b\000\242\003)\006K\006I\007\015\000\234\002\139\002\027\000\238\001\002\000\238\006L\001%\006\\\002\142\006z\003\205\001\\\0020\001\175\002\141\000\238\002\154\006O\001\139\002\144\003`\001t\006Q\001\239\000\234\007F\006J\000\238\000\239\003\235\004}\001e\006S\006\160\003\235\002\142\003\183\002\148\006\251\002\156\001\139\001~\003\012\002\154\006\\\001\139\002\144\001\031\006T\003\188\002,\002-\001e\003\011\006O\006\002\001\135\000\241\000\247\006Q\004\183\002\028\006K\001\134\000\234\002n\002\156\000\238\000\239\006S\001\181\006L\002\142\002o\002\148\006E\003\011\002,\002-\001e\002\154\001\016\001\139\002\144\006\004\006T\002\137\001\023\001$\001E\006\162\007D\002n\006F\006c\006\002\006H\001)\000\234\006\005\002o\000\238\000\239\002\156\006\007\006I\006V\001\193\006$\001C\006N\001\016\006E\002\137\002,\002-\001e\001\023\001$\005\"\006O\000\241\0007\006\151\006\004\006Q\001\239\0079\000\234\002n\007:\000\238\001\002\006H\006J\006S\001\198\002o\004%\006\005\001%\004k\006I\007=\006\007\005\030\006\209\002\139\0067\001\016\002\137\006T\000\241\007\018\006\132\001\023\001$\001]\001`\0020\005 \002\141\000\238\006\133\003\011\003\183\000\149\006\160\000\181\001\233\006K\006J\000\241\001\031\002\139\001u\001 \006\196\005\253\006L\005!\001\253\001\216\006E\004\030\007\019\0020\001\023\002\141\000\238\003\249\002\145\001\240\006\147\003\235\003\217\001\244\001\203\001\023\001\016\001\"\0070\006\169\006[\006H\001\023\001$\006K\001%\003\011\001\209\002\139\000\149\006I\001\220\001\233\006L\002\005\006\\\002\142\000\241\003g\001\226\0020\001\228\002\141\000\238\002\154\006O\001\139\002\144\002\014\001\243\006Q\004\189\001&\007@\001\245\000\241\005o\004\006\004\b\006J\006S\001\031\001*\002\142\001+\002\148\001\204\002\156\001\246\001\206\002\004\002\154\006\\\001\139\002\144\002\015\006T\001\016\002\027\002\000\006\235\000\238\006O\001\023\001$\001\023\003\210\006Q\001\"\003\011\003\011\005\171\001\016\003\206\002\156\006K\004#\006S\001\023\001$\002\142\002&\002\148\006E\006L\002,\002-\001e\002\154\001\213\001\139\002\144\001\016\006T\004t\002\014\001\016\001\239\001\023\001$\002n\006F\001\023\001\026\006H\0071\003\011\001\031\002o\000\241\001 \002\156\000\241\006I\006_\002)\005R\0027\002\028\002F\006+\002\137\0029\006N\001>\002\027\001\031\002\014\000\238\001 \006\173\001%\002'\006O\001\"\006\176\006\236\002*\006Q\004\206\004\239\003\249\006J\001\016\005S\005\148\005T\006.\006S\001\023\001$\005v\000\241\001\"\003\219\005\n\002\014\002\027\001.\001\016\000\238\001H\0060\003\011\006T\001\023\001\026\005\011\006\237\004\140\004\029\005\017\0062\006\244\001\023\005U\005\019\002I\006K\001*\001\031\006p\002\139\003\227\0028\002\028\002\027\006L\0061\000\238\005\131\004\006\004\b\006\186\0020\000\241\002\141\000\238\001*\006.\000\241\002O\001%\005\173\001\031\001\239\001G\001 \006.\001\016\005V\006b\002[\006\245\0060\001\023\001$\002\028\001\031\005W\005X\004\158\005Y\0060\004\210\004\029\006\\\001\023\001\016\001.\006\172\001\"\001\016\005$\001\023\001$\006O\006\246\001\023\001$\0061\006Q\005\r\006\205\004\162\005\149\002\028\000\241\005v\0061\001\023\006S\003\011\002X\002\142\006\247\002\148\005}\005~\003\011\005\001\001>\002\154\000\238\001\139\002\144\000\241\006T\001%\005[\002G\002J\005\127\005\143\005]\005g\001*\005\135\004\029\002^\001>\002b\001\016\003\011\005\145\002\156\003\011\001%\001\023\001$\005y\005\150\002,\002-\001e\001.\003\011\002P\001H\005\r\005\146\002,\002-\001e\006%\004\177\001\016\002n\002,\002-\001e\001\023\001\023\001$\001.\002o\000\149\001H\005`\001\233\001\016\0048\005,\002n\003c\002g\001\023\001$\002\137\004\\\002c\002o\001\031\000\241\000\241\0057\003\249\003\162\002{\003\011\000\149\001%\005j\001\233\002\137\001\016\001\031\001\216\003d\001 \006g\001\023\001$\004b\005}\005~\004g\001\240\001>\001\"\000\241\001\244\003\014\001\023\002h\001%\004l\002\014\0010\005\127\005\143\002\153\003\249\001\"\005\135\004\029\002\204\005s\004\029\001%\003\218\001\031\003\224\000m\001 \005\139\004\006\004\b\005\r\002\139\005v\002\208\001.\000\241\003\231\001H\003\239\002\027\002/\000m\000\238\0020\001\245\002\141\000\238\002\139\003~\002\224\001\"\004\135\0020\006\t\002\141\000\238\003\011\0007\001\246\0020\001*\002\141\000\238\006\181\004\006\004\b\002\231\005v\003\004\000\241\004\000\002,\002-\001e\006\188\002\145\001\016\003s\003\011\003{\004\002\000\241\001\023\001$\004\026\000\241\002n\000\241\003f\004\031\001\016\002\145\003\176\0041\002o\001*\001\023\001$\004Q\002\028\007\002\000\241\003\011\002\142\004W\002\148\003\186\002\137\004^\006\202\003\208\002\154\002\142\001\139\002\144\004d\007*\002-\001e\002\142\002\143\002\148\001\139\002\144\004w\001\016\004\148\002\154\004|\001\139\002\144\001\023\001$\000\241\002\156\001%\004\139\001\031\005}\005~\001 \001\216\001>\000\241\002\n\004\147\007\004\000\241\004\151\001%\002\156\001\240\000\241\005\127\005\143\001\244\000\241\001\023\005\135\004\029\003\011\000\241\001.\001\016\001\"\002\014\003\223\000\241\002\139\001\023\001\026\000\241\004\159\005}\005~\003\225\001.\001>\000\241\001H\0020\005v\002\141\000\238\001%\003\238\004\150\000\241\005\127\005\143\004\157\000\241\0042\005\135\004\029\002\027\001\245\004\161\000\238\000\241\002,\002-\001e\004\167\003\011\004\173\004\185\004\025\000\241\001*\001\246\001.\002\145\005\015\001H\002n\000\238\004\204\002,\002-\001e\001\216\005\n\002o\002\007\007+\004!\002\141\000\238\006s\004\163\001\240\005\240\002n\005\011\001\244\002\137\001\023\005+\001\016\002\142\002o\002\148\003\011\003\011\001\023\001$\004=\002\154\000\241\001\139\002\144\0040\000\241\002\137\002\028\004\209\004;\005\248\001\031\000\241\000\238\003\011\002,\002-\001e\000\241\001\216\000\241\000\241\001\217\002\156\004\214\003\011\004\178\004\224\001\245\001\240\002n\001\216\000\241\001\244\001\238\001\023\003\011\004]\002o\005}\005~\001\240\001\246\001>\004V\001\244\004\230\001\023\004+\002\139\001%\002\137\001\187\001e\006\184\006\185\006~\004\029\004X\005\135\004\029\0020\004[\002\141\000\238\004\195\004\199\002\139\002,\002-\001e\000\241\001f\002A\001\245\001h\001i\001.\004j\0020\001H\002\141\000\238\002n\004\250\003\011\001\245\000\241\001\246\001\216\000\241\002o\001\248\002\145\004\241\005\026\004\252\004$\001\031\001\240\001\246\005>\004`\001\244\002\137\001\023\005\031\002\014\003\011\000\241\004i\002\145\002\139\001\016\003\152\003\005\003\006\004e\004h\001\023\001$\002\142\004v\002\148\0020\001\"\002\141\000\238\005\014\002\154\005\000\001\139\002\144\006\016\004R\005\021\000\238\002\027\005&\002\142\000\238\002\148\004{\003\011\001\245\004\134\004\133\002\154\001\127\001\139\002\144\0050\002\156\005I\005_\005G\002\145\000\241\001\246\000\241\001n\005i\003\011\000\238\005u\002\139\003\011\002,\002-\001e\002\156\001\216\001%\001\031\001\250\002\014\004\138\0020\005O\002\141\000\238\001\240\002n\004\149\002\142\001\244\003\030\001\023\003\155\003\160\002o\000\241\002\154\000\241\001\139\002\144\003\216\002\028\000\241\004\011\001\016\000\241\004x\002\137\004\160\002\027\001\023\001$\000\238\002\145\002,\002-\001e\005\\\000\241\002\156\000\241\000\241\004\156\004\172\001\129\005\137\005\153\003\011\000\241\002n\001\245\000\241\001\130\005\159\001\139\001l\005d\002o\005\163\005\191\005{\002\142\005\231\002\148\001\246\006#\005\236\003\213\004\166\002\154\002\137\001\139\002\144\004\168\003\011\002,\002-\001e\004\192\006\019\004\180\001\216\004\191\001%\002\022\003\011\004\186\003\011\002\139\002\028\002n\001\240\002\156\005\241\004\190\001\244\003\011\001\023\002o\001\016\0020\006\015\002\141\000\238\003\199\001\023\001$\004\203\000\241\000\241\001.\002\137\002,\002-\001e\005\247\000\241\005\172\005\255\003\011\003\011\000\241\000\241\004\208\003\011\000\241\005/\002n\000\241\000\241\006(\002\139\002\145\004\213\004\216\002o\001\245\003\011\002,\002-\001e\003\151\000\241\0020\005\207\002\141\000\238\003\011\002\137\001\216\001\246\004\220\002<\002n\004\228\005\233\000\241\005\244\001%\001\240\002\142\002o\002\148\001\244\000\241\001\023\006\022\003\146\002\154\006=\001\139\002\144\002\139\006\129\002\137\002\145\001d\001e\000\241\004\235\004\246\000\241\006\141\005.\0020\004\019\002\141\000\238\003\011\006\"\006&\002\156\003\011\000\241\006*\005'\001f\001v\003\011\001h\001i\003\011\005(\002\142\001\245\003\030\003\011\006/\005-\002\139\006\155\002\154\003\011\001\139\002\144\006\157\002\145\006;\001\246\003\142\003\011\0020\0051\002\141\000\238\0052\003\011\003\011\002,\002-\001e\005Q\000\241\003\011\002\156\002\139\000\241\005J\003\011\001w\005K\001x\002L\002n\002\142\000\241\002\148\0020\005P\002\141\000\238\002o\002\154\002\145\001\139\002\144\005f\003\135\006B\005b\005c\005e\006P\005\144\002\137\002,\002-\001e\006W\005t\005x\006`\001\127\000\241\005z\002\156\006\146\005|\000\241\002\145\002n\002\142\006\190\002\148\001n\005\136\005\152\000\238\002o\002\154\006\204\001\139\002\144\005\154\003x\003\145\006\216\0073\005\155\005\160\005\164\002\137\005\168\007>\005\186\005\193\005\197\002\142\007C\002\148\005\221\005\242\002\156\006\n\006\020\002\154\001\216\001\139\002\144\003\229\002,\002-\001e\006D\006>\002\139\001\240\001d\001e\006?\001\244\006C\001\023\006R\006|\002n\006\144\0020\002\156\002\141\000\238\006\145\006\149\002o\001\129\006\189\006\193\001f\001g\003p\001h\001i\001\130\006\203\001\139\001l\002\137\002,\002-\001e\006\207\007%\002\139\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\001\245\002n\000\000\0020\000\000\002\141\000\238\000\000\000\000\002o\000\000\000\000\000\000\001\031\001\246\001\216\000\000\000\000\0046\003h\000\000\000\000\002\137\000\000\000\000\001\240\002\142\000\000\002\148\001\244\000\000\001\023\000\000\000\000\002\154\002\145\001\139\002\144\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\002\139\000\000\000\000\000\000\000\000\000\000\001m\000\000\002n\000\000\000\000\002\156\0020\000\000\002\141\000\238\002o\002\142\001n\002\148\000\000\000\238\002\134\000\000\001\245\002\154\000\000\001\139\002\144\002\137\002,\002-\001e\000\000\000\000\000\000\000\000\002\139\001\246\000\000\000\000\000\000\000\000\000\000\002\145\002n\000\000\000\000\002\156\0020\000\000\002\141\000\238\002o\000\000\000\000\002,\002-\001e\002\147\000\000\000\000\000\000\000\000\000\000\000\000\002\137\000\000\000\000\001\016\000\000\002n\002\142\000\000\002\148\001\023\001$\000\000\001\129\002o\002\154\002\145\001\139\002\144\000\000\002\162\001\138\000\000\001\139\001l\002\139\000\000\002\137\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\0020\002\156\002\141\000\238\000\000\000\000\002n\002\142\000\000\003\030\002\205\001e\000\000\000\000\002o\002\154\000\000\001\139\002\144\000\000\002\161\000\000\000\000\000\000\000\000\002\139\001%\002\137\000\000\000\000\002\240\001v\002\145\001h\001i\000\000\000\000\0020\002\156\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\139\005R\004\023\000\000\000\000\000\000\000\000\000\000\000\000\002\142\000\000\002\148\0020\000\000\002\141\000\238\000\000\002\154\002\145\001\139\002\144\002\245\003\005\003\006\000\000\000\000\000\000\000\000\000\000\005S\006\228\005T\000\000\000\000\000\000\000\000\000\000\002\139\000\000\000\000\002\156\000\000\000\000\000\000\002\145\000\000\002\142\000\000\002\148\0020\000\000\002\141\000\238\000\000\002\154\001\127\001\139\002\144\000\000\000\000\005U\002,\002-\001e\000\000\000\000\000\000\001n\000\000\000\000\000\238\000\000\002\142\000\000\002\148\000\000\002n\002\156\000\000\000\000\002\154\002\145\001\139\002\144\002o\000\000\000\000\002,\002-\001e\002\213\000\000\000\000\000\000\000\000\005V\000\000\002\137\000\000\000\000\003\t\003\n\002n\002\156\005W\005X\000\000\005Y\000\000\002\142\002o\002\148\000\000\002,\002-\001e\002\216\002\154\000\000\001\139\002\144\000\000\000\000\002\137\000\000\000\000\000\000\001\129\002n\000\000\005\149\001\216\000\000\000\000\004E\001\130\002o\001\139\001l\000\000\002\156\001\240\002\228\000\000\000\000\001\244\000\000\001\023\000\000\002\137\000\000\000\000\000\000\000\000\005[\006\230\000\000\000\000\002\139\005]\005g\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\005\145\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\002\139\005\146\001\245\000\000\002o\000\000\000\000\002,\002-\001e\002\235\000\000\0020\000\000\002\141\000\238\001\246\002\137\002\145\000\000\000\000\000\000\002n\000\000\000\000\000\000\002\139\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\002\238\000\000\0020\000\000\002\141\000\238\000\000\002\137\002\145\000\000\002\142\000\000\002\148\000\000\000\000\000\000\001\216\000\000\002\154\004I\001\139\002\144\002,\002-\001e\000\000\001\240\000\000\000\000\000\000\001\244\000\000\001\023\000\000\002\145\000\000\002\142\002n\002\148\000\000\000\000\002\156\002\139\000\000\002\154\002o\001\139\002\144\000\000\000\000\000\000\002\244\000\000\000\000\0020\000\000\002\141\000\238\002\137\000\000\000\000\000\000\002\142\000\000\002\148\000\000\000\000\002\156\002\139\000\000\002\154\001\245\001\139\002\144\000\000\002,\002-\001e\000\000\000\000\0020\000\000\002\141\000\238\000\000\001\246\002\145\000\000\000\000\001\216\002n\000\000\004L\002\156\000\000\000\000\000\000\000\000\002o\001\240\002,\002-\001e\001\244\002\247\001\023\000\000\000\000\000\000\000\000\000\000\002\137\002\145\000\000\002\142\002n\002\148\000\000\000\000\002\139\000\000\000\000\002\154\002o\001\139\002\144\002,\002-\001e\003\017\000\000\0020\000\000\002\141\000\238\000\000\002\137\000\000\000\000\000\000\002\142\002n\002\148\000\000\001\245\002\156\000\000\000\000\002\154\002o\001\139\002\144\002,\002-\001e\003\021\000\000\000\000\001\246\000\000\000\000\000\000\002\137\002\145\000\000\000\000\000\000\002n\000\000\000\000\000\000\002\156\002\139\000\000\000\000\002o\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\0020\003\027\002\141\000\238\002\137\000\000\000\000\002\142\002n\002\148\000\000\000\000\000\000\002\139\000\000\002\154\002o\001\139\002\144\000\000\000\000\000\000\001d\001e\000\000\0020\003 \002\141\000\238\002\137\000\000\000\000\002\145\000\000\000\000\000\000\000\000\000\000\002\156\002\139\000\000\000\000\001f\002\218\000\000\001h\001i\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\002\145\000\000\000\000\002\142\000\000\002\148\000\000\000\000\002\139\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\002,\002-\001e\0020\000\000\002\141\000\238\000\000\000\000\002\145\000\000\002\142\000\000\002\148\000\000\002n\002\139\002\156\000\000\002\154\000\000\001\139\002\144\002o\001\216\000\000\000\000\004Z\0020\000\000\002\141\000\238\000\000\003\"\001\240\002\145\002\137\002\142\001\244\002\148\001\023\000\000\002\156\000\000\001m\002\154\000\000\001\139\002\144\002,\002-\001e\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\002\145\000\000\000\000\002\142\002n\003\030\000\000\000\000\002\156\000\000\000\000\002\154\002o\001\139\002\144\000\000\000\000\000\000\000\000\001\245\000\000\000\000\003&\000\000\000\000\002\137\000\000\000\000\002\142\000\000\003\030\003\129\000\000\001\246\002\156\000\000\002\154\002\139\001\139\002\144\002,\002-\001e\000\000\001\216\000\000\000\000\004\170\000\000\0020\003\132\002\141\000\238\000\000\001\240\002n\001\129\000\000\001\244\002\156\001\023\000\000\000\000\002o\001\138\000\000\001\139\001l\000\000\000\000\000\000\000\000\000\000\003.\000\000\001\031\002\137\000\000\001 \000\000\000\000\002\145\002,\002-\001e\000\000\002\139\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\002n\0020\001\245\002\141\000\238\001\"\000\000\002n\002o\000\000\000\000\000\000\002\142\000\000\003\030\002o\001\246\000\000\0034\000\000\002\154\002\137\001\139\002\144\000\000\003:\000\000\000\000\002\137\000\000\000\000\000\000\000\000\002\145\000\000\000\000\000\000\000\000\000\000\000\000\002\139\000\000\000\000\002\156\000\000\000\000\005R\000\000\000\000\000\000\001*\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\002\142\000\000\003\030\000\000\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\005S\006\210\005T\000\000\000\000\000\000\001\016\000\000\002\139\000\000\002\145\000\000\001\023\001$\000\000\002\139\000\000\000\000\002\156\000\000\0020\000\000\002\141\000\238\002,\002-\001e\0020\000\000\002\141\000\238\005U\000\000\000\000\000\000\000\000\000\000\000\000\002\142\002n\003\030\002,\002-\001e\000\000\000\000\002\154\002o\001\139\002\144\000\000\000\000\002\145\003A\000\000\000\000\002n\000\000\0011\002\145\002\137\000\000\000\000\000\000\002o\001%\005V\000\000\000\000\002\156\003F\000\000\000\000\000\000\000\000\005W\005X\002\137\005Y\000\000\002\142\000\000\003\030\000\000\000\000\000\000\000\000\002\142\002\154\003\030\001\139\002\144\001.\000\000\000\000\002\154\000\000\001\139\002\144\001\216\000\000\005\149\004\182\000\000\000\000\002,\002-\001e\000\000\001\240\000\000\002\156\000\000\001\244\000\000\001\023\000\000\000\000\002\156\000\000\002n\002\139\002,\002-\001e\005[\000\000\000\000\002o\000\000\005]\005g\000\000\0020\003K\002\141\000\238\002n\002\139\000\000\005\145\002\137\000\000\000\000\000\000\002o\000\000\002,\002-\001e\0020\000\000\002\141\000\238\001\245\003R\005\146\000\000\002\137\000\000\000\000\000\000\002n\000\000\000\000\002\145\000\000\000\000\001\246\000\000\002o\001\216\000\000\000\000\004\188\000\000\000\000\000\000\000\000\000\000\003W\001\240\002\145\002\137\000\000\001\244\000\000\001\023\000\000\000\000\000\000\000\000\000\000\002\142\000\000\002\148\000\000\001\216\000\000\000\000\004\197\002\154\002\139\001\139\002\144\000\000\000\000\001\240\000\000\000\000\002\142\001\244\002\148\001\023\0020\000\000\002\141\000\238\002\154\002\139\001\139\002\144\000\000\000\000\002\156\000\000\001\245\000\000\002,\002-\001e\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\001\246\002\156\000\000\002n\002\139\000\000\002\145\002,\002-\001e\000\000\002o\001\245\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\003\\\002n\002\145\002\137\000\000\001\246\000\000\000\000\000\000\002o\002,\002-\001e\002\142\000\000\002\148\000\000\000\000\000\000\003k\000\000\002\154\002\137\001\139\002\144\002n\000\000\002\145\000\000\000\000\002\142\000\000\003\030\002o\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\003n\002\156\000\000\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\142\000\000\003\030\000\000\000\000\000\000\002\156\000\000\002\154\002\139\001\139\002\144\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\0020\000\000\002\141\000\238\000\000\000\000\000\000\002\139\000\000\000\000\002\156\000\000\002n\000\000\001\216\000\000\000\000\004\205\000\000\0020\002o\002\141\000\238\000\000\001\240\000\000\003t\000\000\001\244\000\000\001\023\002\139\002\145\002\137\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\002\145\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\002\142\002o\003\030\000\000\000\000\000\000\000\000\003v\002\154\001\245\001\139\002\144\000\000\000\000\002\137\002\145\000\000\000\000\000\000\002\142\000\000\003\030\000\000\001\246\000\000\000\000\000\000\002\154\000\000\001\139\002\144\002\156\000\000\000\000\002\139\000\000\000\000\000\000\000\000\000\000\002\205\001e\000\000\002\142\000\000\003\030\0020\000\000\002\141\000\238\002\156\002\154\000\000\001\139\002\144\000\000\002,\002-\001e\000\000\002\240\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\002\156\002\139\000\000\000\000\002\145\002o\000\000\000\000\002,\002-\001e\003\128\000\000\0020\000\000\002\141\000\238\000\000\002\137\000\000\000\000\000\000\000\000\002n\002,\002-\001e\000\000\002\245\003\005\003\006\002o\002\142\000\000\002\148\000\000\000\000\003\137\001\031\002n\002\154\001 \001\139\002\144\002\137\002\145\000\000\002o\000\000\000\000\000\000\000\000\000\000\003\140\000\000\000\000\000\000\000\000\000\000\000\000\002\137\000\000\001\127\002\156\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\142\001n\002\148\000\000\000\238\000\000\002\139\000\000\002\154\000\000\001\139\002\144\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\002\156\002\139\000\000\003\t\004\"\000\000\001*\000\000\000\000\000\000\000\000\000\000\002n\0020\000\000\002\141\000\238\002\139\000\000\002\145\002o\000\000\000\000\000\000\000\000\000\000\003\154\000\000\000\000\0020\001\129\002\141\000\238\002\137\000\000\000\000\001\016\000\000\001\130\000\000\001\139\001l\001\023\001$\000\000\002\145\000\000\002\142\000\000\002\148\000\000\002,\002-\001e\000\000\002\154\000\000\001\139\002\144\000\000\000\000\002\145\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\002\142\002o\002\148\000\000\000\000\002\156\000\000\003\157\002\154\000\000\001\139\002\144\000\000\000\000\002\137\001>\002\142\000\000\002\148\000\000\000\000\002\139\001%\000\000\002\154\000\000\001\139\002\144\002,\002-\001e\002\156\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\002\156\000\000\001.\000\000\002o\001?\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\003\167\000\000\000\000\002\137\002\145\000\000\000\000\000\000\000\000\002n\002,\002-\001e\000\000\002\139\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002n\0020\003\172\002\141\000\238\002\137\000\000\002\142\002o\002\148\000\000\000\000\000\000\000\000\003\221\002\154\000\000\001\139\002\144\000\000\000\000\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\000\000\000\000\000\000\002\156\002\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\142\000\000\002\148\000\000\000\000\002\139\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\139\002\145\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\002\156\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002n\002,\002-\001e\000\000\000\000\002\145\002\142\002o\003\030\002,\002-\001e\000\000\003\234\002\154\002n\001\139\002\144\000\000\000\000\002\137\002\145\000\000\002o\000\000\002,\002-\001e\000\000\004\028\000\000\000\000\003c\002\142\000\000\003\030\002\137\002\156\000\000\000\000\002n\002\154\000\000\001\139\002\144\000\000\000\000\000\000\002o\002\142\000\000\002\148\000\000\000\000\004r\000\000\006\006\002\154\000\000\001\139\002\144\002\137\000\000\000\000\002\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\002\156\002\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\139\000\000\000\000\000\000\001\"\000\000\000\000\000\000\000\000\002/\001d\001e\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\139\000\000\000\000\002\145\000\000\001f\001v\000\000\001h\001i\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\002\145\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\004?\000\000\000\000\002\142\003f\002\148\000\000\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\002\145\000\000\000\000\002\142\001w\002\148\001x\002L\000\000\000\000\001\016\002\154\002\142\001\139\002\144\000\000\001\023\001$\002\156\000\000\002\143\000\000\001\139\002\144\000\000\002,\002-\001e\002\142\000\000\002\148\000\000\000\000\000\000\002\156\000\000\002\154\001\127\001\139\002\144\002n\002,\002-\001e\000\000\000\000\000\000\000\000\002o\001n\000\000\000\000\000\238\000\000\005\167\000\000\002n\000\000\000\000\002\156\003\145\002\137\001>\000\000\002o\002,\002-\001e\000\000\001%\005\170\000\000\000\000\005\022\000\000\000\000\005\025\002\137\000\000\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002o\002,\002-\001e\000\000\000\000\005\185\000\000\001.\000\000\000\000\001H\000\000\002\137\000\000\000\000\002n\000\000\000\000\000\000\000\000\001\129\000\000\000\000\002o\000\000\000\000\000\000\000\000\001\130\005\188\001\139\001l\000\000\002\139\000\000\000\000\002\137\000\000\000\000\006E\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\139\000\000\000\000\000\000\002,\002-\001e\000\000\006F\000\000\000\000\006H\0020\000\000\002\141\000\238\000\000\000\000\000\000\002n\006I\000\000\000\000\000\000\002\139\000\000\000\000\002o\002\145\000\000\000\000\000\000\000\000\005\201\000\000\000\000\0020\000\000\002\141\000\238\002\137\000\000\000\000\000\000\002\145\000\000\000\000\000\000\002\139\006J\002,\002-\001e\000\000\000\000\000\000\002\142\000\000\002\148\000\000\0020\000\000\002\141\000\238\002\154\002n\001\139\002\144\002\145\000\000\000\000\000\000\002\142\002o\002\148\000\000\000\000\000\000\000\000\005\204\002\154\000\000\001\139\002\144\000\000\006K\002\137\002\156\000\000\000\000\000\000\000\000\002\145\000\000\006L\000\000\002\142\000\000\002\148\000\000\000\000\002\139\000\000\002\156\002\154\000\000\001\139\002\144\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\006M\000\000\002\142\000\000\002\148\000\000\000\000\000\000\000\000\002\156\002\154\000\000\001\139\002\144\000\000\006N\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\006O\000\000\002\145\000\000\002\139\006Q\002n\000\000\002\156\000\000\000\000\000\000\000\000\000\000\002o\006S\0020\000\000\002\141\000\238\005\225\000\000\000\000\000\000\002,\002-\001e\002\137\000\000\000\000\002\142\006T\002\148\000\000\000\000\000\000\000\000\000\000\002\154\002n\001\139\002\144\000\000\002,\002-\001e\000\000\002o\002\145\000\000\000\000\000\000\000\000\005\228\000\000\000\000\000\000\000\000\002n\000\000\002\137\002\156\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\005\232\000\000\000\000\000\000\002\142\000\000\002\148\002\137\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\002\139\000\000\000\000\000\000\000\000\000\000\002\205\001e\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\002\156\000\000\000\000\000\000\000\000\000\000\000\000\002\240\001v\000\000\001h\001i\000\000\000\000\002\139\000\000\002\205\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\0020\000\000\002\141\000\238\000\000\000\000\000\000\002\139\000\000\000\000\002\240\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\245\003\005\003\006\000\000\002\142\000\000\002\148\000\000\000\000\002\145\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\002\145\002\245\003\005\003\006\000\000\000\000\001\127\002\156\002n\002\142\000\000\002\148\000\000\000\000\000\000\000\000\002o\002\154\001n\001\139\002\144\000\238\006\220\000\000\000\000\000\000\000\000\000\000\002\142\002\137\002\148\000\000\000\000\001d\001e\001\127\002\154\000\000\001\139\002\144\002\156\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\003\t\005\243\001f\001v\000\000\001h\001i\000\000\002\156\000\000\000\000\000\000\000\000\006E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\006v\000\000\001\129\000\000\003\t\006\021\006F\000\000\000\000\006H\001\130\002n\001\139\001l\002\139\000\000\000\000\000\000\006I\002o\001w\000\000\001x\002L\000\000\006\222\0020\000\000\002\141\000\238\000\000\001\129\002\137\000\000\000\000\000\000\001d\001e\000\000\001\130\000\000\001\139\001l\000\000\000\000\000\000\000\000\006J\000\000\001d\001e\000\000\000\000\001\127\000\000\000\000\001f\001v\002\145\001h\001i\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\001f\001v\000\000\001h\001i\000\000\000\000\003\145\000\000\000\000\001\184\000\000\000\000\000\000\006K\000\000\000\000\002\142\000\000\002\148\000\000\000\000\000\000\006L\002\139\002\154\000\000\001\139\002\144\000\000\001w\000\000\001x\001\143\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\001w\000\000\001x\001\172\006X\002\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000m\000\000\001d\001e\000\000\006N\001\127\001\130\000\000\001\139\001l\002\145\000\000\000\000\000\000\006O\000\000\000\000\001n\001\127\006Q\000\238\001f\001v\000\000\001h\001i\000\000\000\000\000\000\006S\001n\001\169\000\000\000\238\000\000\000\000\000\000\000\000\002\142\000\000\002\148\000\000\000\000\000\000\000\000\006T\002\154\000\000\001\139\002\144\001d\001e\000\000\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001w\000\000\001x\001\172\000\000\002\156\001f\001v\000\000\001h\001i\001f\001v\001\129\001h\001i\001\174\000\000\001d\001e\000\000\001\130\000\000\001\139\001l\000\000\001\129\000\000\000\000\000\000\002,\002-\001e\001\127\001\130\000\000\001\139\001l\001f\001v\000\000\001h\001i\000\000\000\000\001n\000\000\000\000\000\238\001w\000\000\001x\001\172\003c\001w\000\000\001x\002L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\001w\001\127\001x\002T\000\000\000\000\001\127\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\000\000\001n\000\000\001\"\000\238\000\000\000\000\001\129\000\000\002,\002-\001e\003\141\003\252\000\000\001\130\001\127\001\139\001l\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\006\154\001n\002/\000\000\000\238\002o\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\137\000\000\000\000\001*\002n\002,\002-\001e\000\000\000\000\000\000\001\129\002o\002W\000\000\000\000\001\129\000\000\000\000\001\130\002n\001\139\001l\000\000\001\130\002\137\001\139\001l\002o\000\000\000\000\000\000\003e\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\002\137\000\000\001\129\000\000\002,\002-\001e\000\000\000\000\000\000\001\130\000\000\001\139\001l\000\000\002\142\000\000\000\000\000\000\002n\002\139\000\000\000\000\002\143\000\000\001\139\002\144\002o\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\001\031\000\000\002\137\001 \000\000\000\000\001>\002\139\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\002,\002-\001e\0020\000\000\002\141\000\238\002\139\000\000\000\000\002\145\001\"\000\000\000\000\000\000\002n\000\000\000\000\000\000\0020\000\000\002\141\000\238\002o\001.\000\000\000\000\004\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\137\000\000\002\142\000\000\003\015\000\000\000\000\000\000\000\000\000\000\002\154\002\139\001\139\002\144\000\000\002\145\002,\002-\001e\000\000\001*\000\000\000\000\0020\000\000\002\141\000\238\002\142\000\000\002\150\000\000\002n\000\000\002\156\000\000\002\154\000\000\001\139\002\144\002o\000\000\000\000\000\000\002\142\000\000\002\152\000\000\000\000\000\000\000\000\001\016\002\154\002\137\001\139\002\144\002\145\001\023\001$\002\156\000\000\000\000\002\139\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\002\156\002\141\000\238\000\000\002n\000\000\002,\002-\001e\002\142\000\000\002\157\002o\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\002n\000\000\000\000\000\000\002\137\000\000\000\000\001>\002o\000\000\002\145\002,\002-\001e\001%\000\000\000\000\000\000\002\139\002\156\000\000\002\137\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\0020\000\000\002\141\000\238\002o\000\000\000\000\000\000\002\142\000\000\002\164\001.\000\000\000\000\001\225\000\000\002\154\002\137\001\139\002\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\000\000\002\139\002,\002-\001e\002\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002n\002\139\000\000\000\000\000\000\000\000\000\000\000\000\002o\002\142\000\000\002\166\000\000\0020\000\000\002\141\000\238\002\154\000\000\001\139\002\144\002\137\000\000\000\000\000\000\000\000\000\000\002\139\002\145\000\000\000\000\000\000\002,\002-\001e\000\000\002,\002-\001e\0020\002\156\002\141\000\238\000\000\000\000\002\145\000\000\002n\000\000\000\000\000\000\002n\000\000\000\000\000\000\002o\002\142\000\000\002\168\002o\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\002\137\000\000\000\000\002\145\002\137\002\142\000\000\002\170\000\000\002,\002-\001e\000\000\002\154\002\139\001\139\002\144\000\000\000\000\002\156\000\000\000\000\000\000\000\000\002n\000\000\0020\000\000\002\141\000\238\000\000\002\142\002o\002\172\000\000\000\000\002\156\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\002\137\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\001\031\000\000\000\000\001 \002\145\000\000\000\000\002\139\002\156\000\000\002n\002\139\000\000\000\000\000\000\000\000\000\000\000\000\002o\0020\000\000\002\141\000\238\0020\000\000\002\141\000\238\001\"\000\000\000\000\000\000\002\137\002\142\000\000\002\174\000\000\000\000\002\229\000\000\000\000\002\154\001\031\001\139\002\144\005;\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\139\000\000\000\000\002\145\000\000\000\000\000\000\002,\002-\001e\000\000\002\156\0020\000\000\002\141\000\238\001\"\000\000\000\000\000\000\001*\000\000\002n\000\000\000\000\000\000\000\000\002\142\000\000\002\176\002o\002\142\000\000\002\178\000\000\002\154\000\000\001\139\002\144\002\154\002\139\001\139\002\144\002\137\002\145\000\000\000\000\000\000\000\000\000\000\001\016\000\000\0020\000\000\002\141\000\238\001\023\001$\002\156\000\000\000\000\005=\002\156\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\002\142\000\000\002\180\000\000\000\000\000\000\002n\000\000\002\154\000\000\001\139\002\144\002\145\000\000\002o\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\005@\002\137\000\000\000\000\001>\002\156\002\139\000\000\002,\002-\001e\001%\000\000\000\000\002\142\002x\002\182\000\000\0020\000\000\002\141\000\238\002\154\002n\001\139\002\144\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\002\137\002\156\000\000\000\000\000\000\000\000\002\145\000\000\005A\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\002\139\000\000\005\011\000\000\005F\000\000\005C\000\000\000\000\000\000\000\000\002n\0020\000\000\002\141\000\238\002\142\001.\002\184\002o\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\000\000\000\000\002\137\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\139\002\145\000\000\000\000\002\156\002n\000\000\002,\002-\001e\000\000\000\000\0020\002o\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\002\137\000\000\000\000\002\142\002o\002\186\002,\002-\001e\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\002\137\002\145\000\000\000\000\002n\000\000\000\000\002\139\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\002\156\000\000\0020\000\000\002\141\000\238\000\000\000\000\002\137\001d\001e\000\000\002\142\000\000\002\188\000\000\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\000\000\002\139\000\000\001f\001\137\000\000\001h\001i\002\145\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\002\156\002\139\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\002\142\000\000\002\190\000\000\002n\000\000\000\000\002\139\002\154\002\145\001\139\002\144\002o\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\002\137\002\145\000\000\000\000\000\000\000\000\002\156\000\000\000\000\002,\002-\001e\002\142\000\000\002\192\000\000\000\000\000\000\001m\000\000\002\154\000\000\001\139\002\144\002n\000\000\002\145\000\000\000\000\002\142\001n\002\194\002o\000\238\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\002\156\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\002\142\000\000\002\196\000\000\000\000\000\000\002\156\002\139\002\154\000\000\001\139\002\144\002n\000\000\000\000\000\000\000\000\001d\001e\0020\002o\002\141\000\238\000\000\000\000\000\000\002\214\000\000\000\000\000\000\000\000\002\156\000\000\002\137\002\217\000\000\001\129\001f\002\218\000\000\001h\001i\000\000\000\000\001\138\000\000\001\139\001l\001d\001e\000\000\002\145\002\139\000\000\000\000\000\000\000\000\002\214\000\000\000\000\000\000\002,\002-\001e\0020\002\217\002\141\000\238\001f\002\218\000\000\001h\001i\000\000\000\000\000\000\002n\000\000\000\000\002\142\000\000\002\198\000\000\000\000\002o\000\000\006E\002\154\000\000\001\139\002\144\000\000\000\000\000\000\002\139\000\000\002\145\002\137\000\000\000\000\000\000\000\000\000\000\000\000\006F\000\000\0020\006H\002\141\000\238\002\156\000\000\000\000\001m\000\000\000\000\006I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\142\001n\002\200\000\000\000\238\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\000\000\002\145\002,\002-\001e\000\000\000\000\001m\006J\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\002n\002\156\001n\000\000\002\139\000\238\002\219\002n\002o\002,\002-\001e\002\142\000\000\002\202\002o\0020\000\000\002\141\000\238\002\154\002\137\001\139\002\144\002n\000\000\002\221\006K\002\137\000\000\000\000\001\129\002o\000\000\000\000\000\000\006L\002\219\000\000\001\138\000\000\001\139\001l\002\156\000\000\002\137\000\000\000\000\002\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\006a\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\006N\002\142\000\000\0032\000\000\000\000\000\000\002\139\000\000\002\154\006O\001\139\002\144\000\000\002\139\006Q\000\000\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\006S\0020\000\000\002\141\000\238\000\000\002\139\002\156\002,\002-\001e\000\000\000\000\002,\002-\001e\006T\000\000\0020\000\000\002\141\000\238\000\000\002n\000\000\000\000\002\145\000\000\002n\000\000\000\000\002o\000\000\002\145\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\137\000\000\000\000\000\000\000\000\002\137\002\145\000\000\000\000\000\000\002\142\000\000\0038\000\000\002,\002-\001e\002\142\002\154\003>\001\139\002\144\000\000\000\000\000\000\002\154\000\000\001\139\002\144\002n\000\000\000\000\000\000\000\000\002\142\000\000\003D\002o\000\000\000\000\000\000\002\156\002\154\000\000\001\139\002\144\000\000\000\000\002\156\000\000\002\137\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\002\139\000\000\000\000\000\000\002\156\002\139\000\000\000\000\002n\002,\002-\001e\0020\000\000\002\141\000\238\002o\0020\000\000\002\141\000\238\000\000\000\000\000\000\002n\000\000\000\000\000\000\000\000\002\137\000\000\000\000\002o\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\137\000\000\000\000\000\000\002\145\002\139\000\000\000\000\000\000\000\000\001f\001v\000\000\001h\001i\000\000\000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\142\000\000\003I\000\000\000\000\002\142\000\000\003N\002\154\000\000\001\139\002\144\000\000\002\154\000\000\001\139\002\144\001\031\002\139\000\000\005;\000\000\002\145\000\000\000\000\000\000\001w\000\000\001x\002L\0020\002\156\002\141\000\238\002\139\000\000\002\156\000\000\000\000\000\000\000\000\002,\002-\001e\001\"\000\000\0020\000\000\002\141\000\238\002\142\000\000\003U\000\000\000\000\000\000\002n\000\000\002\154\001\127\001\139\002\144\002\145\000\000\002o\000\000\000\000\000\000\002,\002-\001e\001n\000\000\000\000\000\238\000\000\000\000\002\137\002\145\000\000\000\000\002\156\003\144\002n\002,\002-\001e\000\000\000\000\005=\002\142\002o\003Z\000\000\000\000\000\000\000\000\000\000\002\154\002n\001\139\002\144\000\000\000\000\002\137\000\000\002\142\002o\003_\000\000\000\000\000\000\000\000\000\000\002\154\000\000\001\139\002\144\000\000\001\016\002\137\002\156\000\000\001\187\001e\001\023\005@\000\000\000\000\005R\000\000\001\129\000\000\000\000\000\000\000\000\000\000\002\156\002\139\001\130\000\000\001\139\001l\001f\002A\000\000\001h\001i\001d\001e\0020\000\000\002\141\000\238\000\000\000\000\000\000\005S\000\000\005T\000\000\000\000\000\000\000\000\000\000\002\139\000\000\000\000\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\0020\005A\002\141\000\238\002\139\002\145\000\000\000\000\003\152\003\005\003\006\005U\000\000\005\011\000\000\005E\0020\005C\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\002\145\002\142\001w\003b\001x\007\026\000\000\007\028\000\000\002\154\001\127\001\139\002\144\000\000\005V\000\000\002\145\000\000\000\000\000\000\000\000\000\000\001n\005W\005X\000\238\005Y\000\000\002\142\000\000\003\148\000\000\002\156\000\000\000\000\001\127\002\154\000\000\001\139\002\144\001d\001e\000\000\000\000\002\142\000\000\003\150\001n\000\000\005\147\000\238\003\159\002\154\000\000\001\139\002\144\000\000\000\000\000\000\002\156\001f\001v\000\000\001h\001i\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\005[\0012\002\156\000\000\000\000\005]\005g\000\000\000\000\001\129\001\031\000\000\000\000\001 \000\000\005\145\0012\001\130\000\000\001\139\001l\0013\001\"\000\000\001\031\000\000\000\000\001 \001Q\000\000\001w\005\146\001x\006j\001\129\000\000\0013\001\"\000\000\000\000\000\000\000\000\001\130\001O\001\139\001l\000\000\000\000\000\000\000\000\001\031\001\"\000\000\001 \000\000\000\000\0012\000\000\000\000\001\031\000\000\000\000\001 \001\127\000\000\0012\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\0013\001\"\000\238\000\000\000\000\000\000\001*\0014\0018\0013\001\"\000\000\000\000\000\000\000\000\000\000\001M\000\000\000\000\000\000\001*\001\016\000\000\0018\000\000\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\001*\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\001*\001\023\001$\000\000\001\129\000\000\000\000\000\000\0018\000\000\000\000\000\000\001\130\000\000\001\139\001l\000\000\0018\001>\000\000\000\000\001\016\001d\001e\000\000\001%\000\000\001\023\001$\001F\001\016\000\000\000\000\001>\000\000\000\000\001\023\001$\001d\001e\001%\000\000\001f\001v\001F\001h\001i\001-\000\000\000\000\001\031\000\000\001.\001 \001%\001H\000\000\000\000\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\001>\001d\001e\000\000\001\"\000\000\000\000\001%\001.\001>\000\000\001F\001w\000\000\001x\001\176\001%\000\000\001d\001e\001F\001f\001v\000\000\001h\001i\000\000\000\000\001w\000\000\001x\001\164\000\000\000\000\001.\000\000\000\000\001H\001f\001v\000\000\001h\001i\001.\000\000\001\127\001H\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\001\127\000\000\000\000\001w\000\000\001x\001\161\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\000\000\000\000\001\016\000\000\001w\000\000\001x\001z\001\023\001$\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001f\001v\001n\001h\001i\000\238\000\000\001\127\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\130\001n\001\139\001l\000\238\000\000\001>\000\000\001\129\000\000\000\000\001d\001e\001%\000\000\000\000\001\130\005\022\001\139\001l\006)\000\000\000\000\000\000\000\000\001w\000\000\001x\001}\000\000\000\000\001f\001v\000\000\001h\001i\001d\001e\000\000\000\000\001.\000\000\000\000\001H\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\130\000\000\001\139\001l\001f\001v\001\127\001h\001i\001\129\001d\001e\000\000\000\000\000\000\000\000\000\000\001\130\001n\001\139\001l\000\238\001w\000\000\001x\001\128\000\000\000\000\000\000\000\000\001f\001v\000\000\001h\001i\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\001w\000\000\001x\001\160\000\000\000\000\000\000\000\000\001\127\001f\001v\000\000\001h\001i\002,\002-\001e\000\000\001f\001v\001n\001h\001i\000\238\000\000\000\000\001w\000\000\001x\001\148\000\000\001\129\000\000\001\127\000\000\000\000\000\000\003\180\000\000\001\130\000\000\001\139\001l\000\000\003\189\001n\000\000\000\000\000\238\000\000\000\000\000\000\001w\000\000\001x\001\156\000\000\000\000\000\000\001\127\000\000\001w\000\000\001x\002d\000\000\000\000\003\202\000\000\000\000\000\000\001n\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\001\127\000\000\000\000\001\130\000\000\001\139\001l\000\000\000\000\001\127\000\000\000\000\001n\000\000\000\000\000\238\000\000\000\000\000\000\000\000\001\129\001n\000\000\000\000\000\238\000\000\002/\000\000\001\130\000\000\001\139\001l\000\000\000\000\000\000\000\000\000\000\000\000\003\193\000\000\002\141\000\238\001\002\001d\001e\000\000\001\129\000\000\000\000\000\000\001d\001e\002\236\000\000\001\130\000\000\001\139\001l\000\000\000\000\002\239\000\000\000\000\001f\002\218\000\000\001h\001i\000\000\000\000\001f\001v\001\129\001h\001i\003\183\000\000\000\000\000\000\000\000\001\130\001\129\001\139\001l\000\000\000\000\000\000\000\000\000\000\001\130\000\000\001\139\001l\000\000\000\000\000\000\000\000\000\000\002\142\001d\001e\000\000\000\000\000\000\001d\001e\002\143\000\000\001\139\002\144\000\000\000\000\000\000\001w\000\000\001x\002\250\000\000\000\000\001f\001v\000\000\001h\001i\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\000\000\001f\001v\001n\001h\001i\000\238\001w\000\000\001x\002\253\000\000\001w\000\000\001x\003\000\000\000\000\000\001d\001e\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\001I\000\000\000\000\002\219\000\000\000\000\000\000\002,\002-\001e\001f\001v\001\127\001h\001i\000\000\001w\001\127\001x\003\b\001K\001\"\000\000\000\000\001n\000\000\005\004\000\238\001\129\001n\003\180\000\000\000\238\000\000\000\000\001\129\001\138\003\189\001\139\001l\000\000\001\031\000\000\001\130\001 \001\139\001l\001I\000\000\001\127\000\000\000\000\000\000\001w\000\000\001x\004p\000\000\000\000\000\000\003\190\001n\000\000\000\000\000\238\000\000\001*\001K\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0018\001\129\000\000\001\127\000\000\000\000\001\129\000\000\000\000\001\130\000\000\001\139\001l\001\016\001\130\001n\001\139\001l\000\238\001\023\001$\002/\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\001*\0012\000\000\003\193\000\000\002\141\000\238\001\002\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\130\0018\001\139\001l\000\000\0017\001\"\000\000\000\000\000\000\000\000\001d\001e\000\000\001\016\000\000\000\000\000\000\000\000\001>\001\023\001$\001\031\000\000\003\183\001 \001%\000\000\004(\001\129\005:\001f\002\218\000\000\001h\001i\000\000\001\130\000\000\001\139\001l\001d\001e\000\000\000\000\000\000\000\000\002\142\000\000\001\"\000\000\001*\000\000\001.\000\000\002\143\001H\001\139\002\144\000\000\000\000\001f\002\218\000\000\001h\001i\001>\000\000\0018\001d\001e\000\000\000\000\001%\000\000\000\000\000\000\001F\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\001f\002\218\000\000\001h\001i\001*\000\000\000\000\001d\001e\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\001f\002\218\001n\001h\001i\000\238\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\001>\000\000\001f\002\218\001m\001h\001i\001%\000\000\000\000\000\000\001F\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\238\000\000\002\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000\000\001.\000\000\000\000\001H\001d\001e\000\000\000\000\000\000\001>\001n\000\000\001\129\000\238\000\000\000\000\001%\003\129\000\000\000\000\001\138\005\205\001\139\001l\001f\002\218\001m\001h\001i\000\000\000\000\000\000\000\000\000\000\001d\001e\003\131\000\000\001n\000\000\000\000\000\238\001\129\001.\001m\003\129\001\227\000\000\001d\001e\001\138\005\229\001\139\001l\001f\002\218\001n\001h\001i\000\238\000\000\000\000\001d\001e\003\130\000\000\000\000\000\000\001f\002\218\001\129\001h\001i\003\129\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\001f\002\218\000\000\001h\001i\000\000\000\000\000\000\000\000\0068\003\134\000\000\000\000\000\000\000\000\000\000\001\129\000\000\001m\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\000\000\001n\000\000\000\000\000\238\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\000\000\001m\000\000\000\000\000\000\001\031\000\000\000\000\001 \006:\000\000\000\000\000\000\001n\000\000\001m\000\238\000\000\002\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\001m\000\238\000\000\001\"\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\001n\004\127\001\129\000\238\000\000\000\000\000\000\002\219\000\000\000\000\001\138\000\000\001\139\001l\001f\002\218\006\215\001h\001i\000\000\000\000\006\000\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\006\000\001*\000\000\000\000\000\000\001\138\000\000\001\139\001l\001f\002\218\001\129\001h\001i\000\000\000\000\000\000\000\000\000\000\001\138\001\031\001\139\001l\001 \000\000\001\129\000\000\000\000\001d\001e\000\000\001\016\006\r\001\138\000\000\001\139\001l\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\012\001\"\001f\002\218\000\000\001h\001i\000\000\000\000\001m\000\000\004\127\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\001n\000\000\000\000\000\238\000\000\004\130\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\001>\000\000\001m\000\000\000\000\001\"\000\000\001%\000\000\001*\000\000\004\136\005R\000\000\001n\004\127\000\000\000\238\001\"\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\127\000\000\004\249\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\001\016\005S\001m\005T\005\202\001\129\001\023\001$\000\000\000\000\0068\001*\000\000\001\138\001n\001\139\001l\000\238\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\0069\000\000\000\000\000\000\000\000\005U\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\001\016\000\000\001\138\000\000\001\139\001l\001\023\001$\003\133\000\000\000\000\001>\001\031\001\016\000\000\001 \006A\000\000\001%\001\023\001$\000\000\004\136\000\000\000\000\000\000\005V\000\000\000\000\001\031\000\000\001\031\001 \001\129\001 \005W\005X\000\000\005Y\001\"\000\000\001\138\000\000\001\139\001l\001.\000\000\000\000\001H\004\127\001d\001e\001>\000\000\000\000\000\000\001\"\000\000\001\"\001%\000\000\005Z\000\000\004\136\005\216\001>\004\127\000\000\003\252\000\000\001f\002\211\001%\001h\001i\000\000\004\136\000\000\000\000\000\000\001\031\005\226\003\255\001 \001*\005[\001.\000\000\000\000\001H\005]\005g\000\000\000\000\000\000\000\000\002,\002-\001e\001.\005\145\001*\001H\001*\000\000\000\000\000\000\001\"\000\000\000\000\000\000\000\000\005\004\000\000\001\016\000\000\005\146\000\000\000\000\004.\001\023\001$\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\001\016\000\000\001\016\000\000\000\000\000\000\001\023\001$\001\023\001$\001\031\000\000\000\000\001 \000\000\001m\000\000\000\000\000\000\001\"\001\031\001*\000\000\001 \005\251\000\000\000\000\001n\000\000\000\000\000\238\000\000\000\000\000\000\000\000\001>\000\000\001\"\000\000\000\000\000\000\001\031\001%\000\000\001 \000\000\004\136\001\"\000\000\000\000\000\000\001\016\001>\000\000\001>\000\000\000\000\001\023\001$\001%\000\000\001%\002/\004\136\001*\000\000\000\000\000\000\001\"\001.\000\000\000\000\001H\000\000\0020\000\000\002\141\000\238\006\254\000\000\001\031\000\000\001*\001 \000\000\000\000\001.\001\129\001.\001H\000\000\004\003\001*\000\000\001\016\001\138\000\000\001\139\001l\000\000\001\023\001$\000\000\001>\000\000\001\031\000\000\001\"\001 \000\000\001%\000\000\001\016\001*\005\t\001<\000\000\000\000\001\023\001$\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\001\"\000\000\002\142\000\000\000\000\001.\001\031\000\000\001H\001 \002\143\001\016\001\139\002\144\001>\000\000\000\000\001\023\001$\000\000\001*\001%\000\000\000\000\000\000\005\t\000\000\000\000\000\000\000\000\000\000\000\000\001>\001\"\000\000\001\031\000\000\000\000\001 \001%\000\000\000\000\001>\006\255\000\000\001*\000\000\000\000\001.\001%\001\016\001H\000\000\001X\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\001\"\001>\000\000\000\000\001.\000\000\000\000\001H\001%\002,\002-\001e\001\151\001\016\001.\001\031\001*\001H\001 \001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\003\197\000\000\000\000\001.\000\000\000\000\001H\000\000\001>\000\000\001\"\000\000\000\000\001*\001\016\001%\000\000\000\000\000\000\002.\001\023\001$\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\001.\001\016\001\192\001D\000\000\000\000\000\000\001\023\001$\000\000\001\"\000\000\000\000\001*\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\001>\001.\000\000\000\000\001H\000\000\000\000\001%\002/\000\000\000\000\001\230\000\000\000\000\000\000\002i\000\000\000\000\000\000\001\016\0020\000\000\002\141\000\238\000\000\001\023\001$\002/\000\000\001>\001\031\001*\000\000\001 \001.\000\000\001%\001H\000\000\0020\001\232\002\141\000\238\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\001\"\000\000\000\000\000\000\001\016\000\000\001.\000\000\000\000\001H\001\023\001$\002k\000\000\001>\000\000\001\031\002\129\000\000\001 \000\000\001%\000\000\002\142\000\000\002C\000\000\000\000\000\000\000\000\000\000\002\143\002/\001\139\002\144\000\000\002,\002-\001e\000\000\000\000\000\000\002\142\001\"\0020\001*\002\141\000\238\001.\000\000\002\143\001H\001\139\002\144\000\000\000\000\001>\000\000\000\000\002\140\000\000\000\000\000\000\001%\000\000\000\000\000\000\002V\000\000\000\000\001\031\000\000\000\000\001 \000\000\001\016\000\000\000\000\000\000\000\000\001\031\001\023\001$\001 \000\000\000\000\002/\000\000\001*\000\000\001.\002/\000\000\001H\000\000\000\000\000\000\001\"\0020\000\000\002\141\000\238\000\000\0020\002\142\002\141\000\238\001\"\000\000\002,\002-\001e\002\143\000\000\001\139\002\144\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\001>\000\000\000\000\000\000\000\000\002\155\002/\001%\000\000\000\000\000\000\002u\000\000\001\031\000\000\001*\001 \000\000\0020\000\000\002\141\000\238\000\000\000\000\000\000\001*\002,\002-\001e\000\000\000\000\002\142\000\000\000\000\001.\000\000\002\142\001H\000\000\002\143\001\"\001\139\002\144\001>\002\143\001\016\001\139\002\144\000\000\003+\001%\001\023\001$\000\000\002z\001\016\001\031\000\000\000\000\001 \000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\001\031\000\000\000\000\001 \001.\002\142\002/\001H\000\000\000\000\001\"\000\000\001*\002\143\000\000\001\139\002\144\000\000\0020\000\000\002\141\000\238\001\"\000\000\001>\000\000\000\000\001\"\000\000\000\000\000\000\001%\000\000\000\000\001>\002\226\000\000\000\000\000\000\000\000\000\000\001%\001\016\001\031\000\000\002\233\001 \000\000\001\023\001$\002/\000\000\000\000\000\000\000\000\001*\000\000\000\000\001.\000\000\000\000\001H\0020\000\000\002\141\000\238\000\000\001*\001.\000\000\001\"\001H\001*\000\000\000\000\000\000\000\000\000\000\002\142\000\000\000\000\000\000\000\000\000\000\000\000\001\016\002\143\001\031\001\139\002\144\001 \001\023\001$\000\000\001>\000\000\000\000\001\016\000\000\000\000\000\000\001%\001\016\001\023\001$\002\242\000\000\001\031\001\023\001$\005;\000\000\000\000\000\000\001\"\001*\000\000\000\000\000\000\000\000\000\000\000\000\002\142\000\000\000\000\000\000\000\000\000\000\001.\000\000\002\143\001H\001\139\002\144\001\"\001\031\000\000\001>\005;\000\000\000\000\000\000\000\000\000\000\001%\001\016\000\000\000\000\004\129\001>\000\000\001\023\001$\000\000\001>\001\031\001%\000\000\005;\001*\004\226\001%\001\"\000\000\000\000\004\238\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\005=\000\000\000\000\001\"\001.\001\031\000\000\001H\001 \001.\001\016\000\000\001H\000\000\000\000\000\000\001\023\001$\001>\001\031\000\000\000\000\001 \000\000\000\000\001%\000\000\000\000\005=\005\b\001\016\000\000\001\"\000\000\000\000\000\000\001\023\005@\000\000\001\031\000\000\000\000\005;\000\000\000\000\000\000\001\"\000\000\005=\000\000\000\000\000\000\001.\000\000\001\031\001H\000\000\001 \001\016\000\000\000\000\000\000\001>\000\000\001\023\005@\001\"\000\000\000\000\001%\000\000\000\000\000\000\005\024\000\000\000\000\000\000\001*\001\016\000\000\000\000\001\"\000\000\001\031\001\023\005@\005;\000\000\000\000\005A\000\000\001*\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\005\011\000\000\005D\000\000\005C\000\000\001\016\000\000\001\031\001\"\005=\001 \001\023\001$\000\000\001.\005A\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\001*\001\023\001$\005\011\000\000\005B\000\000\005C\000\000\000\000\001\"\005A\000\000\000\000\000\000\001\016\000\000\000\000\001.\000\000\000\000\001\023\005@\005\011\000\000\005N\000\000\005C\000\000\005=\001\016\000\000\000\000\001>\000\000\000\000\001\023\001$\001.\000\000\001%\000\000\000\000\000\000\005\181\001\031\000\000\001>\001 \000\000\001\031\000\000\000\000\001 \001%\001*\000\000\000\000\005\199\001\016\000\000\000\000\000\000\000\000\000\000\001\023\005@\001.\001\031\000\000\001H\001 \001\"\000\000\005A\000\000\000\000\001\"\000\000\000\000\000\000\001.\001>\000\000\001H\001\016\005\011\000\000\006\027\001%\005C\001\023\001$\005\223\001\031\001\"\000\000\001 \000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\001*\005A\001H\000\000\001\"\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\011\000\000\0065\000\000\005C\000\000\000\000\001>\000\000\000\000\001*\000\000\000\000\000\000\001%\001.\000\000\001\016\006m\000\000\000\000\000\000\001\016\001\023\001$\000\000\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\001\016\001.\000\000\000\000\001H\000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\001>\000\000\000\000\001\023\001$\001>\000\000\001%\000\000\000\000\000\000\006\175\001%\000\000\000\000\000\000\006\179\000\000\000\000\000\000\000\000\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\006\168\000\000\000\000\000\000\000\000\000\000\000\000\001%\001.\000\000\000\000\003\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.")) + ((16, "\001\164\001\141\000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\000\000\000\239\000\006\000)\001{\000\219\001X\000w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\022\000\000\000\000\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022N\001p\000\000\001\244\000\145\001|\000\000\000\000\000\000\001\006Vj\002\016\0018\001\238\000\000\000\000\000\000\002(\000\000\000\000\000\222\000\000\000\000\000\000\000\000\003\154\000\000\002\130\000\000\000\000\000\000\000\000\000\000\000(\000\000\002\184\003\228\b\184\000\000\000\000\n6\022N\000\000\000\000\016N\000\000\017\210\000\0008&\001\246\003\006\000\000\000\000\002\192\001\182\004\194\005\150\003\002\003\228\004`\000\t\001\248\0008\003~\002L\r\174\000\000\007\200\003\212\002\150\004\bID\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\176\000\000\0042\002\220\005(\000\000\000\000\000\000\000\000\005(\000\000\000\000\002\244\001n\003\b\0064\007\160\000\000\000\000\000\000\004\166\004\174\003n\001\172\000\000\000\000\003b\003\1683\234\004\204\003\170\001\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\022\000\000\000\000\000\000\004\234\004R\014\002\004\210\007\200 d\000\0008r\001\184909\164\000\000\001\024\000\000\000\000\000\000\000\000\005\178I\014\005\200\000\000\011\004\005\228\000\000\0110\r\170\000\203\000\000\000\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\190\005\136\000\000\000\000\000\000I\004\000\000\nb\000\000\000\000\005\142I\156\018$\000\000Xr\000\000\000\000\000\000\000\000\000\000\000\000\003P\030\024\003P\000y\000\000\000\000\000\000\005n\000\000\000\000\000\000\000\000\005\228\000\000\000\000\003P\000\000\000\000\000\000\000\000\000\000\014\166\000\000\004\212\006p\000\000I\254\004\228V\012\000\000\000\000\000\000\000\000\005n\000\000\000\000\000\000\011\234\000\000\000\000\000\000\000\000\000\000\000\000\003\244\006~\000\000\000\000\000\000\005n\006\166J\152\006\000\004\238#\238\000\000\003l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\000\000\000\000\000\000\000\000\007\132J\168\000\000\000\000\006\128\006\nJ\230\000\000\000\000\000\000K \006zK\168\000\000\006z\000\000K\180\006z\000\000L \015\176\007T\007\196\000\000\000\000-\022\000\000\000\000\000\000\000\000\000\000\000\000\006z\000\000\000\000L<\000\000\006zK\238\000\000\005n\000\000\000\000L\136\000\000\006z\001\152\000\000\000\000\006z\006z\000\000\000\000\006z\000\000\000\0009\164\000\000\000\000\000\000\000\000\006z9\220\000\000\000\000\006z\000\000\001F\007\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\018\000\000\007p\000\000L\184\005n\000\000\000\000\000\000\000\000\007\140\bf\014V\007\190\007\212\007\226\006l\004t\006\162\002\028\b\132\000\000\000\000\005\178\007\016\000\000\007\232\006\208\002j\b:\011H\000\000\004,\003*\006\222\000\174\t\156\000\000\000\000V\148\000\000V\192\t@\000\000L\226\005nL\252\005n\000\000\002\026\000\239\000\000\011\134\004,\000\000\000\000\b\182\000\000\000\000\000\000\000\000\000\000\012\016\004,\0122\004,\000\000\000G\000\000\000\000\000\r\000\000\000\000\000\000\n<\000\000\000\000\000\000\004,\004,\000\000\000\000\004,\000\000\b:\005B\000\000\000\133\003b\000\000\000\133\000\000\000\000\r@\004,\000\000\000\000\000\000\000\000\000\000\000\000\000\133\015\130 n\n\000\t\2029f\006\210\000\000\t*\007L\015\140\t6\007V/\1449v\000\000\000\000\000\000\000\000\000\000\005\002\012\n\000\000\000\000\000\000\tL\007|\005\202\000\133\r\152\000\000\004,\000\000\000\000\000\000\001\184\000\000M&\005n\015\192\t~\007\152\016z\t\152\007\158\006\178:L\006z\016\174\t\154\007\178:>\n\142\000\000:\224\006zM\190\005n\n\148\000\000\000\000\000\000\000\000\015\176\nv\000\000\000\000E\210\000\000\000\000W\024\000\000\000\000\n\188\"\250\003P\000\000\016\184\n\016\007\196!f\000\000:\146\n$\b\b!p\000\000;h\000\000\000\000\nF\b\014Nh\006z\017x\nN\b\030J\026\000\000T\156\000\000\000\000\"\018\nR\bZ\"\n\000\000\"l;\184\nv\br\"\210\000\0001\234\000\000\000\000\011\200N\"\000\000\005nC^\000\000\005nN\162\005n\000\000\000\000\000\000\000\000\000\000Y\154\000\000\000\000\000\000\001\202\017\130\000\000\000\000\000\000\000\000<\012\n\130\b\158#\014\000\000Z6\000\000\000\000\000\000\000\000\000\000\nX\018B\000\000\000\000\nj<\020\n\166\b\162#v\000\000\nj<`\n\182\t6#\168\000\000\nj\000\000ZV\000\000<\180\n\192\tt$\016\000\000\nj\018v\0024\018\128\000\000\000\000=\026\n\194\t\130$J\000\000\nj=\158\n\196\t\150$\136\000\000\nj=\198\n\210\t\210%\018\000\000\nj>\134\n\224\t\218%H\000\000\nj>\154\n\232\t\220%\180\000\000\nj>\174\n\238\t\246%\232\000\000\nj?T\n\250\n\004&\028\000\000\nj?\168\011\000\n\006&N\000\000\nj?\188\011\030\n\016&\176\000\000\nj@\\\0110\n\"&\238\000\000\nj@h\011:\n&'T\000\000\nj@\144\011N\nL'\182\000\000\njAP\011V\nV'\232\000\000\njAd\011t\nX(P\000\000\njB\016\011z\n\128(Z\000\000\njB$\011\128\n\134(\140\000\000\njB8\011\134\n\166(\244\000\000\njB\134\011\146\n\172)`\000\000\njB\228\011\216\n\178)l\000\000\njC\012\012.\n\180*\006\000\000\nj\n\210*\018\019J\019\254\000\000C^\012\214\000\000N\186\005n\020\006\000\000\000\000\012d\000\000N\228\005n\020Z\000\000\000\000\020\208\000\000\000\000\004\198\000\000\000\000\021\014\000\000\000\000\000\000\000\000N\246\005n\021\216\000\000\012(\021\224\000\000O\230\000\000\006zPb\000\000\006zPn\000\000\006z\005\204\000\000\000\000\000\000\000\000\000\000P\166\006z\000\000\004\230\005\020\000\000\000\000\000\000\nj\022:\000\000\000\000\000\000\022\170\000\000\000\000\000\000\000\000\000\000*r\000\000\000\000\000\000\nj*z\000\000+\026\000\000\000\000\000\000+&\000\000\000\000\000\000\000\000Zf\000\000\000\000,\014\000\000\000\000\000\000C\204\012f\n\226+\158\000\000\nj,\022\000\000\000\000\000\000Dn\012\130\011 ,\182\000\000\nj-\002\000\000\000\000\000\000Dx\012\136\011@-\"\000\000\nj\002\208\022\222\000\000\000\000D\204\012\138\011L-\194\000\000\nj\023\158\000\000\000\000D\212\012\144\011p..\000\000\nj\023\210\000\000\000\000Et\012\154\011v.:\000\000\nj\000\000\000\000.\156\000\000\000\000E\128\012\156\011\154.\206\000\000\nj/<\000\000\000\000E\218\012\166\011\170/D\000\000\nj00\000\000\000\000Fz\012\210\011\1740P\000\000\nj\000\000F\134\012\216\011\1800\158\000\000\nj\000\000)\160\000\000\000\000\nj\000\000\000\000\000\0000\146\000\000\000\0000\252\000\000\000\000\012\222\000\000\000\000\024B\000\000\024\140\000\000\000\000\000\000\nj\000\000\000\000\024\192\000\000\024\202\000\000\000\000\000\000\000\000\000\000F\142\r\002\011\2241\202\000\000Gv\r\014\012\0001\254\000\000\nj\njG~\r4\012\00226\000\000\nj\000\000\012(\025\246\000\000\000\000\026J\000\000G\138\000\000\000\0009v\000\000\000\000\000\0002\164\000\000\000\000\000\000\000\0002\216\000\000\000\000\000\000\000\000\014\140\000\000\000\000\000\000.\240\000\000\000N\000\000\005\242\014.\000\000\003\132\000\000\000\000\000\000\000\000\000\000\000\000\005\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\144\012\n3\174\000\000\nj\000\000\014\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\022\b\176\000\133\026R\000\000\r\156\012 \0144\006\166\t\138\000\133\0202\000\000\004,\t\148\000\133\000\000\026\158\000\000\006\222\000\000\r\186\012$\006\000\000\000\000\000\000\000\000\000\000\000\r\228\002b\001(\000\000\000\000\000\000G\204\000\000Wv\000\000\012*\000\000\0120\000\000\000\000\000\000\000\000\002\n\000\000\000\000\000\000*>\003P\000\000\003P\012\182\000\000\005`\000\000*\208\003P\003P\000\000+r\003P\003P\012:\000\000\026\242\000\000\000\000\012B\014\198\000\0003\160\006\022\000\000\000\000\000\000\000\000\000\000\000\000\r\220\012`4R\000\000\nj\000\000\000\000\000\000\000\000\000\000\r\224\012f\t\204\000\133\000\000\021<\000\000\004,\000\000\015>\000\000\000\000\000\000\000\000\000\0004`\000\000\r\246\012l4n\000\000\000\000\000\000\022\146\000\000\004,\000\000\023&\000\000\004,\000\000\024\248\004,\000\000\nj\000\000\000\000\025\140\000\000\004,\000\000\025\224\000\000\004,\000\000\027\176\004,\000\000\000\133\000\000\012\170\t\226\002\b\000\000\014\014\014\016\012\190\014D\015J\027\206\004,\007v\000\000\012\200\015\030\015@\006\228\007\154\015\012\012\206\015F\007\232\b\152\015\024\000\000\000\000\b\168\t\014\000\000\003\234\003fP\222\006z\027\222\000\000\007\190\001D\014\200\012\218\n$\004\252\000\000\014\202\r\014\tl\000\0005\012\000\000P\168\005n\000\000\015v\015\128\000\000\tT\000\000\005n\014\230\r\026\007\254\015\006\000\223\000\000\000\000\000\000\000\000\r \t\206\000\000\r&\t\230\000\000\b|X\176\014\238\014\240\r*\004\152\n.\000\000\r<\005\234\nx\000\000\014\244\014\250\rH\0152\015J\031\182\004,\000\000\r\\\015\156\000\000\007\022\000\000\n\130\000\000\015\168\000\000 \006\234\015t\rr\015\210\000\000 x\007\018\015\176\000\000\000\000\003\194\002\212\000\000\n\168\000\000!6\004,\011P\000\000\004\b\000\000\000\000\015d\r\152$\022\007N\000\000\015f\r\154\bt\015\006\015n\015p\r\156\016\224\000\000\015\142\0014\000\000\000\000\000\000\000\000\001\254\r\158\015dQj\005n\000\000\002\020\r\164\016$\000\000\000\000\000\000\000\000\000\000\000\000Q\132\b\000\000\000\r\172\016\128\000\000\000\000\000\000\000\000\000\000\000\0005H\011l\000\000\r\184\003F\000\000\r\212\r\216\004\226\000\000\007l\030\134\000\000\000\230\000\000Q\234\005n\005n\000\000\000\000\b \000\000\007`\000\000\br\b \b \000\000\r\234!\188\005nR&\005n\011r\000\000\000\000\000\000\000\000\011\200\000\000\000\000\003,\000\000\bb\015\224\014\n\017\002\015\178\000\000\000\000\t\174\b\134\015\248\000\000\000\000\014P\017\026\015\192\000\000\000\000RN\000\000\021\142\000\000Rx\012x\005n\000\000S\022PB\000\000SN\000\000\000\000\000\000\b \000\000\000\000\012,\016\004\014R\017 \015\214\000\000\000\000S^\012\128\016 \000\000\000\000\000\000X\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\130\000\000\0160\014T\007J\000\000\017.\016\224\012\134\016<\000\000\000\000\016@\014X\b^\000\000\000\000\t\030\r\170\004\172\000\000\000\000\000\000\b\200\016\004\014^\000\000\016\b\b\200\000\000\016\234\012\156\016H\000\000\000\000\000\000\005n\003\176\006\200\005\012\000\000\000\000\000\000\000\000\016\012\014p\000\000\005\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005n\015\242\014~\017\\\016\002\000\000\b\216\000\221\014\134\015\212\000q\000\212\014\140\016\152\000\000\017R\028\000\000\000\000\000\028(\000\000\r\004\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\000T\000\005n\000\000\017T\028\\\000\000\000\000\028\204\000\000\000\161\014\142\016\248\000\000\000\0005z5\246\016\166\000\000TB\005n\029\192\000\000\000\000\029\226\000\000\000\000\rZ\000\000\001\192\000\000\000\000\000\000\000\000\000\000\000\0006\134\000\000\000\0006\"6\222\016\168\000\000TT\005n\0300\000\000\000\000\030\138\000\000\000\000\014\144\031\\\r\150\000\000\014\154\014\160\000\191\000\161\014\196\t\"\014\198\017\0027x\r\194\000\000\014\204\014\240\b\178\000\000\000\133G\242\000\000\002\246\000\000\014\242\004\230W\142\0014\015\212\002t\000\000@|)\160\000\000\005\252\000\000\000\000\005\252\000\000\000\000\005\252\b\232\000\000\002\142\005\252\017\0067\130\r\216\000\000\005\252\000\000\000\000T\214\000\000\000\000\000\000\005\252\000\000\000\000\r\232\000\000\003\174\t\232\014\002\000\000\014\246H:\014\018\000\000\000\000\000\000\000\000\014\020\000\000\000\000\004d\000\000\005\252U\002\000\000\004\022\005\252W\214\000\000\014P\016h\014\254\017\142\0164\000\000X@\014\178\016v\000\000\000\000\000\000\000T\007\190\000\000\000\000\000\000\000\000\000\000\000\000\nX\014\208\000\000\016\134\000\000\000\000\000\000\000\000\014\228Y \000\000\000\000\000\000\nX\000\000\000\000\000\000\000\000\0158Y\176\000\000\000\000\000\000\000\000\000\000\000\133\004,\000\000\000\000\006z\000\000U(\005n\000\000\005x\000\000\000\000\000\000\000\0008*\000\000\000\000\000\000\000\000\000\000\000\000\0170\006\b\t|\016\004\005\250\015\b\000\000\002,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\012\006\024\015\n\000\000\b\006\017\146\017F\015H\000\000\000\000\017:\006\220\002\192\000\000\000\000\000\000\0150\000\000\0156\019\202\000\000\000\000\003P D\000\000\000\000\000\000\000\000\000\000X\180\000\000\000\000\b\212\007@\000\000\000\000U\184\005n\005nU\202\005n\006\162\000\000\000\000\000\000\005n\000\000\000\000\tf\017T\015\176\000\000\000\000\017H\003\170\000\028\000\000\000\000\000\000\000\000\b\234\017\146\t\244\017Z\015\186\000\000\000\000\017P\003\182\000z\000\000\000\000\000\000\000\000\004,\000\000\016\000\000\000\000\000\000\000\031\154\000\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\031\138\000\000\000\000\000\000\001\004\000w\000\000\000\000\000\000\000\000\000\000\002\006\000w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\024\000\000\000\000\000\000H\160\000\000\005n\000\000\r`\000\000\000\000\000\000\003t\000\000\000\000\000\000\001\142\000\000\000\000\000\000\000\003\000\000\000\133\000\000\006\"\000\000\004,\000\000\004\154\000\000\000\000\000\000>>\006z\000\000\000\000\002\004\000\000\000\000\000\000\000\000\005\002\004r\016\136\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025>\000\000\016\022\000\000\000\000\000\000\000\000\005F\007\"\000\r\002\216\000\000\000\000\016\024\0278\000\000\000\000\000\000\016$X\198\000\000\000\000\000\000\000\000"), (16, "\007\018\000;\002=\002>\001s\000\238\001\252\0007\000\242\000\243\000?\007\248\002>\001s\007\018\003\149\002\000\002\154\007\019\007\"\002\004\007\021\001\027\005Z\000\238\002\159\000\242\000\242\000\243\b\007\007\022\007#\b\b\0007\001\020\007\021\002*\007\168\002\185\000\238\001\027\001\030\000\242\000\243\007\022\0007\000\151\000@\007\018\000\160\002=\002>\001s\001\023\000\238\006\207\000m\000\242\000\243\001\027\007\023\002\005\007\018\006\155\007&\002\154\007\019\007\"\000\238\007\021\006\207\000\242\000\243\002\159\007\023\001\020\006\157\003\149\007\022\007#\007\019\001\027\001\030\007\021\000\131\006\207\002\185\005\026\006\209\001y\000\244\004h\007\022\006\248\007\220\003\149\005]\007\024\001\153\006\207\002\r\002\031\002\191\006\209\006\210\000\245\001\027\007\025\007\023\006\212\001\031\007\024\007&\007\000\002A\000\245\002\193\000\242\006\209\006\210\006\251\007\025\007\023\007\249\006\212\002\193\000\242\006x\006\235\002\016\007\221\007'\006\209\002,\006\210\001\027\000\242\000\151\006\253\006\212\000\156\b\n\003\149\006\228\000\245\007\024\007(\000\\\006\210\007G\002\191\0019\000\245\006\212\007\185\007\025\007\028\006\219\002+\007\024\007\027\007\030\002A\006\127\002\193\000\242\006\254\007\144\002\200\007\025\007\028\002\201\000\157\000\238\007 \007\030\000\242\001\006\002\194\007'\000\151\000`\007\018\000\156\002=\002>\001s\002\215\007 \001\153\002\196\000:\007!\007\026\007(\000q\001s\002-\007\145\002\154\007\019\007\"\000d\007\021\007\028\007\166\007!\002\159\007\027\007\030\004i\002\217\007\022\007#\007\158\005\167\002\200\0009\007\028\002\201\002\185\000\238\007 \007\030\000\242\001\006\002\194\001\173\001s\000=\007\018\007\186\002=\002>\001s\002\215\007 \001\153\002\196\000y\007!\006\162\007\023\001\201\001s\007\145\007&\002\154\007\019\007\174\001\020\007\021\001z\007E\007!\002\159\001\027\001\030\001\237\002\217\007\022\007#\006z\001t\002R\007\187\001v\001w\002\185\006\131\007\194\001\027\004\175\000\151\000\238\007\148\001\249\000\242\001\006\007\024\007\236\002>\001s\007\192\002\191\002\031\001\007\000\136\000\238\007\025\007\023\000\242\000\243\0007\0007\007\216\002A\000\238\002\193\000\242\000\242\001\006\000\151\006\166\000\161\001\249\004J\003\143\003\144\001\196\007\195\001\n\000\139\007'\0074\001\232\002\031\002,\007\162\006\207\000\242\004\186\004\188\004\190\0007\002\000\005\211\007\024\007(\002\004\000\245\001\027\002\191\007\217\001\n\001#\000\242\007\025\007\028\007\196\002\029\003\149\001\141\007\030\002A\005\025\002\193\000\242\002,\007\238\002\200\000\242\006\209\002\201\001|\000\245\007 \000\242\007\197\003\149\002\194\007'\002*\003\162\000\128\004\191\000\242\001\006\006\210\002\215\002\005\001\153\002\196\006\212\007!\000\181\007(\006\216\007\140\001\230\000\245\002-\004M\004R\007\018\004\175\007\028\007)\002\006\007\176\001\020\007\030\007\239\002\217\002\193\000\242\001\027\001\030\002\200\b\007\003\179\002\201\b\b\002\011\007 \007\021\000\242\007\018\002\194\002=\002>\001s\002-\005\030\007\022\007H\005\232\002\215\001\143\001\153\002\196\002\017\007!\001(\002\154\007\019\007\"\001\144\007\021\001\153\001z\007Q\002\159\003\149\004\189\004\188\004\190\007\022\007#\007\193\001)\002\217\005\235\000\245\007\023\002\185\001\027\001/\000\238\000\130\000\191\000\242\000\243\005\215\001:\007\018\002\022\002=\002>\001s\005\237\000\238\007R\000\138\000\242\000\243\005\216\007\023\001n\002\018\005\240\007f\002\154\007\019\007\"\007S\007\021\000\176\000\188\006\207\002\159\007\024\005\238\001\020\002+\007\022\007#\000\196\000\155\001\027\001/\007\025\006\207\002\185\003\241\002\022\005\142\000\242\001\006\000\242\0011\000\154\004m\0012\007\024\007e\0013\0014\002\225\002\191\004\194\b\t\006\209\000\238\007\025\007\023\000\242\000\243\000\245\007+\001\020\002A\000\209\002\193\000\242\006\209\001\027\001/\006\210\000\185\007\027\004\014\004\195\006\212\000\218\002\031\007R\006\213\007'\007\212\007\028\006\210\007\143\0007\000\220\007\030\006\212\006C\007\157\007S\006\223\000\180\007\024\007(\001\020\000\245\005\239\002\191\007 \001\020\001\027\001\030\007\025\007\028\002#\001\027\001/\002,\007\030\002A\000\242\002\193\000\242\001\020\001b\002\200\007!\007\213\002\201\001\027\001/\007 \005\235\001\027\000\238\002\194\007'\000\242\001\006\007\018\000\245\002=\002>\001s\002\215\000\228\001\153\002\196\006\202\007!\005\237\007(\000\245\007\251\007\252\000\238\002\154\007\254\000\242\000\243\007\021\007\028\000\245\005\146\002\159\003\149\007\030\005\215\002\217\007\022\b\000\004i\005\238\002\200\000\233\000\236\002\201\002\185\001e\007 \005\216\002-\000\186\002\194\005\223\000\151\006\207\007\\\001\249\002=\002>\001s\002\215\003t\001\153\002\196\000\190\007!\005\150\007\023\001r\001s\007\146\007\147\002\154\006J\006K\000\238\007\146\007\147\000\242\000\243\002\159\000\245\004u\001s\002\217\005\148\004\242\006\209\001t\002s\002\031\001v\001w\002\185\006[\006T\004\211\000\246\006T\004\211\007\228\006T\004\211\006\210\007\024\005v\006\207\000\195\006\212\002\191\000\245\000\245\006\241\007\018\007\025\002=\002>\001s\b\015\002.\005\148\002A\002,\002\193\000\242\000\242\003\149\000\251\b\007\006\255\002\154\b\b\007\229\003u\007\021\b\003\001#\003\149\002\159\006\209\004\175\005i\002\000\007\022\b\016\0059\002\004\001\027\001\027\003\149\000m\002\185\007=\007(\000\208\006\210\006\251\002\191\002*\000\151\006\212\000\183\001\249\007\028\007\004\000\245\004\191\001{\007\030\002A\007\200\002\193\000\242\007\023\006\253\002\200\001\255\005\206\002\201\001|\000\242\007 \000\242\003\141\001s\002\194\002-\002\005\004\175\006<\004\188\004\190\001U\002\031\002\215\000\245\001\153\002\196\003\151\007!\001S\002\197\006\254\001\232\005Z\001k\0075\000\242\000\212\005D\007\024\003t\005\027\002\000\006\205\002\191\000\227\002\004\002\217\001\027\007\025\003\150\002 \002\200\001(\002,\002\201\002A\000\242\002\193\000\242\000\235\007\018\002\194\002=\002>\001s\006P\004\188\004\190\b\020\001)\002\215\001\143\001\153\002\196\000\250\001\027\001/\002\154\007\019\0071\001\152\007\021\001\153\001z\001g\002\159\002\005\007(\000\245\002\031\007\022\007#\007P\006\218\002\217\007>\000\245\007\028\002\185\001\014\001\232\000\245\007\030\002\027\002\006\007\201\003\149\001\153\002+\002\200\002\000\004j\002\201\001\017\002\004\007 \001\027\002-\002J\002\194\007\023\002,\006\251\006\238\000\242\007\224\001r\001s\002\215\0011\001\153\002\196\0012\007!\001\"\0013\0014\004\175\005m\004\199\006\253\002=\002>\001s\001\027\005Z\001t\001\132\000\242\001v\001w\000\151\002\217\001\236\001\249\002\005\001\232\007\024\001C\007\225\005Z\004\202\002\191\000\242\004f\001>\002\000\007\025\006\254\0045\002\004\004n\001\027\002\006\002A\001\131\002\193\000\242\004\217\007\018\001B\002=\002>\001s\001O\002-\006X\004\188\004\190\006C\001\133\007'\001\134\002]\b\007\004{\002\154\b\b\007d\001d\007\021\007T\007U\001\191\002\159\000\151\007(\006-\001\249\007\022\b\011\002\005\003\149\001j\007V\007W\007\028\002\185\007N\004\175\001\153\007\030\004\171\004\211\001\218\001\141\007X\004\211\002\200\002\006\004\158\002\201\003\149\007Z\007 \001\153\006\214\001|\002\194\007\023\000\242\002@\007\018\000\245\002=\002>\001s\002\215\002\135\001\153\002\196\001\220\007!\004r\001\189\002\193\000\242\001\006\004\162\002\154\007\019\005,\003\149\007\021\002=\002>\001s\002\159\007\130\004\188\004\190\002\217\007\022\007-\001\229\001\232\007\024\001\130\002\024\0007\002\185\002\191\003\149\004\161\005\130\002\000\007\025\004\232\005|\002\004\004i\001\027\000\245\002A\001\027\002\193\000\242\006J\006K\001\140\003\149\001\143\007\023\007a\005\136\001\149\b\014\007T\007U\001\020\001\144\004\161\001\153\001z\004\161\001\027\001\030\002\194\006S\000\245\007V\007W\006T\004\211\005\220\007(\002\195\000\242\001\153\002\196\002\005\001\020\007X\004\211\005\155\007\028\0028\001\027\001\030\007\024\007\030\002;\000\245\000\151\002\191\0067\001\249\002\200\002\006\007\025\002\201\003\149\006\031\007 \005'\001\255\002A\002\194\002\193\000\242\002I\001\148\001#\001\195\002@\001$\002\215\003\149\001\153\002\196\001\207\007!\005-\0070\002X\001\255\002A\002[\002\193\000\242\006 \006a\006!\001\232\001\212\007z\002\023\002a\007(\001&\002\217\0051\001#\002\000\005\215\001$\002~\002\004\007\028\001\027\003\149\001r\001s\007\030\000\245\001\255\007{\005\216\001\020\000\245\002\200\005\217\006\"\002\201\001\027\001/\007 \007\154\003\149\001&\002\194\001t\002s\005\188\001v\001w\004\219\003\149\000\245\002\215\002\131\001\153\002\196\002\138\007!\001,\004\212\006C\002\005\005\224\002\194\002\143\000\245\001#\004\161\000\245\001$\004\142\006#\002\195\001(\001\153\002\196\002\217\001\217\000\245\002\006\0007\006$\006%\002\031\006&\001\020\005?\000\245\001,\001\223\001)\001\027\001\030\001&\002\151\005\241\001\027\001/\005H\001s\005W\004\211\001#\001(\007\135\001$\002\157\006b\002\021\003\149\0056\006C\004\144\005\249\001\242\002,\006\197\001>\000\242\000\242\001)\000\245\0052\001{\000\245\001\244\001\027\001/\002\189\001&\002\205\006(\000\245\005\218\001\020\001|\006*\0064\000\242\001,\001\027\001/\001;\006\221\003\149\001\020\000\242\006C\005\215\006^\0011\001\027\001/\0012\001(\006F\0013\0014\006c\005\159\004\211\005\216\000\245\004\161\002\003\005\222\005\218\006_\006J\006K\007\005\001)\001;\001#\000\245\001,\001$\001\027\001/\002-\0011\0057\0015\0012\005\218\001?\0013\0014\006L\006\\\001(\007\137\002\031\006T\004\211\002\020\000\245\002\031\000\245\001\143\001&\006@\004\211\004\135\002\211\003\149\001#\001)\001\152\001$\001\153\001z\0015\001\027\001/\001?\005R\003\149\006C\006J\006K\004\152\007\007\001;\002,\002\031\004\157\000\242\001#\002,\004\131\0011\000\242\001&\0012\002\220\002\031\0013\0014\006L\006\\\0027\002\231\001\020\006T\004\211\001,\002:\006\242\001\027\001\030\006C\002\237\003\149\004\236\006J\006K\002,\002H\001;\000\242\001(\007\151\0015\006\189\005\029\001?\0011\002,\002\031\0012\000\242\000\245\0013\0014\006L\006\\\005_\001)\001,\006T\004\211\002\243\002W\001\027\001/\002\249\002\255\002-\005b\003\149\007L\004\211\002-\001(\003\149\002Z\002`\005C\0015\003\005\002,\001?\000\245\000\242\002l\005\215\003\011\003\017\001#\000\245\001)\001$\003\023\003\149\001F\001(\001\027\001/\005\216\000\245\002-\003\029\005\248\003#\005j\006J\006K\002i\002o\001;\001#\002-\001)\001$\001G\001&\001F\0011\001\027\001/\0012\001_\003)\0013\0014\006L\006\\\003/\0035\000\245\006T\004\211\002z\000\245\000\245\002}\001G\001&\006J\006K\006\214\005n\001;\001]\002-\002\130\005}\000\245\003;\0015\0011\003A\001?\0012\000\245\000\245\0013\0014\007\133\007\134\000\245\001,\002\137\006T\004\211\005\143\002\142\003G\002\150\000\245\003M\000\245\0011\003S\003Y\0012\001(\003\149\0013\0014\001L\001#\0015\001,\001$\001?\002\156\001F\002\171\003]\000\245\003\149\002\188\001)\003\149\000\245\000\245\003\190\001(\001\027\001/\003\152\001L\001#\001D\002\214\001$\001G\001&\001F\002\204\002=\002>\001s\001H\001)\000\245\001\232\002\210\000\245\001\233\001\027\001/\002\219\002\230\002\236\002\154\002\000\003\200\001G\001&\002\004\002\242\001\027\002\159\000\245\001[\003\149\000\245\002\248\004T\000\245\000\245\002\254\003\210\001;\003\004\002\185\001\232\005\147\003\220\001\254\003\n\0011\001,\003\016\0012\000\245\002\000\0013\0014\001V\002\004\005\199\001\027\000\245\005\231\001;\003\229\001(\003\022\003\238\002\005\001L\001#\0011\001,\001$\0012\003\028\001W\0013\0014\001V\003\"\0015\001)\003\149\001?\003\249\002\006\001(\001\027\001/\003(\001L\000\245\004\002\003.\004\011\001Y\001&\004\018\002\005\000m\001#\005\209\0015\001)\005\236\001?\002\191\000\245\0034\001\027\001/\003:\001\232\000\245\003@\002\b\002\006\003F\002A\004:\002\193\000\242\002\000\003L\003\149\003\149\002\004\003\149\001\027\001\232\004\191\000\245\002\n\001;\000\245\004?\004F\004\197\003\149\002\000\004\128\0011\001,\002\004\0012\001\027\004\143\0013\0014\001V\002\197\004\149\000\245\004\165\006\020\001;\004\182\001(\003R\004\184\000\245\001L\000\245\0011\004\208\000\245\0012\002\005\004\213\0013\0014\001V\002\200\0015\001)\002\201\001?\002=\002>\001s\001\027\001/\002\194\004\225\002\005\002\006\004\235\000\245\001(\004\252\003\149\002\215\002\154\001\153\002\196\0015\006\028\006)\001?\0061\002\159\003X\002\006\000\245\000\245\001)\007\208\003c\000\245\003j\006H\001\027\001/\002\185\000\245\002\217\002=\002>\001s\000\245\005\028\000\245\001#\003\142\000\245\001$\001;\000\245\001W\003\189\005\"\002\154\000\245\003\149\0011\005)\000\245\0012\005/\002\159\0013\0014\006\007\003\199\005B\007A\003\209\003\219\001Y\001&\003\228\000\245\002\185\007\210\000\245\003\237\003\248\000\245\002=\002>\001s\004\001\006y\003\149\001\232\0011\0015\002'\0012\001?\005G\0013\0014\002\154\002\000\004\203\005V\002\191\002\004\005^\001\027\002\159\005a\004\n\005h\003\149\004\017\004\247\000\245\002A\004&\002\193\000\242\005l\002\185\001,\003\149\004\206\000\245\005r\002=\002>\001s\000\245\003\149\006\156\000\245\0049\001\232\005x\001(\002M\000\245\004>\001L\002\154\002\191\003\149\002\000\002\005\005\132\002\197\002\004\002\159\001\027\003\149\003\149\001)\002A\004\218\002\193\000\242\004E\001\027\001/\006\182\002\185\002\006\000\245\005\153\005\158\005\163\005\173\002\200\000\245\005\179\002\201\000\245\001#\005\190\000\245\001$\000\245\002\194\001F\005\201\003\149\006\193\002\191\004b\002\197\000\245\002\215\002\005\001\153\002\196\004k\000\245\006\227\005\219\002A\005\205\002\193\000\242\001K\001&\006\239\000\245\004\127\001;\005\226\002\006\002\200\004\133\004\148\002\201\002\217\0011\000\245\006\243\0012\004\150\002\194\0013\0014\001V\005\243\006\247\006\252\004\164\002\191\002\215\002\197\001\153\002\196\003\149\004\207\000\245\000\245\000\245\000\245\004\215\002A\000\245\002\193\000\242\004\224\000\245\004\234\0015\003\149\001,\001?\000\245\002\200\002\217\004\245\002\201\007\b\004\251\003\149\005\253\006\022\006,\002\194\0066\001(\000\245\006B\000\245\001L\005(\005!\002\215\002\197\001\153\002\196\006V\000\245\005#\002=\002>\001s\001)\006f\002=\002>\001s\006l\001\027\001/\006p\006\140\006\180\000\245\002\154\002\200\002\217\006\240\002\201\002\154\006\185\003\149\002\159\001r\001s\002\194\007\015\002\159\004\141\003\149\002=\002>\001s\004x\002\215\002\185\001\153\002\196\006\224\006\190\002\185\007\029\006\220\001t\001\132\002\154\001v\001w\000\245\000\245\000\245\007$\000\245\002\159\001;\000\245\005&\0055\002\217\004I\006\196\006\204\0011\006\245\000\245\0012\002\185\007\n\0013\0014\001V\000\245\007O\007[\005+\000\245\0054\0050\000\245\000\245\000\245\003\149\0053\005A\005F\000\245\003\149\001\133\000\245\001\134\001\157\005Q\007i\007.\0015\007k\005P\001?\005U\002\191\005`\007`\005k\005g\002\191\005w\000\245\000\245\005q\001#\000\245\002A\007t\002\193\000\242\000m\002A\005s\002\193\000\242\005\139\003\149\001\141\002=\002>\001s\005\127\005\138\000\245\000\245\002\191\000\245\003\149\003\149\001|\000\245\001&\000\242\002\154\003\149\000\245\000\245\002A\002\197\002\193\000\242\002\159\005\133\002\197\002=\002>\001s\0046\007\139\002=\002>\001s\005\137\007\153\002\185\000\245\005\152\005\157\000\245\002\154\002\200\005\252\005\162\002\201\002\154\002\200\005\165\002\159\002\201\002\197\002\194\005\169\002\159\004.\005\177\002\194\005\184\005\195\005\251\002\215\002\185\001\153\002\196\005\244\002\215\002\185\001\153\002\196\007\165\005\245\005\250\002\200\001(\001\143\002\201\005\254\005\255\006\030\006\023\b\001\b\012\002\194\001\144\002\217\001\153\001z\b\017\006\024\002\217\001)\002\215\006\029\001\153\002\196\0063\001\027\001/\006/\002\191\0060\0062\006]\006A\006E\006G\006I\006U\006e\006g\006h\002A\006m\002\193\000\242\002\217\006q\006u\006\135\006\142\006\146\006\170\006\191\006\215\006\225\002\191\002=\002>\001s\007\017\002\191\002=\002>\001s\007\011\007\012\007\016\002A\007\031\002\193\000\242\002\154\002A\002\197\002\193\000\242\002\154\007J\007^\002\159\0011\007_\007c\0012\002\159\004#\0013\0014\007\138\007\142\002\182\007\152\002\185\007\156\007\243\002\200\000\000\002\185\002\201\002\197\000\000\000\000\000\000\000\000\002\197\002\194\000\000\000\000\000\000\001#\000\000\000\000\0015\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\002\200\000\000\000\000\002\201\000\000\003w\000\000\000\000\002\201\004-\002\194\000\000\000\000\000\000\000\000\002\194\000\000\002\217\000\000\002\215\000\000\001\153\002\196\000\000\002\215\000\000\001\153\002\196\000\000\001#\000\000\000\000\001-\000\000\000\000\002\191\002=\002>\001s\000\000\002\191\000\000\000\000\002\217\000\000\000\000\000\000\002A\002\217\002\193\000\242\002\154\002A\000\000\002\193\000\242\001&\000\000\000\000\002\159\000\000\000\000\002=\002>\001s\002\199\000\000\002=\002>\001s\000\000\000\000\002\185\000\000\000\000\000\000\001(\002\154\000\000\002\197\000\000\000\000\002\154\000\000\002\197\002\159\000\000\000\000\000\000\000\000\002\159\002\227\000\000\001)\000\000\000\000\002\226\000\000\002\185\001\027\001/\002\200\007r\002\185\002\201\000\000\002\200\000\000\000\000\002\201\000\000\002\194\000\000\000\000\000\000\000\000\002\194\001(\000\000\000\000\002\215\000\000\001\153\002\196\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\001)\000\000\002\191\000\000\000\000\000\000\001\027\001/\000\000\000\000\002\217\000\000\000\000\000\000\002A\002\217\002\193\000\242\000\000\0011\000\000\000\000\0012\000\000\000\000\0013\0014\000\000\002\191\000\000\000\000\000\000\000\000\002\191\000\000\001r\001s\000\000\000\000\000\000\002A\000\000\002\193\000\242\003o\002A\002\197\002\193\000\242\000\000\000\000\007n\003r\000\000\000\000\001t\002s\000\000\001v\001w\0011\000\000\000\000\0012\000\000\000\000\0013\0014\002\200\000\000\000\000\002\201\002\197\000\000\000\000\000\000\000\000\002\197\002\194\000\000\000\000\000\000\000\000\002t\000\000\000\000\000\000\002\215\000\000\001\153\002\196\000\000\0015\000\000\002\200\000\000\000\000\002\201\000\000\002\200\000\000\000\000\002\201\000\000\002\194\000\000\001#\000\000\000\000\002\194\000\000\002\217\000\000\002\215\000\000\001\153\002\196\000\000\002\215\000\000\001\153\002\196\000\000\000\000\002=\002>\001s\000\000\002=\002>\001s\000\000\000\000\000\000\001{\001r\001s\002\217\000\000\002\154\000\000\000\000\002\217\002\154\000\000\000\000\001|\002\159\000\000\000\242\000\000\002\159\004\222\003`\000\000\001t\002s\003g\001v\001w\002\185\000\000\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\000\000\002t\000\000\002\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\159\001(\000\000\000\000\000\000\000\000\003n\000\000\003s\003y\000\000\000\000\000\000\002\185\000\000\000\000\000\000\001\143\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\001\152\007m\001\153\001z\000\000\002\191\000\000\000\000\000\000\002\191\002=\002>\001s\000\000\000\000\001{\000\000\002A\000\000\002\193\000\242\002A\000\000\002\193\000\242\002\154\000\000\001|\000\000\000\000\000\242\000\000\000\000\002\159\001\232\000\000\000\000\004\155\000\000\003q\000\000\002=\002>\001s\002\000\000\000\002\185\000\000\002\004\002\197\001\027\002\191\0011\002\197\000\000\0012\002\154\000\000\0013\0014\000\000\000\000\002u\002A\002\159\002\193\000\242\000\000\000\000\000\000\000\000\002\200\000\000\000\000\002\201\002\200\000\000\002\185\002\201\000\000\000\000\002\194\003s\003y\007n\002\194\000\000\000\000\000\000\002\005\002\215\001\143\001\153\002\196\002\215\002\197\001\153\002\196\000\000\000\000\001\152\000\000\001\153\001z\000\000\000\000\000\000\002\006\000\000\000\000\002\191\000\000\000\000\001#\002\217\000\000\006\004\002\200\002\217\000\000\002\201\000\000\002A\000\000\002\193\000\242\000\000\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\001&\002\191\002=\002>\001s\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\002A\002\197\002\193\000\242\002\154\000\000\000\000\002\217\002\154\000\000\000\000\000\000\002\159\000\000\001\232\000\000\002\159\004\240\003~\000\000\000\000\000\000\003\129\002\200\002\000\002\185\002\201\000\000\002\004\002\185\001\027\000\000\002\197\002\194\000\000\000\000\000\000\000\000\002=\002>\001s\000\000\002\215\000\000\001\153\002\196\000\000\000\000\001(\000\000\000\000\000\000\000\000\002\154\003w\000\000\001#\002\201\003x\001$\000\000\002\159\000\000\000\000\002\194\001)\002\217\003\155\000\000\002\005\000\000\001\027\001/\002\215\002\185\001\153\002\196\000\000\000\000\000\000\000\000\000\000\000\000\001&\000\000\007w\000\000\002\006\000\000\002\191\000\000\000\000\000\000\002\191\002=\002>\001s\002\217\000\000\000\000\000\000\002A\000\000\002\193\000\242\002A\000\000\002\193\000\242\002\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\159\000\000\000\000\002=\002>\001s\003\159\000\000\0011\000\000\000\000\0012\001,\002\185\0013\0014\002\197\000\000\002\154\000\000\002\197\002\191\000\000\000\000\000\000\000\000\002\159\001(\000\000\000\000\000\000\000\000\003\215\002A\000\000\002\193\000\242\000\000\002\200\002\185\0015\002\201\002\200\000\000\001)\002\201\000\000\000\000\002\194\000\000\001\027\001/\002\194\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\002\215\000\000\001\153\002\196\002\197\000\000\000\000\001\232\000\000\000\000\005\002\000\000\000\000\000\000\000\000\000\000\002\191\002\000\000\000\000\000\002\217\002\004\000\000\001\027\002\217\000\000\002\200\000\000\002A\002\201\002\193\000\242\000\000\000\000\000\000\001;\002\194\000\000\002=\002>\001s\000\000\002\191\0011\000\000\002\215\0012\001\153\002\196\0013\0014\007~\000\000\002\154\002A\000\000\002\193\000\242\000\000\000\000\002\197\002\159\002\005\000\000\002=\002>\001s\003\224\000\000\002\217\000\000\000\000\000\000\000\000\002\185\0015\000\000\000\000\001?\002\154\002\006\001\232\002\200\000\000\005\006\002\201\002\197\002\159\000\000\000\000\000\000\002\000\002\194\003\233\000\000\002\004\000\000\001\027\000\000\000\000\002\185\002\215\000\000\001\153\002\196\000\000\000\000\000\000\002\200\000\000\000\000\002\201\000\000\000\000\000\000\000\000\000\000\000\000\002\194\000\000\002=\002>\001s\000\000\000\000\002\217\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\002\154\002\005\000\000\002\191\000\000\000\000\000\000\000\000\002\159\000\000\000\000\000\000\000\000\000\000\004'\002A\002\217\002\193\000\242\002\006\000\000\002\185\002=\002>\001s\000\000\000\000\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\000\000\000\000\000\000\002A\000\000\002\193\000\242\002\159\000\000\002\197\002=\002>\001s\004)\000\000\002=\002>\001s\000\000\000\000\002\185\000\000\000\000\000\000\000\000\002\154\000\000\000\000\000\000\000\000\002\154\002\200\000\000\002\159\002\201\002\197\000\000\000\000\002\159\0040\000\000\002\194\000\000\000\000\0043\000\000\002\185\002\191\000\000\000\000\002\215\002\185\001\153\002\196\000\000\000\000\000\000\002\200\000\000\002A\002\201\002\193\000\242\000\000\000\000\000\000\000\000\002\194\000\000\000\000\000\000\007\018\000\000\000\000\002\217\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\002\191\000\000\000\000\000\000\000\000\007\254\000\000\002\197\007\021\000\000\000\000\000\000\002A\000\000\002\193\000\242\002\217\007\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\191\000\000\000\000\002\200\000\000\002\191\002\201\000\000\000\000\000\000\000\000\000\000\002A\002\194\002\193\000\242\000\000\002A\002\197\002\193\000\242\007\023\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\000\005\t\000\000\000\000\000\000\000\000\000\000\002\200\002\000\000\000\002\201\002\197\002\004\002\217\001\027\000\000\002\197\002\194\000\000\000\000\000\000\000\000\002=\002>\001s\007\024\002\215\000\000\001\153\002\196\000\000\000\000\000\000\002\200\000\000\007\025\002\201\002\154\002\200\000\000\000\000\002\201\000\000\002\194\000\000\002\159\000\000\000\000\002\194\000\000\002\217\004L\002\215\002\005\001\153\002\196\007\255\002\215\002\185\001\153\002\196\000\000\000\000\000\000\002=\002>\001s\000\000\002=\002>\001s\002\006\001\232\000\000\007\027\005\016\002\217\000\000\000\000\002\154\000\000\002\217\002\000\002\154\007\028\000\000\002\004\002\159\001\027\007\030\000\000\002\159\000\000\004O\000\000\000\000\000\000\004\146\000\000\000\000\002\185\000\000\007 \000\000\002\185\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\000\005\020\000\000\000\000\007!\002\154\002\191\000\000\002\000\000\000\000\000\002\005\002\004\002\159\001\027\000\000\000\000\000\000\002A\004\160\002\193\000\242\000\000\000\000\000\000\000\000\002\185\000\000\000\000\002\006\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\191\000\000\002\197\000\000\002\191\002\005\000\000\002\159\000\000\000\000\000\000\000\000\002A\004\210\002\193\000\242\002A\007\018\002\193\000\242\002\185\000\000\000\000\002\006\002\200\000\000\000\000\002\201\000\000\000\000\000\000\000\000\b\007\000\000\002\194\b\b\000\000\000\000\007\021\000\000\000\000\000\000\002\191\002\215\002\197\001\153\002\196\007\022\002\197\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\200\002\217\000\000\002\201\002\200\000\000\000\000\002\201\000\000\000\000\002\194\007\023\000\000\000\000\002\194\000\000\000\000\000\000\002\191\002\215\002\197\001\153\002\196\002\215\000\000\001\153\002\196\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\002\200\002\217\000\000\002\201\000\000\002\217\007\024\000\000\000\000\002\154\002\194\002=\002>\001s\000\000\000\000\007\025\002\159\000\000\002\215\002\197\001\153\002\196\005=\000\000\000\000\002\154\000\000\000\000\000\000\002\185\002=\002>\001s\002\159\000\000\b\r\000\000\000\000\000\000\006t\000\000\002\200\002\217\000\000\002\201\002\154\002\185\000\000\000\000\000\000\000\000\002\194\000\000\002\159\007\027\000\000\002=\002>\001s\006w\002\215\000\000\001\153\002\196\007\028\000\000\002\185\000\000\000\000\007\030\000\000\002\154\000\000\001\232\000\000\000\000\005\023\000\000\000\000\002\159\000\000\000\000\007 \002\000\002\217\006\134\000\000\002\004\001\232\001\027\000\000\005%\002\185\002\191\000\000\000\000\000\000\000\000\002\000\000\000\007!\000\000\002\004\000\000\001\027\002A\000\000\002\193\000\242\000\000\002\191\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\002\154\002\005\000\000\002\191\000\000\000\000\000\000\000\000\002\159\000\000\002\197\000\000\000\000\000\000\006\137\002A\002\005\002\193\000\242\002\006\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\197\000\000\002\191\001#\000\000\002\200\001$\002\006\002\201\000\000\000\000\000\000\000\000\000\000\002A\002\194\002\193\000\242\000\000\000\000\002\197\000\000\002\200\000\000\002\215\002\201\001\153\002\196\000\000\000\000\001&\000\000\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005J\002\215\002\200\001\153\002\196\002\201\002\197\000\000\002\217\000\000\000\000\000\000\002\194\000\000\000\000\000\000\007\164\000\000\002\191\000\000\000\000\002\215\000\000\001\153\002\196\002\217\000\000\000\000\002\200\000\000\002A\002\201\002\193\000\242\000\000\000\000\001,\000\000\002\194\000\000\002=\002>\001s\000\000\000\000\002\217\000\000\002\215\000\000\001\153\002\196\001(\000\000\000\000\000\000\002\154\000\000\002=\002>\001s\000\000\000\000\002\197\002\159\000\000\000\000\000\000\000\000\001)\006\150\000\000\002\217\002\154\000\000\001\027\001/\002\185\000\000\000\000\000\000\002\159\000\000\000\000\000\000\002\200\000\000\006\153\002\201\000\000\000\000\000\000\000\000\001#\002\185\002\194\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\002\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\159\001;\000\000\000\000\000\000\000\000\006\174\000\000\002\217\0011\000\000\000\000\0012\002\185\000\000\0013\0014\005S\000\000\000\000\000\000\002\191\002=\002>\001s\000\000\000\000\000\000\001#\000\000\000\000\001$\000\000\002A\000\000\002\193\000\242\002\154\002\191\000\000\000\000\0015\000\000\000\000\001?\002\159\000\000\000\000\000\000\000\000\002A\006\177\002\193\000\242\000\000\001&\000\000\000\000\002\185\000\000\005\209\001(\000\000\000\000\000\000\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\191\001)\000\000\000\000\000\000\002\197\000\000\001\027\001/\000\000\002\200\000\000\002A\002\201\002\193\000\242\000\000\000\000\000\000\000\000\002\194\000\000\000\000\000\000\001,\000\000\000\000\002\200\000\000\002\215\002\201\001\153\002\196\000\000\000\000\000\000\000\000\002\194\000\000\001(\000\000\000\000\000\000\000\000\002\197\002\191\002\215\000\000\001\153\002\196\002=\002>\001s\002\217\000\000\000\000\001)\002A\000\000\002\193\000\242\0011\001\027\001/\0012\002\154\002\200\0013\0014\002\201\002\217\006\031\000\000\002\159\000\000\000\000\002\194\000\000\000\000\006\181\000\000\002=\002>\001s\000\000\002\215\002\185\001\153\002\196\002\197\000\000\000\000\000\000\0017\000\000\000\000\002\154\000\000\000\000\006 \007\178\006!\000\000\000\000\002\159\000\000\000\000\000\000\001;\002\217\007\169\002\200\000\000\000\000\002\201\000\000\0011\002\185\000\000\0012\000\000\002\194\0013\0014\005\214\000\000\000\000\000\000\000\000\000\000\002\215\006\"\001\153\002\196\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\002\154\002\191\001?\000\000\000\000\002\217\000\000\000\000\002\159\000\000\000\000\000\000\000\000\002A\007\171\002\193\000\242\000\000\006#\000\000\000\000\002\185\000\000\000\000\000\000\001#\000\000\000\000\006$\006%\000\000\006&\002\191\002=\002>\001s\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\002A\002\197\002\193\000\242\002\154\001\232\000\000\000\000\005u\002\154\006b\000\000\002\159\000\000\000\000\002\000\000\000\002\159\000\000\002\004\000\000\001\027\004\229\002\200\000\000\002\185\002\201\004\138\000\000\000\000\002\185\000\000\002\197\002\194\006(\007\180\000\000\000\000\000\000\006*\0064\002\191\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\000\000\006^\002A\002\200\002\193\000\242\002\201\001\232\000\000\002\005\005\129\000\000\000\000\002\194\000\000\002\217\000\000\002\000\001(\006_\000\000\002\004\002\215\001\027\001\153\002\196\000\000\002\006\000\000\000\000\000\000\000\000\000\000\000\000\002\197\001)\000\000\000\000\002\191\000\000\000\000\001\027\001/\002\191\007p\000\000\002\217\000\000\000\000\000\000\002A\001\232\002\193\000\242\005\135\002A\002\200\002\193\000\242\002\201\000\000\002\000\002\005\000\000\000\000\002\004\002\194\001\027\001r\001s\000\000\000\000\000\000\001r\001s\002\215\000\000\001\153\002\196\000\000\002\006\000\000\002\197\000\000\000\000\000\000\000\000\002\197\001t\001\132\000\000\001v\001w\001t\001\132\0011\001v\001w\0012\002\217\000\000\0013\0014\000\000\000\000\000\000\002\005\003\168\000\000\000\000\000\000\002\127\003\168\000\000\002\194\000\000\002\132\000\000\001#\002\194\000\000\001$\000\000\002\215\002\006\001\153\002\196\007n\002\215\000\000\001\153\002\196\001\133\000\000\001\134\002]\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\000\000\001&\001\232\002\217\000\000\005\145\001r\001s\002\217\002=\002>\001s\002\000\000\000\000\000\000\000\002\004\000\000\001\027\000\000\000\000\000\000\000\000\001\141\002\154\000\000\001t\001\132\001\141\001v\001w\000\000\002\159\000\000\000\000\001|\000\000\000\000\000\242\000\000\001|\000\000\004\027\000\242\000\000\002\185\002\135\001,\000\000\002\152\000\000\002\135\000\000\000\000\002=\002>\001s\002\005\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\000\000\002\154\001\133\000\000\001\134\002]\000\000\002\006\000\000\002\159\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\004\026\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\001\143\001\141\001r\001s\001\144\002\191\001\153\001z\000\000\001\144\000\000\001\153\001z\001|\000\000\000\000\000\242\002A\000\000\002\193\000\242\000\000\001t\001\132\002\135\001v\001w\001;\000\000\001#\000\000\000\000\001r\001s\000\000\0011\000\000\000\000\0012\000\000\000\000\0013\0014\005\227\000\000\002\158\005\230\000\000\000\000\002\197\002\191\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\001\133\0015\001\134\002]\001?\000\000\000\000\000\000\003\168\002\190\000\000\001\143\000\000\000\000\000\000\002\194\000\000\000\000\001r\001s\001\144\000\000\001\153\001z\002\215\000\000\001\153\002\196\002\197\000\000\001\133\000\000\001\134\002]\000\000\001\141\000\000\000\000\001t\001\132\000\000\001v\001w\001r\001s\000\000\000\000\001|\002\217\000\000\000\242\001(\000\000\003\168\000\000\000\000\000\000\000\000\002\135\000\000\002\194\002\206\000\000\001t\001\132\001\141\001v\001w\001)\002\215\000\000\001\153\002\196\000\000\001\027\001/\000\000\001|\001r\001s\000\242\000\000\001\133\000\000\001\134\002]\002\212\000\000\002\135\000\000\000\000\000\000\000\000\002\217\000\000\001r\001s\000\000\001t\001u\000\000\001v\001w\000\000\000\000\000\000\000\000\001\133\000\000\001\134\002]\001\143\000\000\000\000\000\000\001t\001\132\001\141\001v\001w\001\144\000\000\001\153\001z\001r\001s\000\000\000\000\0011\001|\000\000\0012\000\242\000\000\0013\0014\000\000\000\000\002\221\000\000\002\135\001\143\001\141\000\000\001t\001\132\000\000\001v\001w\000\000\001\144\000\000\001\153\001z\001|\001r\001s\000\242\000\000\001\133\002y\001\134\002]\000\000\000\000\002\135\000\000\002\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001t\001\132\001{\001v\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\133\001|\001\134\002]\000\242\001\143\001\141\000\000\000\000\000\000\002\238\000\000\001\232\000\000\001\144\005\154\001\153\001z\001|\000\000\000\000\000\242\002\000\000\000\000\000\000\000\002\004\000\000\001\027\002\135\001\143\001\133\000\000\001\134\002]\001\141\001r\001s\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\001t\001\132\002\135\001v\001w\000\000\000\000\001r\001s\001\143\001\141\002\005\000\000\000\000\000\000\000\000\000\000\000\000\001\152\000\000\001\153\001z\001|\002\244\000\000\000\242\001\143\001t\001\132\002\006\001v\001w\000\000\002\135\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\002\250\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\000\000\001\141\000\000\001t\001\132\000\000\001v\001w\001\143\001r\001s\000\000\000\000\001|\000\000\000\000\000\242\001\144\000\000\001\153\001z\000\000\000\000\000\000\002\135\000\000\003\000\000\000\001\141\001t\001\132\000\000\001v\001w\000\000\001r\001s\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\001\133\000\000\001\134\002]\002\135\003\006\000\000\000\000\001t\001\132\000\000\001v\001w\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\133\000\000\001\134\002]\001\143\003\012\000\000\001t\001\132\001\141\001v\001w\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\001\133\000\000\001\134\002]\003\018\001\143\002\135\000\000\000\000\001\141\001r\001s\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\001|\000\000\000\000\000\242\001\133\000\000\001\134\002]\000\000\001t\001\132\002\135\001v\001w\001\141\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\003\024\000\000\000\000\000\000\000\000\002\135\001\143\001\141\001t\001\132\000\000\001v\001w\000\000\000\000\001\144\000\000\001\153\001z\001|\000\000\001\133\000\242\001\134\002]\000\000\000\000\000\000\000\000\000\000\002\135\003\030\001\143\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\133\000\000\001\134\002]\001\141\000\000\001\143\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\001\144\001|\001\153\001z\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\135\000\000\000\000\003$\001\143\000\000\000\000\000\000\001\141\001r\001s\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\001|\000\000\000\000\000\242\001\133\000\000\001\134\002]\000\000\001t\001\132\002\135\001v\001w\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\001\143\001t\001\132\000\000\001v\001w\001\141\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\001|\000\000\001\133\000\242\001\134\002]\0030\000\000\000\000\000\000\000\000\002\135\000\000\001\143\000\000\001r\001s\000\000\000\000\000\000\001r\001s\001\144\000\000\001\153\001z\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\000\000\001t\001\132\001\141\001v\001w\001t\001\132\000\000\001v\001w\001r\001s\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\0036\000\000\002\135\000\000\001\141\003<\001\143\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\001\144\001|\001\153\001z\000\242\000\000\001\133\000\000\001\134\002]\000\000\001\133\002\135\001\134\002]\003B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\133\000\000\001\134\002]\001\143\001\141\000\000\000\000\001t\001\132\001\141\001v\001w\001\144\000\000\001\153\001z\001|\000\000\000\000\000\242\000\000\001|\000\000\000\000\000\242\000\000\000\000\002\135\001\143\000\000\003H\000\000\002\135\000\000\001\141\000\000\000\000\001\144\000\000\001\153\001z\001r\001s\000\000\000\000\000\000\001|\001r\001s\000\242\000\000\001\133\000\000\001\134\002]\000\000\000\000\002\135\000\000\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\001t\001\132\000\000\001v\001w\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\003N\001\143\001\141\000\000\000\000\001\144\003T\001\153\001z\000\000\001\144\004\021\001\153\001z\001|\000\000\000\000\000\242\000\000\000\000\000\000\001\133\000\000\001\134\002]\002\135\001\143\001\133\000\000\001\134\002]\000\000\000\000\000\000\000\000\001\144\000\000\001\153\001z\000\000\001r\001s\000\000\000\000\000\000\000\000\003^\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\001t\001\132\001\141\001v\001w\000\000\003z\001\132\001|\001v\001w\000\242\000\000\000\000\001|\001#\000\000\000\242\001\143\002\135\000\000\000\000\000\000\003Z\000\000\002\135\000\000\001\144\002@\001\153\001z\000\000\000\000\002=\002>\001s\000\000\002=\002>\001s\002A\000\000\002\193\000\242\001\133\000\000\001\134\002]\002\154\003\127\003\143\003\144\002\154\000\000\000\000\000\000\002\159\000\000\000\000\000\000\002\159\000\000\000\000\000\000\000\000\000\000\003\165\000\000\000\000\002\185\003\170\000\000\001\143\002\185\000\000\000\000\004\023\000\000\001\143\001\141\000\000\001\144\000\000\001\153\001z\001\141\000\000\001\144\001#\001\153\001z\001|\000\000\000\000\000\242\000\000\000\000\001|\000\000\000\000\000\242\000\000\002\135\001(\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\001\153\002\196\002=\002>\001s\001)\000\000\000\000\002=\002>\001s\001\027\001/\000\000\000\000\003\147\003\148\002\154\002\191\000\000\000\000\000\000\002\191\002\154\000\000\002\159\000\000\000\000\000\000\000\000\002A\002\159\002\193\000\242\002A\003\172\002\193\000\242\002\185\000\000\001\143\003\176\000\000\000\000\002\185\000\000\001\143\000\000\000\000\001\144\000\000\001\153\001z\000\000\001#\001\144\000\000\001\153\001z\000\000\000\000\001(\002\197\000\000\000\000\0011\002\197\000\000\0012\001r\001s\0013\0014\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\003\168\000\000\001t\001\132\003\168\001v\001w\002\194\000\000\000\000\004\193\002\194\000\000\000\000\000\000\002\191\002\215\000\000\001\153\002\196\002\215\002\191\001\153\002\196\000\000\003\191\000\000\002A\000\000\002\193\000\242\000\000\000\000\002A\000\000\002\193\000\242\002=\002>\001s\002\217\002=\002>\001s\002\217\000\000\001\133\000\000\001\134\002]\000\000\0011\002\154\000\000\0012\001(\002\154\0013\0014\002\197\002\159\000\000\000\000\000\000\002\159\002\197\000\000\000\000\000\000\000\000\003\184\000\000\001)\002\185\003\194\000\000\000\000\002\185\001\027\001/\000\000\001\141\000\000\004\201\003\168\000\000\000\000\000\000\000\000\000\000\003\168\002\194\000\000\001|\000\000\000\000\000\242\002\194\000\000\000\000\002\215\000\000\001\153\002\196\002\135\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\002\217\000\000\000\000\000\000\000\000\000\000\002\217\000\000\0011\000\000\000\000\0012\000\000\002\191\0013\0014\000\000\002\191\001t\001\132\000\000\001v\001w\000\000\000\000\002A\000\000\002\193\000\242\002A\000\000\002\193\000\242\001\143\000\000\002=\002>\001s\000\000\000\000\004\205\003\201\001\144\000\000\001\153\001z\001r\001s\000\000\000\000\002\154\000\000\001r\001s\000\000\000\000\000\000\002\197\002\159\000\000\000\000\002\197\001\133\000\000\001\134\002]\001t\001\151\003\204\001v\001w\002\185\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\000\000\003\168\000\000\000\000\000\000\003\168\000\000\000\000\002\194\000\000\000\000\000\000\002\194\000\000\003\211\000\000\001\141\002\215\000\000\001\153\002\196\002\215\000\000\001\153\002\196\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\001\133\000\000\001\134\002]\002\135\000\000\002\217\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\002\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001{\000\000\002A\000\000\002\193\000\242\001\141\001t\001\132\000\000\001v\001w\001|\000\000\000\000\000\242\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\001\143\002\135\003\221\000\000\000\000\000\000\002\197\000\000\000\000\001\144\000\000\001\153\001z\001r\001s\000\000\000\000\000\000\000\000\001r\001s\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\000\000\003\168\000\000\001t\001\132\000\000\001v\001w\002\194\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\002\215\001\143\001\153\002\196\000\000\000\000\000\000\001\143\000\000\003\230\001\152\001\141\001\153\001z\000\000\003\239\001\144\000\000\001\153\001z\002=\002>\001s\001|\002\217\000\000\000\242\000\000\000\000\000\000\001\133\000\000\001\134\002]\002\135\002\154\001\133\000\000\001\134\002]\000\000\000\000\000\000\002\159\000\000\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\003\244\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002=\002>\001s\001\141\001t\001\132\000\000\001v\001w\001\141\000\000\000\000\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\001|\000\000\004f\000\242\001\143\002\135\003\250\000\000\000\000\004n\000\000\002\135\000\000\001\144\000\000\001\153\001z\002=\002>\001s\000\000\000\000\001r\001s\000\000\000\000\000\000\001\133\000\000\001\134\002]\000\000\002\154\004o\000\000\000\000\000\000\002\191\000\000\000\000\002\159\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\002A\003\253\002\193\000\242\002\185\000\000\000\000\000\000\000\000\001\143\002=\002>\001s\001\141\000\000\001\143\004\003\000\000\001\144\000\000\001\153\001z\000\000\000\000\001\144\001|\001\153\001z\000\242\000\000\002@\000\000\002\197\004v\000\000\000\000\002\135\001\133\000\000\001\134\002]\000\000\004r\000\000\002\193\000\242\001\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\168\000\000\000\000\000\000\000\000\000\000\000\000\002\194\000\000\000\000\000\000\002\191\000\000\000\000\000\000\001\141\002\215\000\000\001\153\002\196\000\000\000\000\004i\002A\000\000\002\193\000\242\001|\000\000\000\000\000\242\000\000\001\143\002=\002>\001s\000\000\000\000\002\135\000\000\002\217\001\144\000\000\001\153\001z\000\000\000\000\000\000\002\154\002\194\001r\001s\000\000\002@\000\000\002\197\002\159\000\000\002\195\000\000\001\153\002\196\000\000\000\000\000\000\002A\004\006\002\193\000\242\002\185\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\000\000\003\168\000\000\002=\002>\001s\000\000\000\000\002\194\000\000\001r\001s\001\143\000\000\004\012\000\000\000\000\002\215\002\154\001\153\002\196\001\144\000\000\001\153\001z\000\000\002\159\000\000\000\000\000\000\001t\001\132\000\000\001v\001w\001\133\004\030\001\134\002]\002\185\000\000\002\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\194\000\000\000\000\004\019\002\191\000\000\002=\002>\001s\002\195\000\000\001\153\002\196\000\000\000\000\000\000\002A\000\000\002\193\000\242\001\141\002\154\000\000\000\000\001\133\000\000\001\134\002]\000\000\002\159\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\004!\000\000\000\000\002\185\002\135\000\000\000\000\000\000\000\000\002\197\000\000\000\000\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\001|\000\000\003\168\000\242\000\000\000\000\000\000\000\000\000\000\002\194\000\000\002\135\000\000\000\000\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\001\143\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144\002\191\001\153\001z\000\000\001r\001s\000\000\002\217\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\003\168\000\000\000\000\002=\002>\001s\000\000\002\194\001t\001\132\000\000\001v\001w\001\143\001r\001s\002\215\000\000\001\153\002\196\000\000\000\000\001\144\000\000\001\153\001z\004\021\000\000\002\197\000\000\000\000\004;\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\002\217\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\004\022\000\000\001\133\003\168\001\134\002]\000\000\004@\000\000\000\000\002\194\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\004G\000\000\001\141\000\000\000\000\000\000\000\000\000\000\002\217\000\000\000\000\002=\002>\001s\001|\000\000\000\000\000\242\002@\000\000\000\000\001\133\000\000\001\134\002]\002\135\002\154\000\000\001\141\000\000\002A\000\000\002\193\000\242\002\159\000\000\000\000\002=\002>\001s\001|\000\000\000\000\000\242\004Y\000\000\000\000\002\185\000\000\000\000\000\000\002\135\002\154\000\000\000\000\000\000\001\141\000\000\000\000\000\000\002\159\000\000\000\000\000\000\000\000\000\000\004\024\000\000\001|\000\000\004^\000\242\000\000\002\185\000\000\000\000\000\000\000\000\001\143\002\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\001\143\001\153\002\196\000\000\000\000\000\000\000\000\002\191\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\002\191\003^\001s\000\000\001\144\000\000\001\153\001z\001r\001s\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\002\197\000\000\000\000\003z\001\132\000\000\001v\001w\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\003\168\002\197\000\000\000\000\000\000\000\000\000\000\002\194\004\129\002\154\000\000\000\000\000\000\000\000\000\000\000\000\002\215\002\159\001\153\002\196\000\000\003\127\003\143\003\144\000\000\000\000\003\168\000\000\000\000\001\133\002\185\001\134\002]\002\194\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\002\215\000\000\001\153\002\196\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\001\141\000\000\000\000\000\000\001r\001s\000\000\001\141\000\000\002\217\001t\001\132\001|\001v\001w\000\242\000\000\001t\001\132\001|\001v\001w\000\242\000\000\001t\001\132\000\000\001v\001w\000\000\002\135\000\000\000\000\004\226\000\000\000\000\000\000\002\191\000\000\000\000\004\249\000\000\000\000\000\000\000\000\003\147\004\216\004\253\000\000\002A\000\000\002\193\000\242\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\002\197\000\000\001\143\000\000\001\144\000\000\001\153\001z\001\141\001#\000\000\001\144\001$\001\153\001z\001\141\000\000\000\000\000\000\000\000\001|\000\000\001\141\000\242\000\000\005\011\000\000\001|\000\000\000\000\000\242\002\135\002\194\000\000\001|\000\000\001&\000\242\002\135\001#\000\000\002\215\001$\001\153\002\196\002\135\005J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\000\000\000\000\005M\000\000\000\000\002\217\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\154\000\000\005J\001t\002s\000\000\001v\001w\001,\000\000\001\143\000\000\000\000\000\000\000\000\000\000\000\000\001\143\005\198\001\144\000\000\001\153\001z\001(\001\143\000\000\001\144\000\000\001\153\001z\000\000\002t\000\000\001\144\000\000\001\153\001z\000\000\001,\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\000\000\000\000\000\000\001#\001(\000\000\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\001&\000\000\000\000\001{\000\000\006\178\000\000\000\000\001t\002s\005J\001v\001w\001;\000\000\001|\000\000\000\000\000\242\000\000\000\000\0011\000\000\000\000\0012\000\000\006\151\0013\0014\005S\000\000\000\000\000\000\000\000\000\000\000\000\002t\000\000\000\000\000\000\000\000\000\000\000\000\001;\000\000\001#\001,\000\000\001$\000\000\002u\0011\000\000\0015\0012\000\000\001?\0013\0014\005S\000\000\001(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003s\003y\001&\000\000\000\000\000\000\000\000\000\000\001)\001\143\000\000\000\000\005J\0015\001\027\001/\001?\001{\001\152\001#\001\153\001z\001$\000\000\000\000\000\000\000\000\000\000\006\165\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\000\000\001,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005J\000\000\000\000\000\000\001;\000\000\000\000\001(\002u\000\000\000\000\000\000\0011\000\000\000\000\0012\006\175\000\000\0013\0014\005S\000\000\000\000\000\000\001)\000\000\000\000\000\000\003s\003y\001\027\001/\000\000\003^\001s\000\000\001,\001\143\003^\001s\000\000\000\000\000\000\000\000\0015\000\000\001\152\001?\001\153\001z\000\000\001(\000\000\003z\001\132\000\000\001v\001w\003z\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\001;\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\0012\000\000\000\000\0013\0014\005S\000\000\000\000\000\000\003\127\003\143\003\144\000\000\000\000\003\127\003\143\003\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\001?\001;\000\000\001r\001s\000\000\000\000\000\000\001#\0011\000\000\001$\0012\001\141\000\000\0013\0014\005S\001\141\000\000\000\000\000\000\000\000\001t\001\132\001|\001v\001w\000\242\000\000\001|\000\000\000\000\000\242\000\000\001&\000\000\000\000\002=\002>\001s\0015\000\000\000\000\001?\004\178\007D\000\000\000\000\000\000\000\000\000\000\000\000\002\154\000\000\000\000\000\000\000\000\003\147\006\192\007h\002\159\000\000\003\147\006\226\000\000\000\000\001\133\000\000\001\134\002]\000\000\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\000\000\001,\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\001\143\000\000\001(\000\000\001\144\000\000\001\153\001z\001\141\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\000\000\001)\001|\000\000\000\000\000\242\000\000\001\027\001/\000\000\000\000\000\000\000\000\002\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\001t\001\132\000\000\001v\001w\000\000\002=\002>\001s\000\000\001\198\001;\000\000\000\000\002=\002>\001s\000\000\000\000\0011\000\000\002\154\0012\000\000\001\143\0013\0014\000\000\002\197\002\159\000\000\000\000\000\000\001\144\000\000\001\153\001z\002?\001r\001s\000\000\000\000\002\185\000\000\001\133\000\000\001\134\001\186\000\000\000\000\000\000\0015\000\000\004\227\004\185\000\000\000\000\000\000\001t\001\132\002\194\001v\001w\000\000\000\000\000\000\001r\001s\001\183\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\000\000\000\000\001t\001\132\000\000\001v\001w\001|\000\000\002\217\000\242\000\000\001\188\000\000\000\000\000\000\000\000\000\000\001\133\000\000\001\134\001\186\002\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\001r\001s\000\000\002A\000\000\002\193\000\242\001r\001s\000\000\000\000\002A\000\000\002\193\000\242\001\133\000\000\001\134\001\186\000\000\001t\002s\001\141\001v\001w\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\001|\002\197\000\000\000\242\000\000\000\000\001\143\002=\002>\001s\000\000\000\000\000\000\000\000\002t\001\144\001\141\001\153\001z\000\000\000\000\000\000\002\154\000\000\000\000\000\000\004\130\000\000\001|\000\000\002\159\000\242\000\000\002\194\000\000\000\000\000\000\001\133\000\000\001\134\002]\002\194\002\215\002\185\001\153\002\196\000\000\001r\001s\000\000\002\195\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\001{\002\217\001t\001\132\000\000\001v\001w\001\141\001\144\000\000\001\153\001z\001|\000\000\000\000\000\242\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\001\143\000\000\000\000\0044\000\000\000\000\000\000\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\002\191\000\000\000\000\000\000\001\133\002u\001\134\002e\001r\001s\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002w\003y\000\000\001t\001\132\000\000\001v\001w\000\000\001\143\000\000\000\000\000\000\000\000\001\141\000\000\001\143\000\000\001\152\002\197\001\153\001z\002=\002>\001s\001\144\001|\001\153\001z\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\000\000\000\000\000\000\000\000\000\000\000\000\004,\002\159\000\000\001\133\000\000\001\134\002]\002\194\000\000\000\000\000\000\000\000\002h\000\000\002\185\000\000\002\215\000\000\001\153\002\196\002=\002>\001s\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\000\000\000\000\001\141\002\154\002\217\000\000\000\000\002\159\000\000\000\000\001\143\002\159\000\000\000\000\001|\000\000\000\000\000\242\000\000\001\144\002\185\001\153\001z\000\000\002\185\002\134\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\191\000\000\000\000\000\000\000\000\000\000\000\000\002\159\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\002\154\002\191\000\000\002\197\001\144\002\191\001\153\001z\002\159\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\002A\000\000\002\193\000\242\002\185\000\000\000\000\000\000\000\000\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\002\194\002=\002>\001s\000\000\000\000\000\000\000\000\002\191\002\215\002\197\001\153\002\196\000\000\002\197\000\000\002\154\000\000\000\000\000\000\002A\000\000\002\193\000\242\002\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\003\153\000\000\002\185\000\000\002\207\000\000\000\000\002\194\000\000\000\000\000\000\002\194\000\000\000\000\000\000\002\191\002\215\002\197\001\153\002\196\002\215\000\000\001\153\002\196\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\002\217\000\000\002\213\000\000\002\217\000\000\000\000\002\154\000\000\002\194\000\000\000\000\002=\002>\001s\002\159\000\000\000\000\002\215\002\197\001\153\002\196\000\000\000\000\000\000\000\000\002\191\002\154\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\159\000\000\000\000\002A\000\000\002\193\000\242\002\217\000\000\002\222\000\000\000\000\000\000\002\185\000\000\000\000\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\000\000\000\000\000\000\000\000\000\000\000\000\002\197\000\000\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\191\001t\001\132\002\233\001v\001w\000\000\000\000\000\000\000\000\002\194\000\000\002A\000\000\002\193\000\242\002=\002>\001s\002\215\002\191\001\153\002\196\000\000\000\000\000\000\002=\002>\001s\000\000\000\000\002\154\002A\000\000\002\193\000\242\002=\002>\001s\002\159\000\000\002\154\000\000\002\217\002\197\001\133\000\000\001\134\007\232\002\159\007\234\002\154\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\159\000\000\000\000\002\185\000\000\002\197\000\000\000\000\000\000\000\000\002\239\000\000\000\000\002\185\000\000\000\000\000\000\002\194\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\002\245\000\000\000\000\001|\000\000\000\000\000\242\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\215\000\000\001\153\002\196\002\217\000\000\000\000\000\000\000\000\000\000\000\000\002\191\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\002\191\000\000\002A\002\217\002\193\000\242\000\000\000\000\002\154\000\000\002\191\000\000\002A\000\000\002\193\000\242\002\159\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\002\185\001\143\000\000\000\000\000\000\002\197\002=\002>\001s\000\000\001\144\000\000\001\153\001z\000\000\002\197\002=\002>\001s\000\000\000\000\002\154\000\000\000\000\000\000\002\197\000\000\000\000\000\000\002\159\002\251\002\154\000\000\000\000\000\000\000\000\000\000\002\194\000\000\002\159\003\001\000\000\002\185\000\000\000\000\000\000\002\215\002\194\001\153\002\196\003\007\000\000\002\185\000\000\000\000\000\000\002\215\002\194\001\153\002\196\000\000\000\000\000\000\000\000\002\191\000\000\002\215\000\000\001\153\002\196\002\217\000\000\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\002\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\002=\002>\001s\000\000\002\191\000\000\002\197\000\000\000\000\002\154\002=\002>\001s\000\000\002\191\002\154\002A\002\159\002\193\000\242\002=\002>\001s\002\159\000\000\000\000\002A\000\000\002\193\000\242\002\185\003\r\000\000\004\021\000\000\002\154\002\185\000\000\002\194\000\000\000\000\000\000\000\000\002\159\000\000\000\000\000\000\002\215\002\197\001\153\002\196\000\000\000\000\000\000\000\000\000\000\002\185\006\211\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\003\019\000\000\000\000\000\000\000\000\000\000\000\000\002\194\000\000\000\000\003\025\000\000\000\000\000\000\000\000\000\000\002\215\002\194\001\153\002\196\000\000\002\191\000\000\000\000\000\000\000\000\002\215\002\191\001\153\002\196\000\000\000\000\000\000\002A\000\000\002\193\000\242\002@\000\000\002A\002\217\002\193\000\242\002=\002>\001s\000\000\002\191\000\000\002A\002\217\002\193\000\242\002=\002>\001s\000\000\000\000\002\154\002A\000\000\002\193\000\242\000\000\000\000\002\197\002\159\000\000\002\154\000\000\000\000\002\197\000\000\000\000\000\000\000\000\002\159\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\000\004\024\000\000\000\000\000\000\002\185\003\031\002\197\000\000\000\000\000\000\000\000\003%\002\194\000\000\000\000\000\000\000\000\000\000\002\194\000\000\000\000\002\215\000\000\001\153\002\196\000\000\000\000\002\215\002\194\001\153\002\196\003+\000\000\000\000\000\000\000\000\000\000\002\195\002\194\001\153\002\196\000\000\000\000\000\000\000\000\002\217\000\000\002\215\000\000\001\153\002\196\002\217\000\000\000\000\002=\002>\001s\000\000\002\191\000\000\000\000\000\000\000\000\000\000\002=\002>\001s\000\000\002\191\002\154\002A\002\217\002\193\000\242\002=\002>\001s\002\159\000\000\002\154\002A\000\000\002\193\000\242\000\000\000\000\000\000\002\159\000\000\002\154\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\159\000\000\000\000\002\185\000\000\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\000\000\002\197\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0031\002\154\000\000\000\000\000\000\000\000\000\000\002\194\000\000\002\159\0037\000\000\000\000\000\000\000\000\000\000\002\215\002\194\001\153\002\196\000\000\000\000\002\185\000\000\000\000\000\000\002\215\002\191\001\153\002\196\000\000\000\000\000\000\002=\002>\001s\000\000\002\191\000\000\002A\002\217\002\193\000\242\000\000\000\000\000\000\000\000\002\191\002\154\002A\002\217\002\193\000\242\002=\002>\001s\002\159\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\000\000\002\154\002\185\000\000\002\197\000\000\000\000\000\000\000\000\002\159\000\000\000\000\000\000\000\000\002\197\000\000\000\000\000\000\000\000\002\191\000\000\000\000\002\185\000\000\002\197\000\000\000\000\000\000\000\000\003=\000\000\002A\000\000\002\193\000\242\001#\002\194\000\000\001$\003C\000\000\000\000\000\000\000\000\000\000\002\215\002\194\001\153\002\196\003I\000\000\000\000\000\000\000\000\000\000\002\215\002\194\001\153\002\196\000\000\000\000\000\000\001&\002\197\000\000\002\215\002\191\001\153\002\196\002\217\000\000\000\000\003h\000\000\000\000\000\000\000\000\000\000\002A\002\217\002\193\000\242\002=\002>\001s\000\000\002\191\000\000\003O\002\217\000\000\000\000\000\000\000\000\000\000\002\194\000\000\002\154\002A\000\000\002\193\000\242\000\000\000\000\002\215\002\159\001\153\002\196\001,\000\000\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\002\217\000\000\002\197\000\000\000\000\000\000\000\000\003U\000\000\000\000\000\000\000\000\001)\000\000\002\194\000\000\000\000\000\000\001\027\001/\000\000\000\000\000\000\002\215\000\000\001\153\002\196\003[\000\000\000\000\000\000\000\000\000\000\000\000\002\194\002=\002>\001s\000\000\000\000\002=\002>\001s\002\215\000\000\001\153\002\196\002\217\000\000\000\000\002\154\000\000\000\000\000\000\002\191\002\154\000\000\000\000\002\159\000\000\000\000\000\000\000\000\002\159\001;\000\000\002A\002\217\002\193\000\242\000\000\002\185\0011\000\000\000\000\0012\002\185\000\000\0013\0014\002\168\000\000\002=\002>\001s\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\197\000\000\000\000\002\154\000\000\000\000\0015\002\159\000\000\001?\000\000\002\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\000\000\000\000\000\000\002\185\003\192\000\000\000\000\000\000\000\000\000\000\000\000\002\194\000\000\000\000\000\000\000\000\002\191\000\000\000\000\000\000\002\215\002\191\001\153\002\196\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\002=\002>\001s\000\000\000\000\000\000\000\000\002\197\000\000\002\154\002\191\000\000\002\197\000\000\002\191\002\154\000\000\002\159\000\000\000\000\000\000\000\000\002A\002\159\002\193\000\242\002A\000\000\002\193\000\242\002\185\000\000\003\202\000\000\000\000\000\000\002\185\003\212\000\000\002\194\000\000\000\000\001r\001s\002\194\002=\002>\001s\002\215\000\000\001\153\002\196\000\000\002\215\002\197\001\153\002\196\000\000\002\197\000\000\002\154\000\000\001t\002r\000\000\001v\001w\000\000\002\159\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\002\217\000\000\003\222\000\000\002\185\000\000\003\231\000\000\000\000\002\194\000\000\000\000\000\000\002\194\000\000\000\000\000\000\002\191\002\215\000\000\001\153\002\196\002\215\002\191\001\153\002\196\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\002\217\000\000\000\000\000\000\002\217\000\000\002=\002>\001s\000\000\000\000\000\000\002=\002>\001s\000\000\002=\002>\001s\002\197\000\000\002\154\001{\000\000\000\000\002\197\002\191\002\154\000\000\002\159\000\000\002\154\000\000\000\000\001|\002\159\000\000\000\242\002A\002\159\002\193\000\242\002\185\000\000\003\240\000\000\000\000\000\000\002\185\000\000\003\251\002\194\002\185\000\000\000\000\000\000\000\000\002\194\000\000\000\000\002\215\000\000\001\153\002\196\000\000\000\000\002\215\000\000\001\153\002\196\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\004\004\000\000\000\000\001\143\000\000\000\000\000\000\002\194\000\000\000\000\000\000\002\191\001\152\000\000\001\153\001z\002\215\002\191\001\153\002\196\000\000\002\191\000\000\002A\000\000\002\193\000\242\000\000\000\000\002A\000\000\002\193\000\242\002A\000\000\002\193\000\242\002=\002>\001s\002\217\002=\002>\001s\000\000\000\000\000\000\000\000\001\201\001s\000\000\000\000\002\154\000\000\000\000\002\197\002\154\000\000\000\000\000\000\002\159\002\197\000\000\000\000\002\159\002\197\000\000\000\000\001t\002R\000\000\001v\001w\002\185\000\000\000\000\000\000\002\185\000\000\000\000\004\r\000\000\000\000\000\000\000\000\000\000\004\020\002\194\001#\000\000\004B\001$\000\000\002\194\000\000\000\000\002\215\002\194\001\153\002\196\000\000\000\000\002\215\000\000\001\153\002\196\002\215\001#\001\153\002\196\001$\004J\003\143\003\144\000\000\001&\000\000\000\000\000\000\000\000\002\217\000\000\000\000\000\000\000\000\004\178\002\217\000\000\000\000\000\000\002\217\000\000\000\000\000\000\001&\000\000\000\000\002\191\000\000\006\200\004\181\002\191\000\000\001#\000\000\000\000\001$\001\141\000\000\002A\000\000\002\193\000\242\002A\000\000\002\193\000\242\000\000\000\000\001|\000\000\001,\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\001,\002\197\000\000\000\000\000\000\002\197\000\000\000\000\004Q\000\000\000\000\000\000\000\000\001)\001#\001(\000\000\001$\000\000\001\027\001/\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\004H\000\000\001)\002\194\000\000\000\000\001,\002\194\001\027\001/\000\000\001&\002\215\001\143\001\153\002\196\002\215\000\000\001\153\002\196\000\000\001(\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001#\001;\002\217\001$\001)\001#\002\217\000\000\001$\0011\001\027\001/\0012\000\000\000\000\0013\0014\000\000\000\000\007\204\001;\000\000\000\000\001,\000\000\001r\001s\001&\0011\000\000\000\000\0012\001&\000\000\0013\0014\005\214\000\000\001(\000\000\000\000\0015\000\000\000\000\004\185\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\000\000\001)\001;\000\000\000\000\000\000\0015\001\027\001/\001?\0011\000\000\000\000\0012\000\000\000\000\0013\0014\005\227\001,\000\000\006\246\001#\000\000\001,\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001(\001\133\000\000\001\134\0078\001(\000\000\000\000\0015\000\000\000\000\001?\000\000\000\000\000\000\001&\000\000\001)\000\000\001;\000\000\000\000\001)\001\027\001/\000\000\000\000\0011\001\027\001/\0012\000\000\000\000\0013\0014\007\205\001\141\001#\000\000\000\000\001$\000\000\000\000\002=\002>\001s\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\001,\001?\000\000\001&\000\000\002\144\000\000\000\000\001E\000\000\000\000\001P\000\000\001;\000\000\001(\0011\000\000\000\000\0012\000\000\0011\0013\0014\0012\000\000\000\000\0013\0014\001f\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\0015\001,\000\000\001\143\000\000\0015\001r\001s\001?\000\000\000\000\000\000\001\144\000\000\001\153\001z\001(\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\001)\002@\000\000\001;\001r\001s\001\027\001/\000\000\000\000\000\000\0011\000\000\002A\0012\002\193\000\242\0013\0014\001<\000\000\000\000\000\000\000\000\001t\001\132\000\000\001v\001w\001\133\000\000\001\134\001\190\001r\001s\000\000\000\000\001\133\000\000\001\134\001\178\000\000\000\000\0015\000\000\000\000\001?\000\000\000\000\000\000\000\000\000\000\001;\001t\001\132\000\000\001v\001w\000\000\000\000\0011\000\000\000\000\0012\001\141\000\000\0013\0014\001\133\000\000\001\134\001\175\001\141\000\000\000\000\000\000\001|\002\194\000\000\000\242\000\000\000\000\000\000\000\000\001|\000\000\002\195\000\242\001\153\002\196\000\000\000\000\0015\000\000\000\000\001T\000\000\001\133\000\000\001\134\001\136\001r\001s\001\141\000\000\000\000\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\001t\001\132\000\000\001v\001w\001\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\001#\001|\000\000\001$\000\242\001\143\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\001\144\000\000\001\153\001z\001r\001s\000\000\000\000\001\133\000\000\001\134\001\139\000\000\001&\001\133\000\000\001\134\001\142\001r\001s\000\000\000\000\001\143\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\001t\001\132\000\000\001v\001w\001\141\000\000\000\000\000\000\000\000\000\000\001\141\000\000\001\143\000\000\000\000\000\000\001|\001r\001s\000\242\001,\001\144\001|\001\153\001z\000\242\000\000\000\000\000\000\001\133\000\000\001\134\001\174\000\000\000\000\001(\000\000\001t\001\132\000\000\001v\001w\000\000\001\133\000\000\001\134\001\162\000\000\001#\000\000\000\000\001$\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\000\000\000\000\001&\001|\000\000\001\141\000\242\001\143\001\133\001#\001\134\001\170\001$\001\143\000\000\000\000\001\144\001|\001\153\001z\000\242\000\000\001\144\001&\001\153\001z\000\000\000\000\000\000\000\000\001#\001;\000\000\001$\000\000\000\000\001&\000\000\000\000\0011\000\000\000\000\0012\001\141\000\000\0013\0014\001\165\001,\000\000\000\000\000\000\000\000\000\000\000\000\001|\000\000\001&\000\242\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\001\143\000\000\001,\000\000\0015\000\000\000\000\001?\000\000\001\144\000\000\001\153\001z\001)\001\143\001,\000\000\001(\000\000\001\027\001/\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\001(\000\000\000\000\000\000\001)\000\000\001,\000\000\000\000\001#\001\027\001/\001$\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\001(\001\143\001\027\001/\000\000\000\000\000\000\000\000\000\000\000\000\001\144\000\000\001\153\001z\001;\001&\000\000\001)\000\000\000\000\000\000\000\000\0011\001\027\001/\0012\000\000\000\000\0013\0014\001\206\000\000\000\000\000\000\000\000\001;\000\000\000\000\001#\000\000\000\000\001$\000\000\0011\000\000\000\000\0012\000\000\001;\0013\0014\001\246\000\000\000\000\0015\000\000\0011\001?\000\000\0012\000\000\001,\0013\0014\001\248\001&\001r\001s\000\000\001;\000\000\000\000\000\000\000\000\000\000\0015\001(\0011\001?\000\000\0012\000\000\000\000\0013\0014\002T\001t\001\132\0015\001v\001w\001?\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\001#\000\000\000\000\001$\000\000\000\000\000\000\0015\000\000\001,\001?\000\000\001#\000\000\000\000\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\001&\001\133\000\000\001\134\002\139\000\000\001#\000\000\000\000\001$\000\000\000\000\001&\000\000\001)\001#\001;\000\000\001$\000\000\001\027\001/\000\000\000\000\0011\000\000\000\000\0012\000\000\000\000\0013\0014\002g\001&\000\000\000\000\001\141\000\000\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\001,\000\000\001|\000\000\000\000\000\242\000\000\000\000\000\000\000\000\0015\000\000\001,\001?\000\000\001(\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\000\000\000\000\001(\0011\000\000\000\000\0012\001)\001,\0013\0014\002\165\000\000\001\027\001/\000\000\000\000\001,\000\000\001)\000\000\000\000\000\000\001(\000\000\001\027\001/\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\0015\000\000\000\000\001?\000\000\001)\001\143\000\000\000\000\000\000\000\000\001\027\001/\000\000\001)\001\144\000\000\001\153\001z\000\000\001\027\001/\001r\001s\001;\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\0012\001;\000\000\0013\0014\002\170\000\000\001t\001\132\0011\001v\001w\0012\000\000\000\000\0013\0014\003e\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\000\000\000\000\0015\0011\001;\001?\0012\000\000\000\000\0013\0014\003l\0011\001#\0015\0012\006\011\001?\0013\0014\003|\000\000\001r\001s\001\133\000\000\001\134\003\132\001r\001s\000\000\000\000\000\000\000\000\000\000\0015\000\000\000\000\001?\000\000\001&\000\000\001t\001\132\0015\001v\001w\001?\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\001r\001s\000\000\001\141\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\000\000\000\000\000\000\001|\000\000\000\000\000\242\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\001r\001s\001\133\000\000\001\134\003\135\000\000\001&\001\133\000\000\001\134\003\138\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\001t\001\132\000\000\001v\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\001\133\001\141\001\134\003\146\001\027\001/\000\000\001\141\000\000\000\000\000\000\000\000\000\000\001|\000\000\001\143\000\242\001,\000\000\001|\000\000\000\000\000\242\000\000\001\144\000\000\001\153\001z\001\133\000\000\001\134\005;\001(\000\000\000\000\001\141\000\000\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\000\000\000\000\001|\000\000\001)\000\242\000\000\000\000\000\000\001#\001\027\001/\001$\0011\000\000\000\000\0012\000\000\001\141\0013\0014\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\001|\000\000\001\143\000\242\000\000\000\000\001&\000\000\001\143\000\000\000\000\001\144\000\000\001\153\001z\0015\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\001#\000\000\000\000\001$\0011\000\000\001\143\0012\000\000\001,\0013\0014\005L\000\000\000\000\001\144\000\000\001\153\001z\000\000\000\000\000\000\001,\000\000\001(\000\000\000\000\001&\000\000\000\000\001#\000\000\000\000\001$\001\143\000\000\0015\001(\000\000\001?\000\000\001)\000\000\001\144\000\000\001\153\001z\001\027\001/\000\000\001#\000\000\000\000\006\b\001)\000\000\000\000\001&\000\000\000\000\001\027\001/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001#\000\000\001,\006\b\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\001&\000\000\000\000\0011\000\000\001,\0012\001)\001;\0013\0014\005\175\000\000\001\027\001/\000\000\0011\000\000\000\000\0012\001(\000\000\0013\0014\005\187\006\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0015\000\000\001)\001?\000\000\001(\000\000\000\000\001\027\001/\000\000\006\n\000\000\0015\000\000\000\000\001?\001#\000\000\000\000\006\b\000\000\001)\000\000\001;\000\000\001(\000\000\001\027\006\r\000\000\000\000\0011\000\000\000\000\0012\000\000\000\000\0013\0014\005\213\000\000\000\000\001)\001&\001#\000\000\000\000\006\b\001\027\006\r\000\000\000\000\001#\001;\000\000\006\b\000\000\000\000\000\000\000\000\000\000\0011\000\000\0015\0012\000\000\001?\0013\0014\005\229\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\000\000\0011\000\000\000\000\006\014\000\000\000\000\0013\0014\006\n\000\000\000\000\000\000\0015\000\000\000\000\001?\005\216\000\000\006\019\000\000\006\016\0011\000\000\001(\006\014\000\000\000\000\0013\0014\000\000\000\000\000\000\0015\000\000\000\000\000\000\006\n\005\216\000\000\006\018\001)\006\016\000\000\000\000\006\n\000\000\001\027\006\r\000\000\000\000\000\000\001(\001#\0015\000\000\001$\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\006\r\001)\000\000\000\000\001&\000\000\000\000\001\027\006\r\000\000\001#\000\000\000\000\001$\000\000\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\000\000\000\000\0011\000\000\000\000\006\014\000\000\000\000\0013\0014\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\005\216\000\000\006\017\000\000\006\016\001&\002=\002>\001s\001,\000\000\000\000\0011\000\000\000\000\006\014\0015\000\000\0013\0014\0011\000\000\000\000\006\014\001(\000\000\0013\0014\005\216\002\146\006\015\000\000\006\016\000\000\000\000\000\000\005\216\000\000\006\027\000\000\006\016\001)\001,\001#\0015\000\000\006\b\001\027\001/\000\000\000\000\001,\0015\000\000\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001#\001(\000\000\006\b\000\000\001&\000\000\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\001)\001#\000\000\000\000\001$\000\000\001\027\001/\000\000\001&\001;\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\0012\000\000\002@\0013\0014\006\130\000\000\001&\000\000\000\000\000\000\000\000\006\n\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\001;\000\000\000\000\000\000\000\000\001(\000\000\0015\0011\001;\001?\0012\006\n\000\000\0013\0014\006\148\0011\000\000\000\000\0012\000\000\001)\0013\0014\006\172\000\000\001(\001\027\006\r\001#\001,\000\000\001$\000\000\000\000\000\000\000\000\000\000\001#\0015\000\000\001$\001?\001)\000\000\001(\000\000\000\000\0015\001\027\006\r\001?\000\000\000\000\000\000\002\194\001&\000\000\000\000\000\000\000\000\000\000\001)\000\000\002\195\001&\001\153\002\196\001\027\001/\000\000\001#\000\000\000\000\001$\000\000\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\006\014\000\000\000\000\0013\0014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\216\001&\006\232\000\000\006\016\001,\0011\000\000\000\000\006\014\000\000\006\031\0013\0014\001,\000\000\0015\001;\000\000\000\000\001(\000\000\005\216\000\000\007\002\0011\006\016\000\000\0012\001(\000\000\0013\0014\007;\000\000\000\000\000\000\001)\0015\006 \007\159\006!\001#\001\027\001/\001$\001)\001,\000\000\000\000\000\000\000\000\001\027\001/\000\000\000\000\000\000\0015\000\000\000\000\001?\000\000\001(\000\000\001#\000\000\000\000\001$\000\000\001&\000\000\006\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001\027\001/\000\000\000\000\001;\000\000\001&\000\000\000\000\000\000\000\000\000\000\0011\001;\000\000\0012\001r\001s\0013\0014\007}\0011\006#\000\000\0012\000\000\000\000\0013\0014\007\128\001,\000\000\006$\006%\000\000\006&\001t\002s\000\000\001v\001w\000\000\000\000\000\000\0015\001(\001;\001?\000\000\000\000\000\000\000\000\001,\0015\0011\000\000\001?\0012\006b\000\000\0013\0014\001)\000\000\000\000\000\000\000\000\001(\001\027\001/\001#\000\000\000\000\001$\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\006(\000\000\001)\000\000\0015\006*\0064\001R\001\027\001/\000\000\000\000\000\000\001t\002s\001&\001v\001w\006^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\001s\000\000\001;\001{\000\000\000\000\006_\000\000\000\000\000\000\0011\000\000\000\000\0012\000\000\001|\0013\0014\000\242\001t\002s\000\000\001v\001w\001;\000\000\000\000\000\000\000\000\000\000\000\000\001,\0011\000\000\000\000\0012\000\000\000\000\0013\0014\000\000\000\000\0015\000\000\000\000\001\241\001(\000\000\000\000\000\000\002u\000\000\001r\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001{\001)\0015\000\000\000\000\001\243\000\000\001\027\001/\002v\001t\002s\001|\001v\001w\000\242\000\000\001\143\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\001\152\000\000\001\153\001z\000\000\000\000\000\000\000\000\000\000\000\000\001{\000\000\000\000\000\000\000\000\000\000\000\000\006\031\000\000\000\000\000\000\006\205\001|\001&\000\000\000\242\000\000\001;\007\018\001#\000\000\000\000\001$\000\000\000\000\0011\000\000\000\000\0012\000\000\000\000\0013\0014\b\007\000\000\006 \b\b\006!\000\000\007\021\001\143\006\031\000\000\000\000\000\000\000\000\001&\007\005\007\022\001\152\000\000\001\153\001z\001{\000\000\000\000\000\000\0015\000\000\001,\004\180\000\000\006\217\007\018\000\000\001|\000\000\006\"\000\242\006 \000\000\006!\000\000\000\000\001(\000\000\001\143\000\000\007\023\000\000\000\000\007\019\000\000\000\000\007\021\001\152\000\000\001\153\001z\000\000\000\000\001)\001,\007\022\000\000\000\000\000\000\001\027\001/\007\006\007\005\006\"\000\000\006#\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\006$\006%\007\024\006&\000\000\000\000\000\000\000\000\000\000\000\000\007\023\001)\007\025\002=\002>\001s\001\143\001\027\001/\000\000\000\000\000\000\007\018\000\000\006#\001\152\006`\001\153\001z\000\000\0010\000\000\b\018\000\000\006$\006%\002\177\006&\0011\007\014\007\019\0012\000\000\007\021\0013\0014\000\000\007\024\000\000\000\000\006(\007\027\007\022\000\000\000\000\006*\0064\007\025\000\000\000\000\006'\007\028\000\000\007v\000\000\000\000\007\030\000\000\006^\000\000\0015\0011\000\000\000\000\0012\000\000\000\000\0013\0014\007 \000\000\007%\007\023\000\000\006(\000\000\006_\000\000\000\000\006*\0064\002=\002>\001s\000\000\000\000\007\027\007!\000\000\000\000\000\000\000\000\006^\0015\000\000\000\000\007\028\002=\002>\001s\000\000\007\030\000\000\002@\002\192\002=\002>\001s\000\000\007\024\006_\000\000\000\000\000\000\007 \002A\000\000\002\193\000\242\007\025\002\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\181\000\000\000\000\000\000\007!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\028\000\000\000\000\000\000\000\000\007\030\000\000\000\000\000\000\000\000\000\000\002\194\000\000\002@\000\000\000\000\000\000\000\000\007 \000\000\002\195\000\000\001\153\002\196\000\000\002A\000\000\002\193\000\242\002@\000\000\000\000\000\000\000\000\000\000\000\000\007!\002@\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\002A\000\000\002\193\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\195\000\000\001\153\002\196\000\000\000\000\000\000\002\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\194\002\195\000\000\001\153\002\196\000\000\000\000\000\000\000\000\002\195\000\000\001\153\002\196")) and semantic_action = [| @@ -1374,9 +1447,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3763 "parsing/parser.mly" +# 3972 "parsing/parser.mly" ( "+" ) -# 1380 "parsing/parser.ml" +# 1453 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1399,9 +1472,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3764 "parsing/parser.mly" +# 3973 "parsing/parser.mly" ( "+." ) -# 1405 "parsing/parser.ml" +# 1478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1424,9 +1497,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3316 "parsing/parser.mly" +# 3469 "parsing/parser.mly" ( _1 ) -# 1430 "parsing/parser.ml" +# 1503 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1439,14 +1512,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tyvar; - MenhirLib.EngineTypes.startp = _startpos_tyvar_; - MenhirLib.EngineTypes.endp = _endpos_tyvar_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -1462,33 +1535,46 @@ module Tables = struct }; }; } = _menhir_stack in - let tyvar : (Asttypes.label) = Obj.magic tyvar in - let _3 : unit = Obj.magic _3 in + let _2_inlined1 : (Asttypes.label) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_ty_ in - let _endpos = _endpos_tyvar_ in + let _endpos = _endpos__2_inlined1_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3319 "parsing/parser.mly" + let _1 = + let tyvar = + let (_endpos__2_, _2) = (_endpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3417 "parsing/parser.mly" + ( mkrhs _2 _sloc ) +# 1556 "parsing/parser.ml" + + in + +# 3472 "parsing/parser.mly" ( Ptyp_alias(ty, tyvar) ) -# 1477 "parsing/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_tyvar_, _startpos_ty_) in +# 1562 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__2_inlined1_, _startpos_ty_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1486 "parsing/parser.ml" +# 1572 "parsing/parser.ml" in -# 3321 "parsing/parser.mly" +# 3474 "parsing/parser.mly" ( _1 ) -# 1492 "parsing/parser.ml" +# 1578 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1525,7 +1611,8 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -1534,30 +1621,30 @@ module Tables = struct let _v : (let_binding) = let attrs2 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 1540 "parsing/parser.ml" +# 1627 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 1549 "parsing/parser.ml" +# 1636 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2567 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklb ~loc:_sloc false body attrs ) -# 1561 "parsing/parser.ml" +# 1648 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1580,9 +1667,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3647 "parsing/parser.mly" +# 3856 "parsing/parser.mly" ( _1 ) -# 1586 "parsing/parser.ml" +# 1673 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1605,9 +1692,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3648 "parsing/parser.mly" +# 3857 "parsing/parser.mly" ( Lident _1 ) -# 1611 "parsing/parser.ml" +# 1698 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1619,214 +1706,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.core_type) = -# 3377 "parsing/parser.mly" - ( _2 ) -# 1650 "parsing/parser.ml" - in - { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let type_ : (Parsetree.core_type) = Obj.magic type_ in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.core_type) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3437 "parsing/parser.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 1717 "parsing/parser.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 1727 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 1733 "parsing/parser.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3379 "parsing/parser.mly" - ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc _4) _3 ) -# 1742 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (Asttypes.label) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3382 "parsing/parser.mly" - ( Ptyp_var _2 ) -# 1775 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 1784 "parsing/parser.ml" - - in - -# 3414 "parsing/parser.mly" - ( _1 ) -# 1790 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3384 "parsing/parser.mly" - ( Ptyp_any ) -# 1816 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 1824 "parsing/parser.ml" - - in - -# 3414 "parsing/parser.mly" - ( _1 ) -# 1830 "parsing/parser.ml" + let _startpos = _startpos_type__ in + let _endpos = _endpos_type__ in + let _v : (Parsetree.core_type) = +# 3605 "parsing/parser.mly" + ( type_ ) +# 1723 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1855,35 +1748,35 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 1861 "parsing/parser.ml" +# 1754 "parsing/parser.ml" in let tys = -# 3429 "parsing/parser.mly" +# 3638 "parsing/parser.mly" ( [] ) -# 1867 "parsing/parser.ml" +# 1760 "parsing/parser.ml" in -# 3387 "parsing/parser.mly" - ( Ptyp_constr(tid, tys) ) -# 1872 "parsing/parser.ml" +# 3609 "parsing/parser.mly" + ( Ptyp_constr (tid, tys) ) +# 1765 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1881 "parsing/parser.ml" +# 1774 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 1887 "parsing/parser.ml" +# 1780 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1919,20 +1812,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 1925 "parsing/parser.ml" +# 1818 "parsing/parser.ml" in let tys = -# 3431 "parsing/parser.mly" - ( [ty] ) -# 1931 "parsing/parser.ml" +# 3640 "parsing/parser.mly" + ( [ ty ] ) +# 1824 "parsing/parser.ml" in -# 3387 "parsing/parser.mly" - ( Ptyp_constr(tid, tys) ) -# 1936 "parsing/parser.ml" +# 3609 "parsing/parser.mly" + ( Ptyp_constr (tid, tys) ) +# 1829 "parsing/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -1940,15 +1833,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1946 "parsing/parser.ml" +# 1839 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 1952 "parsing/parser.ml" +# 1845 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1999,9 +1892,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2005 "parsing/parser.ml" +# 1898 "parsing/parser.ml" in let tys = @@ -2009,24 +1902,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2013 "parsing/parser.ml" +# 1906 "parsing/parser.ml" in -# 1049 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 2018 "parsing/parser.ml" +# 1911 "parsing/parser.ml" in -# 3433 "parsing/parser.mly" +# 3642 "parsing/parser.mly" ( tys ) -# 2024 "parsing/parser.ml" +# 1917 "parsing/parser.ml" in -# 3387 "parsing/parser.mly" - ( Ptyp_constr(tid, tys) ) -# 2030 "parsing/parser.ml" +# 3609 "parsing/parser.mly" + ( Ptyp_constr (tid, tys) ) +# 1923 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2034,15 +1927,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2040 "parsing/parser.ml" +# 1933 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2046 "parsing/parser.ml" +# 1939 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2055,162 +1948,59 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Longident.t) = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _startpos = _startpos__2_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3389 "parsing/parser.mly" - ( let (f, c) = _2 in Ptyp_object (f, c) ) -# 2086 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__3_ in + let _1 = + let cid = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 1977 "parsing/parser.ml" + + in + let tys = +# 3638 "parsing/parser.mly" + ( [] ) +# 1983 "parsing/parser.ml" + in + +# 3613 "parsing/parser.mly" + ( Ptyp_class (cid, tys) ) +# 1988 "parsing/parser.ml" + + in + let _startpos__1_ = _startpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2095 "parsing/parser.ml" +# 1998 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2101 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3391 "parsing/parser.mly" - ( Ptyp_object ([], Closed) ) -# 2134 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2143 "parsing/parser.ml" - - in - -# 3414 "parsing/parser.mly" - ( _1 ) -# 2149 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _1 : (Longident.t) = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__2_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let cid = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 2187 "parsing/parser.ml" - - in - let tys = -# 3429 "parsing/parser.mly" - ( [] ) -# 2193 "parsing/parser.ml" - in - -# 3395 "parsing/parser.mly" - ( Ptyp_class(cid, tys) ) -# 2198 "parsing/parser.ml" - - in - let _startpos__1_ = _startpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2208 "parsing/parser.ml" - - in - -# 3414 "parsing/parser.mly" - ( _1 ) -# 2214 "parsing/parser.ml" +# 2004 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2253,20 +2043,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2259 "parsing/parser.ml" +# 2049 "parsing/parser.ml" in let tys = -# 3431 "parsing/parser.mly" - ( [ty] ) -# 2265 "parsing/parser.ml" +# 3640 "parsing/parser.mly" + ( [ ty ] ) +# 2055 "parsing/parser.ml" in -# 3395 "parsing/parser.mly" - ( Ptyp_class(cid, tys) ) -# 2270 "parsing/parser.ml" +# 3613 "parsing/parser.mly" + ( Ptyp_class (cid, tys) ) +# 2060 "parsing/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2274,15 +2064,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2280 "parsing/parser.ml" +# 2070 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2286 "parsing/parser.ml" +# 2076 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2340,9 +2130,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2346 "parsing/parser.ml" +# 2136 "parsing/parser.ml" in let tys = @@ -2350,24 +2140,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2354 "parsing/parser.ml" +# 2144 "parsing/parser.ml" in -# 1049 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 2359 "parsing/parser.ml" +# 2149 "parsing/parser.ml" in -# 3433 "parsing/parser.mly" +# 3642 "parsing/parser.mly" ( tys ) -# 2365 "parsing/parser.ml" +# 2155 "parsing/parser.ml" in -# 3395 "parsing/parser.mly" - ( Ptyp_class(cid, tys) ) -# 2371 "parsing/parser.ml" +# 3613 "parsing/parser.mly" + ( Ptyp_class (cid, tys) ) +# 2161 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2375,15 +2165,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2381 "parsing/parser.ml" +# 2171 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2387 "parsing/parser.ml" +# 2177 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2396,9 +2186,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -2413,32 +2203,44 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.row_field) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let type_ : (Parsetree.core_type) = Obj.magic type_ in + let _2 : unit = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _endpos = _endpos_type__ in let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3398 "parsing/parser.mly" - ( Ptyp_variant([_2], Closed, None) ) -# 2427 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__3_ in + let _1 = + let mod_ident = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 2222 "parsing/parser.ml" + + in + +# 3617 "parsing/parser.mly" + ( Ptyp_open (mod_ident, type_) ) +# 2228 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos_type__ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2436 "parsing/parser.ml" +# 2238 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2442 "parsing/parser.ml" +# 2244 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2451,77 +2253,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = ident; + MenhirLib.EngineTypes.startp = _startpos_ident_; + MenhirLib.EngineTypes.endp = _endpos_ident_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in + let ident : (Asttypes.label) = Obj.magic ident in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in + let _endpos = _endpos_ident_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2492 "parsing/parser.ml" - in - -# 1021 "parsing/parser.mly" - ( xs ) -# 2497 "parsing/parser.ml" - - in - -# 3443 "parsing/parser.mly" - ( _1 ) -# 2503 "parsing/parser.ml" - - in - -# 3400 "parsing/parser.mly" - ( Ptyp_variant(_3, Closed, None) ) -# 2509 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__4_ in + let _1 = +# 3619 "parsing/parser.mly" + ( Ptyp_var ident ) +# 2277 "parsing/parser.ml" + in + let _endpos__1_ = _endpos_ident_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2519 "parsing/parser.ml" +# 2286 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2525 "parsing/parser.ml" +# 2292 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2533,85 +2300,35 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.row_field) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _4 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2582 "parsing/parser.ml" - in - -# 1021 "parsing/parser.mly" - ( xs ) -# 2587 "parsing/parser.ml" - - in - -# 3443 "parsing/parser.mly" - ( _1 ) -# 2593 "parsing/parser.ml" - - in - -# 3402 "parsing/parser.mly" - ( Ptyp_variant(_2 :: _4, Closed, None) ) -# 2599 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__5_ in + let _1 = +# 3621 "parsing/parser.mly" + ( Ptyp_any ) +# 2318 "parsing/parser.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2609 "parsing/parser.ml" +# 2326 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" +# 3623 "parsing/parser.mly" ( _1 ) -# 2615 "parsing/parser.ml" +# 2332 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2623,78 +2340,35 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2665 "parsing/parser.ml" - in - -# 1021 "parsing/parser.mly" - ( xs ) -# 2670 "parsing/parser.ml" - - in - -# 3443 "parsing/parser.mly" - ( _1 ) -# 2676 "parsing/parser.ml" - - in - -# 3404 "parsing/parser.mly" - ( Ptyp_variant(_3, Open, None) ) -# 2682 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _v : (Ast_helper.str) = let _1 = + let _1 = +# 4039 "parsing/parser.mly" + ( _1 ) +# 2358 "parsing/parser.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2692 "parsing/parser.ml" +# 990 "parsing/parser.mly" + ( mkloc _1 (make_loc _sloc) ) +# 2366 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" - ( _1 ) -# 2698 "parsing/parser.ml" +# 4041 "parsing/parser.mly" + ( _1 ) +# 2372 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2707,42 +2381,76 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in + let _3 : (Ast_helper.str) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type) = let _1 = + let _endpos = _endpos__3_ in + let _v : (Ast_helper.str) = let _1 = let _1 = -# 3406 "parsing/parser.mly" - ( Ptyp_variant([], Open, None) ) -# 2731 "parsing/parser.ml" +# 4040 "parsing/parser.mly" + ( _1 ^ "." ^ _3.txt ) +# 2412 "parsing/parser.ml" in - let _endpos__1_ = _endpos__2_ in + let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2740 "parsing/parser.ml" +# 990 "parsing/parser.mly" + ( mkloc _1 (make_loc _sloc) ) +# 2421 "parsing/parser.ml" in -# 3414 "parsing/parser.mly" - ( _1 ) -# 2746 "parsing/parser.ml" +# 4041 "parsing/parser.mly" + ( _1 ) +# 2427 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Parsetree.payload) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.payload) = +# 4096 "parsing/parser.mly" + ( Builtin_attributes.mark_payload_attrs_used _1; + _1 + ) +# 2454 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2760,9 +2468,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -2779,53 +2487,19 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Ast_helper.str) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2796 "parsing/parser.ml" - in - -# 1021 "parsing/parser.mly" - ( xs ) -# 2801 "parsing/parser.ml" - - in - -# 3443 "parsing/parser.mly" - ( _1 ) -# 2807 "parsing/parser.ml" - - in - -# 3408 "parsing/parser.mly" - ( Ptyp_variant(_3, Closed, Some []) ) -# 2813 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2823 "parsing/parser.ml" - - in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3414 "parsing/parser.mly" - ( _1 ) -# 2829 "parsing/parser.ml" +# 4045 "parsing/parser.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 2503 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2837,321 +2511,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _6 : unit = Obj.magic _6 in - let xs_inlined1 : (Asttypes.label list) = Obj.magic xs_inlined1 in - let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.class_expr) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _5 = - let xs = xs_inlined1 in - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2894 "parsing/parser.ml" - in - -# 989 "parsing/parser.mly" - ( xs ) -# 2899 "parsing/parser.ml" - - in - -# 3471 "parsing/parser.mly" - ( _1 ) -# 2905 "parsing/parser.ml" - - in - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2913 "parsing/parser.ml" - in - -# 1021 "parsing/parser.mly" - ( xs ) -# 2918 "parsing/parser.ml" - - in - -# 3443 "parsing/parser.mly" - ( _1 ) -# 2924 "parsing/parser.ml" - - in - -# 3410 "parsing/parser.mly" - ( Ptyp_variant(_3, Closed, Some _5) ) -# 2930 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__6_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2940 "parsing/parser.ml" - - in - -# 3414 "parsing/parser.mly" - ( _1 ) -# 2946 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : (Parsetree.extension) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3412 "parsing/parser.mly" - ( Ptyp_extension _1 ) -# 2972 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 924 "parsing/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2980 "parsing/parser.ml" - - in - -# 3414 "parsing/parser.mly" - ( _1 ) -# 2986 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : (string) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (string Asttypes.loc) = let _1 = - let _1 = -# 3830 "parsing/parser.mly" - ( _1 ) -# 3012 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 917 "parsing/parser.mly" - ( mkloc _1 (make_loc _sloc) ) -# 3020 "parsing/parser.ml" - - in - -# 3832 "parsing/parser.mly" - ( _1 ) -# 3026 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _3 : (string Asttypes.loc) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (string Asttypes.loc) = let _1 = - let _1 = -# 3831 "parsing/parser.mly" - ( _1 ^ "." ^ _3.txt ) -# 3066 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 917 "parsing/parser.mly" - ( mkloc _1 (make_loc _sloc) ) -# 3075 "parsing/parser.ml" - - in - -# 3832 "parsing/parser.mly" - ( _1 ) -# 3081 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Asttypes.loc) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3836 "parsing/parser.mly" - ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 3130 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _1 : (Parsetree.class_expr) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.class_expr) = -# 1872 "parsing/parser.mly" - ( _1 ) -# 3155 "parsing/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Parsetree.class_expr) = +# 1975 "parsing/parser.mly" + ( _1 ) +# 2528 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3190,18 +2563,18 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3196 "parsing/parser.ml" +# 2569 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1874 "parsing/parser.mly" +# 1977 "parsing/parser.mly" ( wrap_class_attrs ~loc:_sloc _3 _2 ) -# 3205 "parsing/parser.ml" +# 2578 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3241,9 +2614,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1876 "parsing/parser.mly" +# 1979 "parsing/parser.mly" ( class_of_let_bindings ~loc:_sloc _1 _3 ) -# 3247 "parsing/parser.ml" +# 2620 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3306,34 +2679,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 3312 "parsing/parser.ml" +# 2685 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3321 "parsing/parser.ml" +# 2694 "parsing/parser.ml" in let _3 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 3327 "parsing/parser.ml" +# 2700 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1878 "parsing/parser.mly" +# 1981 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) ) -# 3337 "parsing/parser.ml" +# 2710 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3403,34 +2776,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 3409 "parsing/parser.ml" +# 2782 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3418 "parsing/parser.ml" +# 2791 "parsing/parser.ml" in let _3 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 3424 "parsing/parser.ml" +# 2797 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1878 "parsing/parser.mly" +# 1981 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) ) -# 3434 "parsing/parser.ml" +# 2807 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3460,9 +2833,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1882 "parsing/parser.mly" +# 1985 "parsing/parser.mly" ( Cl.attr _1 _2 ) -# 3466 "parsing/parser.ml" +# 2839 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3497,18 +2870,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 3501 "parsing/parser.ml" +# 2874 "parsing/parser.ml" in -# 989 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( xs ) -# 3506 "parsing/parser.ml" +# 2879 "parsing/parser.ml" in -# 1885 "parsing/parser.mly" +# 1988 "parsing/parser.mly" ( Pcl_apply(_1, _2) ) -# 3512 "parsing/parser.ml" +# 2885 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -3516,15 +2889,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3522 "parsing/parser.ml" +# 2895 "parsing/parser.ml" in -# 1888 "parsing/parser.mly" +# 1991 "parsing/parser.mly" ( _1 ) -# 3528 "parsing/parser.ml" +# 2901 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3548,23 +2921,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1887 "parsing/parser.mly" +# 1990 "parsing/parser.mly" ( Pcl_extension _1 ) -# 3554 "parsing/parser.ml" +# 2927 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3562 "parsing/parser.ml" +# 2935 "parsing/parser.ml" in -# 1888 "parsing/parser.mly" +# 1991 "parsing/parser.mly" ( _1 ) -# 3568 "parsing/parser.ml" +# 2941 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3617,33 +2990,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 3623 "parsing/parser.ml" +# 2996 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3632 "parsing/parser.ml" +# 3005 "parsing/parser.ml" in let _2 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 3638 "parsing/parser.ml" +# 3011 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1937 "parsing/parser.mly" +# 2040 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3647 "parsing/parser.ml" +# 3020 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3703,33 +3076,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 3709 "parsing/parser.ml" +# 3082 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _3 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3718 "parsing/parser.ml" +# 3091 "parsing/parser.ml" in let _2 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 3724 "parsing/parser.ml" +# 3097 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1937 "parsing/parser.mly" +# 2040 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3733 "parsing/parser.ml" +# 3106 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3770,9 +3143,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 3776 "parsing/parser.ml" +# 3149 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3780,11 +3153,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1940 "parsing/parser.mly" +# 2043 "parsing/parser.mly" ( let v, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_val v) ~attrs:(attrs@_3) ~docs ) -# 3788 "parsing/parser.ml" +# 3161 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3825,9 +3198,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 3831 "parsing/parser.ml" +# 3204 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3835,11 +3208,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1944 "parsing/parser.mly" +# 2047 "parsing/parser.mly" ( let meth, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_method meth) ~attrs:(attrs@_3) ~docs ) -# 3843 "parsing/parser.ml" +# 3216 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3885,28 +3258,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 3891 "parsing/parser.ml" +# 3264 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3900 "parsing/parser.ml" +# 3273 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1948 "parsing/parser.mly" +# 2051 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 3910 "parsing/parser.ml" +# 3283 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3952,28 +3325,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 3958 "parsing/parser.ml" +# 3331 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 3967 "parsing/parser.ml" +# 3340 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1951 "parsing/parser.mly" +# 2054 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_initializer _3) ~attrs:(_2@_4) ~docs ) -# 3977 "parsing/parser.ml" +# 3350 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4005,9 +3378,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _2 = let _1 = _1_inlined1 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 4011 "parsing/parser.ml" +# 3384 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -4015,10 +3388,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1954 "parsing/parser.mly" +# 2057 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_extension _1) ~attrs:_2 ~docs ) -# 4022 "parsing/parser.ml" +# 3395 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4042,23 +3415,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_field) = let _1 = let _1 = -# 1957 "parsing/parser.mly" +# 2060 "parsing/parser.mly" ( Pcf_attribute _1 ) -# 4048 "parsing/parser.ml" +# 3421 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "parsing/parser.mly" +# 1011 "parsing/parser.mly" ( mkcf ~loc:_sloc _1 ) -# 4056 "parsing/parser.ml" +# 3429 "parsing/parser.ml" in -# 1958 "parsing/parser.mly" +# 2061 "parsing/parser.mly" ( _1 ) -# 4062 "parsing/parser.ml" +# 3435 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4088,9 +3461,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1852 "parsing/parser.mly" +# 1955 "parsing/parser.mly" ( _2 ) -# 4094 "parsing/parser.ml" +# 3467 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4135,24 +3508,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1855 "parsing/parser.mly" +# 1958 "parsing/parser.mly" ( Pcl_constraint(_4, _2) ) -# 4141 "parsing/parser.ml" +# 3514 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4150 "parsing/parser.ml" +# 3523 "parsing/parser.ml" in -# 1858 "parsing/parser.mly" +# 1961 "parsing/parser.mly" ( _1 ) -# 4156 "parsing/parser.ml" +# 3529 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4183,24 +3556,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1857 "parsing/parser.mly" +# 1960 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, _2) ) -# 4189 "parsing/parser.ml" +# 3562 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4198 "parsing/parser.ml" +# 3571 "parsing/parser.ml" in -# 1858 "parsing/parser.mly" +# 1961 "parsing/parser.mly" ( _1 ) -# 4204 "parsing/parser.ml" +# 3577 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4238,24 +3611,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1913 "parsing/parser.mly" +# 2016 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4244 "parsing/parser.ml" +# 3617 "parsing/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4253 "parsing/parser.ml" +# 3626 "parsing/parser.ml" in -# 1914 "parsing/parser.mly" +# 2017 "parsing/parser.mly" ( _1 ) -# 4259 "parsing/parser.ml" +# 3632 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4286,24 +3659,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1913 "parsing/parser.mly" +# 2016 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4292 "parsing/parser.ml" +# 3665 "parsing/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4301 "parsing/parser.ml" +# 3674 "parsing/parser.ml" in -# 1914 "parsing/parser.mly" +# 2017 "parsing/parser.mly" ( _1 ) -# 4307 "parsing/parser.ml" +# 3680 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4326,9 +3699,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3637 "parsing/parser.mly" +# 3846 "parsing/parser.mly" ( _1 ) -# 4332 "parsing/parser.ml" +# 3705 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4368,9 +3741,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1922 "parsing/parser.mly" +# 2025 "parsing/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 4374 "parsing/parser.ml" +# 3747 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4422,24 +3795,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 1924 "parsing/parser.mly" +# 2027 "parsing/parser.mly" ( Ppat_constraint(_2, _4) ) -# 4428 "parsing/parser.ml" +# 3801 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 4437 "parsing/parser.ml" +# 3810 "parsing/parser.ml" in -# 1925 "parsing/parser.mly" +# 2028 "parsing/parser.mly" ( _1 ) -# 4443 "parsing/parser.ml" +# 3816 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4458,9 +3831,9 @@ module Tables = struct let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 1927 "parsing/parser.mly" +# 2030 "parsing/parser.mly" ( ghpat ~loc:_sloc Ppat_any ) -# 4464 "parsing/parser.ml" +# 3837 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4497,9 +3870,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 2052 "parsing/parser.mly" +# 2155 "parsing/parser.mly" ( _2 ) -# 4503 "parsing/parser.ml" +# 3876 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4516,24 +3889,24 @@ module Tables = struct let _endpos = _startpos in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 2053 "parsing/parser.mly" +# 2156 "parsing/parser.mly" ( Ptyp_any ) -# 4522 "parsing/parser.ml" +# 3895 "parsing/parser.ml" in let _endpos__1_ = _endpos__0_ in let _endpos = _endpos__1_ in let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 4531 "parsing/parser.ml" +# 3904 "parsing/parser.ml" in -# 2054 "parsing/parser.mly" +# 2157 "parsing/parser.mly" ( _1 ) -# 4537 "parsing/parser.ml" +# 3910 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4579,28 +3952,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 4585 "parsing/parser.ml" +# 3958 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 4594 "parsing/parser.ml" +# 3967 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2062 "parsing/parser.mly" +# 2165 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_inherit _3) ~attrs:(_2@_4) ~docs ) -# 4604 "parsing/parser.ml" +# 3977 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4658,9 +4031,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _3 : unit = Obj.magic _3 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 4664 "parsing/parser.ml" +# 4037 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let flags : (Asttypes.mutable_flag * Asttypes.virtual_flag) = Obj.magic flags in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -4671,9 +4044,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 4677 "parsing/parser.ml" +# 4050 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined3_ in @@ -4681,44 +4054,44 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let label = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 4687 "parsing/parser.ml" +# 4060 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4695 "parsing/parser.ml" +# 4068 "parsing/parser.ml" in -# 2087 "parsing/parser.mly" +# 2190 "parsing/parser.mly" ( let mut, virt = flags in label, mut, virt, ty ) -# 4704 "parsing/parser.ml" +# 4077 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 4712 "parsing/parser.ml" +# 4085 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2065 "parsing/parser.mly" +# 2168 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_val _3) ~attrs:(_2@_4) ~docs ) -# 4722 "parsing/parser.ml" +# 4095 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4776,9 +4149,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 4782 "parsing/parser.ml" +# 4155 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag * Asttypes.virtual_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -4789,53 +4162,53 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _7 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 4795 "parsing/parser.ml" +# 4168 "parsing/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _6 = let _1 = _1_inlined3 in -# 3282 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( _1 ) -# 4804 "parsing/parser.ml" +# 4177 "parsing/parser.ml" in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 4812 "parsing/parser.ml" +# 4185 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4820 "parsing/parser.ml" +# 4193 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 4828 "parsing/parser.ml" +# 4201 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2069 "parsing/parser.mly" +# 2172 "parsing/parser.mly" ( let (p, v) = _3 in let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_method (_4, p, v, _6)) ~attrs:(_2@_7) ~docs ) -# 4839 "parsing/parser.ml" +# 4212 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4881,28 +4254,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 4887 "parsing/parser.ml" +# 4260 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 4896 "parsing/parser.ml" +# 4269 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2073 "parsing/parser.mly" +# 2176 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 4906 "parsing/parser.ml" +# 4279 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4934,9 +4307,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _2 = let _1 = _1_inlined1 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 4940 "parsing/parser.ml" +# 4313 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -4944,10 +4317,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2076 "parsing/parser.mly" +# 2179 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_extension _1) ~attrs:_2 ~docs ) -# 4951 "parsing/parser.ml" +# 4324 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4971,23 +4344,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type_field) = let _1 = let _1 = -# 2079 "parsing/parser.mly" +# 2182 "parsing/parser.mly" ( Pctf_attribute _1 ) -# 4977 "parsing/parser.ml" +# 4350 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( mkctf ~loc:_sloc _1 ) -# 4985 "parsing/parser.ml" +# 4358 "parsing/parser.ml" in -# 2080 "parsing/parser.mly" +# 2183 "parsing/parser.mly" ( _1 ) -# 4991 "parsing/parser.ml" +# 4364 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5016,42 +4389,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5022 "parsing/parser.ml" +# 4395 "parsing/parser.ml" in let tys = let tys = -# 2038 "parsing/parser.mly" +# 2141 "parsing/parser.mly" ( [] ) -# 5029 "parsing/parser.ml" +# 4402 "parsing/parser.ml" in -# 2044 "parsing/parser.mly" +# 2147 "parsing/parser.mly" ( tys ) -# 5034 "parsing/parser.ml" +# 4407 "parsing/parser.ml" in -# 2021 "parsing/parser.mly" +# 2124 "parsing/parser.mly" ( Pcty_constr (cid, tys) ) -# 5040 "parsing/parser.ml" +# 4413 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "parsing/parser.mly" +# 1007 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5049 "parsing/parser.ml" +# 4422 "parsing/parser.ml" in -# 2024 "parsing/parser.mly" +# 2127 "parsing/parser.mly" ( _1 ) -# 5055 "parsing/parser.ml" +# 4428 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5102,9 +4475,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5108 "parsing/parser.ml" +# 4481 "parsing/parser.ml" in let tys = @@ -5113,30 +4486,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5117 "parsing/parser.ml" +# 4490 "parsing/parser.ml" in -# 1021 "parsing/parser.mly" +# 1115 "parsing/parser.mly" ( xs ) -# 5122 "parsing/parser.ml" +# 4495 "parsing/parser.ml" in -# 2040 "parsing/parser.mly" +# 2143 "parsing/parser.mly" ( params ) -# 5128 "parsing/parser.ml" +# 4501 "parsing/parser.ml" in -# 2044 "parsing/parser.mly" +# 2147 "parsing/parser.mly" ( tys ) -# 5134 "parsing/parser.ml" +# 4507 "parsing/parser.ml" in -# 2021 "parsing/parser.mly" +# 2124 "parsing/parser.mly" ( Pcty_constr (cid, tys) ) -# 5140 "parsing/parser.ml" +# 4513 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5144,15 +4517,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "parsing/parser.mly" +# 1007 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5150 "parsing/parser.ml" +# 4523 "parsing/parser.ml" in -# 2024 "parsing/parser.mly" +# 2127 "parsing/parser.mly" ( _1 ) -# 5156 "parsing/parser.ml" +# 4529 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5176,23 +4549,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = let _1 = let _1 = -# 2023 "parsing/parser.mly" +# 2126 "parsing/parser.mly" ( Pcty_extension _1 ) -# 5182 "parsing/parser.ml" +# 4555 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "parsing/parser.mly" +# 1007 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5190 "parsing/parser.ml" +# 4563 "parsing/parser.ml" in -# 2024 "parsing/parser.mly" +# 2127 "parsing/parser.mly" ( _1 ) -# 5196 "parsing/parser.ml" +# 4569 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5249,44 +4622,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5253 "parsing/parser.ml" +# 4626 "parsing/parser.ml" in -# 2058 "parsing/parser.mly" +# 2161 "parsing/parser.mly" ( _1 ) -# 5258 "parsing/parser.ml" +# 4631 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 882 "parsing/parser.mly" +# 955 "parsing/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5267 "parsing/parser.ml" +# 4640 "parsing/parser.ml" in -# 2048 "parsing/parser.mly" +# 2151 "parsing/parser.mly" ( Csig.mk _1 _2 ) -# 5273 "parsing/parser.ml" +# 4646 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 5281 "parsing/parser.ml" +# 4654 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2026 "parsing/parser.mly" +# 2129 "parsing/parser.mly" ( mkcty ~loc:_sloc ~attrs:_2 (Pcty_signature _3) ) -# 5290 "parsing/parser.ml" +# 4663 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5343,43 +4716,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5347 "parsing/parser.ml" +# 4720 "parsing/parser.ml" in -# 2058 "parsing/parser.mly" +# 2161 "parsing/parser.mly" ( _1 ) -# 5352 "parsing/parser.ml" +# 4725 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 882 "parsing/parser.mly" +# 955 "parsing/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5361 "parsing/parser.ml" +# 4734 "parsing/parser.ml" in -# 2048 "parsing/parser.mly" +# 2151 "parsing/parser.mly" ( Csig.mk _1 _2 ) -# 5367 "parsing/parser.ml" +# 4740 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 5375 "parsing/parser.ml" +# 4748 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2028 "parsing/parser.mly" +# 2131 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 5383 "parsing/parser.ml" +# 4756 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5409,9 +4782,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_type) = -# 2030 "parsing/parser.mly" +# 2133 "parsing/parser.mly" ( Cty.attr _1 _2 ) -# 5415 "parsing/parser.ml" +# 4788 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5474,34 +4847,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5480 "parsing/parser.ml" +# 4853 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 5489 "parsing/parser.ml" +# 4862 "parsing/parser.ml" in let _3 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 5495 "parsing/parser.ml" +# 4868 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2032 "parsing/parser.mly" +# 2135 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) ) -# 5505 "parsing/parser.ml" +# 4878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5571,34 +4944,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5577 "parsing/parser.ml" +# 4950 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 5586 "parsing/parser.ml" +# 4959 "parsing/parser.ml" in let _3 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 5592 "parsing/parser.ml" +# 4965 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2032 "parsing/parser.mly" +# 2135 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) ) -# 5602 "parsing/parser.ml" +# 4975 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5635,9 +5008,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.class_expr) = -# 1892 "parsing/parser.mly" +# 1995 "parsing/parser.mly" ( _2 ) -# 5641 "parsing/parser.ml" +# 5014 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5676,9 +5049,9 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1894 "parsing/parser.mly" +# 1997 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 5682 "parsing/parser.ml" +# 5055 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5707,42 +5080,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5713 "parsing/parser.ml" +# 5086 "parsing/parser.ml" in let tys = let tys = -# 2038 "parsing/parser.mly" +# 2141 "parsing/parser.mly" ( [] ) -# 5720 "parsing/parser.ml" +# 5093 "parsing/parser.ml" in -# 2044 "parsing/parser.mly" +# 2147 "parsing/parser.mly" ( tys ) -# 5725 "parsing/parser.ml" +# 5098 "parsing/parser.ml" in -# 1897 "parsing/parser.mly" +# 2000 "parsing/parser.mly" ( Pcl_constr(cid, tys) ) -# 5731 "parsing/parser.ml" +# 5104 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5740 "parsing/parser.ml" +# 5113 "parsing/parser.ml" in -# 1904 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( _1 ) -# 5746 "parsing/parser.ml" +# 5119 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5793,9 +5166,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5799 "parsing/parser.ml" +# 5172 "parsing/parser.ml" in let tys = @@ -5804,30 +5177,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5808 "parsing/parser.ml" +# 5181 "parsing/parser.ml" in -# 1021 "parsing/parser.mly" +# 1115 "parsing/parser.mly" ( xs ) -# 5813 "parsing/parser.ml" +# 5186 "parsing/parser.ml" in -# 2040 "parsing/parser.mly" +# 2143 "parsing/parser.mly" ( params ) -# 5819 "parsing/parser.ml" +# 5192 "parsing/parser.ml" in -# 2044 "parsing/parser.mly" +# 2147 "parsing/parser.mly" ( tys ) -# 5825 "parsing/parser.ml" +# 5198 "parsing/parser.ml" in -# 1897 "parsing/parser.mly" +# 2000 "parsing/parser.mly" ( Pcl_constr(cid, tys) ) -# 5831 "parsing/parser.ml" +# 5204 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5835,15 +5208,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5841 "parsing/parser.ml" +# 5214 "parsing/parser.ml" in -# 1904 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( _1 ) -# 5847 "parsing/parser.ml" +# 5220 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5902,43 +5275,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5906 "parsing/parser.ml" +# 5279 "parsing/parser.ml" in -# 1931 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( _1 ) -# 5911 "parsing/parser.ml" +# 5284 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 881 "parsing/parser.mly" +# 954 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 5920 "parsing/parser.ml" +# 5293 "parsing/parser.ml" in -# 1918 "parsing/parser.mly" +# 2021 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 5926 "parsing/parser.ml" +# 5299 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 5934 "parsing/parser.ml" +# 5307 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1899 "parsing/parser.mly" +# 2002 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 5942 "parsing/parser.ml" +# 5315 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -5946,15 +5319,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5952 "parsing/parser.ml" +# 5325 "parsing/parser.ml" in -# 1904 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( _1 ) -# 5958 "parsing/parser.ml" +# 5331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6006,24 +5379,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1901 "parsing/parser.mly" +# 2004 "parsing/parser.mly" ( Pcl_constraint(_2, _4) ) -# 6012 "parsing/parser.ml" +# 5385 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6021 "parsing/parser.ml" +# 5394 "parsing/parser.ml" in -# 1904 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( _1 ) -# 6027 "parsing/parser.ml" +# 5400 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6078,9 +5451,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1903 "parsing/parser.mly" +# 2006 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 6084 "parsing/parser.ml" +# 5457 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -6088,15 +5461,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "parsing/parser.mly" +# 1013 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6094 "parsing/parser.ml" +# 5467 "parsing/parser.ml" in -# 1904 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( _1 ) -# 6100 "parsing/parser.ml" +# 5473 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6153,44 +5526,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 6157 "parsing/parser.ml" +# 5530 "parsing/parser.ml" in -# 1931 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( _1 ) -# 6162 "parsing/parser.ml" +# 5535 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 881 "parsing/parser.mly" +# 954 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 6171 "parsing/parser.ml" +# 5544 "parsing/parser.ml" in -# 1918 "parsing/parser.mly" +# 2021 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 6177 "parsing/parser.ml" +# 5550 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 6185 "parsing/parser.ml" +# 5558 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1906 "parsing/parser.mly" +# 2009 "parsing/parser.mly" ( mkclass ~loc:_sloc ~attrs:_2 (Pcl_structure _3) ) -# 6194 "parsing/parser.ml" +# 5567 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6213,9 +5586,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = -# 2009 "parsing/parser.mly" +# 2112 "parsing/parser.mly" ( _1 ) -# 6219 "parsing/parser.ml" +# 5592 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6261,14 +5634,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3345 "parsing/parser.mly" +# 3498 "parsing/parser.mly" ( Optional label ) -# 6267 "parsing/parser.ml" +# 5640 "parsing/parser.ml" in -# 2015 "parsing/parser.mly" +# 2118 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6272 "parsing/parser.ml" +# 5645 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6276,15 +5649,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "parsing/parser.mly" +# 1007 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6282 "parsing/parser.ml" +# 5655 "parsing/parser.ml" in -# 2016 "parsing/parser.mly" +# 2119 "parsing/parser.mly" ( _1 ) -# 6288 "parsing/parser.ml" +# 5661 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6331,9 +5704,9 @@ module Tables = struct let domain : (Parsetree.core_type) = Obj.magic domain in let _2 : unit = Obj.magic _2 in let label : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 6337 "parsing/parser.ml" +# 5710 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -6341,14 +5714,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3347 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( Labelled label ) -# 6347 "parsing/parser.ml" +# 5720 "parsing/parser.ml" in -# 2015 "parsing/parser.mly" +# 2118 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6352 "parsing/parser.ml" +# 5725 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6356,15 +5729,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "parsing/parser.mly" +# 1007 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6362 "parsing/parser.ml" +# 5735 "parsing/parser.ml" in -# 2016 "parsing/parser.mly" +# 2119 "parsing/parser.mly" ( _1 ) -# 6368 "parsing/parser.ml" +# 5741 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6403,14 +5776,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3349 "parsing/parser.mly" +# 3502 "parsing/parser.mly" ( Nolabel ) -# 6409 "parsing/parser.ml" +# 5782 "parsing/parser.ml" in -# 2015 "parsing/parser.mly" +# 2118 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6414 "parsing/parser.ml" +# 5787 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_domain_) in @@ -6418,15 +5791,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "parsing/parser.mly" +# 1007 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6424 "parsing/parser.ml" +# 5797 "parsing/parser.ml" in -# 2016 "parsing/parser.mly" +# 2119 "parsing/parser.mly" ( _1 ) -# 6430 "parsing/parser.ml" +# 5803 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6509,9 +5882,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _8 : unit = Obj.magic _8 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 6515 "parsing/parser.ml" +# 5888 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -6527,9 +5900,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 6533 "parsing/parser.ml" +# 5906 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -6539,24 +5912,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 6545 "parsing/parser.ml" +# 5918 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 6553 "parsing/parser.ml" +# 5926 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2154 "parsing/parser.mly" +# 2257 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -6564,19 +5937,19 @@ module Tables = struct ext, Ci.mk id csig ~virt ~params ~attrs ~loc ~docs ) -# 6568 "parsing/parser.ml" +# 5941 "parsing/parser.ml" in -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 6574 "parsing/parser.ml" +# 5947 "parsing/parser.ml" in -# 2142 "parsing/parser.mly" +# 2245 "parsing/parser.mly" ( _1 ) -# 6580 "parsing/parser.ml" +# 5953 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6599,9 +5972,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3634 "parsing/parser.mly" +# 3843 "parsing/parser.mly" ( _1 ) -# 6605 "parsing/parser.ml" +# 5978 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6620,17 +5993,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 691 "parsing/parser.mly" +# 764 "parsing/parser.mly" (string * char option) -# 6626 "parsing/parser.ml" +# 5999 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3517 "parsing/parser.mly" +# 3726 "parsing/parser.mly" ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 6634 "parsing/parser.ml" +# 6007 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6649,17 +6022,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 650 "parsing/parser.mly" +# 723 "parsing/parser.mly" (char) -# 6655 "parsing/parser.ml" +# 6028 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3518 "parsing/parser.mly" +# 3727 "parsing/parser.mly" ( Pconst_char _1 ) -# 6663 "parsing/parser.ml" +# 6036 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6678,17 +6051,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 743 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * Location.t * string option) -# 6684 "parsing/parser.ml" +# 6057 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3519 "parsing/parser.mly" +# 3728 "parsing/parser.mly" ( let (s, strloc, d) = _1 in Pconst_string (s, strloc, d) ) -# 6692 "parsing/parser.ml" +# 6065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6707,17 +6080,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 670 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * char option) -# 6713 "parsing/parser.ml" +# 6086 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3520 "parsing/parser.mly" +# 3729 "parsing/parser.mly" ( let (f, m) = _1 in Pconst_float (f, m) ) -# 6721 "parsing/parser.ml" +# 6094 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6747,9 +6120,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3591 "parsing/parser.mly" +# 3800 "parsing/parser.mly" ( "[]" ) -# 6753 "parsing/parser.ml" +# 6126 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6779,9 +6152,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3592 "parsing/parser.mly" +# 3801 "parsing/parser.mly" ( "()" ) -# 6785 "parsing/parser.ml" +# 6158 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6804,9 +6177,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3593 "parsing/parser.mly" +# 3802 "parsing/parser.mly" ( "false" ) -# 6810 "parsing/parser.ml" +# 6183 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6829,9 +6202,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3594 "parsing/parser.mly" +# 3803 "parsing/parser.mly" ( "true" ) -# 6835 "parsing/parser.ml" +# 6208 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6850,17 +6223,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 6856 "parsing/parser.ml" +# 6229 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3597 "parsing/parser.mly" +# 3806 "parsing/parser.mly" ( _1 ) -# 6864 "parsing/parser.ml" +# 6237 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6897,14 +6270,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Asttypes.label) = let _1 = -# 3588 "parsing/parser.mly" +# 3797 "parsing/parser.mly" ( "::" ) -# 6903 "parsing/parser.ml" +# 6276 "parsing/parser.ml" in -# 3598 "parsing/parser.mly" +# 3807 "parsing/parser.mly" ( _1 ) -# 6908 "parsing/parser.ml" +# 6281 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6927,9 +6300,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3599 "parsing/parser.mly" +# 3808 "parsing/parser.mly" ( _1 ) -# 6933 "parsing/parser.ml" +# 6306 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6952,9 +6325,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3602 "parsing/parser.mly" +# 3811 "parsing/parser.mly" ( _1 ) -# 6958 "parsing/parser.ml" +# 6331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7005,14 +6378,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = let _3 = -# 3588 "parsing/parser.mly" +# 3797 "parsing/parser.mly" ( "::" ) -# 7011 "parsing/parser.ml" +# 6384 "parsing/parser.ml" in -# 3603 "parsing/parser.mly" +# 3812 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 7016 "parsing/parser.ml" +# 6389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7049,14 +6422,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = -# 3588 "parsing/parser.mly" +# 3797 "parsing/parser.mly" ( "::" ) -# 7055 "parsing/parser.ml" +# 6428 "parsing/parser.ml" in -# 3604 "parsing/parser.mly" +# 3813 "parsing/parser.mly" ( Lident _1 ) -# 7060 "parsing/parser.ml" +# 6433 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7079,9 +6452,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3605 "parsing/parser.mly" +# 3814 "parsing/parser.mly" ( Lident _1 ) -# 7085 "parsing/parser.ml" +# 6458 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7118,9 +6491,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type * Parsetree.core_type) = -# 2098 "parsing/parser.mly" +# 2201 "parsing/parser.mly" ( _1, _3 ) -# 7124 "parsing/parser.ml" +# 6497 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7145,26 +6518,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 7151 "parsing/parser.ml" +# 6524 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 7156 "parsing/parser.ml" +# 6529 "parsing/parser.ml" in -# 1025 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 7162 "parsing/parser.ml" +# 6535 "parsing/parser.ml" in -# 3148 "parsing/parser.mly" +# 3301 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 7168 "parsing/parser.ml" +# 6541 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7203,26 +6576,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 7209 "parsing/parser.ml" +# 6582 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 7214 "parsing/parser.ml" +# 6587 "parsing/parser.ml" in -# 1025 "parsing/parser.mly" +# 1119 "parsing/parser.mly" ( xs ) -# 7220 "parsing/parser.ml" +# 6593 "parsing/parser.ml" in -# 3148 "parsing/parser.mly" +# 3301 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 7226 "parsing/parser.ml" +# 6599 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7259,9 +6632,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.constructor_arguments) = -# 3150 "parsing/parser.mly" +# 3303 "parsing/parser.mly" ( Pcstr_record _2 ) -# 7265 "parsing/parser.ml" +# 6638 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7284,9 +6657,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constructor_declaration list) = -# 3064 "parsing/parser.mly" +# 3217 "parsing/parser.mly" ( [] ) -# 7290 "parsing/parser.ml" +# 6663 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7309,14 +6682,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.constructor_declaration list) = let cs = -# 1110 "parsing/parser.mly" +# 1204 "parsing/parser.mly" ( List.rev xs ) -# 7315 "parsing/parser.ml" +# 6688 "parsing/parser.ml" in -# 3066 "parsing/parser.mly" +# 3219 "parsing/parser.mly" ( cs ) -# 7320 "parsing/parser.ml" +# 6693 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7339,14 +6712,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 7345 "parsing/parser.ml" +# 6718 "parsing/parser.ml" in -# 3297 "parsing/parser.mly" +# 3450 "parsing/parser.mly" ( _1 ) -# 7350 "parsing/parser.ml" +# 6723 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7376,9 +6749,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 3299 "parsing/parser.mly" +# 3452 "parsing/parser.mly" ( Typ.attr _1 _2 ) -# 7382 "parsing/parser.ml" +# 6755 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7396,14 +6769,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Asttypes.direction_flag) = -# 3700 "parsing/parser.mly" - ( Upto ) -# 7407 "parsing/parser.ml" + let _v : (Parsetree.core_type) = +# 3600 "parsing/parser.mly" + ( _1 ) +# 6780 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7421,14 +6794,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Asttypes.direction_flag) = -# 3701 "parsing/parser.mly" - ( Downto ) -# 7432 "parsing/parser.ml" + let _v : (Parsetree.core_type) = +# 3600 "parsing/parser.mly" + ( _1 ) +# 6805 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7446,14 +6819,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.expression) = -# 2265 "parsing/parser.mly" - ( _1 ) -# 7457 "parsing/parser.ml" + let _v : (Parsetree.core_type) = +# 3600 "parsing/parser.mly" + ( _1 ) +# 6830 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7466,107 +6839,33 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined3 : (string option) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _3 : unit = Obj.magic _3 in + let type_ : (Parsetree.core_type) = Obj.magic type_ in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 7537 "parsing/parser.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 7547 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 7553 "parsing/parser.ml" - - in - -# 2298 "parsing/parser.mly" - ( Pexp_letmodule(_4, _5, _7), _3 ) -# 7559 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7570 "parsing/parser.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.core_type) = +# 3553 "parsing/parser.mly" + ( type_ ) +# 6869 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7579,135 +6878,86 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _2_inlined1 : (Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic _2_inlined1 in - let _1_inlined3 : (Asttypes.label) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined4, _2_inlined1, _1_inlined3) in - let _3 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 7657 "parsing/parser.ml" - - in - let _endpos__3_ = _endpos__1_inlined1_ in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 7668 "parsing/parser.ml" - - in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3128 "parsing/parser.mly" - ( let vars, args, res = _2 in - Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) -# 7678 "parsing/parser.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.core_type) = let package_type = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 6936 "parsing/parser.ml" + + in + let attrs = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 7688 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 7694 "parsing/parser.ml" +# 6946 "parsing/parser.ml" in -# 2300 "parsing/parser.mly" - ( Pexp_letexception(_4, _6), _3 ) -# 7700 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 6952 "parsing/parser.ml" in - let _endpos__1_ = _endpos__6_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7711 "parsing/parser.ml" +# 3555 "parsing/parser.mly" + ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc package_type) attrs ) +# 6961 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7720,96 +6970,49 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = field; + MenhirLib.EngineTypes.startp = _startpos_field_; + MenhirLib.EngineTypes.endp = _endpos_field_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _3 : unit = Obj.magic _3 in + let field : (Parsetree.row_field) = Obj.magic field in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 7783 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 7789 "parsing/parser.ml" - - in - let _3 = -# 3755 "parsing/parser.mly" - ( Fresh ) -# 7795 "parsing/parser.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3558 "parsing/parser.mly" + ( Ptyp_variant([ field ], Closed, None) ) +# 7001 "parsing/parser.ml" in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2302 "parsing/parser.mly" - ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in - let od = Opn.mk _5 ~override:_3 ~loc:open_loc in - Pexp_open(od, _7), _4 ) -# 7802 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7010 "parsing/parser.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7813 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7822,103 +7025,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _4 : unit = Obj.magic _4 in + let xs : (Parsetree.row_field list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_1_inlined1, _1) = (_1_inlined3, _1_inlined2) in - let _2 = - let _1 = _1_inlined1 in + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7066 "parsing/parser.ml" + in + +# 1115 "parsing/parser.mly" + ( xs ) +# 7071 "parsing/parser.ml" + + in -# 3853 "parsing/parser.mly" +# 3652 "parsing/parser.mly" ( _1 ) -# 7892 "parsing/parser.ml" +# 7077 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 7898 "parsing/parser.ml" +# 3560 "parsing/parser.mly" + ( Ptyp_variant(fields, Closed, None) ) +# 7083 "parsing/parser.ml" in - let _3 = -# 3756 "parsing/parser.mly" - ( Override ) -# 7904 "parsing/parser.ml" - in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2302 "parsing/parser.mly" - ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in - let od = Opn.mk _5 ~override:_3 ~loc:open_loc in - Pexp_open(od, _7), _4 ) -# 7911 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7093 "parsing/parser.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7922 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7099 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7931,87 +7108,84 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = field; + MenhirLib.EngineTypes.startp = _startpos_field_; + MenhirLib.EngineTypes.endp = _endpos_field_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in - let xs : (Parsetree.case list) = Obj.magic xs in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let field : (Parsetree.row_field) = Obj.magic field in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _3 = - let xs = - let xs = + let _endpos = _endpos__5_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 7971 "parsing/parser.ml" - in - -# 1082 "parsing/parser.mly" +# 7156 "parsing/parser.ml" + in + +# 1115 "parsing/parser.mly" ( xs ) -# 7976 "parsing/parser.ml" +# 7161 "parsing/parser.ml" + + in + +# 3652 "parsing/parser.mly" + ( _1 ) +# 7167 "parsing/parser.ml" in -# 2611 "parsing/parser.mly" - ( xs ) -# 7982 "parsing/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 7992 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 7998 "parsing/parser.ml" +# 3562 "parsing/parser.mly" + ( Ptyp_variant(field :: fields, Closed, None) ) +# 7173 "parsing/parser.ml" in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2306 "parsing/parser.mly" - ( Pexp_function _3, _2 ) -# 8004 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7183 "parsing/parser.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8015 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7189 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8029,71 +7203,72 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _4 : unit = Obj.magic _4 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7239 "parsing/parser.ml" + in + +# 1115 "parsing/parser.mly" + ( xs ) +# 7244 "parsing/parser.ml" + + in -# 3853 "parsing/parser.mly" +# 3652 "parsing/parser.mly" ( _1 ) -# 8073 "parsing/parser.ml" +# 7250 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8079 "parsing/parser.ml" +# 3564 "parsing/parser.mly" + ( Ptyp_variant(fields, Open, None) ) +# 7256 "parsing/parser.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2308 "parsing/parser.mly" - ( let (l,o,p) = _3 in - Pexp_fun(l, o, p, _4), _2 ) -# 8086 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7266 "parsing/parser.ml" in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8097 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7272 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8106,104 +7281,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let xs : (string Asttypes.loc list) = Obj.magic xs in - let _4 : unit = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _1 = - let _5 = -# 2495 "parsing/parser.mly" - ( xs ) -# 8172 "parsing/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3566 "parsing/parser.mly" + ( Ptyp_variant([], Open, None) ) +# 7305 "parsing/parser.ml" in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 8181 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8187 "parsing/parser.ml" - - in - let _endpos = _endpos__7_ in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2311 "parsing/parser.mly" - ( (mk_newtypes ~loc:_sloc _5 _7).pexp_desc, _2 ) -# 8196 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7314 "parsing/parser.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8207 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7320 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8216,101 +7329,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let xs : (Parsetree.case list) = Obj.magic xs in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _5 = - let xs = - let xs = + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 8270 "parsing/parser.ml" - in - -# 1082 "parsing/parser.mly" - ( xs ) -# 8275 "parsing/parser.ml" - - in - -# 2611 "parsing/parser.mly" +# 7370 "parsing/parser.ml" + in + +# 1115 "parsing/parser.mly" ( xs ) -# 8281 "parsing/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in +# 7375 "parsing/parser.ml" + + in -# 3853 "parsing/parser.mly" +# 3652 "parsing/parser.mly" ( _1 ) -# 8291 "parsing/parser.ml" +# 7381 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8297 "parsing/parser.ml" +# 3568 "parsing/parser.mly" + ( Ptyp_variant(fields, Closed, Some []) ) +# 7387 "parsing/parser.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2313 "parsing/parser.mly" - ( Pexp_match(_3, _5), _2 ) -# 8303 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7397 "parsing/parser.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8314 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7403 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8323,29 +7412,29 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -8358,66 +7447,76 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.case list) = Obj.magic xs in + let _6 : unit = Obj.magic _6 in + let xs_inlined1 : (Asttypes.label list) = Obj.magic xs_inlined1 in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _5 = - let xs = - let xs = + let _endpos = _endpos__6_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let tags = + let xs = xs_inlined1 in + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 8377 "parsing/parser.ml" - in - -# 1082 "parsing/parser.mly" +# 7468 "parsing/parser.ml" + in + +# 1062 "parsing/parser.mly" ( xs ) -# 8382 "parsing/parser.ml" +# 7473 "parsing/parser.ml" + + in + +# 3680 "parsing/parser.mly" + ( _1 ) +# 7479 "parsing/parser.ml" in - -# 2611 "parsing/parser.mly" + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7487 "parsing/parser.ml" + in + +# 1115 "parsing/parser.mly" ( xs ) -# 8388 "parsing/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in +# 7492 "parsing/parser.ml" + + in -# 3853 "parsing/parser.mly" +# 3652 "parsing/parser.mly" ( _1 ) -# 8398 "parsing/parser.ml" +# 7498 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8404 "parsing/parser.ml" +# 3573 "parsing/parser.mly" + ( Ptyp_variant(fields, Closed, Some tags) ) +# 7504 "parsing/parser.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2315 "parsing/parser.mly" - ( Pexp_try(_3, _5), _2 ) -# 8410 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7514 "parsing/parser.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8421 "parsing/parser.ml" +# 3575 "parsing/parser.mly" + ( _1 ) +# 7520 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8429,83 +7528,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 8486 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8492 "parsing/parser.ml" - - in - -# 2317 "parsing/parser.mly" - ( syntax_error() ) -# 8498 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8509 "parsing/parser.ml" + let _v : (Asttypes.direction_flag) = +# 3909 "parsing/parser.mly" + ( Upto ) +# 7545 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8517,97 +7553,38 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 8588 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8594 "parsing/parser.ml" - - in - -# 2319 "parsing/parser.mly" - ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) -# 8600 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__7_ in let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8611 "parsing/parser.ml" + let _v : (Asttypes.direction_flag) = +# 3910 "parsing/parser.mly" + ( Downto ) +# 7570 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string Asttypes.loc option) = +# 4065 "parsing/parser.mly" + ( None ) +# 7588 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8620,82 +7597,26 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _2 : (Ast_helper.str) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 8676 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8682 "parsing/parser.ml" - - in - -# 2321 "parsing/parser.mly" - ( Pexp_ifthenelse(_3, _5, None), _2 ) -# 8688 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__5_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8699 "parsing/parser.ml" + let _endpos = _endpos__2_ in + let _v : (string Asttypes.loc option) = +# 4066 "parsing/parser.mly" + ( Some _2 ) +# 7620 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8708,89 +7629,40 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Ast_helper.str) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 8771 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8777 "parsing/parser.ml" - - in - -# 2323 "parsing/parser.mly" - ( Pexp_while(_3, _5), _2 ) -# 8783 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__6_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8794 "parsing/parser.ml" + let _endpos = _endpos__4_ in + let _v : (Parsetree.extension) = +# 4078 "parsing/parser.mly" + ( (_2, _3) ) +# 7666 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8802,118 +7674,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.expression) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : (Asttypes.direction_flag) = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 818 "parsing/parser.mly" + (string * Location.t * string * Location.t * string option) +# 7687 "parsing/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__10_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 8894 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8900 "parsing/parser.ml" - - in - -# 2326 "parsing/parser.mly" - ( Pexp_for(_3, _5, _7, _6, _9), _2 ) -# 8906 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__10_ in let _endpos = _endpos__1_ in + let _v : (Parsetree.extension) = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8917 "parsing/parser.ml" +# 4080 "parsing/parser.mly" + ( mk_quotedext ~loc:_sloc _1 ) +# 7698 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8926,9 +7707,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -8936,58 +7717,72 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Longident.t) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.extension_constructor) = let attrs = + let _1 = _1_inlined3 in + +# 4062 "parsing/parser.mly" ( _1 ) -# 8968 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 8974 "parsing/parser.ml" - - in +# 7753 "parsing/parser.ml" -# 2328 "parsing/parser.mly" - ( Pexp_assert _3, _2 ) -# 8980 "parsing/parser.ml" + in + let _endpos_attrs_ = _endpos__1_inlined3_ in + let lid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 7765 "parsing/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let cid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 7776 "parsing/parser.ml" + + in + let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8991 "parsing/parser.ml" +# 3370 "parsing/parser.mly" + ( let info = symbol_info _endpos in + Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) +# 7786 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9000,19 +7795,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -9023,45 +7818,57 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let _1 : (Asttypes.label) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3853 "parsing/parser.mly" + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.extension_constructor) = let attrs = + let _1 = _1_inlined2 in + +# 4062 "parsing/parser.mly" ( _1 ) -# 9042 "parsing/parser.ml" - - in - -# 3866 "parsing/parser.mly" - ( _1, _2 ) -# 9048 "parsing/parser.ml" - - in +# 7834 "parsing/parser.ml" -# 2330 "parsing/parser.mly" - ( Pexp_lazy _3, _2 ) -# 9054 "parsing/parser.ml" + in + let _endpos_attrs_ = _endpos__1_inlined2_ in + let lid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 7846 "parsing/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let cid = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 7856 "parsing/parser.ml" + + in + let _startpos_cid_ = _startpos__1_ in + let _1 = +# 3883 "parsing/parser.mly" + ( () ) +# 7863 "parsing/parser.ml" + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 2267 "parsing/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 9065 "parsing/parser.ml" +# 3370 "parsing/parser.mly" + ( let info = symbol_info _endpos in + Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) +# 7872 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9073,57 +7880,36 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let xs : ((Asttypes.arg_label * Parsetree.expression) list) = Obj.magic xs in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let ext : (Parsetree.extension) = Obj.magic ext in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 9100 "parsing/parser.ml" - in - -# 989 "parsing/parser.mly" - ( xs ) -# 9105 "parsing/parser.ml" - - in - -# 2334 "parsing/parser.mly" - ( Pexp_apply(_1, _2) ) -# 9111 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos_xs_ in + let _startpos = _startpos_ext_ in + let _endpos = _endpos_ext_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3591 "parsing/parser.mly" + ( Ptyp_extension ext ) +# 7898 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_ext_, _startpos_ext_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9121 "parsing/parser.ml" +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7907 "parsing/parser.ml" in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9127 "parsing/parser.ml" +# 3593 "parsing/parser.mly" + ( _1 ) +# 7913 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9135,117 +7921,45 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let xs : (Parsetree.expression list) = Obj.magic xs in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let _1 = - let es = - let xs = -# 253 "" - ( List.rev xs ) -# 9156 "parsing/parser.ml" - in - -# 1049 "parsing/parser.mly" - ( xs ) -# 9161 "parsing/parser.ml" - - in - -# 2638 "parsing/parser.mly" - ( es ) -# 9167 "parsing/parser.ml" - - in - -# 2336 "parsing/parser.mly" - ( Pexp_tuple(_1) ) -# 9173 "parsing/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9183 "parsing/parser.ml" - - in - -# 2270 "parsing/parser.mly" - ( _1 ) -# 9189 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Ast_helper.str) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 9227 "parsing/parser.ml" - - in - -# 2338 "parsing/parser.mly" - ( Pexp_construct(_1, Some _2) ) -# 9233 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9243 "parsing/parser.ml" - - in + let _endpos = _endpos__4_ in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9249 "parsing/parser.ml" +# 4053 "parsing/parser.mly" + ( mark_symbol_docs _sloc; + mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 7963 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9256,44 +7970,19 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Asttypes.label) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2340 "parsing/parser.mly" - ( Pexp_variant(_1, Some _2) ) -# 9282 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9291 "parsing/parser.ml" - - in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = +# 2141 "parsing/parser.mly" + ( [] ) +# 7981 "parsing/parser.ml" + in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9297 "parsing/parser.ml" +# 1966 "parsing/parser.mly" + ( params ) +# 7986 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9306,71 +7995,52 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 681 "parsing/parser.mly" - (string) -# 9331 "parsing/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _3 : unit = Obj.magic _3 in + let xs : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic xs in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3561 "parsing/parser.mly" - ( op ) -# 9343 "parsing/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9352 "parsing/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = + let params = + let xs = +# 253 "" + ( List.rev xs ) +# 8027 "parsing/parser.ml" + in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9358 "parsing/parser.ml" +# 1115 "parsing/parser.mly" + ( xs ) +# 8032 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9368 "parsing/parser.ml" +# 2143 "parsing/parser.mly" + ( params ) +# 8038 "parsing/parser.ml" in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9374 "parsing/parser.ml" +# 1966 "parsing/parser.mly" + ( params ) +# 8044 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9383,71 +8053,87 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 682 "parsing/parser.mly" - (string) -# 9408 "parsing/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3562 "parsing/parser.mly" - ( op ) -# 9420 "parsing/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9429 "parsing/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.function_body) = let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8092 "parsing/parser.ml" + in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9435 "parsing/parser.ml" +# 1176 "parsing/parser.mly" + ( xs ) +# 8097 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9445 "parsing/parser.ml" +# 2756 "parsing/parser.mly" + ( xs ) +# 8103 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 8114 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8120 "parsing/parser.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9451 "parsing/parser.ml" +# 2742 "parsing/parser.mly" + ( let ext, attrs = _2 in + match ext with + | None -> Pfunction_cases (_3, make_loc _sloc, attrs) + | Some _ -> + (* function%foo extension nodes interrupt the arity *) + let cases = Pfunction_cases (_3, make_loc _sloc, []) in + Pfunction_body + (mkexp_attrs ~loc:_sloc (mkfunction [] None cases) _2) + ) +# 8137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9459,72 +8145,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 683 "parsing/parser.mly" - (string) -# 9485 "parsing/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3563 "parsing/parser.mly" - ( op ) -# 9497 "parsing/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9506 "parsing/parser.ml" - - in - -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9512 "parsing/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9522 "parsing/parser.ml" - - in - -# 2270 "parsing/parser.mly" - ( _1 ) -# 9528 "parsing/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.function_body) = +# 2752 "parsing/parser.mly" + ( Pfunction_body _1 ) +# 8162 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9536,72 +8170,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 684 "parsing/parser.mly" - (string) -# 9562 "parsing/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3564 "parsing/parser.mly" - ( op ) -# 9574 "parsing/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9583 "parsing/parser.ml" - - in - -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9589 "parsing/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9599 "parsing/parser.ml" - - in - -# 2270 "parsing/parser.mly" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression) = +# 2399 "parsing/parser.mly" ( _1 ) -# 9605 "parsing/parser.ml" +# 8187 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9614,71 +8196,107 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 685 "parsing/parser.mly" - (string) -# 9639 "parsing/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined3 : (string option) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3565 "parsing/parser.mly" - ( op ) -# 9651 "parsing/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 8267 "parsing/parser.ml" + + in + let _3 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9660 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 8277 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9666 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8283 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9676 "parsing/parser.ml" +# 2435 "parsing/parser.mly" + ( Pexp_letmodule(_4, _5, _7), _3 ) +# 8289 "parsing/parser.ml" in + let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9682 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8300 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9691,138 +8309,135 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3566 "parsing/parser.mly" - ("+") -# 9724 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9732 "parsing/parser.ml" - - in - -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9738 "parsing/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9748 "parsing/parser.ml" - - in - -# 2270 "parsing/parser.mly" - ( _1 ) -# 9754 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _6 : (Parsetree.expression) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _2_inlined1 : (Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic _2_inlined1 in + let _1_inlined3 : (Asttypes.label) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3567 "parsing/parser.mly" - ("+.") -# 9796 "parsing/parser.ml" - in + let _4 = + let (_endpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined4, _2_inlined1, _1_inlined3) in + let _3 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 8387 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9804 "parsing/parser.ml" +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 8398 "parsing/parser.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9810 "parsing/parser.ml" +# 3281 "parsing/parser.mly" + ( let vars, args, res = _2 in + Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) +# 8408 "parsing/parser.ml" + + in + let _3 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 8418 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8424 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9820 "parsing/parser.ml" +# 2437 "parsing/parser.mly" + ( Pexp_letexception(_4, _6), _3 ) +# 8430 "parsing/parser.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9826 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8441 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9835,66 +8450,96 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3568 "parsing/parser.mly" - ("+=") -# 9868 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _4 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9876 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 8513 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9882 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8519 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _3 = +# 3964 "parsing/parser.mly" + ( Fresh ) +# 8525 "parsing/parser.ml" + in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9892 "parsing/parser.ml" +# 2439 "parsing/parser.mly" + ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in + let od = Opn.mk _5 ~override:_3 ~loc:open_loc in + Pexp_open(od, _7), _4 ) +# 8532 "parsing/parser.ml" in + let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9898 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9907,66 +8552,103 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3569 "parsing/parser.mly" - ("-") -# 9940 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _4 = + let (_1_inlined1, _1) = (_1_inlined3, _1_inlined2) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9948 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 8622 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 9954 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8628 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _3 = +# 3965 "parsing/parser.mly" + ( Override ) +# 8634 "parsing/parser.ml" + in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9964 "parsing/parser.ml" +# 2439 "parsing/parser.mly" + ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in + let od = Opn.mk _5 ~override:_3 ~loc:open_loc in + Pexp_open(od, _7), _4 ) +# 8641 "parsing/parser.ml" in + let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 9970 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8652 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9979,66 +8661,91 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _6 : (Parsetree.function_body) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.core_type option) = Obj.magic _4 in + let _3 : (Parsetree.function_param list) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3570 "parsing/parser.mly" - ("-.") -# 10012 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10020 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 8724 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10026 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8730 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10036 "parsing/parser.ml" +# 2445 "parsing/parser.mly" + ( let body_constraint = Option.map (fun x -> Pconstraint x) _4 in + mkfunction _3 body_constraint _6, _2 + ) +# 8738 "parsing/parser.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10042 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8749 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10051,66 +8758,101 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3571 "parsing/parser.mly" - ("*") -# 10084 "parsing/parser.ml" + let _5 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8812 "parsing/parser.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10092 "parsing/parser.ml" +# 1176 "parsing/parser.mly" + ( xs ) +# 8817 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10098 "parsing/parser.ml" +# 2756 "parsing/parser.mly" + ( xs ) +# 8823 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 8833 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8839 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10108 "parsing/parser.ml" +# 2449 "parsing/parser.mly" + ( Pexp_match(_3, _5), _2 ) +# 8845 "parsing/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10114 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8856 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10123,138 +8865,101 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3572 "parsing/parser.mly" - ("%") -# 10156 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10164 "parsing/parser.ml" - - in - -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10170 "parsing/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10180 "parsing/parser.ml" - - in - -# 2270 "parsing/parser.mly" - ( _1 ) -# 10186 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3573 "parsing/parser.mly" - ("=") -# 10228 "parsing/parser.ml" + let _5 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8919 "parsing/parser.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10236 "parsing/parser.ml" +# 1176 "parsing/parser.mly" + ( xs ) +# 8924 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10242 "parsing/parser.ml" +# 2756 "parsing/parser.mly" + ( xs ) +# 8930 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 8940 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 8946 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10252 "parsing/parser.ml" +# 2451 "parsing/parser.mly" + ( Pexp_try(_3, _5), _2 ) +# 8952 "parsing/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10258 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8963 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10267,66 +8972,82 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _5 : unit = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3574 "parsing/parser.mly" - ("<") -# 10300 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10308 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 9028 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10314 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9034 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10324 "parsing/parser.ml" +# 2453 "parsing/parser.mly" + ( syntax_error() ) +# 9040 "parsing/parser.ml" in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10330 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9051 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10339,66 +9060,122 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined4 : (Parsetree.expression) = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined4_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3575 "parsing/parser.mly" - (">") -# 10372 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _7 = + let _1 = _1_inlined4 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 9128 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 9133 "parsing/parser.ml" + + in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 9141 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 9146 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10380 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 9156 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10386 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9162 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10396 "parsing/parser.ml" +# 2455 "parsing/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9168 "parsing/parser.ml" in + let _endpos__1_ = _endpos__1_inlined4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10402 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9179 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10411,66 +9188,195 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined6 : (Parsetree.attributes) = Obj.magic _1_inlined6 in + let _1_inlined5 : (string Asttypes.loc option) = Obj.magic _1_inlined5 in + let _1_inlined4 : unit = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3576 "parsing/parser.mly" - ("or") -# 10444 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in + let _7 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined4_, _1_inlined6, _1_inlined5) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9280 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 9285 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 9291 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9302 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9308 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10452 "parsing/parser.ml" +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9328 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10458 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 9334 "parsing/parser.ml" + + in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 9342 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 9347 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9357 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9363 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10468 "parsing/parser.ml" +# 2455 "parsing/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9369 "parsing/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10474 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9380 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10483,66 +9389,195 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined6 : (Parsetree.expression) = Obj.magic _1_inlined6 in + let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Asttypes.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3577 "parsing/parser.mly" - ("||") -# 10516 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10524 "parsing/parser.ml" - - in + let _7 = + let _1 = _1_inlined6 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 9478 "parsing/parser.ml" + in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10530 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 9483 "parsing/parser.ml" + + in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9494 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 9499 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 9505 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9516 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9522 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9542 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 9548 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9558 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9564 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10540 "parsing/parser.ml" +# 2455 "parsing/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9570 "parsing/parser.ml" in + let _endpos__1_ = _endpos__1_inlined6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10546 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9581 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10555,66 +9590,268 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined8; + MenhirLib.EngineTypes.startp = _startpos__1_inlined8_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined8_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined7; + MenhirLib.EngineTypes.startp = _startpos__1_inlined7_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined8 : (Parsetree.attributes) = Obj.magic _1_inlined8 in + let _1_inlined7 : (string Asttypes.loc option) = Obj.magic _1_inlined7 in + let _1_inlined6 : unit = Obj.magic _1_inlined6 in + let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Asttypes.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3578 "parsing/parser.mly" - ("&") -# 10588 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in + let _7 = + let (_endpos_xs_, _startpos__1_, xs, _1_inlined2, _1_inlined1) = (_endpos_xs_inlined1_, _startpos__1_inlined6_, xs_inlined1, _1_inlined8, _1_inlined7) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9703 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 9708 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 9714 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9725 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9731 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10596 "parsing/parser.ml" +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9751 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10602 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 9757 "parsing/parser.ml" + + in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9768 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 9773 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 9779 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9790 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9796 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9816 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 9822 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 9832 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9838 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10612 "parsing/parser.ml" +# 2455 "parsing/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9844 "parsing/parser.ml" in + let _endpos__1_ = _endpos_xs_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10618 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9855 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10627,66 +9864,95 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3579 "parsing/parser.mly" - ("&&") -# 10660 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 9918 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 9923 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10668 "parsing/parser.ml" +# 4062 "parsing/parser.mly" + ( _1 ) +# 9933 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10674 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 9939 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10684 "parsing/parser.ml" +# 2457 "parsing/parser.mly" + ( Pexp_ifthenelse(_3, _5, None), _2 ) +# 9945 "parsing/parser.ml" in + let _endpos__1_ = _endpos__1_inlined3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10690 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9956 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10699,66 +9965,168 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Asttypes.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3580 "parsing/parser.mly" - (":=") -# 10732 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 10043 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 10048 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 10054 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10065 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10071 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10740 "parsing/parser.ml" +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 10091 "parsing/parser.ml" in -# 2342 "parsing/parser.mly" - ( mkinfix e1 op e2 ) -# 10746 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 10097 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10107 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10113 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10756 "parsing/parser.ml" +# 2457 "parsing/parser.mly" + ( Pexp_ifthenelse(_3, _5, None), _2 ) +# 10119 "parsing/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10762 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10130 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10771,45 +10139,94 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in + let _endpos = _endpos__3_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _4 = +# 2470 "parsing/parser.mly" + ( e ) +# 10198 "parsing/parser.ml" + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10207 "parsing/parser.ml" + + in -# 2344 "parsing/parser.mly" - ( mkuminus ~oploc:_loc__1_ _1 _2 ) -# 10797 "parsing/parser.ml" +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10213 "parsing/parser.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10807 "parsing/parser.ml" +# 2459 "parsing/parser.mly" + ( Pexp_while(_3, _4), _2 ) +# 10219 "parsing/parser.ml" in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( _1 ) -# 10813 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10230 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10822,87 +10239,99 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 2346 "parsing/parser.mly" - ( mkuplus ~oploc:_loc__1_ _1 _2 ) -# 10848 "parsing/parser.ml" - - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10858 "parsing/parser.ml" - - in - -# 2270 "parsing/parser.mly" - ( _1 ) -# 10864 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (let_bindings) = Obj.magic _1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__3_ in + let _endpos = _endpos__3_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2472 "parsing/parser.mly" + ( unclosed "do" _loc__1_ "done" _loc__2_ ) +# 10302 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10312 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10318 "parsing/parser.ml" + + in + +# 2459 "parsing/parser.mly" + ( Pexp_while(_3, _4), _2 ) +# 10324 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2272 "parsing/parser.mly" - ( expr_of_let_bindings ~loc:_sloc _1 _3 ) -# 10906 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10335 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10915,62 +10344,122 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = bindings; - MenhirLib.EngineTypes.startp = _startpos_bindings_; - MenhirLib.EngineTypes.endp = _endpos_bindings_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; }; }; }; } = _menhir_stack in - let body : (Parsetree.expression) = Obj.magic body in - let _3 : unit = Obj.magic _3 in - let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in - let _1 : ( -# 687 "parsing/parser.mly" - (string) -# 10948 "parsing/parser.ml" - ) = Obj.magic _1 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : (Asttypes.direction_flag) = Obj.magic _6 in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.expression) = let pbop_op = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__3_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _8 = +# 2470 "parsing/parser.mly" + ( e ) +# 10431 "parsing/parser.ml" + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10440 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10446 "parsing/parser.ml" + + in -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 10960 "parsing/parser.ml" +# 2462 "parsing/parser.mly" + ( Pexp_for(_3, _5, _7, _6, _8), _2 ) +# 10452 "parsing/parser.ml" in - let _startpos_pbop_op_ = _startpos__1_ in - let _endpos = _endpos_body_ in - let _symbolstartpos = _startpos_pbop_op_ in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2274 "parsing/parser.mly" - ( let (pbop_pat, pbop_exp, rev_ands) = bindings in - let ands = List.rev rev_ands in - let pbop_loc = make_loc _sloc in - let let_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in - mkexp ~loc:_sloc (Pexp_letop{ let_; ands; body}) ) -# 10974 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10463 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10983,37 +10472,127 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : (Asttypes.direction_flag) = Obj.magic _6 in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__3_ in + let _endpos = _endpos__3_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _8 = + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2472 "parsing/parser.mly" + ( unclosed "do" _loc__1_ "done" _loc__2_ ) +# 10563 "parsing/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10573 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10579 "parsing/parser.ml" + + in + +# 2462 "parsing/parser.mly" + ( Pexp_for(_3, _5, _7, _6, _8), _2 ) +# 10585 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2280 "parsing/parser.mly" - ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) ) -# 11017 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10596 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11031,50 +10610,63 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 705 "parsing/parser.mly" - (string) -# 11052 "parsing/parser.ml" - ) = Obj.magic _1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 3511 "parsing/parser.mly" - ( _1 ) -# 11061 "parsing/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10647 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10653 "parsing/parser.ml" + + in -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 11069 "parsing/parser.ml" +# 2464 "parsing/parser.mly" + ( Pexp_assert _3, _2 ) +# 10659 "parsing/parser.ml" in - let _endpos = _endpos__3_ in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2282 "parsing/parser.mly" - ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) -# 11078 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10670 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11087,61 +10679,68 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _1 = + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 10721 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 10727 "parsing/parser.ml" + + in -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 11136 "parsing/parser.ml" +# 2466 "parsing/parser.mly" + ( Pexp_lazy _3, _2 ) +# 10733 "parsing/parser.ml" in - let _endpos = _endpos__5_ in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2284 "parsing/parser.mly" - ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) -# 11145 "parsing/parser.ml" +# 2401 "parsing/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10744 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11154,77 +10753,56 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let xs : ((Asttypes.arg_label * Parsetree.expression) list) = Obj.magic xs in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2285 "parsing/parser.mly" - (Some v) -# 11213 "parsing/parser.ml" - in + let _1 = + let _2 = + let xs = +# 253 "" + ( List.rev xs ) +# 10779 "parsing/parser.ml" + in + +# 1062 "parsing/parser.mly" + ( xs ) +# 10784 "parsing/parser.ml" + + in + +# 2476 "parsing/parser.mly" + ( Pexp_apply(_1, _2) ) +# 10790 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2245 "parsing/parser.mly" - ( array, d, Paren, i, r ) -# 11218 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 10800 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2286 "parsing/parser.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11228 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 10806 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11236,78 +10814,57 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let xs : (Parsetree.expression list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2285 "parsing/parser.mly" - (Some v) -# 11296 "parsing/parser.ml" - in + let _1 = + let _1 = + let es = + let xs = +# 253 "" + ( List.rev xs ) +# 10835 "parsing/parser.ml" + in + +# 1143 "parsing/parser.mly" + ( xs ) +# 10840 "parsing/parser.ml" + + in + +# 2791 "parsing/parser.mly" + ( es ) +# 10846 "parsing/parser.ml" + + in + +# 2478 "parsing/parser.mly" + ( Pexp_tuple(_1) ) +# 10852 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2247 "parsing/parser.mly" - ( array, d, Brace, i, r ) -# 11301 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 10862 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2286 "parsing/parser.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11311 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 10868 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11320,77 +10877,54 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2285 "parsing/parser.mly" - (Some v) -# 11379 "parsing/parser.ml" - in + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 10906 "parsing/parser.ml" + + in + +# 2480 "parsing/parser.mly" + ( Pexp_construct(_1, Some _2) ) +# 10912 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2249 "parsing/parser.mly" - ( array, d, Bracket, i, r ) -# 11384 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 10922 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2286 "parsing/parser.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11394 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 10928 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11403,98 +10937,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 686 "parsing/parser.mly" - (string) -# 11456 "parsing/parser.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : (Asttypes.label) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2287 "parsing/parser.mly" - (Some v) -# 11466 "parsing/parser.ml" - in - let i = -# 2678 "parsing/parser.mly" - ( es ) -# 11471 "parsing/parser.ml" + let _1 = +# 2482 "parsing/parser.mly" + ( Pexp_variant(_1, Some _2) ) +# 10961 "parsing/parser.ml" in - let d = - let _1 = -# 124 "" - ( None ) -# 11477 "parsing/parser.ml" - in - -# 2261 "parsing/parser.mly" - ( _1, _2 ) -# 11482 "parsing/parser.ml" - - in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2245 "parsing/parser.mly" - ( array, d, Paren, i, r ) -# 11488 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 10970 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2288 "parsing/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11498 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 10976 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11507,120 +10985,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in - let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 686 "parsing/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 754 "parsing/parser.mly" (string) -# 11572 "parsing/parser.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in - let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in +# 11010 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = + let _1 = + let e2 = + let _1 = # 2287 "parsing/parser.mly" - (Some v) -# 11584 "parsing/parser.ml" - in - let i = -# 2678 "parsing/parser.mly" - ( es ) -# 11589 "parsing/parser.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2261 "parsing/parser.mly" - (_2) -# 11597 "parsing/parser.ml" + ( _1 ) +# 11022 "parsing/parser.ml" in -# 126 "" - ( Some x ) -# 11602 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 11027 "parsing/parser.ml" + + in + let op = + let _1 = +# 3770 "parsing/parser.mly" + ( op ) +# 11034 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11043 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" - ( _1, _2 ) -# 11608 "parsing/parser.ml" +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11049 "parsing/parser.ml" in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2245 "parsing/parser.mly" - ( array, d, Paren, i, r ) -# 11614 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11059 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2288 "parsing/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11624 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 11065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11633,98 +11074,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 686 "parsing/parser.mly" + let op : ( +# 754 "parsing/parser.mly" (string) -# 11686 "parsing/parser.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in +# 11120 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2287 "parsing/parser.mly" - (Some v) -# 11696 "parsing/parser.ml" - in - let i = -# 2678 "parsing/parser.mly" - ( es ) -# 11701 "parsing/parser.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 11707 "parsing/parser.ml" - in + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11135 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 11140 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 11146 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 11157 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 11163 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11183 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 11189 "parsing/parser.ml" + + in + let op = + let _1 = +# 3770 "parsing/parser.mly" + ( op ) +# 11196 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11205 "parsing/parser.ml" + + in -# 2261 "parsing/parser.mly" - ( _1, _2 ) -# 11712 "parsing/parser.ml" +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11211 "parsing/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2247 "parsing/parser.mly" - ( array, d, Brace, i, r ) -# 11718 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11221 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2288 "parsing/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11728 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 11227 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11737,120 +11236,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in - let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 686 "parsing/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 755 "parsing/parser.mly" (string) -# 11802 "parsing/parser.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in - let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in +# 11261 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = + let _1 = + let e2 = + let _1 = # 2287 "parsing/parser.mly" - (Some v) -# 11814 "parsing/parser.ml" - in - let i = -# 2678 "parsing/parser.mly" - ( es ) -# 11819 "parsing/parser.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2261 "parsing/parser.mly" - (_2) -# 11827 "parsing/parser.ml" + ( _1 ) +# 11273 "parsing/parser.ml" in -# 126 "" - ( Some x ) -# 11832 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 11278 "parsing/parser.ml" + + in + let op = + let _1 = +# 3771 "parsing/parser.mly" + ( op ) +# 11285 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11294 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" - ( _1, _2 ) -# 11838 "parsing/parser.ml" +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11300 "parsing/parser.ml" in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2247 "parsing/parser.mly" - ( array, d, Brace, i, r ) -# 11844 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11310 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2288 "parsing/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11854 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 11316 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11863,98 +11325,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 686 "parsing/parser.mly" + let op : ( +# 755 "parsing/parser.mly" (string) -# 11916 "parsing/parser.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in +# 11371 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2287 "parsing/parser.mly" - (Some v) -# 11926 "parsing/parser.ml" - in - let i = -# 2678 "parsing/parser.mly" - ( es ) -# 11931 "parsing/parser.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 11937 "parsing/parser.ml" - in + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11386 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 11391 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 11397 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 11408 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 11414 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11434 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 11440 "parsing/parser.ml" + + in + let op = + let _1 = +# 3771 "parsing/parser.mly" + ( op ) +# 11447 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11456 "parsing/parser.ml" + + in -# 2261 "parsing/parser.mly" - ( _1, _2 ) -# 11942 "parsing/parser.ml" +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11462 "parsing/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2249 "parsing/parser.mly" - ( array, d, Bracket, i, r ) -# 11948 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11472 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2288 "parsing/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11958 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 11478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11967,120 +11487,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in - let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 686 "parsing/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 756 "parsing/parser.mly" (string) -# 12032 "parsing/parser.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in - let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in +# 11512 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = + let _1 = + let e2 = + let _1 = # 2287 "parsing/parser.mly" - (Some v) -# 12044 "parsing/parser.ml" - in - let i = -# 2678 "parsing/parser.mly" - ( es ) -# 12049 "parsing/parser.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2261 "parsing/parser.mly" - (_2) -# 12057 "parsing/parser.ml" + ( _1 ) +# 11524 "parsing/parser.ml" in -# 126 "" - ( Some x ) -# 12062 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 11529 "parsing/parser.ml" + + in + let op = + let _1 = +# 3772 "parsing/parser.mly" + ( op ) +# 11536 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11545 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" - ( _1, _2 ) -# 12068 "parsing/parser.ml" +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11551 "parsing/parser.ml" in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2249 "parsing/parser.mly" - ( array, d, Bracket, i, r ) -# 12074 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11561 "parsing/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2288 "parsing/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12084 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 11567 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12093,26 +11576,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let op : ( +# 756 "parsing/parser.mly" + (string) +# 11622 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = -# 2290 "parsing/parser.mly" - ( Exp.attr _1 _2 ) -# 12116 "parsing/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11637 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 11642 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 11648 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 11659 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 11665 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11685 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 11691 "parsing/parser.ml" + + in + let op = + let _1 = +# 3772 "parsing/parser.mly" + ( op ) +# 11698 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11707 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11713 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11723 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 11729 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12124,39 +11737,84 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 757 "parsing/parser.mly" + (string) +# 11763 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_e1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 11775 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 11780 "parsing/parser.ml" + + in + let op = + let _1 = +# 3773 "parsing/parser.mly" + ( op ) +# 11787 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11796 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11802 "parsing/parser.ml" + + in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11812 "parsing/parser.ml" + + in -# 2293 "parsing/parser.mly" - ( not_expecting _loc__1_ "wildcard \"_\"" ) -# 12142 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string Asttypes.loc option) = -# 3856 "parsing/parser.mly" - ( None ) -# 12160 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 11818 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12169,72 +11827,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (string Asttypes.loc) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (string Asttypes.loc option) = -# 3857 "parsing/parser.mly" - ( Some _2 ) -# 12192 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Asttypes.loc) = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 757 "parsing/parser.mly" + (string) +# 11873 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.extension) = -# 3869 "parsing/parser.mly" - ( (_2, _3) ) -# 12238 "parsing/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11888 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 11893 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 11899 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 11910 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 11916 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11936 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 11942 "parsing/parser.ml" + + in + let op = + let _1 = +# 3773 "parsing/parser.mly" + ( op ) +# 11949 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11958 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 11964 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11974 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 11980 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12246,27 +11988,84 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 745 "parsing/parser.mly" - (string * Location.t * string * Location.t * string option) -# 12259 "parsing/parser.ml" - ) = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 758 "parsing/parser.mly" + (string) +# 12014 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_e1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.extension) = let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 12026 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12031 "parsing/parser.ml" + + in + let op = + let _1 = +# 3774 "parsing/parser.mly" + ( op ) +# 12038 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12047 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12053 "parsing/parser.ml" + + in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12063 "parsing/parser.ml" + + in -# 3871 "parsing/parser.mly" - ( mk_quotedext ~loc:_sloc _1 ) -# 12270 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 12069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12279,9 +12078,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -12289,72 +12088,146 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Longident.t) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 758 "parsing/parser.mly" + (string) +# 12124 "parsing/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.extension_constructor) = let attrs = - let _1 = _1_inlined3 in - -# 3853 "parsing/parser.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12139 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 12144 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 12150 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" ( _1 ) -# 12325 "parsing/parser.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined3_ in - let lid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 12337 "parsing/parser.ml" - - in - let cid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in +# 12161 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 12167 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12187 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12193 "parsing/parser.ml" + + in + let op = + let _1 = +# 3774 "parsing/parser.mly" + ( op ) +# 12200 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12209 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12215 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 12348 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12225 "parsing/parser.ml" in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3217 "parsing/parser.mly" - ( let info = symbol_info _endpos in - Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12358 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 12231 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12367,80 +12240,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in - let _3 : unit = Obj.magic _3 in - let _1 : (Asttypes.label) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Parsetree.extension_constructor) = let attrs = - let _1 = _1_inlined2 in - -# 3853 "parsing/parser.mly" - ( _1 ) -# 12406 "parsing/parser.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined2_ in - let lid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 12418 "parsing/parser.ml" - - in - let cid = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 12274 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12279 "parsing/parser.ml" + + in + let op = + let _1 = +# 3775 "parsing/parser.mly" + ("+") +# 12286 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12294 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12300 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 12428 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12310 "parsing/parser.ml" in - let _startpos_cid_ = _startpos__1_ in - let _1 = -# 3674 "parsing/parser.mly" - ( () ) -# 12435 "parsing/parser.ml" - in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos_cid_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3217 "parsing/parser.mly" - ( let info = symbol_info _endpos in - Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12444 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 12316 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12453,44 +12325,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Asttypes.loc) = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12383 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 12388 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 12394 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 12405 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 12411 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12431 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12437 "parsing/parser.ml" + + in + let op = + let _1 = +# 3775 "parsing/parser.mly" + ("+") +# 12444 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12452 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12458 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12468 "parsing/parser.ml" + + in -# 3844 "parsing/parser.mly" - ( mark_symbol_docs _sloc; - Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 12494 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 12474 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12501,19 +12481,81 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = -# 2038 "parsing/parser.mly" - ( [] ) -# 12512 "parsing/parser.ml" - in - -# 1863 "parsing/parser.mly" - ( params ) + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) # 12517 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12522 "parsing/parser.ml" + + in + let op = + let _1 = +# 3776 "parsing/parser.mly" + ("+.") +# 12529 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12537 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12543 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12553 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 12559 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12526,52 +12568,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let xs : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic xs in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = - let params = - let xs = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 12558 "parsing/parser.ml" - in - -# 1021 "parsing/parser.mly" +# 12626 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 12631 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" ( xs ) -# 12563 "parsing/parser.ml" +# 12637 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 12648 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 12654 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12674 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12680 "parsing/parser.ml" + + in + let op = + let _1 = +# 3776 "parsing/parser.mly" + ("+.") +# 12687 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12695 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12701 "parsing/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2040 "parsing/parser.mly" - ( params ) -# 12569 "parsing/parser.ml" +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12711 "parsing/parser.ml" in -# 1863 "parsing/parser.mly" - ( params ) -# 12575 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 12717 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12583,20 +12725,238 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 12760 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12765 "parsing/parser.ml" + + in + let op = + let _1 = +# 3777 "parsing/parser.mly" + ("+=") +# 12772 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12780 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12786 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12796 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 12802 "parsing/parser.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.expression) = -# 2597 "parsing/parser.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12869 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 12874 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 12880 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 12891 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 12897 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12917 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 12923 "parsing/parser.ml" + + in + let op = + let _1 = +# 3777 "parsing/parser.mly" + ("+=") +# 12930 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12938 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 12944 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12954 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" ( _1 ) -# 12600 "parsing/parser.ml" +# 12960 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12609,36 +12969,6878 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 13003 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13008 "parsing/parser.ml" + + in + let op = + let _1 = +# 3778 "parsing/parser.mly" + ("-") +# 13015 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13023 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13029 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13039 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13045 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13112 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 13117 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 13123 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 13134 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 13140 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13160 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13166 "parsing/parser.ml" + + in + let op = + let _1 = +# 3778 "parsing/parser.mly" + ("-") +# 13173 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13181 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13187 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13197 "parsing/parser.ml" + + in -# 2599 "parsing/parser.mly" - ( mkexp_constraint ~loc:_sloc _3 _1 ) -# 12642 "parsing/parser.ml" +# 2404 "parsing/parser.mly" + ( _1 ) +# 13203 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 13246 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13251 "parsing/parser.ml" + + in + let op = + let _1 = +# 3779 "parsing/parser.mly" + ("-.") +# 13258 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13266 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13272 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13282 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13288 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13355 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 13360 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 13366 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 13377 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 13383 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13403 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13409 "parsing/parser.ml" + + in + let op = + let _1 = +# 3779 "parsing/parser.mly" + ("-.") +# 13416 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13424 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13430 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13440 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13446 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 13489 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13494 "parsing/parser.ml" + + in + let op = + let _1 = +# 3780 "parsing/parser.mly" + ("*") +# 13501 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13509 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13515 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13525 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13531 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13598 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 13603 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 13609 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 13620 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 13626 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13646 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13652 "parsing/parser.ml" + + in + let op = + let _1 = +# 3780 "parsing/parser.mly" + ("*") +# 13659 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13667 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13673 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13683 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13689 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 13732 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13737 "parsing/parser.ml" + + in + let op = + let _1 = +# 3781 "parsing/parser.mly" + ("%") +# 13744 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13752 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13758 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13768 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13774 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13841 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 13846 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 13852 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 13863 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 13869 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13889 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13895 "parsing/parser.ml" + + in + let op = + let _1 = +# 3781 "parsing/parser.mly" + ("%") +# 13902 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13910 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 13916 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13926 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 13932 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 13975 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 13980 "parsing/parser.ml" + + in + let op = + let _1 = +# 3782 "parsing/parser.mly" + ("=") +# 13987 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13995 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14001 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14011 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14017 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14084 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 14089 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 14095 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 14106 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 14112 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14132 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14138 "parsing/parser.ml" + + in + let op = + let _1 = +# 3782 "parsing/parser.mly" + ("=") +# 14145 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14153 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14159 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14169 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14175 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 14218 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14223 "parsing/parser.ml" + + in + let op = + let _1 = +# 3783 "parsing/parser.mly" + ("<") +# 14230 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14238 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14244 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14254 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14260 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14327 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 14332 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 14338 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 14349 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 14355 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14375 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14381 "parsing/parser.ml" + + in + let op = + let _1 = +# 3783 "parsing/parser.mly" + ("<") +# 14388 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14396 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14402 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14412 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14418 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 14461 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14466 "parsing/parser.ml" + + in + let op = + let _1 = +# 3784 "parsing/parser.mly" + (">") +# 14473 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14481 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14487 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14497 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14503 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14570 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 14575 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 14581 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 14592 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 14598 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14618 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14624 "parsing/parser.ml" + + in + let op = + let _1 = +# 3784 "parsing/parser.mly" + (">") +# 14631 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14639 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14645 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14655 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14661 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 14704 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14709 "parsing/parser.ml" + + in + let op = + let _1 = +# 3785 "parsing/parser.mly" + ("or") +# 14716 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14724 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14730 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14740 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14746 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14813 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 14818 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 14824 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 14835 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 14841 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14861 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14867 "parsing/parser.ml" + + in + let op = + let _1 = +# 3785 "parsing/parser.mly" + ("or") +# 14874 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14882 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14888 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14898 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14904 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 14947 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 14952 "parsing/parser.ml" + + in + let op = + let _1 = +# 3786 "parsing/parser.mly" + ("||") +# 14959 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14967 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 14973 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14983 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 14989 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15056 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 15061 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 15067 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 15078 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 15084 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15104 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15110 "parsing/parser.ml" + + in + let op = + let _1 = +# 3786 "parsing/parser.mly" + ("||") +# 15117 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15125 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15131 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15141 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15147 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 15190 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15195 "parsing/parser.ml" + + in + let op = + let _1 = +# 3787 "parsing/parser.mly" + ("&") +# 15202 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15210 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15216 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15226 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15232 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15299 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 15304 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 15310 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 15321 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 15327 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15347 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15353 "parsing/parser.ml" + + in + let op = + let _1 = +# 3787 "parsing/parser.mly" + ("&") +# 15360 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15368 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15374 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15384 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15390 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 15433 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15438 "parsing/parser.ml" + + in + let op = + let _1 = +# 3788 "parsing/parser.mly" + ("&&") +# 15445 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15453 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15459 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15469 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15475 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15542 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 15547 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 15553 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 15564 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 15570 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15590 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15596 "parsing/parser.ml" + + in + let op = + let _1 = +# 3788 "parsing/parser.mly" + ("&&") +# 15603 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15611 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15617 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15627 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15633 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 15676 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15681 "parsing/parser.ml" + + in + let op = + let _1 = +# 3789 "parsing/parser.mly" + (":=") +# 15688 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15696 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15702 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15712 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15718 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15785 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 15790 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 15796 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 15807 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 15813 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15833 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15839 "parsing/parser.ml" + + in + let op = + let _1 = +# 3789 "parsing/parser.mly" + (":=") +# 15846 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 987 "parsing/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15854 "parsing/parser.ml" + + in + +# 2484 "parsing/parser.mly" + ( mkinfix e1 op e2 ) +# 15860 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15870 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15876 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 15912 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 15917 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2486 "parsing/parser.mly" + ( mkuminus ~oploc:_loc__1_ _1 _2 ) +# 15924 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15934 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 15940 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16000 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 16005 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 16011 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 16022 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 16028 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16048 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16054 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2486 "parsing/parser.mly" + ( mkuminus ~oploc:_loc__1_ _1 _2 ) +# 16061 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16071 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 16077 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 16113 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16118 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2488 "parsing/parser.mly" + ( mkuplus ~oploc:_loc__1_ _1 _2 ) +# 16125 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16135 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 16141 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16201 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 16206 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 16212 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 16223 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 16229 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16249 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16255 "parsing/parser.ml" + + in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2488 "parsing/parser.mly" + ( mkuplus ~oploc:_loc__1_ _1 _2 ) +# 16262 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16272 "parsing/parser.ml" + + in + +# 2404 "parsing/parser.mly" + ( _1 ) +# 16278 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (let_bindings) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2406 "parsing/parser.mly" + ( expr_of_let_bindings ~loc:_sloc _1 _3 ) +# 16320 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = bindings; + MenhirLib.EngineTypes.startp = _startpos_bindings_; + MenhirLib.EngineTypes.endp = _endpos_bindings_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let body : (Parsetree.expression) = Obj.magic body in + let _3 : unit = Obj.magic _3 in + let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in + let _1 : ( +# 760 "parsing/parser.mly" + (string) +# 16362 "parsing/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.expression) = let pbop_op = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 16374 "parsing/parser.ml" + + in + let _startpos_pbop_op_ = _startpos__1_ in + let _endpos = _endpos_body_ in + let _symbolstartpos = _startpos_pbop_op_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2408 "parsing/parser.mly" + ( let (pbop_pat, pbop_exp, rev_ands) = bindings in + let ands = List.rev rev_ands in + let pbop_loc = make_loc _sloc in + let let_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in + mkexp ~loc:_sloc (Pexp_letop{ let_; ands; body}) ) +# 16388 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _3 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 16429 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16434 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2414 "parsing/parser.mly" + ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) ) +# 16445 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _3 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16510 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 16515 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 16521 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 16532 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 16538 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16558 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16564 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2414 "parsing/parser.mly" + ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) ) +# 16575 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 778 "parsing/parser.mly" + (string) +# 16610 "parsing/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _3 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 16620 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16625 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _1 = + let _1 = +# 3720 "parsing/parser.mly" + ( _1 ) +# 16633 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 16641 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2416 "parsing/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) +# 16650 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 778 "parsing/parser.mly" + (string) +# 16706 "parsing/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _3 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16719 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 16724 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 16730 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 16741 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 16747 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16767 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16773 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _1 = + let _1 = +# 3720 "parsing/parser.mly" + ( _1 ) +# 16781 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 16789 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2416 "parsing/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) +# 16798 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _5 = + let _1 = _1_inlined2 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 16853 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 16858 "parsing/parser.ml" + + in + let _endpos__5_ = _endpos__1_inlined2_ in + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 16870 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2418 "parsing/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) +# 16879 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16958 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 16963 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 16969 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 16980 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 16986 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17006 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17012 "parsing/parser.ml" + + in + let _endpos__5_ = _endpos_xs_ in + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 960 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 17024 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2418 "parsing/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) +# 17033 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 17104 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17109 "parsing/parser.ml" + + in + +# 2419 "parsing/parser.mly" + (Some v) +# 17115 "parsing/parser.ml" + + in + +# 2379 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 17121 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2420 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17131 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17226 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 17231 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 17237 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 17248 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 17254 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17274 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17280 "parsing/parser.ml" + + in + +# 2419 "parsing/parser.mly" + (Some v) +# 17286 "parsing/parser.ml" + + in + +# 2379 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 17292 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2420 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17302 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 17373 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17378 "parsing/parser.ml" + + in + +# 2419 "parsing/parser.mly" + (Some v) +# 17384 "parsing/parser.ml" + + in + +# 2381 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 17390 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2420 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17400 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17495 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 17500 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 17506 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 17517 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 17523 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17543 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17549 "parsing/parser.ml" + + in + +# 2419 "parsing/parser.mly" + (Some v) +# 17555 "parsing/parser.ml" + + in + +# 2381 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 17561 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2420 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17571 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 17642 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17647 "parsing/parser.ml" + + in + +# 2419 "parsing/parser.mly" + (Some v) +# 17653 "parsing/parser.ml" + + in + +# 2383 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 17659 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2420 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17669 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17764 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 17769 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 17775 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 17786 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 17792 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17812 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17818 "parsing/parser.ml" + + in + +# 2419 "parsing/parser.mly" + (Some v) +# 17824 "parsing/parser.ml" + + in + +# 2383 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 17830 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2420 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17840 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 17902 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 17915 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 17920 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 17926 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 17932 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 17938 "parsing/parser.ml" + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 17943 "parsing/parser.ml" + + in + +# 2379 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 17949 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 17959 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 18042 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18058 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 18063 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 18069 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 18080 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 18086 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18106 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 18112 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 18118 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 18124 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18130 "parsing/parser.ml" + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 18135 "parsing/parser.ml" + + in + +# 2379 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 18141 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18151 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 18225 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let _1_inlined1 = _1_inlined2 in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 18241 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 18246 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 18252 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 18258 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2395 "parsing/parser.mly" + (_2) +# 18266 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 18271 "parsing/parser.ml" + + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 18277 "parsing/parser.ml" + + in + +# 2379 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 18283 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18293 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 18388 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18407 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 18412 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 18418 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 18429 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 18435 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18455 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 18461 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 18467 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 18473 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2395 "parsing/parser.mly" + (_2) +# 18481 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 18486 "parsing/parser.ml" + + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 18492 "parsing/parser.ml" + + in + +# 2379 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 18498 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18508 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 18570 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 18583 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 18588 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 18594 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 18600 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18606 "parsing/parser.ml" + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 18611 "parsing/parser.ml" + + in + +# 2381 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 18617 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18627 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 18710 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18726 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 18731 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 18737 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 18748 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 18754 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18774 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 18780 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 18786 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 18792 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18798 "parsing/parser.ml" + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 18803 "parsing/parser.ml" + + in + +# 2381 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 18809 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18819 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 18893 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let _1_inlined1 = _1_inlined2 in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 18909 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 18914 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 18920 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 18926 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2395 "parsing/parser.mly" + (_2) +# 18934 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 18939 "parsing/parser.ml" + + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 18945 "parsing/parser.ml" + + in + +# 2381 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 18951 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18961 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 19056 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19075 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 19080 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 19086 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 19097 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 19103 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19123 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 19129 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 19135 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 19141 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2395 "parsing/parser.mly" + (_2) +# 19149 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 19154 "parsing/parser.ml" + + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 19160 "parsing/parser.ml" + + in + +# 2381 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 19166 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19176 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 19238 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 19251 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 19256 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 19262 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 19268 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 19274 "parsing/parser.ml" + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 19279 "parsing/parser.ml" + + in + +# 2383 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 19285 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19295 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 19378 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19394 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 19399 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 19405 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 19416 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 19422 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19442 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 19448 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 19454 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 19460 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 19466 "parsing/parser.ml" + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 19471 "parsing/parser.ml" + + in + +# 2383 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 19477 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19487 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 19561 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let _1_inlined1 = _1_inlined2 in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 19577 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 19582 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 19588 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 19594 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2395 "parsing/parser.mly" + (_2) +# 19602 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 19607 "parsing/parser.ml" + + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 19613 "parsing/parser.ml" + + in + +# 2383 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 19619 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19629 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 759 "parsing/parser.mly" + (string) +# 19724 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19743 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 19748 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 19754 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 19765 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 19771 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19791 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 19797 "parsing/parser.ml" + + in + +# 2421 "parsing/parser.mly" + (Some v) +# 19803 "parsing/parser.ml" + + in + let i = +# 2831 "parsing/parser.mly" + ( es ) +# 19809 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2395 "parsing/parser.mly" + (_2) +# 19817 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 19822 "parsing/parser.ml" + + in + +# 2395 "parsing/parser.mly" + ( _1, _2 ) +# 19828 "parsing/parser.ml" + + in + +# 2383 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 19834 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2422 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12662,15 +19864,41 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.attribute) = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2623 "parsing/parser.mly" - ( _2 ) -# 12674 "parsing/parser.ml" +# 2424 "parsing/parser.mly" + ( Exp.attr _1 _2 ) +# 19876 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2427 "parsing/parser.mly" + ( not_expecting _loc__1_ "wildcard \"_\"" ) +# 19902 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12688,9 +19916,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -12706,33 +19934,129 @@ module Tables = struct }; }; } = _menhir_stack in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type) = Obj.magic _2 in + let _4 : unit = Obj.magic _4 in + let xs : (string Asttypes.loc list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2625 "parsing/parser.mly" - ( Pexp_constraint (_4, _2) ) -# 12721 "parsing/parser.ml" + let _v : (Parsetree.function_param list) = let ty_params = +# 2637 "parsing/parser.mly" + ( xs ) +# 19948 "parsing/parser.ml" + in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2768 "parsing/parser.mly" + ( (* We desugar (type a b c) to (type a) (type b) (type c). + If we do this desugaring, the loc for each parameter is a ghost. + *) + let loc = + match ty_params with + | [] -> assert false (* lident_list is non-empty *) + | [_] -> make_loc _sloc + | _ :: _ :: _ -> ghost_loc _sloc + in + List.map + (fun x -> { pparam_loc = loc; pparam_desc = Pparam_newtype x }) + ty_params + ) +# 19968 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.function_param list) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2782 "parsing/parser.mly" + ( let a, b, c = _1 in + [ { pparam_loc = make_loc _sloc; pparam_desc = Pparam_val (a, b, c) } ] + ) +# 19998 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let xs : (Parsetree.function_param list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.function_param list) = let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 20024 "parsing/parser.ml" in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 12730 "parsing/parser.ml" +# 1083 "parsing/parser.mly" + ( xs ) +# 20029 "parsing/parser.ml" in -# 2626 "parsing/parser.mly" - ( _1 ) -# 12736 "parsing/parser.ml" +# 2787 "parsing/parser.mly" + ( _1 ) +# 20035 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression) = +# 2314 "parsing/parser.mly" + ( _1 ) +# 20060 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12756,21 +20080,70 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _v : (Parsetree.expression) = +# 2315 "parsing/parser.mly" + ( _1 ) +# 20092 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = +# 2317 "parsing/parser.mly" + ( Pexp_sequence(_1, _3) ) +# 20132 "parsing/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 993 "parsing/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 20141 "parsing/parser.ml" + + in -# 2629 "parsing/parser.mly" - ( - let (l,o,p) = _1 in - ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) - ) -# 12774 "parsing/parser.ml" +# 2318 "parsing/parser.mly" + ( _1 ) +# 20147 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12793,9 +20166,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -12813,25 +20186,22 @@ module Tables = struct }; } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let xs : (string Asttypes.loc list) = Obj.magic xs in + let _4 : (Ast_helper.str) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _3 = -# 2495 "parsing/parser.mly" - ( xs ) -# 12827 "parsing/parser.ml" - in - let _endpos = _endpos__5_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2634 "parsing/parser.mly" - ( mk_newtypes ~loc:_sloc _3 _5 ) -# 12835 "parsing/parser.ml" +# 2320 "parsing/parser.mly" + ( let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in + let payload = PStr [mkstrexp seq []] in + mkexp ~loc:_sloc (Pexp_extension (_4, payload)) ) +# 20205 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12854,9 +20224,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3333 "parsing/parser.mly" +# 3486 "parsing/parser.mly" ( ty ) -# 12860 "parsing/parser.ml" +# 20230 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12902,19 +20272,19 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let domain = -# 885 "parsing/parser.mly" +# 958 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 12908 "parsing/parser.ml" +# 20278 "parsing/parser.ml" in let label = -# 3345 "parsing/parser.mly" +# 3498 "parsing/parser.mly" ( Optional label ) -# 12913 "parsing/parser.ml" +# 20283 "parsing/parser.ml" in -# 3339 "parsing/parser.mly" +# 3492 "parsing/parser.mly" ( Ptyp_arrow(label, domain, codomain) ) -# 12918 "parsing/parser.ml" +# 20288 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -12922,15 +20292,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 12928 "parsing/parser.ml" +# 20298 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3494 "parsing/parser.mly" ( _1 ) -# 12934 "parsing/parser.ml" +# 20304 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12977,9 +20347,9 @@ module Tables = struct let _1 : (Parsetree.core_type) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 12983 "parsing/parser.ml" +# 20353 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -12987,19 +20357,19 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let domain = -# 885 "parsing/parser.mly" +# 958 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 12993 "parsing/parser.ml" +# 20363 "parsing/parser.ml" in let label = -# 3347 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( Labelled label ) -# 12998 "parsing/parser.ml" +# 20368 "parsing/parser.ml" in -# 3339 "parsing/parser.mly" +# 3492 "parsing/parser.mly" ( Ptyp_arrow(label, domain, codomain) ) -# 13003 "parsing/parser.ml" +# 20373 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -13007,15 +20377,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 13013 "parsing/parser.ml" +# 20383 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3494 "parsing/parser.mly" ( _1 ) -# 13019 "parsing/parser.ml" +# 20389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13054,19 +20424,19 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let domain = -# 885 "parsing/parser.mly" +# 958 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13060 "parsing/parser.ml" +# 20430 "parsing/parser.ml" in let label = -# 3349 "parsing/parser.mly" +# 3502 "parsing/parser.mly" ( Nolabel ) -# 13065 "parsing/parser.ml" +# 20435 "parsing/parser.ml" in -# 3339 "parsing/parser.mly" +# 3492 "parsing/parser.mly" ( Ptyp_arrow(label, domain, codomain) ) -# 13070 "parsing/parser.ml" +# 20440 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -13074,15 +20444,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 13080 "parsing/parser.ml" +# 20450 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3494 "parsing/parser.mly" ( _1 ) -# 13086 "parsing/parser.ml" +# 20456 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13113,9 +20483,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in -# 1275 "parsing/parser.mly" +# 1369 "parsing/parser.mly" ( _startpos, Unit ) -# 13119 "parsing/parser.ml" +# 20489 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13171,16 +20541,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13177 "parsing/parser.ml" +# 20547 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 1278 "parsing/parser.mly" +# 1372 "parsing/parser.mly" ( _startpos, Named (x, mty) ) -# 13184 "parsing/parser.ml" +# 20554 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13197,9 +20567,9 @@ module Tables = struct let _endpos = _startpos in let _v : (Ast_helper.str list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3132 "parsing/parser.mly" +# 3285 "parsing/parser.mly" ( ([],Pcstr_tuple [],None) ) -# 13203 "parsing/parser.ml" +# 20573 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13230,9 +20600,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Ast_helper.str list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3133 "parsing/parser.mly" +# 3286 "parsing/parser.mly" ( ([],_2,None) ) -# 13236 "parsing/parser.ml" +# 20606 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13277,9 +20647,9 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Ast_helper.str list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3135 "parsing/parser.mly" +# 3288 "parsing/parser.mly" ( ([],_2,Some _4) ) -# 13283 "parsing/parser.ml" +# 20653 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13342,24 +20712,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13346 "parsing/parser.ml" +# 20716 "parsing/parser.ml" in -# 989 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( xs ) -# 13351 "parsing/parser.ml" +# 20721 "parsing/parser.ml" in -# 3268 "parsing/parser.mly" +# 3421 "parsing/parser.mly" ( _1 ) -# 13357 "parsing/parser.ml" +# 20727 "parsing/parser.ml" in -# 3138 "parsing/parser.mly" +# 3291 "parsing/parser.mly" ( (_2,_4,Some _6) ) -# 13363 "parsing/parser.ml" +# 20733 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13390,9 +20760,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Ast_helper.str list * Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3140 "parsing/parser.mly" +# 3293 "parsing/parser.mly" ( ([],Pcstr_tuple [],Some _2) ) -# 13396 "parsing/parser.ml" +# 20766 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13441,24 +20811,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13445 "parsing/parser.ml" +# 20815 "parsing/parser.ml" in -# 989 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( xs ) -# 13450 "parsing/parser.ml" +# 20820 "parsing/parser.ml" in -# 3268 "parsing/parser.mly" +# 3421 "parsing/parser.mly" ( _1 ) -# 13456 "parsing/parser.ml" +# 20826 "parsing/parser.ml" in -# 3142 "parsing/parser.mly" +# 3295 "parsing/parser.mly" ( (_2,Pcstr_tuple [],Some _4) ) -# 13462 "parsing/parser.ml" +# 20832 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13507,9 +20877,9 @@ module Tables = struct Docstrings.info) = let attrs = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 13513 "parsing/parser.ml" +# 20883 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined2_ in @@ -13519,23 +20889,23 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13525 "parsing/parser.ml" +# 20895 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3080 "parsing/parser.mly" +# 3233 "parsing/parser.mly" ( let vars, args, res = vars_args_res in let info = symbol_info _endpos in let loc = make_loc _sloc in cid, vars, args, res, attrs, loc, info ) -# 13539 "parsing/parser.ml" +# 20909 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13577,9 +20947,9 @@ module Tables = struct Docstrings.info) = let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 13583 "parsing/parser.ml" +# 20953 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined1_ in @@ -13588,29 +20958,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13594 "parsing/parser.ml" +# 20964 "parsing/parser.ml" in let _startpos_cid_ = _startpos__1_ in let _1 = -# 3674 "parsing/parser.mly" +# 3883 "parsing/parser.mly" ( () ) -# 13601 "parsing/parser.ml" +# 20971 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 3080 "parsing/parser.mly" +# 3233 "parsing/parser.mly" ( let vars, args, res = vars_args_res in let info = symbol_info _endpos in let loc = make_loc _sloc in cid, vars, args, res, attrs, loc, info ) -# 13614 "parsing/parser.ml" +# 20984 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13681,9 +21051,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 13687 "parsing/parser.ml" +# 21057 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -13696,9 +21066,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 13702 "parsing/parser.ml" +# 21072 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -13707,24 +21077,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13711 "parsing/parser.ml" +# 21081 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 13716 "parsing/parser.ml" +# 21086 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 13722 "parsing/parser.ml" +# 21092 "parsing/parser.ml" in let kind_priv_manifest = -# 3020 "parsing/parser.mly" +# 3173 "parsing/parser.mly" ( _2 ) -# 13728 "parsing/parser.ml" +# 21098 "parsing/parser.ml" in let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -13732,29 +21102,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13738 "parsing/parser.ml" +# 21108 "parsing/parser.ml" in let flag = -# 3694 "parsing/parser.mly" +# 3903 "parsing/parser.mly" ( Recursive ) -# 13744 "parsing/parser.ml" +# 21114 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 13751 "parsing/parser.ml" +# 21121 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2957 "parsing/parser.mly" +# 3110 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -13763,7 +21133,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 13767 "parsing/parser.ml" +# 21137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13840,9 +21210,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined4 : unit = Obj.magic _1_inlined4 in let _1_inlined3 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 13846 "parsing/parser.ml" +# 21216 "parsing/parser.ml" ) = Obj.magic _1_inlined3 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined2 : unit = Obj.magic _1_inlined2 in @@ -13856,9 +21226,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined5 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 13862 "parsing/parser.ml" +# 21232 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined5_ in @@ -13867,24 +21237,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13871 "parsing/parser.ml" +# 21241 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 13876 "parsing/parser.ml" +# 21246 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 13882 "parsing/parser.ml" +# 21252 "parsing/parser.ml" in let kind_priv_manifest = -# 3020 "parsing/parser.mly" +# 3173 "parsing/parser.mly" ( _2 ) -# 13888 "parsing/parser.ml" +# 21258 "parsing/parser.ml" in let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -13892,9 +21262,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13898 "parsing/parser.ml" +# 21268 "parsing/parser.ml" in let flag = @@ -13903,24 +21273,24 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3696 "parsing/parser.mly" +# 3905 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 13909 "parsing/parser.ml" +# 21279 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 13917 "parsing/parser.ml" +# 21287 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2957 "parsing/parser.mly" +# 3110 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -13929,7 +21299,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 13933 "parsing/parser.ml" +# 21303 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13993,9 +21363,9 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 13999 "parsing/parser.ml" +# 21369 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -14008,9 +21378,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 14014 "parsing/parser.ml" +# 21384 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -14019,18 +21389,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14023 "parsing/parser.ml" +# 21393 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 14028 "parsing/parser.ml" +# 21398 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 14034 "parsing/parser.ml" +# 21404 "parsing/parser.ml" in let id = @@ -14039,29 +21409,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14045 "parsing/parser.ml" +# 21415 "parsing/parser.ml" in let flag = -# 3690 "parsing/parser.mly" +# 3899 "parsing/parser.mly" ( Recursive ) -# 14051 "parsing/parser.ml" +# 21421 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 14058 "parsing/parser.ml" +# 21428 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2957 "parsing/parser.mly" +# 3110 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -14070,7 +21440,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 14074 "parsing/parser.ml" +# 21444 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14140,9 +21510,9 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined3 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 14146 "parsing/parser.ml" +# 21516 "parsing/parser.ml" ) = Obj.magic _1_inlined3 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined2 : unit = Obj.magic _1_inlined2 in @@ -14156,9 +21526,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 14162 "parsing/parser.ml" +# 21532 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -14167,18 +21537,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14171 "parsing/parser.ml" +# 21541 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 14176 "parsing/parser.ml" +# 21546 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 14182 "parsing/parser.ml" +# 21552 "parsing/parser.ml" in let id = @@ -14187,29 +21557,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14193 "parsing/parser.ml" +# 21563 "parsing/parser.ml" in let flag = -# 3691 "parsing/parser.mly" +# 3900 "parsing/parser.mly" ( Nonrecursive ) -# 14199 "parsing/parser.ml" +# 21569 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 14206 "parsing/parser.ml" +# 21576 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2957 "parsing/parser.mly" +# 3110 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -14218,7 +21588,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 14222 "parsing/parser.ml" +# 21592 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14237,17 +21607,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 14243 "parsing/parser.ml" +# 21613 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3533 "parsing/parser.mly" +# 3742 "parsing/parser.mly" ( _1 ) -# 14251 "parsing/parser.ml" +# 21621 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14266,17 +21636,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 14272 "parsing/parser.ml" +# 21642 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3534 "parsing/parser.mly" +# 3743 "parsing/parser.mly" ( _1 ) -# 14280 "parsing/parser.ml" +# 21650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14306,9 +21676,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.structure) = -# 1142 "parsing/parser.mly" +# 1236 "parsing/parser.mly" ( _1 ) -# 14312 "parsing/parser.ml" +# 21682 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14324,9 +21694,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (string) = -# 3583 "parsing/parser.mly" +# 3792 "parsing/parser.mly" ( "" ) -# 14330 "parsing/parser.ml" +# 21700 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14356,9 +21726,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3584 "parsing/parser.mly" +# 3793 "parsing/parser.mly" ( ";.." ) -# 14362 "parsing/parser.ml" +# 21732 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14388,9 +21758,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.signature) = -# 1149 "parsing/parser.mly" +# 1243 "parsing/parser.mly" ( _1 ) -# 14394 "parsing/parser.ml" +# 21764 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14428,15 +21798,15 @@ module Tables = struct } = _menhir_stack in let _4 : unit = Obj.magic _4 in let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Asttypes.loc) = Obj.magic _2 in + let _2 : (Ast_helper.str) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.extension) = -# 3874 "parsing/parser.mly" +# 4083 "parsing/parser.mly" ( (_2, _3) ) -# 14440 "parsing/parser.ml" +# 21810 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14455,9 +21825,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 747 "parsing/parser.mly" +# 820 "parsing/parser.mly" (string * Location.t * string * Location.t * string option) -# 14461 "parsing/parser.ml" +# 21831 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -14466,9 +21836,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3876 "parsing/parser.mly" +# 4085 "parsing/parser.mly" ( mk_quotedext ~loc:_sloc _1 ) -# 14472 "parsing/parser.ml" +# 21842 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14514,9 +21884,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 14520 "parsing/parser.ml" +# 21890 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -14525,34 +21895,34 @@ module Tables = struct let _v : (Parsetree.label_declaration) = let _5 = let _1 = _1_inlined3 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 14531 "parsing/parser.ml" +# 21901 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3286 "parsing/parser.mly" +# 3439 "parsing/parser.mly" ( _1 ) -# 14540 "parsing/parser.ml" +# 21910 "parsing/parser.ml" in let _2 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 14548 "parsing/parser.ml" +# 21918 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14556 "parsing/parser.ml" +# 21926 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in @@ -14563,10 +21933,10 @@ module Tables = struct _startpos__2_ in let _sloc = (_symbolstartpos, _endpos) in -# 3159 "parsing/parser.mly" +# 3312 "parsing/parser.mly" ( let info = symbol_info _endpos in Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info ) -# 14570 "parsing/parser.ml" +# 21940 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14626,9 +21996,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 14632 "parsing/parser.ml" +# 22002 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -14637,43 +22007,43 @@ module Tables = struct let _v : (Parsetree.label_declaration) = let _7 = let _1 = _1_inlined4 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 14643 "parsing/parser.ml" +# 22013 "parsing/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _5 = let _1 = _1_inlined3 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 14652 "parsing/parser.ml" +# 22022 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3286 "parsing/parser.mly" +# 3439 "parsing/parser.mly" ( _1 ) -# 14661 "parsing/parser.ml" +# 22031 "parsing/parser.ml" in let _2 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 14669 "parsing/parser.ml" +# 22039 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14677 "parsing/parser.ml" +# 22047 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in @@ -14684,14 +22054,14 @@ module Tables = struct _startpos__2_ in let _sloc = (_symbolstartpos, _endpos) in -# 3164 "parsing/parser.mly" +# 3317 "parsing/parser.mly" ( let info = match rhs_info _endpos__5_ with | Some _ as info_before_semi -> info_before_semi | None -> symbol_info _endpos in Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info ) -# 14695 "parsing/parser.ml" +# 22065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14714,9 +22084,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.label_declaration list) = -# 3153 "parsing/parser.mly" +# 3306 "parsing/parser.mly" ( [_1] ) -# 14720 "parsing/parser.ml" +# 22090 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14739,9 +22109,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.label_declaration list) = -# 3154 "parsing/parser.mly" +# 3307 "parsing/parser.mly" ( [_1] ) -# 14745 "parsing/parser.ml" +# 22115 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14771,9 +22141,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.label_declaration list) = -# 3155 "parsing/parser.mly" +# 3308 "parsing/parser.mly" ( _1 :: _2 ) -# 14777 "parsing/parser.ml" +# 22147 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14792,9 +22162,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 14798 "parsing/parser.ml" +# 22168 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -14805,24 +22175,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14811 "parsing/parser.ml" +# 22181 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2233 "parsing/parser.mly" +# 2367 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 14820 "parsing/parser.ml" +# 22190 "parsing/parser.ml" in -# 2225 "parsing/parser.mly" +# 2359 "parsing/parser.mly" ( x ) -# 14826 "parsing/parser.ml" +# 22196 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14855,9 +22225,9 @@ module Tables = struct let cty : (Parsetree.core_type) = Obj.magic cty in let _2 : unit = Obj.magic _2 in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 14861 "parsing/parser.ml" +# 22231 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -14868,18 +22238,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14874 "parsing/parser.ml" +# 22244 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2233 "parsing/parser.mly" +# 2367 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 14883 "parsing/parser.ml" +# 22253 "parsing/parser.ml" in let _startpos_x_ = _startpos__1_ in @@ -14887,11 +22257,11 @@ module Tables = struct let _symbolstartpos = _startpos_x_ in let _sloc = (_symbolstartpos, _endpos) in -# 2227 "parsing/parser.mly" +# 2361 "parsing/parser.mly" ( let lab, pat = x in lab, mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) -# 14895 "parsing/parser.ml" +# 22265 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14914,9 +22284,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3615 "parsing/parser.mly" +# 3824 "parsing/parser.mly" ( _1 ) -# 14920 "parsing/parser.ml" +# 22290 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14939,9 +22309,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2478 "parsing/parser.mly" +# 2620 "parsing/parser.mly" ( (Nolabel, _1) ) -# 14945 "parsing/parser.ml" +# 22315 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14967,17 +22337,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 692 "parsing/parser.mly" +# 765 "parsing/parser.mly" (string) -# 14973 "parsing/parser.ml" +# 22343 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2480 "parsing/parser.mly" +# 2622 "parsing/parser.mly" ( (Labelled _1, _2) ) -# 14981 "parsing/parser.ml" +# 22351 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15002,9 +22372,9 @@ module Tables = struct }; } = _menhir_stack in let label : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 15008 "parsing/parser.ml" +# 22378 "parsing/parser.ml" ) = Obj.magic label in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15012,10 +22382,10 @@ module Tables = struct let _endpos = _endpos_label_ in let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2482 "parsing/parser.mly" +# 2624 "parsing/parser.mly" ( let loc = _loc_label_ in (Labelled label, mkexpvar ~loc label) ) -# 15019 "parsing/parser.ml" +# 22389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15058,11 +22428,11 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let ty : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic ty in + let ty : (Parsetree.type_constraint) = Obj.magic ty in let label : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 15066 "parsing/parser.ml" +# 22436 "parsing/parser.ml" ) = Obj.magic label in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -15072,10 +22442,10 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression) = let _endpos = _endpos__5_ in let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2485 "parsing/parser.mly" +# 2627 "parsing/parser.mly" ( (Labelled label, mkexp_constraint ~loc:(_startpos__2_, _endpos) (mkexpvar ~loc:_loc_label_ label) ty) ) -# 15079 "parsing/parser.ml" +# 22449 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15100,9 +22470,9 @@ module Tables = struct }; } = _menhir_stack in let label : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 15106 "parsing/parser.ml" +# 22476 "parsing/parser.ml" ) = Obj.magic label in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15110,10 +22480,10 @@ module Tables = struct let _endpos = _endpos_label_ in let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2488 "parsing/parser.mly" +# 2630 "parsing/parser.mly" ( let loc = _loc_label_ in (Optional label, mkexpvar ~loc label) ) -# 15117 "parsing/parser.ml" +# 22487 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15139,17 +22509,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 722 "parsing/parser.mly" +# 795 "parsing/parser.mly" (string) -# 15145 "parsing/parser.ml" +# 22515 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2491 "parsing/parser.mly" +# 2633 "parsing/parser.mly" ( (Optional _1, _2) ) -# 15153 "parsing/parser.ml" +# 22523 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15202,15 +22572,15 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 = let _1 = _1_inlined1 in -# 2221 "parsing/parser.mly" +# 2355 "parsing/parser.mly" ( _1 ) -# 15208 "parsing/parser.ml" +# 22578 "parsing/parser.ml" in -# 2195 "parsing/parser.mly" +# 2329 "parsing/parser.mly" ( (Optional (fst _3), _4, snd _3) ) -# 15214 "parsing/parser.ml" +# 22584 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15235,9 +22605,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 15241 "parsing/parser.ml" +# 22611 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15250,24 +22620,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15256 "parsing/parser.ml" +# 22626 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2233 "parsing/parser.mly" +# 2367 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15265 "parsing/parser.ml" +# 22635 "parsing/parser.ml" in -# 2197 "parsing/parser.mly" +# 2331 "parsing/parser.mly" ( (Optional (fst _2), None, snd _2) ) -# 15271 "parsing/parser.ml" +# 22641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15314,9 +22684,9 @@ module Tables = struct let _3 : (Parsetree.pattern) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 722 "parsing/parser.mly" +# 795 "parsing/parser.mly" (string) -# 15320 "parsing/parser.ml" +# 22690 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -15324,15 +22694,15 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 = let _1 = _1_inlined1 in -# 2221 "parsing/parser.mly" +# 2355 "parsing/parser.mly" ( _1 ) -# 15330 "parsing/parser.ml" +# 22700 "parsing/parser.ml" in -# 2199 "parsing/parser.mly" +# 2333 "parsing/parser.mly" ( (Optional _1, _4, _3) ) -# 15336 "parsing/parser.ml" +# 22706 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15358,17 +22728,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.pattern) = Obj.magic _2 in let _1 : ( -# 722 "parsing/parser.mly" +# 795 "parsing/parser.mly" (string) -# 15364 "parsing/parser.ml" +# 22734 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2201 "parsing/parser.mly" +# 2335 "parsing/parser.mly" ( (Optional _1, None, _2) ) -# 15372 "parsing/parser.ml" +# 22742 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15412,9 +22782,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2203 "parsing/parser.mly" +# 2337 "parsing/parser.mly" ( (Labelled (fst _3), None, snd _3) ) -# 15418 "parsing/parser.ml" +# 22788 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15439,9 +22809,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 15445 "parsing/parser.ml" +# 22815 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15454,24 +22824,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15460 "parsing/parser.ml" +# 22830 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2233 "parsing/parser.mly" +# 2367 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15469 "parsing/parser.ml" +# 22839 "parsing/parser.ml" in -# 2205 "parsing/parser.mly" +# 2339 "parsing/parser.mly" ( (Labelled (fst _2), None, snd _2) ) -# 15475 "parsing/parser.ml" +# 22845 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15497,17 +22867,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.pattern) = Obj.magic _2 in let _1 : ( -# 692 "parsing/parser.mly" +# 765 "parsing/parser.mly" (string) -# 15503 "parsing/parser.ml" +# 22873 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2207 "parsing/parser.mly" +# 2341 "parsing/parser.mly" ( (Labelled _1, None, _2) ) -# 15511 "parsing/parser.ml" +# 22881 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15530,9 +22900,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2209 "parsing/parser.mly" +# 2343 "parsing/parser.mly" ( (Nolabel, None, _1) ) -# 15536 "parsing/parser.ml" +# 22906 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15550,14 +22920,16 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.pattern * Parsetree.expression) = Obj.magic _1 in + let _1 : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern * Parsetree.expression * bool) = -# 2534 "parsing/parser.mly" - ( let p,e = _1 in (p,e,false) ) -# 15561 "parsing/parser.ml" + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = +# 2672 "parsing/parser.mly" + ( let p,e,c = _1 in (p,e,c,false) ) +# 22933 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15579,13 +22951,14 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern * Parsetree.expression * bool) = let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 2537 "parsing/parser.mly" - ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, true) ) -# 15589 "parsing/parser.ml" +# 2675 "parsing/parser.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, None, true) ) +# 22962 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15614,20 +22987,21 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.pattern * Parsetree.expression) = let _1 = + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2498 "parsing/parser.mly" +# 2640 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15625 "parsing/parser.ml" +# 22999 "parsing/parser.ml" in -# 2502 "parsing/parser.mly" - ( (_1, _2) ) -# 15631 "parsing/parser.ml" +# 2644 "parsing/parser.mly" + ( (_1, _2, None) ) +# 23005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15665,39 +23039,34 @@ module Tables = struct } = _menhir_stack in let _4 : (Parsetree.expression) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _2 in + let _2 : (Parsetree.type_constraint) = Obj.magic _2 in let _1 : (Asttypes.label) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.pattern * Parsetree.expression) = let _1 = + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2498 "parsing/parser.mly" +# 2640 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15681 "parsing/parser.ml" +# 23056 "parsing/parser.ml" in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2504 "parsing/parser.mly" +# 2646 "parsing/parser.mly" ( let v = _1 in (* PR#7344 *) let t = match _2 with - Some t, None -> t - | _, Some t -> t - | _ -> assert false + Pconstraint t -> + Pvc_constraint { locally_abstract_univars = []; typ=t } + | Pcoerce (ground, coercion) -> Pvc_coercion { ground; coercion} in - let loc = Location.(t.ptyp_loc.loc_start, t.ptyp_loc.loc_end) in - let typ = ghtyp ~loc (Ptyp_poly([],t)) in - let patloc = (_startpos__1_, _endpos__2_) in - (ghpat ~loc:patloc (Ppat_constraint(v, typ)), - mkexp_constraint ~loc:_sloc _4 _2) ) -# 15701 "parsing/parser.ml" + (v, _4, Some t) + ) +# 23070 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15761,30 +23130,31 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.pattern * Parsetree.expression) = let _3 = + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _3 = let _1 = let _1 = let xs = # 253 "" ( List.rev xs ) -# 15771 "parsing/parser.ml" +# 23141 "parsing/parser.ml" in -# 989 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( xs ) -# 15776 "parsing/parser.ml" +# 23146 "parsing/parser.ml" in -# 3268 "parsing/parser.mly" +# 3421 "parsing/parser.mly" ( _1 ) -# 15782 "parsing/parser.ml" +# 23152 "parsing/parser.ml" in -# 3272 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 15788 "parsing/parser.ml" +# 23158 "parsing/parser.ml" in let _startpos__3_ = _startpos_xs_ in @@ -15793,19 +23163,19 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2498 "parsing/parser.mly" +# 2640 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15799 "parsing/parser.ml" +# 23169 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2517 "parsing/parser.mly" - ( let patloc = (_startpos__1_, _endpos__3_) in - (ghpat ~loc:patloc - (Ppat_constraint(_1, ghtyp ~loc:(_loc__3_) _3)), - _5) ) -# 15809 "parsing/parser.ml" +# 2656 "parsing/parser.mly" + ( + let t = ghtyp ~loc:(_loc__3_) _3 in + (_1, _5, Some (Pvc_constraint { locally_abstract_univars = []; typ=t })) + ) +# 23179 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15876,31 +23246,29 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__8_ in - let _v : (Parsetree.pattern * Parsetree.expression) = let _4 = -# 2495 "parsing/parser.mly" + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _4 = +# 2637 "parsing/parser.mly" ( xs ) -# 15883 "parsing/parser.ml" +# 23254 "parsing/parser.ml" in let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2498 "parsing/parser.mly" +# 2640 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15892 "parsing/parser.ml" +# 23263 "parsing/parser.ml" in - let _endpos = _endpos__8_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2522 "parsing/parser.mly" - ( let exp, poly = - wrap_type_annotation ~loc:_sloc _4 _6 _8 in - let loc = (_startpos__1_, _endpos__6_) in - (ghpat ~loc (Ppat_constraint(_1, poly)), exp) ) -# 15904 "parsing/parser.ml" +# 2661 "parsing/parser.mly" + ( let constraint' = + Pvc_constraint { locally_abstract_univars=_4; typ = _6} + in + (_1, _8, Some constraint') ) +# 23272 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15936,10 +23304,11 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern * Parsetree.expression) = -# 2527 "parsing/parser.mly" - ( (_1, _3) ) -# 15943 "parsing/parser.ml" + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = +# 2666 "parsing/parser.mly" + ( (_1, _3, None) ) +# 23312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15989,11 +23358,11 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.pattern * Parsetree.expression) = -# 2529 "parsing/parser.mly" - ( let loc = (_startpos__1_, _endpos__3_) in - (ghpat ~loc (Ppat_constraint(_1, _3)), _5) ) -# 15997 "parsing/parser.ml" + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = +# 2668 "parsing/parser.mly" + ( (_1, _5, Some(Pvc_constraint { locally_abstract_univars=[]; typ=_3 })) ) +# 23366 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16042,7 +23411,8 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let ext : (string Asttypes.loc option) = Obj.magic ext in @@ -16054,36 +23424,36 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 16060 "parsing/parser.ml" +# 23430 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 16069 "parsing/parser.ml" +# 23439 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2557 "parsing/parser.mly" +# 2695 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 16081 "parsing/parser.ml" +# 23451 "parsing/parser.ml" in -# 2547 "parsing/parser.mly" +# 2685 "parsing/parser.mly" ( _1 ) -# 16087 "parsing/parser.ml" +# 23457 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16113,9 +23483,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (let_bindings) = -# 2548 "parsing/parser.mly" +# 2686 "parsing/parser.mly" ( addlb _1 _2 ) -# 16119 "parsing/parser.ml" +# 23489 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16158,7 +23528,8 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -16169,41 +23540,41 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 16175 "parsing/parser.ml" +# 23546 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 16184 "parsing/parser.ml" +# 23555 "parsing/parser.ml" in let ext = -# 3860 "parsing/parser.mly" +# 4069 "parsing/parser.mly" ( None ) -# 16190 "parsing/parser.ml" +# 23561 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2557 "parsing/parser.mly" +# 2695 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 16201 "parsing/parser.ml" +# 23572 "parsing/parser.ml" in -# 2547 "parsing/parser.mly" +# 2685 "parsing/parser.mly" ( _1 ) -# 16207 "parsing/parser.ml" +# 23578 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16258,10 +23629,11 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _2 : (string Asttypes.loc) = Obj.magic _2 in + let _2 : (Ast_helper.str) = Obj.magic _2 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16271,18 +23643,18 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 16277 "parsing/parser.ml" +# 23649 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let attrs1 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 16286 "parsing/parser.ml" +# 23658 "parsing/parser.ml" in let ext = @@ -16291,27 +23663,27 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3862 "parsing/parser.mly" +# 4071 "parsing/parser.mly" ( not_expecting _loc "extension" ) -# 16297 "parsing/parser.ml" +# 23669 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2557 "parsing/parser.mly" +# 2695 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 16309 "parsing/parser.ml" +# 23681 "parsing/parser.ml" in -# 2547 "parsing/parser.mly" +# 2685 "parsing/parser.mly" ( _1 ) -# 16315 "parsing/parser.ml" +# 23687 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16341,9 +23713,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (let_bindings) = -# 2548 "parsing/parser.mly" +# 2686 "parsing/parser.mly" ( addlb _1 _2 ) -# 16347 "parsing/parser.ml" +# 23719 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16366,9 +23738,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2237 "parsing/parser.mly" +# 2371 "parsing/parser.mly" ( _1 ) -# 16372 "parsing/parser.ml" +# 23744 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16406,24 +23778,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2239 "parsing/parser.mly" +# 2373 "parsing/parser.mly" ( Ppat_constraint(_1, _3) ) -# 16412 "parsing/parser.ml" +# 23784 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 16421 "parsing/parser.ml" +# 23793 "parsing/parser.ml" in -# 2240 "parsing/parser.mly" +# 2374 "parsing/parser.mly" ( _1 ) -# 16427 "parsing/parser.ml" +# 23799 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16457,15 +23829,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2498 "parsing/parser.mly" +# 2640 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 16463 "parsing/parser.ml" +# 23835 "parsing/parser.ml" in -# 2574 "parsing/parser.mly" +# 2712 "parsing/parser.mly" ( (pat, exp) ) -# 16469 "parsing/parser.ml" +# 23841 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16491,9 +23863,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 2577 "parsing/parser.mly" +# 2715 "parsing/parser.mly" ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) -# 16497 "parsing/parser.ml" +# 23869 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16544,10 +23916,10 @@ module Tables = struct let _startpos = _startpos_pat_ in let _endpos = _endpos_exp_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2579 "parsing/parser.mly" +# 2717 "parsing/parser.mly" ( let loc = (_startpos_pat_, _endpos_typ_) in (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) -# 16551 "parsing/parser.ml" +# 23923 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16584,9 +23956,9 @@ module Tables = struct let _startpos = _startpos_pat_ in let _endpos = _endpos_exp_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2582 "parsing/parser.mly" +# 2720 "parsing/parser.mly" ( (pat, exp) ) -# 16590 "parsing/parser.ml" +# 23962 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16609,10 +23981,10 @@ module Tables = struct let _startpos = _startpos_body_ in let _endpos = _endpos_body_ in let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = -# 2586 "parsing/parser.mly" +# 2724 "parsing/parser.mly" ( let let_pat, let_exp = body in let_pat, let_exp, [] ) -# 16616 "parsing/parser.ml" +# 23988 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16644,9 +24016,9 @@ module Tables = struct } = _menhir_stack in let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in let _1 : ( -# 688 "parsing/parser.mly" +# 761 "parsing/parser.mly" (string) -# 16650 "parsing/parser.ml" +# 24022 "parsing/parser.ml" ) = Obj.magic _1 in let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16657,22 +24029,22 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16663 "parsing/parser.ml" +# 24035 "parsing/parser.ml" in let _endpos = _endpos_body_ in let _symbolstartpos = _startpos_bindings_ in let _sloc = (_symbolstartpos, _endpos) in -# 2589 "parsing/parser.mly" +# 2727 "parsing/parser.mly" ( let let_pat, let_exp, rev_ands = bindings in let pbop_pat, pbop_exp = body in let pbop_loc = make_loc _sloc in let and_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in let_pat, let_exp, and_ :: rev_ands ) -# 16676 "parsing/parser.ml" +# 24048 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16690,7 +24062,7 @@ module Tables = struct let _v : (Parsetree.class_declaration list) = # 211 "" ( [] ) -# 16694 "parsing/parser.ml" +# 24066 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16754,9 +24126,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in let body : (Parsetree.class_expr) = Obj.magic body in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 16760 "parsing/parser.ml" +# 24132 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -16769,9 +24141,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 16775 "parsing/parser.ml" +# 24147 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -16781,24 +24153,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16787 "parsing/parser.ml" +# 24159 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 16795 "parsing/parser.ml" +# 24167 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1841 "parsing/parser.mly" +# 1944 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -16806,13 +24178,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs ) -# 16810 "parsing/parser.ml" +# 24182 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 16816 "parsing/parser.ml" +# 24188 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16830,7 +24202,7 @@ module Tables = struct let _v : (Parsetree.class_description list) = # 211 "" ( [] ) -# 16834 "parsing/parser.ml" +# 24206 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16901,9 +24273,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _6 : unit = Obj.magic _6 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 16907 "parsing/parser.ml" +# 24279 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -16916,9 +24288,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 16922 "parsing/parser.ml" +# 24294 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -16928,24 +24300,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16934 "parsing/parser.ml" +# 24306 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 16942 "parsing/parser.ml" +# 24314 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2132 "parsing/parser.mly" +# 2235 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -16953,13 +24325,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs ) -# 16957 "parsing/parser.ml" +# 24329 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 16963 "parsing/parser.ml" +# 24335 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16977,7 +24349,7 @@ module Tables = struct let _v : (Parsetree.class_type_declaration list) = # 211 "" ( [] ) -# 16981 "parsing/parser.ml" +# 24353 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17048,9 +24420,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _6 : unit = Obj.magic _6 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 17054 "parsing/parser.ml" +# 24426 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -17063,9 +24435,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 17069 "parsing/parser.ml" +# 24441 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -17075,24 +24447,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17081 "parsing/parser.ml" +# 24453 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 17089 "parsing/parser.ml" +# 24461 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2171 "parsing/parser.mly" +# 2274 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -17100,13 +24472,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs ) -# 17104 "parsing/parser.ml" +# 24476 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17110 "parsing/parser.ml" +# 24482 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17124,7 +24496,7 @@ module Tables = struct let _v : (Parsetree.module_binding list) = # 211 "" ( [] ) -# 17128 "parsing/parser.ml" +# 24500 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17185,9 +24557,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 17191 "parsing/parser.ml" +# 24563 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -17197,24 +24569,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17203 "parsing/parser.ml" +# 24575 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 17211 "parsing/parser.ml" +# 24583 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1503 "parsing/parser.mly" +# 1600 "parsing/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -17222,13 +24594,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Mb.mk name body ~attrs ~loc ~text ~docs ) -# 17226 "parsing/parser.ml" +# 24598 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17232 "parsing/parser.ml" +# 24604 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17246,7 +24618,7 @@ module Tables = struct let _v : (Parsetree.module_declaration list) = # 211 "" ( [] ) -# 17250 "parsing/parser.ml" +# 24622 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17314,9 +24686,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 17320 "parsing/parser.ml" +# 24692 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -17326,24 +24698,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17332 "parsing/parser.ml" +# 24704 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 17340 "parsing/parser.ml" +# 24712 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1782 "parsing/parser.mly" +# 1885 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let docs = symbol_docs _sloc in @@ -17351,13 +24723,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Md.mk name mty ~attrs ~loc ~text ~docs ) -# 17355 "parsing/parser.ml" +# 24727 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17361 "parsing/parser.ml" +# 24733 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17375,7 +24747,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 211 "" ( [] ) -# 17379 "parsing/parser.ml" +# 24751 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17407,7 +24779,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 213 "" ( x :: xs ) -# 17411 "parsing/parser.ml" +# 24783 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17425,7 +24797,7 @@ module Tables = struct let _v : (Parsetree.type_declaration list) = # 211 "" ( [] ) -# 17429 "parsing/parser.ml" +# 24801 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17490,9 +24862,9 @@ module Tables = struct let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs_inlined1 in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 17496 "parsing/parser.ml" +# 24868 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -17505,9 +24877,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 17511 "parsing/parser.ml" +# 24883 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -17516,18 +24888,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17520 "parsing/parser.ml" +# 24892 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 17525 "parsing/parser.ml" +# 24897 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 17531 "parsing/parser.ml" +# 24903 "parsing/parser.ml" in let id = @@ -17536,24 +24908,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17542 "parsing/parser.ml" +# 24914 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 17550 "parsing/parser.ml" +# 24922 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2974 "parsing/parser.mly" +# 3127 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -17562,13 +24934,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text ) -# 17566 "parsing/parser.ml" +# 24938 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17572 "parsing/parser.ml" +# 24944 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17586,7 +24958,7 @@ module Tables = struct let _v : (Parsetree.type_declaration list) = # 211 "" ( [] ) -# 17590 "parsing/parser.ml" +# 24962 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17658,9 +25030,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 17664 "parsing/parser.ml" +# 25036 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -17673,9 +25045,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 17679 "parsing/parser.ml" +# 25051 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -17684,24 +25056,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17688 "parsing/parser.ml" +# 25060 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 17693 "parsing/parser.ml" +# 25065 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 17699 "parsing/parser.ml" +# 25071 "parsing/parser.ml" in let kind_priv_manifest = -# 3020 "parsing/parser.mly" +# 3173 "parsing/parser.mly" ( _2 ) -# 17705 "parsing/parser.ml" +# 25077 "parsing/parser.ml" in let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -17709,24 +25081,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17715 "parsing/parser.ml" +# 25087 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 17723 "parsing/parser.ml" +# 25095 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2974 "parsing/parser.mly" +# 3127 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -17735,13 +25107,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text ) -# 17739 "parsing/parser.ml" +# 25111 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17745 "parsing/parser.ml" +# 25117 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17759,7 +25131,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 211 "" ( [] ) -# 17763 "parsing/parser.ml" +# 25135 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17791,7 +25163,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 213 "" ( x :: xs ) -# 17795 "parsing/parser.ml" +# 25167 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17809,7 +25181,7 @@ module Tables = struct let _v : (Parsetree.signature_item list list) = # 211 "" ( [] ) -# 17813 "parsing/parser.ml" +# 25185 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17842,21 +25214,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 897 "parsing/parser.mly" +# 970 "parsing/parser.mly" ( text_sig _startpos ) -# 17848 "parsing/parser.ml" +# 25220 "parsing/parser.ml" in -# 1641 "parsing/parser.mly" +# 1742 "parsing/parser.mly" ( _1 ) -# 17854 "parsing/parser.ml" +# 25226 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17860 "parsing/parser.ml" +# 25232 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17889,21 +25261,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 895 "parsing/parser.mly" +# 968 "parsing/parser.mly" ( text_sig _startpos @ [_1] ) -# 17895 "parsing/parser.ml" +# 25267 "parsing/parser.ml" in -# 1641 "parsing/parser.mly" +# 1742 "parsing/parser.mly" ( _1 ) -# 17901 "parsing/parser.ml" +# 25273 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17907 "parsing/parser.ml" +# 25279 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17921,7 +25293,7 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = # 211 "" ( [] ) -# 17925 "parsing/parser.ml" +# 25297 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17954,40 +25326,40 @@ module Tables = struct let _1 = let ys = let items = -# 957 "parsing/parser.mly" +# 1030 "parsing/parser.mly" ( [] ) -# 17960 "parsing/parser.ml" +# 25332 "parsing/parser.ml" in -# 1386 "parsing/parser.mly" +# 1481 "parsing/parser.mly" ( items ) -# 17965 "parsing/parser.ml" +# 25337 "parsing/parser.ml" in let xs = let _startpos = _startpos__1_ in -# 893 "parsing/parser.mly" +# 966 "parsing/parser.mly" ( text_str _startpos ) -# 17973 "parsing/parser.ml" +# 25345 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 17979 "parsing/parser.ml" +# 25351 "parsing/parser.ml" in -# 1402 "parsing/parser.mly" +# 1497 "parsing/parser.mly" ( _1 ) -# 17985 "parsing/parser.ml" +# 25357 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17991 "parsing/parser.ml" +# 25363 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18039,70 +25411,70 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 18045 "parsing/parser.ml" +# 25417 "parsing/parser.ml" in -# 1393 "parsing/parser.mly" +# 1488 "parsing/parser.mly" ( mkstrexp e attrs ) -# 18050 "parsing/parser.ml" +# 25422 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 891 "parsing/parser.mly" +# 964 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 18058 "parsing/parser.ml" +# 25430 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 910 "parsing/parser.mly" +# 983 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 18068 "parsing/parser.ml" +# 25440 "parsing/parser.ml" in -# 959 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x ) -# 18074 "parsing/parser.ml" +# 25446 "parsing/parser.ml" in -# 1386 "parsing/parser.mly" +# 1481 "parsing/parser.mly" ( items ) -# 18080 "parsing/parser.ml" +# 25452 "parsing/parser.ml" in let xs = let _startpos = _startpos__1_ in -# 893 "parsing/parser.mly" +# 966 "parsing/parser.mly" ( text_str _startpos ) -# 18088 "parsing/parser.ml" +# 25460 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 18094 "parsing/parser.ml" +# 25466 "parsing/parser.ml" in -# 1402 "parsing/parser.mly" +# 1497 "parsing/parser.mly" ( _1 ) -# 18100 "parsing/parser.ml" +# 25472 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18106 "parsing/parser.ml" +# 25478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18135,21 +25507,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 891 "parsing/parser.mly" +# 964 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 18141 "parsing/parser.ml" +# 25513 "parsing/parser.ml" in -# 1402 "parsing/parser.mly" +# 1497 "parsing/parser.mly" ( _1 ) -# 18147 "parsing/parser.ml" +# 25519 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18153 "parsing/parser.ml" +# 25525 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18167,7 +25539,7 @@ module Tables = struct let _v : (Parsetree.class_type_field list list) = # 211 "" ( [] ) -# 18171 "parsing/parser.ml" +# 25543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18199,15 +25571,15 @@ module Tables = struct let _v : (Parsetree.class_type_field list list) = let x = let _startpos = _startpos__1_ in -# 905 "parsing/parser.mly" +# 978 "parsing/parser.mly" ( text_csig _startpos @ [_1] ) -# 18205 "parsing/parser.ml" +# 25577 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18211 "parsing/parser.ml" +# 25583 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18225,7 +25597,7 @@ module Tables = struct let _v : (Parsetree.class_field list list) = # 211 "" ( [] ) -# 18229 "parsing/parser.ml" +# 25601 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18257,15 +25629,15 @@ module Tables = struct let _v : (Parsetree.class_field list list) = let x = let _startpos = _startpos__1_ in -# 903 "parsing/parser.mly" +# 976 "parsing/parser.mly" ( text_cstr _startpos @ [_1] ) -# 18263 "parsing/parser.ml" +# 25635 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18269 "parsing/parser.ml" +# 25641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18283,7 +25655,7 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = # 211 "" ( [] ) -# 18287 "parsing/parser.ml" +# 25659 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18315,15 +25687,15 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = let x = let _startpos = _startpos__1_ in -# 891 "parsing/parser.mly" +# 964 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 18321 "parsing/parser.ml" +# 25693 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18327 "parsing/parser.ml" +# 25699 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18341,7 +25713,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase list list) = # 211 "" ( [] ) -# 18345 "parsing/parser.ml" +# 25717 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18374,32 +25746,32 @@ module Tables = struct let _1 = let x = let _1 = -# 957 "parsing/parser.mly" +# 1030 "parsing/parser.mly" ( [] ) -# 18380 "parsing/parser.ml" +# 25752 "parsing/parser.ml" in -# 1189 "parsing/parser.mly" +# 1283 "parsing/parser.mly" ( _1 ) -# 18385 "parsing/parser.ml" +# 25757 "parsing/parser.ml" in # 183 "" ( x ) -# 18391 "parsing/parser.ml" +# 25763 "parsing/parser.ml" in -# 1201 "parsing/parser.mly" +# 1295 "parsing/parser.mly" ( _1 ) -# 18397 "parsing/parser.ml" +# 25769 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18403 "parsing/parser.ml" +# 25775 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18451,58 +25823,58 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 18457 "parsing/parser.ml" +# 25829 "parsing/parser.ml" in -# 1393 "parsing/parser.mly" +# 1488 "parsing/parser.mly" ( mkstrexp e attrs ) -# 18462 "parsing/parser.ml" +# 25834 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 974 "parsing/parser.mly" ( Ptop_def [_1] ) -# 18468 "parsing/parser.ml" +# 25840 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 899 "parsing/parser.mly" +# 972 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 18476 "parsing/parser.ml" +# 25848 "parsing/parser.ml" in -# 959 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x ) -# 18482 "parsing/parser.ml" +# 25854 "parsing/parser.ml" in -# 1189 "parsing/parser.mly" +# 1283 "parsing/parser.mly" ( _1 ) -# 18488 "parsing/parser.ml" +# 25860 "parsing/parser.ml" in # 183 "" ( x ) -# 18494 "parsing/parser.ml" +# 25866 "parsing/parser.ml" in -# 1201 "parsing/parser.mly" +# 1295 "parsing/parser.mly" ( _1 ) -# 18500 "parsing/parser.ml" +# 25872 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18506 "parsing/parser.ml" +# 25878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18534,27 +25906,27 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase list list) = let x = let _1 = let _1 = -# 901 "parsing/parser.mly" +# 974 "parsing/parser.mly" ( Ptop_def [_1] ) -# 18540 "parsing/parser.ml" +# 25912 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 899 "parsing/parser.mly" +# 972 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 18546 "parsing/parser.ml" +# 25918 "parsing/parser.ml" in -# 1201 "parsing/parser.mly" +# 1295 "parsing/parser.mly" ( _1 ) -# 18552 "parsing/parser.ml" +# 25924 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18558 "parsing/parser.ml" +# 25930 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18589,29 +25961,29 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 910 "parsing/parser.mly" +# 983 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 18596 "parsing/parser.ml" +# 25968 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 899 "parsing/parser.mly" +# 972 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 18603 "parsing/parser.ml" +# 25975 "parsing/parser.ml" in -# 1201 "parsing/parser.mly" +# 1295 "parsing/parser.mly" ( _1 ) -# 18609 "parsing/parser.ml" +# 25981 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18615 "parsing/parser.ml" +# 25987 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18650,7 +26022,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = # 124 "" ( None ) -# 18654 "parsing/parser.ml" +# 26026 "parsing/parser.ml" in let x = let label = @@ -18658,9 +26030,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18664 "parsing/parser.ml" +# 26036 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18668,7 +26040,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2860 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -18682,13 +26054,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 18686 "parsing/parser.ml" +# 26058 "parsing/parser.ml" in -# 1126 "parsing/parser.mly" +# 1220 "parsing/parser.mly" ( [x], None ) -# 18692 "parsing/parser.ml" +# 26064 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18734,7 +26106,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = # 126 "" ( Some x ) -# 18738 "parsing/parser.ml" +# 26110 "parsing/parser.ml" in let x = let label = @@ -18742,9 +26114,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18748 "parsing/parser.ml" +# 26120 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18752,7 +26124,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2860 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -18766,13 +26138,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 18770 "parsing/parser.ml" +# 26142 "parsing/parser.ml" in -# 1126 "parsing/parser.mly" +# 1220 "parsing/parser.mly" ( [x], None ) -# 18776 "parsing/parser.ml" +# 26148 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18835,9 +26207,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18841 "parsing/parser.ml" +# 26213 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18845,7 +26217,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2860 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -18859,13 +26231,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 18863 "parsing/parser.ml" +# 26235 "parsing/parser.ml" in -# 1128 "parsing/parser.mly" +# 1222 "parsing/parser.mly" ( [x], Some y ) -# 18869 "parsing/parser.ml" +# 26241 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18921,9 +26293,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18927 "parsing/parser.ml" +# 26299 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18931,7 +26303,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2860 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( let constraint_loc, label, pat = match opat with | None -> @@ -18945,14 +26317,14 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 18949 "parsing/parser.ml" +# 26321 "parsing/parser.ml" in -# 1132 "parsing/parser.mly" +# 1226 "parsing/parser.mly" ( let xs, y = tail in x :: xs, y ) -# 18956 "parsing/parser.ml" +# 26328 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18989,9 +26361,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.case) = -# 2615 "parsing/parser.mly" +# 2760 "parsing/parser.mly" ( Exp.case _1 _3 ) -# 18995 "parsing/parser.ml" +# 26367 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19042,9 +26414,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.case) = -# 2617 "parsing/parser.mly" +# 2762 "parsing/parser.mly" ( Exp.case _1 ~guard:_3 _5 ) -# 19048 "parsing/parser.ml" +# 26420 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19082,9 +26454,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2619 "parsing/parser.mly" +# 2764 "parsing/parser.mly" ( Exp.case _1 (Exp.unreachable ~loc:(make_loc _loc__3_) ()) ) -# 19088 "parsing/parser.ml" +# 26460 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19145,9 +26517,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19151 "parsing/parser.ml" +# 26523 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -19156,49 +26528,49 @@ module Tables = struct let _6 = let _1 = _1_inlined3 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19162 "parsing/parser.ml" +# 26534 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19171 "parsing/parser.ml" +# 26543 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3286 "parsing/parser.mly" +# 3439 "parsing/parser.mly" ( _1 ) -# 19180 "parsing/parser.ml" +# 26552 "parsing/parser.ml" in let _1 = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19187 "parsing/parser.ml" +# 26559 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19195 "parsing/parser.ml" +# 26567 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3496 "parsing/parser.mly" +# 3705 "parsing/parser.mly" ( let info = match rhs_info _endpos__4_ with | Some _ as info_before_semi -> info_before_semi @@ -19206,13 +26578,13 @@ module Tables = struct in let attrs = add_info_attrs info (_4 @ _6) in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 19210 "parsing/parser.ml" +# 26582 "parsing/parser.ml" in -# 3477 "parsing/parser.mly" +# 3686 "parsing/parser.mly" ( let (f, c) = tail in (head :: f, c) ) -# 19216 "parsing/parser.ml" +# 26588 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19253,15 +26625,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3507 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 19259 "parsing/parser.ml" +# 26631 "parsing/parser.ml" in -# 3477 "parsing/parser.mly" +# 3686 "parsing/parser.mly" ( let (f, c) = tail in (head :: f, c) ) -# 19265 "parsing/parser.ml" +# 26637 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19315,9 +26687,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19321 "parsing/parser.ml" +# 26693 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -19326,49 +26698,49 @@ module Tables = struct let _6 = let _1 = _1_inlined3 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19332 "parsing/parser.ml" +# 26704 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19341 "parsing/parser.ml" +# 26713 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3286 "parsing/parser.mly" +# 3439 "parsing/parser.mly" ( _1 ) -# 19350 "parsing/parser.ml" +# 26722 "parsing/parser.ml" in let _1 = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19357 "parsing/parser.ml" +# 26729 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19365 "parsing/parser.ml" +# 26737 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3496 "parsing/parser.mly" +# 3705 "parsing/parser.mly" ( let info = match rhs_info _endpos__4_ with | Some _ as info_before_semi -> info_before_semi @@ -19376,13 +26748,13 @@ module Tables = struct in let attrs = add_info_attrs info (_4 @ _6) in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 19380 "parsing/parser.ml" +# 26752 "parsing/parser.ml" in -# 3480 "parsing/parser.mly" +# 3689 "parsing/parser.mly" ( [head], Closed ) -# 19386 "parsing/parser.ml" +# 26758 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19416,15 +26788,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3507 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 19422 "parsing/parser.ml" +# 26794 "parsing/parser.ml" in -# 3480 "parsing/parser.mly" +# 3689 "parsing/parser.mly" ( [head], Closed ) -# 19428 "parsing/parser.ml" +# 26800 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19464,9 +26836,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19470 "parsing/parser.ml" +# 26842 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -19475,50 +26847,50 @@ module Tables = struct let _4 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19481 "parsing/parser.ml" +# 26853 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3286 "parsing/parser.mly" +# 3439 "parsing/parser.mly" ( _1 ) -# 19490 "parsing/parser.ml" +# 26862 "parsing/parser.ml" in let _1 = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19497 "parsing/parser.ml" +# 26869 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19505 "parsing/parser.ml" +# 26877 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3489 "parsing/parser.mly" +# 3698 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _4 in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 19516 "parsing/parser.ml" +# 26888 "parsing/parser.ml" in -# 3483 "parsing/parser.mly" +# 3692 "parsing/parser.mly" ( [head], Closed ) -# 19522 "parsing/parser.ml" +# 26894 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19545,15 +26917,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3507 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 19551 "parsing/parser.ml" +# 26923 "parsing/parser.ml" in -# 3483 "parsing/parser.mly" +# 3692 "parsing/parser.mly" ( [head], Closed ) -# 19557 "parsing/parser.ml" +# 26929 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19576,9 +26948,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.object_field list * Asttypes.closed_flag) = -# 3485 "parsing/parser.mly" +# 3694 "parsing/parser.mly" ( [], Open ) -# 19582 "parsing/parser.ml" +# 26954 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19623,9 +26995,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19629 "parsing/parser.ml" +# 27001 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let private_ : (Asttypes.private_flag) = Obj.magic private_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19637,41 +27009,41 @@ module Tables = struct Parsetree.attributes) = let ty = let _1 = _1_inlined2 in -# 3282 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( _1 ) -# 19643 "parsing/parser.ml" +# 27015 "parsing/parser.ml" in let label = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19651 "parsing/parser.ml" +# 27023 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19659 "parsing/parser.ml" +# 27031 "parsing/parser.ml" in let attrs = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19665 "parsing/parser.ml" +# 27037 "parsing/parser.ml" in let _1 = -# 3752 "parsing/parser.mly" +# 3961 "parsing/parser.mly" ( Fresh ) -# 19670 "parsing/parser.ml" +# 27042 "parsing/parser.ml" in -# 1979 "parsing/parser.mly" +# 2082 "parsing/parser.mly" ( (label, private_, Cfk_virtual ty), attrs ) -# 19675 "parsing/parser.ml" +# 27047 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19709,9 +27081,9 @@ module Tables = struct } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19715 "parsing/parser.ml" +# 27087 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19723,36 +27095,36 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19729 "parsing/parser.ml" +# 27101 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19737 "parsing/parser.ml" +# 27109 "parsing/parser.ml" in let _2 = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19743 "parsing/parser.ml" +# 27115 "parsing/parser.ml" in let _1 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 19748 "parsing/parser.ml" +# 27120 "parsing/parser.ml" in -# 1981 "parsing/parser.mly" +# 2084 "parsing/parser.mly" ( let e = _5 in let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in (_4, _3, Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 ) -# 19756 "parsing/parser.ml" +# 27128 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19796,9 +27168,9 @@ module Tables = struct } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19802 "parsing/parser.ml" +# 27174 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -19811,39 +27183,39 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19817 "parsing/parser.ml" +# 27189 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19825 "parsing/parser.ml" +# 27197 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19833 "parsing/parser.ml" +# 27205 "parsing/parser.ml" in let _1 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 19839 "parsing/parser.ml" +# 27211 "parsing/parser.ml" in -# 1981 "parsing/parser.mly" +# 2084 "parsing/parser.mly" ( let e = _5 in let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in (_4, _3, Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 ) -# 19847 "parsing/parser.ml" +# 27219 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19902,9 +27274,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 19908 "parsing/parser.ml" +# 27280 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19916,45 +27288,45 @@ module Tables = struct Parsetree.attributes) = let _6 = let _1 = _1_inlined2 in -# 3282 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( _1 ) -# 19922 "parsing/parser.ml" +# 27294 "parsing/parser.ml" in let _startpos__6_ = _startpos__1_inlined2_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 19931 "parsing/parser.ml" +# 27303 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19939 "parsing/parser.ml" +# 27311 "parsing/parser.ml" in let _2 = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 19945 "parsing/parser.ml" +# 27317 "parsing/parser.ml" in let _1 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 19950 "parsing/parser.ml" +# 27322 "parsing/parser.ml" in -# 1987 "parsing/parser.mly" +# 2090 "parsing/parser.mly" ( let poly_exp = let loc = (_startpos__6_, _endpos__8_) in ghexp ~loc (Pexp_poly(_8, Some _6)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 19958 "parsing/parser.ml" +# 27330 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20019,9 +27391,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20025 "parsing/parser.ml" +# 27397 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -20034,48 +27406,48 @@ module Tables = struct Parsetree.attributes) = let _6 = let _1 = _1_inlined3 in -# 3282 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( _1 ) -# 20040 "parsing/parser.ml" +# 27412 "parsing/parser.ml" in let _startpos__6_ = _startpos__1_inlined3_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 20049 "parsing/parser.ml" +# 27421 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 20057 "parsing/parser.ml" +# 27429 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 20065 "parsing/parser.ml" +# 27437 "parsing/parser.ml" in let _1 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 20071 "parsing/parser.ml" +# 27443 "parsing/parser.ml" in -# 1987 "parsing/parser.mly" +# 2090 "parsing/parser.mly" ( let poly_exp = let loc = (_startpos__6_, _endpos__8_) in ghexp ~loc (Pexp_poly(_8, Some _6)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 20079 "parsing/parser.ml" +# 27451 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20155,9 +27527,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20161 "parsing/parser.ml" +# 27533 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -20167,38 +27539,38 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) = let _7 = -# 2495 "parsing/parser.mly" +# 2637 "parsing/parser.mly" ( xs ) -# 20173 "parsing/parser.ml" +# 27545 "parsing/parser.ml" in let _startpos__7_ = _startpos_xs_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 20181 "parsing/parser.ml" +# 27553 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 20189 "parsing/parser.ml" +# 27561 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 20196 "parsing/parser.ml" +# 27568 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 20202 "parsing/parser.ml" +# 27574 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__11_ in @@ -20214,7 +27586,7 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1993 "parsing/parser.mly" +# 2096 "parsing/parser.mly" ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in let poly_exp = let exp, poly = @@ -20225,7 +27597,7 @@ module Tables = struct ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 20229 "parsing/parser.ml" +# 27601 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20311,9 +27683,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20317 "parsing/parser.ml" +# 27689 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -20324,41 +27696,41 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) = let _7 = -# 2495 "parsing/parser.mly" +# 2637 "parsing/parser.mly" ( xs ) -# 20330 "parsing/parser.ml" +# 27702 "parsing/parser.ml" in let _startpos__7_ = _startpos_xs_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 20338 "parsing/parser.ml" +# 27710 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 20346 "parsing/parser.ml" +# 27718 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 20355 "parsing/parser.ml" +# 27727 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 20362 "parsing/parser.ml" +# 27734 "parsing/parser.ml" in let _endpos = _endpos__11_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -20373,7 +27745,7 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1993 "parsing/parser.mly" +# 2096 "parsing/parser.mly" ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in let poly_exp = let exp, poly = @@ -20384,7 +27756,7 @@ module Tables = struct ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 20388 "parsing/parser.ml" +# 27760 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20403,17 +27775,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20409 "parsing/parser.ml" +# 27781 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20417 "parsing/parser.ml" +# 27789 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20444,9 +27816,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20450 "parsing/parser.ml" +# 27822 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20454,9 +27826,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20460 "parsing/parser.ml" +# 27832 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20475,17 +27847,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 20481 "parsing/parser.ml" +# 27853 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20489 "parsing/parser.ml" +# 27861 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20516,9 +27888,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 20522 "parsing/parser.ml" +# 27894 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20526,9 +27898,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20532 "parsing/parser.ml" +# 27904 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20551,14 +27923,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = let _1 = -# 3646 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( _1 ) -# 20557 "parsing/parser.ml" +# 27929 "parsing/parser.ml" in -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20562 "parsing/parser.ml" +# 27934 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20596,20 +27968,20 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = let _1 = -# 3588 "parsing/parser.mly" +# 3797 "parsing/parser.mly" ( "::" ) -# 20602 "parsing/parser.ml" +# 27974 "parsing/parser.ml" in -# 3646 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( _1 ) -# 20607 "parsing/parser.ml" +# 27979 "parsing/parser.ml" in -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20613 "parsing/parser.ml" +# 27985 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20632,14 +28004,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = let _1 = -# 3646 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( _1 ) -# 20638 "parsing/parser.ml" +# 28010 "parsing/parser.ml" in -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20643 "parsing/parser.ml" +# 28015 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20678,15 +28050,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let _1 = _1_inlined1 in -# 3646 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( _1 ) -# 20684 "parsing/parser.ml" +# 28056 "parsing/parser.ml" in -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20690 "parsing/parser.ml" +# 28062 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20738,20 +28110,20 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _3 = let _1 = -# 3588 "parsing/parser.mly" +# 3797 "parsing/parser.mly" ( "::" ) -# 20744 "parsing/parser.ml" +# 28116 "parsing/parser.ml" in -# 3646 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( _1 ) -# 20749 "parsing/parser.ml" +# 28121 "parsing/parser.ml" in -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20755 "parsing/parser.ml" +# 28127 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20790,15 +28162,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let _1 = _1_inlined1 in -# 3646 "parsing/parser.mly" +# 3855 "parsing/parser.mly" ( _1 ) -# 20796 "parsing/parser.ml" +# 28168 "parsing/parser.ml" in -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20802 "parsing/parser.ml" +# 28174 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20821,9 +28193,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20827 "parsing/parser.ml" +# 28199 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20860,9 +28232,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20866 "parsing/parser.ml" +# 28238 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20881,17 +28253,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20887 "parsing/parser.ml" +# 28259 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20895 "parsing/parser.ml" +# 28267 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20922,9 +28294,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 20928 "parsing/parser.ml" +# 28300 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20932,9 +28304,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20938 "parsing/parser.ml" +# 28310 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20953,17 +28325,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 20959 "parsing/parser.ml" +# 28331 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 20967 "parsing/parser.ml" +# 28339 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20994,9 +28366,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 21000 "parsing/parser.ml" +# 28372 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -21004,9 +28376,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 21010 "parsing/parser.ml" +# 28382 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21029,9 +28401,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3608 "parsing/parser.mly" +# 3817 "parsing/parser.mly" ( Lident _1 ) -# 21035 "parsing/parser.ml" +# 28407 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21068,9 +28440,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3609 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 21074 "parsing/parser.ml" +# 28446 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21093,9 +28465,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3624 "parsing/parser.mly" +# 3833 "parsing/parser.mly" ( _1 ) -# 21099 "parsing/parser.ml" +# 28471 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21142,9 +28514,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3626 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( lapply ~loc:_sloc _1 _3 ) -# 21148 "parsing/parser.ml" +# 28520 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21182,9 +28554,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3628 "parsing/parser.mly" +# 3837 "parsing/parser.mly" ( expecting _loc__3_ "module path" ) -# 21188 "parsing/parser.ml" +# 28560 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21207,9 +28579,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3621 "parsing/parser.mly" +# 3830 "parsing/parser.mly" ( _1 ) -# 21213 "parsing/parser.ml" +# 28585 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21239,9 +28611,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = -# 1462 "parsing/parser.mly" +# 1557 "parsing/parser.mly" ( me ) -# 21245 "parsing/parser.ml" +# 28617 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_expr) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1559 "parsing/parser.mly" + ( expecting _loc__1_ "=" ) +# 28650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21286,24 +28691,24 @@ module Tables = struct let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1465 "parsing/parser.mly" +# 1562 "parsing/parser.mly" ( Pmod_constraint(me, mty) ) -# 21292 "parsing/parser.ml" +# 28697 "parsing/parser.ml" in let _endpos__1_ = _endpos_me_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 930 "parsing/parser.mly" +# 1003 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21301 "parsing/parser.ml" +# 28706 "parsing/parser.ml" in -# 1469 "parsing/parser.mly" +# 1566 "parsing/parser.mly" ( _1 ) -# 21307 "parsing/parser.ml" +# 28712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21334,25 +28739,25 @@ module Tables = struct let _endpos = _endpos_body_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1467 "parsing/parser.mly" +# 1564 "parsing/parser.mly" ( let (_, arg) = arg_and_pos in Pmod_functor(arg, body) ) -# 21341 "parsing/parser.ml" +# 28746 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 930 "parsing/parser.mly" +# 1003 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21350 "parsing/parser.ml" +# 28755 "parsing/parser.ml" in -# 1469 "parsing/parser.mly" +# 1566 "parsing/parser.mly" ( _1 ) -# 21356 "parsing/parser.ml" +# 28761 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21382,9 +28787,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_mty_ in let _v : (Parsetree.module_type) = -# 1708 "parsing/parser.mly" +# 1809 "parsing/parser.mly" ( mty ) -# 21388 "parsing/parser.ml" +# 28793 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_type) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1811 "parsing/parser.mly" + ( expecting _loc__1_ ":" ) +# 28826 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21415,25 +28853,25 @@ module Tables = struct let _endpos = _endpos_body_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1711 "parsing/parser.mly" +# 1814 "parsing/parser.mly" ( let (_, arg) = arg_and_pos in Pmty_functor(arg, body) ) -# 21422 "parsing/parser.ml" +# 28860 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 932 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 21431 "parsing/parser.ml" +# 28869 "parsing/parser.ml" in -# 1714 "parsing/parser.mly" +# 1817 "parsing/parser.mly" ( _1 ) -# 21437 "parsing/parser.ml" +# 28875 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21479,18 +28917,18 @@ module Tables = struct let _v : (Parsetree.module_expr) = let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 21485 "parsing/parser.ml" +# 28923 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1301 "parsing/parser.mly" +# 1395 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) -# 21494 "parsing/parser.ml" +# 28932 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21536,17 +28974,50 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 21542 "parsing/parser.ml" +# 28980 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1303 "parsing/parser.mly" +# 1397 "parsing/parser.mly" ( unclosed "struct" _loc__1_ "end" _loc__4_ ) -# 21550 "parsing/parser.ml" +# 28988 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_expr) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1399 "parsing/parser.mly" + ( expecting _loc__1_ "struct" ) +# 29021 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21599,30 +29070,30 @@ module Tables = struct let _v : (Parsetree.module_expr) = let args = let _1 = _1_inlined2 in -# 1267 "parsing/parser.mly" +# 1361 "parsing/parser.mly" ( _1 ) -# 21605 "parsing/parser.ml" +# 29076 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 21613 "parsing/parser.ml" +# 29084 "parsing/parser.ml" in let _endpos = _endpos_me_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1305 "parsing/parser.mly" +# 1401 "parsing/parser.mly" ( wrap_mod_attrs ~loc:_sloc attrs ( List.fold_left (fun acc (startpos, arg) -> mkmod ~loc:(startpos, _endpos) (Pmod_functor (arg, acc)) ) me args ) ) -# 21626 "parsing/parser.ml" +# 29097 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21645,9 +29116,9 @@ module Tables = struct let _startpos = _startpos_me_ in let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = -# 1311 "parsing/parser.mly" +# 1407 "parsing/parser.mly" ( me ) -# 21651 "parsing/parser.ml" +# 29122 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21677,9 +29148,9 @@ module Tables = struct let _startpos = _startpos_me_ in let _endpos = _endpos_attr_ in let _v : (Parsetree.module_expr) = -# 1313 "parsing/parser.mly" +# 1409 "parsing/parser.mly" ( Mod.attr me attr ) -# 21683 "parsing/parser.ml" +# 29154 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21708,30 +29179,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21714 "parsing/parser.ml" +# 29185 "parsing/parser.ml" in -# 1317 "parsing/parser.mly" +# 1413 "parsing/parser.mly" ( Pmod_ident x ) -# 21720 "parsing/parser.ml" +# 29191 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 930 "parsing/parser.mly" +# 1003 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21729 "parsing/parser.ml" +# 29200 "parsing/parser.ml" in -# 1329 "parsing/parser.mly" +# 1424 "parsing/parser.mly" ( _1 ) -# 21735 "parsing/parser.ml" +# 29206 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21762,24 +29233,24 @@ module Tables = struct let _endpos = _endpos_me2_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1320 "parsing/parser.mly" +# 1416 "parsing/parser.mly" ( Pmod_apply(me1, me2) ) -# 21768 "parsing/parser.ml" +# 29239 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_me2_, _startpos_me1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 930 "parsing/parser.mly" +# 1003 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21777 "parsing/parser.ml" +# 29248 "parsing/parser.ml" in -# 1329 "parsing/parser.mly" +# 1424 "parsing/parser.mly" ( _1 ) -# 21783 "parsing/parser.ml" +# 29254 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21802,45 +29273,39 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me1; - MenhirLib.EngineTypes.startp = _startpos_me1_; - MenhirLib.EngineTypes.endp = _endpos_me1_; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let me1 : (Parsetree.module_expr) = Obj.magic me1 in + let me : (Parsetree.module_expr) = Obj.magic me in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me1_ in + let _startpos = _startpos_me_ in let _endpos = _endpos__3_ in let _v : (Parsetree.module_expr) = let _1 = - let _1 = - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos_me1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1323 "parsing/parser.mly" - ( (* TODO review mkmod location *) - Pmod_apply(me1, mkmod ~loc:_sloc (Pmod_structure [])) ) -# 21828 "parsing/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me1_) in + let _1 = +# 1419 "parsing/parser.mly" + ( Pmod_apply_unit me ) +# 29294 "parsing/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 930 "parsing/parser.mly" +# 1003 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21838 "parsing/parser.ml" +# 29303 "parsing/parser.ml" in -# 1329 "parsing/parser.mly" +# 1424 "parsing/parser.mly" ( _1 ) -# 21844 "parsing/parser.ml" +# 29309 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21864,24 +29329,24 @@ module Tables = struct let _endpos = _endpos_ex_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1327 "parsing/parser.mly" +# 1422 "parsing/parser.mly" ( Pmod_extension ex ) -# 21870 "parsing/parser.ml" +# 29335 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ex_, _startpos_ex_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 930 "parsing/parser.mly" +# 1003 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21879 "parsing/parser.ml" +# 29344 "parsing/parser.ml" in -# 1329 "parsing/parser.mly" +# 1424 "parsing/parser.mly" ( _1 ) -# 21885 "parsing/parser.ml" +# 29350 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21900,17 +29365,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let x : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 21906 "parsing/parser.ml" +# 29371 "parsing/parser.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (string option) = -# 1284 "parsing/parser.mly" +# 1378 "parsing/parser.mly" ( Some x ) -# 21914 "parsing/parser.ml" +# 29379 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21933,9 +29398,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string option) = -# 1287 "parsing/parser.mly" +# 1381 "parsing/parser.mly" ( None ) -# 21939 "parsing/parser.ml" +# 29404 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21993,9 +29458,9 @@ module Tables = struct let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 21999 "parsing/parser.ml" +# 29464 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let ext : (string Asttypes.loc option) = Obj.magic ext in @@ -22006,9 +29471,9 @@ module Tables = struct let _v : (Parsetree.module_substitution * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 22012 "parsing/parser.ml" +# 29477 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -22018,9 +29483,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22024 "parsing/parser.ml" +# 29489 "parsing/parser.ml" in let uid = @@ -22029,31 +29494,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22035 "parsing/parser.ml" +# 29500 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22043 "parsing/parser.ml" +# 29508 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1744 "parsing/parser.mly" +# 1847 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Ms.mk uid body ~attrs ~loc ~docs, ext ) -# 22057 "parsing/parser.ml" +# 29522 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22104,9 +29569,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 22110 "parsing/parser.ml" +# 29575 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : (string Asttypes.loc option) = Obj.magic _2 in @@ -22120,24 +29585,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22126 "parsing/parser.ml" +# 29591 "parsing/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22134 "parsing/parser.ml" +# 29599 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in -# 1751 "parsing/parser.mly" +# 1854 "parsing/parser.mly" ( expecting _loc__6_ "module path" ) -# 22141 "parsing/parser.ml" +# 29606 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22183,18 +29648,18 @@ module Tables = struct let _v : (Parsetree.module_type) = let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22189 "parsing/parser.ml" +# 29654 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1594 "parsing/parser.mly" +# 1691 "parsing/parser.mly" ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) -# 22198 "parsing/parser.ml" +# 29663 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22240,17 +29705,50 @@ module Tables = struct let _v : (Parsetree.module_type) = let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22246 "parsing/parser.ml" +# 29711 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1596 "parsing/parser.mly" +# 1693 "parsing/parser.mly" ( unclosed "sig" _loc__1_ "end" _loc__4_ ) -# 22254 "parsing/parser.ml" +# 29719 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_type) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1695 "parsing/parser.mly" + ( expecting _loc__1_ "sig" ) +# 29752 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22303,30 +29801,30 @@ module Tables = struct let _v : (Parsetree.module_type) = let args = let _1 = _1_inlined2 in -# 1267 "parsing/parser.mly" +# 1361 "parsing/parser.mly" ( _1 ) -# 22309 "parsing/parser.ml" +# 29807 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22317 "parsing/parser.ml" +# 29815 "parsing/parser.ml" in let _endpos = _endpos_mty_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1600 "parsing/parser.mly" +# 1699 "parsing/parser.mly" ( wrap_mty_attrs ~loc:_sloc attrs ( List.fold_left (fun acc (startpos, arg) -> mkmty ~loc:(startpos, _endpos) (Pmty_functor (arg, acc)) ) mty args ) ) -# 22330 "parsing/parser.ml" +# 29828 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22379,18 +29877,18 @@ module Tables = struct let _v : (Parsetree.module_type) = let _4 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22385 "parsing/parser.ml" +# 29883 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1606 "parsing/parser.mly" +# 1705 "parsing/parser.mly" ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) -# 22394 "parsing/parser.ml" +# 29892 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22427,9 +29925,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.module_type) = -# 1608 "parsing/parser.mly" +# 1707 "parsing/parser.mly" ( _2 ) -# 22433 "parsing/parser.ml" +# 29931 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22468,9 +29966,9 @@ module Tables = struct let _v : (Parsetree.module_type) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1610 "parsing/parser.mly" +# 1709 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 22474 "parsing/parser.ml" +# 29972 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22500,9 +29998,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_type) = -# 1612 "parsing/parser.mly" +# 1711 "parsing/parser.mly" ( Mty.attr _1 _2 ) -# 22506 "parsing/parser.ml" +# 30004 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22531,30 +30029,92 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22537 "parsing/parser.ml" +# 30035 "parsing/parser.ml" in -# 1615 "parsing/parser.mly" +# 1714 "parsing/parser.mly" ( Pmty_ident _1 ) -# 22543 "parsing/parser.ml" +# 30041 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 932 "parsing/parser.mly" +# 1005 "parsing/parser.mly" + ( mkmty ~loc:_sloc _1 ) +# 30050 "parsing/parser.ml" + + in + +# 1727 "parsing/parser.mly" + ( _1 ) +# 30056 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let _4 : (Parsetree.module_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.module_type) = let _1 = + let _1 = +# 1716 "parsing/parser.mly" + ( Pmty_functor(Unit, _4) ) +# 30103 "parsing/parser.ml" + in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22552 "parsing/parser.ml" +# 30112 "parsing/parser.ml" in -# 1626 "parsing/parser.mly" +# 1727 "parsing/parser.mly" ( _1 ) -# 22558 "parsing/parser.ml" +# 30118 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22592,24 +30152,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1618 "parsing/parser.mly" +# 1719 "parsing/parser.mly" ( Pmty_functor(Named (mknoloc None, _1), _3) ) -# 22598 "parsing/parser.ml" +# 30158 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 932 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22607 "parsing/parser.ml" +# 30167 "parsing/parser.ml" in -# 1626 "parsing/parser.mly" +# 1727 "parsing/parser.mly" ( _1 ) -# 22613 "parsing/parser.ml" +# 30173 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22651,18 +30211,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 22655 "parsing/parser.ml" +# 30215 "parsing/parser.ml" in -# 1021 "parsing/parser.mly" +# 1115 "parsing/parser.mly" ( xs ) -# 22660 "parsing/parser.ml" +# 30220 "parsing/parser.ml" in -# 1620 "parsing/parser.mly" +# 1721 "parsing/parser.mly" ( Pmty_with(_1, _3) ) -# 22666 "parsing/parser.ml" +# 30226 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -22670,15 +30230,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 932 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22676 "parsing/parser.ml" +# 30236 "parsing/parser.ml" in -# 1626 "parsing/parser.mly" +# 1727 "parsing/parser.mly" ( _1 ) -# 22682 "parsing/parser.ml" +# 30242 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22702,23 +30262,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1624 "parsing/parser.mly" +# 1725 "parsing/parser.mly" ( Pmty_extension _1 ) -# 22708 "parsing/parser.ml" +# 30268 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 932 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22716 "parsing/parser.ml" +# 30276 "parsing/parser.ml" in -# 1626 "parsing/parser.mly" +# 1727 "parsing/parser.mly" ( _1 ) -# 22722 "parsing/parser.ml" +# 30282 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22785,9 +30345,9 @@ module Tables = struct let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 22791 "parsing/parser.ml" +# 30351 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -22797,31 +30357,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22803 "parsing/parser.ml" +# 30363 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22811 "parsing/parser.ml" +# 30371 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1540 "parsing/parser.mly" +# 1637 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Mtd.mk id ?typ ~attrs ~loc ~docs, ext ) -# 22825 "parsing/parser.ml" +# 30385 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22895,9 +30455,9 @@ module Tables = struct let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 22901 "parsing/parser.ml" +# 30461 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -22907,31 +30467,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22913 "parsing/parser.ml" +# 30473 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 22921 "parsing/parser.ml" +# 30481 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1800 "parsing/parser.mly" +# 1903 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Mtd.mk id ~typ ~attrs ~loc ~docs, ext ) -# 22935 "parsing/parser.ml" +# 30495 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22954,9 +30514,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3631 "parsing/parser.mly" +# 3840 "parsing/parser.mly" ( _1 ) -# 22960 "parsing/parser.ml" +# 30520 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22972,9 +30532,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag) = -# 3712 "parsing/parser.mly" +# 3921 "parsing/parser.mly" ( Immutable ) -# 22978 "parsing/parser.ml" +# 30538 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22997,9 +30557,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3713 "parsing/parser.mly" +# 3922 "parsing/parser.mly" ( Mutable ) -# 23003 "parsing/parser.ml" +# 30563 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23015,9 +30575,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3721 "parsing/parser.mly" +# 3930 "parsing/parser.mly" ( Immutable, Concrete ) -# 23021 "parsing/parser.ml" +# 30581 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23040,9 +30600,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3723 "parsing/parser.mly" +# 3932 "parsing/parser.mly" ( Mutable, Concrete ) -# 23046 "parsing/parser.ml" +# 30606 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23065,9 +30625,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3725 "parsing/parser.mly" +# 3934 "parsing/parser.mly" ( Immutable, Virtual ) -# 23071 "parsing/parser.ml" +# 30631 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23097,9 +30657,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3728 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Mutable, Virtual ) -# 23103 "parsing/parser.ml" +# 30663 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23129,9 +30689,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3728 "parsing/parser.mly" +# 3937 "parsing/parser.mly" ( Mutable, Virtual ) -# 23135 "parsing/parser.ml" +# 30695 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23161,9 +30721,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3683 "parsing/parser.mly" +# 3892 "parsing/parser.mly" ( _2 ) -# 23167 "parsing/parser.ml" +# 30727 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23182,9 +30742,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 23188 "parsing/parser.ml" +# 30748 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -23194,15 +30754,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 23200 "parsing/parser.ml" +# 30760 "parsing/parser.ml" in # 221 "" ( [ x ] ) -# 23206 "parsing/parser.ml" +# 30766 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23228,9 +30788,9 @@ module Tables = struct } = _menhir_stack in let xs : (string Asttypes.loc list) = Obj.magic xs in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 23234 "parsing/parser.ml" +# 30794 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -23240,15 +30800,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 23246 "parsing/parser.ml" +# 30806 "parsing/parser.ml" in # 223 "" ( x :: xs ) -# 23252 "parsing/parser.ml" +# 30812 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23267,22 +30827,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let s : ( -# 743 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * Location.t * string option) -# 23273 "parsing/parser.ml" +# 30833 "parsing/parser.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : (string list) = let x = -# 3679 "parsing/parser.mly" +# 3888 "parsing/parser.mly" ( let body, _, _ = s in body ) -# 23281 "parsing/parser.ml" +# 30841 "parsing/parser.ml" in # 221 "" ( [ x ] ) -# 23286 "parsing/parser.ml" +# 30846 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23308,22 +30868,22 @@ module Tables = struct } = _menhir_stack in let xs : (string list) = Obj.magic xs in let s : ( -# 743 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * Location.t * string option) -# 23314 "parsing/parser.ml" +# 30874 "parsing/parser.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_xs_ in let _v : (string list) = let x = -# 3679 "parsing/parser.mly" +# 3888 "parsing/parser.mly" ( let body, _, _ = s in body ) -# 23322 "parsing/parser.ml" +# 30882 "parsing/parser.ml" in # 223 "" ( x :: xs ) -# 23327 "parsing/parser.ml" +# 30887 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23346,14 +30906,14 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 23352 "parsing/parser.ml" +# 30912 "parsing/parser.ml" in -# 2994 "parsing/parser.mly" +# 3147 "parsing/parser.mly" ( (Ptype_abstract, priv, Some ty) ) -# 23357 "parsing/parser.ml" +# 30917 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23383,14 +30943,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 23389 "parsing/parser.ml" +# 30949 "parsing/parser.ml" in -# 2994 "parsing/parser.mly" +# 3147 "parsing/parser.mly" ( (Ptype_abstract, priv, Some ty) ) -# 23394 "parsing/parser.ml" +# 30954 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23413,26 +30973,26 @@ module Tables = struct let _startpos = _startpos_cs_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 23419 "parsing/parser.ml" +# 30979 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23425 "parsing/parser.ml" +# 30985 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23430 "parsing/parser.ml" +# 30990 "parsing/parser.ml" in -# 2998 "parsing/parser.mly" +# 3151 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23436 "parsing/parser.ml" +# 30996 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23462,26 +31022,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 23468 "parsing/parser.ml" +# 31028 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23474 "parsing/parser.ml" +# 31034 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23479 "parsing/parser.ml" +# 31039 "parsing/parser.ml" in -# 2998 "parsing/parser.mly" +# 3151 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23485 "parsing/parser.ml" +# 31045 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23518,33 +31078,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 23524 "parsing/parser.ml" +# 31084 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23531 "parsing/parser.ml" +# 31091 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23536 "parsing/parser.ml" +# 31096 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23542 "parsing/parser.ml" +# 31102 "parsing/parser.ml" in -# 2998 "parsing/parser.mly" +# 3151 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23548 "parsing/parser.ml" +# 31108 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23588,33 +31148,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 23594 "parsing/parser.ml" +# 31154 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23601 "parsing/parser.ml" +# 31161 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23606 "parsing/parser.ml" +# 31166 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23612 "parsing/parser.ml" +# 31172 "parsing/parser.ml" in -# 2998 "parsing/parser.mly" +# 3151 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23618 "parsing/parser.ml" +# 31178 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23637,26 +31197,26 @@ module Tables = struct let _startpos = _startpos__3_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 23643 "parsing/parser.ml" +# 31203 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23649 "parsing/parser.ml" +# 31209 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23654 "parsing/parser.ml" +# 31214 "parsing/parser.ml" in -# 3002 "parsing/parser.mly" +# 3155 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23660 "parsing/parser.ml" +# 31220 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23686,26 +31246,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 23692 "parsing/parser.ml" +# 31252 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23698 "parsing/parser.ml" +# 31258 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23703 "parsing/parser.ml" +# 31263 "parsing/parser.ml" in -# 3002 "parsing/parser.mly" +# 3155 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23709 "parsing/parser.ml" +# 31269 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23742,33 +31302,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 23748 "parsing/parser.ml" +# 31308 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23755 "parsing/parser.ml" +# 31315 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23760 "parsing/parser.ml" +# 31320 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23766 "parsing/parser.ml" +# 31326 "parsing/parser.ml" in -# 3002 "parsing/parser.mly" +# 3155 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23772 "parsing/parser.ml" +# 31332 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23812,33 +31372,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 23818 "parsing/parser.ml" +# 31378 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23825 "parsing/parser.ml" +# 31385 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23830 "parsing/parser.ml" +# 31390 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23836 "parsing/parser.ml" +# 31396 "parsing/parser.ml" in -# 3002 "parsing/parser.mly" +# 3155 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23842 "parsing/parser.ml" +# 31402 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23875,26 +31435,26 @@ module Tables = struct let _startpos = _startpos__3_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 23881 "parsing/parser.ml" +# 31441 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23887 "parsing/parser.ml" +# 31447 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23892 "parsing/parser.ml" +# 31452 "parsing/parser.ml" in -# 3006 "parsing/parser.mly" +# 3159 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 23898 "parsing/parser.ml" +# 31458 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23938,26 +31498,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 23944 "parsing/parser.ml" +# 31504 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23950 "parsing/parser.ml" +# 31510 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 23955 "parsing/parser.ml" +# 31515 "parsing/parser.ml" in -# 3006 "parsing/parser.mly" +# 3159 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 23961 "parsing/parser.ml" +# 31521 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24008,33 +31568,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 24014 "parsing/parser.ml" +# 31574 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 24021 "parsing/parser.ml" +# 31581 "parsing/parser.ml" in # 126 "" ( Some x ) -# 24026 "parsing/parser.ml" +# 31586 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 24032 "parsing/parser.ml" +# 31592 "parsing/parser.ml" in -# 3006 "parsing/parser.mly" +# 3159 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 24038 "parsing/parser.ml" +# 31598 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24092,33 +31652,136 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 24098 "parsing/parser.ml" +# 31658 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 24105 "parsing/parser.ml" +# 31665 "parsing/parser.ml" in # 126 "" ( Some x ) -# 24110 "parsing/parser.ml" +# 31670 "parsing/parser.ml" in -# 3010 "parsing/parser.mly" +# 3163 "parsing/parser.mly" ( _1 ) -# 24116 "parsing/parser.ml" +# 31676 "parsing/parser.ml" in -# 3006 "parsing/parser.mly" +# 3159 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 24122 "parsing/parser.ml" +# 31682 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = meth_list; + MenhirLib.EngineTypes.startp = _startpos_meth_list_; + MenhirLib.EngineTypes.endp = _endpos_meth_list_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let meth_list : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic meth_list in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3581 "parsing/parser.mly" + ( let (f, c) = meth_list in Ptyp_object (f, c) ) +# 31722 "parsing/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 31731 "parsing/parser.ml" + + in + +# 3585 "parsing/parser.mly" + ( _1 ) +# 31737 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3583 "parsing/parser.mly" + ( Ptyp_object ([], Closed) ) +# 31770 "parsing/parser.ml" + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 997 "parsing/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 31779 "parsing/parser.ml" + + in + +# 3585 "parsing/parser.mly" + ( _1 ) +# 31785 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24171,37 +31834,37 @@ module Tables = struct let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 24177 "parsing/parser.ml" +# 31840 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 24186 "parsing/parser.ml" +# 31849 "parsing/parser.ml" in let override = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 24192 "parsing/parser.ml" +# 31855 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1559 "parsing/parser.mly" +# 1656 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk me ~override ~attrs ~loc ~docs, ext ) -# 24205 "parsing/parser.ml" +# 31868 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24261,37 +31924,37 @@ module Tables = struct let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 24267 "parsing/parser.ml" +# 31930 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let attrs1 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 24276 "parsing/parser.ml" +# 31939 "parsing/parser.ml" in let override = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 24282 "parsing/parser.ml" +# 31945 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1559 "parsing/parser.mly" +# 1656 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk me ~override ~attrs ~loc ~docs, ext ) -# 24295 "parsing/parser.ml" +# 31958 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24344,9 +32007,9 @@ module Tables = struct let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 24350 "parsing/parser.ml" +# 32013 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -24356,36 +32019,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24362 "parsing/parser.ml" +# 32025 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 24370 "parsing/parser.ml" +# 32033 "parsing/parser.ml" in let override = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 24376 "parsing/parser.ml" +# 32039 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1574 "parsing/parser.mly" +# 1671 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 24389 "parsing/parser.ml" +# 32052 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24445,9 +32108,9 @@ module Tables = struct let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 24451 "parsing/parser.ml" +# 32114 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -24457,36 +32120,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24463 "parsing/parser.ml" +# 32126 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined2 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 24471 "parsing/parser.ml" +# 32134 "parsing/parser.ml" in let override = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 24477 "parsing/parser.ml" +# 32140 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1574 "parsing/parser.mly" +# 1671 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 24490 "parsing/parser.ml" +# 32153 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24505,17 +32168,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 729 "parsing/parser.mly" +# 802 "parsing/parser.mly" (string) -# 24511 "parsing/parser.ml" +# 32174 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3547 "parsing/parser.mly" +# 3756 "parsing/parser.mly" ( _1 ) -# 24519 "parsing/parser.ml" +# 32182 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24534,17 +32197,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 687 "parsing/parser.mly" +# 760 "parsing/parser.mly" (string) -# 24540 "parsing/parser.ml" +# 32203 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3548 "parsing/parser.mly" +# 3757 "parsing/parser.mly" ( _1 ) -# 24548 "parsing/parser.ml" +# 32211 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24563,17 +32226,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 688 "parsing/parser.mly" +# 761 "parsing/parser.mly" (string) -# 24569 "parsing/parser.ml" +# 32232 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3549 "parsing/parser.mly" +# 3758 "parsing/parser.mly" ( _1 ) -# 24577 "parsing/parser.ml" +# 32240 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24613,17 +32276,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 24619 "parsing/parser.ml" +# 32282 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3550 "parsing/parser.mly" +# 3759 "parsing/parser.mly" ( "."^ _1 ^"(" ^ _3 ^ ")" ) -# 24627 "parsing/parser.ml" +# 32290 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24670,17 +32333,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 24676 "parsing/parser.ml" +# 32339 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3551 "parsing/parser.mly" +# 3760 "parsing/parser.mly" ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) -# 24684 "parsing/parser.ml" +# 32347 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24720,17 +32383,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 24726 "parsing/parser.ml" +# 32389 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3552 "parsing/parser.mly" +# 3761 "parsing/parser.mly" ( "."^ _1 ^"[" ^ _3 ^ "]" ) -# 24734 "parsing/parser.ml" +# 32397 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24777,17 +32440,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 24783 "parsing/parser.ml" +# 32446 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3553 "parsing/parser.mly" +# 3762 "parsing/parser.mly" ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) -# 24791 "parsing/parser.ml" +# 32454 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24827,17 +32490,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 24833 "parsing/parser.ml" +# 32496 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3554 "parsing/parser.mly" +# 3763 "parsing/parser.mly" ( "."^ _1 ^"{" ^ _3 ^ "}" ) -# 24841 "parsing/parser.ml" +# 32504 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24884,17 +32547,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 24890 "parsing/parser.ml" +# 32553 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3555 "parsing/parser.mly" +# 3764 "parsing/parser.mly" ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) -# 24898 "parsing/parser.ml" +# 32561 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24913,17 +32576,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 740 "parsing/parser.mly" +# 813 "parsing/parser.mly" (string) -# 24919 "parsing/parser.ml" +# 32582 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3556 "parsing/parser.mly" +# 3765 "parsing/parser.mly" ( _1 ) -# 24927 "parsing/parser.ml" +# 32590 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24946,9 +32609,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3557 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( "!" ) -# 24952 "parsing/parser.ml" +# 32615 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24967,22 +32630,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 681 "parsing/parser.mly" +# 754 "parsing/parser.mly" (string) -# 24973 "parsing/parser.ml" +# 32636 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3561 "parsing/parser.mly" +# 3770 "parsing/parser.mly" ( op ) -# 24981 "parsing/parser.ml" +# 32644 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 24986 "parsing/parser.ml" +# 32649 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25001,22 +32664,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 682 "parsing/parser.mly" +# 755 "parsing/parser.mly" (string) -# 25007 "parsing/parser.ml" +# 32670 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3562 "parsing/parser.mly" +# 3771 "parsing/parser.mly" ( op ) -# 25015 "parsing/parser.ml" +# 32678 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25020 "parsing/parser.ml" +# 32683 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25035,22 +32698,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 683 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 25041 "parsing/parser.ml" +# 32704 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3563 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( op ) -# 25049 "parsing/parser.ml" +# 32712 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25054 "parsing/parser.ml" +# 32717 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25069,22 +32732,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 684 "parsing/parser.mly" +# 757 "parsing/parser.mly" (string) -# 25075 "parsing/parser.ml" +# 32738 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3564 "parsing/parser.mly" +# 3773 "parsing/parser.mly" ( op ) -# 25083 "parsing/parser.ml" +# 32746 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25088 "parsing/parser.ml" +# 32751 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25103,22 +32766,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 685 "parsing/parser.mly" +# 758 "parsing/parser.mly" (string) -# 25109 "parsing/parser.ml" +# 32772 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3565 "parsing/parser.mly" +# 3774 "parsing/parser.mly" ( op ) -# 25117 "parsing/parser.ml" +# 32780 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25122 "parsing/parser.ml" +# 32785 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25141,14 +32804,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3566 "parsing/parser.mly" +# 3775 "parsing/parser.mly" ("+") -# 25147 "parsing/parser.ml" +# 32810 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25152 "parsing/parser.ml" +# 32815 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25171,14 +32834,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3567 "parsing/parser.mly" +# 3776 "parsing/parser.mly" ("+.") -# 25177 "parsing/parser.ml" +# 32840 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25182 "parsing/parser.ml" +# 32845 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25201,14 +32864,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3568 "parsing/parser.mly" +# 3777 "parsing/parser.mly" ("+=") -# 25207 "parsing/parser.ml" +# 32870 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25212 "parsing/parser.ml" +# 32875 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25231,14 +32894,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3569 "parsing/parser.mly" +# 3778 "parsing/parser.mly" ("-") -# 25237 "parsing/parser.ml" +# 32900 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25242 "parsing/parser.ml" +# 32905 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25261,14 +32924,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3570 "parsing/parser.mly" +# 3779 "parsing/parser.mly" ("-.") -# 25267 "parsing/parser.ml" +# 32930 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25272 "parsing/parser.ml" +# 32935 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25291,14 +32954,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3571 "parsing/parser.mly" +# 3780 "parsing/parser.mly" ("*") -# 25297 "parsing/parser.ml" +# 32960 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25302 "parsing/parser.ml" +# 32965 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25321,14 +32984,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3572 "parsing/parser.mly" +# 3781 "parsing/parser.mly" ("%") -# 25327 "parsing/parser.ml" +# 32990 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25332 "parsing/parser.ml" +# 32995 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25351,14 +33014,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3573 "parsing/parser.mly" +# 3782 "parsing/parser.mly" ("=") -# 25357 "parsing/parser.ml" +# 33020 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25362 "parsing/parser.ml" +# 33025 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25381,14 +33044,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3574 "parsing/parser.mly" +# 3783 "parsing/parser.mly" ("<") -# 25387 "parsing/parser.ml" +# 33050 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25392 "parsing/parser.ml" +# 33055 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25411,14 +33074,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3575 "parsing/parser.mly" +# 3784 "parsing/parser.mly" (">") -# 25417 "parsing/parser.ml" +# 33080 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25422 "parsing/parser.ml" +# 33085 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25441,14 +33104,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3576 "parsing/parser.mly" +# 3785 "parsing/parser.mly" ("or") -# 25447 "parsing/parser.ml" +# 33110 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25452 "parsing/parser.ml" +# 33115 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25471,14 +33134,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3577 "parsing/parser.mly" +# 3786 "parsing/parser.mly" ("||") -# 25477 "parsing/parser.ml" +# 33140 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25482 "parsing/parser.ml" +# 33145 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25501,14 +33164,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3578 "parsing/parser.mly" +# 3787 "parsing/parser.mly" ("&") -# 25507 "parsing/parser.ml" +# 33170 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25512 "parsing/parser.ml" +# 33175 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25531,14 +33194,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3579 "parsing/parser.mly" +# 3788 "parsing/parser.mly" ("&&") -# 25537 "parsing/parser.ml" +# 33200 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25542 "parsing/parser.ml" +# 33205 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25561,14 +33224,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3580 "parsing/parser.mly" +# 3789 "parsing/parser.mly" (":=") -# 25567 "parsing/parser.ml" +# 33230 "parsing/parser.ml" in -# 3558 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( _1 ) -# 25572 "parsing/parser.ml" +# 33235 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25591,9 +33254,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (bool) = -# 3462 "parsing/parser.mly" +# 3671 "parsing/parser.mly" ( true ) -# 25597 "parsing/parser.ml" +# 33260 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25609,9 +33272,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (bool) = -# 3463 "parsing/parser.mly" +# 3672 "parsing/parser.mly" ( false ) -# 25615 "parsing/parser.ml" +# 33278 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25629,7 +33292,7 @@ module Tables = struct let _v : (unit option) = # 114 "" ( None ) -# 25633 "parsing/parser.ml" +# 33296 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25654,7 +33317,7 @@ module Tables = struct let _v : (unit option) = # 116 "" ( Some x ) -# 25658 "parsing/parser.ml" +# 33321 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25672,7 +33335,7 @@ module Tables = struct let _v : (unit option) = # 114 "" ( None ) -# 25676 "parsing/parser.ml" +# 33339 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25697,7 +33360,7 @@ module Tables = struct let _v : (unit option) = # 116 "" ( Some x ) -# 25701 "parsing/parser.ml" +# 33364 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25715,7 +33378,7 @@ module Tables = struct let _v : (string Asttypes.loc option) = # 114 "" ( None ) -# 25719 "parsing/parser.ml" +# 33382 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25740,9 +33403,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 25746 "parsing/parser.ml" +# 33409 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -25755,21 +33418,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25761 "parsing/parser.ml" +# 33424 "parsing/parser.ml" in # 183 "" ( x ) -# 25767 "parsing/parser.ml" +# 33430 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25773 "parsing/parser.ml" +# 33436 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25787,7 +33450,7 @@ module Tables = struct let _v : (Parsetree.core_type option) = # 114 "" ( None ) -# 25791 "parsing/parser.ml" +# 33454 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25819,12 +33482,12 @@ module Tables = struct let _v : (Parsetree.core_type option) = let x = # 183 "" ( x ) -# 25823 "parsing/parser.ml" +# 33486 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25828 "parsing/parser.ml" +# 33491 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25839,10 +33502,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : (Parsetree.expression option) = + let _v : (Parsetree.core_type option) = # 114 "" ( None ) -# 25846 "parsing/parser.ml" +# 33509 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25866,20 +33529,215 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let x : (Parsetree.core_type) = Obj.magic x in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos_x_ in - let _v : (Parsetree.expression option) = let x = + let _v : (Parsetree.core_type option) = let x = # 183 "" ( x ) -# 25878 "parsing/parser.ml" +# 33541 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25883 "parsing/parser.ml" +# 33546 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.expression option) = +# 114 "" + ( None ) +# 33564 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression option) = let x = + let x = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 33599 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 33604 "parsing/parser.ml" + + in + +# 183 "" + ( x ) +# 33610 "parsing/parser.ml" + + in + +# 116 "" + ( Some x ) +# 33616 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression option) = let x = + let x = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 33675 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 33680 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 33686 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 33697 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 33703 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 33723 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 33729 "parsing/parser.ml" + + in + +# 183 "" + ( x ) +# 33735 "parsing/parser.ml" + + in + +# 116 "" + ( Some x ) +# 33741 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25897,7 +33755,7 @@ module Tables = struct let _v : (Parsetree.module_type option) = # 114 "" ( None ) -# 25901 "parsing/parser.ml" +# 33759 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25929,12 +33787,12 @@ module Tables = struct let _v : (Parsetree.module_type option) = let x = # 183 "" ( x ) -# 25933 "parsing/parser.ml" +# 33791 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25938 "parsing/parser.ml" +# 33796 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25952,7 +33810,7 @@ module Tables = struct let _v : (Parsetree.pattern option) = # 114 "" ( None ) -# 25956 "parsing/parser.ml" +# 33814 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25984,12 +33842,12 @@ module Tables = struct let _v : (Parsetree.pattern option) = let x = # 183 "" ( x ) -# 25988 "parsing/parser.ml" +# 33846 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25993 "parsing/parser.ml" +# 33851 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26007,7 +33865,7 @@ module Tables = struct let _v : (Parsetree.expression option) = # 114 "" ( None ) -# 26011 "parsing/parser.ml" +# 33869 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26039,12 +33897,12 @@ module Tables = struct let _v : (Parsetree.expression option) = let x = # 183 "" ( x ) -# 26043 "parsing/parser.ml" +# 33901 "parsing/parser.ml" in # 116 "" ( Some x ) -# 26048 "parsing/parser.ml" +# 33906 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26059,10 +33917,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = + let _v : (Parsetree.type_constraint option) = # 114 "" ( None ) -# 26066 "parsing/parser.ml" +# 33924 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26080,14 +33938,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic x in + let x : (Parsetree.type_constraint) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in - let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = + let _v : (Parsetree.type_constraint option) = # 116 "" ( Some x ) -# 26091 "parsing/parser.ml" +# 33949 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26106,17 +33964,210 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 722 "parsing/parser.mly" +# 795 "parsing/parser.mly" (string) -# 26112 "parsing/parser.ml" +# 33970 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3767 "parsing/parser.mly" +# 3976 "parsing/parser.mly" ( _1 ) -# 26120 "parsing/parser.ml" +# 33978 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 778 "parsing/parser.mly" + (string) +# 34012 "parsing/parser.ml" + ) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (string) = +# 3977 "parsing/parser.mly" + ( _2 ) +# 34021 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : unit = Obj.magic _5 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _3 : unit = Obj.magic _3 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1433 "parsing/parser.mly" + ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) +# 34077 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.module_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1435 "parsing/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__5_ ) +# 34132 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_expr) = +# 1438 "parsing/parser.mly" + ( me (* TODO consider reloc *) ) +# 34171 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26146,20 +34197,102 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : ( -# 705 "parsing/parser.mly" - (string) -# 26154 "parsing/parser.ml" - ) = Obj.magic _2 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1440 "parsing/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__3_ ) +# 34212 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (string) = -# 3768 "parsing/parser.mly" - ( _2 ) -# 26163 "parsing/parser.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let _1 = _1_inlined2 in + let e = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 34268 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 34273 "parsing/parser.ml" + + in + +# 1457 "parsing/parser.mly" + ( e ) +# 34279 "parsing/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34287 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1444 "parsing/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 34296 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26177,45 +34310,146 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; }; }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let mty : (Parsetree.module_type) = Obj.magic mty in - let _3 : unit = Obj.magic _3 in - let me : (Parsetree.module_expr) = Obj.magic me in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 34376 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 34381 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 34387 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34398 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 34404 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 34424 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 34430 "parsing/parser.ml" + + in + +# 1457 "parsing/parser.mly" + ( e ) +# 34436 "parsing/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34444 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1338 "parsing/parser.mly" - ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) -# 26219 "parsing/parser.ml" +# 1444 "parsing/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 34453 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26233,44 +34467,105 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.module_type) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined1, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined3, _1_inlined2) in + let ty = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 34529 "parsing/parser.ml" + + in + let _endpos_ty_ = _endpos__1_inlined1_ in + let e = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 34537 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 34542 "parsing/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1459 "parsing/parser.mly" + ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) +# 34552 "parsing/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34560 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 1340 "parsing/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 26274 "parsing/parser.ml" +# 1444 "parsing/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 34569 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26283,33 +34578,183 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let me : (Parsetree.module_expr) = Obj.magic me in + let _5 : unit = Obj.magic _5 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.module_expr) = -# 1343 "parsing/parser.mly" - ( me (* TODO consider reloc *) ) -# 26313 "parsing/parser.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined3, _1_inlined2, _1_inlined1) = (_endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined5, _1_inlined4, _1_inlined3) in + let ty = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 34666 "parsing/parser.ml" + + in + let _endpos_ty_ = _endpos__1_inlined3_ in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 34677 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 34682 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 34688 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34699 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 34705 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 34725 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 34731 "parsing/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1459 "parsing/parser.mly" + ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) +# 34741 "parsing/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34749 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1444 "parsing/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 34758 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26322,35 +34767,137 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _5 : unit = Obj.magic _5 in + let _1_inlined4 : (Parsetree.module_type) = Obj.magic _1_inlined4 in + let _4 : unit = Obj.magic _4 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined2_, _startpos__1_inlined2_, _endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 34848 "parsing/parser.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined2_ in + let ty1 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 34862 "parsing/parser.ml" + + in + let e = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 34869 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 34874 "parsing/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1461 "parsing/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) +# 34884 "parsing/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 34892 "parsing/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 1345 "parsing/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 26354 "parsing/parser.ml" +# 1444 "parsing/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 34901 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26368,58 +34915,205 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; }; }; }; }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined6 : (Parsetree.module_type) = Obj.magic _1_inlined6 in + let _4 : unit = Obj.magic _4 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let e = -# 1362 "parsing/parser.mly" - ( e ) -# 26407 "parsing/parser.ml" - in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined4_, _startpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) = (_endpos__1_inlined6_, _startpos__1_inlined6_, _endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined6, _1_inlined5, _1_inlined4, _1_inlined3) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _1_inlined4) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 35012 "parsing/parser.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined4_ in + let ty1 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3646 "parsing/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + let descr = Ptyp_package (lid, cstrs) in + mktyp ~loc:_sloc ~attrs descr ) +# 35026 "parsing/parser.ml" + + in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 35036 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 35041 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 35047 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 35058 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 35064 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 35084 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 35090 "parsing/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1461 "parsing/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) +# 35100 "parsing/parser.ml" + + in let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26414 "parsing/parser.ml" +# 35108 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1349 "parsing/parser.mly" +# 1444 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26423 "parsing/parser.ml" +# 35117 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26437,9 +35131,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2_inlined1; @@ -26447,9 +35141,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -26474,9 +35168,9 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -26484,44 +35178,58 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.module_expr) = let e = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let ty = + let (_endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined1, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined3, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 26498 "parsing/parser.ml" +# 35193 "parsing/parser.ml" in - let _endpos_ty_ = _endpos__1_ in - let _endpos = _endpos_ty_ in + let _endpos_ty2_ = _endpos__1_inlined1_ in + let e = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 35201 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 35206 "parsing/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1364 "parsing/parser.mly" - ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) -# 26508 "parsing/parser.ml" +# 1463 "parsing/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) +# 35216 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26516 "parsing/parser.ml" +# 35224 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1349 "parsing/parser.mly" +# 1444 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26525 "parsing/parser.ml" +# 35233 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26539,45 +35247,51 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; @@ -26588,11 +35302,12 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in - let _4 : unit = Obj.magic _4 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -26600,57 +35315,110 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.module_expr) = let e = - let (_endpos__1_inlined1_, _startpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined3, _1_inlined2) in + let (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined3, _1_inlined2, _1_inlined1) = (_endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined5, _1_inlined4, _1_inlined3) in let ty2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 26615 "parsing/parser.ml" +# 35330 "parsing/parser.ml" in - let _endpos_ty2_ = _endpos__1_inlined1_ in - let ty1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos_ty2_ = _endpos__1_inlined3_ in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 35341 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 35346 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 35352 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 35363 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 35369 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 35389 "parsing/parser.ml" + + in -# 3437 "parsing/parser.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 26628 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 35395 "parsing/parser.ml" in + let _startpos_e_ = _startpos__1_ in let _endpos = _endpos_ty2_ in let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1366 "parsing/parser.mly" - ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) -# 26637 "parsing/parser.ml" +# 1463 "parsing/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) +# 35405 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26645 "parsing/parser.ml" +# 35413 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1349 "parsing/parser.mly" +# 1444 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26654 "parsing/parser.ml" +# 35422 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26663,40 +35431,135 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in + let _v : (Parsetree.module_expr) = let _4 = + let _1 = _1_inlined2 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 35484 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 35489 "parsing/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 35497 "parsing/parser.ml" + + in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1446 "parsing/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__6_ ) +# 35505 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -26704,55 +35567,97 @@ module Tables = struct }; }; } = _menhir_stack in + let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let e = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let ty2 = - let _endpos = _endpos__1_ in + let _endpos = _endpos__6_ in + let _v : (Parsetree.module_expr) = let _4 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 35591 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 35596 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 35602 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 35613 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 35619 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 26729 "parsing/parser.ml" +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 35639 "parsing/parser.ml" in - let _endpos_ty2_ = _endpos__1_ in - let _endpos = _endpos_ty2_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in -# 1368 "parsing/parser.mly" - ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) -# 26739 "parsing/parser.ml" +# 2431 "parsing/parser.mly" + ( _1 ) +# 35645 "parsing/parser.ml" in - let attrs = + let _3 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26747 "parsing/parser.ml" +# 35653 "parsing/parser.ml" in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1349 "parsing/parser.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26756 "parsing/parser.ml" +# 1446 "parsing/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__6_ ) +# 35661 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26775,9 +35680,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -26802,27 +35707,40 @@ module Tables = struct } = _menhir_stack in let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__6_ in - let _v : (Parsetree.module_expr) = let _3 = + let _v : (Parsetree.module_expr) = let _4 = + let _1 = _1_inlined2 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 35723 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 35728 "parsing/parser.ml" + + in + let _3 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26818 "parsing/parser.ml" +# 35736 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1351 "parsing/parser.mly" +# 1448 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 26826 "parsing/parser.ml" +# 35744 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26845,25 +35763,43 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; }; @@ -26872,27 +35808,95 @@ module Tables = struct } = _menhir_stack in let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__6_ in - let _v : (Parsetree.module_expr) = let _3 = + let _v : (Parsetree.module_expr) = let _4 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 35830 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 35835 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 35841 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 35852 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 35858 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 35878 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 35884 "parsing/parser.ml" + + in + let _3 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26888 "parsing/parser.ml" +# 35892 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1353 "parsing/parser.mly" +# 1448 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 26896 "parsing/parser.ml" +# 35900 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26910,9 +35914,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -26935,27 +35939,189 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let _3 = + let _v : (Parsetree.module_expr) = let _4 = + let _1 = _1_inlined2 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 35955 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 35960 "parsing/parser.ml" + + in + let _3 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 26951 "parsing/parser.ml" +# 35968 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1355 "parsing/parser.mly" +# 1450 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 26959 "parsing/parser.ml" +# 35976 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Asttypes.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let _4 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 36055 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 36060 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 36066 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 36077 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 36083 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 36103 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 36109 "parsing/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 36117 "parsing/parser.ml" + + in + let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1450 "parsing/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__5_ ) +# 36125 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26985,9 +36151,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1257 "parsing/parser.mly" +# 1351 "parsing/parser.mly" ( _1 ) -# 26991 "parsing/parser.ml" +# 36157 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27017,9 +36183,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1242 "parsing/parser.mly" +# 1336 "parsing/parser.mly" ( _1 ) -# 27023 "parsing/parser.ml" +# 36189 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27049,9 +36215,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 1217 "parsing/parser.mly" +# 1311 "parsing/parser.mly" ( _1 ) -# 27055 "parsing/parser.ml" +# 36221 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27081,9 +36247,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 1222 "parsing/parser.mly" +# 1316 "parsing/parser.mly" ( _1 ) -# 27087 "parsing/parser.ml" +# 36253 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27113,9 +36279,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1247 "parsing/parser.mly" +# 1341 "parsing/parser.mly" ( _1 ) -# 27119 "parsing/parser.ml" +# 36285 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27145,9 +36311,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1252 "parsing/parser.mly" +# 1346 "parsing/parser.mly" ( _1 ) -# 27151 "parsing/parser.ml" +# 36317 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27177,9 +36343,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_expr) = -# 1212 "parsing/parser.mly" +# 1306 "parsing/parser.mly" ( _1 ) -# 27183 "parsing/parser.ml" +# 36349 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27209,9 +36375,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_type) = -# 1207 "parsing/parser.mly" +# 1301 "parsing/parser.mly" ( _1 ) -# 27215 "parsing/parser.ml" +# 36381 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27241,9 +36407,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1232 "parsing/parser.mly" +# 1326 "parsing/parser.mly" ( _1 ) -# 27247 "parsing/parser.ml" +# 36413 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27273,9 +36439,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = -# 1227 "parsing/parser.mly" +# 1321 "parsing/parser.mly" ( _1 ) -# 27279 "parsing/parser.ml" +# 36445 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27305,9 +36471,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Longident.t) = -# 1237 "parsing/parser.mly" +# 1331 "parsing/parser.mly" ( _1 ) -# 27311 "parsing/parser.ml" +# 36477 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27349,15 +36515,15 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2723 "parsing/parser.mly" +# 2876 "parsing/parser.mly" ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 27355 "parsing/parser.ml" +# 36521 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27361 "parsing/parser.ml" +# 36527 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27387,14 +36553,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = -# 2725 "parsing/parser.mly" +# 2878 "parsing/parser.mly" ( Pat.attr _1 _2 ) -# 27393 "parsing/parser.ml" +# 36559 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27398 "parsing/parser.ml" +# 36564 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27417,14 +36583,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = -# 2727 "parsing/parser.mly" +# 2880 "parsing/parser.mly" ( _1 ) -# 27423 "parsing/parser.ml" +# 36589 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27428 "parsing/parser.ml" +# 36594 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27469,15 +36635,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 27475 "parsing/parser.ml" +# 36641 "parsing/parser.ml" in -# 2730 "parsing/parser.mly" +# 2883 "parsing/parser.mly" ( Ppat_alias(_1, _3) ) -# 27481 "parsing/parser.ml" +# 36647 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -27485,21 +36651,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27491 "parsing/parser.ml" +# 36657 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 27497 "parsing/parser.ml" +# 36663 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27503 "parsing/parser.ml" +# 36669 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27540,9 +36706,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2732 "parsing/parser.mly" +# 2885 "parsing/parser.mly" ( expecting _loc__3_ "identifier" ) -# 27546 "parsing/parser.ml" +# 36712 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -27550,21 +36716,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27556 "parsing/parser.ml" +# 36722 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 27562 "parsing/parser.ml" +# 36728 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27568 "parsing/parser.ml" +# 36734 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27589,29 +36755,29 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2734 "parsing/parser.mly" +# 2887 "parsing/parser.mly" ( Ppat_tuple(List.rev _1) ) -# 27595 "parsing/parser.ml" +# 36761 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27603 "parsing/parser.ml" +# 36769 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 27609 "parsing/parser.ml" +# 36775 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27615 "parsing/parser.ml" +# 36781 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27652,9 +36818,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2736 "parsing/parser.mly" +# 2889 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27658 "parsing/parser.ml" +# 36824 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -27662,21 +36828,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27668 "parsing/parser.ml" +# 36834 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 27674 "parsing/parser.ml" +# 36840 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27680 "parsing/parser.ml" +# 36846 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27715,30 +36881,30 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2738 "parsing/parser.mly" +# 2891 "parsing/parser.mly" ( Ppat_or(_1, _3) ) -# 27721 "parsing/parser.ml" +# 36887 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27730 "parsing/parser.ml" +# 36896 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 27736 "parsing/parser.ml" +# 36902 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27742 "parsing/parser.ml" +# 36908 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27779,9 +36945,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2740 "parsing/parser.mly" +# 2893 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27785 "parsing/parser.ml" +# 36951 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -27789,21 +36955,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27795 "parsing/parser.ml" +# 36961 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 27801 "parsing/parser.ml" +# 36967 "parsing/parser.ml" in -# 2711 "parsing/parser.mly" +# 2864 "parsing/parser.mly" ( _1 ) -# 27807 "parsing/parser.ml" +# 36973 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27851,24 +37017,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 27857 "parsing/parser.ml" +# 37023 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 27863 "parsing/parser.ml" +# 37029 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2713 "parsing/parser.mly" +# 2866 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) -# 27872 "parsing/parser.ml" +# 37038 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27905,9 +37071,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2840 "parsing/parser.mly" +# 2993 "parsing/parser.mly" ( _3 :: _1 ) -# 27911 "parsing/parser.ml" +# 37077 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27944,9 +37110,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2841 "parsing/parser.mly" +# 2994 "parsing/parser.mly" ( [_3; _1] ) -# 27950 "parsing/parser.ml" +# 37116 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27984,9 +37150,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2842 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27990 "parsing/parser.ml" +# 37156 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28023,9 +37189,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2840 "parsing/parser.mly" +# 2993 "parsing/parser.mly" ( _3 :: _1 ) -# 28029 "parsing/parser.ml" +# 37195 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28062,9 +37228,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2841 "parsing/parser.mly" +# 2994 "parsing/parser.mly" ( [_3; _1] ) -# 28068 "parsing/parser.ml" +# 37234 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28102,9 +37268,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2842 "parsing/parser.mly" +# 2995 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 28108 "parsing/parser.ml" +# 37274 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28127,9 +37293,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2746 "parsing/parser.mly" +# 2899 "parsing/parser.mly" ( _1 ) -# 28133 "parsing/parser.ml" +# 37299 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28165,15 +37331,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28171 "parsing/parser.ml" +# 37337 "parsing/parser.ml" in -# 2749 "parsing/parser.mly" +# 2902 "parsing/parser.mly" ( Ppat_construct(_1, Some ([], _2)) ) -# 28177 "parsing/parser.ml" +# 37343 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -28181,15 +37347,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28187 "parsing/parser.ml" +# 37353 "parsing/parser.ml" in -# 2755 "parsing/parser.mly" +# 2908 "parsing/parser.mly" ( _1 ) -# 28193 "parsing/parser.ml" +# 37359 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28249,24 +37415,24 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let newtypes = -# 2495 "parsing/parser.mly" +# 2637 "parsing/parser.mly" ( xs ) -# 28255 "parsing/parser.ml" +# 37421 "parsing/parser.ml" in let constr = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28264 "parsing/parser.ml" +# 37430 "parsing/parser.ml" in -# 2752 "parsing/parser.mly" +# 2905 "parsing/parser.mly" ( Ppat_construct(constr, Some (newtypes, pat)) ) -# 28270 "parsing/parser.ml" +# 37436 "parsing/parser.ml" in let _endpos__1_ = _endpos_pat_ in @@ -28274,15 +37440,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28280 "parsing/parser.ml" +# 37446 "parsing/parser.ml" in -# 2755 "parsing/parser.mly" +# 2908 "parsing/parser.mly" ( _1 ) -# 28286 "parsing/parser.ml" +# 37452 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28313,24 +37479,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2754 "parsing/parser.mly" +# 2907 "parsing/parser.mly" ( Ppat_variant(_1, Some _2) ) -# 28319 "parsing/parser.ml" +# 37485 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28328 "parsing/parser.ml" +# 37494 "parsing/parser.ml" in -# 2755 "parsing/parser.mly" +# 2908 "parsing/parser.mly" ( _1 ) -# 28334 "parsing/parser.ml" +# 37500 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28378,24 +37544,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 28384 "parsing/parser.ml" +# 37550 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 28390 "parsing/parser.ml" +# 37556 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2757 "parsing/parser.mly" +# 2910 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) -# 28399 "parsing/parser.ml" +# 37565 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28437,15 +37603,15 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2723 "parsing/parser.mly" +# 2876 "parsing/parser.mly" ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 28443 "parsing/parser.ml" +# 37609 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28449 "parsing/parser.ml" +# 37615 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28475,14 +37641,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = -# 2725 "parsing/parser.mly" +# 2878 "parsing/parser.mly" ( Pat.attr _1 _2 ) -# 28481 "parsing/parser.ml" +# 37647 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28486 "parsing/parser.ml" +# 37652 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28505,14 +37671,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = -# 2727 "parsing/parser.mly" +# 2880 "parsing/parser.mly" ( _1 ) -# 28511 "parsing/parser.ml" +# 37677 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28516 "parsing/parser.ml" +# 37682 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28557,15 +37723,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28563 "parsing/parser.ml" +# 37729 "parsing/parser.ml" in -# 2730 "parsing/parser.mly" +# 2883 "parsing/parser.mly" ( Ppat_alias(_1, _3) ) -# 28569 "parsing/parser.ml" +# 37735 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -28573,21 +37739,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28579 "parsing/parser.ml" +# 37745 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 28585 "parsing/parser.ml" +# 37751 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28591 "parsing/parser.ml" +# 37757 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28628,9 +37794,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2732 "parsing/parser.mly" +# 2885 "parsing/parser.mly" ( expecting _loc__3_ "identifier" ) -# 28634 "parsing/parser.ml" +# 37800 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -28638,21 +37804,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28644 "parsing/parser.ml" +# 37810 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 28650 "parsing/parser.ml" +# 37816 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28656 "parsing/parser.ml" +# 37822 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28677,29 +37843,29 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2734 "parsing/parser.mly" +# 2887 "parsing/parser.mly" ( Ppat_tuple(List.rev _1) ) -# 28683 "parsing/parser.ml" +# 37849 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28691 "parsing/parser.ml" +# 37857 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 28697 "parsing/parser.ml" +# 37863 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28703 "parsing/parser.ml" +# 37869 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28740,9 +37906,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2736 "parsing/parser.mly" +# 2889 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 28746 "parsing/parser.ml" +# 37912 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -28750,21 +37916,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28756 "parsing/parser.ml" +# 37922 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 28762 "parsing/parser.ml" +# 37928 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28768 "parsing/parser.ml" +# 37934 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28803,30 +37969,30 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2738 "parsing/parser.mly" +# 2891 "parsing/parser.mly" ( Ppat_or(_1, _3) ) -# 28809 "parsing/parser.ml" +# 37975 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28818 "parsing/parser.ml" +# 37984 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 28824 "parsing/parser.ml" +# 37990 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28830 "parsing/parser.ml" +# 37996 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28867,9 +38033,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2740 "parsing/parser.mly" +# 2893 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 28873 "parsing/parser.ml" +# 38039 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -28877,21 +38043,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28883 "parsing/parser.ml" +# 38049 "parsing/parser.ml" in -# 2741 "parsing/parser.mly" +# 2894 "parsing/parser.mly" ( _1 ) -# 28889 "parsing/parser.ml" +# 38055 "parsing/parser.ml" in -# 2718 "parsing/parser.mly" +# 2871 "parsing/parser.mly" ( _1 ) -# 28895 "parsing/parser.ml" +# 38061 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28910,9 +38076,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 28916 "parsing/parser.ml" +# 38082 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -28924,30 +38090,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28930 "parsing/parser.ml" +# 38096 "parsing/parser.ml" in -# 2214 "parsing/parser.mly" +# 2348 "parsing/parser.mly" ( Ppat_var _1 ) -# 28936 "parsing/parser.ml" +# 38102 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28945 "parsing/parser.ml" +# 38111 "parsing/parser.ml" in -# 2216 "parsing/parser.mly" +# 2350 "parsing/parser.mly" ( _1 ) -# 28951 "parsing/parser.ml" +# 38117 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28971,23 +38137,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2215 "parsing/parser.mly" +# 2349 "parsing/parser.mly" ( Ppat_any ) -# 28977 "parsing/parser.ml" +# 38143 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28985 "parsing/parser.ml" +# 38151 "parsing/parser.ml" in -# 2216 "parsing/parser.mly" +# 2350 "parsing/parser.mly" ( _1 ) -# 28991 "parsing/parser.ml" +# 38157 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29010,9 +38176,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.payload) = -# 3879 "parsing/parser.mly" +# 4088 "parsing/parser.mly" ( PStr _1 ) -# 29016 "parsing/parser.ml" +# 38182 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29042,9 +38208,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 3880 "parsing/parser.mly" +# 4089 "parsing/parser.mly" ( PSig _2 ) -# 29048 "parsing/parser.ml" +# 38214 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29074,9 +38240,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 3881 "parsing/parser.mly" +# 4090 "parsing/parser.mly" ( PTyp _2 ) -# 29080 "parsing/parser.ml" +# 38246 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29106,9 +38272,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 3882 "parsing/parser.mly" +# 4091 "parsing/parser.mly" ( PPat (_2, None) ) -# 29112 "parsing/parser.ml" +# 38278 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29152,9 +38318,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.payload) = -# 3883 "parsing/parser.mly" +# 4092 "parsing/parser.mly" ( PPat (_2, Some _4) ) -# 29158 "parsing/parser.ml" +# 38324 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29177,9 +38343,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3276 "parsing/parser.mly" +# 3429 "parsing/parser.mly" ( _1 ) -# 29183 "parsing/parser.ml" +# 38349 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29222,24 +38388,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 29226 "parsing/parser.ml" +# 38392 "parsing/parser.ml" in -# 989 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( xs ) -# 29231 "parsing/parser.ml" +# 38397 "parsing/parser.ml" in -# 3268 "parsing/parser.mly" +# 3421 "parsing/parser.mly" ( _1 ) -# 29237 "parsing/parser.ml" +# 38403 "parsing/parser.ml" in -# 3272 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 29243 "parsing/parser.ml" +# 38409 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in @@ -29247,15 +38413,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 29253 "parsing/parser.ml" +# 38419 "parsing/parser.ml" in -# 3278 "parsing/parser.mly" +# 3431 "parsing/parser.mly" ( _1 ) -# 29259 "parsing/parser.ml" +# 38425 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29278,14 +38444,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 29284 "parsing/parser.ml" +# 38450 "parsing/parser.ml" in -# 3276 "parsing/parser.mly" +# 3429 "parsing/parser.mly" ( _1 ) -# 29289 "parsing/parser.ml" +# 38455 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29324,33 +38490,33 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let _3 = -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 29330 "parsing/parser.ml" +# 38496 "parsing/parser.ml" in let _1 = let _1 = let xs = # 253 "" ( List.rev xs ) -# 29337 "parsing/parser.ml" +# 38503 "parsing/parser.ml" in -# 989 "parsing/parser.mly" +# 1062 "parsing/parser.mly" ( xs ) -# 29342 "parsing/parser.ml" +# 38508 "parsing/parser.ml" in -# 3268 "parsing/parser.mly" +# 3421 "parsing/parser.mly" ( _1 ) -# 29348 "parsing/parser.ml" +# 38514 "parsing/parser.ml" in -# 3272 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 29354 "parsing/parser.ml" +# 38520 "parsing/parser.ml" in let _startpos__1_ = _startpos_xs_ in @@ -29358,15 +38524,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 29364 "parsing/parser.ml" +# 38530 "parsing/parser.ml" in -# 3278 "parsing/parser.mly" +# 3431 "parsing/parser.mly" ( _1 ) -# 29370 "parsing/parser.ml" +# 38536 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29404,7 +38570,7 @@ module Tables = struct } = _menhir_stack in let _4 : unit = Obj.magic _4 in let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Asttypes.loc) = Obj.magic _2 in + let _2 : (Ast_helper.str) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -29413,9 +38579,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3840 "parsing/parser.mly" - ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 29419 "parsing/parser.ml" +# 4049 "parsing/parser.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 38585 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29496,9 +38662,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 29502 "parsing/parser.ml" +# 38668 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -29508,30 +38674,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 29514 "parsing/parser.ml" +# 38680 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 29522 "parsing/parser.ml" +# 38688 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2904 "parsing/parser.mly" +# 3057 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Val.mk id ty ~prim ~attrs ~loc ~docs, ext ) -# 29535 "parsing/parser.ml" +# 38701 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29547,14 +38713,14 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.private_flag) = let _1 = -# 3708 "parsing/parser.mly" +# 3917 "parsing/parser.mly" ( Public ) -# 29553 "parsing/parser.ml" +# 38719 "parsing/parser.ml" in -# 3705 "parsing/parser.mly" +# 3914 "parsing/parser.mly" ( _1 ) -# 29558 "parsing/parser.ml" +# 38724 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29577,14 +38743,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = let _1 = -# 3709 "parsing/parser.mly" +# 3918 "parsing/parser.mly" ( Private ) -# 29583 "parsing/parser.ml" +# 38749 "parsing/parser.ml" in -# 3705 "parsing/parser.mly" +# 3914 "parsing/parser.mly" ( _1 ) -# 29588 "parsing/parser.ml" +# 38754 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29600,9 +38766,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3731 "parsing/parser.mly" +# 3940 "parsing/parser.mly" ( Public, Concrete ) -# 29606 "parsing/parser.ml" +# 38772 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29625,9 +38791,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3732 "parsing/parser.mly" +# 3941 "parsing/parser.mly" ( Private, Concrete ) -# 29631 "parsing/parser.ml" +# 38797 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29650,9 +38816,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3733 "parsing/parser.mly" +# 3942 "parsing/parser.mly" ( Public, Virtual ) -# 29656 "parsing/parser.ml" +# 38822 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29682,9 +38848,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3734 "parsing/parser.mly" +# 3943 "parsing/parser.mly" ( Private, Virtual ) -# 29688 "parsing/parser.ml" +# 38854 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29714,9 +38880,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3735 "parsing/parser.mly" +# 3944 "parsing/parser.mly" ( Private, Virtual ) -# 29720 "parsing/parser.ml" +# 38886 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29732,9 +38898,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.rec_flag) = -# 3686 "parsing/parser.mly" +# 3895 "parsing/parser.mly" ( Nonrecursive ) -# 29738 "parsing/parser.ml" +# 38904 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29757,9 +38923,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.rec_flag) = -# 3687 "parsing/parser.mly" +# 3896 "parsing/parser.mly" ( Recursive ) -# 29763 "parsing/parser.ml" +# 38929 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29785,12 +38951,12 @@ module Tables = struct (Longident.t Asttypes.loc * Parsetree.expression) list) = let eo = # 124 "" ( None ) -# 29789 "parsing/parser.ml" +# 38955 "parsing/parser.ml" in -# 2643 "parsing/parser.mly" +# 2796 "parsing/parser.mly" ( eo, fields ) -# 29794 "parsing/parser.ml" +# 38960 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29831,18 +38997,18 @@ module Tables = struct let x = # 191 "" ( x ) -# 29835 "parsing/parser.ml" +# 39001 "parsing/parser.ml" in # 126 "" ( Some x ) -# 29840 "parsing/parser.ml" +# 39006 "parsing/parser.ml" in -# 2643 "parsing/parser.mly" +# 2796 "parsing/parser.mly" ( eo, fields ) -# 29846 "parsing/parser.ml" +# 39012 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29867,17 +39033,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 3089 "parsing/parser.mly" +# 3242 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info ) -# 29876 "parsing/parser.ml" +# 39042 "parsing/parser.ml" in -# 1099 "parsing/parser.mly" +# 1193 "parsing/parser.mly" ( [x] ) -# 29881 "parsing/parser.ml" +# 39047 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29902,17 +39068,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 3089 "parsing/parser.mly" +# 3242 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info ) -# 29911 "parsing/parser.ml" +# 39077 "parsing/parser.ml" in -# 1102 "parsing/parser.mly" +# 1196 "parsing/parser.mly" ( [x] ) -# 29916 "parsing/parser.ml" +# 39082 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29944,17 +39110,17 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 3089 "parsing/parser.mly" +# 3242 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info ) -# 29953 "parsing/parser.ml" +# 39119 "parsing/parser.ml" in -# 1106 "parsing/parser.mly" +# 1200 "parsing/parser.mly" ( x :: xs ) -# 29958 "parsing/parser.ml" +# 39124 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29980,23 +39146,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3206 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 29989 "parsing/parser.ml" +# 39155 "parsing/parser.ml" in -# 3200 "parsing/parser.mly" +# 3353 "parsing/parser.mly" ( _1 ) -# 29994 "parsing/parser.ml" +# 39160 "parsing/parser.ml" in -# 1099 "parsing/parser.mly" +# 1193 "parsing/parser.mly" ( [x] ) -# 30000 "parsing/parser.ml" +# 39166 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30019,14 +39185,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3202 "parsing/parser.mly" +# 3355 "parsing/parser.mly" ( _1 ) -# 30025 "parsing/parser.ml" +# 39191 "parsing/parser.ml" in -# 1099 "parsing/parser.mly" +# 1193 "parsing/parser.mly" ( [x] ) -# 30030 "parsing/parser.ml" +# 39196 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30052,23 +39218,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3206 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 30061 "parsing/parser.ml" +# 39227 "parsing/parser.ml" in -# 3200 "parsing/parser.mly" +# 3353 "parsing/parser.mly" ( _1 ) -# 30066 "parsing/parser.ml" +# 39232 "parsing/parser.ml" in -# 1102 "parsing/parser.mly" +# 1196 "parsing/parser.mly" ( [x] ) -# 30072 "parsing/parser.ml" +# 39238 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30091,14 +39257,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3202 "parsing/parser.mly" +# 3355 "parsing/parser.mly" ( _1 ) -# 30097 "parsing/parser.ml" +# 39263 "parsing/parser.ml" in -# 1102 "parsing/parser.mly" +# 1196 "parsing/parser.mly" ( [x] ) -# 30102 "parsing/parser.ml" +# 39268 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30131,23 +39297,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3206 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 30140 "parsing/parser.ml" +# 39306 "parsing/parser.ml" in -# 3200 "parsing/parser.mly" +# 3353 "parsing/parser.mly" ( _1 ) -# 30145 "parsing/parser.ml" +# 39311 "parsing/parser.ml" in -# 1106 "parsing/parser.mly" +# 1200 "parsing/parser.mly" ( x :: xs ) -# 30151 "parsing/parser.ml" +# 39317 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30177,14 +39343,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3202 "parsing/parser.mly" +# 3355 "parsing/parser.mly" ( _1 ) -# 30183 "parsing/parser.ml" +# 39349 "parsing/parser.ml" in -# 1106 "parsing/parser.mly" +# 1200 "parsing/parser.mly" ( x :: xs ) -# 30188 "parsing/parser.ml" +# 39354 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30209,17 +39375,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3206 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 30218 "parsing/parser.ml" +# 39384 "parsing/parser.ml" in -# 1099 "parsing/parser.mly" +# 1193 "parsing/parser.mly" ( [x] ) -# 30223 "parsing/parser.ml" +# 39389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30244,17 +39410,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3206 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 30253 "parsing/parser.ml" +# 39419 "parsing/parser.ml" in -# 1102 "parsing/parser.mly" +# 1196 "parsing/parser.mly" ( [x] ) -# 30258 "parsing/parser.ml" +# 39424 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30286,17 +39452,17 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3206 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( let cid, vars, args, res, attrs, loc, info = d in Te.decl cid ~vars ~args ?res ~attrs ~loc ~info ) -# 30295 "parsing/parser.ml" +# 39461 "parsing/parser.ml" in -# 1106 "parsing/parser.mly" +# 1200 "parsing/parser.mly" ( x :: xs ) -# 30300 "parsing/parser.ml" +# 39466 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30312,9 +39478,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = -# 965 "parsing/parser.mly" +# 1038 "parsing/parser.mly" ( [] ) -# 30318 "parsing/parser.ml" +# 39484 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30371,21 +39537,78 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2094 "parsing/parser.mly" +# 2197 "parsing/parser.mly" ( _1, _3, make_loc _sloc ) -# 30377 "parsing/parser.ml" +# 39543 "parsing/parser.ml" in # 183 "" ( x ) -# 30383 "parsing/parser.ml" +# 39549 "parsing/parser.ml" in -# 967 "parsing/parser.mly" +# 1040 "parsing/parser.mly" ( x :: xs ) -# 30389 "parsing/parser.ml" +# 39555 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let x : (Parsetree.function_param list) = Obj.magic x in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.function_param list) = +# 1071 "parsing/parser.mly" + ( List.rev x ) +# 39580 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let x : (Parsetree.function_param list) = Obj.magic x in + let xs : (Parsetree.function_param list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.function_param list) = +# 1073 "parsing/parser.mly" + ( List.rev_append x xs ) +# 39612 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30408,9 +39631,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 979 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( [ x ] ) -# 30414 "parsing/parser.ml" +# 39637 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30440,9 +39663,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 981 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( x :: xs ) -# 30446 "parsing/parser.ml" +# 39669 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30465,9 +39688,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 979 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( [ x ] ) -# 30471 "parsing/parser.ml" +# 39694 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30497,9 +39720,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 981 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( x :: xs ) -# 30503 "parsing/parser.ml" +# 39726 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30522,9 +39745,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Asttypes.label list) = -# 979 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( [ x ] ) -# 30528 "parsing/parser.ml" +# 39751 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30554,9 +39777,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Asttypes.label list) = -# 981 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( x :: xs ) -# 30560 "parsing/parser.ml" +# 39783 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30569,9 +39792,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -30580,33 +39803,25 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in + let _2 : (Asttypes.label) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in let _v : (Asttypes.label Asttypes.loc list) = let x = - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 30598 "parsing/parser.ml" - - in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3264 "parsing/parser.mly" - ( _2 ) -# 30604 "parsing/parser.ml" +# 3417 "parsing/parser.mly" + ( mkrhs _2 _sloc ) +# 39819 "parsing/parser.ml" in -# 979 "parsing/parser.mly" +# 1052 "parsing/parser.mly" ( [ x ] ) -# 30610 "parsing/parser.ml" +# 39825 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30619,9 +39834,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; @@ -30636,34 +39851,26 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in + let _2 : (Asttypes.label) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let xs : (Asttypes.label Asttypes.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in let _v : (Asttypes.label Asttypes.loc list) = let x = - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 887 "parsing/parser.mly" - ( mkrhs _1 _sloc ) -# 30655 "parsing/parser.ml" - - in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3264 "parsing/parser.mly" - ( _2 ) -# 30661 "parsing/parser.ml" +# 3417 "parsing/parser.mly" + ( mkrhs _2 _sloc ) +# 39868 "parsing/parser.ml" in -# 981 "parsing/parser.mly" +# 1054 "parsing/parser.mly" ( x :: xs ) -# 30667 "parsing/parser.ml" +# 39874 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30688,12 +39895,12 @@ module Tables = struct let _v : (Parsetree.case list) = let _1 = # 124 "" ( None ) -# 30692 "parsing/parser.ml" +# 39899 "parsing/parser.ml" in -# 1070 "parsing/parser.mly" +# 1164 "parsing/parser.mly" ( [x] ) -# 30697 "parsing/parser.ml" +# 39904 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30727,13 +39934,13 @@ module Tables = struct # 126 "" ( Some x ) -# 30731 "parsing/parser.ml" +# 39938 "parsing/parser.ml" in -# 1070 "parsing/parser.mly" +# 1164 "parsing/parser.mly" ( [x] ) -# 30737 "parsing/parser.ml" +# 39944 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30770,9 +39977,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.case list) = -# 1074 "parsing/parser.mly" +# 1168 "parsing/parser.mly" ( x :: xs ) -# 30776 "parsing/parser.ml" +# 39983 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30796,20 +40003,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 30802 "parsing/parser.ml" +# 40009 "parsing/parser.ml" in -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 30807 "parsing/parser.ml" +# 40014 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 30813 "parsing/parser.ml" +# 40020 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30847,20 +40054,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 30853 "parsing/parser.ml" +# 40060 "parsing/parser.ml" in -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 30858 "parsing/parser.ml" +# 40065 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 30864 "parsing/parser.ml" +# 40071 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30883,14 +40090,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 30889 "parsing/parser.ml" +# 40096 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 30894 "parsing/parser.ml" +# 40101 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30927,14 +40134,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 30933 "parsing/parser.ml" +# 40140 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 30938 "parsing/parser.ml" +# 40145 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30957,14 +40164,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 30963 "parsing/parser.ml" +# 40170 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 30968 "parsing/parser.ml" +# 40175 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31001,14 +40208,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 31007 "parsing/parser.ml" +# 40214 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31012 "parsing/parser.ml" +# 40219 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31031,14 +40238,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 31037 "parsing/parser.ml" +# 40244 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31042 "parsing/parser.ml" +# 40249 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31075,14 +40282,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 31081 "parsing/parser.ml" +# 40288 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31086 "parsing/parser.ml" +# 40293 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31105,14 +40312,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 31111 "parsing/parser.ml" +# 40318 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31116 "parsing/parser.ml" +# 40323 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31149,14 +40356,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 31155 "parsing/parser.ml" +# 40362 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31160 "parsing/parser.ml" +# 40367 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31179,14 +40386,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1005 "parsing/parser.mly" +# 1099 "parsing/parser.mly" ( [ x ] ) -# 31185 "parsing/parser.ml" +# 40392 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31190 "parsing/parser.ml" +# 40397 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31223,14 +40430,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1009 "parsing/parser.mly" +# 1103 "parsing/parser.mly" ( x :: xs ) -# 31229 "parsing/parser.ml" +# 40436 "parsing/parser.ml" in -# 1013 "parsing/parser.mly" +# 1107 "parsing/parser.mly" ( xs ) -# 31234 "parsing/parser.ml" +# 40441 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31267,9 +40474,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 1036 "parsing/parser.mly" +# 1130 "parsing/parser.mly" ( x :: xs ) -# 31273 "parsing/parser.ml" +# 40480 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31306,9 +40513,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 1040 "parsing/parser.mly" +# 1134 "parsing/parser.mly" ( [ x2; x1 ] ) -# 31312 "parsing/parser.ml" +# 40519 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31321,9 +40528,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -31338,16 +40545,28 @@ module Tables = struct }; }; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let xs : (Parsetree.expression list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xs_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.expression list) = -# 1036 "parsing/parser.mly" + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression list) = let x = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 40559 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40564 "parsing/parser.ml" + + in + +# 1130 "parsing/parser.mly" ( x :: xs ) -# 31351 "parsing/parser.ml" +# 40570 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31360,9 +40579,134 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x2; - MenhirLib.EngineTypes.startp = _startpos_x2_; - MenhirLib.EngineTypes.endp = _endpos_x2_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.expression list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_inlined1_ in + let _v : (Parsetree.expression list) = let x = + let (_endpos_xs_, xs) = (_endpos_xs_inlined1_, xs_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 40635 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 40640 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 40646 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 40657 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 40663 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 40683 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40689 "parsing/parser.ml" + + in + +# 1130 "parsing/parser.mly" + ( x :: xs ) +# 40695 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -31370,23 +40714,532 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let x2 : (Parsetree.expression) = Obj.magic x2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let x1 : (Parsetree.expression) = Obj.magic x1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x1_ in - let _endpos = _endpos_x2_ in - let _v : (Parsetree.expression list) = -# 1040 "parsing/parser.mly" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression list) = let x2 = + let _1 = _1_inlined1 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 40736 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40741 "parsing/parser.ml" + + in + let x1 = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 40748 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40753 "parsing/parser.ml" + + in + +# 1134 "parsing/parser.mly" ( [ x2; x1 ] ) -# 31390 "parsing/parser.ml" +# 40759 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Asttypes.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 40824 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 40829 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 40835 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 40846 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 40852 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 40872 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40878 "parsing/parser.ml" + + in + let x1 = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 40885 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40890 "parsing/parser.ml" + + in + +# 1134 "parsing/parser.mly" + ( [ x2; x1 ] ) +# 40896 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.expression list) = let x2 = + let _1 = _1_inlined3 in + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 40958 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 40963 "parsing/parser.ml" + + in + let x1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 40973 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 40978 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 40984 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 40995 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 41001 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41021 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41027 "parsing/parser.ml" + + in + +# 1134 "parsing/parser.mly" + ( [ x2; x1 ] ) +# 41033 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Asttypes.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_inlined1_ in + let _v : (Parsetree.expression list) = let x2 = + let (_endpos_xs_, _startpos__1_, xs, _1_inlined2, _1_inlined1) = (_endpos_xs_inlined1_, _startpos__1_inlined3_, xs_inlined1, _1_inlined5, _1_inlined4) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 41119 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 41124 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 41130 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 41141 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 41147 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41167 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41173 "parsing/parser.ml" + + in + let x1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 41183 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 41188 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 41194 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 41205 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 41211 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41231 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41237 "parsing/parser.ml" + + in + +# 1134 "parsing/parser.mly" + ( [ x2; x1 ] ) +# 41243 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31423,9 +41276,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 1036 "parsing/parser.mly" +# 1130 "parsing/parser.mly" ( x :: xs ) -# 31429 "parsing/parser.ml" +# 41282 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31462,9 +41315,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 1040 "parsing/parser.mly" +# 1134 "parsing/parser.mly" ( [ x2; x1 ] ) -# 31468 "parsing/parser.ml" +# 41321 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31487,9 +41340,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.row_field) = -# 3447 "parsing/parser.mly" +# 3656 "parsing/parser.mly" ( _1 ) -# 31493 "parsing/parser.ml" +# 41346 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31515,9 +41368,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3449 "parsing/parser.mly" +# 3658 "parsing/parser.mly" ( Rf.inherit_ ~loc:(make_loc _sloc) _1 ) -# 31521 "parsing/parser.ml" +# 41374 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31530,24 +41383,36 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression list) = let _2 = # 124 "" ( None ) -# 31546 "parsing/parser.ml" +# 41399 "parsing/parser.ml" in + let x = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 41405 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41410 "parsing/parser.ml" + + in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 31551 "parsing/parser.ml" +# 41416 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31560,34 +41425,280 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x_inlined1; - MenhirLib.EngineTypes.startp = _startpos_x_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_x_inlined1_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let x_inlined1 : unit = Obj.magic x_inlined1 in - let x : (Parsetree.expression) = Obj.magic x in + let x : unit = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_inlined1_ in - let _v : (Parsetree.expression list) = let _2 = - let x = x_inlined1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.expression list) = let _2 = +# 126 "" + ( Some x ) +# 41448 "parsing/parser.ml" + in + let x = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 41454 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41459 "parsing/parser.ml" + in + +# 1151 "parsing/parser.mly" + ( [x] ) +# 41465 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression list) = let _2 = +# 124 "" + ( None ) +# 41511 "parsing/parser.ml" + in + let x = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 41520 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 41525 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 41531 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 41542 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 41548 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41568 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41574 "parsing/parser.ml" + + in + +# 1151 "parsing/parser.mly" + ( [x] ) +# 41580 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let x : unit = Obj.magic x in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.expression list) = let _2 = # 126 "" ( Some x ) -# 31585 "parsing/parser.ml" +# 41633 "parsing/parser.ml" + in + let x = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 41642 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 41647 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 41653 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 41664 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 41670 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41690 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41696 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 31591 "parsing/parser.ml" +# 41702 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31610,23 +41721,160 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in let xs : (Parsetree.expression list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in + let _startpos = _startpos__1_ in let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression list) = -# 1061 "parsing/parser.mly" + let _v : (Parsetree.expression list) = let x = + let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 41742 "parsing/parser.ml" + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41747 "parsing/parser.ml" + + in + +# 1155 "parsing/parser.mly" ( x :: xs ) -# 31630 "parsing/parser.ml" +# 41753 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.expression list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression list) = let x = + let (_endpos_xs_, xs) = (_endpos_xs_inlined1_, xs_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 41818 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 41823 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 41829 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 41840 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 41846 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41866 "parsing/parser.ml" + + in + +# 2431 "parsing/parser.mly" + ( _1 ) +# 41872 "parsing/parser.ml" + + in + +# 1155 "parsing/parser.mly" + ( x :: xs ) +# 41878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31652,9 +41900,9 @@ module Tables = struct } = _menhir_stack in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 31658 "parsing/parser.ml" +# 41906 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31662,26 +41910,26 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 31666 "parsing/parser.ml" +# 41914 "parsing/parser.ml" in let x = let label = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 31673 "parsing/parser.ml" +# 41921 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31681 "parsing/parser.ml" +# 41929 "parsing/parser.ml" in -# 2666 "parsing/parser.mly" +# 2819 "parsing/parser.mly" ( let label, e = match oe with | None -> @@ -31691,13 +41939,13 @@ module Tables = struct label, e in label, e ) -# 31695 "parsing/parser.ml" +# 41943 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 31701 "parsing/parser.ml" +# 41949 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31730,9 +41978,9 @@ module Tables = struct let x : unit = Obj.magic x in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 31736 "parsing/parser.ml" +# 41984 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31740,26 +41988,26 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 31744 "parsing/parser.ml" +# 41992 "parsing/parser.ml" in let x = let label = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 31751 "parsing/parser.ml" +# 41999 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31759 "parsing/parser.ml" +# 42007 "parsing/parser.ml" in -# 2666 "parsing/parser.mly" +# 2819 "parsing/parser.mly" ( let label, e = match oe with | None -> @@ -31769,13 +42017,13 @@ module Tables = struct label, e in label, e ) -# 31773 "parsing/parser.ml" +# 42021 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 31779 "parsing/parser.ml" +# 42027 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31815,9 +42063,9 @@ module Tables = struct let _2 : unit = Obj.magic _2 in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 31821 "parsing/parser.ml" +# 42069 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31825,21 +42073,21 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let x = let label = let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 31831 "parsing/parser.ml" +# 42079 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31839 "parsing/parser.ml" +# 42087 "parsing/parser.ml" in -# 2666 "parsing/parser.mly" +# 2819 "parsing/parser.mly" ( let label, e = match oe with | None -> @@ -31849,13 +42097,13 @@ module Tables = struct label, e in label, e ) -# 31853 "parsing/parser.ml" +# 42101 "parsing/parser.ml" in -# 1061 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( x :: xs ) -# 31859 "parsing/parser.ml" +# 42107 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31880,12 +42128,12 @@ module Tables = struct let _v : (Parsetree.pattern list) = let _2 = # 124 "" ( None ) -# 31884 "parsing/parser.ml" +# 42132 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 31889 "parsing/parser.ml" +# 42137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31919,13 +42167,13 @@ module Tables = struct # 126 "" ( Some x ) -# 31923 "parsing/parser.ml" +# 42171 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 31929 "parsing/parser.ml" +# 42177 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31962,9 +42210,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.pattern list) = -# 1061 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( x :: xs ) -# 31968 "parsing/parser.ml" +# 42216 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31995,7 +42243,7 @@ module Tables = struct }; } = _menhir_stack in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in + let c : (Parsetree.type_constraint option) = Obj.magic c in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32003,7 +42251,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 32007 "parsing/parser.ml" +# 42255 "parsing/parser.ml" in let x = let label = @@ -32011,9 +42259,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32017 "parsing/parser.ml" +# 42265 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -32021,7 +42269,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2649 "parsing/parser.mly" +# 2802 "parsing/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -32031,13 +42279,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 32035 "parsing/parser.ml" +# 42283 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 32041 "parsing/parser.ml" +# 42289 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32075,7 +42323,7 @@ module Tables = struct } = _menhir_stack in let x : unit = Obj.magic x in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in + let c : (Parsetree.type_constraint option) = Obj.magic c in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32083,7 +42331,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 32087 "parsing/parser.ml" +# 42335 "parsing/parser.ml" in let x = let label = @@ -32091,9 +42339,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32097 "parsing/parser.ml" +# 42345 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -32101,7 +42349,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2649 "parsing/parser.mly" +# 2802 "parsing/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -32111,13 +42359,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 32115 "parsing/parser.ml" +# 42363 "parsing/parser.ml" in -# 1057 "parsing/parser.mly" +# 1151 "parsing/parser.mly" ( [x] ) -# 32121 "parsing/parser.ml" +# 42369 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32162,7 +42410,7 @@ module Tables = struct let xs : ((Longident.t Asttypes.loc * Parsetree.expression) list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in + let c : (Parsetree.type_constraint option) = Obj.magic c in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32173,9 +42421,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32179 "parsing/parser.ml" +# 42427 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -32183,7 +42431,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2649 "parsing/parser.mly" +# 2802 "parsing/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -32193,13 +42441,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 32197 "parsing/parser.ml" +# 42445 "parsing/parser.ml" in -# 1061 "parsing/parser.mly" +# 1155 "parsing/parser.mly" ( x :: xs ) -# 32203 "parsing/parser.ml" +# 42451 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32221,42 +42469,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.expression) = -# 2183 "parsing/parser.mly" - ( _1 ) -# 32228 "parsing/parser.ml" + let _v : (Parsetree.expression) = let _1 = +# 2287 "parsing/parser.mly" + ( _1 ) +# 42476 "parsing/parser.ml" in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = -# 2184 "parsing/parser.mly" - ( _1 ) -# 32260 "parsing/parser.ml" + +# 2325 "parsing/parser.mly" + ( _1 ) +# 42481 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32269,107 +42490,97 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Asttypes.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2186 "parsing/parser.mly" - ( Pexp_sequence(_1, _3) ) -# 32300 "parsing/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42530 "parsing/parser.ml" + in + +# 1176 "parsing/parser.mly" + ( xs ) +# 42535 "parsing/parser.ml" + + in + +# 2756 "parsing/parser.mly" + ( xs ) +# 42541 "parsing/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4062 "parsing/parser.mly" + ( _1 ) +# 42552 "parsing/parser.ml" + + in + +# 4075 "parsing/parser.mly" + ( _1, _2 ) +# 42558 "parsing/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 32309 "parsing/parser.ml" +# 2289 "parsing/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 42578 "parsing/parser.ml" in -# 2187 "parsing/parser.mly" - ( _1 ) -# 32315 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : (string Asttypes.loc) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2189 "parsing/parser.mly" - ( let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in - let payload = PStr [mkstrexp seq []] in - mkexp ~loc:_sloc (Pexp_extension (_4, payload)) ) -# 32373 "parsing/parser.ml" +# 2325 "parsing/parser.mly" + ( _1 ) +# 42584 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32437,18 +42648,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 32443 "parsing/parser.ml" +# 42654 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined4_ in let attrs2 = let _1 = _1_inlined3 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 32452 "parsing/parser.ml" +# 42663 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -32458,17 +42669,17 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32464 "parsing/parser.ml" +# 42675 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 32472 "parsing/parser.ml" +# 42683 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in @@ -32476,14 +42687,14 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3119 "parsing/parser.mly" +# 3272 "parsing/parser.mly" ( let vars, args, res = vars_args_res in let loc = make_loc (_startpos, _endpos_attrs2_) in let docs = symbol_docs _sloc in Te.mk_exception ~attrs (Te.decl id ~vars ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 32487 "parsing/parser.ml" +# 42698 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32509,21 +42720,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 32513 "parsing/parser.ml" +# 42724 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 880 "parsing/parser.mly" +# 953 "parsing/parser.mly" ( extra_sig _startpos _endpos _1 ) -# 32521 "parsing/parser.ml" +# 42732 "parsing/parser.ml" in -# 1632 "parsing/parser.mly" +# 1733 "parsing/parser.mly" ( _1 ) -# 32527 "parsing/parser.ml" +# 42738 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32555,9 +42766,9 @@ module Tables = struct let _v : (Parsetree.signature_item) = let _2 = let _1 = _1_inlined1 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 32561 "parsing/parser.ml" +# 42772 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -32565,10 +42776,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1647 "parsing/parser.mly" +# 1748 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mksig ~loc:_sloc (Psig_extension (_1, (add_docs_attrs docs _2))) ) -# 32572 "parsing/parser.ml" +# 42783 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32592,23 +42803,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1651 "parsing/parser.mly" +# 1752 "parsing/parser.mly" ( Psig_attribute _1 ) -# 32598 "parsing/parser.ml" +# 42809 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( mksig ~loc:_sloc _1 ) -# 32606 "parsing/parser.ml" +# 42817 "parsing/parser.ml" in -# 1653 "parsing/parser.mly" +# 1754 "parsing/parser.mly" ( _1 ) -# 32612 "parsing/parser.ml" +# 42823 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32632,23 +42843,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1656 "parsing/parser.mly" +# 1757 "parsing/parser.mly" ( psig_value _1 ) -# 32638 "parsing/parser.ml" +# 42849 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32646 "parsing/parser.ml" +# 42857 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 32652 "parsing/parser.ml" +# 42863 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32672,23 +42883,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1658 "parsing/parser.mly" +# 1759 "parsing/parser.mly" ( psig_value _1 ) -# 32678 "parsing/parser.ml" +# 42889 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32686 "parsing/parser.ml" +# 42897 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 32692 "parsing/parser.ml" +# 42903 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32723,26 +42934,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 32729 "parsing/parser.ml" +# 42940 "parsing/parser.ml" in -# 2940 "parsing/parser.mly" +# 3093 "parsing/parser.mly" ( _1 ) -# 32734 "parsing/parser.ml" +# 42945 "parsing/parser.ml" in -# 2923 "parsing/parser.mly" +# 3076 "parsing/parser.mly" ( _1 ) -# 32740 "parsing/parser.ml" +# 42951 "parsing/parser.ml" in -# 1660 "parsing/parser.mly" +# 1761 "parsing/parser.mly" ( psig_type _1 ) -# 32746 "parsing/parser.ml" +# 42957 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -32750,15 +42961,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32756 "parsing/parser.ml" +# 42967 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 32762 "parsing/parser.ml" +# 42973 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32793,26 +43004,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 32799 "parsing/parser.ml" +# 43010 "parsing/parser.ml" in -# 2940 "parsing/parser.mly" +# 3093 "parsing/parser.mly" ( _1 ) -# 32804 "parsing/parser.ml" +# 43015 "parsing/parser.ml" in -# 2928 "parsing/parser.mly" +# 3081 "parsing/parser.mly" ( _1 ) -# 32810 "parsing/parser.ml" +# 43021 "parsing/parser.ml" in -# 1662 "parsing/parser.mly" +# 1763 "parsing/parser.mly" ( psig_typesubst _1 ) -# 32816 "parsing/parser.ml" +# 43027 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -32820,15 +43031,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32826 "parsing/parser.ml" +# 43037 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 32832 "parsing/parser.ml" +# 43043 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32913,16 +43124,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 32919 "parsing/parser.ml" +# 43130 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1110 "parsing/parser.mly" +# 1204 "parsing/parser.mly" ( List.rev xs ) -# 32926 "parsing/parser.ml" +# 43137 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -32930,46 +43141,46 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32936 "parsing/parser.ml" +# 43147 "parsing/parser.ml" in let _4 = -# 3694 "parsing/parser.mly" +# 3903 "parsing/parser.mly" ( Recursive ) -# 32942 "parsing/parser.ml" +# 43153 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 32949 "parsing/parser.ml" +# 43160 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3193 "parsing/parser.mly" +# 3346 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 32961 "parsing/parser.ml" +# 43172 "parsing/parser.ml" in -# 3180 "parsing/parser.mly" +# 3333 "parsing/parser.mly" ( _1 ) -# 32967 "parsing/parser.ml" +# 43178 "parsing/parser.ml" in -# 1664 "parsing/parser.mly" +# 1765 "parsing/parser.mly" ( psig_typext _1 ) -# 32973 "parsing/parser.ml" +# 43184 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -32977,15 +43188,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32983 "parsing/parser.ml" +# 43194 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 32989 "parsing/parser.ml" +# 43200 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33077,16 +43288,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 33083 "parsing/parser.ml" +# 43294 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1110 "parsing/parser.mly" +# 1204 "parsing/parser.mly" ( List.rev xs ) -# 33090 "parsing/parser.ml" +# 43301 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -33094,9 +43305,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33100 "parsing/parser.ml" +# 43311 "parsing/parser.ml" in let _4 = @@ -33105,41 +43316,41 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3696 "parsing/parser.mly" +# 3905 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 33111 "parsing/parser.ml" +# 43322 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 33119 "parsing/parser.ml" +# 43330 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3193 "parsing/parser.mly" +# 3346 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 33131 "parsing/parser.ml" +# 43342 "parsing/parser.ml" in -# 3180 "parsing/parser.mly" +# 3333 "parsing/parser.mly" ( _1 ) -# 33137 "parsing/parser.ml" +# 43348 "parsing/parser.ml" in -# 1664 "parsing/parser.mly" +# 1765 "parsing/parser.mly" ( psig_typext _1 ) -# 33143 "parsing/parser.ml" +# 43354 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -33147,15 +43358,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33153 "parsing/parser.ml" +# 43364 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33159 "parsing/parser.ml" +# 43370 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33179,23 +43390,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1666 "parsing/parser.mly" +# 1767 "parsing/parser.mly" ( psig_exception _1 ) -# 33185 "parsing/parser.ml" +# 43396 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33193 "parsing/parser.ml" +# 43404 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33199 "parsing/parser.ml" +# 43410 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33258,9 +43469,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 33264 "parsing/parser.ml" +# 43475 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33270,37 +43481,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33276 "parsing/parser.ml" +# 43487 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 33284 "parsing/parser.ml" +# 43495 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1697 "parsing/parser.mly" +# 1798 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Md.mk name body ~attrs ~loc ~docs, ext ) -# 33298 "parsing/parser.ml" +# 43509 "parsing/parser.ml" in -# 1668 "parsing/parser.mly" +# 1769 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 33304 "parsing/parser.ml" +# 43515 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -33308,15 +43519,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33314 "parsing/parser.ml" +# 43525 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33320 "parsing/parser.ml" +# 43531 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33386,9 +43597,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 33392 "parsing/parser.ml" +# 43603 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -33399,9 +43610,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33405 "parsing/parser.ml" +# 43616 "parsing/parser.ml" in let (_endpos_id_, _startpos_id_) = (_endpos__1_, _startpos__1_) in @@ -33409,9 +43620,9 @@ module Tables = struct let _symbolstartpos = _startpos_id_ in let _sloc = (_symbolstartpos, _endpos) in -# 1734 "parsing/parser.mly" +# 1837 "parsing/parser.mly" ( Mty.alias ~loc:(make_loc _sloc) id ) -# 33415 "parsing/parser.ml" +# 43626 "parsing/parser.ml" in let name = @@ -33420,37 +43631,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33426 "parsing/parser.ml" +# 43637 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 33434 "parsing/parser.ml" +# 43645 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1725 "parsing/parser.mly" +# 1828 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Md.mk name body ~attrs ~loc ~docs, ext ) -# 33448 "parsing/parser.ml" +# 43659 "parsing/parser.ml" in -# 1670 "parsing/parser.mly" +# 1771 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 33454 "parsing/parser.ml" +# 43665 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -33458,15 +43669,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33464 "parsing/parser.ml" +# 43675 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33470 "parsing/parser.ml" +# 43681 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33490,23 +43701,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1672 "parsing/parser.mly" +# 1773 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modsubst body, ext) ) -# 33496 "parsing/parser.ml" +# 43707 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33504 "parsing/parser.ml" +# 43715 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33510 "parsing/parser.ml" +# 43721 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33592,9 +43803,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 33598 "parsing/parser.ml" +# 43809 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33604,49 +43815,49 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33610 "parsing/parser.ml" +# 43821 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 33618 "parsing/parser.ml" +# 43829 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1768 "parsing/parser.mly" +# 1871 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in ext, Md.mk name mty ~attrs ~loc ~docs ) -# 33632 "parsing/parser.ml" +# 43843 "parsing/parser.ml" in -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 33638 "parsing/parser.ml" +# 43849 "parsing/parser.ml" in -# 1757 "parsing/parser.mly" +# 1860 "parsing/parser.mly" ( _1 ) -# 33644 "parsing/parser.ml" +# 43855 "parsing/parser.ml" in -# 1674 "parsing/parser.mly" +# 1775 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_recmodule l, ext) ) -# 33650 "parsing/parser.ml" +# 43861 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -33654,15 +43865,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33660 "parsing/parser.ml" +# 43871 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33666 "parsing/parser.ml" +# 43877 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33686,23 +43897,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1676 "parsing/parser.mly" +# 1777 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modtype body, ext) ) -# 33692 "parsing/parser.ml" +# 43903 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33700 "parsing/parser.ml" +# 43911 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33706 "parsing/parser.ml" +# 43917 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33726,23 +43937,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1678 "parsing/parser.mly" +# 1779 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modtypesubst body, ext) ) -# 33732 "parsing/parser.ml" +# 43943 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33740 "parsing/parser.ml" +# 43951 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33746 "parsing/parser.ml" +# 43957 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33766,23 +43977,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1680 "parsing/parser.mly" +# 1781 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_open body, ext) ) -# 33772 "parsing/parser.ml" +# 43983 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33780 "parsing/parser.ml" +# 43991 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33786 "parsing/parser.ml" +# 43997 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33838,38 +44049,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 33844 "parsing/parser.ml" +# 44055 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 33853 "parsing/parser.ml" +# 44064 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1524 "parsing/parser.mly" +# 1621 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 33867 "parsing/parser.ml" +# 44078 "parsing/parser.ml" in -# 1682 "parsing/parser.mly" +# 1783 "parsing/parser.mly" ( psig_include _1 ) -# 33873 "parsing/parser.ml" +# 44084 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -33877,15 +44088,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33883 "parsing/parser.ml" +# 44094 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 33889 "parsing/parser.ml" +# 44100 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33962,9 +44173,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _7 : unit = Obj.magic _7 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 33968 "parsing/parser.ml" +# 44179 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -33982,9 +44193,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 33988 "parsing/parser.ml" +# 44199 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33994,24 +44205,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 34000 "parsing/parser.ml" +# 44211 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 34008 "parsing/parser.ml" +# 44219 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2115 "parsing/parser.mly" +# 2218 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -34019,25 +44230,25 @@ module Tables = struct ext, Ci.mk id cty ~virt ~params ~attrs ~loc ~docs ) -# 34023 "parsing/parser.ml" +# 44234 "parsing/parser.ml" in -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 34029 "parsing/parser.ml" +# 44240 "parsing/parser.ml" in -# 2103 "parsing/parser.mly" +# 2206 "parsing/parser.mly" ( _1 ) -# 34035 "parsing/parser.ml" +# 44246 "parsing/parser.ml" in -# 1684 "parsing/parser.mly" +# 1785 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_class l, ext) ) -# 34041 "parsing/parser.ml" +# 44252 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -34045,15 +44256,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34051 "parsing/parser.ml" +# 44262 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 34057 "parsing/parser.ml" +# 44268 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34077,23 +44288,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1686 "parsing/parser.mly" +# 1787 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_class_type l, ext) ) -# 34083 "parsing/parser.ml" +# 44294 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 945 "parsing/parser.mly" +# 1018 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34091 "parsing/parser.ml" +# 44302 "parsing/parser.ml" in -# 1688 "parsing/parser.mly" +# 1789 "parsing/parser.mly" ( _1 ) -# 34097 "parsing/parser.ml" +# 44308 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34116,9 +44327,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3523 "parsing/parser.mly" +# 3732 "parsing/parser.mly" ( _1 ) -# 34122 "parsing/parser.ml" +# 44333 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34143,18 +44354,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 691 "parsing/parser.mly" +# 764 "parsing/parser.mly" (string * char option) -# 34149 "parsing/parser.ml" +# 44360 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3524 "parsing/parser.mly" +# 3733 "parsing/parser.mly" ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 34158 "parsing/parser.ml" +# 44369 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34179,18 +44390,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 670 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * char option) -# 34185 "parsing/parser.ml" +# 44396 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3525 "parsing/parser.mly" +# 3734 "parsing/parser.mly" ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 34194 "parsing/parser.ml" +# 44405 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34215,18 +44426,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 691 "parsing/parser.mly" +# 764 "parsing/parser.mly" (string * char option) -# 34221 "parsing/parser.ml" +# 44432 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3526 "parsing/parser.mly" +# 3735 "parsing/parser.mly" ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 34230 "parsing/parser.ml" +# 44441 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34251,18 +44462,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 670 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * char option) -# 34257 "parsing/parser.ml" +# 44468 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3527 "parsing/parser.mly" +# 3736 "parsing/parser.mly" ( let (f, m) = _2 in Pconst_float(f, m) ) -# 34266 "parsing/parser.ml" +# 44477 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34303,18 +44514,18 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 2852 "parsing/parser.mly" +# 3005 "parsing/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 34311 "parsing/parser.ml" +# 44522 "parsing/parser.ml" in -# 2823 "parsing/parser.mly" +# 2976 "parsing/parser.mly" ( let (fields, closed) = _2 in Ppat_record(fields, closed) ) -# 34318 "parsing/parser.ml" +# 44529 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34322,15 +44533,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34328 "parsing/parser.ml" +# 44539 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34334 "parsing/parser.ml" +# 44545 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34371,19 +44582,19 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 2852 "parsing/parser.mly" +# 3005 "parsing/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 34379 "parsing/parser.ml" +# 44590 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2826 "parsing/parser.mly" +# 2979 "parsing/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 34387 "parsing/parser.ml" +# 44598 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34391,15 +44602,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34397 "parsing/parser.ml" +# 44608 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34403 "parsing/parser.ml" +# 44614 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34438,15 +44649,15 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2846 "parsing/parser.mly" +# 2999 "parsing/parser.mly" ( ps ) -# 34444 "parsing/parser.ml" +# 44655 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2828 "parsing/parser.mly" +# 2981 "parsing/parser.mly" ( fst (mktailpat _loc__3_ _2) ) -# 34450 "parsing/parser.ml" +# 44661 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34454,15 +44665,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34460 "parsing/parser.ml" +# 44671 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34466 "parsing/parser.ml" +# 44677 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34501,16 +44712,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2846 "parsing/parser.mly" +# 2999 "parsing/parser.mly" ( ps ) -# 34507 "parsing/parser.ml" +# 44718 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2830 "parsing/parser.mly" +# 2983 "parsing/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 34514 "parsing/parser.ml" +# 44725 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34518,15 +44729,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34524 "parsing/parser.ml" +# 44735 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34530 "parsing/parser.ml" +# 44741 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34565,14 +44776,14 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2846 "parsing/parser.mly" +# 2999 "parsing/parser.mly" ( ps ) -# 34571 "parsing/parser.ml" +# 44782 "parsing/parser.ml" in -# 2832 "parsing/parser.mly" +# 2985 "parsing/parser.mly" ( Ppat_array _2 ) -# 34576 "parsing/parser.ml" +# 44787 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34580,15 +44791,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34586 "parsing/parser.ml" +# 44797 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34592 "parsing/parser.ml" +# 44803 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34619,24 +44830,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2834 "parsing/parser.mly" +# 2987 "parsing/parser.mly" ( Ppat_array [] ) -# 34625 "parsing/parser.ml" +# 44836 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34634 "parsing/parser.ml" +# 44845 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34640 "parsing/parser.ml" +# 44851 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34675,16 +44886,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2846 "parsing/parser.mly" +# 2999 "parsing/parser.mly" ( ps ) -# 34681 "parsing/parser.ml" +# 44892 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2836 "parsing/parser.mly" +# 2989 "parsing/parser.mly" ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 34688 "parsing/parser.ml" +# 44899 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34692,15 +44903,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34698 "parsing/parser.ml" +# 44909 "parsing/parser.ml" in -# 2837 "parsing/parser.mly" +# 2990 "parsing/parser.mly" ( _1 ) -# 34704 "parsing/parser.ml" +# 44915 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34740,9 +44951,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2351 "parsing/parser.mly" +# 2493 "parsing/parser.mly" ( reloc_exp ~loc:_sloc _2 ) -# 34746 "parsing/parser.ml" +# 44957 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34781,9 +44992,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2353 "parsing/parser.mly" +# 2495 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 34787 "parsing/parser.ml" +# 44998 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34820,7 +45031,7 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _3 in + let _3 : (Parsetree.type_constraint) = Obj.magic _3 in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -34830,9 +45041,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2355 "parsing/parser.mly" +# 2497 "parsing/parser.mly" ( mkexp_constraint ~loc:_sloc _2 _3 ) -# 34836 "parsing/parser.ml" +# 45047 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34884,14 +45095,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2356 "parsing/parser.mly" +# 2498 "parsing/parser.mly" ( None ) -# 34890 "parsing/parser.ml" +# 45101 "parsing/parser.ml" in -# 2245 "parsing/parser.mly" +# 2379 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 34895 "parsing/parser.ml" +# 45106 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -34899,9 +45110,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2357 "parsing/parser.mly" +# 2499 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 34905 "parsing/parser.ml" +# 45116 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34953,14 +45164,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2356 "parsing/parser.mly" +# 2498 "parsing/parser.mly" ( None ) -# 34959 "parsing/parser.ml" +# 45170 "parsing/parser.ml" in -# 2247 "parsing/parser.mly" +# 2381 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 34964 "parsing/parser.ml" +# 45175 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -34968,9 +45179,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2357 "parsing/parser.mly" +# 2499 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 34974 "parsing/parser.ml" +# 45185 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35022,14 +45233,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2356 "parsing/parser.mly" +# 2498 "parsing/parser.mly" ( None ) -# 35028 "parsing/parser.ml" +# 45239 "parsing/parser.ml" in -# 2249 "parsing/parser.mly" +# 2383 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 35033 "parsing/parser.ml" +# 45244 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35037,9 +45248,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2357 "parsing/parser.mly" +# 2499 "parsing/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 35043 "parsing/parser.ml" +# 45254 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35085,9 +45296,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35091 "parsing/parser.ml" +# 45302 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35095,31 +45306,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2358 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( None ) -# 35101 "parsing/parser.ml" +# 45312 "parsing/parser.ml" in let i = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35106 "parsing/parser.ml" +# 45317 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 35112 "parsing/parser.ml" +# 45323 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35117 "parsing/parser.ml" +# 45328 "parsing/parser.ml" in -# 2245 "parsing/parser.mly" +# 2379 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 35123 "parsing/parser.ml" +# 45334 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35127,9 +45338,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2359 "parsing/parser.mly" +# 2501 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35133 "parsing/parser.ml" +# 45344 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35187,9 +45398,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35193 "parsing/parser.ml" +# 45404 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -35199,39 +45410,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2358 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( None ) -# 35205 "parsing/parser.ml" +# 45416 "parsing/parser.ml" in let i = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35210 "parsing/parser.ml" +# 45421 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" (_2) -# 35218 "parsing/parser.ml" +# 45429 "parsing/parser.ml" in # 126 "" ( Some x ) -# 35223 "parsing/parser.ml" +# 45434 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35229 "parsing/parser.ml" +# 45440 "parsing/parser.ml" in -# 2245 "parsing/parser.mly" +# 2379 "parsing/parser.mly" ( array, d, Paren, i, r ) -# 35235 "parsing/parser.ml" +# 45446 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35239,9 +45450,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2359 "parsing/parser.mly" +# 2501 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35245 "parsing/parser.ml" +# 45456 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35287,9 +45498,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35293 "parsing/parser.ml" +# 45504 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35297,31 +45508,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2358 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( None ) -# 35303 "parsing/parser.ml" +# 45514 "parsing/parser.ml" in let i = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35308 "parsing/parser.ml" +# 45519 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 35314 "parsing/parser.ml" +# 45525 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35319 "parsing/parser.ml" +# 45530 "parsing/parser.ml" in -# 2247 "parsing/parser.mly" +# 2381 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 35325 "parsing/parser.ml" +# 45536 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35329,9 +45540,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2359 "parsing/parser.mly" +# 2501 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35335 "parsing/parser.ml" +# 45546 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35389,9 +45600,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35395 "parsing/parser.ml" +# 45606 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -35401,39 +45612,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2358 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( None ) -# 35407 "parsing/parser.ml" +# 45618 "parsing/parser.ml" in let i = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35412 "parsing/parser.ml" +# 45623 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" (_2) -# 35420 "parsing/parser.ml" +# 45631 "parsing/parser.ml" in # 126 "" ( Some x ) -# 35425 "parsing/parser.ml" +# 45636 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35431 "parsing/parser.ml" +# 45642 "parsing/parser.ml" in -# 2247 "parsing/parser.mly" +# 2381 "parsing/parser.mly" ( array, d, Brace, i, r ) -# 35437 "parsing/parser.ml" +# 45648 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35441,9 +45652,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2359 "parsing/parser.mly" +# 2501 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35447 "parsing/parser.ml" +# 45658 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35489,9 +45700,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35495 "parsing/parser.ml" +# 45706 "parsing/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35499,31 +45710,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2358 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( None ) -# 35505 "parsing/parser.ml" +# 45716 "parsing/parser.ml" in let i = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35510 "parsing/parser.ml" +# 45721 "parsing/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 35516 "parsing/parser.ml" +# 45727 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35521 "parsing/parser.ml" +# 45732 "parsing/parser.ml" in -# 2249 "parsing/parser.mly" +# 2383 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 35527 "parsing/parser.ml" +# 45738 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35531,9 +45742,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2359 "parsing/parser.mly" +# 2501 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35537 "parsing/parser.ml" +# 45748 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35591,9 +45802,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35597 "parsing/parser.ml" +# 45808 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -35603,39 +45814,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2358 "parsing/parser.mly" +# 2500 "parsing/parser.mly" ( None ) -# 35609 "parsing/parser.ml" +# 45820 "parsing/parser.ml" in let i = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35614 "parsing/parser.ml" +# 45825 "parsing/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" (_2) -# 35622 "parsing/parser.ml" +# 45833 "parsing/parser.ml" in # 126 "" ( Some x ) -# 35627 "parsing/parser.ml" +# 45838 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35633 "parsing/parser.ml" +# 45844 "parsing/parser.ml" in -# 2249 "parsing/parser.mly" +# 2383 "parsing/parser.mly" ( array, d, Bracket, i, r ) -# 35639 "parsing/parser.ml" +# 45850 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35643,9 +45854,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2359 "parsing/parser.mly" +# 2501 "parsing/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35649 "parsing/parser.ml" +# 45860 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35699,15 +45910,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2254 "parsing/parser.mly" +# 2388 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 35705 "parsing/parser.ml" +# 45916 "parsing/parser.ml" in -# 2360 "parsing/parser.mly" +# 2502 "parsing/parser.mly" ( _1 ) -# 35711 "parsing/parser.ml" +# 45922 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35761,15 +45972,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2256 "parsing/parser.mly" +# 2390 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 35767 "parsing/parser.ml" +# 45978 "parsing/parser.ml" in -# 2360 "parsing/parser.mly" +# 2502 "parsing/parser.mly" ( _1 ) -# 35773 "parsing/parser.ml" +# 45984 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35823,15 +46034,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2258 "parsing/parser.mly" +# 2392 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 35829 "parsing/parser.ml" +# 46040 "parsing/parser.ml" in -# 2360 "parsing/parser.mly" +# 2502 "parsing/parser.mly" ( _1 ) -# 35835 "parsing/parser.ml" +# 46046 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35877,9 +46088,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35883 "parsing/parser.ml" +# 46094 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35887,34 +46098,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35893 "parsing/parser.ml" +# 46104 "parsing/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 35899 "parsing/parser.ml" +# 46110 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 35904 "parsing/parser.ml" +# 46115 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2254 "parsing/parser.mly" +# 2388 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 35912 "parsing/parser.ml" +# 46123 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( _1 ) -# 35918 "parsing/parser.ml" +# 46129 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35972,9 +46183,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 35978 "parsing/parser.ml" +# 46189 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in @@ -35984,42 +46195,42 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 35990 "parsing/parser.ml" +# 46201 "parsing/parser.ml" in let _2 = let _1 = let _2 = _2_inlined1 in let x = -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" (_2) -# 35998 "parsing/parser.ml" +# 46209 "parsing/parser.ml" in # 126 "" ( Some x ) -# 36003 "parsing/parser.ml" +# 46214 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 36009 "parsing/parser.ml" +# 46220 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2254 "parsing/parser.mly" +# 2388 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 36017 "parsing/parser.ml" +# 46228 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( _1 ) -# 36023 "parsing/parser.ml" +# 46234 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36065,9 +46276,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 36071 "parsing/parser.ml" +# 46282 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36075,34 +46286,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 36081 "parsing/parser.ml" +# 46292 "parsing/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 36087 "parsing/parser.ml" +# 46298 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 36092 "parsing/parser.ml" +# 46303 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2256 "parsing/parser.mly" +# 2390 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 36100 "parsing/parser.ml" +# 46311 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( _1 ) -# 36106 "parsing/parser.ml" +# 46317 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36160,9 +46371,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 36166 "parsing/parser.ml" +# 46377 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in @@ -36172,42 +46383,42 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 36178 "parsing/parser.ml" +# 46389 "parsing/parser.ml" in let _2 = let _1 = let _2 = _2_inlined1 in let x = -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" (_2) -# 36186 "parsing/parser.ml" +# 46397 "parsing/parser.ml" in # 126 "" ( Some x ) -# 36191 "parsing/parser.ml" +# 46402 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 36197 "parsing/parser.ml" +# 46408 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2256 "parsing/parser.mly" +# 2390 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 36205 "parsing/parser.ml" +# 46416 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( _1 ) -# 36211 "parsing/parser.ml" +# 46422 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36253,9 +46464,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 36259 "parsing/parser.ml" +# 46470 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36263,34 +46474,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 36269 "parsing/parser.ml" +# 46480 "parsing/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 36275 "parsing/parser.ml" +# 46486 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 36280 "parsing/parser.ml" +# 46491 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2258 "parsing/parser.mly" +# 2392 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 36288 "parsing/parser.ml" +# 46499 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( _1 ) -# 36294 "parsing/parser.ml" +# 46505 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36348,9 +46559,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 686 "parsing/parser.mly" +# 759 "parsing/parser.mly" (string) -# 36354 "parsing/parser.ml" +# 46565 "parsing/parser.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in @@ -36360,42 +46571,42 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 36366 "parsing/parser.ml" +# 46577 "parsing/parser.ml" in let _2 = let _1 = let _2 = _2_inlined1 in let x = -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" (_2) -# 36374 "parsing/parser.ml" +# 46585 "parsing/parser.ml" in # 126 "" ( Some x ) -# 36379 "parsing/parser.ml" +# 46590 "parsing/parser.ml" in -# 2261 "parsing/parser.mly" +# 2395 "parsing/parser.mly" ( _1, _2 ) -# 36385 "parsing/parser.ml" +# 46596 "parsing/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2258 "parsing/parser.mly" +# 2392 "parsing/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 36393 "parsing/parser.ml" +# 46604 "parsing/parser.ml" in -# 2361 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( _1 ) -# 36399 "parsing/parser.ml" +# 46610 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36449,15 +46660,15 @@ module Tables = struct let attrs = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36455 "parsing/parser.ml" +# 46666 "parsing/parser.ml" in -# 2370 "parsing/parser.mly" +# 2512 "parsing/parser.mly" ( e.pexp_desc, (ext, attrs @ e.pexp_attributes) ) -# 36461 "parsing/parser.ml" +# 46672 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -36465,10 +46676,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36472 "parsing/parser.ml" +# 46683 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36517,24 +46728,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36523 "parsing/parser.ml" +# 46734 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 36529 "parsing/parser.ml" +# 46740 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2372 "parsing/parser.mly" +# 2514 "parsing/parser.mly" ( Pexp_construct (mkloc (Lident "()") (make_loc _sloc), None), _2 ) -# 36538 "parsing/parser.ml" +# 46749 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -36542,10 +46753,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36549 "parsing/parser.ml" +# 46760 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36601,23 +46812,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36607 "parsing/parser.ml" +# 46818 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 36613 "parsing/parser.ml" +# 46824 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2374 "parsing/parser.mly" +# 2516 "parsing/parser.mly" ( unclosed "begin" _loc__1_ "end" _loc__4_ ) -# 36621 "parsing/parser.ml" +# 46832 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -36625,10 +46836,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36632 "parsing/parser.ml" +# 46843 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36678,9 +46889,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36684 "parsing/parser.ml" +# 46895 "parsing/parser.ml" in let _2 = @@ -36688,21 +46899,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36694 "parsing/parser.ml" +# 46905 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 36700 "parsing/parser.ml" +# 46911 "parsing/parser.ml" in -# 2376 "parsing/parser.mly" +# 2518 "parsing/parser.mly" ( Pexp_new(_3), _2 ) -# 36706 "parsing/parser.ml" +# 46917 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -36710,10 +46921,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36717 "parsing/parser.ml" +# 46928 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36776,21 +46987,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36782 "parsing/parser.ml" +# 46993 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 36788 "parsing/parser.ml" +# 46999 "parsing/parser.ml" in -# 2378 "parsing/parser.mly" +# 2520 "parsing/parser.mly" ( Pexp_pack _4, _3 ) -# 36794 "parsing/parser.ml" +# 47005 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -36798,10 +47009,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36805 "parsing/parser.ml" +# 47016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36879,11 +47090,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 36887 "parsing/parser.ml" +# 47098 "parsing/parser.ml" in let _3 = @@ -36891,24 +47102,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36897 "parsing/parser.ml" +# 47108 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 36903 "parsing/parser.ml" +# 47114 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2380 "parsing/parser.mly" +# 2522 "parsing/parser.mly" ( Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _4), _6), _3 ) -# 36912 "parsing/parser.ml" +# 47123 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -36916,10 +47127,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36923 "parsing/parser.ml" +# 47134 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36989,23 +47200,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 36995 "parsing/parser.ml" +# 47206 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 37001 "parsing/parser.ml" +# 47212 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2382 "parsing/parser.mly" +# 2524 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 37009 "parsing/parser.ml" +# 47220 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -37013,10 +47224,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 37020 "parsing/parser.ml" +# 47231 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37081,27 +47292,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 37085 "parsing/parser.ml" +# 47296 "parsing/parser.ml" in -# 1931 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( _1 ) -# 37090 "parsing/parser.ml" +# 47301 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 881 "parsing/parser.mly" +# 954 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 37099 "parsing/parser.ml" +# 47310 "parsing/parser.ml" in -# 1918 "parsing/parser.mly" +# 2021 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 37105 "parsing/parser.ml" +# 47316 "parsing/parser.ml" in let _2 = @@ -37109,21 +47320,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 37115 "parsing/parser.ml" +# 47326 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 37121 "parsing/parser.ml" +# 47332 "parsing/parser.ml" in -# 2384 "parsing/parser.mly" +# 2526 "parsing/parser.mly" ( Pexp_object _3, _2 ) -# 37127 "parsing/parser.ml" +# 47338 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -37131,10 +47342,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 37138 "parsing/parser.ml" +# 47349 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37199,27 +47410,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 37203 "parsing/parser.ml" +# 47414 "parsing/parser.ml" in -# 1931 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( _1 ) -# 37208 "parsing/parser.ml" +# 47419 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 881 "parsing/parser.mly" +# 954 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 37217 "parsing/parser.ml" +# 47428 "parsing/parser.ml" in -# 1918 "parsing/parser.mly" +# 2021 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 37223 "parsing/parser.ml" +# 47434 "parsing/parser.ml" in let _2 = @@ -37227,23 +47438,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 37233 "parsing/parser.ml" +# 47444 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 37239 "parsing/parser.ml" +# 47450 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2386 "parsing/parser.mly" +# 2528 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 37247 "parsing/parser.ml" +# 47458 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -37251,10 +47462,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2363 "parsing/parser.mly" +# 2505 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 37258 "parsing/parser.ml" +# 47469 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37283,30 +47494,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37289 "parsing/parser.ml" +# 47500 "parsing/parser.ml" in -# 2390 "parsing/parser.mly" +# 2532 "parsing/parser.mly" ( Pexp_ident (_1) ) -# 37295 "parsing/parser.ml" +# 47506 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37304 "parsing/parser.ml" +# 47515 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37310 "parsing/parser.ml" +# 47521 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37330,23 +47541,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2392 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( Pexp_constant _1 ) -# 37336 "parsing/parser.ml" +# 47547 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37344 "parsing/parser.ml" +# 47555 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37350 "parsing/parser.ml" +# 47561 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37375,30 +47586,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37381 "parsing/parser.ml" +# 47592 "parsing/parser.ml" in -# 2394 "parsing/parser.mly" +# 2536 "parsing/parser.mly" ( Pexp_construct(_1, None) ) -# 37387 "parsing/parser.ml" +# 47598 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37396 "parsing/parser.ml" +# 47607 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37402 "parsing/parser.ml" +# 47613 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37422,23 +47633,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2396 "parsing/parser.mly" +# 2538 "parsing/parser.mly" ( Pexp_variant(_1, None) ) -# 37428 "parsing/parser.ml" +# 47639 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37436 "parsing/parser.ml" +# 47647 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37442 "parsing/parser.ml" +# 47653 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37464,9 +47675,9 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 729 "parsing/parser.mly" +# 802 "parsing/parser.mly" (string) -# 37470 "parsing/parser.ml" +# 47681 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -37478,15 +47689,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" +# 987 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 37484 "parsing/parser.ml" +# 47695 "parsing/parser.ml" in -# 2398 "parsing/parser.mly" +# 2540 "parsing/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 37490 "parsing/parser.ml" +# 47701 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -37494,15 +47705,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37500 "parsing/parser.ml" +# 47711 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37506 "parsing/parser.ml" +# 47717 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37535,23 +47746,23 @@ module Tables = struct let _1 = let _1 = let _1 = -# 2399 "parsing/parser.mly" +# 2541 "parsing/parser.mly" ("!") -# 37541 "parsing/parser.ml" +# 47752 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" +# 987 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 37549 "parsing/parser.ml" +# 47760 "parsing/parser.ml" in -# 2400 "parsing/parser.mly" +# 2542 "parsing/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 37555 "parsing/parser.ml" +# 47766 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -37559,15 +47770,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37565 "parsing/parser.ml" +# 47776 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37571 "parsing/parser.ml" +# 47782 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37606,14 +47817,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2661 "parsing/parser.mly" +# 2814 "parsing/parser.mly" ( xs ) -# 37612 "parsing/parser.ml" +# 47823 "parsing/parser.ml" in -# 2402 "parsing/parser.mly" +# 2544 "parsing/parser.mly" ( Pexp_override _2 ) -# 37617 "parsing/parser.ml" +# 47828 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37621,15 +47832,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37627 "parsing/parser.ml" +# 47838 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37633 "parsing/parser.ml" +# 47844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37668,16 +47879,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2661 "parsing/parser.mly" +# 2814 "parsing/parser.mly" ( xs ) -# 37674 "parsing/parser.ml" +# 47885 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2404 "parsing/parser.mly" +# 2546 "parsing/parser.mly" ( unclosed "{<" _loc__1_ ">}" _loc__3_ ) -# 37681 "parsing/parser.ml" +# 47892 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37685,15 +47896,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37691 "parsing/parser.ml" +# 47902 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37697 "parsing/parser.ml" +# 47908 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37724,24 +47935,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2406 "parsing/parser.mly" +# 2548 "parsing/parser.mly" ( Pexp_override [] ) -# 37730 "parsing/parser.ml" +# 47941 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37739 "parsing/parser.ml" +# 47950 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37745 "parsing/parser.ml" +# 47956 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37785,15 +47996,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37791 "parsing/parser.ml" +# 48002 "parsing/parser.ml" in -# 2408 "parsing/parser.mly" +# 2550 "parsing/parser.mly" ( Pexp_field(_1, _3) ) -# 37797 "parsing/parser.ml" +# 48008 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -37801,15 +48012,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37807 "parsing/parser.ml" +# 48018 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37813 "parsing/parser.ml" +# 48024 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37867,24 +48078,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37873 "parsing/parser.ml" +# 48084 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37882 "parsing/parser.ml" +# 48093 "parsing/parser.ml" in -# 2410 "parsing/parser.mly" +# 2552 "parsing/parser.mly" ( Pexp_open(od, _4) ) -# 37888 "parsing/parser.ml" +# 48099 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37892,15 +48103,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37898 "parsing/parser.ml" +# 48109 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 37904 "parsing/parser.ml" +# 48115 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37953,9 +48164,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2661 "parsing/parser.mly" +# 2814 "parsing/parser.mly" ( xs ) -# 37959 "parsing/parser.ml" +# 48170 "parsing/parser.ml" in let od = let _1 = @@ -37963,18 +48174,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37969 "parsing/parser.ml" +# 48180 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37978 "parsing/parser.ml" +# 48189 "parsing/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -37982,10 +48193,10 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2412 "parsing/parser.mly" +# 2554 "parsing/parser.mly" ( (* TODO: review the location of Pexp_override *) Pexp_open(od, mkexp ~loc:_sloc (Pexp_override _4)) ) -# 37989 "parsing/parser.ml" +# 48200 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37993,15 +48204,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37999 "parsing/parser.ml" +# 48210 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38005 "parsing/parser.ml" +# 48216 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38054,16 +48265,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2661 "parsing/parser.mly" +# 2814 "parsing/parser.mly" ( xs ) -# 38060 "parsing/parser.ml" +# 48271 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2415 "parsing/parser.mly" +# 2557 "parsing/parser.mly" ( unclosed "{<" _loc__3_ ">}" _loc__5_ ) -# 38067 "parsing/parser.ml" +# 48278 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38071,15 +48282,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38077 "parsing/parser.ml" +# 48288 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38083 "parsing/parser.ml" +# 48294 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38110,9 +48321,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 38116 "parsing/parser.ml" +# 48327 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in @@ -38124,23 +48335,23 @@ module Tables = struct let _3 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 38130 "parsing/parser.ml" +# 48341 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38138 "parsing/parser.ml" +# 48349 "parsing/parser.ml" in -# 2417 "parsing/parser.mly" +# 2559 "parsing/parser.mly" ( Pexp_send(_1, _3) ) -# 38144 "parsing/parser.ml" +# 48355 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -38148,15 +48359,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38154 "parsing/parser.ml" +# 48365 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38160 "parsing/parser.ml" +# 48371 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38188,9 +48399,9 @@ module Tables = struct } = _menhir_stack in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined1 : ( -# 740 "parsing/parser.mly" +# 813 "parsing/parser.mly" (string) -# 38194 "parsing/parser.ml" +# 48405 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -38204,15 +48415,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 914 "parsing/parser.mly" +# 987 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 38210 "parsing/parser.ml" +# 48421 "parsing/parser.ml" in -# 2419 "parsing/parser.mly" +# 2561 "parsing/parser.mly" ( mkinfix _1 _2 _3 ) -# 38216 "parsing/parser.ml" +# 48427 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38220,15 +48431,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38226 "parsing/parser.ml" +# 48437 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38232 "parsing/parser.ml" +# 48443 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38252,23 +48463,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2421 "parsing/parser.mly" +# 2563 "parsing/parser.mly" ( Pexp_extension _1 ) -# 38258 "parsing/parser.ml" +# 48469 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38266 "parsing/parser.ml" +# 48477 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38272 "parsing/parser.ml" +# 48483 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38316,18 +48527,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2422 "parsing/parser.mly" +# 2564 "parsing/parser.mly" (Lident "()") -# 38322 "parsing/parser.ml" +# 48533 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38331 "parsing/parser.ml" +# 48542 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -38337,25 +48548,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38343 "parsing/parser.ml" +# 48554 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38352 "parsing/parser.ml" +# 48563 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2423 "parsing/parser.mly" +# 2565 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) (Pexp_construct(_3, None))) ) -# 38359 "parsing/parser.ml" +# 48570 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -38363,15 +48574,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38369 "parsing/parser.ml" +# 48580 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38375 "parsing/parser.ml" +# 48586 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38426,9 +48637,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2425 "parsing/parser.mly" +# 2567 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 38432 "parsing/parser.ml" +# 48643 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38436,15 +48647,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38442 "parsing/parser.ml" +# 48653 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38448 "parsing/parser.ml" +# 48659 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38483,25 +48694,25 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2427 "parsing/parser.mly" +# 2569 "parsing/parser.mly" ( let (exten, fields) = _2 in Pexp_record(fields, exten) ) -# 38490 "parsing/parser.ml" +# 48701 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38499 "parsing/parser.ml" +# 48710 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38505 "parsing/parser.ml" +# 48716 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38543,9 +48754,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2430 "parsing/parser.mly" +# 2572 "parsing/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 38549 "parsing/parser.ml" +# 48760 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38553,15 +48764,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38559 "parsing/parser.ml" +# 48770 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38565 "parsing/parser.ml" +# 48776 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38620,27 +48831,27 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38626 "parsing/parser.ml" +# 48837 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38635 "parsing/parser.ml" +# 48846 "parsing/parser.ml" in let _endpos = _endpos__5_ in -# 2432 "parsing/parser.mly" +# 2574 "parsing/parser.mly" ( let (exten, fields) = _4 in Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_record(fields, exten))) ) -# 38644 "parsing/parser.ml" +# 48855 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38648,15 +48859,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38654 "parsing/parser.ml" +# 48865 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38660 "parsing/parser.ml" +# 48871 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38712,9 +48923,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2436 "parsing/parser.mly" +# 2578 "parsing/parser.mly" ( unclosed "{" _loc__3_ "}" _loc__5_ ) -# 38718 "parsing/parser.ml" +# 48929 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38722,15 +48933,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38728 "parsing/parser.ml" +# 48939 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38734 "parsing/parser.ml" +# 48945 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38769,14 +48980,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 38775 "parsing/parser.ml" +# 48986 "parsing/parser.ml" in -# 2438 "parsing/parser.mly" +# 2580 "parsing/parser.mly" ( Pexp_array(_2) ) -# 38780 "parsing/parser.ml" +# 48991 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38784,15 +48995,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38790 "parsing/parser.ml" +# 49001 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38796 "parsing/parser.ml" +# 49007 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38831,16 +49042,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 38837 "parsing/parser.ml" +# 49048 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2440 "parsing/parser.mly" +# 2582 "parsing/parser.mly" ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 38844 "parsing/parser.ml" +# 49055 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38848,15 +49059,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38854 "parsing/parser.ml" +# 49065 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38860 "parsing/parser.ml" +# 49071 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38887,24 +49098,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2442 "parsing/parser.mly" +# 2584 "parsing/parser.mly" ( Pexp_array [] ) -# 38893 "parsing/parser.ml" +# 49104 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38902 "parsing/parser.ml" +# 49113 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 38908 "parsing/parser.ml" +# 49119 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38957,9 +49168,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 38963 "parsing/parser.ml" +# 49174 "parsing/parser.ml" in let od = let _1 = @@ -38967,25 +49178,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38973 "parsing/parser.ml" +# 49184 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38982 "parsing/parser.ml" +# 49193 "parsing/parser.ml" in let _endpos = _endpos__5_ in -# 2444 "parsing/parser.mly" +# 2586 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array(_4))) ) -# 38989 "parsing/parser.ml" +# 49200 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38993,15 +49204,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38999 "parsing/parser.ml" +# 49210 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39005 "parsing/parser.ml" +# 49216 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39052,26 +49263,26 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39058 "parsing/parser.ml" +# 49269 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39067 "parsing/parser.ml" +# 49278 "parsing/parser.ml" in let _endpos = _endpos__4_ in -# 2446 "parsing/parser.mly" +# 2588 "parsing/parser.mly" ( (* TODO: review the location of Pexp_array *) Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array [])) ) -# 39075 "parsing/parser.ml" +# 49286 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -39079,15 +49290,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39085 "parsing/parser.ml" +# 49296 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39091 "parsing/parser.ml" +# 49302 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39140,16 +49351,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 39146 "parsing/parser.ml" +# 49357 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2450 "parsing/parser.mly" +# 2592 "parsing/parser.mly" ( unclosed "[|" _loc__3_ "|]" _loc__5_ ) -# 39153 "parsing/parser.ml" +# 49364 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39157,15 +49368,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39163 "parsing/parser.ml" +# 49374 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39169 "parsing/parser.ml" +# 49380 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39204,15 +49415,15 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 39210 "parsing/parser.ml" +# 49421 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2452 "parsing/parser.mly" +# 2594 "parsing/parser.mly" ( fst (mktailexp _loc__3_ _2) ) -# 39216 "parsing/parser.ml" +# 49427 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39220,15 +49431,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39226 "parsing/parser.ml" +# 49437 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39232 "parsing/parser.ml" +# 49443 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39267,16 +49478,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 39273 "parsing/parser.ml" +# 49484 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2454 "parsing/parser.mly" +# 2596 "parsing/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 39280 "parsing/parser.ml" +# 49491 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39284,15 +49495,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39290 "parsing/parser.ml" +# 49501 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39296 "parsing/parser.ml" +# 49507 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39345,9 +49556,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 39351 "parsing/parser.ml" +# 49562 "parsing/parser.ml" in let od = let _1 = @@ -39355,30 +49566,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39361 "parsing/parser.ml" +# 49572 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39370 "parsing/parser.ml" +# 49581 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _loc__5_ = (_startpos__5_, _endpos__5_) in -# 2456 "parsing/parser.mly" +# 2598 "parsing/parser.mly" ( let list_exp = (* TODO: review the location of list_exp *) let tail_exp, _tail_loc = mktailexp _loc__5_ _4 in mkexp ~loc:(_startpos__3_, _endpos) tail_exp in Pexp_open(od, list_exp) ) -# 39382 "parsing/parser.ml" +# 49593 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39386,15 +49597,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39392 "parsing/parser.ml" +# 49603 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39398 "parsing/parser.ml" +# 49609 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39442,18 +49653,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2461 "parsing/parser.mly" +# 2603 "parsing/parser.mly" (Lident "[]") -# 39448 "parsing/parser.ml" +# 49659 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39457 "parsing/parser.ml" +# 49668 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -39463,25 +49674,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39469 "parsing/parser.ml" +# 49680 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39478 "parsing/parser.ml" +# 49689 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2462 "parsing/parser.mly" +# 2604 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:_loc__3_ (Pexp_construct(_3, None))) ) -# 39485 "parsing/parser.ml" +# 49696 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -39489,15 +49700,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39495 "parsing/parser.ml" +# 49706 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39501 "parsing/parser.ml" +# 49712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39550,16 +49761,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2678 "parsing/parser.mly" +# 2831 "parsing/parser.mly" ( es ) -# 39556 "parsing/parser.ml" +# 49767 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2465 "parsing/parser.mly" +# 2607 "parsing/parser.mly" ( unclosed "[" _loc__3_ "]" _loc__5_ ) -# 39563 "parsing/parser.ml" +# 49774 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39567,15 +49778,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39573 "parsing/parser.ml" +# 49784 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39579 "parsing/parser.ml" +# 49790 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39668,11 +49879,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 39676 "parsing/parser.ml" +# 49887 "parsing/parser.ml" in let _5 = @@ -39680,15 +49891,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 39686 "parsing/parser.ml" +# 49897 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 39692 "parsing/parser.ml" +# 49903 "parsing/parser.ml" in let od = @@ -39697,18 +49908,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39703 "parsing/parser.ml" +# 49914 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1583 "parsing/parser.mly" +# 1680 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39712 "parsing/parser.ml" +# 49923 "parsing/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -39716,12 +49927,12 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2468 "parsing/parser.mly" +# 2610 "parsing/parser.mly" ( let modexp = mkexp_attrs ~loc:(_startpos__3_, _endpos) (Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _6), _8)) _5 in Pexp_open(od, modexp) ) -# 39725 "parsing/parser.ml" +# 49936 "parsing/parser.ml" in let _endpos__1_ = _endpos__9_ in @@ -39729,15 +49940,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39735 "parsing/parser.ml" +# 49946 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39741 "parsing/parser.ml" +# 49952 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39822,23 +50033,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 39828 "parsing/parser.ml" +# 50039 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 39834 "parsing/parser.ml" +# 50045 "parsing/parser.ml" in let _loc__8_ = (_startpos__8_, _endpos__8_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2474 "parsing/parser.mly" +# 2616 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__8_ ) -# 39842 "parsing/parser.ml" +# 50053 "parsing/parser.ml" in let _endpos__1_ = _endpos__8_ in @@ -39846,15 +50057,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 920 "parsing/parser.mly" +# 993 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39852 "parsing/parser.ml" +# 50063 "parsing/parser.ml" in -# 2366 "parsing/parser.mly" +# 2508 "parsing/parser.mly" ( _1 ) -# 39858 "parsing/parser.ml" +# 50069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39883,30 +50094,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39889 "parsing/parser.ml" +# 50100 "parsing/parser.ml" in -# 2761 "parsing/parser.mly" +# 2914 "parsing/parser.mly" ( Ppat_var (_1) ) -# 39895 "parsing/parser.ml" +# 50106 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39904 "parsing/parser.ml" +# 50115 "parsing/parser.ml" in -# 2762 "parsing/parser.mly" +# 2915 "parsing/parser.mly" ( _1 ) -# 39910 "parsing/parser.ml" +# 50121 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39929,9 +50140,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2763 "parsing/parser.mly" +# 2916 "parsing/parser.mly" ( _1 ) -# 39935 "parsing/parser.ml" +# 50146 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39971,9 +50182,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2768 "parsing/parser.mly" +# 2921 "parsing/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 39977 "parsing/parser.ml" +# 50188 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39996,9 +50207,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2770 "parsing/parser.mly" +# 2923 "parsing/parser.mly" ( _1 ) -# 40002 "parsing/parser.ml" +# 50213 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40061,9 +50272,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40067 "parsing/parser.ml" +# 50278 "parsing/parser.ml" in let _3 = @@ -40071,24 +50282,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 40077 "parsing/parser.ml" +# 50288 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 40083 "parsing/parser.ml" +# 50294 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2772 "parsing/parser.mly" +# 2925 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_unpack _4) _3 ) -# 40092 "parsing/parser.ml" +# 50303 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40165,11 +50376,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 40173 "parsing/parser.ml" +# 50384 "parsing/parser.ml" in let _4 = @@ -40178,9 +50389,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40184 "parsing/parser.ml" +# 50395 "parsing/parser.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in @@ -40189,15 +50400,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 40195 "parsing/parser.ml" +# 50406 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 40201 "parsing/parser.ml" +# 50412 "parsing/parser.ml" in let _endpos = _endpos__7_ in @@ -40205,11 +50416,11 @@ module Tables = struct let _loc__4_ = (_startpos__4_, _endpos__4_) in let _sloc = (_symbolstartpos, _endpos) in -# 2774 "parsing/parser.mly" +# 2927 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_constraint(mkpat ~loc:_loc__4_ (Ppat_unpack _4), _6)) _3 ) -# 40213 "parsing/parser.ml" +# 50424 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40233,23 +50444,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2782 "parsing/parser.mly" +# 2935 "parsing/parser.mly" ( Ppat_any ) -# 40239 "parsing/parser.ml" +# 50450 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40247 "parsing/parser.ml" +# 50458 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40253 "parsing/parser.ml" +# 50464 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40273,23 +50484,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2784 "parsing/parser.mly" +# 2937 "parsing/parser.mly" ( Ppat_constant _1 ) -# 40279 "parsing/parser.ml" +# 50490 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40287 "parsing/parser.ml" +# 50498 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40293 "parsing/parser.ml" +# 50504 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40327,24 +50538,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2786 "parsing/parser.mly" +# 2939 "parsing/parser.mly" ( Ppat_interval (_1, _3) ) -# 40333 "parsing/parser.ml" +# 50544 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40342 "parsing/parser.ml" +# 50553 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40348 "parsing/parser.ml" +# 50559 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40373,30 +50584,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40379 "parsing/parser.ml" +# 50590 "parsing/parser.ml" in -# 2788 "parsing/parser.mly" +# 2941 "parsing/parser.mly" ( Ppat_construct(_1, None) ) -# 40385 "parsing/parser.ml" +# 50596 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40394 "parsing/parser.ml" +# 50605 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40400 "parsing/parser.ml" +# 50611 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40420,23 +50631,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2790 "parsing/parser.mly" +# 2943 "parsing/parser.mly" ( Ppat_variant(_1, None) ) -# 40426 "parsing/parser.ml" +# 50637 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40434 "parsing/parser.ml" +# 50645 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40440 "parsing/parser.ml" +# 50651 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40473,15 +50684,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40479 "parsing/parser.ml" +# 50690 "parsing/parser.ml" in -# 2792 "parsing/parser.mly" +# 2945 "parsing/parser.mly" ( Ppat_type (_2) ) -# 40485 "parsing/parser.ml" +# 50696 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -40489,15 +50700,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40495 "parsing/parser.ml" +# 50706 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40501 "parsing/parser.ml" +# 50712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40540,15 +50751,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40546 "parsing/parser.ml" +# 50757 "parsing/parser.ml" in -# 2794 "parsing/parser.mly" +# 2947 "parsing/parser.mly" ( Ppat_open(_1, _3) ) -# 40552 "parsing/parser.ml" +# 50763 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40556,15 +50767,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40562 "parsing/parser.ml" +# 50773 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40568 "parsing/parser.ml" +# 50779 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40612,18 +50823,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2795 "parsing/parser.mly" +# 2948 "parsing/parser.mly" (Lident "[]") -# 40618 "parsing/parser.ml" +# 50829 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40627 "parsing/parser.ml" +# 50838 "parsing/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -40632,18 +50843,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40638 "parsing/parser.ml" +# 50849 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2796 "parsing/parser.mly" +# 2949 "parsing/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 40647 "parsing/parser.ml" +# 50858 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -40651,15 +50862,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40657 "parsing/parser.ml" +# 50868 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40663 "parsing/parser.ml" +# 50874 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40707,18 +50918,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in let _1 = -# 2797 "parsing/parser.mly" +# 2950 "parsing/parser.mly" (Lident "()") -# 40713 "parsing/parser.ml" +# 50924 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40722 "parsing/parser.ml" +# 50933 "parsing/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -40727,18 +50938,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40733 "parsing/parser.ml" +# 50944 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2798 "parsing/parser.mly" +# 2951 "parsing/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 40742 "parsing/parser.ml" +# 50953 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -40746,15 +50957,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40752 "parsing/parser.ml" +# 50963 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40758 "parsing/parser.ml" +# 50969 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40811,15 +51022,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 40817 "parsing/parser.ml" +# 51028 "parsing/parser.ml" in -# 2800 "parsing/parser.mly" +# 2953 "parsing/parser.mly" ( Ppat_open (_1, _4) ) -# 40823 "parsing/parser.ml" +# 51034 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40827,15 +51038,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40833 "parsing/parser.ml" +# 51044 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40839 "parsing/parser.ml" +# 51050 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40890,9 +51101,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2802 "parsing/parser.mly" +# 2955 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 40896 "parsing/parser.ml" +# 51107 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40900,15 +51111,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40906 "parsing/parser.ml" +# 51117 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40912 "parsing/parser.ml" +# 51123 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40955,9 +51166,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2804 "parsing/parser.mly" +# 2957 "parsing/parser.mly" ( expecting _loc__4_ "pattern" ) -# 40961 "parsing/parser.ml" +# 51172 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -40965,15 +51176,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40971 "parsing/parser.ml" +# 51182 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 40977 "parsing/parser.ml" +# 51188 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41014,9 +51225,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2806 "parsing/parser.mly" +# 2959 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 41020 "parsing/parser.ml" +# 51231 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -41024,15 +51235,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41030 "parsing/parser.ml" +# 51241 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 41036 "parsing/parser.ml" +# 51247 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41084,24 +51295,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2808 "parsing/parser.mly" +# 2961 "parsing/parser.mly" ( Ppat_constraint(_2, _4) ) -# 41090 "parsing/parser.ml" +# 51301 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41099 "parsing/parser.ml" +# 51310 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 41105 "parsing/parser.ml" +# 51316 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41156,9 +51367,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2810 "parsing/parser.mly" +# 2963 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 41162 "parsing/parser.ml" +# 51373 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -41166,15 +51377,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41172 "parsing/parser.ml" +# 51383 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 41178 "parsing/parser.ml" +# 51389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41221,9 +51432,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2812 "parsing/parser.mly" +# 2965 "parsing/parser.mly" ( expecting _loc__4_ "type" ) -# 41227 "parsing/parser.ml" +# 51438 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -41231,15 +51442,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41237 "parsing/parser.ml" +# 51448 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 41243 "parsing/parser.ml" +# 51454 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41318,11 +51529,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3437 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 41326 "parsing/parser.ml" +# 51537 "parsing/parser.ml" in let _3 = @@ -41330,23 +51541,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 41336 "parsing/parser.ml" +# 51547 "parsing/parser.ml" in -# 3866 "parsing/parser.mly" +# 4075 "parsing/parser.mly" ( _1, _2 ) -# 41342 "parsing/parser.ml" +# 51553 "parsing/parser.ml" in let _loc__7_ = (_startpos__7_, _endpos__7_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2815 "parsing/parser.mly" +# 2968 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__7_ ) -# 41350 "parsing/parser.ml" +# 51561 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -41354,15 +51565,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41360 "parsing/parser.ml" +# 51571 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 41366 "parsing/parser.ml" +# 51577 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41386,23 +51597,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2817 "parsing/parser.mly" +# 2970 "parsing/parser.mly" ( Ppat_extension _1 ) -# 41392 "parsing/parser.ml" +# 51603 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 922 "parsing/parser.mly" +# 995 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41400 "parsing/parser.ml" +# 51611 "parsing/parser.ml" in -# 2778 "parsing/parser.mly" +# 2931 "parsing/parser.mly" ( _1 ) -# 41406 "parsing/parser.ml" +# 51617 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41421,17 +51632,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 41427 "parsing/parser.ml" +# 51638 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3774 "parsing/parser.mly" +# 3983 "parsing/parser.mly" ( _1 ) -# 41435 "parsing/parser.ml" +# 51646 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41450,17 +51661,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 756 "parsing/parser.mly" +# 829 "parsing/parser.mly" (string) -# 41456 "parsing/parser.ml" +# 51667 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3775 "parsing/parser.mly" +# 3984 "parsing/parser.mly" ( _1 ) -# 41464 "parsing/parser.ml" +# 51675 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41483,9 +51694,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3776 "parsing/parser.mly" +# 3985 "parsing/parser.mly" ( "and" ) -# 41489 "parsing/parser.ml" +# 51700 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41508,9 +51719,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3777 "parsing/parser.mly" +# 3986 "parsing/parser.mly" ( "as" ) -# 41514 "parsing/parser.ml" +# 51725 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41533,9 +51744,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3778 "parsing/parser.mly" +# 3987 "parsing/parser.mly" ( "assert" ) -# 41539 "parsing/parser.ml" +# 51750 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41558,9 +51769,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3779 "parsing/parser.mly" +# 3988 "parsing/parser.mly" ( "begin" ) -# 41564 "parsing/parser.ml" +# 51775 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41583,9 +51794,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3780 "parsing/parser.mly" +# 3989 "parsing/parser.mly" ( "class" ) -# 41589 "parsing/parser.ml" +# 51800 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41608,9 +51819,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3781 "parsing/parser.mly" +# 3990 "parsing/parser.mly" ( "constraint" ) -# 41614 "parsing/parser.ml" +# 51825 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41633,9 +51844,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3782 "parsing/parser.mly" +# 3991 "parsing/parser.mly" ( "do" ) -# 41639 "parsing/parser.ml" +# 51850 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41658,9 +51869,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3783 "parsing/parser.mly" +# 3992 "parsing/parser.mly" ( "done" ) -# 41664 "parsing/parser.ml" +# 51875 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41683,9 +51894,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3784 "parsing/parser.mly" +# 3993 "parsing/parser.mly" ( "downto" ) -# 41689 "parsing/parser.ml" +# 51900 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41708,9 +51919,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3785 "parsing/parser.mly" +# 3994 "parsing/parser.mly" ( "else" ) -# 41714 "parsing/parser.ml" +# 51925 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41733,9 +51944,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3786 "parsing/parser.mly" +# 3995 "parsing/parser.mly" ( "end" ) -# 41739 "parsing/parser.ml" +# 51950 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41758,9 +51969,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3787 "parsing/parser.mly" +# 3996 "parsing/parser.mly" ( "exception" ) -# 41764 "parsing/parser.ml" +# 51975 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41783,9 +51994,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3788 "parsing/parser.mly" +# 3997 "parsing/parser.mly" ( "external" ) -# 41789 "parsing/parser.ml" +# 52000 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41808,9 +52019,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3789 "parsing/parser.mly" +# 3998 "parsing/parser.mly" ( "false" ) -# 41814 "parsing/parser.ml" +# 52025 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41833,9 +52044,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3790 "parsing/parser.mly" +# 3999 "parsing/parser.mly" ( "for" ) -# 41839 "parsing/parser.ml" +# 52050 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41858,9 +52069,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3791 "parsing/parser.mly" +# 4000 "parsing/parser.mly" ( "fun" ) -# 41864 "parsing/parser.ml" +# 52075 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41883,9 +52094,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3792 "parsing/parser.mly" +# 4001 "parsing/parser.mly" ( "function" ) -# 41889 "parsing/parser.ml" +# 52100 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41908,9 +52119,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3793 "parsing/parser.mly" +# 4002 "parsing/parser.mly" ( "functor" ) -# 41914 "parsing/parser.ml" +# 52125 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41933,9 +52144,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3794 "parsing/parser.mly" +# 4003 "parsing/parser.mly" ( "if" ) -# 41939 "parsing/parser.ml" +# 52150 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41958,9 +52169,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3795 "parsing/parser.mly" +# 4004 "parsing/parser.mly" ( "in" ) -# 41964 "parsing/parser.ml" +# 52175 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41983,9 +52194,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3796 "parsing/parser.mly" +# 4005 "parsing/parser.mly" ( "include" ) -# 41989 "parsing/parser.ml" +# 52200 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42008,9 +52219,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3797 "parsing/parser.mly" +# 4006 "parsing/parser.mly" ( "inherit" ) -# 42014 "parsing/parser.ml" +# 52225 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42033,9 +52244,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3798 "parsing/parser.mly" +# 4007 "parsing/parser.mly" ( "initializer" ) -# 42039 "parsing/parser.ml" +# 52250 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42058,9 +52269,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3799 "parsing/parser.mly" +# 4008 "parsing/parser.mly" ( "lazy" ) -# 42064 "parsing/parser.ml" +# 52275 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42083,9 +52294,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3800 "parsing/parser.mly" +# 4009 "parsing/parser.mly" ( "let" ) -# 42089 "parsing/parser.ml" +# 52300 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42108,9 +52319,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3801 "parsing/parser.mly" +# 4010 "parsing/parser.mly" ( "match" ) -# 42114 "parsing/parser.ml" +# 52325 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42133,9 +52344,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3802 "parsing/parser.mly" +# 4011 "parsing/parser.mly" ( "method" ) -# 42139 "parsing/parser.ml" +# 52350 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42158,9 +52369,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3803 "parsing/parser.mly" +# 4012 "parsing/parser.mly" ( "module" ) -# 42164 "parsing/parser.ml" +# 52375 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42183,9 +52394,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3804 "parsing/parser.mly" +# 4013 "parsing/parser.mly" ( "mutable" ) -# 42189 "parsing/parser.ml" +# 52400 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42208,9 +52419,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3805 "parsing/parser.mly" +# 4014 "parsing/parser.mly" ( "new" ) -# 42214 "parsing/parser.ml" +# 52425 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42233,9 +52444,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3806 "parsing/parser.mly" +# 4015 "parsing/parser.mly" ( "nonrec" ) -# 42239 "parsing/parser.ml" +# 52450 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42258,9 +52469,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3807 "parsing/parser.mly" +# 4016 "parsing/parser.mly" ( "object" ) -# 42264 "parsing/parser.ml" +# 52475 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42283,9 +52494,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3808 "parsing/parser.mly" +# 4017 "parsing/parser.mly" ( "of" ) -# 42289 "parsing/parser.ml" +# 52500 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42308,9 +52519,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3809 "parsing/parser.mly" +# 4018 "parsing/parser.mly" ( "open" ) -# 42314 "parsing/parser.ml" +# 52525 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42333,9 +52544,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3810 "parsing/parser.mly" +# 4019 "parsing/parser.mly" ( "or" ) -# 42339 "parsing/parser.ml" +# 52550 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42358,9 +52569,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3811 "parsing/parser.mly" +# 4020 "parsing/parser.mly" ( "private" ) -# 42364 "parsing/parser.ml" +# 52575 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42383,9 +52594,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3812 "parsing/parser.mly" +# 4021 "parsing/parser.mly" ( "rec" ) -# 42389 "parsing/parser.ml" +# 52600 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42408,9 +52619,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3813 "parsing/parser.mly" +# 4022 "parsing/parser.mly" ( "sig" ) -# 42414 "parsing/parser.ml" +# 52625 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42433,9 +52644,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3814 "parsing/parser.mly" +# 4023 "parsing/parser.mly" ( "struct" ) -# 42439 "parsing/parser.ml" +# 52650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42458,9 +52669,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3815 "parsing/parser.mly" +# 4024 "parsing/parser.mly" ( "then" ) -# 42464 "parsing/parser.ml" +# 52675 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42483,9 +52694,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3816 "parsing/parser.mly" +# 4025 "parsing/parser.mly" ( "to" ) -# 42489 "parsing/parser.ml" +# 52700 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42508,9 +52719,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3817 "parsing/parser.mly" +# 4026 "parsing/parser.mly" ( "true" ) -# 42514 "parsing/parser.ml" +# 52725 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42533,9 +52744,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3818 "parsing/parser.mly" +# 4027 "parsing/parser.mly" ( "try" ) -# 42539 "parsing/parser.ml" +# 52750 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42558,9 +52769,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3819 "parsing/parser.mly" +# 4028 "parsing/parser.mly" ( "type" ) -# 42564 "parsing/parser.ml" +# 52775 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42583,9 +52794,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3820 "parsing/parser.mly" +# 4029 "parsing/parser.mly" ( "val" ) -# 42589 "parsing/parser.ml" +# 52800 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42608,9 +52819,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3821 "parsing/parser.mly" +# 4030 "parsing/parser.mly" ( "virtual" ) -# 42614 "parsing/parser.ml" +# 52825 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42633,9 +52844,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3822 "parsing/parser.mly" +# 4031 "parsing/parser.mly" ( "when" ) -# 42639 "parsing/parser.ml" +# 52850 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42658,9 +52869,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3823 "parsing/parser.mly" +# 4032 "parsing/parser.mly" ( "while" ) -# 42664 "parsing/parser.ml" +# 52875 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42683,9 +52894,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3824 "parsing/parser.mly" +# 4033 "parsing/parser.mly" ( "with" ) -# 42689 "parsing/parser.ml" +# 52900 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42708,9 +52919,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.type_exception * string Asttypes.loc option) = -# 3096 "parsing/parser.mly" +# 3249 "parsing/parser.mly" ( _1 ) -# 42714 "parsing/parser.ml" +# 52925 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42784,18 +52995,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs = let _1 = _1_inlined5 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 42790 "parsing/parser.ml" +# 53001 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined5_ in let attrs2 = let _1 = _1_inlined4 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 42799 "parsing/parser.ml" +# 53010 "parsing/parser.ml" in let lid = @@ -42804,9 +53015,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42810 "parsing/parser.ml" +# 53021 "parsing/parser.ml" in let id = @@ -42815,30 +53026,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42821 "parsing/parser.ml" +# 53032 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 42829 "parsing/parser.ml" +# 53040 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3105 "parsing/parser.mly" +# 3258 "parsing/parser.mly" ( let loc = make_loc _sloc in let docs = symbol_docs _sloc in Te.mk_exception ~attrs (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 42842 "parsing/parser.ml" +# 53053 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42868,44 +53079,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2603 "parsing/parser.mly" +# 2735 "parsing/parser.mly" ( _2 ) -# 42874 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2605 "parsing/parser.mly" - ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 42909 "parsing/parser.ml" +# 53085 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42918,55 +53094,44 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let xs : (string Asttypes.loc list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _4 : (Parsetree.function_body) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.type_constraint option) = Obj.magic _2 in + let _1 : (Parsetree.function_param list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _3 = -# 2495 "parsing/parser.mly" - ( xs ) -# 42962 "parsing/parser.ml" - in - let _endpos = _endpos__5_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2607 "parsing/parser.mly" - ( mk_newtypes ~loc:_sloc _3 _5 ) -# 42970 "parsing/parser.ml" +# 2737 "parsing/parser.mly" + ( ghexp ~loc:_sloc (mkfunction _1 _2 _4) + ) +# 53135 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42993,39 +53158,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 42997 "parsing/parser.ml" +# 53162 "parsing/parser.ml" in let xs = let items = -# 957 "parsing/parser.mly" +# 1030 "parsing/parser.mly" ( [] ) -# 43003 "parsing/parser.ml" +# 53168 "parsing/parser.ml" in -# 1386 "parsing/parser.mly" +# 1481 "parsing/parser.mly" ( items ) -# 43008 "parsing/parser.ml" +# 53173 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 43014 "parsing/parser.ml" +# 53179 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 879 "parsing/parser.mly" +# 952 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 43023 "parsing/parser.ml" +# 53188 "parsing/parser.ml" in -# 1379 "parsing/parser.mly" +# 1474 "parsing/parser.mly" ( _1 ) -# 43029 "parsing/parser.ml" +# 53194 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43066,7 +53231,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 43070 "parsing/parser.ml" +# 53235 "parsing/parser.ml" in let xs = let items = @@ -43074,65 +53239,65 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 43080 "parsing/parser.ml" +# 53245 "parsing/parser.ml" in -# 1393 "parsing/parser.mly" +# 1488 "parsing/parser.mly" ( mkstrexp e attrs ) -# 43085 "parsing/parser.ml" +# 53250 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 891 "parsing/parser.mly" +# 964 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 43093 "parsing/parser.ml" +# 53258 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 910 "parsing/parser.mly" +# 983 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 43103 "parsing/parser.ml" +# 53268 "parsing/parser.ml" in -# 959 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x ) -# 43109 "parsing/parser.ml" +# 53274 "parsing/parser.ml" in -# 1386 "parsing/parser.mly" +# 1481 "parsing/parser.mly" ( items ) -# 43115 "parsing/parser.ml" +# 53280 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 43121 "parsing/parser.ml" +# 53286 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 879 "parsing/parser.mly" +# 952 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 43130 "parsing/parser.ml" +# 53295 "parsing/parser.ml" in -# 1379 "parsing/parser.mly" +# 1474 "parsing/parser.mly" ( _1 ) -# 43136 "parsing/parser.ml" +# 53301 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43158,9 +53323,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1408 "parsing/parser.mly" +# 1503 "parsing/parser.mly" ( val_of_let_bindings ~loc:_sloc _1 ) -# 43164 "parsing/parser.ml" +# 53329 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43194,9 +53359,9 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 43200 "parsing/parser.ml" +# 53365 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -43204,10 +53369,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1411 "parsing/parser.mly" +# 1506 "parsing/parser.mly" ( let docs = symbol_docs _sloc in Pstr_extension (_1, add_docs_attrs docs _2) ) -# 43211 "parsing/parser.ml" +# 53376 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -43215,15 +53380,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 926 "parsing/parser.mly" +# 999 "parsing/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 43221 "parsing/parser.ml" +# 53386 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43227 "parsing/parser.ml" +# 53392 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43247,23 +53412,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1414 "parsing/parser.mly" +# 1509 "parsing/parser.mly" ( Pstr_attribute _1 ) -# 43253 "parsing/parser.ml" +# 53418 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 926 "parsing/parser.mly" +# 999 "parsing/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 43261 "parsing/parser.ml" +# 53426 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43267 "parsing/parser.ml" +# 53432 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43287,23 +53452,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1418 "parsing/parser.mly" +# 1513 "parsing/parser.mly" ( pstr_primitive _1 ) -# 43293 "parsing/parser.ml" +# 53458 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43301 "parsing/parser.ml" +# 53466 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43307 "parsing/parser.ml" +# 53472 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43327,23 +53492,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1420 "parsing/parser.mly" +# 1515 "parsing/parser.mly" ( pstr_primitive _1 ) -# 43333 "parsing/parser.ml" +# 53498 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43341 "parsing/parser.ml" +# 53506 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43347 "parsing/parser.ml" +# 53512 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43378,26 +53543,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 43384 "parsing/parser.ml" +# 53549 "parsing/parser.ml" in -# 2940 "parsing/parser.mly" +# 3093 "parsing/parser.mly" ( _1 ) -# 43389 "parsing/parser.ml" +# 53554 "parsing/parser.ml" in -# 2923 "parsing/parser.mly" +# 3076 "parsing/parser.mly" ( _1 ) -# 43395 "parsing/parser.ml" +# 53560 "parsing/parser.ml" in -# 1422 "parsing/parser.mly" +# 1517 "parsing/parser.mly" ( pstr_type _1 ) -# 43401 "parsing/parser.ml" +# 53566 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -43405,15 +53570,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43411 "parsing/parser.ml" +# 53576 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43417 "parsing/parser.ml" +# 53582 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43498,16 +53663,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 43504 "parsing/parser.ml" +# 53669 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1110 "parsing/parser.mly" +# 1204 "parsing/parser.mly" ( List.rev xs ) -# 43511 "parsing/parser.ml" +# 53676 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -43515,46 +53680,46 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43521 "parsing/parser.ml" +# 53686 "parsing/parser.ml" in let _4 = -# 3694 "parsing/parser.mly" +# 3903 "parsing/parser.mly" ( Recursive ) -# 43527 "parsing/parser.ml" +# 53692 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 43534 "parsing/parser.ml" +# 53699 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3193 "parsing/parser.mly" +# 3346 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 43546 "parsing/parser.ml" +# 53711 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3329 "parsing/parser.mly" ( _1 ) -# 43552 "parsing/parser.ml" +# 53717 "parsing/parser.ml" in -# 1424 "parsing/parser.mly" +# 1519 "parsing/parser.mly" ( pstr_typext _1 ) -# 43558 "parsing/parser.ml" +# 53723 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -43562,15 +53727,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43568 "parsing/parser.ml" +# 53733 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43574 "parsing/parser.ml" +# 53739 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43662,16 +53827,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 43668 "parsing/parser.ml" +# 53833 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1110 "parsing/parser.mly" +# 1204 "parsing/parser.mly" ( List.rev xs ) -# 43675 "parsing/parser.ml" +# 53840 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -43679,9 +53844,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43685 "parsing/parser.ml" +# 53850 "parsing/parser.ml" in let _4 = @@ -43690,41 +53855,41 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3696 "parsing/parser.mly" +# 3905 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 43696 "parsing/parser.ml" +# 53861 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 43704 "parsing/parser.ml" +# 53869 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3193 "parsing/parser.mly" +# 3346 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 43716 "parsing/parser.ml" +# 53881 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3329 "parsing/parser.mly" ( _1 ) -# 43722 "parsing/parser.ml" +# 53887 "parsing/parser.ml" in -# 1424 "parsing/parser.mly" +# 1519 "parsing/parser.mly" ( pstr_typext _1 ) -# 43728 "parsing/parser.ml" +# 53893 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -43732,15 +53897,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43738 "parsing/parser.ml" +# 53903 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43744 "parsing/parser.ml" +# 53909 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43764,23 +53929,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1426 "parsing/parser.mly" +# 1521 "parsing/parser.mly" ( pstr_exception _1 ) -# 43770 "parsing/parser.ml" +# 53935 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43778 "parsing/parser.ml" +# 53943 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43784 "parsing/parser.ml" +# 53949 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43843,9 +54008,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 43849 "parsing/parser.ml" +# 54014 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -43855,36 +54020,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43861 "parsing/parser.ml" +# 54026 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 43869 "parsing/parser.ml" +# 54034 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1452 "parsing/parser.mly" +# 1547 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in let body = Mb.mk name body ~attrs ~loc ~docs in Pstr_module body, ext ) -# 43882 "parsing/parser.ml" +# 54047 "parsing/parser.ml" in -# 1428 "parsing/parser.mly" +# 1523 "parsing/parser.mly" ( _1 ) -# 43888 "parsing/parser.ml" +# 54053 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -43892,15 +54057,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43898 "parsing/parser.ml" +# 54063 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 43904 "parsing/parser.ml" +# 54069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43979,9 +54144,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 43985 "parsing/parser.ml" +# 54150 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -43991,24 +54156,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43997 "parsing/parser.ml" +# 54162 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 44005 "parsing/parser.ml" +# 54170 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1487 "parsing/parser.mly" +# 1584 "parsing/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -44016,25 +54181,25 @@ module Tables = struct ext, Mb.mk name body ~attrs ~loc ~docs ) -# 44020 "parsing/parser.ml" +# 54185 "parsing/parser.ml" in -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 44026 "parsing/parser.ml" +# 54191 "parsing/parser.ml" in -# 1475 "parsing/parser.mly" +# 1572 "parsing/parser.mly" ( _1 ) -# 44032 "parsing/parser.ml" +# 54197 "parsing/parser.ml" in -# 1430 "parsing/parser.mly" +# 1525 "parsing/parser.mly" ( pstr_recmodule _1 ) -# 44038 "parsing/parser.ml" +# 54203 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -44042,15 +54207,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44048 "parsing/parser.ml" +# 54213 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 44054 "parsing/parser.ml" +# 54219 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44074,23 +54239,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1432 "parsing/parser.mly" +# 1527 "parsing/parser.mly" ( let (body, ext) = _1 in (Pstr_modtype body, ext) ) -# 44080 "parsing/parser.ml" +# 54245 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44088 "parsing/parser.ml" +# 54253 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 44094 "parsing/parser.ml" +# 54259 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44114,23 +54279,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1434 "parsing/parser.mly" +# 1529 "parsing/parser.mly" ( let (body, ext) = _1 in (Pstr_open body, ext) ) -# 44120 "parsing/parser.ml" +# 54285 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44128 "parsing/parser.ml" +# 54293 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 44134 "parsing/parser.ml" +# 54299 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44200,9 +54365,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in let body : (Parsetree.class_expr) = Obj.magic body in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 44206 "parsing/parser.ml" +# 54371 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -44220,9 +54385,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 44226 "parsing/parser.ml" +# 54391 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -44232,24 +54397,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44238 "parsing/parser.ml" +# 54403 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 44246 "parsing/parser.ml" +# 54411 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1825 "parsing/parser.mly" +# 1928 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -44257,25 +54422,25 @@ module Tables = struct ext, Ci.mk id body ~virt ~params ~attrs ~loc ~docs ) -# 44261 "parsing/parser.ml" +# 54426 "parsing/parser.ml" in -# 1118 "parsing/parser.mly" +# 1212 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 44267 "parsing/parser.ml" +# 54432 "parsing/parser.ml" in -# 1814 "parsing/parser.mly" +# 1917 "parsing/parser.mly" ( _1 ) -# 44273 "parsing/parser.ml" +# 54438 "parsing/parser.ml" in -# 1436 "parsing/parser.mly" +# 1531 "parsing/parser.mly" ( let (ext, l) = _1 in (Pstr_class l, ext) ) -# 44279 "parsing/parser.ml" +# 54444 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -44283,15 +54448,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44289 "parsing/parser.ml" +# 54454 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 44295 "parsing/parser.ml" +# 54460 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44315,23 +54480,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1438 "parsing/parser.mly" +# 1533 "parsing/parser.mly" ( let (ext, l) = _1 in (Pstr_class_type l, ext) ) -# 44321 "parsing/parser.ml" +# 54486 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44329 "parsing/parser.ml" +# 54494 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 44335 "parsing/parser.ml" +# 54500 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44387,38 +54552,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 44393 "parsing/parser.ml" +# 54558 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 44402 "parsing/parser.ml" +# 54567 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1524 "parsing/parser.mly" +# 1621 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 44416 "parsing/parser.ml" +# 54581 "parsing/parser.ml" in -# 1440 "parsing/parser.mly" +# 1535 "parsing/parser.mly" ( pstr_include _1 ) -# 44422 "parsing/parser.ml" +# 54587 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -44426,15 +54591,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 943 "parsing/parser.mly" +# 1016 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44432 "parsing/parser.ml" +# 54597 "parsing/parser.ml" in -# 1442 "parsing/parser.mly" +# 1537 "parsing/parser.mly" ( _1 ) -# 44438 "parsing/parser.ml" +# 54603 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44457,9 +54622,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3759 "parsing/parser.mly" +# 3968 "parsing/parser.mly" ( "-" ) -# 44463 "parsing/parser.ml" +# 54628 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44482,9 +54647,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3760 "parsing/parser.mly" +# 3969 "parsing/parser.mly" ( "-." ) -# 44488 "parsing/parser.ml" +# 54653 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44537,9 +54702,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _5 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 44543 "parsing/parser.ml" +# 54708 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined1_ in @@ -44548,18 +54713,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 44552 "parsing/parser.ml" +# 54717 "parsing/parser.ml" in -# 1021 "parsing/parser.mly" +# 1115 "parsing/parser.mly" ( xs ) -# 44557 "parsing/parser.ml" +# 54722 "parsing/parser.ml" in -# 3467 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( _1 ) -# 44563 "parsing/parser.ml" +# 54728 "parsing/parser.ml" in let _1 = @@ -44567,20 +54732,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44573 "parsing/parser.ml" +# 54738 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3453 "parsing/parser.mly" +# 3662 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _5 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 _3 _4 ) -# 44584 "parsing/parser.ml" +# 54749 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44612,9 +54777,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 44618 "parsing/parser.ml" +# 54783 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -44623,20 +54788,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44629 "parsing/parser.ml" +# 54794 "parsing/parser.ml" in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3457 "parsing/parser.mly" +# 3666 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _2 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 true [] ) -# 44640 "parsing/parser.ml" +# 54805 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44668,7 +54833,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase) = let arg = # 124 "" ( None ) -# 44672 "parsing/parser.ml" +# 54837 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined1_ in let dir = @@ -44677,18 +54842,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44683 "parsing/parser.ml" +# 54848 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 44692 "parsing/parser.ml" +# 54857 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44719,9 +54884,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 743 "parsing/parser.mly" +# 816 "parsing/parser.mly" (string * Location.t * string option) -# 44725 "parsing/parser.ml" +# 54890 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -44732,23 +54897,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3661 "parsing/parser.mly" +# 3870 "parsing/parser.mly" ( let (s, _, _) = _1 in Pdir_string s ) -# 44738 "parsing/parser.ml" +# 54903 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 44746 "parsing/parser.ml" +# 54911 "parsing/parser.ml" in # 126 "" ( Some x ) -# 44752 "parsing/parser.ml" +# 54917 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -44758,18 +54923,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44764 "parsing/parser.ml" +# 54929 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 44773 "parsing/parser.ml" +# 54938 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44800,9 +54965,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 691 "parsing/parser.mly" +# 764 "parsing/parser.mly" (string * char option) -# 44806 "parsing/parser.ml" +# 54971 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -44813,23 +54978,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3662 "parsing/parser.mly" +# 3871 "parsing/parser.mly" ( let (n, m) = _1 in Pdir_int (n ,m) ) -# 44819 "parsing/parser.ml" +# 54984 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 44827 "parsing/parser.ml" +# 54992 "parsing/parser.ml" in # 126 "" ( Some x ) -# 44833 "parsing/parser.ml" +# 54998 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -44839,18 +55004,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44845 "parsing/parser.ml" +# 55010 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 44854 "parsing/parser.ml" +# 55019 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44890,23 +55055,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3663 "parsing/parser.mly" +# 3872 "parsing/parser.mly" ( Pdir_ident _1 ) -# 44896 "parsing/parser.ml" +# 55061 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 44904 "parsing/parser.ml" +# 55069 "parsing/parser.ml" in # 126 "" ( Some x ) -# 44910 "parsing/parser.ml" +# 55075 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -44916,18 +55081,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44922 "parsing/parser.ml" +# 55087 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 44931 "parsing/parser.ml" +# 55096 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44967,23 +55132,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3664 "parsing/parser.mly" +# 3873 "parsing/parser.mly" ( Pdir_ident _1 ) -# 44973 "parsing/parser.ml" +# 55138 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 44981 "parsing/parser.ml" +# 55146 "parsing/parser.ml" in # 126 "" ( Some x ) -# 44987 "parsing/parser.ml" +# 55152 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -44993,18 +55158,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44999 "parsing/parser.ml" +# 55164 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 45008 "parsing/parser.ml" +# 55173 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45044,23 +55209,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let x = let _1 = -# 3665 "parsing/parser.mly" +# 3874 "parsing/parser.mly" ( Pdir_bool false ) -# 45050 "parsing/parser.ml" +# 55215 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 45058 "parsing/parser.ml" +# 55223 "parsing/parser.ml" in # 126 "" ( Some x ) -# 45064 "parsing/parser.ml" +# 55229 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -45070,18 +55235,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45076 "parsing/parser.ml" +# 55241 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 45085 "parsing/parser.ml" +# 55250 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45121,23 +55286,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos__1_inlined2_) in let x = let _1 = -# 3666 "parsing/parser.mly" +# 3875 "parsing/parser.mly" ( Pdir_bool true ) -# 45127 "parsing/parser.ml" +# 55292 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 45135 "parsing/parser.ml" +# 55300 "parsing/parser.ml" in # 126 "" ( Some x ) -# 45141 "parsing/parser.ml" +# 55306 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -45147,18 +55312,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45153 "parsing/parser.ml" +# 55318 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3657 "parsing/parser.mly" +# 3866 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 45162 "parsing/parser.ml" +# 55327 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45198,37 +55363,37 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 45204 "parsing/parser.ml" +# 55369 "parsing/parser.ml" in -# 1393 "parsing/parser.mly" +# 1488 "parsing/parser.mly" ( mkstrexp e attrs ) -# 45209 "parsing/parser.ml" +# 55374 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 891 "parsing/parser.mly" +# 964 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 45217 "parsing/parser.ml" +# 55382 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 879 "parsing/parser.mly" +# 952 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 45226 "parsing/parser.ml" +# 55391 "parsing/parser.ml" in -# 1158 "parsing/parser.mly" +# 1252 "parsing/parser.mly" ( Ptop_def _1 ) -# 45232 "parsing/parser.ml" +# 55397 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45261,21 +55426,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 45265 "parsing/parser.ml" +# 55430 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 879 "parsing/parser.mly" +# 952 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 45273 "parsing/parser.ml" +# 55438 "parsing/parser.ml" in -# 1162 "parsing/parser.mly" +# 1256 "parsing/parser.mly" ( Ptop_def _1 ) -# 45279 "parsing/parser.ml" +# 55444 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45305,9 +55470,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.toplevel_phrase) = -# 1166 "parsing/parser.mly" +# 1260 "parsing/parser.mly" ( _1 ) -# 45311 "parsing/parser.ml" +# 55476 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45330,9 +55495,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.toplevel_phrase) = -# 1169 "parsing/parser.mly" +# 1263 "parsing/parser.mly" ( raise End_of_file ) -# 45336 "parsing/parser.ml" +# 55501 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45355,9 +55520,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3359 "parsing/parser.mly" +# 3512 "parsing/parser.mly" ( ty ) -# 45361 "parsing/parser.ml" +# 55526 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45385,18 +55550,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 45389 "parsing/parser.ml" +# 55554 "parsing/parser.ml" in -# 1049 "parsing/parser.mly" +# 1143 "parsing/parser.mly" ( xs ) -# 45394 "parsing/parser.ml" +# 55559 "parsing/parser.ml" in -# 3362 "parsing/parser.mly" +# 3515 "parsing/parser.mly" ( Ptyp_tuple tys ) -# 45400 "parsing/parser.ml" +# 55565 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in @@ -45404,15 +55569,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 45410 "parsing/parser.ml" +# 55575 "parsing/parser.ml" in -# 3364 "parsing/parser.mly" +# 3517 "parsing/parser.mly" ( _1 ) -# 45416 "parsing/parser.ml" +# 55581 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45441,10 +55606,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2681 "parsing/parser.mly" - ( (Some _2, None) ) -# 45448 "parsing/parser.ml" + let _v : (Parsetree.type_constraint) = +# 2834 "parsing/parser.mly" + ( Pconstraint _2 ) +# 55613 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45487,10 +55652,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2682 "parsing/parser.mly" - ( (Some _2, Some _4) ) -# 45494 "parsing/parser.ml" + let _v : (Parsetree.type_constraint) = +# 2835 "parsing/parser.mly" + ( Pcoerce (Some _2, _4) ) +# 55659 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45519,10 +55684,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2683 "parsing/parser.mly" - ( (None, Some _2) ) -# 45526 "parsing/parser.ml" + let _v : (Parsetree.type_constraint) = +# 2836 "parsing/parser.mly" + ( Pcoerce (None, _2) ) +# 55691 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45551,10 +55716,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2684 "parsing/parser.mly" + let _v : (Parsetree.type_constraint) = +# 2837 "parsing/parser.mly" ( syntax_error() ) -# 45558 "parsing/parser.ml" +# 55723 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45583,10 +55748,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2685 "parsing/parser.mly" + let _v : (Parsetree.type_constraint) = +# 2838 "parsing/parser.mly" ( syntax_error() ) -# 45590 "parsing/parser.ml" +# 55755 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45602,9 +55767,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = -# 3014 "parsing/parser.mly" +# 3167 "parsing/parser.mly" ( (Ptype_abstract, Public, None) ) -# 45608 "parsing/parser.ml" +# 55773 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45634,9 +55799,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = -# 3016 "parsing/parser.mly" +# 3169 "parsing/parser.mly" ( _2 ) -# 45640 "parsing/parser.ml" +# 55805 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45659,9 +55824,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3618 "parsing/parser.mly" +# 3827 "parsing/parser.mly" ( _1 ) -# 45665 "parsing/parser.ml" +# 55830 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45691,9 +55856,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) = -# 3031 "parsing/parser.mly" +# 3184 "parsing/parser.mly" ( _2, _1 ) -# 45697 "parsing/parser.ml" +# 55862 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45709,9 +55874,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 3024 "parsing/parser.mly" +# 3177 "parsing/parser.mly" ( [] ) -# 45715 "parsing/parser.ml" +# 55880 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45734,9 +55899,9 @@ module Tables = struct let _startpos = _startpos_p_ in let _endpos = _endpos_p_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 3026 "parsing/parser.mly" +# 3179 "parsing/parser.mly" ( [p] ) -# 45740 "parsing/parser.ml" +# 55905 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45776,18 +55941,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 45780 "parsing/parser.ml" +# 55945 "parsing/parser.ml" in -# 1021 "parsing/parser.mly" +# 1115 "parsing/parser.mly" ( xs ) -# 45785 "parsing/parser.ml" +# 55950 "parsing/parser.ml" in -# 3028 "parsing/parser.mly" +# 3181 "parsing/parser.mly" ( ps ) -# 45791 "parsing/parser.ml" +# 55956 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45818,24 +55983,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3036 "parsing/parser.mly" +# 3189 "parsing/parser.mly" ( Ptyp_var tyvar ) -# 45824 "parsing/parser.ml" +# 55989 "parsing/parser.ml" in let _endpos__1_ = _endpos_tyvar_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 45833 "parsing/parser.ml" +# 55998 "parsing/parser.ml" in -# 3039 "parsing/parser.mly" +# 3192 "parsing/parser.mly" ( _1 ) -# 45839 "parsing/parser.ml" +# 56004 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45859,23 +56024,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3038 "parsing/parser.mly" +# 3191 "parsing/parser.mly" ( Ptyp_any ) -# 45865 "parsing/parser.ml" +# 56030 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 924 "parsing/parser.mly" +# 997 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 45873 "parsing/parser.ml" +# 56038 "parsing/parser.ml" in -# 3039 "parsing/parser.mly" +# 3192 "parsing/parser.mly" ( _1 ) -# 45879 "parsing/parser.ml" +# 56044 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45891,9 +56056,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3043 "parsing/parser.mly" +# 3196 "parsing/parser.mly" ( NoVariance, NoInjectivity ) -# 45897 "parsing/parser.ml" +# 56062 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45916,9 +56081,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3044 "parsing/parser.mly" +# 3197 "parsing/parser.mly" ( Covariant, NoInjectivity ) -# 45922 "parsing/parser.ml" +# 56087 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45941,9 +56106,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3045 "parsing/parser.mly" +# 3198 "parsing/parser.mly" ( Contravariant, NoInjectivity ) -# 45947 "parsing/parser.ml" +# 56112 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45966,9 +56131,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3046 "parsing/parser.mly" +# 3199 "parsing/parser.mly" ( NoVariance, Injective ) -# 45972 "parsing/parser.ml" +# 56137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45998,9 +56163,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3047 "parsing/parser.mly" +# 3200 "parsing/parser.mly" ( Covariant, Injective ) -# 46004 "parsing/parser.ml" +# 56169 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46030,9 +56195,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3047 "parsing/parser.mly" +# 3200 "parsing/parser.mly" ( Covariant, Injective ) -# 46036 "parsing/parser.ml" +# 56201 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46062,9 +56227,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3048 "parsing/parser.mly" +# 3201 "parsing/parser.mly" ( Contravariant, Injective ) -# 46068 "parsing/parser.ml" +# 56233 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46094,9 +56259,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3048 "parsing/parser.mly" +# 3201 "parsing/parser.mly" ( Contravariant, Injective ) -# 46100 "parsing/parser.ml" +# 56265 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46115,20 +56280,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 683 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 46121 "parsing/parser.ml" +# 56286 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3050 "parsing/parser.mly" +# 3203 "parsing/parser.mly" ( if _1 = "+!" then Covariant, Injective else if _1 = "-!" then Contravariant, Injective else expecting _loc__1_ "type_variance" ) -# 46132 "parsing/parser.ml" +# 56297 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46147,20 +56312,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 729 "parsing/parser.mly" +# 802 "parsing/parser.mly" (string) -# 46153 "parsing/parser.ml" +# 56318 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3054 "parsing/parser.mly" +# 3207 "parsing/parser.mly" ( if _1 = "!+" then Covariant, Injective else if _1 = "!-" then Contravariant, Injective else expecting _loc__1_ "type_variance" ) -# 46164 "parsing/parser.ml" +# 56329 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46194,39 +56359,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 46198 "parsing/parser.ml" +# 56363 "parsing/parser.ml" in let xs = let _1 = -# 957 "parsing/parser.mly" +# 1030 "parsing/parser.mly" ( [] ) -# 46204 "parsing/parser.ml" +# 56369 "parsing/parser.ml" in -# 1189 "parsing/parser.mly" +# 1283 "parsing/parser.mly" ( _1 ) -# 46209 "parsing/parser.ml" +# 56374 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 46215 "parsing/parser.ml" +# 56380 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 883 "parsing/parser.mly" +# 956 "parsing/parser.mly" ( extra_def _startpos _endpos _1 ) -# 46224 "parsing/parser.ml" +# 56389 "parsing/parser.ml" in -# 1182 "parsing/parser.mly" +# 1276 "parsing/parser.mly" ( _1 ) -# 46230 "parsing/parser.ml" +# 56395 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46274,7 +56439,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 46278 "parsing/parser.ml" +# 56443 "parsing/parser.ml" in let xs = let _1 = @@ -46282,61 +56447,61 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 46288 "parsing/parser.ml" +# 56453 "parsing/parser.ml" in -# 1393 "parsing/parser.mly" +# 1488 "parsing/parser.mly" ( mkstrexp e attrs ) -# 46293 "parsing/parser.ml" +# 56458 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 974 "parsing/parser.mly" ( Ptop_def [_1] ) -# 46299 "parsing/parser.ml" +# 56464 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 899 "parsing/parser.mly" +# 972 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 46307 "parsing/parser.ml" +# 56472 "parsing/parser.ml" in -# 959 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x ) -# 46313 "parsing/parser.ml" +# 56478 "parsing/parser.ml" in -# 1189 "parsing/parser.mly" +# 1283 "parsing/parser.mly" ( _1 ) -# 46319 "parsing/parser.ml" +# 56484 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 46325 "parsing/parser.ml" +# 56490 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 883 "parsing/parser.mly" +# 956 "parsing/parser.mly" ( extra_def _startpos _endpos _1 ) -# 46334 "parsing/parser.ml" +# 56499 "parsing/parser.ml" in -# 1182 "parsing/parser.mly" +# 1276 "parsing/parser.mly" ( _1 ) -# 46340 "parsing/parser.ml" +# 56505 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46373,9 +56538,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Asttypes.label) = -# 3537 "parsing/parser.mly" +# 3746 "parsing/parser.mly" ( _2 ) -# 46379 "parsing/parser.ml" +# 56544 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46414,9 +56579,9 @@ module Tables = struct let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3538 "parsing/parser.mly" +# 3747 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 46420 "parsing/parser.ml" +# 56585 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46447,9 +56612,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Asttypes.label) = let _loc__2_ = (_startpos__2_, _endpos__2_) in -# 3539 "parsing/parser.mly" +# 3748 "parsing/parser.mly" ( expecting _loc__2_ "operator" ) -# 46453 "parsing/parser.ml" +# 56618 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46487,9 +56652,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3540 "parsing/parser.mly" +# 3749 "parsing/parser.mly" ( expecting _loc__3_ "module-expr" ) -# 46493 "parsing/parser.ml" +# 56658 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46508,17 +56673,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 46514 "parsing/parser.ml" +# 56679 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3543 "parsing/parser.mly" +# 3752 "parsing/parser.mly" ( _1 ) -# 46522 "parsing/parser.ml" +# 56687 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46541,9 +56706,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3544 "parsing/parser.mly" +# 3753 "parsing/parser.mly" ( _1 ) -# 46547 "parsing/parser.ml" +# 56712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46566,9 +56731,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3612 "parsing/parser.mly" +# 3821 "parsing/parser.mly" ( _1 ) -# 46572 "parsing/parser.ml" +# 56737 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46613,9 +56778,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 46619 "parsing/parser.ml" +# 56784 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let mutable_ : (Asttypes.mutable_flag) = Obj.magic mutable_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -46627,33 +56792,33 @@ module Tables = struct Parsetree.attributes) = let label = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 46633 "parsing/parser.ml" +# 56798 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46641 "parsing/parser.ml" +# 56806 "parsing/parser.ml" in let attrs = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 46647 "parsing/parser.ml" +# 56812 "parsing/parser.ml" in let _1 = -# 3752 "parsing/parser.mly" +# 3961 "parsing/parser.mly" ( Fresh ) -# 46652 "parsing/parser.ml" +# 56817 "parsing/parser.ml" in -# 1965 "parsing/parser.mly" +# 2068 "parsing/parser.mly" ( (label, mutable_, Cfk_virtual ty), attrs ) -# 46657 "parsing/parser.ml" +# 56822 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46698,9 +56863,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 46704 "parsing/parser.ml" +# 56869 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -46712,33 +56877,33 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 46718 "parsing/parser.ml" +# 56883 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46726 "parsing/parser.ml" +# 56891 "parsing/parser.ml" in let _2 = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 46732 "parsing/parser.ml" +# 56897 "parsing/parser.ml" in let _1 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 46737 "parsing/parser.ml" +# 56902 "parsing/parser.ml" in -# 1967 "parsing/parser.mly" +# 2070 "parsing/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 46742 "parsing/parser.ml" +# 56907 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46789,9 +56954,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 46795 "parsing/parser.ml" +# 56960 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -46804,36 +56969,36 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 46810 "parsing/parser.ml" +# 56975 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46818 "parsing/parser.ml" +# 56983 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 46826 "parsing/parser.ml" +# 56991 "parsing/parser.ml" in let _1 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 46832 "parsing/parser.ml" +# 56997 "parsing/parser.ml" in -# 1967 "parsing/parser.mly" +# 2070 "parsing/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 46837 "parsing/parser.ml" +# 57002 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46883,11 +57048,11 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in + let _5 : (Parsetree.type_constraint) = Obj.magic _5 in let _1_inlined1 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 46891 "parsing/parser.ml" +# 57056 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -46899,30 +57064,30 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 46905 "parsing/parser.ml" +# 57070 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46913 "parsing/parser.ml" +# 57078 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 46920 "parsing/parser.ml" +# 57085 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3755 "parsing/parser.mly" +# 3964 "parsing/parser.mly" ( Fresh ) -# 46926 "parsing/parser.ml" +# 57091 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__7_ in @@ -46938,11 +57103,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1970 "parsing/parser.mly" +# 2073 "parsing/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 46946 "parsing/parser.ml" +# 57111 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46998,11 +57163,11 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in + let _5 : (Parsetree.type_constraint) = Obj.magic _5 in let _1_inlined2 : ( -# 705 "parsing/parser.mly" +# 778 "parsing/parser.mly" (string) -# 47006 "parsing/parser.ml" +# 57171 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -47015,33 +57180,33 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3511 "parsing/parser.mly" +# 3720 "parsing/parser.mly" ( _1 ) -# 47021 "parsing/parser.ml" +# 57186 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47029 "parsing/parser.ml" +# 57194 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 47038 "parsing/parser.ml" +# 57203 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3756 "parsing/parser.mly" +# 3965 "parsing/parser.mly" ( Override ) -# 47045 "parsing/parser.ml" +# 57210 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -47056,11 +57221,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1970 "parsing/parser.mly" +# 2073 "parsing/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 47064 "parsing/parser.ml" +# 57229 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47127,9 +57292,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3849 "parsing/parser.mly" +# 4058 "parsing/parser.mly" ( _1 ) -# 47133 "parsing/parser.ml" +# 57298 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -47139,30 +57304,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47145 "parsing/parser.ml" +# 57310 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3853 "parsing/parser.mly" +# 4062 "parsing/parser.mly" ( _1 ) -# 47153 "parsing/parser.ml" +# 57318 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2885 "parsing/parser.mly" +# 3038 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Val.mk id ty ~attrs ~loc ~docs, ext ) -# 47166 "parsing/parser.ml" +# 57331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47178,9 +57343,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.virtual_flag) = -# 3716 "parsing/parser.mly" +# 3925 "parsing/parser.mly" ( Concrete ) -# 47184 "parsing/parser.ml" +# 57349 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47203,9 +57368,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.virtual_flag) = -# 3717 "parsing/parser.mly" +# 3926 "parsing/parser.mly" ( Virtual ) -# 47209 "parsing/parser.ml" +# 57374 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47228,9 +57393,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3740 "parsing/parser.mly" +# 3949 "parsing/parser.mly" ( Immutable ) -# 47234 "parsing/parser.ml" +# 57399 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47260,9 +57425,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3741 "parsing/parser.mly" +# 3950 "parsing/parser.mly" ( Mutable ) -# 47266 "parsing/parser.ml" +# 57431 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47292,9 +57457,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3742 "parsing/parser.mly" +# 3951 "parsing/parser.mly" ( Mutable ) -# 47298 "parsing/parser.ml" +# 57463 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47317,9 +57482,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3747 "parsing/parser.mly" +# 3956 "parsing/parser.mly" ( Public ) -# 47323 "parsing/parser.ml" +# 57488 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47349,9 +57514,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3748 "parsing/parser.mly" +# 3957 "parsing/parser.mly" ( Private ) -# 47355 "parsing/parser.ml" +# 57520 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47381,9 +57546,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3749 "parsing/parser.mly" +# 3958 "parsing/parser.mly" ( Private ) -# 47387 "parsing/parser.ml" +# 57552 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47445,27 +57610,27 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 47449 "parsing/parser.ml" +# 57614 "parsing/parser.ml" in -# 971 "parsing/parser.mly" +# 1044 "parsing/parser.mly" ( xs ) -# 47454 "parsing/parser.ml" +# 57619 "parsing/parser.ml" in -# 2985 "parsing/parser.mly" +# 3138 "parsing/parser.mly" ( _1 ) -# 47460 "parsing/parser.ml" +# 57625 "parsing/parser.ml" in let _endpos__6_ = _endpos_xs_ in let _5 = let _1 = _1_inlined2 in -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 47469 "parsing/parser.ml" +# 57634 "parsing/parser.ml" in let _3 = @@ -47474,16 +57639,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47480 "parsing/parser.ml" +# 57645 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3226 "parsing/parser.mly" +# 3379 "parsing/parser.mly" ( let lident = loc_last _3 in Pwith_type (_3, @@ -47493,7 +57658,7 @@ module Tables = struct ~manifest:_5 ~priv:_4 ~loc:(make_loc _sloc))) ) -# 47497 "parsing/parser.ml" +# 57662 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47546,9 +57711,9 @@ module Tables = struct let _v : (Parsetree.with_constraint) = let _5 = let _1 = _1_inlined2 in -# 3307 "parsing/parser.mly" +# 3460 "parsing/parser.mly" ( _1 ) -# 47552 "parsing/parser.ml" +# 57717 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in @@ -47558,16 +57723,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47564 "parsing/parser.ml" +# 57729 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3239 "parsing/parser.mly" +# 3392 "parsing/parser.mly" ( let lident = loc_last _3 in Pwith_typesubst (_3, @@ -47575,7 +57740,7 @@ module Tables = struct ~params:_2 ~manifest:_5 ~loc:(make_loc _sloc))) ) -# 47579 "parsing/parser.ml" +# 57744 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47624,9 +57789,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47630 "parsing/parser.ml" +# 57795 "parsing/parser.ml" in let _2 = @@ -47635,15 +57800,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47641 "parsing/parser.ml" +# 57806 "parsing/parser.ml" in -# 3247 "parsing/parser.mly" +# 3400 "parsing/parser.mly" ( Pwith_module (_2, _4) ) -# 47647 "parsing/parser.ml" +# 57812 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47692,9 +57857,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47698 "parsing/parser.ml" +# 57863 "parsing/parser.ml" in let _2 = @@ -47703,15 +57868,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47709 "parsing/parser.ml" +# 57874 "parsing/parser.ml" in -# 3249 "parsing/parser.mly" +# 3402 "parsing/parser.mly" ( Pwith_modsubst (_2, _4) ) -# 47715 "parsing/parser.ml" +# 57880 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47767,15 +57932,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47773 "parsing/parser.ml" +# 57938 "parsing/parser.ml" in -# 3251 "parsing/parser.mly" +# 3404 "parsing/parser.mly" ( Pwith_modtype (l, rhs) ) -# 47779 "parsing/parser.ml" +# 57944 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47831,15 +57996,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 887 "parsing/parser.mly" +# 960 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 47837 "parsing/parser.ml" +# 58002 "parsing/parser.ml" in -# 3253 "parsing/parser.mly" +# 3406 "parsing/parser.mly" ( Pwith_modtypesubst (l, rhs) ) -# 47843 "parsing/parser.ml" +# 58008 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47862,9 +58027,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3256 "parsing/parser.mly" +# 3409 "parsing/parser.mly" ( Public ) -# 47868 "parsing/parser.ml" +# 58033 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47894,9 +58059,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3257 "parsing/parser.mly" +# 3410 "parsing/parser.mly" ( Private ) -# 47900 "parsing/parser.ml" +# 58065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47924,59 +58089,59 @@ end let use_file = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1846 lexer lexbuf) : (Parsetree.toplevel_phrase list)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2052 lexer lexbuf) : (Parsetree.toplevel_phrase list)) and toplevel_phrase = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1826 lexer lexbuf) : (Parsetree.toplevel_phrase)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2032 lexer lexbuf) : (Parsetree.toplevel_phrase)) and parse_val_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1820 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2026 lexer lexbuf) : (Longident.t)) and parse_pattern = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1816 lexer lexbuf) : (Parsetree.pattern)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2022 lexer lexbuf) : (Parsetree.pattern)) and parse_mty_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1812 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2018 lexer lexbuf) : (Longident.t)) and parse_module_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1808 lexer lexbuf) : (Parsetree.module_type)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2014 lexer lexbuf) : (Parsetree.module_type)) and parse_module_expr = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1804 lexer lexbuf) : (Parsetree.module_expr)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2010 lexer lexbuf) : (Parsetree.module_expr)) and parse_mod_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1800 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2006 lexer lexbuf) : (Longident.t)) and parse_mod_ext_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1796 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2002 lexer lexbuf) : (Longident.t)) and parse_expression = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1792 lexer lexbuf) : (Parsetree.expression)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1998 lexer lexbuf) : (Parsetree.expression)) and parse_core_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1788 lexer lexbuf) : (Parsetree.core_type)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1994 lexer lexbuf) : (Parsetree.core_type)) and parse_constr_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1784 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1990 lexer lexbuf) : (Longident.t)) and parse_any_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1766 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1972 lexer lexbuf) : (Longident.t)) and interface = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1762 lexer lexbuf) : (Parsetree.signature)) + (Obj.magic (MenhirInterpreter.entry `Simplified 1968 lexer lexbuf) : (Parsetree.signature)) and implementation = fun lexer lexbuf -> @@ -47986,59 +58151,59 @@ module Incremental = struct let use_file = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1846 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2052 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) and toplevel_phrase = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1826 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2032 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) and parse_val_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1820 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2026 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_pattern = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1816 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2022 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) and parse_mty_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1812 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2018 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_module_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1808 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2014 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) and parse_module_expr = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1804 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2010 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) and parse_mod_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1800 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2006 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_mod_ext_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1796 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2002 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_expression = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1792 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1998 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) and parse_core_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1788 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1994 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) and parse_constr_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1784 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1990 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_any_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1766 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1972 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and interface = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1762 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1968 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) and implementation = fun initial_position -> @@ -48046,12 +58211,12 @@ module Incremental = struct end -# 3885 "parsing/parser.mly" +# 4100 "parsing/parser.mly" -# 48053 "parsing/parser.ml" +# 58218 "parsing/parser.ml" # 269 "" -# 48058 "parsing/parser.ml" +# 58223 "parsing/parser.ml" diff --git a/boot/ocamlc b/boot/ocamlc index 1f7167c5204c0fc8c22f3618e25dcb3bdc83fbf6..ee406942e06db62cbc59a8cc88a35c863475176d 100755 GIT binary patch literal 3233094 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

4l=yASH`_F&t@^#kMeg; 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�P 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≶Y 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

*2tM}Rb=M6SKYmiY}``LEi$qjwLMq`}kOgy+K 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%0Axca8m%$G-Io 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
+`}CpRv74#sz}b`WzJ2w%j_hX| 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⪻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
>Ayk0nflVLbGY?Tko z#mW*42JmK}o;wyo=b!>xgU|~Z9>T?O%e>izWIk%a-&}{)J8k)7lnl0%VtELv<1olc zydui0OgVw3K2j&k7@1=_9dWy+9I-8qr=Rh*jP$cH{*futWn%UUpqtG8Ryqw261=K)Kw*1oYXM|FnQZsDO5JUuo=xp8y9f- zlAD}bGQmp{JYa)YBzSnqq5f#4xCC{%MZQP9J7_UaW6~wbygP~R$M-?ln zo)uMNJJs1z#a+W{WcgUs=-GLVMF``DM4l~|ODnZfEti8Jc3)2R1h3|e$3UvVq2+4f{xFf+e$qebo~9Nw^EM<9Y6iS3C$vR zbD|SCl_=9Ls&}C}KcosX_!`zP>JInu&qnm=DB768|IObMnt>W)dEBp+@gj4zP-f-4 zHbbtc7h6ytwal|OXc|$q1Nx}Y+Q;Wty~R6~te8jYqata)YDEsIjs%Kk@o##He-G~O zCw0rO(JK}<@Aw+gSLhiQodBtD>|$YU{$_p=W*G78dJMb+71or=m^iNnC#h{M>PG|T zG~3X#RqU44^~%D~)w?yL!gjW@z@k*co;Xu_u|)Og{EfSL__wX*gk8v6ZUg35Yxx_{ zGr0v7%2G8qQ-hUG)Tp%|eXfE#%u)quhV`J5k!WmrOM~`_VWk*HB&xNGu3of77nIbp zfl3GzFjiKH7%LZaCSHreBWG;U7ZVpqVPH z$*JZ7QD%OJer?kl_|4{au;QD#1tqW9>Z~aZswF-@TqincYpMHL|3MQ0j1*IV9nk_ljT<1!RC$GU!0bm5hq2>wW zxJ}2%?^}OhR0g_@i%+YS8D*}vXo@g}3}C1FIUH36;;&b$+a$97Yn3#GuB2G}54*EG1Lty1YX^B=@*P%&>)g>w&xb^8q#&NDKWHd->DuHg( zC2Tpo3XB`%kk}4?x2+zYN|TkM#Py*uEJ_ko>KjCX1G>Z4q7t1u#4f`)_4CdQUGV{2{^ z3Od_07=;8!Q!|)5uN688ITyjV!e$h09X6B&da!09^2N%Fa;4vgO$Ar_1JANs-w=Y7 zU_-{e;|q2oFJfGozFlBZXwdY%+oI`dnYrCm*A^>*Z9&jAzj+V3gRN#HIs{O(N*Ekg z1&-mq-28HBD;2)Kvj1`tB%*s0o1?{LtJBb=!FMWYZjBje8W5%@uM&jmIY6>2cy#Xv zxF^0Eg#wRvgpvG?>F-;f2r={7vj9F0sJGT(H;|SUkE(ht^zL-43b|3*#itcCp=yNt ze1k#M_OuTa$Y1D02!XM)n8GZM0zDQAl_ltq@D*X6t+l>cmCD z3YH@&yqSI{W7r}ktxxI7Ni^*#>9f1qc3hE$o6C)nG*KN{HgD(vxmDoraI#V8hAR-< z7nzR1%M8B&$S5^#IoDJ+9?u|8?}>9a1(A^7LNseU<3cY85!ZowneKQO1qTM5CE>$D zQU4W7@US9|6YP$;ARXyBj~AFrxXz48iw*!0i%`vm<>_cQnefW)Imp|=*_h72{aG>s z3Lt1h;c~`7L)QL|_OSbohUaNj9aD+_3SMW0;lY#hYGu^G8mET(G>uvt)y~2KjGSY- z?%`Dzl&f#kwk&kefr-VCheRocm2o4&@wm~p^vzS3hE5!i|9Y zqg5jh??uPjrt#8XzfDaRI@l_j`489x0G&f#q_t7Ba;RlION`qTg8*@u3J$q773i_?Mi|c(7j4ruqDbyBY1##Ar=*El0Y4hmj`A#-p6J!|@<-FLF5V z#S*h|FjCS)eeD8Bn!cP7e+SX=_K7Sj45!l9d-davq|z%vLtRm3klTXh^{8))tgwm5 ztW8xI?sF^k&q2g8v-9o=4BsK)tcPX1T3r@$785=)iUq7dETHBZqs;ZzEpg9%1L}vF zQ`TQAmKQys3QgTg{VGRs@mzK$EEI4DS=}RbXMt=2Cjij17?t=CD?SR~dfzLqXj`DH5PH*X z3!A$+@-xtnYwSRebikNm-M)2P0yVe3ZOKH_dmEdU(@r5Ys!x8~`s53b+IV=;w_Y;S z*!fSi>clSVNOb3G8@n^o4iek+2I^0{0!fQ15}oO(kFp*E3T&a{?2LI@h9^RXUrGmG z4@~bVttsB81HJ?5S9GyaeavyAXoFx@>jU!I&Y%$#p+=>Wip?^Cps1hNi2aE0Y}4xr z9I$_{j@I^4@z3id4hCzMP(={r-~_Jti-bxfEJ#F2gt2*#E&dcnxrTw`q|BGciNh*o zg2PCM@qrpnB6y_bf%;zkuuK=;C5fX2ij3T<8nnk^Tytb5y;5eyv?vrGrSU{B9o!5a z|LLpvEd`JNQ~rK9*n9eE{N4)op1h3TaPXZ9IAeWrtt2btgeNb`FN&eps1 z^!RllyqyK#9ArNCzE?ZH^!=~>*sGlK&gx4GSMNFynXxVSXV2TEsK^waEUQ;{ht#I%2AI5Y8{HR@YZ3lzs10 zsCo^j{;rp<#^O^wkSyAO@{r7t(@H#FHxi*#!rCsH@Z;2a(SC`tkF_-C7RutFnrxDn(SVY%O&JG~+}+dN({qeUe0YN;c961sf(62| zjX#@y+}x}dV7p6yIkAwe*!i}fWTg4c`8Gaya&d&Z;2G6|>MjUJK6()HqcoQmlR0*- zZX}nBGLy*W9G1iZ9CYLCvFnigR7c!o0L4sl`|x9*21+y!kfc;ki4+Dr(fO{8ezmm&UyS$tlZ%FB3l*>M6sFPfsPAA|*5&!SSp zu+mDq`bTJrw?mgUEi5%)(arM{B%p9%Th`GW4nqT6tqdjn1U1IQ4LCnRrU4VS4XA4% zGtnBb6HWeENWEaAVw%K(jw_xkdL$kGm}VeHHk8%Rq?>|HyKxF6&f9jAN6`xlRJxkV@hbimLPW#X$gMX*+s+E6}%y| z9j>lWT6Ro=*kaU+p07IrQR|6qQdQQ*F1lSoCneqwUYA3i5o0O_)nZ;>;M7ifQFdn- zx=brKR4rkSQ5TZgJg7m{9)SW1WN(G_vgAC{I!TKC7vjqYWSDz?-Ws_kKaz|fmPrif zl9VhCkkClTkYVm9i7@U0HNukQWDuKxWOpcs)*B+wg!OcT8$Ue65*$cI>H2nY|G)E{ zr1Kr6yA8f~gz_f5?L>)?QVQpL2Wx*@-#e1-eDC<7O->l@Gsz6dsVp`k-Ryg3j;?W( zX_bi{_ameZjd5pdqASb95kyzUV80aKJ6?ceVv?azLQW>)7)wp84-Tu}jDw7J+;8N; zoavwu=Z|9#cqc!oy=v)9NAls|AiF8{I=kJmxH;+Txdy zY>3H8gtH%nBZm(AFUvd5sOKHW9@i%PIKzN53R}%zCm%Tv-}N0meY=Fyh|E4{;-6qDmUM3u>n{tOIdl@LfCDeaCa{Ffxan>cN2=SR7#27;@koi-QJM zHd%DWxnCwDI0hRdz8m}yPw7nbPA-iRWbv3Kc@&yV#3`h;B=Sj5c)IMvn>Im$!#2A~ z;vv&Iu8}10kJ^A8KperzHXRTsn8VmqGE%!R?MJ$9P}Xy(MT(YD0Q=NzLh>fanZm$W z+~p3>9@!uSCywqJlmbwkaOFbE52VzJEBs8qegcR%^9l#pU zlhy0=4>RQa!EiZ^x)5iCF;aQ_5mCY01z|2tox;FenttH^vDrJ!6urX`)cJ+Ge915m z|0^xxfFL#_GI-y(cWv-5Qy=vlyclXf;YaB_^&h_l>(3|QmPUTPjyJi18ITt2)z*j! znQG>mT*PRM@PcrZ0&dsctj3>MG;X5Y?0k)-eI4cC1YKQ;{ zH!;m#mnhKo2M##bb zrdT2nPNY#Un0*{Q{AS{c%NSss=ivVE=aP94 zlf8gE6WWk_vKam>^G!F#W@!%chUZ~M-?As7ZbFQ=lhc_^C}X^CpEK@pDMVx|q6!oI z#y3(GCiRia(4T=8OzLy*r^U`ke&K_BR+^c8>9y#!S7%;(6^VO;H~rI_e7#~L-X6U9 zPj0^Yckv$7#(Z6{?@2sT{rX_v0sOo>c-w35-AcVDcw1Cp?P2h?D|nyU9lY&*t6Qm_ z;B7y8ZewOE)fc?|x9~hB8@yxr;^A58ScNa;%B7F0(h7H$t<*s9#B0#k84RBInCSj& zrAC6cz4^jM_b}@o5BB}g#jVstuC!5rE`}NGfm6{ITya3DV`-3;{L+%5? zhPSL+sl&mZ==4VK9$K+b`kQSlt7NIEd zc#?bfh{i9WDx0;Iug!y>8H*digC&@o!TWKn6|tF6$0J#N(E)qHOAxpleMEhmxZmE& z&c{zA?5jO_iSE_q2QkGrL({WxO@O!XSl-lH zL+)j~l_@lKB~pE0(H_JyS4;o$4#zzJY};BCwrFEgA@N+Lw1~4l6~*>z%vk`JK-9=- zjl2kbD(FCJ+=y2+mn>x9YqFcrRrMG#YO>bmVOJbB<^}O}XE7qG{92X#Hf<@Im|@K| zS6HfJ<1e4Y;_gf)7K+w2gJklIx>&Ps zm`#P}@o;k)mvJTJd@Y*L8bOr76<47KKW>_sHSekoj4sVX>C>PiGA|UN>tP143hfY+ za;{XyV^5XtOS8p=qgtOy(ba5{PPR%C%gT6kU0g7WVg`#MQ7qG=<(OdUg&Vu6I@70l z&a1Z%<@jTvl*whL)r>USI3xd`fm^bdN((2{`PVDa00Y^DSLA&aAM81+C~>~}z_D`i z#bQ|sAs}m11O3M+qCcT4MNB$-2Guh#14UaF(t@c1RwlGKKBOoOw2QrUYsEc7EAC~p z_8u3L?y$|sY_Jtg+l)-2206A*o6mbU2>n&QeS^7pD9hvBj<{tTG}ZO^b@yxC864yzk-7Zz})&!G^u&wKEiNAHY6_q+qL`w(B~>8*fQZ?q|J%8Kr|q~ zc;Gf$y)`(yUb$6)3qU(Q+VQWx2zw&t7h-g|SQ^v|3Pbi%&-*=soyiz>`6vQ}tihN} zR$pFDp0w5A6d@3Ge`?lJa1syt=R|MDK%jyq6)T;KIa8(S zg`hVIWnnwchh5{$4a~_sg6+xwAQNLz{2wGjKkoICwwWiwF`z)lS3Q`}N{V2HsTG|8 zx|=^(B&JXsvp_&T9JX$m+5CAlXJ%7PrAQ)&=Rr0m3H@_Is!icvrFVxI-+qR=`&=w> zUulvR7$SwDQ5b{4vSf~SeM{E=AEkcydgKxsGTo$|(qxsAiU}Zb0xR*IL(k1Y1EtM7`?;A%f zCJa6&@EKGpKjB9KgF)oSBIu|=H(ph_E9ZJjOua2#rgbsFGuKe| zwA;=2B^{3m^hVU3`{dwp^;mfF&}AB;1Am)aTP+r8N{77eofYIzigj}1tTS)}hFA0A zoksdS=Z>~2tDD0ZYEjw}4o(im&260Bgq5N*JfP8xGohxYO5wq-pLR&IVm?7uI->e$ zlGIJoujA|v_R4}9ujhUdECsr&$kJ#d6Vv+3BrUB|Bif3=`zaKUt!DC>^D$#uH@Y5^ z0W|g7($&Vg80P-z`A#rfiRMfP|6Zt>Azi-pUCDs=P<^0WYo=9Br7_V6bGKesyfJ?n z1>04JA%A6u_OKiIH7A?dO1(eW^DP%_YoNc@l4LZ1zOieP21~C!Tyqo81GVAXON9AV0%$hPO^Q8Vy+(ApvALDb{oSak!O7o zPW*o>*b_X>O54M(^H4k3MTgtLOu+$5&L4;uZIWb4EPIn=h=_ z?5n^|8f%$=2SCUSpxcZmmh`(WAVJkI%u*kO;S(|4Vtv*D<8e&w##(scVF(Ekp z-PEHyFzk7u0qm1>1$s=h191aK^TIrR1WHdLSm;PLkC%g{O?Vu$4e{lm)^2zsP|wc0 zJB|IYR6y<(Y6UQ*<65`y1S#f88Xp}PIYzp39q|JO^=vJ7 z5qA`V7j>zseq7?G-VPqOn&83VwdkGkv}U^`Hkk-D_Co+cypKGC8boS1Vq6p@lWGMv zM;v~@Ivcx5Vv)oTc>*p4?dcxKk_)Rmj>BSyfXoi?TdmO(zN3ssf%k;T3NXcq^5z_9 zI)D{KvkUDO0)(we8W9fyjCowg58zrIEgO}cd-WlTjie*CyFZBTx^1l!28Ur#mi8ei zXTlz%Zb?mf835+NmfiA(`XqvAb0e}emi?9fpIdGNl?xkH7bYLlj z-~h?SD2;+4Hj$Y4jz^=+p=k7Vm2{}^FMKF|9$Of|aj$;NZ$-w31!;jRP{E`RSx9h( zZ+sXK)BzA2advlb;aGp$Z|#?DYncO023lm#3~TL;T1EMCtnc41QQ5xGx!_x5!7+z|H+5I@6`7b-a75Ed{oh{nT6Z4YU3?DY+XkKAiCZJKpbKRc@z<$pJ!d6eyCk7nf>fT zn{vRF){Q5?)b)f1rmj?doVDo{zPG5GA=LHg&Jg1EX_s(ppJo@p$qd2#LZb6)=#@a9 zB4{Fp6`Si|#A5(W_jV1t;WQ9jJV3|(XXT2lhV+(O;_{8s(t35hX6-`LG{4~=vG%63 zYavG=yL(d|0CJ)V9ynw2-*tir&Izgk_ik66h@1#h!)k}uQLJBVESPhwYCPMEGC7&i zT^F$QrE3;#<>sVfJ{jWuIqf&m8V@uXoM;$kuFyat8wSys%hh_p!4n4Wk2yNhn;44c z)0r-c+4f*fr52cy6Yyx-p| zLJ-_u)J0o&X8Fp|F1u!BrAi3WT`PX^Jj4Vf8Uo2oA7^@L9dBMRUDzwsNTxZx0>rYv z5vTmllV=sYT)=V}=YB=IPd2mZi?V9ADMhKB8fpNN*$lnP{oSDJn}8c;!#SDgAIBtG zG&Iu4MRu<~z&KPCWyY1ZG&I#zL_3TU6!l6Khnw0kmnM;zhHO!xNq0454mMSx=7<1w zb~C1vf+8^w6=m8rv8(bp>DWOWZQlbNB6~Q}76Wmuu%_c6W6OoRGUwujT>7r71Cpnc z+acJ&e8Gp*h#l=f5gY+?iO zw^s`*(rqdL!k`jp6s$E;ap2zlk6Q#j%eC8R2<}1Zf(bEr{TS364$|>2_}%~U-E{wW ztKQ?H^hF##fY$KFOlw_gvGJ7c_^I7>+*X4L_iF*&iHXb4(o{FrVfPCgGn=X`D&3Zg zCF>PT+QsmG#WUL71)EQnEKw3o4?oVq17s%nzsxER5zaM}7C=pOy(I?Y2sMZu+Sat) zk$k@{dD&IVoOQ0M?FwKVj}D1da>#3XAgwXlv7)RN58KKSWZ3Z7Y@`W*+v%C^Q*Knv za+HYoXGSQ3jLf~U(VgFj`fe8sx9Cd1%FR+Rz7sqC0T5Ds@qXjLC0*Jc|D9{F)IkeH zRCWY(+qaaPPMt)|0q&Q@J8C5t>PP}Fdx%M$MvlWu2yWb!wWBvU;#OBcfr`(e5o^6N z%6w4vGhoR}5YbiEPCkV{(JShp%H5y0Y!s&;F(KL95>G$gSu_P{Lp(DEAs+}Xc@Hi( zFh-i22HW2V2RlOe58N3HA5MVb>ULmg-P(@hr__;a2vL@}>W5z61lIe-v>@p93t|XW*v=b8IFlEd1z4G7 zyv!}32jN<2x#-aNCoz9LrHY+Sx#Obf!$y1&>4UcCHu8UEB&PafUQ7ME7`M;~5X$-qyC=a;0?C|su%=a0@D$6Zq&0A&pKpzYw71DEAOGzHLSt!5 zZPhJ@0(7&m`@=T^YeErC?2I(& z$2chtY0`TU?DLQ&{Z>RYB2D@ojI_`({Z7+H`GX)$nnu|?q)F2%TO-n>u{n51lO9Ac z(Z5k2XVMc$-W|^T)GlzQ22oSnRrj9{WhkuVPOu}!K!2r1?Q^JN_Hom(Gl2sf9PS|^ z;fJLC-p+C=@f5$_+2j0yUm#mwnJ3jVPF~8hIJ7lhu$)VVnhz`jCqmI^GG7)B0de5l zcoP4A3JlLy$48#qIMaW1ZJ}Jc0XiQ=2JclZrpd3D?X+!+3I#kvvQoadzzR3QH+zGW z66AD(N0HK)EI8`RvLLerW}l}!>`_j{3HqWMZ%B@|O{MuDwCscv?l|K*L9_dVt`mCt zXwLoyc1TWg)Rcm<{4_-W&^Dx(DmUKfm{7w7Oh|L$LjfaW&Yw6r!CMG+C(GH0F)@L) zL9i%nq?Dsp5Nl#QY+(0jOkOjhHGr~uOVY7py!84Xwtt9YV$_)$i;3Ia!t zr_EU&3PPLp%+!n-wRb!eHBDpg*1CQM4ubcbU&Y)-ucr{2I_h9kghBeM9A*`-0g4*+ zMl0*fH-H*c4h5>m_yED}Lll;U%$vW|AZ)I)6S#UGvp%MqkspY9Fg`6q;Dx2EKF@{j zV4iV1xN|j_GY3<@60@U9hojz zOqwCrbdwaSPJYRxOpW=d!968+Vz5XXz6TPoQwg*z2b8ZcD`rOHlsF!Nk;d$(wR9 zh2m}#LwV_fU=2DsiYYmwbu{IPMvpoC~Ysijtba?qpkwjx_8ZS|HO29)i5KzL&rqirLu04n*~7-3&#bQoD_ZRWdyz4NW`v zw8-rs<}L}~`ORw$^D!=Lw6w7dLzG4!lA_?Vk6uM|2TW1sIkZx(iBBat9hw9vqSkwH z1d|s>Do6z?&j6Jv-0<5%M|rxBn~KD3Nff$jvyi@^sw}XO4z0#<0E|(J$TK0194u*0 zkg}m{p&>ier?^bK+=h(~w`vwDeFs4T#wh zbsDEH<*`Qj@RIit3!t^oN~6|5Wnc|!7T&7cW<`?CxQSvXWfma8!36;Jd>otCS8=h= zQ*DciM^Kux);7Oad!{?V2kE2d25yL0(@16?j6q5Vkgxh2k{}{*?ue34Y$^}NEg2>s zw-3SIq#kyH(3obtOFOr^ygkFx2|pX$HJ+oJtz8jC;PJMZ-Ewb34)>eV35uj^wQ2WB z2Twm3B}@lbJW_aG0q#1SXwoBdyCQ-Err$e}zpQJ{K>`R0C8GqHbW`IIzJ6(;Ey;sR zjU>%W2emdtFCE-zN%bJ_5UQsQJutl+no)ObJ5V}EuU*D%XxxM&R*OVFR=OQ^!?w~` zpgmm!8JQ5;s=_BrI0g+{;@EpD$&wA+o+ol*02dmWH^6k1gyBAD^@%)s5B6kADV|TH zrwl9O@&1EQ=@j|}_!(w-z%V|bcOvGPZpG*v2I<0os)OgVK$g)3NrXv5@~HUQtRFUb zOtm~!ATUW$+mtpn(HD(y`c7lbyd1C^=IT)fnq@2p8a-HcRL>KASi6fe7qkNB?MdG>1>HceG59j3 zXf$rkUb_b5OENQ@rMnP?*4C63*iLz3TX|gDbY!Vj*H_`4Whlyg{9$?%g%8~W07T?j zYSBad|KT7ewg`Mk@Z9190_-|F{(z;>m`JUuuNi}R0L(xQ*W^w6RB{iuBJbB%cm$7_ zD^+TW&0i-wl8ZY)>Ou0)Gb2)BB|R=v*G=XEX=Nrv>q>$jOhTctN9GbEGvt(_b{^VH ztBSI`=CF!YJJkWf*USd~;P2^;S?H;M-OV}t{raW3gRoyvUSA*^SInJ(7wo(o7{GLF zY(5Dbng>`0_k>~Zo}oQMVy2Rzo}oScq(FmvdL%Fi5(wiYiy@xF=tm!v9Kt^M)GlWs z3ZK8#uMA_)*jP^w{3jcp3s*@a7uCa6xL#65KT^)1Cprc~G8tX-(xGyC%oR=Ttq)%* z)~aQk5Ujs&QVO(cfLCxW$90G3|a)`MLdHV+nNSiP&m9^A$}BUYn0A*{?>D}t<(A2x9Dc7 z^CzA?R-G>_m*GvMh4uZ7j`Bvwg^i91jIfwz%PNuW#e?EaXgMrI_-D}|R?UOUDlvaz zrf{F-3b%NbYV9~5uFs8Og2xXEcu}hv9YM+NxOa^{?etX)lNy9M{T;*%taxT!?R!AS!VMU)`9M|DsnnPQMDGLjURb&v_X$ z(s@YzML7RNh11`4@B&B>-IKwfQtAtrgec8GBzcXXk#0X!9^ zi{>JuJ{4c-s29HCLUhcef?&A&9-HVU7;lzEKg0ai4``v5!aPBI3!SjufRqqvAk99# zAY5v&kF%NjOtxu-QO%>$OQjp7ijOZTS}U<0@hMGEMEs;t)0I#FvtqXN=mBUC$YNQpDYo=|#h%Jn1grCksY}I|PrJ zS8ZL7EZdj&Z*boyEH=hvYQfiTs<2%+#CzNaE**EkmnI2}q~fjAO^^~^-QdXMSj?vT z1?Cm1%?-m)AwzRgYpCF)FMQ#lj0Y&I(bRnX;HtaRNPYfhlKS9&q6MA9ge)214=77x z-;L-;p4!4>$@V>SnawRvA&2D_vIcB=Wq2#xSQ%M_ZR?=cpS&y(S!m-XmFZWCu0mNH z7htGWNK4CYEA=Cmb=XSmKDlHMIOF@aQvb+iM%SNBZXi1~C+wTqJd$-cFm{dOIqD6k z^$@;bdzBo*xLKiA;$p_|&uwmuVYbB>8rtyt-B95U9p8>yNd3C)MY7NBH~s(97C^Uo zKO&rof@bF)dpo6edjDDb%-ll|qr69{7lh8-3048S673T3yi96mZz*t@Et?1qwn|Og z=FAp`K~JFB4dL9v5I<$NY%$R3_o>3Wzv3M$<}7X)+T)W$bl5Da7BcF`w^3}o$8~GT zA>Wm%fed+8Q#)#Ci<~@s9Y^ZIg34SU@j$oRF{-5ruV8ZS9)7quv)J=XBQT=B{NZML z&)Rb%o>H`-L=Qjc=eHTOuKIMqr#Z>#=1VeYJL@Z|_S4M;qZ95r+DM{c3Dc?GwjZb2 zmF1?uY#2L}+;ni;Eqpr^XbI>@qRdrG33k;1pO&?v!7@~}E5uv2reTKKO52%qBm5TI z=OlG&xv9X1x6K{d5q?KJLbuKA)b;}mZeOBXY?RDVI`}S~78qW(#~eM^;#DCJKVq55 zK)#PCv3U;h0h_Z$G9WGc@DPO| zUm6^W_#$@Ob9p-WHTS#+Q~awQXgTpoRA_(bP6yb4SwJ!6-zBR7i5^P2}lEo@*An^4y#7>*z#4PaREC@@dZ<@$u%qYVG5 zdD5MDe#}puvIEIVh{0zJ;!uc^WUz2>O0LJoCTuzpYAjKWG-DLd^t)ftGCH2f2W*uK zYlF1F%TaeV-U=CcO}CuD{WiFH!5b(}jt^34BYsYyu(*062M2{&)(G<3( zp+UIO(hkR;UKea%;{JaR+Oy^gI=?q=5B)!p>_4<%;m#VB^^vxpfUSWGM-C6JW$WxoPf+lwJ*!gm~xP;!U6j!MWLhC}%iP(nggIwYg3q5svt8SE&MQInRcEwd&;?GbbL-T`)4Ubhod4b^e)_={v5x^ew z#g8abH7;*P zDIwv?Wu0}}p_yL;5)K-oajz~`Y29ocuK1^$}3B@i=9B zsp!ZIgjYrZ*$(&>JK)I1fY!_WiEzy;p|i(3?P089i#+$s(O4XWzMBJZBPoN=t)|w$ z9jzN1EqX02jd~f`=qSl#SM@{h#ov_|o{5~vVX`)B;GN~pe*Rkb0I%zVpMV8ny21(m z-wXVB6!-YgOQ+0JDcZ{*W_aS`Y{Dq(z{MggC_ux$J}ip6a@}UTxs`eXglyvW&C>kM zuy#{y|AAw$h@YW>SsENObpY+{du$m=*jSJ&qWgvMhG??!;MJ{8pY#B-L+Gbea1Z5Q zAvhgB)n)S;60gWVzG+dWWrjPhNR8-6OYtlkhiLP`(zjds!z-)<+@!e zFU%KKIm=LPLYL(pi^nGP90QQJ zL8x@Yz4k|kvjSs0mRra6*|xK0{;!gfWcYkf$Kxu}p7YJ!w$;dD+0HO#>Vp=mwo=!5 z`GcVl9(Q3HjO+?rw!}Fv-JL`uG!omi-5fx$j`4)qvM*UJ|*<_&R(W?JkJmwsa z>wuD9(!9U|R2o}J=Hu3QVy3)WEG*o$%MJ@BzJv_#MW?n+=N=+=;PxR{0y?k|N?Ii3 zOvov=$16UL z5q5ALr>|8VvO(HUVQz*7Zxq*V(-w+hJ5%3{ST(cdRGU7FsAF;)kBaF`0sbpiK%6b@ zH1&NB*(S|g+i^Nwk~$I((Of83zv)LfSXiVb3wk#2xlw(|>PC50zP2|RRv$YWp2bNL zwZX*~YQ&R5WrMwOTcrFs^ko#RkvbNG5mPgOpGW)w2QaUre&@g{e;H(*0)67BKl{4a zw}U)%vMjub%j9cCF>D*)s%>Qg-k?sY0tUG?AW;`pXIfYQ^kBnYHiHIMjXZ$png+ZODzF1>k6H38Mk;ligfx*Z=Ah6VTTV`vQ^af7A8j!Uga#|TqSxNmcqiystgfb# zb-El}uzWXs`stJzW4!I{fTC}$Ya*AsA5Xi~sxyw(z-cio9JP!E=QDuZSO|qA`37!b zJr{%zu5~Ks_helJ$G})w`p}=0g{;Qw7XbrY0ArRB_`qG!%3Yda$ z`y8^J*b}JOfA!3Y-;0j6OF}uf5I^6%5YxdJi5Z|JSOIay4QH&}E;wU5!!5X$nR(>u zcmWb1`aQ&LOcVs)j-x^_69nIM9(EwR2f`4+CxhU*JNSJn2xZgv9yo{C2u!MxX;~PC(4#e(X=SRHO193E5L8{E zN(*vLB?P*k(Zb#C92TYC?(5;gicwPaHkMgg@mp%r@^eu{s0I11Zb=-&12(e7AV#|aZ$i|@s_`UhpUadfe2%Q!z<7^I%TARu@? z8s;f5hbs@$N~Xv4P|M>eO;Ha9DVez~#K34V*s|Bi3vC*K-kO2J15}K2wCnx4HwC8S zJSZw;?TldZOo6zYg5OeND`hT(>BfXw8dE2M^};s$%fMC!!PyO+*2xFH^47)X#cfx$x1urlUU@ z;}0DWO`T+#>1i92xAj<6+Ent(aV2<}fJ&S$wW-PUAxix-54cf`-x3@35!*LC98LWo zO=coiQ4>NKEGC=ne#gtE`5$Gjfo$Prv8{Q}Vd|Gjd{J6KPZ`@Qo_n%1Q-`y)6XH$` zbWqYMgF}pinwq+U4;U&|L+E4pTU~983jt_A`TooI?te`ClMdcPI&nN(fLO~`gsa?l zK$d+?!oUi;-LX(f2Vbv51EtIbew@@>9~^W799?bV*uzFDC5iKo0Z56(M>Z~AVP2z$ z>b--#9(e-7A>3Hs%r?11Y~Pbz*nAa&{n^dWQoeuHl0>?DzTW{ik?`_d-lSva`yCe$ zy0CCzlkS`E;~7RDJT_NAl43a#UV4C)uhb|f>iD^^vJ#oTdBu_N8XQ6 zCV1?NFK(sw1dsgzBHt7|_WKv6o`o=<2d{i_c?HgC@$j-Ax@GJ0#f@+)_156gKUv>O z?F$~uEPgw#C}i$WV?>4MROY~*!KZLOfvL~YutvLOH2%H-Hf+93Z$Y?+!}~psMr9Xb zIW;$w`KCP=8Oh6F7$+bjA{JG_)te^?-aAm?d28VyIF@kOy;vB=LsJwT+9R(6%{3&L zW{Ob2KS73K08HLpWd7zF%>W3a&4nXgeFCv}2ailYMJLmbJcgfd2p&n{Ck)bm0Z?@Z z=|6gQ3wDmuw-M?MQrYJy+{*@CKLxP%2dTGwjDDq4dp=6P(y26lhJw_)ukG!S|NY@9 z`j}2VaSZ~mpzC+=m}e|Vb=>j0;D2wv(DAX&mAjiAGaVn?>?m}6)Kt^a@y>inDtu@D z!&)=`zB6Cx2pAffsocFp-fph2H0_Xr&YG3o%5*0pg#pBCGw)DV+eH?7wC*|t{5uhJ z<=}+-WYG2aRl2qAO2Hp?6mAolXlDr%nf*@49%*B`j3)HZ2?^H6Ds_zfhx} zZp<6KVh7dp-6P#2Ial&5(R8!(tCwE+#6~oATo4aW73kZTrxi-zAI;+Roj#~JhAo`W zskoCyE|I)LL8x`FGic2 zgY)@v0S*8-s2n(5=$KSY%xMtUDGwT)SkA^HCvV{?x5XT6lJ*n(V*LmSj&C5`o|eLU z(XqB^EO`o2;Pna*s0%GCh<3^l;xdD$56Z$q0L(1Yq4}!$0yrudp9zJd>wHAHwpyCU zBS?so=NjZJhEtc9P@XMTInjDcpBubL)&Qy^j%pN5wNPH8>;)O39n!(y^ijSpoC!a& zg`T6zCO~2RZD6i5p^CEzOkX<)A`n{3hE&vaoW|4e!W{<+5r4JM&jD^pYsK`yw$=}WTc5Vuy?GhX6Io$37 zB5Ipr*`ruUs$zW+h^sXq&K)gDdRIJm=gURQ!5OV=;##s01sDxwgmW~ko7bY44kpYJ zRwK~rFvS-0XstBwnp1nnY_7Qknsf!EEzG#N6CwSDp*JuY#=%^T+zKr{&|p0LbL}eM z5gKq6%%McgL!p`lBrX78>a_|FXoU*hrnJc}+|!mAQOk{uAv2yXuP?LrlhS(AQ3-_iI0WDvmFcH~_bTlY%8PS4iGwPUa7(xvlv`<9q{p(_T}C@jU%$Ve zxdf#m@?_GGtyHaE&}TEaKG4Dg?&85cT%g3?yacSRt>19{G2pok>TnD++!#Or4AE^1qct4D;A-Oy?gWIn?VA?hPRff2Ul|7j!f?gHo+pXqeprAZCL-E{ml=gk z1!&Y1mX?YO*J)tEn4-k=4ms4gcfWeCJ_0Rbkbe**v~Kio5WTWXSiOBTtCXdpZDu29$oLp$^d5<_v9Fs>XS2P=D@V$ydZW% z?sx)FxwHifUjS7Y2yei=#4Xne=!Wd7Bw(NgId{kAU>w6=z%p^VS>J;}(e|m_+7B?j zT)0sz>xA2Khg!ztiA_uz#a90)!C75}=W49XV@_gkk4S*G*QQ2;+D1CcD2W1rHBwyG>*Z-1x{jav^wIKua zsouWNm~;ylcOh8MjLeD&Iu$=#&8ixROAUlFd4H|=ww3yQG9lDQdhz4~6gHBPq$DJs zGNT+VTbg2JvP+CB)nMXb&35C@*$s-Y;2qa)hC7sO-3QOSnb^a|9^@|nb&o|1rQxf^ zrFFbjG#wCs_w6pb>tgQI+^R$VD>LMw8{C|5yH|9BF#Bsj==BQJSJ7xJ#q5v1wVruq z1`bz15zsB;#?CIB1P?;$&2`o=8dalB3Wg?0ZOF3_5K2?f$DOn)pjYq6`h%3qV#$;j z`bfZKsVT1G?Ufp@7MTs?G4_B?1c=F^U7S(sS1hGU2M1y~D};4Ih9G;KG!r5f)=C(a z7>aFK*>A;_&DhF-Z)Y4e5qY(#S$HOoROi;H`C^*EL4?S}`OIXSD7HToOS@s#-Y;%P z7%zHDk6O~{bnuO?litdCa6)~E-S!lPZ1*zI_ku5;L{f5GqdH}(Yb0(}J%qQzfuMI^ z3}h&GyG0G%?l|E^FX67A@UkEHxXl$sxYqWjMb4xWHrEQn0Ifl#ZF)8uci_LVRb%?U z&9&Jy{l|5yrH%2X?I4%wKX0_JV#FNg5z zadEZL-zg2a=q}vOF~_8I&BsIAix}Z-oAJvUGg)dON;fsML(Netf=9;=nOc>>ip{k? zK;5Z**r{4necV*-)|bzYJxKlCt?NJHG*W~HJ8;%=lQFLg88zhF3zK$fySs4P0nFRq zwqQ#KzvUqjd~?MKzv}{#>{?>7DuKT^jz!lqbU3Gb>0(*kh~Ky?H~4ZYT`f`>u>>3= zarAmTt;$grH+h~~+qTc2jJx)yUZ0`p9w*?sC=PrTNZ50Jjh40=x*eWh%ZxNZOpN== z_WIC${bAROPT1YCeNaFV#>W(s_~%B8LR;jo}R&_I@yM@Kx2`=xlS z6aK)bT_C1gN)>RT5#^Y;K1=2ulht_~!_J}M^$H}0I6-6MgiDh-*&P;36({YH2_?&t z%x0uJ!ra4ps^V4PVUI_;C;+L?dgPJumx@ok>A zb)X^uaO1qxdYs8dA_XcG;;~cfKUNE-xS>`IF0!B;#Fwm5Z1|o> zp+AGPAqNGU;|Ev;1&lW0?;)b+hO6Q4BZ$iuyr{&+YxDdFBD3O@*~a`BV*G}kX&Vr5 zh%oAd=0%Oe(+^-)IJyYZR1PT;`6E3}ioZ$Bg_VsV2f7Dhjs)A02nR~sl6l!}{n7Ql z8`Ww#NoqQ8HNcWOunn;MMMNcF`M);|>0cr|1rj@4EEVn-c^d{Zr23T1FYn<(A+IV+xEXRhz*3_^yDT{>< z9sq&StsnmYe2*JqAm?6QMxzsQFJ$v#_xKEHh}n_ak3}fLgY_Q@z&rL?d}(giQJD&l za{QAA13eh5n5lxDfL)GNSSs6U@`7PZfMsO|)+Bi1>t8 zh~UNlJ07Z%O@jpX=Gqu8Cl8^vUb4=evx#O~EK*QJ_yitX& zb5?d@D3sPHYKZ)#fYuYenJA$7@5$#5YWtbPN5k`r;^>~sy+U0ZY*oVk;Tp{zjrAZ= z@NBU={Jw&5Ox%Y5EqO00-XhAXBo}E<8^<0+dpbITw|jE3-A;!mF?*0Hh>xM>W!f&m z4YnK@M`<38%`YXqk-tuuVJm3>6xwiyWGKU#_v|sq>S(sBbcg*gW1AskzBENzkr){Sc(RD>{q8& zDvbL~L^C)wRAcYN(_MeZX@JssVYg3b?p2*1A@bS|;x-wQh5`%(OUDd=2%3BSJ|biVv?{Qmo(^91br8r6F1 zB`ssM(X>VQe0N)p^WQNJkdi`yY-LlZ9T4e>$Z91O| z>{OS?gvZb;%&+kmaiUczR4Z9)2h0c%;q~%p%W<`+d?GHc^;2t@4a!m%*bOU?eq?#B@9~lDhu&MPLqI3_tR1=NjJII(^2ZH7V{ud|CX+ zAH#d&Bf+DobD06zGtp_@7j9FGEoFj7|J%#2M)csgH+byN&h=+k3#D2yr#~<+fi*Z^ z9L%mlX9DpXks&b9;0Yf8P(CZB%V8co*n97W1_p5bf@_(Bhi74)Tv$?Eb)J*B(}h}T zzV@lZawK;U!uDl~Y^B~6JpMfTK>JvChtTMY^0k$EckuYra4Y6_VQyD!mQ&|<%Bl+q|X(=@|-}1x- z9o(-bzgeZ&`eL@ai$hqY(=cO!yDRfVbLo$RI>nC1CmzEZr6c`uGhoDB`1t<4ue*7Jq6ar=q)mGijR%$|m(^R3~Fg{9IwGzdRh z9KH(KK^`toOY?)5z=r41gnppael!B~>Z7gw>=m+c*$)<1tF`QTXb&zxPQR94(VyCa z#FaEoe`+O(yCZS4cO>wB4ZL3hRSi@nu&x2EZdPlUT^~7Dt`=a&zg$?#k9yxLexNpB zQp|7B{GK(xOXl}U^Lx(x-ZZ~Y4Qlz>bE6jkOkfE1EofQK-Yl%zz}Q^%7NBF2Hu|nY z0ehqGSrC4>eO<^`7xRnDYioB0q|Dmgp{r04sVwE!?#i&%?hXQ2P^etHJNm4se`B#C zz*uNi;zN6Y3Qpq~j0nyzKu>L6gvL#%wtk}~@gLe4<}+(MO)?= z&Lr|Hc$ABwj9e%Ioz3?Qz;3?B|Gg2l0NgUy)`^NPz{}goHd$560=<27B7t0VK0z+`x0+|HNp;u?Qp^} zitt7R5Ip=)6^m8@uyGqAHziMC1GtPibME5ElFWAQiDLnQ;xXeuGnuESRe2ocWjrHW=u3ynP}OP>15- zAJ+io4aWQu)^;NJFiX#WFn%}Hv*E7D?9VrEg z3k}ax?A5Mzht`ylHB}?hDA<2(ERCKL<+xwTYk1LV!Q%~xhU%l<>Ht`2ttC0IroxE@ zMcI}rzx;pfy$f`uS$5Y~w_4TRw;OvrfNjP$=IU|vDqX2m&+h7~>QD9Ru9@m8O;z=H z#_b-BO82VjPD{G7u2he9+Zfg&5GSnk;0f5qL&*;oNz?>^StJ1x5}t-+1qiPYvH;r& z5JFfagam`hCf%34`x!z_KwA? zY*!p>xDbBQ(PvNsL{Y&E+l5r_i!N$eA{l*B6cp=p-P}QIbj2i6q*+B4tr7qG05axC zC>!-B4XL%eJMcgHK~!hN*@2%El>rV4Eu$q6tNRaXcBI0Aj?MR|UX^hHb3o4PPAm|K zV*Z*6I@Q2O;1uJI<&E?M82=D3LL9c8nlj-`=EmMx=j-;)QDgqLazXs|)pI&s;|M_V zsD4D}dro=@I-Rp7vICYvCnxz=q|=KI5=p|&0W%K1$8!7`1$B`^5sDddcMw1L22?vC z)8Y_rs01>CAVv)mF|tx&kZ7JH`xPZm&^-lV$HdXl^l_m^gt)>szHkm>^OAO38?~so ziWq^(i8fO$)c>LDh*%8;yH9}%EDgnVuY8?4u%SnzN1gG%OD5IMP(NJ zE1|BFDYy`}R|6llGn-(Wp^8f+}Y2ZKk0HVL4t1)&kJT!ajBa|jw z%t8T%x7j3I^CNHJp|;X$tH0)Yt*(5AKv-cP_zh&IK!k)_^0aKLUe~1L}7U*CVI5*%d;NB~Y)2jfXaf zUt^UWu>KZC)?h6h2#O*w_Y-A9V>)O^utnyZ;9_JyO7ZONm)@!-Gt}bY3`#51J%;i&8 z9=Qi#GpzWsciIegl;X3Uv==yVfkFPq$*7}*NoIJlxLanKA%F3(MPq&YPxlNTaik>E z%%{h&JyMdHW(;B*g(DOC*wV|*y?+qf&-muENcEB^<9zRoOB+q{;RCt>6($fH=*&mo zIyXIbMX95|BN9Mbuxy!uk#k?|XX0jwi3?dCq}2Gm#k!7cHeW#sQ;79SOi;x5kXAr< z+#G}Xzp+!kDw*1Rpb7r5#1cl>n8=8eR3~dF$v3_pCVrihP>MN;?`#;@eDAF=5A-F~ zrtOu&Tfu5OT6SY5Ec))_J2$8(B1#L z2Q*7~nhJCFtU+KZ%r+yx8IDQvmk$Y@*X#^tBTY^(dI@e#;Q8fOvOnh88!b`?Qo5U!Soy zORM9qw(JLjRCx)rvffDeIxH}rL6`$Rf8sWsOQs)m7po3khpYZjWWFq(=;pUfxX#!zu-Yyai5Ei+xmTft=xQ;B z1G;$`cSIpPs7fFO{m$x620N6CA@Eals`K&f=}{hG*%mtDZ9{#QeO*_g$;ic-!KLTNKgdV41A z4!t@5l=3vaXK}S}VU~JK!dUovhZ)mBX-&G1&3ear?@G^!b`;fdqgk(`tm>K*7Lt3f z7WOIzZ|pf3F1T(XP=^cWWepSgioBdKm@8b16x3xg13pihG`g7Xit&L0hu*Vxa}-Lu zyQqN^JE`ibLkBZ0#8G(NjDevd7i=dmaje=o!6Fq}OjZODN-h(KP+sm7-S(;6&f2swzI4bJEKuq%q3-&^tF#JZ5;ZrhUx*Im{td2Xgx1tE!+psnmh2~@{Pm#ALwKI0p z&Fx?!p&Jqk^buF^h=RWw7cn|vG5x2m1qGOhZpzr7iH7KMeIF4lL(OLM$P)yhYLfX*~ zTKfbctqt{LVqA)Os*AeI7)ET%K=REK+3O&IUZy!IO=UNYq#aJd93=YD9eL(zTu0-5 z0#yuhY?q8TRMZiV1wBpC{fda?I*Oi=VRi%h2socw0hsi{^)2ZoF6`{#W~1;Gs6sY8 zIk970x33)e%;%%{W7mj*81{ET97z>g5RrcCoy#eN8}61sqlA%!qi1A`_ewIvRMm@d zN2sCDaoV1hXtmy_s1M3hbZ=+QRxWe!L5yY517_H?KlaMls{~Q)RuT2h$CMZe0OD2D zApoi~jITw;p&tjzRv;uy-(+kj0Y(OuiL#0|y+OKp=C>vaiz#0MujS!uepgP=CQED4 zBePopgwTt*5X#($1Lb6z5jICVprZPtry^;4%=$QquTL_IW|iJGU0tOWld{fN>peQB zXJj)s8(iR}?4oTZ9eeRpGLkdT_&mAVmcNtn?0Sm(qLZ}c8hgIY#wvCRn=N()hXRJE^aN5|4A70ZqMr(G2 zeX1il9&DfPtOfeBf_<9iJfz)jY)J9yeeFHGQta99-I6>qg*8|@jEw}vBJhWel%6sl z%428UKq3y25BicReKiiU#N*H=ZuOq|FGXmB+=;--W5I!vOu}SHH+-k#%kM$|+GQ(i z)8}c;DGbIWp17>#mKA zzv^2#6tPV*`hlV9rh)YjO3(cLYk&bK)5Sh!(J4UUxxofxMKl^eB$0}o9EK1e7>Im_ zXN9O3W`hvF5pyDLfd{^kZxbBK==5O4X@Ob(TXaHGxfnz)t>P<@&?`O@M4 z=^DS~Qt9`8ir*JXr9Z?dA9=ACn zp_X4;I`s3O;rBaBhyLa~zrU_@=&y6v){#o-&|lK;AkMv?#aWw+SBBnt+ubwG1+-sU zQJCm_#^AENwxboL{xfYsIM#9p+YXdvx1#R#bI_b@Bm#{21kOvp; zvNM*O?K`JZQM=({!P#qcxs9H;Cwz$QJ`3C0=qiI}KK_~b9q-}8zj%jh8oIQ2y(wHR zz!4b!TSkbV;9@fFg&FvtKl>B!k8>3QKKRR%=1%y2b+WyAf71UJKbps3@EkS&(cOVh zlm`C5Rpx43>w}FRlO(S1QdTA{S6u6#l8wmA+HUx*?5I%En%h5FX5dm+e9dw8qZDW^ zO&+3Q2mcIsb;GY?_8C0zJd<`j0_ADlru^KbL#C>ogN0ITqr$Y;4F_Cdono|_B$--~ z@D?l2E%~)_ZGB0pY=&&s3wyXzuG{o%l-5{-U3oZ zkY|aU^kFiO;0w(43ntp+;yb&Jg0~U6B2&@AHZ4L+L81zyuFi?ao9LnbWH#zO$w*9J zlhw8WDS9JZDh{fgp_B7L9E|Oqb0SM1=}+AIe*L-;>DT+RgD3^$nqkvxM@>dD0FV(D zVvA&VI}+{)Q@yA#)yGUw7UEn7^OT~#-s;ms7&6WGm?n{l3H zVd6bvWP`hl&5uO>#+Q=OFcuA2nebxtBAnqqwZ*szF!=VX8&AlH=WO8DphvS3j;6v? zfwX+1=U?2vf(r%gTsx9s=+$pZ-OS3DqUqaSrc7Z(`d8?^fH7P;5L8hh#Ra9$VLQNl z9clp>7q+9!+ajxyVl9~HWWNUE~4>V?D`x3EE)D;ze$eez+e zMOD$jkLIW^1gy?;o^d_94PqFrpN>U#2YwIaxc>#^R>mh(noTaa1p?`RJ2_&$O6mk= z;Hn2$bUG4c1~`5uheP&V2ZMt^;Ry~CJwGHcZ@QIPF+f!S=a1*${3*bhVJ;w~qHJPA zo&)`7^IZQ8x%#gMp~k-u^Mb$E9qwYg4tZBIo)~z0*WzQ^s8cQgKx$~clHKH3NS#P2 zIsU&l_qDCrY93F+S#sPqXm{Wjl8!OgVfe7+_amXNnlZi`%O{si>o1+W66QW?C~=6G zPf^wsmMNG@w4&=9*~G?UwzJm1BIW$n9CGeTSCz6lfRGRoQ?bzVuwfba7yWvo$Sqii zq?RKN&52uVF4fx8r!RE&X&(Uk_Hn2D zs55OglOW`hfh>1S3m1`ho$QkdC&`Iuo@5kY3fiAgZX7WMS1sKs;OqyBWMeHo6=P7$ zQ-REK(@$cp_6H}R^J{Uz7A{=c>(uII1OI~fi)PeheM&6WxR;{4!4#zW+>ENBUtfk!=eXF5S8&Q8w8&|Cq4j>n0Y1 zLpDTtEPY?n)QNOUqO}1>+34*0o-nzg&)$FtQA9v^dcy?VKp)BDfk40Gifm8oB7!K>7LdPP`Cq>A3^7NDHxtANM2&EL2D3> zq$3MEd?YgD5Z|Lb2Vo29yAA9nIjhFbH)_3@8^)<3KjKi%cJ^lTKwl(1vj+@hclaB? zzzGRkSR*yq$p#}~m(C#;BH14VQt^Up>T8Bd%SjI?+y&@(nH7hLyASKt>7EorC8l+k zO3!`!P0ol2-Ff(Gsr0|T?XjprP{yDE?^Se1)%cOa*AG2<+is1rhWy@USH}yT{vK8N zW0TruEKg<~S1DsVp{tbNn%70nhko(4pyB^>{#P3GXJ5a=I6OC0A(6P6A1ggS-gtlR zM@|`&4Q78^Yat}$mnd4EkYt!Hi!|F0O=Z)oFiCC4;Kz#PQ{aX`-^5cRaFtPmhCWmH&k1oTju6>Z0BWx#&z{A zhE&(kaVm;ry~cU^`pV*x*k*^zpWh*8ygbzMZK{QHY3ri5QpjY4!if@41&^MIG^sx@ zarJBINC?pXQJ~kA7Y7F!hn?wbrZ^X7b3;rI+8`SYkvl^Xra(JamR91)67(F;4BT{{ z2}8nt10za41LMht3$}+Xu+hg;io*8XA?Nt5A!$ zZLZew^&5%{@x6)|n3i1$0*h-VW$~U{s-X9Di(6*Ihb^mHxzE%1jCu3g2;w%@T6?_e zlpn{Y7zsrTiZ*9IWD(}NXxx-6-w{pa1MbpX4g=m#zs-3}*r3sN7|DYaw^c03D1}*n z;&x;lL?&sQ1~@Fv1E21cmyss1FY1%sh26Ygr*^n@puoDdoC~R8a(_?k!tTI==DE3M zq&sx1VZ3?_7twhVGqSyZwusfuIs*t^LVNA`DO50Nv7iF1@;!8i(+Kqq$bn*$2t zDic99bfIf6C>st8SXTM4&=e%7f!Aa3y9jhV{OEs55pc>DUc|TuLG&-GKH3#6`N-Yg z!6m)83Kuy%p4v}#UWziQq#0I2_N3wdUxNhxa$Z2}Q%5-4L=5h(0y*pL4uEnpO><^h z!3SJZfYa)*Hh*EC=l%scY|W)=o1_6nX5luPHY|SDp;O)@E9B)u5yf~rA4o4X#9Eiu zTAwLd$j)}0r+k0;n}X^j0!+_SEt`9RE3yAzK+0>wh&@%>0h;+#vI%_}Mt@Us?wBcn zCl~xD#BfuzcGt8d0W4pUDxu?cfswII#suf`m6e*_f+k8zjxb0a09xUQyFc88yN3aH z#z;C4C&)dmn5~REURzMYBSNotQ%8Y0CbZC1j;(_E`a2+U%AG z_Zz#)I2`lI2TjLN@|rH+e;QI^`?`j#r}_Qq#oDYcPGoPhmvx$vLFhgd1_d+7^!2zp z8Fp7S#Q)h7F-48*A$;uB70EI@n z8wgX!#il!G=s*o`3;niG|M{I)-ss&#`xeE5GmaV)EcE)HYmCp_KuFd88|!Ou!e$nO zOHEqj6S*f>5?_`UA~BV;IC16FKFwBH7$gK+FF#^SEIeIG*@0i!u_#eCv{5UXi;77x z`vMD2+@TyP$zJbkQ_LnaAXbnCUqSW)LF?AnrkxFa?xTjZQ|{DBu5v1La#)=_2K9az z?XzeiD}P!mVn=_xp^w%T4S6C?H1-xmy0dy09#Tg*ger7|vn6&{sUrxwPf?)1g-IA(#uU(@U#O-q6;`-6R3wO9zqHG>~g?2u`5EI&c-ju+)^qZtLFv!8vUU z%E?;6KhbtuQ6P>0ybS=+#Up16;=NC+LG9CcZhRNHOGl$x9ejSJv#qErEY+=T+b(p> zrKeWlO&7d8B{|vx4BSD^&h_AQ%VO6hs$UbqRj;vJS+fa34|C!-&S6O3Y~&|18wTp< z(zMs|6vWoO+mqYG0ow51z@-76|JV-ubvq)MP&sRIK>%Q1XV*KHJ*fE}WjbVrP=xWy zvDSaQ@E((^7R&w~joOZ4pYh5o=nH`ePmA!8(o(pbD>+J){#~#f<^q96kP?!kRDnIN zn>iyJ7p}r!R&BIaeftp9g+9v6`$74yL8E)+>zKXYSJ1d4|7e!5p@FI68>GI*=_0G9 z;U<~_!ViM?_Wi|r>tTV}FoQ)S-f&MXNNmf3s8~`n_(Htw#_N+pjloI!&w~A?$EzCF z)=lfs(ftb=7@U1P7ON+n-InwHwjyTkwN~VB4J@q_3fzdWsWNut$Y+h#kg| zU%DOT8eqKJAWNAHI&y?uTAwe3roahvUKm|Dfr{o9fLu=Bud ziMr*Za;;2|A6#v})VoSYvC+RX8=7l_8x9N%H{;W1`) zxgHER?D6BY!m`RIK1U#jghCvOv`_6qvu*ys%xau*WFIgbc;vl~J%OX)sr4w^sqxlb zEmCY}p+k)v-e|0H(752c$9A~LE!^gIc&>DKM@24{4*&iyykb+qk1=&S zYjK-Rp39}u_j2Rg;VU?vT<4cVquEb!Ds$xU>!m|~{IlCT=h4J)nP43sQKFbe-Pzen z&1Tn6W!bCyW~kn#svCzMUaj4M^+8#Fgk+u^=`9{89glf#w75k{QR42uKbLJk`QTj{ zf@Rg};@N7G^AIx&8>-bTb!@8ItksnMec9kEyC+s~aH=oP)EjrVIJa4D$@}Bb_GOM% zsD@f7uD`4Ln;m6UsMe>d^;)$)`2B;g41Ql_=+##z&TY9P@P+pWhX1lviIrYAj({ra9A- z^YI?;%FE&K(L_J4H*LzgaI~42}iC=+l=W@^)~q8r@j5B!2Ab?Rv_Ay=F0Y; zvA65IU2k6B{?qoh#@kwREv^YD=4Rz?I(y-RLvN|-xF!!wnI6Yh?8=j{IDc^HZ38mP zIA5mBTh%81%rXmNlDsXu!&u9qx3dwx7WLGjot>e#-cu#EAOAHeB+Aavd$DeoQq}#Q zmT}elp53ogee1mnPyT~n$WL*WHcZbQYXhH4;L@cKnV-wyE9YYiy93LS*O)gcjSyd- zi%G2!an84QPlZt@uF=|NKJJ^#Y!)+8zpyjrOg7 zoJDC7)kmzGThC+N8cPEvW-$ipLq}i!gQwIyVIXm|zY=GMg3cxF;(Tz|Z z!T+NNYJ^egY~;`F)rfNTH1Zdo(nvRs!c7ix;dly;ejYf&WeZ`vkq0`)BPYs`;s3}% zuLWA{#QQ(Z>-^x0ctK6(Cr&wu?~IO1o$FT~BfOL;r2j>gVjXc4Xo3uSn+o|31us7`WWtH(r0~+-SLDCn3 z5AGLWcf5=XWHOJoIapr0KjuG^1?VFOyWb%%zn*i1>bVD%V;3_2>4ZDWUIDV%3p&9E zG?+8aH8B8QW-C{KxQ$de1x%Z zQiE2Vk?t$!W-GPX3trSA*lV13M#eWc64eqlEZ}k63{I&;Kvb=!gkcy_q4hvt)Y8+o zu(?2M-h4 zmSCOLT1zecQB|7Lg%%~qB4%?4!a|5IG>XE9i;vq2ZH(ZE$v&V;4ugLk_o&?DF-6tT)Na?W&oQQk=+uC_K7);GreXqjMSH^7JnIeod}bcw;}x~Lx~>Rm6Z0EeG8JEXXM7&RQ&|4$*t|@VRvYZ= z8zE_YUV(Mcri|G`Yhz>{#oE~XS_4%Dzjl)`zv%Yt9Sdtu*A1|nqw|=fDBGj(yVCa0 zD{W6-wBOpifa3g%*|XW6NpE&RbNlE#sjX#uIXZ7YEz}H~69U3sC+0b2k5Bb_cmkyG z1W@6r-h5zBwRuO*N@MNb=KZ7LO|jz&&+REku4kI`7v%|$T=^UyNp0t;?a_IzaaQ-6 zZSJiapTFCFxVS!hdPY52SZp(-JTx|r&2vxfDtDw4M$T+4j>ZJGle6)8xgmuOh#s47 ztuJ!uK0aSxX)h41YjU1H_f}eW7gr`3p7bcS-(5)Yolzh234OHDKc1cv9R!rx=V|+_ zYq9Nha-NI0JPOZ2m$g@|SvZbtVws zg07ue5Ro`(`umCFo$selPKOyEvUj|mINtHfUFRV)jZ$^-4P9>G+v$_X1#PkA+0#8q zCyw_dojy5RDCo^}r*I{ESDw=+85#%%{xddz*Jj5|moXP#O3WhqZwG|L~icZNns zGyd`L-g_DUh;9c<&GZM=;SXekKd}A5JK5mT?GIM7!P@o*U(5z4$pbBB`a`+aM#ewV zAjeF9c!VG`{jo<<;jk*y=8-=vWknX7b-aOt_|ceSJL`IvWC7y>i}oG=k-{4vEmfaM z&pO@!_6Mdj{vmR}qo*_bOX^WlkCHl6qr(K7^zM>%Mb-Xhrx|SHkxXv{P6onKPoviRo2g8T7 z0%biZki9QTS@;FYusUV&fh1p~Do?VB@WiHpp@~ZtAExpbeVfwi5Znw+-T5RtR!pik zt%kJHg*?-Ff^tmy+@_vNc!ZOrN7SR78AulAJfK}|4#ReamEq|4{l?;YO|IM%N5?l> ztxbPs*nraO{K-uFTq}GmB~l9;*biUP&O};{v(p{5rF2A0n`YL!^){;&5(opZH`Fy% znO5}#_wkNogPcK0OMc}^=-*79#90BSF5#dh{4is;n6X>iAGET;8ETMp>oX@SJj0Fn zkm*l>;b_T}lV^r0nu~y*Qf+VBCh47QxY|5Q*`sIA8?viB00ON<@!>5x#8FEvPpGyz zY&TM{<#&NG4Vh+BCQG!86H)pId8X34eXhmVLN&)a(mb0r71&9r=~zdaWt;V+oUw$g zCwtQSWM{nkW>>mppY&Q_HX&avPbg-{D+(Dx4WrJ(N7+p{N?MMz4ru|>$}@ES{LtX}!E=KbhR&TIx^R9N;D%`q{(dotN7G0_ z3pThj9Z4GI6Fpph_H@=S5tfm2dh&F<^{eN^@jmsOINnhYc?$LDV{g-^Pxh(j^vRBT z$Wy3CACGr0Fo4`Ajai@84{{V=`qTlqJ#`4^ycju(FMa9&)Sfy7a9)fY#h30n7~7t{ zSX!#XbA&p=r_MG>?CFc873;|R5?1KqEx@Ogx6-u#nQP(tbD$+4pH{9~@FxNa@#BKO9>2Nho6hMSgQ}ZQ>y@(6O6% zw}H8h3@F}hu=G7zc-Ye8Q8e*bslb(+kEX)&!{!>ByYRB~_#W?53P?(Q3(73X`f(c( zU)mq4WbvKpNI;4)K{FQ~-N+T%GD;SXDgK|R}Fs=Aa zvda7inb{Sm^>M|o;cj#kwcROH6Fz3~fn8?IWnxb=?C$#tfd>)Bbznxc{C$S(QfWrRtXcj_P^#^r&8DPkW4B z{XKnh47*aP=<-;-6B5i;8jnsKk5A+ZoC<;XV&q|x!X$NoPl;p4(}!vs;RFOLK(!g@ z>`dM;S74f%CTS{v(CP9;{`daAYuCw&|gP8c+w ztr#+b_Vn3XXitft;{%3*wMt;XwRjfu>}UB(2~wnd9Xg9t8Vho+osAMkjnh49eak9% zJBtrg^cJOLm!lsx@j?2+`ltPNj>#gP5rfu7kgeEotZfDoN(NVctS*DA(l2~^`_NYp zebxT#4h)nI|IN$014L*3JNyuw`ET*_TM0qT=M~_xsN2*)F?Oli9JHwTu zM;#?YT*Abu(8)rMYMrmyl(uD~^KVpcZbU1a=gH}%242h`zft9ndq$Ot|G+PapIJ=B zzgZcNhBU8#c>ax8`FH3mCC=*0?!ZLp$bbIH-GRx{k$*%qhohwDlGaZD-l; zz;x;PzxT_3S4-b;>)P%>R{DmwuN98YLintm z(KqJqTzWkoT@PFo4zNeYpV>b+HmxAGORuF%yLM!h!ST2M?2KHx^Vx{UPg92t5{DKeav^Nsmy*RRC-7NM6yMd4#M#ay}a*&AZC9S4zc0ZWF-asnBe zlkre$c^zj3qj$v5Aaznx9OHNtc3=7YUJ8?_=4upi7jdMb6)a}>L3ZSM|zsq_s$ ze0_J|x0Sx(C*S-T!o`iT_A*~4 zqoo%gzB!Cho04`1{#fb7&)o!q-GTqA^x~&JZ%==s^y2uNy90l+^x`M@`BSAAzv)c? zdG6z~0)6h|3M%sA_?%w&@wbcqcG2H5f6L}zFXyleZ^&%Wej@?=xxEPB6=?I~wHsF| zj#mHVac4*b2#U*X~^V%oQi&Si%3^Spn`F_Y-OE1G_9EjB|$R+6kOfbE>DS<0x$IVNa?df^9O=Xa*`!f*W4(2bkJpSyB< zLp8s*K zStwO6xmrBpSrT5FF=g(eKmDQDZF?DDD&3z?2hxy2aDcEVl zch?Y{idNj&+1!kqh_dJbIf=k_TNd7|#&3AI2@2J4`dxgW`9rkN>Fjj)LV;pBKz+XS z+)oI&h0=5FPyfu^Ty{P&5_ZJ!k@bxQfNi7PlrIE1@0Ol>RV9{6&z-$Cs>8)P0?5e4 zxy!5+JHrZlm>ty{3xvYizLF}GLeJ!th1DR*obLPQYBaHtZb7%U}1A1e$mQ+a3Ni(9Mf=4K<=Gq%n% z7b~St)w%()Q#A=H^B*KvNPsS<(m7K9qRMMsi=P7y8JdnN)Lt*RC*uG#)(CIbT9X5A z!t2jdwSnpGcO3&(%CznV~x@j#?j&l>Tw)@L$FUru2W7o_X;GzyGB4%*Srz zvS*YSd@yrS^%5SY>10%t1q_eWoq-`A_T431Gj%pjJ)INWJ%F0N$$quqdCxrC7K4>?NQ<%Bay+qfKK zP<1%Q2I>{5BgMC@gr;}Eb ztC!^+V;A|HC?`sHG4qVsACUMO{jsD}X=7aTMYhU^e&8a(0T2Cp{yuZ)or_Z* z6BO|tJKRzHRtZ@;eW^fDH*Zc`?Y25S;1WCwC|I7h_*!^2w$>$q5~8o`azk^D-CECG zwx1iGl>Jx5Y`)+w&kgrjkUckCjb>-$j#IuZqv_{{M_rAi=aKS-x3avlx78M2wmNnz z#P7DM@}Ux-tIc;U%79mL^Z=Duql~VBFlANFI3U~GRqF~|Z@X%?adX?-qi#*7B)jK~ zu*$t3v-5;Yi*XJ>q2_MkDo*rmvK(yG`xM>Y9+90P)qZdf0q9;fGFEMmaqk#s7lle2 znERvZK;W2A2oqlqimiqW2t4s~;RY(ji~LghznXP#$A9I zcWdkMi?C?>7`B%F6StjkZ~J(azb}qwdSOrMKNn%__A%^6{U_{OFT(TfA3 zi!2BB(JRXI!bktPc=0QAwAidtlQ1;A%xLb5Q~ zUbW6eldJ8^*1cp%wf!3Jd)kY?v`2B^R!?5) zSDa1T>62dk%-qFZ;O)B=Ka*YT1)k3l_|tn755S+^qj&`V)E>nH@TVw#JYd$Wq6=6* zNxx@%z8TOb>2r6n2=IwM#R9M=`V@CRTrcyy)D zdVbhV|(mUW{jY%H>XdkETx==D90GaFO(~MnWM~!YO1KK z916aUuU%z;8~X*i}m8cUM%aj_Ez#&Uz(dXFvWP62bOBZ3Go*Jv(Wl2G9`u@z*aZ#VxWu<+4(^)m}E* zo^sVvig{puM}0R}$i|c(XS-KOfpRCRObAcde zw!eFhZ&1B|`G=&SUAGd~g>F3J?B$92 z$$`|?5|==1Za<-$W5StUKBdKdSywbiU%&PhD5JwD&j$LHt76ba%RNtKXFC;>W!&ef zmxcJ;`p**)9&HUW+dxmUWiA;GdYZBP4m&`t+^@W*Dsyu~&kMt1JKJilpgq|Br1~YL z0qpvk5D+{#=Q}hzi9h)fTS4dE?TZ zYd3Fv`3ikj!W%a)zj^)2mj#_(IV1n_Wss@o>lh4tS(vqgShjpQ3%Rb}y!7Qu^uc1z zyhaZ0KeFf70m8k@wi$q9f#a|cI78S5j+n^85fbShqgUr33H966NmCn``o-1LftOf{ zE4H1FS%PbaqK0RmQwlE=GrDRzX@X9xR+&>EDPBQ2ew1-5vNSgiHtQ zq;D7DEVS4|*3T5Gyg^Vsv!cL~J9DZaoFlR&!)UQ$hBSe6BQpHPMcC5|IKE$9u#&XKYI9Z}+mOU!nn?PKy4V$`o< zmNNYYd0WJIT)f*@(G>+%qJ`EKwHE?!bewC2fT3ok0KUt$&Z4-qsic0o3v!;_)+p9i zTCI1s);ULpY}=Eu#YM#+v^KykMru?QOulsk;Wy0O= zz^T&VzxT#iXwc9}@`#4AY7K8|s+}u6^UTGn0adkO9Vdf7BoZK{O;|mSDeHnk|ICll z!D11DfhiH|aSU_T9@I1#s>ViXB8}Hfdh#!p&qtEn)A?78Vc{cq84Fb^{+bQ3g@G;Se0ZhWQRg~J#GpjS{n;vjCg|e(li;|>n;?GH%zIqZB zMpEWJpVHxtPj${F$NsoRT%(x~?xUaqGJ>hdwbiO^8QPELukGPxy*(SL9ZyN8;8Utn zaJ1^}L`>~t-T7=vmxlt)Fv_sE1;}@S1C!#+ZqIgR;TZR1ca{Ybd$UdEO?D9Wl+rgQH!LsV=M~R{ux;+-t#$+CH#U|y_-=O{vMZ1H&CgwYf6kUXPDz(m zw(52}?rqm=y0@}&u`2tkHpRP+Je^%$?>9Uwvt_fryz7#1Qng0+L- zh-KhM9^kpq*Z?;=S{Up1zZSqV@x=Y0l}*lcrpuoW0-EIxr`FmEScKBb&eWyW+A=qz zu|LC366-+(j*TX_iZ=Yx(=6kjq+%X%)09QlT+xj1$<8YwG_=Kf_q}&O(-c(?RS0uE z{)XEeQi~(MUtT^I%oCsNoa>X<#Glqis(50*ic{w9n$PyBS=7}?^~T=y1vq5wuC+Yb zr&=V0##);h62e5=J%Op2Gy8$RM^QDqJ8-A;><`_v0mXvr8pJwWyHLrhS%shNCr?-w z+0XEQ4HL~~E){Hk7@Tq?&v1{e?XM2_CT{bY4%w-!w$R+q#CpBaAr=+gaG6Kgfu0pOCYI6A}iHuAFv z`c@zw=woYzfZed0HTHEdy83js|L57avS?3Iu^3`+W6Bd#-ah8fDKypF+XS%|2lzO5 z*;b&K5ryUU1o6I|qqdTY8OK;-#s!bE6#HF|tq|oMA49WON@dogzCGrVJCrtuCr zzMGUBgP&La)x~ZJ4 zbJEIm*%p^OG+5d?iANWMW$gTnP`G_Al1ElCqKNky>Pt=lx+a49ZLs;Jf;g~R5%ci` ztd>BdS)oCXi?|E==r}kU3DPl>FW{eLdV_kqD{Ik^p|iUp5azWNk)!?d9bFTlBC_6# zFe2_0xWGX&?K9g4eg}h6ob11o_db)Ic(pryCi_p3T$t>?hu3_(cX-=lvj0A1Oq2a* zc-PVNEnfoWuUh|!TT^<$ME`RcpYkm;I{++wLaz(@z3)*k<=rh z#9vaLoO%5x3CTxF-^u$peKC15HaSFM;=D&n zqr4I_>p`=D^SZ1^t)@xU#AYYHPxC%XONA`Qm8H z@-iNgC5(XRpa|`OizISO3{9kEtO7D}?!fhMkW7K66$%BS=wc%bd(Oess1GpJ!csd~ z6MF+6Kdv-sJ_=Apj5%9O10l{>w|t_B$U=R+4NbgRD*cQ3 z?H!je&D3*529A2lY9@A8>q;Pgw!QuCxw(luh({)LWennTgLAvHL2j};C7R17JN>9R z6^`hl9Qb3>exe(Mqe@zmY8O*eUFL~?Fj=?@jm_|gTkz4-Zyr*G?WHUPTSSd?#rNheDUfqmjo z?dFyRQd{L_k&VX_w=qy`$k21_Dhmek;jwFL>=&BWdm?eJZ63YC?w&J*WuQKGnX@YG z4i@e{UXU_(;s)wJvxTpjr$Ll5r?HA(dS`(PS2j4ddpNCT43P~)^Vakn>ii7~dXpFr zhb^u=6MWk%F>p)U;%EQXAwMo4dYkJlXG|-;xYP>o!Q7tr`<@}>N7ZOYhT;2D&GBFM zdh>kAm!Q{vpIcIzkBSxJsIc^o4~rj1BPyWT39#A$_1%>w>JC|DdJcx1sO`lZpm-$! zZza%p_(_2mkOBk=VWXG@$-J0FYM!1fTX+40#cRo9y!1(>d;o|54ISv?J)k#qo6sG{ zI|hV=juO0w5}`^D`-bVQpWAd9=muy!Q!>YmjaigZnfUsdNGNOG4VpTjx>5Hdmb;5k zT65E@sU3}1`lQjxi|H*d zrneK}U}{m30{O?>ZZ4&&xbg@sm6_}=23Wo80JOHXDgfJ#MiMv?y1%&INKI?h^QQHd zH?6n4X}yJ}^U~~=a!hdOoB*{@9RhdubZ^>;Q-OGgG@L;)p z4&*`sI~=qF&@g0vTG-euemAsrC7d|km2mpxUgwQ_93%EU6%9x?DEb|Pvh*0V#lq=S zxYz}Tp$MRjUROeA7i`=dtxI>s(Pcmq-W$Z3ws-HM=HVLJl6s@Pw9#B=)9zr~aYA$X zvFG&>2d9{3oSX2Cg$lp8;tA`k zu~_e?1-!BX+tt~r?o)8+BV-*bRlYDe-3G57{|SE(lWW;8tgg`Lzlb`Ki4-Ejw_=p;@%<5!9x! zQRc21sHHQJ(Ua?(iL)%zob#aFcBI6Nraucw;xcg}IGzkZiK&RyKC~&tK`A7<93&yZ zN5gUknaoBwfUQ=Nswhz^YSV;C*;|2&7@2p6|e&ztz(ttL}W3w&w<%sBI>Qhf-up+*-{oDFJn zbue<%U1|C|zU_P9E9uiYqqpKGPD!KleEyM@qG3+4xsgp7MHi&1qWRa3MZ&2{89c0T zfr}_{)w+)5M8hdfY3o~19$2)aRv+7a?Ti8*!q86`L|koq-+9jc#v`Y1+oB0mKCbs4 zuWM(PCp6c%biwD9FNlSN1zqFoQ#f?F_z_bvrevEV5qZ$B$I^@uWTLf?O=ehdosywQ znYY)2KpS4y>TYx8uXme7z0$6-2%(CZ8=RA?=M3vzv1%5_VqI2;DpRG7Q7*4v$YD}09|0ezkhtONmcO;{Hfw77(EXLsvHllca5Vm=i|s* zpK(m7o#WV<+&hl?UKmGSd&bezx;o?|d!nO5q@@lO2bnQXxF~p=I)9+vIC_b45>nF; zE5(r#XZ?c~(Qa&e#_ANVPjaF*_X69HGqevEH|jnEESXhRQ8?OMed$9HQYFLyzTUh6 zOAkW4Fha}>^m==JQ!Cz`l{#XH6Pr)Nm9TC&LbNF=7_7!UlFL7Ymc$YVtLa9lt95Vo zSdlTUkPs>lC0h47BqTC)v>h04faK9C#QP}hiVQ&}R5zM9Cwmp~y;ZaBT$q%`nk?yL z(nRcu#sXx0qxq=Znf{HH(M(cT)uL0tZRcD(7pmhT7JRDMrzlSn1~6Pp2B!( zkFyqJ2H?R@2TuTQDi@Dz_@oZWTXyywhZnI8lbA=`+!B?MWb-7Dnqc%4E^V}oX@EU> zYfYtHo}#qvxbi(a9Vxp5Y2R=S(?ivs#%2)&nvfkPW+?48$yd{kl>QnR4(BrQwt{NOK~Bq`1e>0uwYme6=Q26QXG5MCWSQ>b$TJREp3_B_?u<;$ zo}{gyn9R!}#yGn2q$tXCH$!@24js8kJ#pOe*pcptb2=@2*zj4Dr{rRc&+_gsCd!nD zjdJ^bOY%&2hmmQzd#6=g%UgHvNbl1-Pvx4YuEvx63jVx4Cxo@A^a2tn1tQWYo2V}~Vv}atF z2cwUgav>5y{aR*hXYACd51JP#f8GRVd_Jhc6$=A?%L$@(eC*s zwXrkn?oUO6!YKr8Ur|n4Z#_iCYJ=-I>ev|v>A|^M=NCysrb2aE>HL_hR>6>+#re+K zIU(nRtyNAXIqiw-Hg;%hfx7gSSoQKTGZ8g_6%Byn?)7>dte2}BC^Mf3>e6&KkG${dJaoGu51;=#A7IzFCiIItPB*L{#v)|D<#=^M@46?|E zVtAnNkwfyO`}Jnns_UbP(LOotRn9F&-%J6!OTkIJ@Gafj5W25QtQ6eVHV@q;a&OKs zq^U%Qv#67Q-ca}`*U)bGiq52AbW)wkCp7=ic*LQ`4c6IjVG)tTMQXTg!P?HN z!)$MJ^Km|AtM5=c2NXd-Y(-$@eUT8HXTj2xU5DhZdOl3HNltL&&23<*@t{$Bm%(w~ z{KhJU@@nWHzIa-!R%s=NKwBASIzoYMY=VyiM2E>VhcUhg>2t2g22tKrI^K6k^3#3i zB`_znoou^s$qEOnaL=`Hvf$G;Z0s#2qF4H`vG|T1(|D!!Y9}u~N&VgCw0Fc37<6wl zzR}tBaOh!4OgC@vQT-k}!sSKu4uNyN+ukgCpkeN_`;spJtLuK9V>qzFn&(jCwesnU zS{`GXFED2-l6!;fiY1lIqwyekfKiW@9%&^;F5SF*W#rPWOSeZZ&)u0DxqR`>*G4X1 zzs~FR`8y-?x30Z0a_h#OH%4xM?v0BdDsy?d1EL!u1$d70DFyN*-Y#ZFIAvIz%9H0i zvR_0Gv$}W>mW@%t-3BJ1Coj#taed+XW&DjV-kQ7hxdnoYzdp8t%8^O5YbX%|pQ&S- zf^qnvAG-X0#?=)1ueLHwDy}bQZbcg-`8=`;28R_cDA?nR;{Kh!gBy&T1{44_H8$uPAv$4s>fpHr_N*YW z^C=-2Q$L(WPDUsmLkU8c?l;cNAEz^G4sS8%ncI(7jR8*ImzEt-)RZLc?V;K_=p8yr zNXQR9Nm%@&_yfLB9jvAN@*=3%nSf0730_-sgoaj$Bso6*pw+BTyz)YJrsEU0+=mY! zY(&@cFlwRL_$2XRsn4RJPQ-lK!Ln`dyfoZg4z4Bj%EH3ZI_eVrdm-EN%l3}$m4Omo z$l?P@_#MJZNeT}@>UO}D0(^c(6GBGP7;wM!cIABK`(DUCRBrHGQRvN~sTZ=*3W%P1 z0T3#cW0mg*dGX2(FN7g-Z|UD`XQIAr%EJJFM-335vDDFO#b$7bX{(>J}kI5;-=1q=kk3~&p}F-flI z+!*l*OQ}3$jcQbwy;8;HY=b({XyS+64qgS9ccw4-(r0lz(wMD)$#3bUG(jFmI7XXS-rIFHv^)SbYP%)W*!ZRj7rq{#yDfukkPVzl=y6 z%oF`LOrw>tmW1>5^^gVXy1<0W2$i8M7c`~jy-FL1GvVdt)+U;5Hgo}!Z19k3_@w^f z6$Zm=zW@P_z1d#8ho2Sn`fBBz!U6;Ig~~Z0xqabKmz`a`V&$v} ztbbV}yukD{L8S}t!(e=bf15+oOC#iN+Mic0x7NlsD~htqTv*)HN?UJvm1MkNxHlCA z_}Gwc#nx4i^UcEW@+A|Bw>EqR3u_+JSwr;7o*#Ah)ofTGCBquXDsrMHQI}uI=K5p5 zIxAP~BB($4)o1>nuYUD6^Y1yo87lt^ah$DmWTwbIna|Va2VY0|?!&)sIwTxk@EPg$BZRqClp_?bhZ@P)w(%|jE z+v$Z53fN4R_p@o#4P5Zs-mKZ^q*vEIR2Lc0&8m^o1nSjV*OPzgDwJNm$_Uf&((2;S z(o%J42_q{0GL1&{u9lA>tRtr4bMpxHP$|%~5Qpok z&WLJxfw67wNX?7nW8gXMJ~YL z(ADl(`NV;Wb@XBEfWRe89JG}Ve2zt&Na!`(g&_B}=$q{C!XiQd*EACMqrFyZGso+N z$L?J0F>^ZFoAhEM2kmTva_oS#os-j8dGAZLK9{8_+QE zPNM;@Xf3t{FD$pQC2ex8o(|h$Zqm@_K2w)+SKJeI6Fg@nw>S zt<9ENA&T&moHi_*su8v}wOQhlU?t7*p-!nZG%kqHpxwMa>R$p!RBW4yWGryU=waKBGESKIbz@yU6C-;xg5RlV_Es-gB7mc?kZXxj0oR8 zeCDtG(;C{2SKJ%0Vpmcu<5(=+8cHpNUt&!gubf+F7I8aoxw=nI*0zw(ZrSLRO=`B* zBl~DCs}1nUp^6;oA#tR1kMpFB2G`w|kKavFO;|5uIX26EN+Agh9vhtP7B8ySq~zwF z`XpkX<|09ul3yso9trUg8drb4;7?`QtNpVCpsKgOE|q*}&?|!rXEs|c{5#hkSH>2` z@Ou~dEcWf0)n;3J_{!M%F%3I??92g5&=nSh^>X*vOS>jfI%?YdfYSCLQ^Z(PN9!y{1 z7{X6nb=tMnJ`q3MHrecoWXcSOV)N_VIKxts9~xH7*-Gd*=_l!|()Hv7x>3G1Z|qea zvCZMoJ@H%UDs<}$we_(H?L;iFT)q|ATG#&1dvtR8*h|yLc29&|yE%%$mfKR-KKIJi z6Sd_Yv2)w@*2C<1xhy@$T3pa`3|YQc_sc;Y<>`GUBFsB-;5Z}0RM+{;Y^cadDQ*t1MeGf9%%vj~b@ ziR*b^x@5^c3!dsO*da~sS*!=dBv0;Hq^G40iE__kC%OSFNLqUq>cM)xS=qD9SXV=P zX3R|UbD=`S8(cYE4|DMw>xDM7UsH4$W+UBtB^XvcMa3RPFFYQ<9d z_R8Fn94qK

wKX_X(hMxYZcYi-y7vEWq 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�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%0D(*w;s4#+2RcTNcOOA2oyOwXr##fK_kUJcJj-! zoW8|i2v47hpvA35ky-(zqyqBfTe*Te9E`4XSxAydR2z^t}J{((H_YC`oK*5Ea zu6LRtZH2A$;C=|i50BO=hXZ+ZEI1K(XEnb)n2M3LZEUVfUnw~ilj4ltrJ(GqScURg ztjN=rJ97d1*@j1FLww$z1=pmub_kT40_%%^`}FM-hmxfhL;8*5j%}OqYn}W!6OUPP z4<3)CUp&%R`9W9vZflMFn2I6Z&HiTu&ZPT<4{HHG#pu?6%o_q+UmN&6xaHLJ ze0pHtM<+>f`90y1P3`v-$YwLXFC1&K^xOJT>HlEvg9E9>=+3msdQ%{;#F;HMroA}! zPo}0{-#EVLJRHztjBc`(=Qgr;rcZYH&*$1iklkKV5b0|>A$44(;PFY*EJ??0QZ=NFxZt!7@ z4ej&AIK6n&uDPno6f<0Z@2=@{)9UB1^=dN31cspXua)0(T5~=N)Bl0)=q97j`U(YzS7u`pKW_bF*B*2v#FuXtY%Rs&qC>0}rC6no%~UFFu;@{VMMHw-mH;if8-eF|K{)vS&GPKai^) z0tFXjtOrA&lnv}LK4ru9jI&`|(AtDM<+VYL)4?YE#+-ZDT={1WyB-y|bNFUVPO$-; zH|GOZ0=_8P_`~=2hi`tj_g(QapK*Jj^c+Z=ymyR$Pn14(UKv=gFGg(9$7}IZ9KR`J zWa1cSz=o+jU(dLG3%21D81XfpBn5YJLxa;x615><`2Y zjs`fF>vZu`zc8e&;Ff;lD*?U~>-EV}^yw^q%xw=8?;Gsf>^aFFHvixlKYx=){wxJU zp!B+`Uw+Y*?X#GPtCIh{!uz~?)AK_Udf4!oz?s>TdNIH^@O=mrIdNHlGy24q z^CJSX`o9B2mR!N<5a0y2Wc3_hk})zi`~5+2aPPW{=v^B7?KnI32G%HIPN!I@&2JVH z^FyHEdT!RbJI=)q>HnbzyqnyO3JO6GP3{3TNy>zv6g{MOof zCbpbBAoEKB9t-vifl_o)0|7g>XHK8&AB_&Sh`ZcNclLbkxwVG>?OJhIJjXHn z0f%w}&sDQ;E_h*nm&6zw>12!d)otf3ocHq7TY)`W&EFSuQ8BZNeewhE3On07<0Ioo z@yZ|Z@7FwNVhtIdd(IM$#l(Jl>%15{GLCE0;~9v*g+Q+3nT_^d6tL6xe%WD+?Bzg? z*mr%fJFxdupzH|N0&~{O%O8uvsk~$}J=R?u$m_D#_@jbWzcuB9_LL8Gj_LozfSou$ z7SKb!9BO(0w!CAKC7+9T_WpS6Hr~GT$V0Mlwb}Ez;=vX=y)Te!T#V}OTp!1y=Cohh zboRe1Vr|7|NLv|ZUpL-4d)}O9ajP}B?PIquW5tR6TgC7vV%TOe6bo`Ti(%PP{_f1$ zilg?FzZJ)-BZyWfImN(jr6ylON{^2#5mn@ zmM%GeG!Rd+@GCFeo#rau^nvjm0bNs{KRkOE0(<3Wj_av$`VR%33yL+)nE2p;Tspl!l~4S}6PX8t_C7J*@7bL(d+?yF z1lxnPfM5I@0;T*^v&kOq3&z^oqrs5?hioF>{CrTkqE81K-8*j|pND+HwOnG;?HQK? zcuvZ?gT3H{njXa9Xr z`<#iXnqPGNPW(QQ8pm%;+gd)6%{Df(V>zIcpXPB=HWUYS{whxvvxYoAlUE#Bw;4xu z4(Of>>i(mHEIRwT^pU#|@WuT?*6qO^!FpgHzpLKN25adZ0);JuMhagJ1#~ENPFB*U zU%`z$Vsm|O&a*THvbh|;IeGi206t~ zw)h<5%%RC#3hr{E%Sdqz&&CZ7$vQORnz`v!yUOMSeL*;F8S@n=P zg}fT8dN7ev``s~gmn=NVo2m6f#&KfKnjui^W#14eo~u8*YlHLow9VIfRf`9{hCs3Y z=bH5^>9=v9OB_}cI5~n_dF%|-_$}l34XN#43(AM8*~s6D1;5!to*XjYcIVDUXKUPDu1=Dv+r2IhoeE|n!I#R@Rq;kF9^iJ92xYk2IlMC@cOjb zVJ*28AF{RO49>LKL|(P&Zc#ZQZtT7!poiV`@U6Yq#cnPre#>`0(t99K-j-*kxSR|U zni*&0D;qxVnCb8{vVu9bvUy|81v4M{3HYeCy5&R6mD*o+x-Wk|2C${QFY&2t=-GMt z-`cQs=Y0%!t-#$UGBuP(bh_vX{bz4O5SAyC9;H84K} zihXsSj;HOc&}*H&b*6e*_5mM1I^cKhDIF^rn-3Ix@WWkz5Bu1Plf8jB)j7n!T>tO8 zHezGn5GeAmU-yfftXs?4j}J}-V*E>4H>7@V@S=dP?K$_mt>te!?%(j&IG;}hAV&X&?a_HFOF>#nx{x#^3!oT`0yWFH^d zC-(Boe62I5Z(ePUT5hPFWpyZ<)$&;1_iELbjdhJLrOzho>3V%^`tslz`G*(3lndrh zg9qmSjeS{gG`J;rP4Jz;?*_~H;}p;P>$~py@!;$7hesZoA9&pwyf}D%{`Sfnf|urp zFK^8sQ2UgB+W2f0HRpZA=qH<;QT~g=d$LBJcyGKa^D4Agk@? z*v$Im80Wv|8XgtAT^T$!_@5!c{q?d-?>;wj5;t=ASJJ>6&az~7CXS@`Ifc!ey`wn0 zb*=8H@1waptryoJP=?vpyYC~m;cj=}o@d9t z0M~q1=#ks*CA?e14;=D=9yV#0Z8%v7b_C=Pf!xI3o`9}v1NzBZ3FvEe>mLp5X9L}3 zgPQ)0=lJyU0d9`pPy(Vg+FZV{aeVGb!=$) zIgvhDY^_{j|7xJ{(;nqmfLA`MH+w+Gh;_{Ila;tAzb#erUSva9TE<52e4 z+uB3UtpS^%onyz`7ISNvV>^B1EROB@)FsDU@q`QgDNfnSMsYF!(!|BNIvF@K%KttF#VSWe->P}Ex#8Q z{Hs8*-o5dT+#CF8zxT>M_B;EyD%m%t&0fXWdIPbkyd2V2oW0^me=%SW6Re#JRs%YQ zK#^DG<(2$e3+m2f6Whp~y3gpd)^q1rfH!NMV`pnQV6!#yVh9wrTj#Fb9V`X%u=hv& z`9Kdl>>~^B{7{D3*NrvRu6iYN_A2*HTiHbkdtx)_wr9J%M-G|yqwq@@L4$? z*u&4_LT<7dk7QgHToTwzKi;Nl_VxTst+SuK3xPc6A6;zVFHTE`xjJinV(U}$p2Gf( z9Nu}}BhqfMv+K8W=hBu}#edau8xQTh_F?JE#p17g;SXQrNv*G1-r|c6KCTBiueIb= zj*~M4%1S_=QhL}{agqyj0p4+Rw)Ix=DB1L`jWXHJH+C23vPKSg58>NFAjZ89d{uB} zPR_BHPv%;mWaoHE_AN%Yp{q4PPZQ*3o_F3$mi61`O``&ZlS0~2V$mUal!mn$C zdN1NDF6DIHm9@utGPf2?t*dxklzDN$uf1|aEciMEN{y>4W^JCh7Z(CPv-e0qUU8#u zFPWzTg>CYfZSqr_Ua*#&Ay9_d*Sp`D%+(p>hxM==oUIJ|hd@~g>{r@zQ+8}t%fXuC z+tfK>Yppq$_U>RlkgrN{G?hR0R^F+_nXR}|YA?B$2RK!x#w%~h0Qs?VY#&LD5Bt<& zcXMzeX!D3}I_#Gx^ezR~y*Q|OIeKNl=9>cVXX4~}!*{hgGU^$mcFxJtrl;P`cBgGW zKK2FsgYu)dz4r3Me)hd=TwglsUAJ=m_RJp&=!f#-Y;-x3rIWnUiH~#DCmy($NB+hs zzmEodcuv4Be)o3CS^iqf2Anvb;#oEBHgas^^N_h)gAa+occk7%aLVyuN5GDfOP*Z! z4CIs8mCws*i;Z^~u-BY1wRk%l&Hx+LWSe6X9ol5#j=Wkkq^+z6wMJc>i`7Cv7g_8i zn{OqYHB;Nw=iN0sr?0iaF0SWidDv zu*1H&!1`-~UyFQeuMFy}>9@~3abeFB14VpFz8H~j%sRjun_&o)_L;wZV`#>=T)?|p zjQFQ5*D4-trO!FrlUfdxt!2}YF{OOjoi<-fcGYZSv$7JfTcN|bDHvyqn2;$B#UCHd z%?EU7%d_4V{Qi3O+28(uD2DVEKHzQ$N^fr;9qg6=g?sM> zkG~NfS5uQQ1d1~rv+nUe-p61wdA~U!uj0X`+J|etLTl5?*!Q0JTam>^JPv_!(?&Jp z#$AjjKDPds4tZaE(I=LQaa^*;d|wx@>VpB<+G=^rp96uhTk?5P9-a)^@4+}{VkUO2 zJ~1_3I<-r_*pYeJI6s%V;;SZyTy1{aHyL(uYBSsAKA#R;)tH5pzN@=a^Uu~PXyLfOwBC>>fS#bD0I^Tq)e&(}!7 z54n6_3*4>byWf6$*Yy2n?sqarPW!&V7QPyH-zfZjS+FfI?_8JNV!%G8n0r{jPv=Iz z-et{u?>rDVXFHl0$Bfzgs5MY~oewc;_wwUIt;5^pfmqkrdfL{DFD{f}_I1O@ zcb$cg*2`t`af&~=q+fZ&Zk+wzIm#QdM_CCjnYA`#)4}fdr^cIjw)eK&luP{3-Vw+> zJb8YLw|CFE)b?77V}*_4w=dW~w)Jtq&h}36j#v^v`ub-=ZbhdNacywOyqin=) z@LlZyrdTiUPXu=c?#4aAbA!4M=hK!W*5SzSIFxZAt-%iKilv}pL%_Sz5E;k zWte@v`}t%otd8R=soAS+l|y)9BYP`{wCQVW{44}wPVSVw?Bn}=nM>@eSZqrh>K?l_ zogO`uhG7*TouLJqoaLZ$OC-hTP?=U;mKe*aR0eu zac{3&wq^(vaoZD!F)()p zt$>TI=G(bvHnQlzbKUj-x7~sF)xGrt;o!D^#*lMzLQd{XL%Y3mo{_%N#_|Jo2mV#` z_V&~nuXFN8;~MtW8TSrY&-4ClUy`{xC(iX&-&d{g4@{l!KkCj^o!>goKOEV(b$)UC z{Xy@`CuB_dU~v1T(c9Z|bY{&5)*kW1&!=cnvjicalgqwdzexs0*z zp#l4fQ)eHib$)tIH+#f3{N1vPdqwck;w_3W;=;)Ff;dwrl7!-X~SOwA8#UKHTH-B)>0x%`kU z;D7BWgAVT@P*o6xly9eZ~f0qzs)^u^*9PLd1lkNw2FX4Nu>;8-fKk@J@0p6kV!P#;~mGa*hzS?u~lj(~q z4(o0eAAND*%Vu%pTN}s4aXo#N6KZkm-|OlQ`HM50V|N96`Nr2TAN%xvu=svSbWibJ z+*W?dvEr5=e4aWF#@B*2@5Syf!_AOdSqZFbWB0uD<#!wNvH?H%`q-d&5>Iwle8hRH zm<^d%Dpr4WhFHm;-kwLyB-}Fx_e_kH-NoH<*09yRa5Sh~EZgfDB0pezh*#|) zqvY_@J~4;N)y--$7Xtg~kq^!RJN>?moTqa~KqvWeWp>W2sh@A-l&tz5&r;gt70eBR zGR(ei%#{p0Ed+eCr#{E3jqMHC;N73C6}MW;PHSwMUTZ5k+h#j9Y_g_&!_|AkRp}hYb*=0gv-a=Lg4fm-x;C>#96u1bcDD8$ zi9PHEu^Iw}-~Z5Xw35CUD~AJl?|zbReqTkNE{^?^sh0yeBDR$y;sJD#|BsQ6bNhxs znaUSy|LGiKaC`RjF(~_so60RVx?kPve3HkthJ8bzu;YIYZe+Fm z)_E~ja{4hg(%r`FG3mRvm2VlIyxYhqoXcG{WS=sn6Hj+_zVTycP&re-t93ME zOTlx3@;6&&>kg#0FMrD9^zXVmJJ#PAxFaf7?xf;qNLvxZ`Jm4+_Sww#&F;#}Gq*h` zo~`Y7B9%&*vgXJQjl?P}sdKcCV)97kO-OH}^JJyZsD4mTdR%R{=00h^%gQ_Dqn!dxJZKL6vlIAM=<&SS|^w`XujUol?$oPmXajb)Q(dd+)3A=^5& z94xy^&!LQ!%`0hF>`O*_rtI(eF1=-MKQA70=MazLfz6xQxGi)0g8hLuSX+Ci@_xrz z*szsOytF!ZrC(>-z5noFDIml6&B0m>yK(HNnthHOG*Z~;j>O+;pxhLQfjnt-@lQP7 z7Qx>87K75=j?wvB0U52m+U|L_$T9uWBOm!92gF*R520(8S0_@_Ngsaey^NfNpmNq6 z8I?CX(_RS7%SrR{^l)%0P{^XEy-PfctaCm}AC7RVKOd|I>^c-w?)r>Xa_#4162G+7N4m+C-=F*-oP5~?#~Hs2>2#{RwKy0%$M@r_>}=W+yQLGuYR39`A}zotg?|! z+V~j)MShdN5U|_#LskO5vAc9R({~2!!0TF2Yvg%7Klou^|L(#s@|`t2?;6`|0x@B0 zpX)x8_G5QsY&DnC68=!tZVsa7f#45 z8TK6y)W%K*abx!Rqj)#&J&!(n$zaoB(95xgo&ETQ&3MUra>nFr^~o;3+x>jhZ*AjC z5yI`d?U*MVRz zcy;ssy(|5_fwdJc+yh>X<3OC313uKV!a2J+@H_R+nlq!wCw|jaoV5S$fNZ|W&G`hE zp5n%ttT^JK@~r0ZXukLqEB@8kk+j)`5A|~b9BDgee9^9$wCnj;eypYK?DIn@8~q!A z*8U4)e{UOorHlV%8~OC}Q7ujf0=!+5n5?I+`$K-3Q!dV2<(Iwg2|BDH$A0;5J$oOX zpX0W&W_Q4ZoyH$HF-}*>SM!~0@%*d&o4yC8=8JLj_*WZOyMtQ)*!24Bqwhfz`uK5K zU>{jxPEM}s8IP?FapRjY`_%T*r@s)8!G|`sl`kj9c`+%y&Y?YZ-gc!;ZtEY;+5e%j z|HL>i7S`nRT}D*zT!Zdql>ke5T`T^D||8 z$Wc2#pTV3o?*d`vOqx^1l{7wFLZ?8kn41q%5&PE?D_)4!ktoE{HF=%D~!h~#b zCEwYQCv(9!WgU59%0_p$T8`A3SBz_RWz5=@agHr7YV;V#6FsdhH#TeRx2DbpKa9oA zS-p^&UOev3K6zlCJoTf3);{Zg@9*#V_o;t6eKzpZp3)^A`tB38JW=lnTABF#tjM6d z&S#x5>+Hc7JMr}VtTpzy;8dWYjT-+QpqbFAmHPfwGyLVK#er4B5|?rvxQO?D??28RP2^C?#8L@KH7n zX)7lJK5RB$`}sHoN{!h!C9~yyupx!r&RN;r+SqbBWQ|ffHnVGLk9^qG+$-#>98?bh zy?nu?`Ktpte_f!+iMq4xp{M;EKvD>s@r|9nAlhLS^vSx3B0&d#R`vQd&SnBS#i5B z>y~e4M%gOAk7d3;7dtXmIpU1m8xF6{zB+&O*Yg1{R|GhLLx~?9b>59xFF)skeZl^* zeOc=Hz+EU83+!76*iAmJ$s^~Q;GsD<`p&|0qrjS11egBeKRh zwWfXs;W=UdM^4N=a-939i8<%UzDppZxFZcB2rFriH?Rop`^p)a6 z&AvUcZ?oL;j%Ll?2_K5Hm5I5^pM4W^l|TC@<|=;dY>0!C!gIV ze5zczc{qUMA8K>O8NIC=n@?XZJTi8=x17@^qtE za?sj_JNd-U?LqCsi~Z^wgFc4x)7oQ!HN}@a;EQuh?}5O&?`+;7JY(b;{?>xhUC$wQ zJU95WK&%cXR^;QCF7n0h>WT5&Gk!;~-atOpvvEjUVP}mUO8b0+DZa-_zWbP+?k{%A z3qGsKlWY3?yfmnD%)V|s`XpIvz!|tRkju`9 zch>qIf%Q05Ub|79zH|8WxcD@TfBhbv}0v2InI+i$UgU+ zyi^x&&g>8<&gGzyG8GfHK7KqiQ{QWmdy9d)g-$uvKBsWNrs7X~eFVG6e?k-AA$^5i z{aLd1qtC$>oG5&!A0NfBwt_?X$KSlojB)!+Btzc5IHkdj|qGe_UfrRL$OZ_=f{>*xlN`+N|Ho_OhjT9U@2RZNk5?t?mJ_XAkt} zgRT35{Q-Z#I&$mXWJp_)3%xx!ULA8|D;sdPnGHKKS2oC5I2?$H_ttIE?A@GAc+ox^ zWZ7vsD{0fC90|y-G5T;=xqW%stxa;$8Mtorv)0Kqa`;y5qiN%m4t(*0?0Nr8H!guSPNwyr0EzXH}=^r_Z7_e&y6u!>~e7hlV7x1~_OLjzVYMY#@ zwL{uUYp=XGdKNa}V+blo$>`;ZIa`N7A^X@_$gaC>J?q=NpW>m-KRVht;+~yA*6l$n zZzcUcU*uGq19HUv3xflJlK)lb>7UKvdO2Vl`Sh^gJ-9m%ce&QvNryf1jO^zI?D397 z#-#z<@G1}6XGJ|fd%m6fehlZw&w_J$U^P&N+1I<@*Vw|2D+4yN{mwvcn*;XqS9xtv zKFd{SMLY_8z^8NYwvJEFL3v&K#Y8z06ldgU7fTaz?@(FKja|b*r@oDdbC!Zl+muC;VNxOvhp{1nib4I9LhTqL5*ov5MKLv=wK7jpVsg?Iq71{Iz>7OkZv& zf822IKH5ezf|F zclvS3hU0-;;jcC>%pD7Gdo*z890}x_TD;sbyMv{`IGL^A^_i&E&;K?i>7IU%rI)?M zwRZ9Ith8I;r0w6^HXRjH3BNyuY$o0hlx5iEe zim`g`_Tw+k+)Dy>umNXu0NM1|TQb`?w7S_SKJw5Wvb5KNvX33D+|BmSkNbRo`&4jE z@RZztL+bYi?OpI6a~HJzBVGRyU4K{CpX>U6o8OIW<^59E|N8X#DhCe)Vs~?=l+VoUitHw@&B9N&#~_< zzq|1_Wyv!yK5Q}fH~GD?8ppf&(n*ItSWnL*$KQ#oyl8p&`uq+QAIh#Y&s)liQQLo9 z`eZ4u%lh(>JhJF2J4!z;jms%@uJ&2&XHWWmr>b;3FzxTk|1-V%>7KXm5AWIk`1I+p zw$|bCJsD4RT6WFh>0ll@HP`F+d}oLEj^gR#^SelGJRg!iUrQ!^Z_GCvQk~9=Z+`E_ z9%Jq?h0oTuvOYiS$SQu!(a#@s<;cZj|FW@O9P8z=-ZR$w#`-~H%|?EZb1MHYdAju3 zvGXtP*?&O#&bRjpc04&yTd(|4{@?WWv&;Qt9G^dwar^wOf~!)q%|1G;WgGui0|gJp z9veJ$d^h^845T^BOWeEDPXzVe=RPtfZ37cZ&*y=%NzDc_YOLPZad0x=^HSih`^(@;K@9AZ$^-l?I4y<82Zmc~Li1p#%fg_y9M+IVXb-*vOel&hLr((l)9I|n5 zU~MmtKTnH4*0!Iut(BMbv8VVZ_e6jXYYqkr0bAL)9^hjL6n(I72$W&=bwdW*N>QaEPP8^Q~%Ypd|1Gz`v z{MfI&s5~P>9OPr0L-yd<+@XM-Fa*j7sZJh z*HGvF`n2g0OM2!4T$PRZzB#~iZ#!M$UeC#%UvXBB24xrf%g!^&#%n7Z$E$(T$B)fQ z>oY(3u|C2YK9rwnp7xVXeC+pMl`+5_&hUh@X9l<;zs?QWV)Leezl(u6ZRh$xVE@~j zym0Q90=liU|H@!@V7$(KyZ@0u8y81)f_-CKI&~CZ*IibJ?rH>VPa*3TS@5Wo*`mh?XvvhhUJY&53|JX#z<$>nD zV1K|apoa{4=sP^tz1}*%)+`2WcbC~qZaqiD+1!ahn{VwsX8n3V&JZZW?CXYa=Dk-~ zLq>bok!5}e6#k0GzJO0V0yfc)d*`a)p3PNq-a=p4tjq_ve`dJ%{Izcgl$$oH)4Z8`K)~1HOpTYTgN1->JPd)t2k}1;(ET~h`Ph~I zazO5pfKOssGRXm)!tEo>lZj`~355;T8dvk(J&d2-0d8>_H)ng;#TPZ3)z;KA%pUW` zDpqm^Dh71X^SVnme8X{ZE{02i_2rwn_TTBU-5PTEjR)tBR(f{@4-Zy@*930}lv*ne z$AYqhzs8mWcM~4ee8VlD_^PdtBk$xN8FN7!S94^vWA;|8*+|Apz?Ze4&H_6Mk4*bO zVEtDn{$feye87IZ_n zYcG5GfHQNAfjfczb!XT3^7E^_Q1DNm{A`{X+Z*tUzuJ6O-h822<;=6vcAm-NBYPG5 z?heT7^J|=6jx|O&0`IQwd2K$|R~+z{+$m7>9|-7{JNpB9W}o#qQUkx(iof0X!nd{L z)Yd6&MUIeRd?Pp!YzA`5zVpGY0Zw5G6#iT1Zda3!Q?>J_w!U{E&c}P+TK25tN*w;M zxVkN}Ys*gg#c%fiQRgcru5!y=ugDFtygu;U#lL)NEadUNfPdm^92ZL-j9DjMTS3?O zdm_ZeemN{>?23vqdnFuW52m1|G>Gs zDM_t;DqyGe;@aAMg(aNHjW-3~5`2H~Tfs*~(Zc~APsI7}4zz!9u2Wq+Lp@8Es-0_o z@rg|edm1}qY$gZKms^v&6_CqEKI58fHS~FFUfjoL&os}g6+H7*8D-T@_txIP8u#0$ z<}zR_J(azY_Eun>xy^u2=HHqIS=)2}zSQ>a3#tPb_UPL$Z08}>sjry(x1}bNeR7(<-9AHQdbRG+?qeT6-3^ypG#k z`6uo^6OeI7uqSYrHYWD!<3L+3$d~Pa9x|U3R2Ke?KQkD==N7+mLxwir`CV@5-XBzV z^H2=vz7(wMGkdxAc;>bOoQe0Tz;{GJHi_Tfk_ z$>;q69c;n@Zq(2iSuZx$o3|Ip62Hc1EA733_;udiozB9TpY>BbwdLN@uG({5=Gb#7 zKFX7|%e-Flhp(+*U9Of7@}_x>S~(o>SHVqfUdFfFit`J1h;z>sd)YU}bL@AWn%!fZ zpPD#t%=_s)7hGwp^=wPOyCMUp?6t4seJ0(PG2HGC ztYa&m<%B*Rt(`sg(S@r|*un1?4}OcGGhX`+4SNn}+&Q+UKBjq*U!P0qr?a;8%sNx- z@r>UJ*kdhT`KoBk1sr#bo)cMIe!VML=X)39FHem#cRU{O0q25y1A65yeF~nYfQ&l= zv4km5_*mWKvIqCZty7Hai=VRWv+@60%{=lRCaW_0S)R?fk{1VqBf-Z9w+H8gHw0f6 zd|mL4;JbtWJz&f6z#e=nrvm;NCl9~)TYh%EDPsqMLxKBoDQnr!l9k;{*?7T~Tv2{} z&1X6Km-?*5!&06xm;wdI_09OmU-Li=PS113tRK%P9oE<{hemFu^c8wG1N*Gq2+FN| zRqS8dJNo|m!T0gqYw7#tax0d&8{a7&4VR;BpFG%hO=RwyW&dH@w)FLE^p597ynZ84 z_$y!WJjQu>POiPz*PQ!-{Lc+G zg7I8jipwlt$y%Np@~dOCPtMk^);N`?6Ud}^-Toc4CGJR7*YT>Hj&th1}Os2d~P zkdGVsmF{gl`qq7;EHd^6WVo9Yd!13Sz%|*I@)aK&^ZJ9S=~(){E(SYshwHNe-tn*0 zr!#3ACtoqXTsQWe@z>5m)}8TlnFl^B&pO}vb0p|9@m*>EXz=5~zYjJd`>NoD0WO=L zeXh~zeP!fQuI%21?hr-bp8Y)wz*2 z8BYwfN1N$lJG->a(QC|}zY!?Tma#D(rt}ru;-mh#Tbob(*eOP1ygzn`_fGEt>+)+S z+4xz<5kJaJYrZ?@a{f~94){^X=5x6$FXMf>FY`FR9JyretGpaATl!Z|hM;_l>g1a2Jr_`%Z1Vls~>`m&cB`Kl;dL zd>PyAJ6f8d^DD?3gHIK+o}pdYusGgjD4CLP-3 z9tn;HWB{4$(5CO+;MIW~sNB|`)$F+?cu77xi}}?7z5E(;x;9v2fBV+?vpG*oeIRf@ zI%6LlyfiY;rG|0c4e85+P_!DyxjpP=kG11ibIZRY`W2bmAFz=fm8&fV_)*Fu4$R>N zXLuR8#=kXmfE+y*Yy`iMJJ4QdiCn-BTb&<1-WeaQIT&otV=r4XcGsG*PhT_k85t7~ z@tOkVu3(Hay?4)h`QLwEwf>K5n+N3W#w*|L7ngBAE|h;0F8JR5KTRKZWXcoVh#xMO zdc>c6`G#K@^N0Pf&)B|z?=O#U@(iD&e+SZ+U-+(#*}6Ih;_G>-e=2BPtrf2a0$gaj zH}(hSY7gDh+?OYKa374nn z-2KcQa-1AC@|BHpjgG%F=i2_X$!yN0`3V2;fgd)U49LO*S=}SA_673nvtmd6*Z=JF zo4d}-c0eCF>gHta`qJ1Xr`dINaQ$5K(^~muFNnofz`n{f?mNA5GoGgmzmIQnzp=*4 z*?^9n{5w1NS3B0(X{__3om0k@=CJsbufu8crS_PEG4}4r`qtRrvqS8&^kR&(w*&7c zxFT0PdxyDi6l>@(Z>_ri;U7QF_fGu0V&F#{*KvT~DNy*lv1(m-p0G_}TlX4Uo@M*Q ztM`dGT4T%{yV)xD{C+SUeCt@>C5$QbS=*n*o=UrC-MBmJ$*JAvWRc?>iWe@d-4{%O zQX7`BY;GOP8ghO+`Cc2zVh>pd1M|!M?qquT$41fz$5Vg7-2R5S zUdBzlmC7H_`@6GeoO@9^a^CQ%fIT?8K2R!SS-&xJ*7>fIzHzU6tM`~YhTY>DbNDj% z<|x+RJNK=ty`xRe(D=O#JDn4`I-Xx~6LUIm2|g$HRi8oD`MD+?;>J$7p_~lJJQIlR zcCh4?jmo%|erH{Ia6aqqS~}TMJNZk$IrpYHWj7z>8GcXCb@P$k_ZgTxden{ejcL#+VDYrjLI(94z^;o(%K!vXM_XDQD&%%Y8A;`{=b_smyh} zRVV(=JqrH*QGRD@!=7NtAAiKk9Q2It#G5rs&NeefPS3VGTkH-6WFHBR2F8FN?#Ata zJ=MLGE9Oc$u}{u;_mj)^lXEN}_g~KUxttO&=TZ*b5a=ttlWGGSaWmTZiu7L<)GjrB zQ=sUx!*@c8J0D;2i%lm2wpW*0e+raQt~MXK*51uv3Y5Mlvaxe`npLm%nL8ZNvCein z{wUgeMeMpW5Q}RAadvmHRSfyQFL+tNKkLnTZaFXZ-5+>v>36>0s~yZ3Zj^_D>aedm znn&`mW8$$tP~RR@_n0GeIivQmo2}}~5TA~du`$fiza2O;*7sT1GvB`al~XvlI=DW- z&)J~Qver|^6n%2XyM8Nua*WeKKikM+H~aX*m-7L?>C~6o^38q)7vvlXjt2HA^}D`Z zu3z-YPv>+B6!!?Q<3K>S_*Unhw1F*nRph|)SFH=av5}AJm#oI0xZ;MMM+@&m^m!lp z=(&wYvgviVSi=@;ZVd23zk9*Fb$rRSz1sI+YK3oS1N$}u^3P|{Evd<$0_Cm?)x~=T zzrAPorHw24aCvobEKq)Ez7yS<*QU<~I;~-|w!%(hYIdk`u9nMcYvl_W#>SZN9Y?1E zv13bPz$W%CKliiw_JIH9$L|2>GUhBdr_{B>`H`RO(e67BoAw8Ep9$}7Yx;C5hXdMiROXoJ58b`LVRo|KF->KDocsUe| zpC3Lkefb3Tl2JeLLe{coZ^x#zm1*_=_l|dd>9<(nYpL^e#@6KkImTP#w=gC@M$V@6 zm9Agb>+HdYVr_XK7aw%X;k)N{ZNZbaSo{53-0lm=Ft@CmgZ4~;Vr-c!-M7w8b8=(M z7j1cVAP{G|n=gCPzA=z@%5!oiw3{1zi-wy7)$D2d~aooJ?Dd412)0oU~k|)#4nkfbKPeUe(W=6?f$tf z4#vnC^K^VR;Y=Ah)P7#Dx|5Kpc6&wkU z2J{1d`J|0cc3)1u;%AwUY{dfOc;(Y#5IahmD7F~$7zlTE+V=FchXXNH8iR3cTyrFAg>3dUuX@ueNN9G#$o*g6H zQ3nEiIx`A=jfXKY@EpS5PBl4O0Xf}kZB$=;M&fV${83rucq{WG$NKh90X}d^wsI<9 z4_nptjXyi64SWq1t2jP0HDBb2JOcO9t8?Jl!q?hp&sH${BbPPhPm2hZmH{1`N>BhQ_hTbHD^5+>0zg{sV(=;2hR-nu|MdV*2gop72w~Pb-3Iq zXXO%ZtQCje1NY5iY?GI-8S>H^xpt|%B+oh+^OEmV(7eRq6#>4rJj`7e@EJeyNvY53w#Vn<>oQK(2yw9%FFq?O;>Xrg0S;dj&~5F5b4@2X z#`(NceLQpQ#ErXfBOsT)Zy1H?7 zFR}H;fS-K2FMn49d&QHiF<(&SyA9)FLMI-r1^VS!}0ycjB4Pbg;kgh1R|^z+2_dO78&d(ga72639P-;yEz{0ds(1upIDv_@F_-oWD}p& z%`tJ1x4V5_Y));=dza_R8E3QjXpiw3b6t#@Q0>VD3Bq>%$L=i8jb_`lq=*ocg*z!RgYjo&)dMpS$KB7XvY= z{baMR_P4*TUfN%~>D-Flaz_kmch7~-AL3`7Skq-4&@Jz9F}^Pw7bk1V6JK|_pRKz! zkb7`A5F0sczq{`CK>pxhC%FeQ#}Bq2362J0b7w%mc=mIY{`k9B{1TJKp#IahIgfur zY6ZXN1AdxkBObN_`iBW1lzYn0@_u1v&kDunwk8ukuhZa(YGj^gJUV&pz>Weh&rq zbv^xJz*jN2Hjp2eiUIj=4EW(ZF2oZq z>6Vk#ZBF~6gV)9xJc{WQD0cG*!96ZPUct!!ed*)(hJZii zU#yf<0ZvZ_JxAx##_9EeTsa#wf34Rxe|m27)qeZ<2l#4i8c*Zw>NqZs1Yf`l~Oo-+I2W-Ti%6P_2jUYsm{H=m5#gR}Ge_`CUHYY)Ep zz!vwIv3_^TpRs>i`h40KSj%V6Q((6_ejN+g{Zn}k*DiC_K`x!mTkZ1!8Mq)HkMiQy zz+MH9R|g{(#@Rv7XGIXM=wZj9z}|7a`}IWu`A-Sxwigd{izWT?(%vfqdhw;bTz@8G z>-1RL7?-PK86(HvNz<5#3B7D)Q}tTs?3r`6Y9G${OBNkJF>~x)GNM+W2k5JOf9KN; z=~q5qt@T-Ie=x4&hjr`nCBrKouGC059+2gIkli>_Ub6cCwU7Jy)Vo0(cAMX6j`-#c zT^}gVJ^B5L|B3LS@l}4xVb3U~adR%T*PSJKWd8QRxpM~Pqc(ZVv(V2Ia{k77jdd@{ zxp0Q)kkiKKBxfV&o#1?d9CnZStmL!UX5j8Ir#N%=({mxmFZ^zj^Kf;bF6g3%4CPe7 z4*TioJ?i}UZkau7JU4@WGU@5x?aq#aff{^A^Sb%j*k>Ub>>Ksbn7&;exk|^_z%I7RCvxiBPB!uFP=MPnn7MWD(ot?7t6a8|`-N-d@~yV*#Jh1a z>XT>t{(x=9%<)w%$4&&wwEF*ryf$yGT<)IZX&(sinN+-ZE;i;q?s~4+aC6Sp=cH~t z=o?X4{OK99?~1@!pBcx}-WN1}^ec_u;k4z;*}$1x=Ei2m#DsnI^{%uPIYn1xHJ6N? z33`_0@AZMR&tHDv#W=2TOg`P8O*c-+ zW-Gg_Bjcyntg~hc6uS7J@E3RH>n~2o!^ycB^f)`tCLQMFj(z-Qi+1l=ZELGXdv7q_ zC346-efV3(t!Mg{%zaTft$e&(NGJ#bdeOd86a*z&hv>9B=EV{ef;SGS=Q2hcToGrJfT}T8Hl0vn}PLY z;)lF`Hg(4K=?9IGIM-%5Y~J~l$K!cj_Hn?Uu3>Ne()R4JM*H;v-#jC`$DDJ*M)sF4 z=c@iXhkP=}R~+h(oSaBsnO6V5Fi+;~!979cif!Z2II^w2uUmJ0=E>qay>duRR_*ZY z*$UWXyz*+hy>|!X%hlR@SK5lP&f7o6S4|9KgE_{(13vxrx17k|E}KP5O9@JFnFXYMy<@){rV@f)L)oc6ykeLDC5{K$UQOU=^N8`kKjxh?@9Lu zJLDd}`G*VR?Dje9i*xvINzMK#P@IWJbD#WTZ03VKbZrFkt@%XP!GMi?IT~08%k#h= zchvqsA%|`J!k=P{EOGRFFehJ}ePh;b2UDON4%`_ES-8gia-H$x!3}|Rla`8Sf5u+5aWG?B@@AmRyW-*rRkUKPLkz{Bw8E^QAlJDeoIugLnIn&F#N8=Qd88 zo7TKN6pR5OY_2Fq~v-Q3HT(x@dd_%^*K6pp) z+rh)Z6D>}$o?pF-)%qRBOaD&ovuU%r5XT30h$Fwr;`ix5-nd&f1N?tP_&1J6eZTW) zZab*`S7g^mr4Qt&y(e^Rr<$E)x??NTU2-T;_-6i>Vw4#3SO2p#QrLu3d+!O>$-+U; z9ofr1Q8?iDy}^k<;hXa_1&X*=PC1gd&Nn;AnF8f-V1K#QmhaZ`O@B|&7^=zSubSNY z%QukEa4z7dpD(;1^;WPqsBCK$GU>T3;B)00(|%P@UzdJn>Y{CI;@c{BO{9ECK)z>z z+%R98&9Q+V?el?rGSBv+K8VRy;Qg>Z*vlt6nwRTzkVyxbk4A@h)m~iC#ZNNm#xuVv z^BHMx1=dZ0ayVe~ZgFHA`=S2gaeq)>H`A^Rx~(d+MoeiwB z=16cfxFWbVxG^xU|DAbf@OP!&nf6v7_i(^AHkAu8I1}InZ{pK->#dBj>k|UT z^7&|u(w|k^N1s^8N&4;&ddAsGjy3k`^G_VK9|{!v@#gQC6zA=revnB9`>i_{G(O`! zG-X_|Zl@U7izoX}1pKW}Q`(9(Q^3A*!e(busXx8Hjk8%@^xkn+o)nOEI^YW*_*Ogp zTvP1#1>$Vpx+zfbdV9bIe4m}$WR5vUUzg?Ie=Jj!}@WU=*)u~m$nOEKIIMjIcWb>}iR`uF97f4BiQio;LljvM#CAb+7!4dy?5r%oAr!!d?Vw}{k=!Z`xp6LS8}|QcJH@mtU8?C>iCLzT>g-0 zpL|q%S5Q0m>Zi=LJlA&))Yk{)n~om{r%(OmhadibfNumZ_k`PmGRZ-^SAxapZAVj%K^Uc zpX-BjebZd?%YJ&^l)p&292yh9|Cq~V)cJSQ$E$hehvs=YZVtNdwHbdx`o^C*j6Wyi zY&Pz*P1pZ=zCaq~zGTtglm61SAN}VS#>m2XWqoVL#lt(q(^HF+HI1#Gh3MCJyuU7c z=vVM({uAe#Ed8yyc1P%UUHxhPn}ZwYy80Uf+jz!^-020+!s?o zr}J<{;Jn~=3Y?*ir+IO`{29kjrEky4xz;9|UUpcE2gSJe0&~pRO^&tvw^lvM8Fh+X z-!<+_8~6JH`{}S(uCDH?xweNqW6DzAvfusUHR`Br?=8zY`rQ}SfOj+8;RILWWS`P^ zIey@eK6eS<F^sXNLDs*&#oQ z?YV8Oyn0>m^}#y=|1Ryx;6=gfgSQ7i9CUB%pUv2>1@zQ!_ni2N5gR?{@O3a?o3;Ap z#TVQUHw69cbz9neH+Lq$`RM@vVk<6WbieaU7vA;S`S#;vi~}1xuZ@2-ZrJ&+^KRLBewtVF$GZIiJB*L@I8U#&%RJ(v*!1oo zgYV6K{pN(4Ok;Fjj!b#A)G0sYE_wLhEqB>+DQ?S&TwTX4d&M1}?0IAO>>l##^T?O6 zp2aaHkJf+w?c_fj%!`3GUf82;kM{tvDbG{d<}1(ogF)}Bo${F9&e)%f-}cKTI3DZ| z<$Evfsdhd++vYT(XGr!IzvgssyJO}({t9@6-)^&C*?ZJUu65mIwue|(fKC96M zQ=pU&@s_7}x|HrQj(lt!M<1*6$D`ByG8Q}OD4(Mav8=pzM4modp>fqY~k4B#7vG?4K;BX-4JlBuTZO>pjej( z-kd#C#@-Xi?K^`X4aCiTiAOrvrLe7IxVa~|BiIP=a#v7Zj8|vJdf!z}-_@?m+P-JK zKkM2Q@hjWwBfjOj++z#>-2eT2FJGDmFH4&*`vPlj3h*PZ?ho)I=H!(d=k1mAIG^c} zXZDZ3r)-ZrFz$2Ofz`-9p?w$eCMHb3_U z=ADhkQ;y;8SfG5?{2p~a?Q=ons&V_4+rM(1&!bH=J7G-ugjQHj>MUckt=)~Ge_>( zfZpZ0WuHAtWsxH`^3GbeX_F}qy{9g9PmoJi?<73ousl^qIpA+|lWZL0?7QdZqJ1N` z_>=p}Ll>%5tb0G2xBp0RbZ(QWOk;JN$cin$jB_UPMlI@k{AXA2u~ zdMMZkx(-L|`PG3VYflCC9}LWwS3K#HFE^|cKeC-6HnZ=ULB8UBcwg!z-*{!0^D5Vz zZ@P?MxR*CpHp-t1{R{HN%Nl<6{Y8ySHmNs*%4QS$<(Z;yKikP*yE)@zH{XrbX7bo( z-kxQBYsRh&l;-oBE_5GpF3It%d`pt!melN+0!7ZSzvm8zI4#F`txszFikn#YOlzJG z#?9;7i+lDxK2Qz^)+l`EPkq-OIj#Ipj(oOMKO4)*IEDkV=;RyJAF}0W`Dxx%A5NV) z@_HBW?TK?v)<1Dr`eXgI0nW&u0);Fxra*Bfnjd($B3QTY)fvBG&Dv%D%S(Tb?{`y= z_^$L}9Qz;De#KzN+lKc4D0}{U>D`F0FAn6C_NhQV8gmwUzk6O9mnU*pyK}9rxhimW zzcOdny>L^Y$j6>V`Sj}Kt6Z0p;10}>c^=-My1DI4^sF38+gaKZIIley_Ohqvqw>^p zSn1p|(moLI%YL$)1#oWoyf2`09Re|KH**{U(ZbYQZZqN zy=pq>r$elbsl`F;8rPF)9}M{4y8@3uKhT{Yo2`8&l0&xqAeSsYFJ<9LoawW^xk2{t z%(+$@**T6+=__>6K^Gl#iPuusXt#f#9tZOOIrDmbvg8d}e6QWtrp*rb?x6sml`noz z4{G1lX|t0JHwR?;T%#sO{iL~;1N!2u7S|gCy2bq?^3rineg^&X`F#IPiT!uR?jH{R zeqfFD+wr{YC7Hc7O&dgP(Seox1bLIU&+H{i5272hHr+XT|%CUxQ zYuGmGv3Cl@1K;ZMEe_B%X|DFNMeND1Z&TU|*~V%^eH~@cBTuV`A7C%p?#jONU6(c) z_M2DZknXM#TYdg7_28;{_yYJ~BR;CrzU_dF7YFYS6l=yf(z)*Yf%6$BLmr41|J^V3 zUtXLG?hnZ4<0}KUvqdi9g#2}%YmATI4e+CTx}UG&OBb8@Nl$&i?Pg$}uU7}o3ww=& zbEvjo+nQy~7UzM#TY>47c)|C@nc_>d!V$ePxD4p?vPi9l)W<<7Cy$m3R@`N#fGCywGf zjxGPZk5~cU#fx11anJbYk#W{NZ0bI7?)dT?xj)2TJijjd$g{??x!FE>;`_AJTiQYA z=*COJyNc&%;{)+^?4Mub`)6isoxL5a?~lc=xBUVAV*A;EkNkU9&}W2vCZVWIz7v5W z-kU*fYri@Y`qlGqf9m?&xNl@k+jBwbI~*QHT)XIxbC0G?M>*5?)=Kx#T-xgF8+SVXiJ74 zp`RTv1qyxSEBw4})q3O}`AVmfUlm+^PG-yTK#nx_e34)Bq|Ys5Cj+tIU*-IK&@Fy!sh1KaG+7=Q37~$iS8=hL179MDUic`)aFlr7GtJ=R=3x6h@Xg6_3PP8b*4&aTG7-^KET^yxB(FS3y2!%3k`)85w{JAg6xbkoJ|q*?_(L!=?4c zMt;h(xyo)l>NEMHk4s`;21wdt_8s7!IQH@||s%H`&unDY_8;#S$^5Z7eND{&AHve`uD zM(|G~b4sn?#F%1D$mkng&w)+mHZO=UcxqKM8%O90^1b4U@ z?X0}!7W;ZW)~%zP4(o8xJZQ{1K4ng6yef-+C?D$A1mpq^*pxq3@d&$(Rfcx$UfR=~ z*gLErbuRUI&zZ7TVe3-Q*?D{;^{C%_2flm$%30&k7?9`wpHeH!Tw$BSE_?7Nrlb92 zSXYj5r2p?Dw`cRZ^!EqNf$g;A3_0$S-rI78uI3M!rvrYR3VPSxnznpX`tCcP8~V-! z)o&f04+Lyu2OacP7rXH&Cp$LYq0L=>u-)2`^D*Y-mw)aDKC!2HY`$_vF4?9yo8Bjs zlfiiZ=;NcgLMGsZKOl~3^0ddiF$VQS{g&Vxa&hDLZ$=m{ z_@h65E@OA^DY0bp6et~^R=o?l$Wi(^%d>LmaS6>k@80^$_>tAmp`FLg)j{>XVUW##XV{wBctzSh=i~Vyd(2yT*K>3} z?cL6h*zOC+Sa*KLcs71&`6Va5an6Y`2k^xn`N;n6(>@U>zOTW9wZ`QjEOYwGjE(-M z`v_kr11U@U*-bu_ANFXM8@k6khHd;(ZwB&3UM%&W&KNoNvi;;-v!7p6pwNR~HcWvs z@-eMOF7WvF@Hpya>ryX$^wLK*Sxfom%lDMF!jHYdrR3e4HRMi#GOhl9Aue>a-@0-w zV-wDe?Fr5XpAkG5$dhl1e^cuB1Xl;g0>#fC$Nn#*&j<5Y1U`e(-Tt>P*1tY|cE39K zu^-F7hm^Yhk2RavS6TYU7P9_Ze)eZgb-g+LK5N*h*zY`vm0}*ZYzBMDzGWfnBh!~3 zqpwfM*pxA49RDx*Ipo;?xkdkn(`SR{MfH7G#+LrQJY%&9moJ(7?xFh0)+yukc^=5$ z-cxG(ofBPARXW?;kenp;!5Z{M>rv{hQ}L9hJY-yO}w*MC^>#p>xt>S9!N&yOoO|I8 zeHU5Eso)8L`$XM$uzhoXO066YHdd`ax_geqzM}!(q3<}}XI>KH;b7X&4cwJq6#UuX zox%Pj+RK6mg0BnS5&YHQXM$f2{!Q?~+5gnwus#AWmNnh?+#}>IR*A%%xzx-fd zV{42pWcoQSS#+?YzIjfvWu1Q+euS)@{BTzI!5_Bv{MJ_e`bdv{(YuEo?7k{sH=fwZ zHhht95Bd6ZRlYvo#=bGK@s205)nt=JHd*3hZTITaqkk+A<4?_VZW)&;<7_3D4syxE zw> zH-X<3av#0F!5%iS=N|{n+uBo`<(@S^Gp}KvvmlRq#;-}c=i3Q|N4Ds#$z^`YQeq(v(+%NyWd)FRq{vW|>?RiFQS@K#A z#h*|7G0q1q;#FLs&z0@8mv_GBLiLf)KeFm0In5U~!fk=LF6BNaW9-@&*mEZ6GwfK}?0Z)} zSFE#vKJw_R-^bJLzOPxck8F9|=WUuR`>K;2e8bu38@u>1a)k%7*bS9Y&X&IQ*c1~-vdAz$%{3WfLB>uo;~QD_Hiq@j*ok?3 zQBVUhpKYPagJqI|IQ~bsoy=2oTp8BIN z`moH6j*WM%vF5j&qu(97Th7$~DeLHXtTxl#JYScGwRbb?nqM8;$p?4UZa%DwoBMP0 z;Zkv%vi`}7Jw0z58CS?K*3XiM(%u^==IFz*vaWCMxxh!%?md$B(ZD|7i{E?ju7yWq z?s)OBPp-HN*ZmHn@&3+i<+Eu|FzPv*K0D-I-$T5&JvHFl^?@9GUf}cH`QVF#pAUXN zcxsH=4sHrQHh6w;S8y(PL-3~Hn}Tl-=wbt&c4}{Ajz0Vx3$pETKbFrLxNt^{<3nHR zTKvcz-1K?o`Nm(mjA<+O@VPl>OpJ^@Gq^IqnRBucR7dsWz+P)M18aJg*d?;SbX-u-XPJZ?WFP~H-V z)zfuS-W*&R)K~f&kNs&Y4xSmXiw$y6jRPQijFWZO%yZ?R|0Abc zbKhF><*>qbvA8ba(`b|2QO2>_X%9JUsh!%r*YK#%2J@rrWj-}m=o#a-^wGRHT^)$0 z^4s}d_vX}irsqtsT=UNsYZ|AyG3(pDI!uHxE_t;e3;;@eYK8M(an;(x(GVcqT zXU4m3olbsj1awu0Jh(Do(^Y}_+EiQW$G*(rp#61zbkCC8-S%9r@AQv8(m(pNTWr_q zr+2qK^ zZoU7L!B_hp3>5qMy_DZ|Y?6NpJ#s`L-=6V#+V@B@<=JjB&3m5FO^00V^G$y2HlUpn*;H^FCbfd<*LGVHnPthupM-dvu>a7?akc~uvIw|*w=ix zHtiAbul%SVe0xp6w%Y<+H7D?JdhU0QKVr=vvGV;EUc`P16!te4w0j1~-XClPI4CE} z7%ubfW3yH%r>D{;mws{-bMDphDi-9E-T1QU{=hzbi$65JIN$f%KjL+R8zU+Bsz)yC{0r8MyxFM%Gqi>H~I~b5-EiM&2nA}LE1U)G zFB`@>_h{>gxR_IH#btHAzs?zZM~EF><=iU*F&Oz`gZRtO=AD@D3*@cmys}(ly)}&? z4!gf|@~(05{I#Awa@}7_d1yYl+nfh$<>VBQ!4J0cgMFUQe?G}{OKLKwK)EZhR-RbP z7Jc^VADH`l=02GtM+ehadY0%u9bAg1E3<|yeryM$?&_*7?USjf>wo{u_`ZzQXY)Ph z^n7^0zQ)PkV*&lo9zMT1Yc~Y+Dm@?dNABSXoU!s;`<&a68)t=%HwI$pyB_^F&9!*z zza=2E{u;xF`TDf3zg&N*zL?$<)ULBbJI#wR z4A^V#u6$Si=kmGpI|6+&>7-j;?IuGEar9TSSFSV%``maiV~RCov*B=n-}bc+269<$ z9Sz6@bK+x<{1Z!KQ=k~PuKTP}*blh(`xX2+6WkDJEBNjH_SwgW?Vy}j_njFte{JAd zLAHD8X~DkWWkKbcyD7j)eQ-A9CVMM0&5M8U8GGoqzINm7bU?oS`p*i;=IdQSWt9W+ zq0f+inf4NVSdKl~J{@evNo^a?@!!cf8}V*U?VDv)cXUmv`~(MOL;h;ZYrfqQd~5F5@qG5axI1$%i&A`jRPdCb>zp<3 z9X$&-q)j)u>(;y|}4aFd{Be^Z1jwPbHS|vK41zI zXVJZjNBi)ID}C$q+0(eEdGYh9`DX>=*~Y)SVEo;x+H@@A=6`3+cZQy0-xiMDC%sF` zaqlK`eC|Bow*x#?_TP+b&kQ;{_QQidypVBk@TveWP_BB1;;Q$qF&vP4bwIB2EoS5_%&&y$T#bc1V;mVz#4XdSlk%M7505$^gG+~ zY%^dR{r2#U&hZS?E_2r5dtV0=>0}4Lz`u>`` zZjiMvZ8<2mmG2z$<-R~{*y1c43FL`ffId&$|IQ3q2ZPrJUmE;c@b7{>S^UR>rw8{0 z_XU0)`BlNU2HzX}_23@{zZCqt;CF-kw>od0W z1Gy@1`6g~;;>aGck$27&JB*t*&X(Fn2l;Aw(05?^E0?~mcQ(4d{QY6RW60soT&vL{X_lr4P;F(Wq#W?=91AcWaF65k=Ecz6@R=;@Qq5AFLO&{CO z1@{NuH^e|0Z7~1EfjlVZ@}Y6y!{NYQywFcC|JlmE`e(lVLupr@9I^*@?9 zav`Q8f9+TQ+ZHm}x+f4X??~EYk!?&q8KVbJ#?<&|T*(;w>>ST+x)<*+bMp0UAP+`v zFE+R^?xz8=e-%jKAUT$OYBo9AS#%h}y*UhY|Uw{`!zxzYcgc{bn=M~!Li zt*o)npPginzKyY?w{bm__EM)lOo8GoO&TfHz3v=VUt>r{@0IFXa(1b^X_+f>a&K@X zI2y=nD1ZEP2KuhgmU7v9BSWiugfIMGj=OK|V}I{TXNeDDgO85WCkFOBBiOg-7rd*o4fb=ixjjX=RUo9S1(N5pT8>mSwiKI7n6d~wC* z##(&DPkhD2dkTd>(xpBITHy#nD-ow9G=cN zUvTN{;OfCZd0LQb=whtg!DjiY;B@*AH$e`&79$XYl4nvB08VDpm$Hqu|PP1}Ao zxiSEnKdK7%JS$>VN{O|EuL>`M>W5f>j@Kub) zGvgf)Z++$+PrGrjP7L|!9@(3Ee?Yc%Vul|)nN#HK#tgsv>(7#rzvMv1>nrD}h|@nQ_KX2kwxQfpeno&TyXEb|;WKo~g6xv!Q2+thW2Co-*ca zf&1&g(5J8duu)lOJKx!Et#!v}Cj#@@U>$vI#i6*mSCoeW zy4j0^SIm8D^gnCvvr*sgUa_G$V4r)7U*hfl6bE+GDPOh&zP>3?JU5gF1G4nT=N@}D zg5!a`WRu0GkiKIJN3z7TV-m4`{UMtzi>EUGrRsEK8j0i*-7`kS+k4_KD)0z zWoQ+j+Jg_Av;TBJ*QvmG{ad#6uL*FtPG^Q!GJ9^>QJK!nQr@V?9GPN#AYi{-Q^+8b z40ZRleJo?R{s;NHJ;e6DfSu0G6o`eG$OnbL_L9p+a@9cgQikyp0l&#%o3c(0`)i+l zbm-T{Z(Cy{-^F5F=kH5d+96hrU+sKO#@wxZ?OCPQS~VNpsrvkEo~C*6z7Tu<;hTT_ zRM>l7u94Sl!YS_Pe|(_ej(+;o)iuV~_%zSkyAdd3Y{(sD zl?yeQY^Xm|+6sR=hZ}wJajlH<&9QOZqdoS?po0v)DwiXpHY{baeUwE%KfM>anRk2V zd#rPE?1})F%RH~0Q|9DTW6|~EWFJ3jtMl$`ZUDsS|A%6MhVk*+(KcH=U} zxj94r*q+jNR%&CK7tfV-@}6Gt5i>H^<&3d0hnDT0HRq46%dv6Fx@+e3&E=l?%dxFC zth+nPY1iOIyLNhJ?q=tbL+=tJha>m$V_kg3O-`^y-1Y{~3Vb&0{ZqfmAYYu11V;mN z&^$LUpVjYA&~Y;G{`BHNJ}B}5x68kShadK^fscI`GuFFBjcaS=g0vX|ZU&6qtSnoBq+7xhmZ?+oOPz0P3ukt@&fy)STPvsTj%Zbr0vi1kovIVyzM`zN%A>a?+tg&a5fqNYCt2~i+Irif~VYhR6BEnyunk?Uk z)7x?JGyc-x)xisca{)a#R@lMMV*wld+gfaH|F5O*Y_THoiKH2p0OBw%d2fy=jAiyKeY6JZW z8^~aT8mHd3lsf*M}wP# zPYhlV*z=m;ZNc9TeknK;GF}w;GxVBgu~)RMb59z(BX}V88nfQM)4}EJ z`@DHy?LV1)qg}_+r{kM*ZbqN@ovmx_CyR{B;bYXxUVMlh`AYezKI=PH+wR@LHe4*% zzI3s6hu8wjchK)6!+pqqQTgYVVp1?bWv#3p$b8f70D^JGEk?qcr2cy1mjJNsEA}l2=g5|8BcJWF_sZZ%a5NAvC{KKo zPkmpd-(I?EW11J=3;4VoZ*K6r`N`ME2e`pO$LW(J_B&$Ef<;glc;eidch28pMa4xvi`x+Vc;y`Vm z{eZ{*4kli22-vUC+dXRNdhyu~ra-Cf+RJ@?Kiii%GNwTJK-kk*;1Je5H@xqO!QH|A z!Pf=v3T{sT-yD2j@U#T>XM=wp{9f=uNth1{o*mp4yejyjfDXK5%c^}cwfq6+MegCS zXGaXhO+4gz@0vc3#i(cHnzZ)?&IP&pV%;;#hbsf6&rWAD=3a~y`)bqW*dy0Y1wEhY zf_{Egf5+8q_Ri100|C2?)4!ANOI`ZC@A$1>UfMSX%QJLU#^}N=8*tk@$$A{RYtrY#6tI==!x#W{s`IWbw zv1LxsC%64P{c9rR10Ao3FCXYWjP{Fb&z;(HfXD$f8=dpkG4JkI#3?D=c<*@a(*4`$ASI7 zIJcbx_Y4kxHc-eM&)(&7@v+%=DZkgvv&&t}uD=qD@w}jW@5*m$MlP>Jmf0{YzL=G_(UkEIR&|L@ZL(fmCkxzjv2koKkW;KS!Nr&GK0<&5XR zvTv-A5Ax+iAV<`4QLa2GV1wtDJfmOVI&F6lIpdx_r_Z8&!+f8mecrug zhrcWLO!o9S+qL(tSxd)lf%DYo{&w1)ea{KlNIzM?PJ7hswnv}MeLqO^;=2)h`7Abg zQeP3UuQK?I|H>)fwSS#G*3{nmcXW+^)`^=q9S``@cMTk~sd3;#<6zER=()jOwz1K8 zV^F*9%NQMG^Y6~!L_n_hdR#7l&Ow%(Xsqqyhw__ienxNp`T!@-3i^4(ezqAOW&HFY z<0CV-6^L==$XA^3mp|o*oW55+CGGlD+ukwA^_|&PK(1VWe9)h9c^coWz@^CAE)XTgen?CEE zch5XyrvrPJ&&qYryXDxUdAF#qbjvZNcH_AA;nAAf+A|}r=YlCva6INJe)b3Uch8}; z`Nn54lPmnSmu_6SSGR-mXPr6qgMlLc?2~iGj|XJS2ePeG9}DCJS=PNF;M>7q9B*Fj z&G^}Xzvg|v@SRUx|NVlsqkeoeAJbgrSv!>t+iA1u2?2dL`p@|Xh1u** z>G@NWU)w(+_R-63d#6AlS8P5e_^v4Oyn1J9+};xMaQm*Iznkr3e0SD9JGJ)rq%GdB zh#d0ds<@pG?hRfQygIC&uF!GQMGqnwRdIp)?AC7{=T{1Ki3E5`rus4 zaqDiF>%((>WUi0Swb)vB<6J*&u5X&_kDBYJ&-F9r`uJSmJlD^hYq2L!%+=oU)pAlT zrfTt3f9za;++2VBTzfv5_dSMsn(GsD{fTpZa;{I!_361jGuOAx^>gO>_PKuUTz}GB zKX0x-d9I&7*Pk-iFPQ63o$F7V>le=T9drGnxqk6ndw*vCOXvE|xt7Pq@0#mRpKCd8 z{O-Aa`CNbITz}SFfA(BE3)bH=*RPoC&zWmy$Gp2w?cAuH9d*x-HvFl%_H5F>Z>~Rg zu0LIKi7YHu3tCTUoh8SIM-h^*Z0r$>*xB5=lTtE{Uvk#rE~2aksV()*KeHb zFQ4l-&GmzG{S|Zl=DB{$Tz}G}m80 z*WZx(>OlG6;EBN>53UI|=lX-@+PraV)Lo|yPnv6Yh`zf+?aolUE7a}?_10YPo9hE} z?G7-1c&?Am^^J3V(_BA&u8+_4Gw0eFw%^%RJF{wMRqc$br@8*bxjr@5&Y=0{%=L5U z`gwEx{JDO?Tz}eJ-!a$Dkp0e%+L=*1D{5y%{h4$9*>io*Tss5i&&~C{bN%YMe$8Be z?p(iiuK)C0%VGQFu3FBj<*Hhas=sWmzkIGAoNGB~{wwGDtLOTybNy%L`s?QUp}GEs zxqkaxfAd`b`MLhqx&HRK{tI*copb$NbN#Nl{+_vh_gsJfT>rpa|KMEz<+=W$x&Etj z{UdYz*XH`K&-G8t^-s?A-t&K{s(jYkLLR4=K2@r z`j_VVm*@Id=K5FX`q$?ApU?Gg%=N#T>))K~e>2y=J=gz!uK&Ya|EIbB-MN0xT>su& z|NdP6x4HJBc}?1T=6dg3Upd#CbNxYc{lRnn#JT?CbA8QRKWVP7ooheWA^*eX`XlE0 zBjf5+ayL&v}4+VRJ<(?O3 zjBVwH-F(9luE^2HtM=VN|DH)}?fZ~`KWwf}?+olW&(A9ZHrw;Z1M80m?82FME?iv| z;A?3o-8Tm0?Fs%~cx=q*Wh33>D%-)UgT~{JrCr;|H$TRMU2J)LP`Q;y2F~eKc9PS) z>ioz-$Glt7t?%#Opv(J{b2Hi~X80S|mH+-M6`%I=C)?l0UtByfsP5WxHe)>}_oU5t zIj{CEL-&E;(*y5f@M`=DHH}Nh9YTt>p_XXsQ<7d*}EymlKXZNwd-rpF`K3~aP=0=8A@wBh{>9JN$ zH^$?9?c)>sZV&iI=a~2DUX*DK`>e-rc^0$Ac}iQER{wvmY~9A2o{f3F_EvV+th3A5 zC(QfK4ejPU&h`ZPxV`$GMC?2EGZ|~2kAE?JGUWY(!7ahNbEi+K-xGXDfUoY~pY{0H zxBt5I|HRP$-TBWZbpFTE?|$pQH+|0{wsy^f!zjd2)O_n~t z#=7f_fqeEHV~-;5?fIDC`{MH*slOviN6xj!SbSvq&Y(D%(|1qlizgoy@zL&B*It>i z?SKvT@g>=K}NY;C1uORdU77nJ43&0Y2=(8y=N^k~o={pSYl7C%^8=+)jSI zICK1`7hi3YMQ80czMI|UCCgSh_x<6YeZRSJ!9I6Gnyc>~arDu_U&|E-rFFjlMyEB*q`hQ@y(LF+*{lAn3JNM0f&&}rt<=_76 z0=7C!pC0gs?3019+W%>3+cyP@II&f3-4nQfy|bK6{j#7kyPxmt{I`yc3jgJOC|s59 zWf$F@t9)mh4Q%aN{oVACT|IbGx?leB-!q&|M}nh)J-yGxu6BqwzjyLYY{?Oy|26Ts zB{ln|K)EZhh8?3W`sjIHpv^w}oFl8Pcg7Ssb}DfHSSQ!ngO4B1;kR~QK%TpREk77r z=yl%77iV|Z6e!07IgSha$tQD^e|P#X4cPTypvW8R$%83SMtOVFKNomrvx(i^!)7s{ zYhN(h)H@}^7oRUZ3-#q}=CsLE?71=Eqp|NveqNiJA8eqTpKN+cVBDVC(Pufic$Mqg z?jL*f=_7v`KR%GP9gOm-Z(QH!|3_slo2++M?Z?B_fwOvjK(BGOTIWuZ1J;R!G3Q>a z>Bcczl+KOqY+vnl4soP3zkANavNo-|$N0a~IWAZ1Wd}K8ygy*`O9M8_2l};d3HZAi z@Ygw)Z^mj99{EddZM!mUI_?k15mUCE3almfe|zeC*Oy;;Rv8^@-+nxnllp0Vyhn_S zBRze-j(eV-afMvxvU06|iHUg6|Hg`6m1TC6#YUxTD$^KS`T3XE_&Gk0F2_$cR__=` zIXVSO$DIXyvxyH=p!D2Sj`Jd>xbm!$^UVu+D~9_5@#Fta>*S#vh=^5j7yE4VmedjR zxUIll_gBKhy{Vn|`u`1Si~0UQUiEV-8Anm;3J#2r^<+vBmKeXU^w5fN)wOLmm zm$^T#DR;-R9{2xYcrUUJFXD#lb^DsL2X_C`lU zFUUnvtTEWJ8+%PpENgl;*_1WiB&HWrOf_}0X`7hdO!fbKU(SQWWae^Nv&sHH>wG+( z-!tdTnKS2{nfbl%y?}6P=Tc$xIcs(n^$p!#;{4k;_~fy#7DkVA0bScc_g2Z$cmB(T zQ=d{h{Uq~P4c+Rs`rWh?-;m);h5JhnKbhC_Fz@n2maf5iaOw+AJ+KyPxK-o)S-|7G zt^uLPe(4#$=&@Og#1dN`%QJ+3@S1#A$)<^j0}Y>`14ZvpEpv{2O`CAE_!tp&2vH9& z5MiGhJVkV=s7*wD(CBX!`AnFhXZAn3_%v8_r3ibBgVQ#ge;a;pm_2)fXcYoAY~bq# zoj%Q&u@{LEaokJ9z8EE_B73FwjO=V#oD-Qu?u07vDYRxi7hdurR%Uw`p7x) zr_cGGtLKiu_yHayvJPiEeT-*L8ZznzU)G5@b678O;zsVNA=bga4?jU1-y9?R$Gr9{ zuido1*kikkMu?b$`I%#i=-*ZU%*|Y@w7@IHsVn@>bsydW-FI$*?z_6sP1hxtHoo`c zuYcF{a6OL{Z7oXm9Z%w%>dzLYuQW#88}~GMVc$8QJo`@c+_Tg-OyoPil#l%-w?46V z99{y2&5I5pUd|3-;@{2^L zh{zLb?J1&_^tdaC4|@1aLyt3!af?JZi8@5&vbTu2rik97dT0Kb(dWI&UU+ZFh(G$+ zSfW6(Zt*Eh!ZQ;!TR5)^>g>(L#xQ2HK}d<884z% zu(eL){m0n%Yb>$oC8FIavLDnw<9Wa8D~|0&BKjHoi28XyLgu`9Ztknv+|({>sLk6c z8RHKZF((b5h#mG_KiKCxX6$)w#E7$=^EzKQGGam_R`!oN^LWR`F|dzHMKd<6`vaPj zu|9jLU*b1VWSi6#{nR!6*hfaaj1y6N9#fMMBd?XXvo89mjhBnaf4hkGTh#@2!1&6~ zDX1&sZwpTsrg?37Ec18~iypND@%AP%G%*oBOCu z`lgF$tQlK0>XAl$vA!9>eZJ7gS&*JVj3wsiLY*R?Rrt-A%S5b?+Mywz)8m==zDO9m zp3i3q>msM=cmIBu?T9h#Wv{`0fMtH8U-;lya<;f0^ti=qWnQ0o_`6K>OHo(;mwxt_ z`mf>5HTXQoZhjY1N91jSh_$6TLf0`vhkS#{HJm*+DsXA6^ShD|&oB@9CK+iUbHN={|KR9DJFJ_5`iB^gFinya* zAVM#_N3dTS!+iM|&s7^UxG+ZU6n!I?tdV-RJ?8Woh%Nf3Yr&i|)YBBv2jeV#RKdhH zYh*88Bh0?NSj0Xh&YVN(_(O$R12JxhXiG%QMeIGdePZ6FNk3;Q_ZMe8XDKqySo}oy z1W~KVwYWmh+#$bH9y`QK=O=zb>qPiXe$i$B<15W)n&&x2eayq2alN4XRn0>T$T2mf zkTm~oXVy()Jh|3?&AmkZx|YyoeT*e;Pw0U@hAP?xU4(jhL5%sF2J?(XvH`Gr<7eDyiOvC5tB4U#3qIZZ0e;Xp! zO$=v<@SiywB3h&Q{|)lFdL}2tjQH^T?X-075_9H!qkLtaheX&LDngyH&dbfALw$}@ zKl4+^yu;lfPU|aj4O<5vM~KLwW!@k8cw$Ko9@XURoezsUR(uD&qxy!4s3Y?3TEcdV z{6jabrCpO8u)egG2)*M%OntUF4%itfa(#P`Fb8WoR^&WWJLq2~V*d;hvDdImJeLJ$ zO&`&kSO@cPCeTCgq0>vmdR${`^h|=$+lB&AYZbY^ zyQ)3*kZW%TJ-ha(L))YNs1fd3S}MaoWK6rcdgL7ozg>@d+&Bm0+4t<9(IUT7=yBuT zJw?y>(k9Y!n>G6x#nI>64E5nZ?|SZ=sb_p_7cmE)16UV(n|&}#G+Tro-0RWf#(D6W zer)qQsKgszeHU}?(VP$T@sar!i5Sbe_70Ap#GN^bUFqKB{AS!b5%=a1BAKPmJ zM10PrpP#`||E!JYeZ}#Y-yK8`dmcYf&y2@zUlD%VH~czWwLxfj5^%Yflv`oZXdd4{k9#x9t7z|0HA4={d#@e_>SVAcUjo1C_zu&AARgc_x)V4 zP3L_q!>`Toi-lPu`;Hn-$1ah~@fs6zP^;6_&tBtm`b6ACsXizludd>FzaNr+a?3tYS~tEY5+~+@GavI~+diPn7-Z;ptjBPMcnrBm z&c9bMMf`Ibh_9@1xfEF=d9W{D8#W-<966sGeO@PZN^PWsKaBId{7x71F&>}jXU&hO z-}eA>q~C}16Q;2@m`kbH_*sRT#OIkJ=EtUeoS7!hm3FRzF7 zdOq))Z>f(l^ka`W5hMHDOV7w?u0_k3du~&*VJzz$BLDDUL)i^`+tTCVjl*D#TN z{&m%;{ zA?+93*q_^RypNSmt4L;=wZ@+2{5o00_q%Cs=BbZ3vkv00Oyu9wWj!lI#7WC())_X5 zE9>W(Iqw#+&xr3Dk#$&WE>G>Vwt=E0q7G4>8+>AK;nzA5al$rt)R*NDwmI`?tQSA2 zfz%dtMSV0xv^Ejz8ZDw$8O|8z0E|9FUdb7`N&E51{kDS*8g{5D+6)o%dtLUAnBsf7 z&(LEmw(*a6qVrb?kg-09SgaPIH&jF)zFL=O>oSgh-^29NhynG$JUp|n{}Joxr+Mrf z>*y5K)`8r*={nTi?1yh|9n{HJR3}r!zbejr#3TLL12xKAaC{jiBA4i`74;S2hjpk4 zu;qjG%ou#chR^Q*1u*+>rP z=M18sbw8~B^o&p6W2jTlg)YrGAg@ov+P+@NFEuwrG(dz8_(}f3td}z;@AKJ){cp%F za{s)yMbE6C_0j)YfEu<~+d7fYSLYWQZJ}tsh&o{{j8AolqvJr_8X_9GLZ5oz-+i(j z^6N41(irBT_M8{uu}FjujE7uj_8WcInD0sI)V5rAtd;d}eo$xMRII2w;!NZI^x4N4 zk6)_iRuSXqr+)b!+_52~=%%s3Cb2246a6+3YfEbdUC(*2o|%*Rh?Ac!pRT^4BHpoF z|12t4DeN#l=QVu)CvA|4j3}2DyFA%1N$OmJH^T+hv7-ysBcx`-lMj!73^b@x^ z*>`F?3uDXUz7gM{*%r1xqCWDPuI)c7YdcfA>00IqV;>(l8*LX~-mmZ3(m1?4``+#O zA!i(fkNC4l{p2_OE{5EpLrhYA<{2Ay(s=zs-=pCdXSnTtU48i8HwZhsiX1~QvV0ye zcHs6y;c4Q*!P%e4sbTm~(KHcpp>fs?6dfq~o(6LkPM6|n@i8LSL8DIbfi^=#{CrL_ z#&zg=Wj%{T*k*40WWRl1bKnOtAeQX+*ND@{dQ;i2RkYY`5pgDQuD8WA^Wz6L&|{xt zbDaoZIbW#xnIhkp%=J3qRuQ^uL^N#NEn;sYgXmi;Vt!+ESdYhJV~XepS`+&0d+KDE zXr(B>+a%t^XU^8t=TX9p$7j~pm4D3p!cCT zu^yZGSS@~u2wQzc?1P`kAa=lX+4b z_7Q*ZfjRun4z`@L3!60hh^ymfUmdG?l5^g;pEHIv&_5{Ye=zzPhp(JnG<50nJP+vk za1s8bXN_a!KHf{nBk@N@;~eTCBE};`X}{p#^g9>Wvi?9l;}h#`h-m0}F6p|yd6&==3UDAAZvJPw$N8Y=36}KPx9Qk<0c|7y}yqoh9ACJ>x(-%#> zv2V1V$B3{G*;m&LabwNM981$#^YaK5zT$xqnvTXmHKeLS+nK+^gKjFe8?ZMgq(NJ1LpHq#epN5FGL}Y*Q58trY5YapbGS^lb8_r_%(aZNYelurDPCTeL&+S;3=0@hZ zvB}>3WfyyQKw>wokN@s`_{do^R=l*9dC_k@_Gn4ZHM&A_?|Ihc7<4!O#K2=t(K9*2 zhr!X0uM_lK^C67`wrV*?hJS4$o@uU!2lPB!L~gu4Ssyh@!>0FKx;Lmz{Gx6+3(%+T zr-*)~oMNB&`HTbm9k!uo8a3;Bu|H|-Y-70ehKf?1bUnEZ*63K&Y@n0caL%a>*6{1( ztYJS81LA`{Fmu``uah_^Wz9wm2L|DbeNTO5oY%(rXuY(bacf1yWrRpmZ>*WrR<1Kz zdSgW7q(ej=STD~$n^VmGPBFH@j3>{G=_g{%X&-*kH%Ns4wq08b?^gCjA#R?R9)}NI zjU)c}L>&_c+TkMnn;G1`YMSPq!(7A|%$jJ-!P(a-S|_r-(Ry~wIGcVGb<93wKIdMr zxn^wext;I+$hYlND}Gl<-+S33>qY3ILnEf`%_n^yoV@4a6LDqy4kG5nZ`PNtk(jtf zJjVA8{;@wH;=nxEd22Ec@4nP6zNhQgk~YQ(f3Zo!2YhGFyG7&>AMh#fV}5j(iTK$S z{*mJqBA)TZa}wW0qP`+*qKD7e<})#II99|Q><`Cbou2WJxfsX&Yn`QfW<2vSA2mQ@ z4d~pbN#$14mhJ2-Oy5iqwVc|+59~RnuJvi^v+Yhj;~VRqE~1fR-}~5`BKobIMVI*d zodlmaW5mDc~2drav98*J=IQ%Z+z&jtg_gYayr>oew4vASBn>+^826o9e zZMKNHu{{{KunDC#gKhNMMKt|0BF&$lKPB5>Y2G`1n1dxN{m?Fa1r{YyslC| zYxsla;cVmYb0klH%+@qteG5d64fU`{G(bd5Jf~xv`-L9!(|GPH;*9AfN^6KXvljej zE$c+g%@}foU391)F1e)fjDO5U-$^2T#}@m9eqw5loX`9C2dx(|zcJkT z#RmF}r{NQ}&AsQ^)yF#T&dy={_PlWH5sNkvHmPCuHgQX1K`vP@df270mK7rUutQrY zGEQq2+td_`>6Zzi4JBWsf=8IZI#KS&O$8$xT>-fl8QlHt+ zLlZe`WR5|^O#;2})wm;i$#vk_n zdJ%CVX5e`u_RT=i3=#E(?+p=++8};j(;z*U^w{gEp5VqmbGk;))K~wA0dN8XVgV$zM<-Gh-l0=pfDe@ z8~C5vJ4NJl*F=w;=Vxta=nYJKD%HlIihQ3KKe!?%FZi)rMef?zy&}(RWBW>N+^jho zA{z18BkU1N*G77V4wIb}4-wXX8~5j~diI%xjdagZBm5o(b;WrH9xoz?@a^8g)zjsB>J&JrtMV{y4^*Wf-819h8 zblVJnSNg<+^QTkfHQ%D=hKNS)T4H{5M~S$%(s@27JG!cy_rCLj&4!4^o?I}e{NRv}sK~j~us^aQ9}x0U z6?vYsLlnCe8spf%M9+>>S9ST)ie8#WK65lgH1gOMKBal&nS7+167q2sIWffk_=LnWCX0@-|;Y9BJ$c`p`{3vtxt1hFDDuKe*r6FX;O$ZXsLyTm=YhynmE!N>--#lg=Ex3n+RR!5?hCh$OW;)hyB6_Y;P_Xd}gA#u79j&>TXK1 zj%C96J%4uS?H_u1{Vxjn0Tns5#ykgBu_+qIUiZ;d=WLuzQ?~#k#mLr4H1pp93Jza z>ln4^nSEfptM!cTtkCUF?$3)cv$tT(su(k83&z|QW9Dwbm~&&y5iy3fIzD>bn0wBQ zK8ft*A={EO=w%u+SCq#TTRwxx5%E1T{2>>cJA-&1qusE9ZMCQBfVw(LHfrD3?AUXI z&e77Ty>mS!8`wD}@uhT@ofUe=h8}A`&)?VZ9)g|YD)QMOKfWTL6!H@)a(`wyu_Dj+ z$#;5{_XF>=4H1nToD}xRf%gN?tgln#I^mtKA)+yEUN^^GCEbRI#<=<29JgM&4H1oT z3%VGGkN%yYwDuV5dSMTcpM_y3&)?FJFRI9Ag?w>EJ~8A=Dsty>(1SInZ`CmG-A6t{7GxAP5tTJIYgK{*`FQO=y|M&TH?DX z?&+a{*NStu8uR@H<5Pc`i}-hnd=_1!=Z1)eUuP8jDvjd~X^3cyJF_qj*$w2RtgXoNJfGR~nLMZQxLrOpL^RfQPS_&`UG4A5k~c&&#+_Rj z$9TZrH%K`mJ87$@2xFQ#vzt37rd*wU_j6 zmK|(8KlG?=^!y&dIgR|Hiu}}&zn~&ND&*@ba&^Xkqv~Cjdao4riJUg(#8Nzu12a{WHi->WYJJb`LMm?++rSIzx z33DGYu0upU_Y}2>7*|@`)#`7EXsqqhY;C16y#F;sG@nz)=($0M8g?#=m@|Hqh&9=k z$6T(yxuQ0a*L8!QX=_B(#^sgV`MkQKBKLW9Wkrrp*k50flV9XlRpfc?9IDz$&ySB* zYH5UQHbgYybamJ-#i>(r$7&xvH$*hXUDM5R`%1SVqA~8;!npRPRDb3={;nDBrU%tW zEmB`8Cr{KS=h|=)aiHGtKi@Z3s;?oUG52+axsf^NpU^Wgzdq69yvV<6IY0Dn2tDRS z&*uvDiJcoOa`qzf7gpr#cjPx!`OG3Jvp*qAG#rkLlY znupp##yqVeZ2S9j<|j98B77!)t3~KLPsFO1XuSv@um_$e;%pl%!f(#AhKR;^e83mm z#&7JGbm>oZ^Y;O-pU<m9R69pu>W2b^|MUR z{(D=9A+ncCc9J;p$M5BOKt_HbVn%+*<1i6xL6^q3o}vyBb;3P%t+->sJ{T?HoY3{$ zB)>oLI|(%Em9hNZB+bu^bN$WHGx-3I5RpUM#TVZ1kTW0tQrGxS%v(h0P|x^2Ttp-1 z=)x@ecTU&hmd{6DI-hH(HqXCwa~|?*Us%&z5q?vz_5q(*^H>q_e@M2S-!wn06ZxwP@-#=B z8Pp8%<(XQb*2jxj;}VhU37`Dju4n4w@yhS1;ZTT7d}4m$@CNyA zJ=TDYd@btQ_`A-;lfBCNvBQ~292+7UJ|TyvYe5HH`We>{(Q3NLT$9B3jfEJKUwmIH zqF!4?*vtDG>Z5tT^US%x-=Rh>uAxJXebgZ$e#C}ne5FSC`{>cVUNla`{-%Ks7Euc{ zY+Wisj-A0G+I6CXL<2;Q$!5m_~e>peco3dLyX>}yfno365$W?=I;r^)Hh0mFS!l$ z(?2igIwwx6M4S(-+3REN5b?oB;%piIGMCr7SkJ`CL#I`=P{f{L9P@D>;YS)Xa)~bU5kq1>l4lXMi<~pyG7)>? zU*!;MqdwDjMxWK_FA$#4vP~RiUIcvFDw3`V3OJj)zwpNI+qRXh`kW8)G@^jj)!a+OD%WRi>G&KE zWUw0ZO%zchH1Anzl6lD$?HbW25%oep^VQ-;3?OW{=)dNfVjl&& zWuJKbTiC&G`(iuKcCFJ@%;eg+BR2y@H2Ux#9r6lBPMtZP9zR!oG-?%}pmaZgiGlmD zhi%Sfp2>AD5q8=8)ITwNtJdBSe@eu>?IIfg&I5jfvHPGf=Y#RB!t8P5b;3I&_)KBu zwS2K~YJaY9r{srD>H%`l)Z%W_YeJ{-kkwTP058vcK=^iTL}uyzYL&Y23c2 zzdI|9+lPhIxV>1I^V#F)3*#$iFn#2CPxYnoO4s(Z{?0A*nG?IbtL-f68yp!JIUF50 z_ThtrYq?F#XM6g2cZRnF9~yjkaPBz#!_E!A+Ta8FrTNfP$#3=TUv63x9}-62Ydm%3LX$!tI3tNQcfvc=XBqjkOphDS z?D2YLZsI^rXpG^^ChnIeQ(pA8YsaUka84@|stFC`HL*~$9I(1)KbtvmjC`5HIe#Od&cL7D?X=rxFqIH`}mxi`irf1CbrVL zW`3_>u%4+ea*_5^FZ8p=dx`uW#D1DDQuvzs>>+G3-@7y)HNu(I5Yd*17)!qTiO&$B z^KRjWI1OJcXASAP?h#JcCAiV|yE7U7JO4c6zw4uftt+*S?;nl}XLma9LBiHgpIIAc z3j3UOy+`Z9M*1$w++L#|H?G^UNyoo;3&*Fn`K*(!*K_i@VRQZX<+VSc=NTgQ0J$XJ za2oxqMeG^tKcr{sWE&Cw5T~9ZnsrJxhi_16+O*z->SGSi%Q;S?k9&@J*NGO2@T;$g z+IwHbEj`0oH@@H(dobU>%;g-ro=d)8p6FqRmfLDkpKYO&)-d;8Dii#h@vJM?aZGsU zD#=RcOv(1t!uZ_(mu5P|^!*W2&dO^uId#8W{lwOOmUO(Y$zOiXT2@+He(sYW=3&f0 z@ev}|SiTl~E7@cnHxy*~_>N5HbYZV?MaY-~d#t}RkyCR+MV8|?=fWdNEOVV+q4R-E zXQcX(trXSf$9`Ay+x7=5wpovDpQh(DZeGJ`^|OW#$p(AS`g&~cOTItB59^<&XY?QK zrv9qX|8O_;Zwvj8bW{Jr(En&R^)Cqhk9AZ3oY4PxH}x+H{ZC~2oEtMlc|6Y#{ZD54 z>MrV^8~UH>rv9m+|LIIW_lH_Z&;1t*yGGMGI#K;;9d!u1W{%J^_cD7V?Y|@XZBOuT z&d4Lxm)cF|yt510&6!NFd57WCv-!C==MOc{nZ$iX?n-AIvea+y6ZTSR4Ce~6bd2D} zeg60GnK_1ZF+Z|&{?Wo?MAQU%W1W^0hg42pa=E%T`TN?uc6dJ#^D&0=bVrfTWbQt> z+WZVh-LwQ|+;kC*I~$$U2Yj>*>_U7l#zwoSm+0&I?ui;$E8;za+GBnipBY=5Pn*6+ zK3f?vqcJa^gV+bmgI^;=#FCcI-yPlDZi{Sm*KSw3w%e6|sf@VeJL7mxWzwpxJ9o_I9P?d~&llbyW{4Jw=8JfD#y|YE?`aNPht5%H9?NW-nqzLhd*yR7 zJ~c!%&qM9@X!bnw?hLjKd}xF`A2VA0-jk@X4)z6&wQ=q+hI*&2__yu-y)d8K*fYpz z-;vC^%>P+o#$(UpA5|Y~;`=E4qQ95uP3lLF{bk)(s*iXt5V51#(>f-bHO}`=Q$@2x z$BUMVcn9FUfuB3QQuIdA!=ev~dW*asYE^904rgrCV#%`)R zb2GZB50gWexR-oLbz8PTciYe@L*<^YMMC=c5)~LwCt<=4goE*y<-r zYmR!i{*|##>b(?`bibS(x{NRB;ww3~EZxu4DgKNV@!V6ijq)tk)Mww(Iz{Ns7I9W` zPK^-}%Z7+%IeQj4@0TSx`yctpik$NeIlMHU{f&J1X5_;va>g-!XhqIA64RFYH6$caNq&OSg+97=Nb4)Xl2bbJ|uoH&%m zqlcV0l;oTd$caNq&b~)Z97^)OAtw$cIqwjRCk`b!X9{xSP?B?gAtw$c`PLz4owmeI`7-g`U*xMpesV?L8FJovO5<0Bd`U%qddL@74@TuOeR_a^62n<4*}W-yxLb#GU+{P>~aNTt)78w6PVr-_bZHO7?j-!9M3iN$z(v&WVzocN4~QPL$;R zL(Vx-l5?&yo_R`g&PC+RQ<5JUa?Y8OoO6-!BPw!a5bqYH@!N)cctuX$89%HdC-2B> zpJDoioViQ$lXu3qROEd_&OR=U=iXyHRFd}z8Ruw8-aF)+gC#llCbl_eO7d+&&N*3< zZyj>Z!CdaMq4xQMJB_((pFg;hkaLFQwmFx`IdaaBlAJpUIcG>o&YgsuGo&P+9`f4f zk4DHjBTD1BbFj}IFUhBcoIPHWbLTLgJzkP?XCSA>OLFcE@v|hqBINj4 zl3yNj{4B{Y3psw49y8D)OUa{HYcBQ6XPmkq-#@DHS>INBF<2BIg|h`N$@$93Ld``%ZtH@`E{Md?oR>;|BCHu=ljt?a{ z`w|&-T#|1ea_YDwKRo2*xg?(%a^hT)&j>kjEXlVEIdLe-c`w0#;!u(w7INZTl1~pg z>nO>2ufaa+D9IZkXB{Q^p&`eQlDvP&r&r|DLVia@es;(?$4mCl3OVO&Nq$Jk8x=X{ zKI>;4rSWHm96w9)-9nCDNxp5!@uMW~7xIHEa_(LHYp=*}4*ArI9J`D^s3Pwh@&hY! z-WwQyKtA#*e7Tc_%?WtRg=(?kVDL){}E zP?1yn$aks8sV(F?SLEys<#4H!zKR~hMaq{BtI_X#GxcVHsqZZ`SOsrROIJ} zoS2vFvv={IbG{^J?;`J4k#nvi=NvALXKy0soGr?N-x$T+itKHeGWshtO@uP81)9|}j^J&xXyL={==48)!-_`Cr_7w51 z-FH5dYxj}!S-X#%&)S{feAVs*=c{%n5Ig+Gk38nApR*b{aVW_-tC16jlAN;^dFj5y zK4&@d+MUT6g`9JtWZ!odaVW`s<`RdJocBcR*WPy+gPb^(#~l{szINyD6!O}g&ppd{;!v{BJ&T+;l;qrl z$ZPjL_aO4xeat1Z(B<~yJYwrVnLQWh?sWdEd)vxbuV z#E>6Wk#~gr^osnnkgu%BM}~YwMLr_r%PMltcjCk6%aZ?`@5q-{5nWbX=bZ14*{e*qa$aQecKQo^DyCi2nBjC z*dL$K<|6*cn2SC4nEIxR)6nf9Lie+YE^9*fa~0jsC%RH=>VBc3`*@;Dtzq|z72Pit zbiZ8D{Ys*1AHG`A{aQiyiHh#m3%cK^=zg=H`>l%Zw+p)8sp$SkLHD~A-Ty4;ey^hY z{etcfD!M-`=>Djp`(Fj!A6ImLQqX;}qWjZ=?$0W^KQHM1qN4lDg6^*>y1y>y{-&b) z+k)=zD!RWf=ss1^{X;?bj}_fN6?Fex(fvz7_pcS*rwh6qMy0c)hx&c)cyIQs==Mr< zeeP^s(cLD|wcXwo-981~z7^em1>J2cy8R2f+f{V8FX--2(cQ72`@D+oP6geaE4sTB zbO%&)cP;1+tmqCZ=nk&v?pDypP&J%jX~d-YCcGKPmV_NG;I z4=w06D!S7Px`$PCXB2d2R&)<9=+3I>&MxTAsp!rv=pIqgJu=aCo{p;M9$nBqrlNbS z`l*LsYp?McqamU#5m7t*U6WJA=Zp9Z*Dj*zujYQ5Iyg?_^IRUUzVtrsDLvcbdlqc* zd5u~)p)mf$Y`k1+>Yh~4ombJFU(j7p(Op>3T~yIsT+m%o&}F^+U28Xr6Q`xpsqH)O z&65juh|#jboTn6YnRB`3q(1VTEHCI|`_zK%(<-_h1>F@D-IWF1(<{2G3c8&Y-PHx% zGb*}g7IfECbk8d2o?Xy&9Zyy4sAJAU;<#42e1||?TgSC-opVCRpNr2G&hvDh`qI7Q z+CRUbdqG9_!h-JeE4mjIbYD=>U6<(k47#|Ydr6|JkTmzer4`-F3c8n9bgwArURlvy zU(mg(qI-2g_nM0CwTZ6da9u_B`hxBa72O*Px-YEg-jwJ%zBgBNZz<^BTG73&pnH2o z_l|<@ofX}?3c7b!bnhwX-doXqQKIWyyttzKl7j9_E4nXBbRFN9S9D)d(0ye^_f-Ym z`zpHk7jz$}=ssA`{g;aFLj~PeS9D)f(0y%1_jLu`*H?7kP|$s2MfXhw-G8mZ%cDOG;SeWxe72QV*x*x9Sex#uL(TeWJ3c4S!=zgN0`^k##rwY2C zuIPTIp!--w_p=4v&sB6kU(o$RLDxCGUpbj4^1I68(&c@|?E< zX68xXo4%6G^VOK=Yu%XViNZY8*4NeV_bS)nH!8Z{Ea-l#qWkTF?sp2hj_LCw9{(Yo zTFmU7nyq1^c$+`24sFJ1b;oM%emE7q&b#G{Qs%?J+ENX z|DRQKe_qi2MM2kVy;t_|kvdqVBoJFa>nrVzKR0vV#p)x@;7wm$&>wbe127! zn>GEq;OB2Dy1$Ki{JmRiVV>U=#(Is*rH{YA&+M>{+~21PcJTKP>d$rmSke7cLHExU z-M*e;u=m-<$S{PW*@ z&VG`$i)g>o_f56=wy(^$Lt#F0wxjy7)zx=i(uz8{cTh!la6xysitg@-uH0(oZI6oXo{6sg-K(OzccN>% zLn^v01>M$)?$Cnnu!`>Rg6@cl?#M*fYa3P3Z7b-GuIP>_=(bmM$0oXt*|>`C_=4_) zitfaM?xc$D~GJJl9S7dlzhG%7X{|vWfc()AmcfY6Sq1JSM|?WO%y_|3&|9YUm<%79;fWb;&G60{?v>%+{C?B*eLusW&G5T2{Q3;v zli@2fd~SwM%kZoW@1Nne4DXiVZ8Q8QeF#d=vnMnB%?v-5;YTw3mJHvY;X5;Yb%rm< z@X8F&&+zOFACTeE8Qwj^{WJXM-)hCi3#4`%qS8GbOscW3xoVSW#u_Zr?w_%j22 zgVPV@^E8~_S%KRAEB0K6nPpG&}}1V1%+NAQ)w`5c4Z>fpQ|g88l& zes1vdgI^f@qTqZ#h~8zvuMB=w@N0r!ANYYDYcu9?$&!g7*(TB>3pyj74u;@Cm^u1>Yz5e!=$-eqiva z!KVk`(tUG$j5{&-yx^PLC!L{pMsPk8v5vEYpBwxI!MzVI4Sad<^}$~l{I=kC1ivfz zJ;7fT{N=saxe+mBT;I8ja26p{@HSmvu|5%({5ZB#)_RPPRx4H9ihZt`?VgL;Y zJ}~&;;JXLcN4=(Ae!dQk{^7w#25$>KCV1`q{oi)(E)0Jc2Yu#W3xi)2 z{F2~4cdrQSdb>LCwZXf4{@xk-cL(?R`{KYa4et7UW#IdQ*Xs1OA%A`FHwJh8=I8Uj zhy0zv-yQtD!QUVJ1HpYhe>8A@Eid1pjXE?*;!s@N|E% zFP@D4p9TL#@Lvc2ZSda*|3mOU1^-L%r-S#<`HS6N!SnNd+vwlYbAGoNw@2{3f)5Ek zH28?%qk@kP-X45X@O^?$34TEEgMuF%d|L2E@WX=73_dIPoZv@@b8c}iPWaK&Pj4S_ z$?u(i_Bpks=hEixvEyQ$CkCGvd_nL+%$NAg4Vce1JGV zmmVrkE?PzO@n>GJVfi#YbB0;YnEix#r%wC!Ec7vUr%aErdEZ3!acA_+bSFnYzNd5f z>|)Jn|30DLKkIkQ({-|rk)cm*rgm5h{^V=)S^m7xPh)yf5>u}S8>wBdXP2zsXHwoj zNqX2Akm-B-W67MSr@UiLsuy@4n&hU_eGAhQx~);2SxE=ldER z`mM(^#9HA0==bo+nv;6ea+-};^Nion3=wt1xx*R{7m@E-BGxinq>^dY1kc(g&9(8| zTSQIs+(*Rvhzr>9A%0*ua^?g(Zp;maBgY3Y9E>ku*PwlJoT*jhaP)~g*zvc2aO4nj zKNAlyoIdgdcD{BE3`b7>kUNjm92kzAS_8wu)EF3^*4d5Ue&#HCnPfh9Uan_y0{(HY z4S!E2XO-pT1-mVxbPpUB{q&{%rH9zt;Z>>3QwEgLD;}y(GuSb`id$@oq`tjSe)fpw}z(xDTj7Y|wb7=3G~qk(ZhzH`%>otv!DdR`|!ai&r0Jw%fd-KE0FiEZiwv8SI}O#7EaKW7~MsSg7Zy9+`u zzh^n$usc|k+MOHyzGuDWMbS^~r}~Sde~+yH_~>Vkr24KY_I=tvFZ9_8|#X5byZLZ&U--L*Z z^$!UvP9vKI7`tx&{djx%-%c<8V;)QzQBK;ToU% zIVi*1W%z4PY^whOVb8<6Fn*4XdED>wXG~%K*Jt+b%kaI4{VT%$_{@IZ&w6OoKQ-X` z;N1uRT<6Hat`qCg2RWbA4|s5J>H$oi;p7Y65}f#hz0XDlZVOHvkdF<{dcYHdPY%9s zaP~fO;t6*?4-U*(L4PCoVZmnxe>UeEwt1(baSrjE*2~^mzP8P9uMGeBYn#^3&xKtl zjz@pZL7lpvIawe1O8Xtp{N0lJL!Z3n_5L}{hshVDATF0fr-I zPB0wI++a8uAHZ-h_WytIlbGQ*9KRhqIN0%ngE7#aQZkuz&=N~ zpTKbBoGW0TFMN&w!;y2|fZ<^7Dli<(IRy53#C-&YBjqH~9JD zoR!>xH1-^}%lpepB#Ug5MVWj^K9%zbE*Mg1;pA%Ywfm_^X27 zAN;}K4+Vcs@Ye-@L-02Re{=AE3;wp??+E^I@OK4&Pw@8ze<=|fp{zUL^1pk&e?|f@Tv|U8!iP&?`-3c4w!CgsQsOJG9FdV#V zU^tl1EXd(tK5v5IU_Q%${h4OBz;NVz#zF4SI(r0$Bj>XZa(@QmE&#)k^O*QOhq4 zJ)U1C!e$TA`H8OYQ{Lxto2N-Ho#TWI&kn4i&wbud42bir;B$f>5qwKOZ!C;)i-Ru> zzAX6i;HL#&5uEc2KUN1nGx%A-d0$0-Zt(MiUl{zN;Ol~468y5@R|H=l{OaKU*FJB2 zDAxVq;Qxrv8|3XfG2eHCe=qnCg8wM^kApuM{Aa;`5&T!de-r$7!Ji8L$KZbs{@36f zAo#JlKP&s+{j*f1KQqgGd&j&j!To2dh6f%Qye;?`@o5@&kBG+SkQa+~5 z^bUFW^PAo&Z^`iMGW^O6-;v=fg%40pr*Hkt&+xeCT1Dx+YZJXul2KE9_Cb&F{N7D( z@pR0x7?aAR^4wjg7!bc%!PC2rJvUNBW6u%mDWb#l!J9FCMbGWOf9(Dv?kex*=PWpw z??w3B1qUlVO$-PBU;BP!AFcVhx_quK|Cyire2@7%PktZ4_Y?PpxnUJ-aIF z_h*jI=uhvqmwk5Ad-&Q6pCfF4{GIHYf}MHNW8e6*+}Mx2mRvjb$1%YUF>)=~H|Ns+IcE5XzH6OvVEQ4~l54Y8OWqrd7_YdK#-f*6Mm{4?J8PTVn!KQ{d5o zsVnfrz@q|B2;3HUd|<|*KQ1tK!IJ_rFSsQzeu4K5%sB8qfw2q5Z~SLoFzW*27ufrj zdBFIMd~#r72*xgQVgzPh@4fx>jEoo{n-Uls;Qa#=Gw=a{{rT^}z{CXkL4ijFo*J0^ zB0pF(E1nM#XYLh&+0)>Tz=sB28@Lhp?7-6luL*ou;Ijg=hq1RVF!cdm5||i(j|+@n z;2Q(;3|$v^PT;!(&kcNS;3EQ~$6AjJj1BNnfo}?Ybl?{TJ|^&0fsYOBc;P3uh#~fl z5A0l?5co=Q5OEAn@YAmjoux_{ zrGYOFd~)FD2VNHV!oa5lz98`Oz~=`(HSl?XPYZl?VCsnZ&kanSfzJuNGVqy!PY--X z;8lTF2ks0EC%*J!4?QsBz}Nv}7tB0h>J*HhVCodiI>6L5n7o3idoXzf<2RT*fms)r zJc7>)d_rL2gq*x1Cyrq91}4s6@&+akVDb(oZ(#BcCePsIA~5?3OrF5x6-*w%)B%{h zgQ*)Zbq=Pk!0ZDsbqBs7Fm(&QKJb-+*+=NF58MdMzCoXThnzY9PYZlaVD>F?_AT;5 z1GCS;>|^BD2j-jt;}>%37JOr1&J{5G82OCA>~rv8fo~4XxrP2Mfu{z(HShs}Zwq`- zVD>Hc_7BXy1s@pr&cK`-*uN|Al)!ff-cOvE+#{mxBI+U9PK3SwqHW`uJp`toI?n57(o8nW%BB*ZxchY@Zxo z`{j7rH^L-9BH56L^#e*?_=%2HrLByubqkpAdLZV4nwr10Nsq-2!75`@08b zUhp1)y+4^3e|#S771;Z0@4$?Oh6E<=;FiFw8{8V$`*CRCqe4C`@R5Os2VNd{L|~t9 zBLjOs5jXtx{%Z?7N1XXb2ljp%6PPi`+XH)ljSW02=8{wi!NocZ?&?DJsXzz2t%eT6;mPxc+y`;UGwdf21xz}Nv(cVOlLQ>Wm`fvICK zej;aHFzW>47nnGJSqGT90JBaobpURNz(Yk~;smA+z{C+u9f65ExJ3jePhj#6W}kq` zJD9wHsT(lQ5Oo74?_lx>rY^wb8BE=PsRJ-|2c~Yo)FqgG0;X=k>?1Jy0DMwl@(4aL z@Nt3Jhv>5pk#86Hguv`uLG1_YS;V+0t3#Dr&Rium$O9<9$=#=7XI-dHow)QZn(>WH(7emK4` z54c4HCbnSLynPrIa{J*LwJ+Wi_QyH1PtLLZ8WHyF8|!C&`!^skefR^1&;z#yMi1;b zGY{A`j2~dvIJF3N&BDRn!;AyFW*G-|%`gx6KoR~Bckls$i5qzTz~llvB`|RU9}>7F zFlQ0=SQqlCf$11}3qUcIM@x%VvjK#%=_9r6Wc|A5ISxKCj61KuVu>jn1?+z7mN zVDg3hl)&tB@Tq}k1YQw%W?;@0=EqO;my5ux0eo6uo}pEN=LGHyJU8&lz()i=J@Ao% z&klT4;IjfB9e7RPV*;NM_}IWp10NT7N#NrHbH3pJ34yl_d}83mflms|Jm}90yeRPe z!1#%LL0~v|VPO0QGmiMs4`v=PcEI=vW*#u>023GR$${|;Og$kdj$rZ%W*y+=BJi0a zFnI=_5SYAyi3@V_3?^=1>Hth!!Q>509>L@dOdWt%1t#xc@{XLk0ka>#5SYC2%(}q% z38wDA9@ScH*3;KHn zCT`%p0}l^8Brx+LZwWjsaBE=vMm{t!{b2N1KkEQv7mOYlzrZabFn)uX7d$F3aRO5> z$ng_Q9>K&FOkTjO3rt?Y`voRXVB&zByn=}nn7o6DBbYpai8GiyfypbFJcFqV@Z`We zL)1EQ>Ih7pz|;*GzrdpclUFcxh@8BGsZ;hHbwOkP9wPdveHyjRJhsi=z=m^e8-3JA z!^V3=?9&+v$VuX#z^EGMz=e9AFV5cKJR=&kcUHs(-QwzDo48l$djw=u$m< z95q0k$+?C$TWXhQ^1>SVcfZl2PN*&V$jy2``k*qyG0zf^oif?pCCo5W_S2pi~71N1YN*z^*|C&+!|08AX< zN|BYx=2 z5jnoZ2;Z7}TQNe;{=gsNV0~f?MxQ;2{+!VFoO9LZ`Ch4K`|}Dt+n)|Sw~4SnS~Mn} z!LvlH_iz!lhrjr_NHjr2yxHsPq@3mnp9YF(jB)+&jNizKF>{kA{AWJL6@6lW|Kx-C zqlXX7iJVwBM4Z*EYik5*ejcvpp(4g(n|CzUNsiHBPcSd@tP`a^p%>=1x>L{i$(Z?4 z-c7tU>3azV)L0w+jyHbMm)d0wy+q_{ZjvkZFuKgKR>az{g=zXu)S#*2^F;XNIj+_- z;}(jhh>i%G#DbV%gYjQiag#@4Lfo;D=321nC-c&<={?*-&#B)>CVr0yUDk-N_KUf& zflo(CzadV;4)M?R@R8r=#s=fO=6&LsTsfbPN!sV}o)?_TS&MBF7oOR-+;xr-ai^}R znNATp?4ygt(_Em359sY6YKUm)pCx^nZR&SK-_?Pw>8QxnM zzmb!JAOCfO{@B1`Ta8d3+&W7_hd%ZSdosPx)BB!%K^+_@I$Aj*H&eBsv@V#Jb=@mR zc_t3{v_P~{JN!ZM=cs!zxTFxP%L{$ojpu7CW3Q|9bN+YNc1f>8($SCn4flq=q<7TZqhURh<6nlGKrdd^JYD>&sZ~l;tz9y*Y}38z@_!77-Kl@r5;bZr^##!@iv%^7`?Y zeE9CeC+vC+%*nVrMfsU9Q+=!ndpbJ0%q#iT@zM0l=Wr?i*lZP%2VDhCU$D)Z@VPVw z+pL{6^FG6PV#K|3j0W#5&N>*+d*7Af!$qtWUua#~woT4?Y#!T%P3B>pjuo+lh!aFy z+eO6vP0Cqm-kFlICh|hw@soFj<23JTadOQ2)+!}tnK-e5cL)>0|#<_2UC^ zSt+7#yy!F$eI26I=CQ)mx2}<=&&XtqeMm&Shlv^@8gV&6^I<2oW&b=Uu^cKoR77hu z|G&W}?6OvT!UpU2_}uO(l96MY^W!;K*9Z|YW^ImDO|PePoG*o{S?`|vDB(5{I@qGW zAwrLSII%uaYp=;ps>n2KV;pR2h5A?r?;I1v=ZY-T<3@e!w5TuDN!Kw@vKb=R9&v4m zXvD(fyf){AJ<%>=Z9i2Fbc%aEEu}e*bLeYQASU!7=iO~*@u4F6J?0I1W^VeZlX)6| zjK6c7+GSqvt@)Bo7p66u|KBiXK{AH*q+=FV#w=3*-qIZu`j}(>#TES}p-ImiWmv3|ebGM@7ZA6Hby zuT+0O$;m&hL-|j~on9HYDjRo9Hm#$S?+e{*I0rIqoQsh>6bEO6d0ujpT)e%Bde7+YHJ zm6h@9V?KXx=J~Fw=wF@8H%)V;wQx;k%(XEG_gbodT}A);(C6Ms^>3)?->81aU}!ex zg_SWkC1YNzF^uCJ=T7jwx=hc0KjZsD;!6!vUqeK^hxQ8Wb7h?JO|5fAq06&#smG>$ zeB~VDu4)lc=bVExM99{P*vE_~pS#BM3URsJ)JgB8-PFf?jGr&UKl-?P=)=YU5%zc= z$EQ@D?w8;GWy8B0KJYyTabY}bwQtmlzda_LeOetKrR@rg0jnKGsWH(ENYT<~+olMt)cyF(!8SVSU!l9zX}~-0HDeQ|?Db zOqh%FoJL--h0TE?;&7{!s73tq=LKQ`u6_QX{=Ek5c+Q5NX@1`#ZoJz~6GvyY2)pi^ zt7rC%%Dx%nd_LC7xSB7>8X_98B7Si83FjTpDu=CFM68*ZV$<>SK2H5XkNMc!=(Q%; zd%ffjdk0;|va}ZFMu(iSU#QdD6n~zvN!<}U#~+OU4H1p?P|Mhmd(ANoIoTunkmEmb zVGeRle20n1Mad_0ITP$dNoSVi*g%Ils3&|N#_b~JU!!**pKH|B?b#k_Q6Ik3YB9nW zJ`1u2>=P5#$6ARA^^6XA!RJyQh_U@epBm!~peAU@8E-q+(5Z%RqX3vH` z>>jBOY~kyC5zm7}*kJC4h$iIc57!2F)e4dK7q;+)_`WEMFTPL*sgM1Hi5a!wHS*rm5Yf^#vL1AZ$p{hirtwJa zrt!nJb?ql}_7Zh$feq{CHrix^HG7VRo@q6Is1NJf7O}DYhMsA)@vO(X9`E(omsxyE;kd0|7B~8dOr%RXv9Q9q53BWH(iv&`bd&6B$4%kPd`|L69&cK>~@2 z!VUN#ii(#(oKV356ahsAM^M2Lfr|q;f{GCFe&#;^Q~T|#-keiI5(4<$^~=+1t#`fa zo!8p?oT}~w_VJs}gF(H^xI4wCwRKV~DwcRb95x1gv8FBOi?iXpwC}4m=hIBTKJ=k| zrs3-XjUV2@HL}H|3pDn%er(8mHmJI9{jIv^1NmYC?zvL}XF=m9e=iO^&*-o7pW!IJ ztxa^0C-%DovH!*9oO@1f3D{md^8EaUr|w!gDqo#r&j!AnACN20bc=!dS`6qn){LF? zdR9(l{DFKPV1Ik3*ZXkDBbm;>xRj1-ETrXsV}2tYMW_3D0e&()8@?}rMF%wR#K)(f z?dR?D%bGl>0U*2l<&!vyq4>O{x7*!~z9rD+1F^xUJ*DyQq|EV^e`4P9-ml@Un6p6* zk;|sq%eU9WSU%PBtZd#9TGfkK)cwJ?;r&ta$Iuk8TOqLEEkJf zJ1u-{*dK`HLcnJ6sFUcJ&`Y~s_J?;4tFYODcwI3nd9<6Csa*3XB&gvfmr`Q^G-6Ix!kp}VkdNgMn`K$ zhnOY~#{}z5(u}79&sH?{dfx+QVm_d!d{d)cptZiy-RfIO51;s`e)%nybgZTBon?C1 zXumUOd``gTiXofvRUYRu-V(4G&$u=6#2=qnxT{;)J2JOk_rWCD{2Q*dvg=vTUO8Be zOn2)fneHvm3ik1@&Zv09!NA^+2J+26XLE1xKU165yi-l3w^p(794%VNBRf9+2L% zSuF6WQ8|}4JwEwR>m`G&(*e8Cyq}O!c3hq@S@hV8&l*{~1MT(AdEK1(Y#^3EFMGt- zv#j*W2bmh0*zlL^F3`jo&3lRS#||>b$+$lB%1gb+@J)``ZA@R);F%e-XECUI$U1%G zPs&Y~HEl;Aj`-Ce9d)L=jJ4ufORnvs|AgR-fK8R(of)%NUW-Ry>`PJqj)6sK!YkG1u z{tZ9J`F!Nek)e5RZ;GS*etzJt$x#`}XWNCrd0AH%*BS@%roA+{IsfG7#uWp4oU@CA>7eq%znMTQnmm?Y)??10`@&cg3;Wb-yAKUdd;Wf{KY!zD_Vnv*aGsD*pD8cU8dN%Yv5#j|iL_&6yF? zl2^1N8rtTJ%U*HgzgF=vE}e9dNB4oCVk?GhIT$=I;G>+Yo!5tXwerg+zLZ}>U2NPH z@Od#fHPFNz@9sc7`wo`>d=o1zv${{<*9O`=GK$rY(4BFVJozlbRD+77qqb7IaB#!*7 zb9+t3(}DO{t30r!#(Of}7LYaMY1by%Lsn~#JeEBfjB*Dl;r&wgiu3P0 zY4}bE#8%$brgnV5wvnBwRWWrQ`JqPTlf0@4HD~;oz?ySVGQ{cnF*3+5{kt-zzwF{) ztr^ovzVAik)?RHjd{sB>06Av6m>wN?CciJB+Zh+*nSdW`7=9jpQ;MNtEOuqz-i&`V zYhpCCUH#BU@9u#8A52W}Igir;AIZWee#Q6BF?{r^hf@O2OZSp}Xm<}b2JA5B*J40s z7ij9{8%LwVdDz$W^s23Kd&$yT`NO?z8t%PIXzXg^HCR2 z8u{Wnv~S2WDXwHsimNp!dn@K$Xqxw;^?k4Y+jsKXqmIbGA}Am1kU@y4TsV zC)gHXpPB6crl4w>UNunhs+`HCJh9)iU{VakgWdSWQ4>otH962; z9GoAhF%1u$7YFxh=ALnH>HXQ0F*(k_xcka}?dV|lXmq>V{Y`&vhxdS-IxFN|6v$iU zot!$SWtY3H&d|Y(>+V*MKOOtp`Oh@-miNmwo|LQk#*az1sXwt4lV46O<-g`{&0MUl zp?86%X2iA4!}m^)ieCBr#$aGfklHco<`=3p&^>0m2FW}YV6`P;?-#6aK z-hy>@TW9l;%{m&tU;dwm|9#)bWM1}_zxWnHr~hryFW$!obZR%|hm-m?o}d20k{q=1 z^KKclDI!L_IXjLFz9szhS$FRB$MyYe-*4^v?R~#9z5VXB{r|BP`;GmY`?Gx9n6);S z<=AV@wWsJ$4IQso=*3xIw%)U!yJPH;%cHZWbnoid#nHOj z_@mF?6tl7){k@^fDLbm((BBezYp;Avhc?X5`hUIgMzM5W7K7!^skQF*OMV&qIf6zH zOb6nHTrw}pcr`NlUNYHA9-F2EGOd@N)+)AjK6ZqLK8&55zwfh4v8!4`tGK?rUo)ro zn#{>I*Pbz$U)b}vwj?Bn>}7*HUB9#M<=OnizV|#acc1GY(Dx7Q`v>*?seQk%@8|n| zf8U?p_Xqm^;eCH{diJZk`z60(SN?r6=aIcN|K7~`tMREbNE3T<*!FWdl%C1w=df>1 z?>RLS91P^l_b_khX=kOEFSTS3ey!foobN5cCBaI2on5W=>YWw)*(YCBv(L-|Keq-` z0pIz_PI^3h<==YTIP@7=4Bav8wx2vUc7ev%&LE9Hc=41?UB;TdWnabiWBv2y@~qLV zF2u&&#Y-$b;mMiL2KKT~jK=&nwP57i?+|5nPg(oYBMt9z;HUJc8gScnPv zYFIt18#2@}{<%OLjD6Ol-#$F=h!LI_Y~LIFLhMENdEnCYHNHAyJYve8lEaSDCD(WW z%~{Zl>nzZ{+*x2_+27_{uKBBx;k?L!fAhhd9R~xt_(aZZ;M_YG^3NPR#gF%;37GZi zfM1I}tnE(xKiwt+0<>;=CzvX6l^rqdjj&^>Z;iB{0|UsJ)U?abkm*RxJFx zI~xDQfiGQl>H@v^D(|ga>&0iRwykUKWMl8Lznqv~oIdS6m*$VS zekwaOJe@(BJ?jH|-kCj*P5*r&Nry`G0os4S8a8>2FK$vGhH%85iyRF|=CyQuOt_l^xn`pn zd2ScPdM>bTt@tWmdi5h;@+sct?LIu39LTLX`FOp5%VQU4a_K(R_L-E(hxaIWR`k z#Pi(IXnZ`otld^%d+B;;GcMYr#?Wf*OVPJy(3x2-zT@J4QTB|Bd)^#QxwA!4P6y33r2ZGrcum3YV9 zd+sp%KpSrKiyFja)5A*!urR77PrR??G%(MDNwrvRx23??eSGzHv0ocnPesqCW zI@)?^^`U!~x{2MzpSzjx{yb?f9c`R1%>0s|jgR$uu9q$BnFK!vn6$PWy{&~`iVUsQ zy(9mphbM*h)daCDd)sl*{yX&Ywm$Hl^YB1TIm2q^tYCkjwYgLwH@8lft08ObaSyXc z9S`ks&uFcUM`Ui_k%4_|b7t{)&tdyrf{lSQU+08>_~@{HbWnGc_ci*(fowX+p6ciN z#Q=}^?F@DWWNCEMMK>GBbANdM+S1S6Fa8~6wCw>~RwD<07tlrSN^%h}cTr@HizB;RJN*6P!o9Qh(7=347@rr^+OU66v#-_` zdRoOs?!AY}w_M9r#Wf$(Mmc+2`ihmc69PFC%PRu)v>_3O!TpfKsMt2*}<#Km(&$qL}2504U zfi@qM?ytt@z>{Ksi%SOccI~TmEN|*W-rRv|NxkXSx0-d=$feJ*`-A!nS$CTHSF`f3 z&eo?gH>W=$kbh%)>G3|LSGUfd@4$W~2W@Y9yj`H37vS@rMy`EY?JHR=t)2ze$_KXk z+~7o$b8O%H9BMD0ujy&tx3!9&XNUWYUh>h&s9aW$ z?=C^vGn8ph?Jb#TB{RdrWYULE&-c>9W^q(ca`YB~N-JMH577NQ>3QjA0`Fbc`R2J$ zyyAlQ)5qkGG|v^!1AEkm^@G7Ffjdo8t8CJ&oAaa1i8&qYtanKFV8w>*%yzfaBma2q zlRwV}V==@>PkXO!$^6oQ%r4NZyQ9gxD#)+sjedqoHou*%cTYH5SsLjgqjd3`ZR(0X zYwUh};F-ejsX$}r&DmQq6Hnm#U-e^ls15pC*`6Qk5-oK*9XuqsGI)KU$u)cIm20sO zOJnsZW<}$NJZ%hS1J5=+-@8ED8@wlucP454#;=tw&sO%blMd^pqvm=x6}@T_?{d0- zwb4!fse#t^{OAzV*vCh$wNFgc2Rqdid)ipkTu)EgS?6UXJAZABb{>q5F3{N1`h#XZ z^h^BezG~0KN_k#wtlzsvAH-T*wA(V)zrIF0Z*HvJS8B!?QR9UZGoA}J1fC6bj;AsP z=lGlYv3hIIu{u;=FADIHqsgH)HF;b>7g=pRdhe}y^?SlI9k2yWKGZH=HH6*;8Xe>o zAHUeo27K1sl?y?8e~@J_&{zCwP>lFPmObNQ#HMjEIyrPct`wu2V^{exE}rbH7>R{> z_57O-#KYb98%?e8UrgPnU7)qKDgTTza-j_diuIRJ1<~+>$mmO0{)|mKi_A9in};g4E18}99su9u{+TGu8TNc9;g8^ zJSA{0G&!nRe?H^&0Uk2(lcko#Q0-U~|1QwPo6U>;*nUkNX_XIS`N4};d@JR^`MWtW zAMR=GyJ%p;BwNe&swKH%4?17e@(Y8r0`cOLd{{pa(0QELa_9TMQ_ z;Kbl}g74p$e>W?^e`j!q1nqBwMjjxb%9p$^p^#tKLu{)z z-W_O1t#B{0MLz0Gw0EOe^KE!m_|yerq1Wg}XH%>H6U}#Pc(w$^+t#xjim}-0`6ae; zv_D{n8er49evD5;mk%q&W2}=w78ztM1Z$P`={QA}y=2V?d>_U|3|rs7z486H ztnuBQvKX8c+>-BG`OxZmVxz0#%tm}wgYsOpcYMa;C~lw0?|pOOw(RNxa`hTHbq3m4+WVxrrOYd%2>7B?uDcA0TQ-foJF3{A3 z{rajAb2Ty@*hi0jn}aUU@E6!tWBcX;`{>cwT6aDj_}OAl^(DicjOk!G-R^N9L*MEZ zJM!pSO?>!A7g+`N)|l++ptZ-@>;es+`?l_Hy*+b*J)T4DnLRrPrOod*XMSs)xh{g7 zWikK%`;dxt4?cQ2veRyV9d)9|G*IB4@YTnj3{x9{J^EtT- zH2T+a=AM^>*yi^+nGet0%SMt9f6n1)&+ftOtMkQ%dR9LzWB!|~ng7nuvTu%m-5Suw zeKz~V$(_5<_u^$f?m5%O-g9iFy=~pLd*!UP!#i~4>(YMQrPt(6ZrS4;)_70Gb3saA z^x318_lc=5t|v92@w4jWq7mir8u2Zb?<>G_rN*~L&&HTGdLMg-L7I41eey;e_*AgR z*!$p5j@@(AC^lj^4)!}Y_P;j!iC73K26d+LdN|^FWf7z}fIk1&kOsWUOmt6a5t#dAw@`(H_Fo7*q+^UCe# zG9TvF-Jy;1t7_y^8I)h_7W3-WWR3S^JQr*T)FfL<_n-8-_lKt5>9cn}sQqHJy{CC! zFrN-)13K}e55LRkLL*bJk>@Pot?`K&mu+~(;g;GWU(Qz-Xr*fSKaGK{uOG_1e5Jc=K09MM0&=|< zYza;X_683Q9vY~}3j_Z6%xdj@aj;9T$^W@QyZ-*c`lAQyzcpAt(5#CWSzVyf_uB*h z2Zh$^`<=o1{hIZ0@_u)~ufAG&zc*Ny*IFMZ@An7%J_8j$`#&&Pm&;loC+~v;{-p3w zp5&|UJY#iRwV;ONdVg?p?tS$k-^T}ZUK>mW&XdOO;qyT4dT;6it!lJvB(t@VUE09_ z&rn_$8Xmp28hPu(cg=`2nEqX$Srf;F zKx~{tZ{%;!pUYv>3hR^h%42)xznXsU`$@6=mf(_Gxc`>uUhCfW&USw}cWR{S=ZK8) z=-s*M#vP)D_6N=qezjHkc6N>qt_alNhF~$U-(GtDDCfX=pr;Eozw=^U4U?fKzs@w7 z=yY}ccwc&ZihobWa{-<1LuZtILw~HZXEw0kI)CI2*!H2==$^QOvuSwgDSPy6IoQ+5 z=>pA~JBrP%jp(h7Vp};7mk;+k{hMOi)_`r|&ky?PVG`Yw-c#_ncZ&bSjOPM=+ovbb z-8~-^A9>FFOh7Lly71_&Zw{>2dj$W{-N*Q>q1F7tjQ^#ll^(G!deKe~ja`*1c4}mz zk*Ox^-4ZMY6+5|<>y{=4zz4Aq``rP)Kghq&D7TjfWRh3>r)A97mj4&V@YBUc_La}} zoe`98HNPq}ze~smHNl?e2WJLq?fl@l;Fy3N{3Tax@OFV_E8oO!HM)%Xf=|ru5mXJ5X>Q+4z!r9*+go{23&pEmwgh<5fei6E zK2S$=U;l46-st;xa!Ws3$h4n5{5>mR58KS?B^&*SKwQam57C9sdgX^4Ah*VQGUgLI z*sIZPz2aH?=JyTgwueslfW2a2-$FpAUL49Fwv-+A?+&y_#&@~8JfO4URkV;saj~X; z#E;I(L9565ivuxuc%VLfwqqaLEB17hZ|;rD0`kR7U-e3lb4DJzIFMn_Y_KPo4#-EJ zbjQ^_NiJRDLSEGgS-{?kC;PfU!z-q({YBHuTlr9DjGR5ebkO?mI~)G9WhziB7X*0D z3eb%gf=RW7F8A|2k3C{kJ(==-zu=GaF0nVgJzb!A$5I28AF?h9hW?3j8~>_H^zyr1 zr;`kJh-d5n!OXirTP|1R+Fv=UoRbG^W``KzrLzmPvPoaHBsY74>A)Vc^=yy_F|1k_ zhnb+(4rHwD2*|XrJ!k65erw`spS+VH-U|Ug@bKR{UhAugKlyEZD<*9{x9fF2SBgJ5 zrv_R#`g7@Q)%eoT*jICQv$=c~+u@p6$qgH(0)9F}>=QS0F)8|-4afKl)bBuvUiivSVxZvB$kf2OH!{Y{abeiI;QG1sZzUTRAaj*L1)h@v%?qMt?5t zV{ggTo45PaPJ7qzdniYY(43Vn&~^mqbk}D9`S4D{Hs?+~iBstxcdmx9BE!AvY+oGY z_31|U+qdVr$wzB_t-3m{;bZGxG`6;Wv|~0xYonSe`ksuZ1GyaT;|m+{8snV{@Oqx< z7XoW_)_u2(XJa6r=+@m){@zhc9_7C3gdDu$%1^rJygU#GI=Vo!R`D+%%-J;^;1zed zcwDd}poi`g0`JxK)%Pp(-Y@t_jKb4?cYsg3J|K6w_k8vF;y{hyT@0LwlK+>HFJJ8$ z_dYQd(92hCCa63e%oyAi*94ka)jiuGq={{3kfy%8ld~N!do*LZ#0HIR_5O5r#%`5| zOFQzf#=2v#%8Qjp30`_d|VlIxA!MVY{|DbG3k%Zs+2%zVFhjW4-2C(HW%S zwFj-nCuTes$OD=4U-|0-ZAai3T`1!<+b%EMo zi#z0_IpamQuX1P1Mm~zm_F#9ww(~!|^#8pnUCzf;GGxs?$)|?~e-j)R$OoV6o~*v& zV7@1q4)}RVa4XpksY>C4%txmnDf6JoV(@LC#_wS zeex}SVyhP9RxF+UVO^*X>t_Y(LXOk~{`TxwPODz@^~^Pv&$)n3b)+`N`8v+89pRni z&ycQ$i&nlK-|H)17c%G5@R@aLXc|A)2jb*2J6l(?r_PdEwCA*7oSv&f$J^?wy%ldU zt9A0!y|_8=ZSAAeVGWK$1KJvdoyKy=_ zK0Nd~D_x+eaXETyaCLxBKIz{SYzfF@n|C9vwP9S1wRVXA&<^t0&X!|?F3{K_CT#IJ zO&r8{t+rGws$VW9tu33Qs|&Q&mc5zF89Vf=&578EMfL0%#)8b1@+=1OqE@>=BUgRu zt?Sj&P=4in=o_7Ubatv23o`3WmaMtZ=qGD2aIYTd$7;gZd(6i(;g7tb(dk@&KB&0a zUq0h;PT1f*%D!>@tv-9%V()PQo9X^v(S1pJv0zi_n9dmg!JbxjRNlMLHFh`$JA++8 z*(6S@v8j9x`=L5%ZR9r_#J7CVZw#gbHkQq$kBu|Ib%AzFKo0-V<)iYO;i1|f=jfn# zoHJ*+3pBpcry28G!>8Hn{lK2b2I}|xz@GU)KFUUW>0#5BK>YcAQE+CE|4rlQ=jz^t z$g*C0GaT7}MSAxO`TWCIHeH`_)n|qy{cK(z>gzYNn*gh(*t$#)POza>g&=V ze|`MMr>AF6*>zgRmjrAsUiD)vR&Qke;>>-byF3{-OAE0a9=+7lTYb@5{qD|s2o}J-Q z15?3bP~8MB!jHW$?Cbij6b^Z&Hkn%=(oKy4I#F5{&C(7%i0{^jT1;1dzlrPuJ3 zKW)$UF3`$e`)gdbqX9V=1`iMLtPeEy_I;CF)$1|JIkH26sH@!+q6PX+%Nu;DZ5Jui&^EBz61#=j?Ie&_VZ24COLx2E42 z+%vdu@StEJz*~4&=8p`X7<^msvfxL89}nIZ{B!X6K(LPv?h<@`Fc;i2*c+T0JS2E@ z@VMZG!T$)}82n=J%fY*Y_Xh6^ekb@q@JE5aWAYcl$AZ5KJ{kN&@af>+g5%j5^?&sZ zH|5;?ubcUkGvBdf;^^l>>ZG0DVK8?l+jZx$ovY(^?tHg%cW665W-!0&V7{rDv;A)x z+s*%WF#qIW{;9$I?*{X~AI$$@F#pHF{GSH%e;&*~-OMkJeeUG)m%X29*3JK=nd5i% zir@UGW{&?~8-DYDYv%ZmZTQVMH*@@-ZTQXqy_sh^x~IGwxN9ocDWg%F&!4qcc^|h{ zIUl!H`M1Wt4MF*v;bHpk+OOed>*prex{x(>J0Em`cN8*9hr6(N^5>)9xSr#3rO{h)na+5)zt(1&wI}uC9Me%N8SY;?v}*%Cs3HE}(EE>8=hoQT ze>7{E9Jxb5Sz?vst%)KH$r8GXHn8hh6{QVE$jtJj<(+d1JGOOkYG+ zjLp|IbIa_koUPB=q?{Gc)C8WkuK0a+AU5EhQ!B3bqHoXG+ED?!HuQF>aq}aZdArXZ zpHXVxkqw`HM>X@|K6}(YzKso^`O$;<|C9OsLvO$PQd`=5Q1Q5Z_*RP99ah2fHLKvc z<0^RWvDtL}r1y|;O{$klwi>0mAplY2$RW7DS_&F|gM z-EY?K)6ehP&-e6m_o?+0`?+V9`F;EO(f#~>{k)!ud;7V%s~oGflR{T(@6Ceyby#ce zWUamT?w>uwdyfqd=w-F{CYd{fU4eSg>N#Moy_dhKx3PS9U_UP(PVVP?;5WN3544#8 zja|!~9sZO(V0*wuwL0UKZb1BXT zGUm%v(8@b0^L;56XP8`h+Zt$Ws^5z^J>#PT`8wEx4S4GRHGzIfK$c$a>>0}07#ca& z<-k5QW~}kYSbb~@#GLOtg4TX{0XBm%AJmgt|L^v1%60K+EpV3F^XI&XBf9vCl^)c8 z)o2@cF>P~^QaMyV*0j?CF@I4Y4{}bAT67*~gD%i2ht~1_Y+zh@D;Yl)nuce1kGvtY zsem8!;(1M=m7M>Z|E2iIzgW3{#Yw9eIn(0T=FS>^vGokbBmOOqxic)!@@eg&pzdDu z;{xZHtfD*bYOrKpk}+D<-gL$rg4*vMF}Gi>)qPU?&FNNu#_CiJPY3qZJ!1cC&;{DT zpfgCDRHN(^JHCqDQT<%4n)9p97TP2^_;v=n0zNDT^y6nY8})3j+Gi_X`Cr2I=jg9x7 zQ~P(B_T2^VxE!EY4vhKnqClO?8=H)+X{|2vme;&^?Q412)vaKcoNIMQs0%)qee6+V z=xPI>vDmq5tUHrv@>X|Kt?h4U3mG2_+IO5CnU|mZctoJ7HNJc~pI_|l8Vu*{nsKdH zKU}{h^R@;zM3-EPopYgym2=nru8TXV3$&KE>c<_bT^q=!{Aw=^wg>9K86sOlr(4aS z8($QV&7L~5#%P@o0TxV;g_&+Lkb~gk3nY8bMW!BpG&xKDDe|MnxAME>jPPEV2Ix~3XpbIpy zp9(5BUB+6QlhRSS%T@hF`|YvL255D+_vU$7)2eR1QghqI#+!pj+{}G#ZatGKAL1mg z!<;!+TAQ10M7b%arj?7Cj7v_{M~5M8D0?cjx);}H44#i_%$e|PrB@H`^ZNam*^KuE zni?X@S-(2qld-+l%ol^Q$Njy#r{}NpkN!S?{f<9h|1<0D{OdlpWK+@j^7xP6q~jgEjMDk?!F*TdVsVFnzxd?j{rUe=$Y;glhWx)O ziVscBU)j^tqxaLIUl6*ws=T%1p^Q_)d;5Mb+wa)REL-S#Z+>~040-*0fNv()8|=$v zGfq#NmzQThz2(b+&mW$*y@UC#%<1wD;(dZFO^iB&w0dUYdsB+GY~qW!d6%qrM?L*| zGW7h@7oRbBm(e>1`ptcRT;Ff$d-uEbZGG>&nD6R)^UM}?&>pdCU!^dyV z9{H!!GmB1kli~fp?pZR#_yNI#QnNA8=Oiq<-w4Qx|6kzT13M`r8uS zZLDu4-_(ZZhZu{EUM`#&XMH|#l{07V;xJ#G-Z_vbajgBu_Q{i+*}E`due!j$7&t>@ z40Bd8_D2SpL;Y%i9F4Bi!e>v*=W__Yp=>_x4%EhH`e)i3Gv@QQz#fg<)7K!kYO2e= zhXi7OPVj`_VDR+dxxv-Jb-^ow?+acRygB%p;O)VCg7*g>4E{9uc<`y?3xaEd>w_N&-WB{-;NMjJWbnD*h$P|8f#0Ru7ThN| zIXFFdOmIPPFnCt*9l@)D*9UJ6{wcU2n3~Gn5V+?alDLWU{e!BTimmknE37|sh4qK6 zu>SBB)*rFL`Xg6ZKVyaUN3F2_=oQul}udx2u71qyOVg0NX*3VvH{hSrn&s|~t zaVxB!x5E1QE399z!uo|PtUrE*^(U;b{w*u4KXHZi#bwrWoJV)LJJua`QFw=UsJqeq zIplrP8hD?)2HuO;zo3&iiK+2`G(z02k@_ng=m3}bld z3VO(|+&pas-bprHwhEitz5KX*jIJ%AYwDw(iTm;yiLaLjcMkCIk&LHDhWEcV7Ha9J zU>JvIjL|o)?#S|)QatH+<`^Awp<5s78SZ`78uz|t)6)9~z2CZuy=_d}8hLj1uBAqv z6aLkn$!}W&?{n9{d&L@fpSK3y=dXeH1#94a;Tm|aTm$b_EAX~C_qoJ5(Vm*m@$L(C zAeW$yu8usPZQKp*IZ?yzT>Qhc@}d=Ns5^r^pOJT^p9$#u_7(QF_O~_r;_O>(&3d({QZe%%V|-?7a4FdyF;-qoJZ z?^*-z%T~#|Kk<^c(*ij&R|Do^Tyr!v@ZFI+E|+4j4tEFIhw>ehXV38gpW%L?r8{*0 z|4`=YToZ%NAkF9Psley$?}2zOw`g$cj5cmIK#f{`ri1~z{^rt>T7+VuD)jwqiaIbo)F++cg6GE zjJ2s40EyKg?p=Tv~UL2mh3LLsK%{4x0*921m`<@)|s<+CKzH+c3V>RO$ zSvA|%a9cBCU1ul5(esr2lIz)Ba_t++t=e?e4y99N|e^}QW!BNe}A3i(5neEKg6wAx>PkH|UZt9I>DH;R+tO9FP%r`0p;V8+Au z7jdq;;L?oiEM_>$VZHCM#h7j4Y5t&o&Oh^d&tq%pTux@|CmHShUYVnbEkF2M`b!`G z*;28&CS%PrxO_S}!13e@1zKp$2JD<&Ri>>)zg>j@BaK~bVIia;Nu70)$YN&TF8_0Ep9&l%1Ily z3o_Tf65`gyj$4X~#XZtDYa+Z42MtNY&lza`Ljf#y!`4AR^yok3dFJ>EJy==kfd zRR7kUnUZa-3$*3rxdYhx^nm;g{ru8?&VK7;w7xiB-x6s5w+5DC-6a;#)_~9A6*tc) zv8v~9-RbVny8AL5<*`0v*(bj;&E(1w>qQS*z>Qo z?exs;n-18pIjB9Yj*v&TOr;-ZOXlyZP0l_K*p9pE82mK z*})IGihf$gc-J+w;*~4<#Kqo<4SnT@Ix@aXz%FvD?uNN#KmB-yf5-SCq2=qeQQpXN zuj1Q~AdyYK`Jd;oxCd)a7k~IcpS|T%)d7FR&wlYK|Ex#+XiwFpb#la{wa4CZy6}1? zuxFf%kPoAmZnYt2a7++4M$MS5?f^9RG@ivk?212O7`574_Y-2}SB$NT3Hz^!L!K)& z_y6itW7gOs&ivNXgYIY9c=+ja1V1Z>FHRz!)6>KfU&$WUKA)_S%?7=CKc%0i8_6YS zV?fVhz=mIn4fpM7WpA5D^{F=5Oi$_9oAJx@0$jS>LDK;qa;nD2Qh$8cTDn@=7O1(M zLEVAtGWNVYFEHjCzs?T6T<@A)bblpaA$HU=O#O<#dPSEbvC_kx0y*|OuT$ye;M8C? z=mKp=AYbBa&$xB+wKo28_we8`!8yT&!9~GSf~N;+_XWYX2iFDP6TB+;{@``Nn}VMV z-Wt3;cvtZ2!EXm24E{LyNbrf^Q^BW$qhh3g8}L4Xe-rRPuo(EA#a9MD9QR7vfpsuwxclK4y<7dN6ppozX7$^VQ&>h1&1=>r3 z4S{<`D}A1Q^j#JB`C|Fl>Sfky^p;F_opl`;!`&I z-l6Ki{-Qsyr;n?HmTz4C#b|3FUK$(acxZ>aoP8_VwIMv??6SA5Pkh=-1LNVH=6!Xo zciJi0GcJeXGD-i?&q?tXpYrR$6ZEukEVW(3Sf%{BHy*M^ z{ztBnU;PjBR(HC%XyR4&oSE@j_?@@4@P8@fFT{pASLMgqja}{!&yYI=X9Uj)@Efa> zIy-84Qy?DJ!J4|YM)n&6a<&BStmSyNW&OxNYh!$F=BtTW-Tm?e>fBkbv*NQpIdwLQ ze*FacD+lyU54)52@{-_)fF9?%;^}8GfY6EiPA+dD!mHL-2?p@|c} zt=%yw-!eQbhTeNiwzbOPB>t<{$p76F_}RV~Oww1jdtSD-s7JK`e7;MtIUr{)sNB6c zW6xfD)mPE4nLvNZ1p2iT=r5f>zivR!boAb_8k?^e>@Az0H-Y~A3G^3Epub=O{mKDd zUc}D*?0Ni(e1~&sdT0N_;9mkYW4&^yUd`D&?)%jF(B()R+I>g#^Bw8cwzfaO59+|# zX}>Qfhd%4hn)S7Qe_Zy`S^Lq{rMuW?zQw?KeQub_hOf;W&o~>#`F&b=-Eqaw_j-S< zJ5r6K9~Hqr@|4Z=v)!5O0<9bU zxwMymZH|kd?ri~ob_TlwHf;{b^K2pW%0OP!i*@ldmW!HKOAcF)k9iP^yW#KwRu@yCBvAf7AjWBYKQ9Iv!*^O$|&G-==Vta)##7|C13 zN$kBB^5OhItC&1JWA>?g4V{1T?cFW^RL1E4VI_ChCwCQ3d3L{&eO#cfTHOaTzf+)Z zZGL0s_Dly=zt-vB5%AIblDs%4@}I>noS3Gw(}s+Q#_O z%;k#ja%@hP8Z)o6HJ33v*nUgwBx5n)hkDT1rQJVR>;Ln}zNI^4>3ak5Dp-?OF|E^a%swksf~?wPhm+zrm(LLm2SxH6F6 ztwGh9I1PFE_>@3hx9e;rtF2c#VCT3xExD&>9p7{?tk?P;LmjeloDX$}$T6PP+#BLj zyer)mY%5;-ma`$tBmMR`S9RvfFEO&8ygE-}!@q?^bLN}loF;8i)dbdp{F*2P@L1co%3D199vS(#{L`?0mD~g5a8fzyELS z>(bv4(6>9l`@a6~z?f@4o4Iwm(D?Jp(AXvi_f9_(xVHogy=r(qV{2vG!DdXR*q6+^ z_j<~XugM&LYxAoo*!;2n-vcX~e=qZr@A-f(UT+Ouj!VZ6_I!BUNyT?%FVA;%WqTW= z{aKesG=1yG?RuGL?jGw(_H=ZXod&^$* zvqHapdi;8RqMsf*JJDMo?jO2*qqlkA8G36&<=S5NjXO)up^aPV*c^Jr`1kYoQ`u5_ z%IAuSI>zffy&=48asQ&J(`WWHXRl~oFSFvlF>Cgf?6RZQt-&#UPrkW3Mt@x2&-VSc z^mMU#_J+g%Ews1i-#(*9e!e%?N~TmFZ_=|;K6 z=UJk+rY~&i$M&P`2-qtQ{*5vG72oCd+T+f7Qub8LDwgAP;g_eq;kRBo#BF=ye4rV-x;jumHOm=%Ue3-kzG}zo&nz<8RFf_n9H0Deh=lG9oo7`pjS@h^*+JL z!J~tx1pK`&cy;imfUQ5UjIHb|yV&8G;ykkNwb|z^jk8a_mfQP-YuHQI4~1WjT3u>R zjSOR0asNOHN1nxYX!{RGo;q&ji7k0@K<56y-i3hfibL5^v8Wi-oV~A$d}r(EV5mcE z$XzZzKeC4S41N2btJuq@syXojcE3J*m#ev9tlN5h!z%WQp_uFrv{UjPQTki@JwvZ& zRK@Rk;aAh_eB%nbHid^Sd%f>?4jW${7;g(gKJlNejoVw^vl_PX4d&tv1XIF zl6^%m^oeaF4CxPo9`n&by4Y(pfx}KX)5B*42a>oDMP^$&oM5Aos;N!E*J1Ph58d_%{XQ*12VC z#pDqg^QB~}*<*v2e{1HgJTa25#i0DtvtLg})wnY~9q^;-jcjpxV89mn`0?aJu4-*x z#$u?UdG?42e);{075K@2SkF&yoyC%&w%J-e`{+9-ST42|H#WC%TfZE8Z<{>5bcmYELb09?a`Lb%yxCFM6E?aiAAntTktb?Rfa~ zlTpy6*X$ujynib6JEq6;mWGG@ZOyAavJM7xR9)b6R@gAx)8%45aPD>o+B@=`!dvgI zr)TU8%8gtN*XR>BYy6rEG;+}v0(O{JZPprozH9209m8jZJcvQ*6$ARZKurz#*(2s+ zXYXQwChpD^-DC~#kv4|y`hoCP?&&H&=qOp^_Tp{#@~!r&$L03oZTG58{Axu^FAC(u z9U#wD^K%)q%l@)?bH=r|%UCV_bm~VP{Y-lM`Rln$=4?L~pSqjmiC%kuHhb#bgWvqz z5{P&4ytSAAwh8j_$tivHPRR%U=&k9ie)&U>8Z~}TzVl!=KJ|bu*KZ2F?ma%aZ}Z>i zvmBjbQ@)z3BXTMRe0Dy>i_g;mpMNfXw9kk39Yszy^?X0y`~3@j|BDm+=hra-n>Ay0 zs#7$viofj+y^psw?aU9ymhpNNcH_i{Subfp~$f+6=b2L3#TNCJQO+2{&u83{BgM{UFCx%wC zhxNb~KJ5wky*GGAV$Gim1Amu5T=B`nFAdh@-9CPbAALIl`MWrftBTXBGA3tBK<1F2 z{9lgz;;%e=cH!L_>uYHg?*xhnMeKrHa^<5yynn9x^zS7wZl&F^Y#mOpmTr$#)F#0RbRJ|g4N;az4i z5GS(U-OC#Ozh$#DlIcCpGlI-IANIW``?~ZRTi1_9H$5kcMpxNZI)8PH{bc@HPj`o0 zk-1n_9LrDV;kZDZ#NAOIeP-_h4gc`Dba`lOZ{^KpE=KCW*&w$Iw9;8T?Ok28+G9Wd zN$b;3C zUcQ!(`!W^>>%YFtdgakOtR|LdY^rhH6YiDLqv!wbK)!yz|7>s0uiwlZj~Y|&&bT>$ z*u_rylLK=#?eA2)JiVIvje*VTSep&_^qYfq@!uDa#s114zu3o@3xfwo4m-q3?_5=! z-nR;w@idBiii5My@p=*AAQ=T!HrR(p8qH^%dZDzF0S%PuN;u`d&xnYllL|`Y3aY%&`YlzZ4bn< z>WF`fLFM~k#&UB(uqlgIrH`o5&qK(6VQ^-^p7R6y?-V#^=k`zdEqT zSY7a++!qAxdHQfq1A0HfHcAgc;=ShM0AbH>$x_B0yALw$cp07)< z+3OttN#ZBhw-0L1l^NT!H~7=6mpx)29_r)Vz?`4fpOyic>@EH?`uRQ5s~0+~@msBu zr4_$gv%kKBcwEM8<9qSA56QVA;OoXfTuu!%HgyJR=Ph+3UuwVDwfl|jUkI$Jvo0Wa zC=1{9LD@I#<%XYhwRdgBb(o8T;d_3tTrTY$?iWw?i4~jM+`ce#=R>b~jm8ngMr;BiTE@t&A@>8U%d^r%C2ECy)m zzica>IuGY&olNucjjd5Nvajm=*q*Qa5fk@RTd(BUSM{py@hn%X<6`~b>|sB@Do?vJ z#{1EHH-siubQcf%#gl*HtIo{r5nFatJotxBhZxqoeCZ;CfBOS6?7Owsj?3Hi&!K z;kEgh9 zwmaTF^IyoE9yX|vze(IGHxJ5uHgG&30&ucu3|KE$kipyLnn9itrb zNi5#geCNpLqQAAFmw#;D9WsG-mK;NJFwt%di!LEQ$z}NES9|w7}r|cvH??S-;`G9||{?jt2pWK#ydQWHb zkWR;u!KQ#rzPPWonSjpnujChRYrD@5wYTp2io=1(s5qDZY=QO+sV_7>)-#k2xKj`I z&jsS*nX?kVx@!5I`M*u=l3D(qkTJPi0=50grnZY-bz8A0IvdUnoL~1VAJjY4Ik2~C ze^~R=Swr(&7bE`2YuV{yoXlY@z7CzoRP6S zmml_*{bJ4sYs0=huj=Q=$K+p*O3(Qj(^G!(nNP#@kk(}H=J2<1CzGw!m+j6Bx}NRR z0UK7baiv_SbupF;H9O89cSaYC%TJq&iV=C&2bD86f;?BQBe%|T=OkP3@e5zk z>9j|F$RKkn(8%F0o|eCjOVPe-~)y1@=1EYDo?7V|yST6XM_FvCNBkfW%Jn?(?hpsTG8nwOD>CcPR4j!zVmxpxZOesJdXivhdn(D3s?&px)azf;FoamI5XI5rsa ziuGv$K6$}M$5b$he}C5S*IlwXV{$8Z#_s;I$Ggo;&;?pI`g4h&UvzE?mXpC3cFqRn z4?D$Fqnj)~Sl`{xKal5~*x1V+?;L7{Jr%R|e39p#6_?@qw$SL%*m`T_N<7J?b7!zC zV25+-XB6zF@0>u)A0E`2+O$^p+QE#gMvrdzJUb`x9iKJ&76S5*3@!@jrQiESnaupN5XiwDx zyX(v>W-LzE1bc(Oi+x@C8v=2w=gp+CeAB6()mPlQ-S_tIQFZRvRdV=&F0U=Ul}{d7 z;{TMsR>kH{J)Mq+gx=EDhxXZg*WB78cJi$+`{@1p@UcS<=n`}L#BF1s#*O8(;<=D9 zedz2yB@kn+azN&@DM*_M_(T@|npYfJe_NY9)7VR<7!dc+e1}yrwvH|a8$+)cc#anR zhW!1=q5Se+oSv0+I_Xiz_Mso&|Gi3dcTds3@SiuuwP>#ntz^p6b2Arf>)IKE`L;%e zedQ;=DnI(^fQ+Mp-}=HA`(cf~Cl3Bz=5*#28|$AR^Y=7wA37akrLPz}+gFCawSTt% zdyD1IfBpO6>mSH`T;9r`9HWtrEq%YW?|1b5uD(CM?@vfim;L+lk7Bg8-0fd)%Gb7@ zPrg2uzb~rhyz}2X{Y=2G%B|0u=H3nT?hO4(wy>EkZ1|Dr(9>sc*}u7;-#xv2TH6>n z7viajFa8Gvf1iMO-`EvFi|OlLG_JeMcz8$2r8XbfBZqaDt9|RvCZEZvc-$*ve$;tm z$5cRvF@JUj@<0Zh9aynevgsw;-S`jj0iBNeyO`TE=CA$5TQ-QlegBw!V$|-N%iR5; z&Yd-DYT#jk{IH?u^__gtJ?FfW%d2>ad+pzsF~6;~^aGjC1P6oRp3_3BJ$$Kk{SkqE zHOpiPj9iP0`yya`@`1mu9uk^Xgtc&$20o%3mr(#sG zVBc{8A0qw`pPcbKx{f_Wgy>HI=g5c(SR&~#oKWfZbuUNOALHRC+Vp4fIr{Q(aiH$XP8b9%C z*5s~u4)ZKwKXh*hjzIo*Aggijij@ zTkt+2z=MB(;9df{+(Y6s8j&AfDpVuC2vRy2-2kM`t`v|Mt-3O?+a~=zO|s zt_k)A|D3blrN1E{qjLV!xmVd*cip71GeWOtlf86Yn!V_E3flMgAL>8Hh+VrT&(F+S ztN(-f3_wPmW3u`Bw$R15eK#ywEiXG>8(uOsI<2$S**_(qS9A8n{sFYq)-Yfl_ zmQC#VZ1$9_vZL7QNE}-{j1C?URGrr*`DL zazmzPl^oei-tc`@9r4N934uNIRejQ9T@8{!eivxxEp?;kf7RhsXzCK*?!exUYcdJ{?iM4)Ppk{}9oIQHZ3e=}o zx@#|)@+K#{1MS0!xw}U0Kn%oFUS|U`t9I(UQZib;%1!G_*{6oZf=x&D`_vF0o|*y>`_kmrXRo~n0t*Lw{8KAV=D;;B2lh|6tI{6)U{_tNq1Gm%GXRyfLVI%`;nLr{^M>U|#2|`pu!${WP61IVBgr zIT>^zKZ3$@9KL9vRbtoK@ahKl$SG1YhM%-SN>ofjN7h7gRkK-M-5Mc8M3= zbX9Cl&seYTmCRpWGtKO5>y@ki|WQ@PljF&_W#$7lCzbw85fjCO(6 zjs9G^7wNNa7-#3kK4-&P`K)&zo)TEos)qQ;FFfqp8+<--GcWsw-$(JeWV1uvJR}f9 zu^Fz_8IdbC)}DuDEFS7t4c6yuHjd*9`Owd57kVDCz{|hO`f-0d)oMolT&plUv=g#YwB-vFRSXUm2rO7*it@-&!qdN zc*An&zG0sjPNyfwe6{b+&g6gOJXM|B$8Y%(TXrr6o-K5*3&?kd&Ist^vm8GxkiU9w zxgg`Ud`DgX=7~7Sx%)2WjLvwMUOO+Snr6e<0UO*8^;|=*nrrL&oSs*%>2PPv2NwpV z+j-Q`@sV5ozKj#*FS3WN6_YkUbzeK1_Q|O@mhN$TuFpDtai&{doKd>99RXQ8gI)dD z9IvyX=a;d(*l$dy^H#p29Tl*_JKx>Y%Q;=v#LXEp7H@lv)q^;n7L+XYYAkjOftvb4 zYO4HG^JL?xI+LT8PVfBxVed`A)Pfz5U+nfdZfkq_^^yPSLPx#ymH?m6e)=cK9N zc?K8T!k@tj^DrI5eO&x8>>MuQhIKW#;WIDRiS=hb;)gWDmb@u{)p!5+%pcPbZ=|0- zT*MpS4L>0tAipu~VLc2VV_dI}xy6S&H_h-ao{T=N{p{$e`_gZ!62mhHiJf z|Ce`wd*YmU{LA2;dHDNUT*NOj%%imBh%5leZd0gcAAH_vF`V!jW zhNFyAta@9g7$gmn~om3cpechV}`#_`NJ z(?+J@xcnq+0Hm2wT!g`EFZ^%z;LbK0SSg*3cp)qUhj*62yTPG}H+3Pb|5f_|nRJB9 zHVilU3w;!2vp!5mI40c^!ihWAuE8`WE$e0S@NUZP!t+_=Wn1_&bz~ail027b_~STW zzGJw)jJ_moJpqKgA9wN$;+oH_2W7TT<9-TP0vG%LFElNa?+}muxbP_QCvn7lKM8^( zKQnPdcpk>Z^t_nP@Ef*`?IMjbJ^Ra~C+?oa#W;hbe+POnc}&=^BaC&U;7WY*BK%%l zDO`kU+LXcbhjcjMn{c*=xMF&Se>E=R^MkmEPu2tA1r}iwCw%98z&3OJ!k>qWxMtWb zJTRVhiy^TIBm5+;1TIsaX|ur*;S(?O`p&$>E9s2+hy#YPJ;!mGFhjeBKAE0)A`X5T zcw#)?SUv#F#330X;mye6TL0p8#-x*wtJFV}`Z`O)@CQUJp zI5e_{DTD3k#l^NTta)A942NaC6&%x7glE>Cgm23D1p1A2H+4Jz2r$_`gTtQ&uGoj{ z^M~~z^YHR<@kg3sAG2Jp$@w#NBHeKOEaPH4-(8wvI_5WZ_%!NZ(iwW|dj{6Z^4>MjF7f0MI?)>@kSLNwx1MfM+|1C6xaLNB!-j85`z&V2Dk{q1g(=tIg?ZTq4;OJjxXedu6^B7l5Q^iHvOyV-{c$7AlaDN3C z@j+f_`tUP&ChmwA#+|^$p9%Xoo;z`|FWGc?4*7MVNKaGpHB}_D1 z=!keTaNe~89OBAto2T1G+z~G4h9oZ5;oX42c77)=(uoOwLWdK#ERSh;4jJM0;&S`Z z(CvGg^04kEoxv6HPrR^A99OLCGA_dB_~4IqFzHEyOwV}MWf$&*Yw|FR{ElHvL;n>1 z2!pU0Rzt&xYo;OoK7-4^Cyfw3>ob6hc?|4#S|65aWQR^XZ-Ynk-L#c`x>G&Pcwl|+ z;$nRbowL5r;$oeNd(##^GmiCt85iUEY~r89vuP{uCLAb~@awpfc1`$BxM%&T^BTq7 z%oVO4jd0$p;V>O}+)n9;BaVr$0`0U*!!{64{1F%A4XmGm>(=Ek!r!ZDkhF@Tg;try z&@pMi&?MoJo_A_5%Vm1vupLbxxPv^wz<248`fdIm*1xEt)sa1kXX1kWV&LI1!h< z`6FIfhY?(?)4R0%fk!(Z8XBg&@qUy=c(i}4;7)wr8&i%hi0g zu(q;tPXh=8c1V|9T&v_8rD~-$L#eV@TGzp~TJBypx4K%a6x@)7a>-OxQsk?Zysf;1 zESAb;H^)*jk^!&TT%k~NlhmV0@YRRfX|dD6P29*@?*8WaRCDeG3r@ z5JX#;jc;K#zJ=NNwp6SXYo)veb-QGG5ulptT3K6R1?x6(tyo{qt%kK{cZ5arEi9UE zVbOeRF1lVWFSeQ3|yHU&K zi`jZ3*H|;H232Pl?lp?;d%aOBRhD#-^}D%MTNV>$^VOBrT+K91f{HJ#D`XYk0QtEkl#BIxOIijtC#+N(E$OO@K#J35sQ_^27T}`X z#7CRpAUnTMYq+B+Uo4d)@2GvHSk4xT^?a?g+Njo4QTcMNUN0@)i==hY4X$&i2-vmU z-Rwe6_o&X>E-G6uS9LS;)zy3T(o$rUH!)qjM#j7v%`ScD5Eom8(jB+Dg?p89sdAfq zEW27Ot&|$2JDOHZRK8rTgL9NLV>7`VzxlOVtypO=Qd6XfEmy0z*H*Ljdn*f7O=>2p z3SJ$8D^}`jHKFqS?QA}`n#-3OdX6ZrE*FK1Wed4RPN6LfyIpjX<(G@d-;_=THYIde zo&aMzn(~<-jGa}t5Qayg>5%4xpsi+@42tH(EYO-v1%?SIUsl6%pxGz3`$;CXosLc=2Zi`)wU zky{}GanW4z2L5GdQKl$W9Jun9y<4pn!s1_AD*-O2I1AR|8UUOKR3j8WIqVGYAvGag z{SlPtPRlRU##*Fc~^R}lk3_a}qvMd`e3BezgCsavMmrRE8CDMC2Qx%#qd z`*LwzjgBlvj)TkPd#lw*mQrOkIx3w2RJ^+4j{i~xxCaSwssdgxQ5MQ(*n?UROmb#X z70|Cn!c(scrAED}LOOzyjGHkc$EY-z%iI*wC;}tUNQ8_hH)O@&SpiyE({q%1trWF5 zrCy`>vSD~|K_ZpQeRML-0o7Z5xwMGMvbY$@s6uO{rRAN1vtTH|Z!v<%x)D(o>_*k? zR2zl|x035-JR6jDYQw{z8{f%A<~ZsXzoV@x&5eK+mz70 zcadE2M%zk+xV@`h+rV@CoQc-TZ4$YZfJAt0lcTQUTK^1C|O5wXTZ4)gK zKuAmS)}|(H2nB&l8I&Ep|j}9a1pk!wgduOtcrMGmc~e5tZ<^t)*z&mR*G44TLlYaJrf{) zvAkv`L%hkXW}&J%4rS>n-S>_bZl1`AB6T={9q6-5flU*2WC%iDooyEdXJCiv?{=q zVSu)63&JfWL{cNv@aIUlJM^6hJxs!o=BcMS#*uH@Mm0@AP8u@}g+b9tClcPKanZ>q zOl>C`&gw3*ijhTkrFa))6Xo5N;(8;ui1{ayFQTfdF1#p8mFnW6UC}UX0g7<1Xv`#n-OV5!yyZ<;ngiXrMNTnjAyh3DtZ%I$ z1JO_*Vw!5z3D&T_jwk{QlLd0X%)*7c3BQx8m2yVHXQ_@xfUknoni6qT1G$cXtR8uB ziMYuU(QJsQzZBJ!a)FMOYpp06n+0LX6ox~EAx2y< zAua3UXhf)9*5OSen-kiSG^&c$DZx*jDOd*r^|~!<3lZert7mhyCB0~^<1N2jC}~zI zuatOnR>oFAKthbLZe<(yjIl$Ks<_e;#!LZ3(3}g5(2=sj94onXFpW_D3S%k|ccBDU zf;FoKjj9o7!c^5d>ygdhTe@pRh?dB;iZRc%L?M&yMB73#v8Kuv*NgczQG7V_IH48S zE%o9J>PIk*b;wDY#V`qVCs8yr1jt-0X%?tc#g(ej$Fn$S+pSb1?<AEO+=D<~tKQZ9 z0KQj=Xr$Lxp))JGCg8ip+-=85DX&6wsw(PT#h$>^#a{+_IxpY3F0uuEfzBDTKZ}4`Qp%3V7FMSVUhi12^ct& zE0tlH==hSnj-RVwwks9bwZhRm{)>csJB6Y%m|3Vk-6Ul%GmvCMK5>nPjSvf{wUe>_e{?H)c0{=QXoXtzz+F zmfn&?MUQZq!WfF4F#HzRJ(T2C7rg}{seb%&v34iN+SfB$jW6?~^wP-HMgdl*%xSQL zugSjH@%kUbQvp9d|Aq6c!()=>kKo0HAD_kBO{YJ;Em=DbIRzG~S*)DNZ2WOu6euJ! z2h80*d@wVC|09Lsoyqj%_~c}IVlq8`1IvCBMj3CDt2&oCiIMS`mJGC{k zzMW&X`>V*bQtrr}@~7tEBZ6)$)}RDF58X+|(xC5e_ruhSgt5+Rrv|U$u~4h7%0mM) zjy#kqrN$A1W~4Y%t>r%CIlyI8H@o%XA8gYTDad)bNb^)$z?m-Uk` zypVihAo;>V@`Xn7g-Y^;+Tc8BEt6la`P+kQq&rsp*(=*!ogFux+V0xbaT(8D9oL_l zB3R7yUd}5+w5d#ZOr6W4X?>~jgU=?fkDRngD&F-aJ6LF}PO9RF`9aB4X)O2RvMHB1{wSThf?+r5M&5C8XoU&P2Vo9t#LHFO&Sf3_i3nMaGR8)si20UVg54d?AvD)J*k03*) z>74>pW!a`Nw-~gHY^&pUE=Fps2tvbBS=n;BG0RUs{PD@=5as%eG&bswe|F!K=~LJK zJQ4SgX~ek|(C7op{+et_zL(8AfBFtFNZ!po60Ss}QpY#y^sggedyvA}BxlRhXE+y# ze8rUbi5x}f_&LuaYpKu<_qipFf}-Gjqs~A$uj>d^UZo?(_piy~fr-omK&ue@&=lq7 zvT0&|JaryJ0vw%6y&44Na=B?n5mo-rdA{HA7eD9C`j|!Q_b{uhdm?!r(ulu|;Y~2l zJx3{VswtGQSea5FfmA&k%!%-P+V>}~78{UYxU8dpM7CINY@-Ow)s&Mk|3glix-!62 za5UKIPVTbW2F!Lp#)piXji&)}fT;*(hdXMc#AsP`WKOTFHtyN553d#1iaKm;PLPt3 zWgXUW+e1p_$D%s^^|?tMO)oOYOEmF7sET#`=3G4CL|HC2#)Np2$$KVD(XJyPBy`-I z+wOX-<0Es!Iw|Co5&bAkMn3~0XeOUb)sv}GZ>o%|g6n)KnOaPy=8~yblBxU2)L=3- zluYH4sYWt&GMTFNrn0r|Lv(XCA}r)jIN-2xyRJMVvQ6eX8?ECew2AlCg0++?#l&7o@9#uQuN~w;< z=a;>OV&iVHSn)pNZ>Bux6Y${2CmuCd>Z;^PUHxxb)L2Qa(@l#|_rsX58lf2P!I5~O zSo7Y*sN0+v^`L==^9^X)TP)|6ya#^#coU4&)%Fllg_hi@`Na6ZDySQrA(-_y{2|Ex zdC>+u@E^?f4h#?U4y197;~E}Fj6ax7j5}#&!{=c0ZMJ1#RJUOBI9DjuO8K5g4fow* z!4qSJ%<2PM#m$pQx==))7d>59=_*@QKMp0Js5=ZAABF-!TWbDcWu{VZQR3Tf?BP+6 zuBxIlK9XC-jV*|zr%art>xWg}Bz3{0Qs5%J10(1p{__UVk+(Fe@H}$Mq6)E0l^xjF z>HrH*`j{~Aca$96!^8Bf|Lw1~ZC&q_$G(V<4WO5>uC=R5tOr*c=(AGAAzDlg^-&ML zoZeOuxeg%~sy+;0kT$HdaN7lYAW3gk{5TdsExk8@K6rZt0ST$L#iRe9WaVnISN{#KV?~Uz!--p^(C!Uz{ zpoFAKy+8pvt%zaNgAWJPx(Fn>Y#vVT$R7Oo#Wodu3z$MXZ9%3AX{$`|28IUQxBCOz zU4JLG_v(V8IMNg^55Zfpy?0;W>vq@QkL~@o_KkfQlS__zpY}J85S`Ha(m%aXg6+_w zl@Fx7IX-}J2SdW=pKa6fc5IYPFa^MEVW;xVpgA49O}?h8KW@8i)PoYPKt_G??bXrr zy9SV&f7?~*9VNbo2LyFgR(={YVml(<2~z{ah<1Di+TxRyY9&n_F#-#Xz?s&A^U-N zU~$nL2WcSiPkD)j#B%R)^-gm6PU22)C0DU)o>5xixv>jNqkC9&sE0&mqhqNrHBu?` zr9A!_sg(Fc$!@(b)mvG|!?S#N77tZERPj*2#UyLUP-a&C87VU>g~BqkmXWp0tYu^^ zGiw=H%g8E8nDsof^3TY5W<5_?l3C9q>v?89kF4jJ^*pkkM^;I))|(o^vxjR0Sv-iJ z$k4kE#UO6aCR0eEBQKCzF0p($6HJvG-F6KbaYZ zKp*#9P3svYre32#&PZ*Tcs>oeqc2ql*(7@K0+G1>2)Cge^zK#IaVx{%)S3%Bj{`Y~ z7g&dzyO;31LC#xM$f@yDv$Z8C<5wvrk{2||AHr&wL@d(cLkc2BVlkCvu{9*OQp%4& zS8D7ly@Mx*`qSyP{rRuGbsXC%`#=B6y zFIn&&GmZ>QyKpeB)yS%Qh)e=#e1cG$a{_9Z4=*-Xs;)}IMCerS(12Hgu@7UrVv8s2 zUcxr%2&PRc);&38sx!zOEM!BWWJ4nesdOiAJ?#T*kBUCwohsE=v5gM%E;^(P^)k7I zDzdK9Xb2BasuSr_gUzIe8g1Re^|U|ek^Q60#QnspiC3IRi5}L`NYH;A%&s^Cg{oL? zNDXtj!kF`V7M< z)*^?TSk8O&eOZI=wF5^#I`X%%@YK82hB$sSSpj?R1d#uZat~d}l_<&O z8lzW=>6&?odpdmK9_%c70~=_(SQDQcBp;c_Du`1lwk`~Nm|Ez&Sr`)Z+`{-8W(PnG zRP>T)=>kHqSYaBqL`(xe#spMXBK8UeZ9hIHgdgUn+5tkkWTjZ-WP|9JDgcq26PAI& z4@_$49{?D`)l6WpdGLA*U6K!=Cyum>5!!zHd1wnKPf(PoY|oytJs-IYUk8}%EPSCu3dl?iC7~G_qQs~_6#wu$0K*;ZP#JoSDpuwY_iDAZ)y7c#$~yo_ zvlq@^xqk8T?3LLICl*dj4#ktA=K}lAD3%K+P{oYHjadG{Gi#O18SW}9--FW} zdBBuswcjmqJ_J;?(=1=bu$LWFm^I}`TEhUE-YGs+zyxtr?dEz&Ztj+Yjl3DU$}Q`w zNU71XcZ!$XQ;_6o_-<1LUH20^ryvBh4l>^_259Jp4n7FSK!f#eVW{{H|4pRn&WIHRq-8461;_RI+LohWdobznDn#D#oVeX z_)XN6RXx}oks4-yjk{@yYn#3~LZ>g&A116un7%ner{`Y1w&|NA419>N@bQ#Aenhve z4?F}S5f*-Ki9VtsmFo5`)}j%TUZHC5}TlGn%Gg;{GQhFFkK>cT)$bpzaQG4;DV!mF}(!*wOPl8)G>Mmi-YP) z1`^5PgT{*G1Rj_i(*b&-T zfX&NQGjN-zC+?P7nXut+4>J%cVFu|~d?p=X-=i)s_k0g)|M^5FF_Sz#<|Sql$FcG} zs#mA0I0XP+NlV2lJeX_uro0F6aaqSwzW|!|j(d|24z6HeKn6R00<(yT*#J<_+u$E> zn=+r zz|x{d&nm5F@Z$r~q%b11Pl>wri7Cto;vTq54n9?-6|MrI)TF`1dtqY(QsAQ`OyyH~ zA|RT!9Y8?rf2&l427^Jal2{+mimQH6Ph+Jz>|$b^iV@{qrWEv85%hbK)Q|UtDU~(F zO^7vuB+HmOwuLV`UX?A94$6l1z$2-W;|t00YI1xnIljK#buQL9a?Ww&3^pf1#h>Vj zs6*LW@(;EILzxk5j`9c)Su{X}`CxMp)+xGgLT`K2jY-X$h}3+1$ZfJ{n@F^7Un7C6 zn&P9-6%`=(*Qm@FOSnUAo@oBSmp?4k@IB@j^ zAt`k#mmk%<957HYhB6%|;QaVG7aaOVuY>*)u-a7ZkOe1hIMDT$u>Yr^eQ~_Ikn1UN z*O#Fp=7?5p^yBk8RO;g%VFhq72Zx07z@OeR4u;S4IHY~}3}K}WF`fn~ zsH#;!2%|2}XU9#1;_2uuI3lwodJZJgM!LUB_LSjY!44D@6cN9EJhhrW3xm^*`IsLwU%_~G?b{m2<~GAjqCP{^Cs_tiTXji|%#p|tJ= zP|>Em$(jC%Ui|fv9xu#t{Fn6NvSJlzFRejlHV*j8e!oa^VkD9#lF7_iGV?-jCNqZX zg|;w}gz=s?L|@{u3XbT2lXWJO80)`w;qs|-SNg^pE3172FANOyUc7!@#l6sX?evAq ziA-yrdD*IwdWJhML_185{s!d80Z}LBtd7{q;D3)x@wr1RWei%1m2z5nJdXkU)2*TK z!&b=#MMgM(Zf=0$0q)6szIO>%y6VNp)0ZZ_^kSu&CJp2pX}HtFyBlmfy?D2lTfO6@ zR~yS>+DR{7J~!_jNuSD|Id}ea_R^U%S5IHd&Yin<^~B+WUqMKjba@4idu3g&^d@?= zkHJIbf|ss&sQF0xneu452CLcfsQa9R7qK)rd*=MzC7o?yzIU_@4j4cUoN^Yr`(ro?#p?+^g-w> zrE)8U!v_bjyCVk&c-W~bYwJnO2FXk{nW-l;x!z2@dSLzNVeFqyujWa6YwPKy%38ay ze#IC1;KIJHm_sU;fns`)1D-0bQS*SE0mTDU!(qFIsFJeEg=Rdz!n1FnThaj&`IU8S ziE=^?<**RO;tacOT0&P=dGb&+cP6|cQ1?wB7@EM0Ij6ReBb}hKn9?)Htl~W+q z+&AJp4Z5ncCFH+?X#RMiJyU}j~>9YC7Qdn9qLi*KKvLWh8#4VYQpz@G{Vz*cx z&DF4T4BK8QI8CZe)!1%|ol9hR*tnpB@*z48(%X;fudEX|Vbd`NGiB|7lgxxo$SefI zRW`r6N`Irens6kSoIzBBq@Gh~#>M$&VAI?h^h_!LU1$7Q4VG}ac2DAg7 z?+sq1)P=2yUSbNS86)~)&&?Pl`ZYRKm1Cd8=%MN;^cQn5y9lTv$MxCxyq%c=>pkfKUfdDI)kVJIbZ z;F7o|B?pH5_>ckIlpY3sCpDalhJsDdh^j6;ln$nq{0RR=r|wuT#1ke}D%CCxYMo4t zBvaT{*6VMl*BYgAeGKdHJoOMSJiP%0Z{``u>c$5mM{yntZu}h`@)poDOR{~(h7J!w zz7%Jvj2|D5W`*cZD}Ul54vw8S9$4NIBLI=CCC1rxbgj09#hw!_g~^d!u+T zuDON7RQ%_#TwLUdB#;RJ7Ym#b@Bs{0QP0D?6vcz;HdJ~Ho`FCimkc7eVuc5XvcYz# zY3qulg=Km;WKc)+;H4uQ^dE~j%Tz#WHh@i2PKCzRphuwMzV{AmmjDRPJder*hd?=i z3lv-g=n3qDEJ2`r83bLz#3I6wNJ!r7)oVxHSX&uHKn0M}1*qDpEa3Nzh-V9k3kIwB z;3K7_RcrGIMKT&)BGo6A0?^bBk;rLg1h_&#Tcc)&J|eX@zf!_g#g*&hJd20MpiHl5 zuX?~di_mpO=Z1_h^Q?V3XP++Fr&;@S%06AQPZ#XdMf-HmK0RljUbauq+o!PHc4dTh zX;(&AziS(F8&7SV!KTuA3pp$|EG?{+s>|f~_z~5j$?=KFYa0&$VFTBL4Ig(HM>bAv zoDSaLhS?`hK~A-(~H1TS{nD;yYjN^A^eEE~|Z{S%X zp1@kszlp`?l?z@U4)|X1;P(ut4_Su5r7Az5&tXbTCsvXlxRIDhj3*8x4&v`bVp5(C zB@QQ!BblY3K&}GFaSh#9}|@9lOA}#d@J|1C`l7sT=Nlo2kL8P+uz) ziI49aTP1n({fvJ@B7HBF8v-V{M|BWxH`wJ1rVA39#KF2GrvTkaS1ieQ3XRL?c5aT( z%y^Dx$rLt^`6rvh#-*N;OzkUCLc0o{ua>JdG~!;lxE=Vx#w_=8Z$S5f1^>ou09#;i zIye(RC!#l_Am9zuCa0>P{FdMF``8ExQvE%_{+^iG>UhPXLJb-0Q<(J?0=7EtYfMal zDkf%L@o!)>dH&7&{>|Wxty^$N%0b!O>kWE7{{&!wi6LEXS07A!%LaJY|6rhx%=+q) z>@owfO92Jon=0#0_3IinAWl3|1vd|HYfPb3e-SS44NCgpyKijvc_(J%b{sc|ENv2@ zRY-%sNCKp_2jm}Wo0DErgKyBSNl>@l^&HxZmX1Ig$&JF=0a6OnFlI=_ki?XEm$U@i z?!j{voGs3sv8X=I-Yc$Gro7K%3~!3ASvwlx%!#EU)a~sO!*5aC^)Ty0PLY(s=A@fa z0i|}R9nikkq^UL#Cy?x@uIIx6_O_&K1Mf|ULBK$X+C6QdfK)^S#P$ItGGavq8)O-d zKolG=o{y(6fJEO!ff#CKB#@IFyt>k`Dt8<&?#+fdFUSt{p^VzjrO#P_1UhiNo?9x4 zW8P8kxb~=<@s3kws?YS$_kj+EGw_aJ9R`H`VT~R5C_Xttlfi9vqwkFwZ+vs=<*^ zAj!4^?Ur=3ZIt*W9YEB@;@#FfhucIT$Hsj6B4l{G{Ov1Z%K*03$cDS&I*v-fVHQ}W z^g{^54b%D@CiHoeLI*nu1wg-2Vf1GpN!8NB*zeK6vKc4gr$mzuD871fqWW{?yVx1q zms@L8Qx%+`U6Z0_B|t~2@a=I$cKNcbIB6q{mFCbsrL^(1mAlW^51x5I$fy1We?M^& z%wV(wbZvecv#p6YbkH#$HPO%Kd{lnkyy1%?N-a5m>HMWDaY&D5y8~MRo|9CKO3KVC zjY>|a9H*~bxpXCa_1bgiPshU*Rx(7D$|Lwn2AD(aY?7*C$xu^&6LhV^e0)m_74!ZO zr(TK^JxO3h*V=AxwGSHxC+5NbqzU=mlZx%l(y3*5k%9{*mf^aEm8eUC2Xh?pytVJ3%mkFQQb-YmH*sM*RLae^0NE#zXe=#IeZ(^O4bB!P>_e_`(f%gd4O4 z^?DCb;$5T76!2CmvIjuM6c%2m-#H+x$_C|Q7f=!RV|`z#m-PVgw+||srNbMKNCbZ( zuRMj_mYr4n*;T@yu3K~d_M}OOV~VHuB>v)OjI$mVLj%V<OnySp~$`F$U_ zac~8H##bQpj) z-jbG)Tm7^qF3=bLC!lOU?`>!FXe3MISnT-RP2|M94u!rVO_Sf;{UgYaSb^gH9TY_> zbXtAXgeTMGUQ|aahGibLT^{S_ja49nEmgfS%(+vl2>O&2l#*te@&sS1t+Yh>q9#)! zuA2`-#Vuc@J>bpK>LdeDL-Hs}NVaLo)|wzy%JfX0He6IrI;Yli_!K8onF0e5j?etpP4W&RSM*!RzgM*U9zZol|TZ7)PH#BfEo{*wY3Qg!ts14R(Iq|0?iP2hna5CWJNE%hb^kP|U!$ zsMN?zNiuOBhF=G^E~1pR3idD-GSd>pO?epC;$s}f#e0pFnNH|+d}C$V*rFk|DRpHg zJ}3~B2L{jrc!0C0_?V=$3GM>AAPGrW7r6K;b(c0;XX1xd<*ZFjrbxH| zq0_;g2Z43buyN}^U0fQdi^{-Rm-I>0%W0hoXFw8=Txwu1F85!cIJ80F!&4f%^{F0a z7@%H$z=K(jJ3NVsI!;uq*E8|wC9Osh6cX5%O-eu#wz9asj2u*uWqM{&xB|efc&dz+ zeB55Pv7q&7B zT5$>!q&21S#{Qy3pbmJDLR6gw!iv)Yc^Ps(8!S7aF|0UtjO^XRjY^<&aXMI%YA>#d z6Npy70szFZu6O(KjsI`eD%FTTCk<~NSdj3cYKJ;0(=(3_D?w)sqQ(B7yiiO-d12=e zhL$Qtr;N&hRyqv7H#_fRPn|5XkJrt}JxGUR+V9GOAt>Uz7q4CY9~9 zJ%;QsD&WQ}irI|kUB!W04k#Qm1GF271bsqhcPgey7G94qyfs;;ol)w~O#H+(@)Xt4 zu&y`Y3sn{RCkw;qt$I(*p1LMHhIFCyY9LpRON^nDic5HDj8}Y(O^tfl{F0-?4s4z3 z1THqC|QR%mOW_n(+IZQz0 zD6W1z6F)E2wR|2`hl3?I{P;K;3pQ7LY=*e(q4J)Lgv%N=8z}a4?ZUj>Q=aL;#|f_p zKz?YY2kF_%fRmOD9@R8K+2k_%nctK?Dy0Zh)ch6QB-?RVGKM%l)ln=jsx`P);B%+~ z#%NEyD&w9R6mB$U7b%uQS?VjK$r=gdOwVOGi`FZGrJ`MIx`l%DrebO|uwpl&Xt~*g z8L3tRa*Cr|A!z`puC50*O^4YeOb$Q1iLFLDUk|Fpvz*yDG_sOr?Z7QztX{fB_}7Fqq3g^cpDV7K-J%7oQLo@OE93J@q*xvEwPx z2{bWbL>}e*1o7nnOT_n`L?+N3J!w*LBUiq(nk#1x%Rr|d)P`Y$dFDjYB+YRugEc|z zR})9Q%n^G0Ifv7o$3z3wZse+_f#;2J}Er~!W z?Xw`7G6@zd*a0VcL>CIqbP@0>FXktwx&Xkt2;HEg}sQp zEb9vR+|k8OC<#mxn^d?hi2m+1vcJRLpc0Ky41DVlNS*<=q%%_TLx6z~I-u~@7SN+r zOB7%`Rz>MD9$uB5%Rgb19c>*0fP!96IRf-OG$9I5yKhdKWUIM**Z`qUkg<}fSfzMg z24{@^w@8X@9GM>3P3=Luz6n<_NH?63Jx~+&jjA;ydfs%nUFN6>(vN2zIS1-bH-$K~ zsCqtzl}1*OG8EO;5ykeGwK0tcnv+J78JYhMz0I7MXi+4$oOq8`RD5_1O~&a6Fh5}d znh!th0k$NnJUC=6;p>hd(36T!RM)svZIg14D*~<^u#H765BL&nVxrN;8g$TzeIaT@ z@_?6Kd@x*SU`Zm{E;TPI4vvvRE(vZA{Br=pQ!niQhh}gJIq2k3L!1&47_FS+g%gIU zR#77wwbXh*oQ2d<;3H?o@kM%3t4?STs-I{ILWkk_A;-6k>W!kTNke}(h$vb*z?zxL zMGz_uk;k$HsFQv6-f$@94(YJEH)H}aEBt6|*RRrxXLME=K0DF@YZ7w8qnbrjYSS20 zoAEQ5o=ZG=kBCsyiPF;uTQw?2ObbCjqvJ4jvR5!E3A>|qT$Iat0aslIGr)|vR>6r^ zSe1CsAcCt69`?hrshA`>90GHR$4o-QMO{x6ETsq{4%7r~5J^J7HK(H9c>zaq_88HG zi(o7XxE+8BPe9Rc&}&w4cs>@Ltt!qQ2qsk9gQS%Rr#lD|_X3oNx4GtK6(BgO?}0bD zRAzdfgXfjj`GaVUf?Ky&k+h3k6a%ad^oY*w21t9)6Q?&vq=h$$JQEZ@qtSSC6ss@P zfs1F56eU-FSsFl-{EbKIZIagi-_KvUeunpk>Sf<|`q%fr zG94SQ^~@EaF_LMBW-buCG2`KJ6>3tjUPsMOB{uj{DAUq_(nEcs(N)MGptEA7NG4Au zfzpF%ooXij*=uSnM8owQq!qdxE+`gozz!@2l%-CaaI=hITI}1Rm5(d|pV!7Rm>d)H zgsw;rw9~Nlp;ZNJE&v;mjf6aWL=KfDJ5Y!8hQclt2=SUwzbtXwk*FAi)=AT!-5VGj zg5e3w0RH3r;D=^Uu3RqekYozLQM0vD{4WQj91QUx?*up@e05Ix@%#VnYXBkAlppFh zD41hspH)HA#=zW5+Vr`8Dk_f@&;}F_+SdzdWEJiz46Es*NTe#g?D+o6sbZc zRTvtE?E*!hZiTme^rp|1%W`Ha$kd!2XSB82eN$Xv$J|itQJA8 zROG?}${@$a14UK^hoNJGl~6Wap!UF}IQ|qoNN>DjXg)kpc@|y{Yyi%p119)5 zf-^FbO=l|CZeM4cRi3ZxlP-Vr7ni|9(YlHhC=l3V>NlcX0@<92uKxmfJqoa0vu{9xV>PQiKH z4{imyU?Io{g`gNL221k2F!+<7^@DSM@U$O%C^+v27yRI2a4EPPd^orgTn(-T*Mn~e zo(Y}}KH>+@`@s!A*q#kwGL+>qw=LJON*%hoR$ql)0rM|)%OZbD6rBpp(wb(tOt3u{ zjG5e+DAN#_;nv(HzjjGz$~})I@hOX0+IXv#dn=+(;0VFaT7z|-l@0Ww#8UyzP!fZj zGSd0+?>M90jSgB_cF+k^_DRXEB6euI9BKm75GDmM{))K#L4oL6dBZ7KnO>}&j_OD) zsLMQH4BG-k8* z7C+aV7i^ymY`dh`WjloI?C=xkS}cc-DL2@@7))qgW!n0LVJL$s%1I?Q%<&UzaY8~RE(J%7 zLNcw4jA=!BbWC)y@(LAeRH2UP9k8y4s|T>N9OTJp2>aZEUMz6!||Kz+`5u zm}zam)b;S?Bu!Yff$t{UCURa0(&Twu8HjDuKX8$5RpwPJ4M=u1I7p?U4Nt3~=}%pw z!Gpp`i#0UZz7`xd+ykraS}ttQvFplCXvoegc~R8$;4q3(o^jxR&QLhYs@VuG)71eL z$n*`tD431)y73QPcHRs0SMM~gEK>wbq9V`pc#}&h9SDhWMj+B-5>torz0XmPNv2@fhRl@8NCTad z=p$je!xDKgnN1D}2)hFtmAes4gq1^w@hBEQ{>gLDRpr;X0&c3&&Q+9!syG_3ii&AT zHK78>9)ovS&liG|m_Eflk+cXed+{`)8=`suW=}lx4jdSPidUUmzKDXe!2w0#a^wt%PklWzK0a$m7(y@o(LsL_C2%42NTK1rZGgHJ z;N&Jvz_7`q8DvSK$@C37khLwUXk(Bs7mVn9Ty*<~uPfq?n#PcBAvmJbQJjc?KdSSH zoDqed5A<@Fi&AtN{10pqQMUvXQ3%F#5ymmW*4zZxQHbQlU{WV{y2U@BE8~PA?V_!R zwWyQn%Q&_nZucV3lC2IpE=_+|e_UrlfOdf0UJh^^#tJ5twFX6BvA|=doexDruA7uW zRj5SDBsYgxA*oSRDacsklV*Q?p%uYtN)#4yz8Fk8_FzyD%kbm=DaY(BpQAFmq9_Eo z^h3r4l`P;0i3TkE%2S^b#BDUJTCsDbv;b2s<_Hs}TV*6uh@B<|*~`IU(h$#0g0VOq zs=EC6p-XgEvC|8*(#oDp^?P*Bn_~_J$d%xP3sP#N`HHB)zzQB6vg(oOm_`|uV4O1% z47*n3@n=rUH)=7Y+u3`OsfwLN#*YwEsn~G+DI@9FC`>#Og&eEF31g2%pBc2-2^^ef zhfB?ny8UwY62lUf@NQWBytIbs82F;w6%X z`BQm=V;3!$t1)l3wTdEhJ(v=23UQgFO%$hS5t3p)@e^lUFH&P+0Y{Tr5}h8p6N^_T zA%vF9V7n0STz}+g*#tsMQ*Ht9(iUhcl;bAK*ZUS<_Vyx5NU( zo#3FI7a}mmLKrffTdk~U7LZ^}gTeOQ;DDG&DRDubtzz8$P=p1xEm=;Th$o?{UvB|KL$s`7XxK2ADV-3O_D_RuPYr&*q#`I`U zqwY(&0+k`xi0CkexEJsCHZ$Vu!L+qph`bNIZrbio@{g0(M9msD5-soWgLtoUi3hX5 zxd&_fR3RQuWSL#cq)kZi-v)nq80OM zWdj^jd(%KG=p}d0k1t&YH^34)95GNKLHER#pyP~MUn)j*XS=-tBG{SbWBUyPtk&s3 zduS?+g^!OtNYk}$Lev#ZcP1Dy8V(#8=N~a+$Xcb$Na}csjG8dgjg`E^)*u86L7Eb7=Y1^$7uxsQnB&pPTG|LvwytZ%(?`B>3LyL(+vREJa1E4UeBV`1W)0M2h&+ z56y>@PmB56YAK9Q!>lgLwl-^Pw^g9yAP%d*22h-ZfuktmSHE&#aeM}#%BdDSv;teY z&liGUP*3GTuzBJ)ZNDk)h~n(fR`KWpIF z&ivuC+|Imo1%*HG`!1ixHu?**^JmXpJbmrC%coNrexQ32^Drn#8DXo7i%`A~;ItTq z4MPEkC%6;WH_nb~wT>K^H(tlFR9T$RQOn)U63WKms|dNYcxhGb@Hq?PVzG8&{E(5| z`1u2bs8b7h`2Cmv?Vo*t_b>d}zx^`rzlwX;E*p zVzLy*#r^eQedKye6@cI_KAa&b-eOpAwuaMpE`2@xq#jdl_Dy-?>z@Y=aRq75nV<(H zBk+|sZ0)|}P>h<8ArwkE$99NfQ8+uBwCVQ&44}wsFgFM5Ap*uH*E4fCl#^%LDbD2M z3gZMJSqqk(tl6OGit6< z^&U^p*yKa05?&>b3UlHHQ>92$Mnm_5&5?6sm&`}I;NX~cUQ_jr&L_U~?DLLYdUR|I zXDgI3X_m*vaFo!?(q?s55n7X*^3|zOVtj^y)bsS2LH;n03&L)092X?k+9%YhS3KZo z6r7Q8-m`&IT#i$Gs?GT3VKXJug_JYvkNdCa1QP1sw;6|y>&5MiA3kml=t)Oqr_->1 z1RzXO9qZqxr|Y9t0ejmAb#_oKc<+hkDuwYpcFsTzE9KTNHA|D0Q@cY>?IiAP)ol>Q z2{A!R&8AyxrebZq+!Ms!cmw@~Q>gKi`uOtqlz&VtzOcvRA4a3x*^BzDEHP;>A+5F) zV^pE18?c>9N1CI?6doew8RF@>Z%>xOxl%mEOz4PZcoBNj#{Ni{!SB|qX!2`*-|$EHwZ(#N5r$0aH~`Q1`Zj>J^SzIIkJz@PmwaPu0S6%9 zP-1*xqYn#GhHu>>mmmiMkK(z-MShV|g>J1#9FE~cTsl<>KbWv{8VA|BpY$zr9_Dj7 zTS*OByjPY)UzCB;t+C-b0oXU#@PT3vsOU-%#a#(@3!cIGhQtn^fu3SmJ&8y4*j3pU z3~E#C`>^vadSi7oo6i#l2^y!YZ7ox1>QCk1W-_z^%=?K^IG5bO0J!P-DKM&=B#W(= z-ynXbz@D~VSFimi<$Xi77Ay=OlLmcF>thRX$_froQ|=o0$n+ z4x(%pKRC$J@n2vm=aoqw?lw822H z2_#q7Kn}J8lB@3s#IWxXUE;&aLJygG-2_?6>R2~Lypp!msdPA&29@wL5)XLZ3HWj3 z3`z(6>Ejb#dU9sA3z`OA<$ji6;eF-ZE?HTikPc|vObMFj95&S{K}te?o5PU`wKkok)`*KZ(E z%AZC*0U#+GUl9aVzk#WpvjyP4;wPqe!o}9B8qD7S8cZ|3pB*&gNsR9wGEF&7G!PLp zKm}WbQwyC|a1=8Od#@QkTY0zZG-7ZJqJvV7JQ;rE1aIKb7+ri?`Wj3DY=On<`u-B? z*bA$le*FTlFyPY+2+qAjEj9-Rl|4x3`DbCz|4TsYqn1ZU{T`z1d6sdwLaENw`4u@Z zIiGOE<)fDP$1Ye)V-8fpdRt7YJN7I)%P^Sk*bAmnz8|tF!(j~ex?`A^Wq9}b9MBPj zjq8Cjt{I{4kE-^MljYsqK4>P?RT|VAm@{NX{q)nxsi}ZM%oKS-ZVHS$IXINOadSf= z$biH0C(&QvN``TF$Bv*v{ey~WnX%Fx`y^W9PmtzR6tPWSqbapJ_FYVX(p0E0dD9q& zpl%tC)gAl65I-EFlQXvz`*J$bW;8VG@YNRJwkAJ?F{wFhckE}wQpTke*6;)?iE`9n z4%Czcgk>_)1o&HWv}$h99pk`;AQBE;9z3c}ALTd~O2w8afS;J*kjGcD1>IoJz(XCy zpxJ&e+D9HB$>GTM?+A4|0@aQ?o9I8I`kTGeS#yr5;qeot%L! z@+PHkfINSCijCv&1FQ0T!J1k@;>_D}?&W(1>{BizHP$5F0BT}4-LWsv`VeFEJkZ_Q z3B+Z>v0op;aA?lcxrgI4J7mh-hdgPUC(A61icFZ?GN-@(Y_h#*(C_;PrO7shB1ug+ zEuh}ms^Gj@fr4^1A%jdg6$J086Z~+iDqZNf(Bs57D zVPE`nhyQl|P6+D&ASrRJ9{E4GU#84E}|gm#wqw{DrF>{YHYD0#MFZz>t^S|d|Y zHSXR8dNldN$^Rkq+glaaglq#_Q=BY;9#*&S4Xb0Ahw4o$2kd%-BWOyy+;{K#48~tS zm@&99#{R)r=l^uM6}4NO*i4hR!!q7_KF5GI`BvPa+r8_h5RBrG`1B7j&oLYAfhLq} z_F~JBf%$p}gyh4t8T(jgW$1!2fm^qwsh`@ky zCO3nr)*`k!V?V6OMlA*kb1-b{p;A1&VVixVmdOY`;ISzt;^rdLE}_vG7GZq%$VRvMq7i;Uc_q@b#Vm{>Mgpv za?u7&5*CMHi|!(YdO-MBH-oLVfnmYQF6`;rnkwM1dS^N1o3_L$NJ|;^HaR1PWf^0> z_^d#68RdAWQt$C`QNytNSRqKP>bBX759pdw=WIhw$QgIi(Qs77+zRvH2UHC4tk&cV zK&r0BlApm`=&?@z%|y7>sd>=!!qL+d`w=w1-(6~UcP%(4wID1*Bo1ekrJvMx?^8}))u0HWuCTqY=@F=^fy6Fug3lr+S-oU25O%?w)angV@xu6%t2A54F z%;kteq-X%uj41Q;j+5CNTX{XfDy^Z;(~E(#a~@qrdoicEPLdc%#q4cY9^KSiXegol z8L9xBWq$Yf5JT=Vzo`IG>ST;RYe?T$uP-_t>l_^`8xc-<5Rtepld^O?> zP)O*Zxys43CI1L5fn-y{7LQTCd;`Ntii>&FN*cY}vif zboF-k?st)C6{@=GyT8hb!un^kuK?#WU6>k20!diRbfIeQm7-JZTcfYFb$xLD_8fOGnw+%VfRQov1l6EEs3lWx#Qo%EonhR_b9m7_k zb5s|x^=KIg8hnr++{H&+K*&l!1LfZG6CP-aaX$YrCB1B>l$XsY(lWJp$Fyilb}ymQ zfH-QjBPg_uZ3kp8I61Ak0`Sqtj8@&O)=f8{R>0IMqoI}6TOiG#uszuU#gRWb15j@V zSTjh`GTGWu7q3A!1I6&!4Rwg+LAyVU%J|TU%bM3VqKUhh(I%!}%^cZVHoYZ#GhhQLvySRFJk-KgI7f!A_)sKQ@I)f+kzOo2j5hkRjI# zh5UZ?T||?^>cOKk#bZ#YHif_(yx9xqQz;vgtCBQ?#}mE+3xrLG@S$+;^YC_2aa+5z zq4VwT$KH$D_un92fb9Y{Hkcmx&$h-67gZDFxI+$WtjOJuy=*J#*k@XnViwFpWY@>O zEd=#2*|oK9A_j*f`q+7=j~}~ap{jv|l`BPI(vj7lrE)aA**@)hQ3=Jv*!qMcooU2z z3T+aHyY5(VSX9cPsOx5r68O)dPL{Df_9ou=jT1%IGTlgV;DC?aWshU83@jfs2cqWM zvq*ejjI7%<<{yKu+H$tX{u;nr4lpIdDdYgc-gX?Kqa4lV1m31W3ZtrpdeRPklbGmz z=;-eSXz4e>jG5T?bU9GT_JpCR4#Uwe4;l7)i+NaEInps?Dtn%EAjf+JwB{;doq^ql z@|J#;L(!WWgl~v#9m{^%(5`B_6UQ3~xl2Tx*#jP8ajDp-lhTSH?b+xEc7*UOe|SpP zq)MQgKXu?8)je(#S(Y5-XpmQ69l*%2q)w*wXq?P2hdm`*u&&A;>Lp#4Ma(;bmSR~T zKrK@}gjekua(Go+qq6Z4fXo%@kM=+$wDrSE(P3VDsA2KPs6RrxeK;!f4o>f=&Aaz} z2#G?qITFAb!L$y`K}W%{=Nkxbn4pyQf)bxedefOV_uNu2M=+J>NwSS>_YhvW=NAA# zAd6K7!=(K>-?W7dX!Q_kmO=)A37!yTstnGtwQL#59`I*7^Y5WH*V_K}d}kD|j-p&t zQ6h+G;4pn#$pH2~g>y$hYpRsR-w#HM_4*ILtF=3Db`15arF_fRA@D!$CKC z$6QzenOenrnC(zgwkfF@)=h8K&iL0MyHb3GAo~b%(ru`MhlQ0cM^Z3gOnLTA$XQZJD6mn+beJEqDzeftn&rGrW1va-8h?i5<8*xd z1_G=HT6a8a>mgFD5VLBjFT#wE-NdS3xSs3vrAHPqVqQWCcOJrRkFA)M=(1j)B0&90`p-K_DVB$Lbs{z`1gp`)vQnA z-{;f>YY{WD#jOgKbA^Od?jd^csNOri$qvO91XJCA5H0T?I^~6KRtERThZ4hLH+)J# zgJwfcJ1m=W-ZX%LiqE^a{v{Iuv}wbP$aK!y%V}MToXwcro5>2RAO z7(}70*7LWWG1Ws^$;xUye?h{qlFwfFyJ4iY70$E`D%czjWhULmy_mvXDEkRzGE8Rd zSCoJ^lS8685x)~EPi!|e5qKyq_dp=BvSttUH`d3^y6-x&GsL~kzCrL((*xjMoX>_B zM!GTjnrJ85+04?f@kd)M^eoCU zTg2Z)k^R`A8cMNy17tRv9=iAbk9af4`#WwKKg2S`<4$Gg3KBabY@uP*pri!b51aL) zE|`BrFgrJ^%;=VWcoPtejIkHfv8^Fy;}Bzz@*!ffLP}q$Q5I79UJ!N&=eLnO?7x5R zLi!y-nk2y+zs_d#|ACwQUo&}#emmSOy+;)o+M`!##Yp)P4!h^46o;ilfCH&X3%2JM zcjB*2`LxQ4HPCaF^2b(cIoFCAt*xekeSJKlHAo1YxjY@+L?VHc!MRfeeZ3my9oPw9lDcf*2H#ApfISU1;wBW}4| zKS@Tki|W5}KB#3dYV}fA_gBlZAvry5TVS2ZrbQ3sD8Vf07(#2~Jl}-RO)JqG z%tB|bvZGb^&?>___PuH%Tr8UPfCxOH5)~x15bM79oFij57i^Zgj?8JLC?)D)Dj=0c zmOPFN!%n!0N}l^5Y`CkSeULUn@`SVzcH36iK!c3W+8`YLAo5O&T&x#L4hab^Tz{pv zU+Mq3snX!pLX)OmSha@r{$Fe*ZO4&6OIjFS#2peWP}98;qs;;@Lj9`h=)Iqcb^p=@ z%R-y`t_j8eJ8J8$@%R0otgfzrvR28EGet+261EgezME00{qYO7HE(F%sYP}@03vfh z&-))u%I-<-Gz&Dz=gp08S_eFib(3wXrQoJ@K)`R4b8^PV%w?xZlio=8>*F7%$VG<~ z=!|gu1a^&sQ&1b#iX=5L2wc_E;hGxa6Kxu1_(aiDROpfZa-cTNkv%W%gdNEU-f%kB z{fAFG0Q6+Z3CpmI$N#ZG&35;L3#r)17*&(jCi6c^$HP|RQm};aN*d#04C3PB72|^X9 zXukc_0+>t`kvsGb!tVX=A>q8LOuM$6{aOY`5n;{te=ULZMS>DQ+W>Zy@ymSJ$vUkc zqcz9Zr&Y}w?e(4p!~2h+E^6zfbj!R`&66y9!0$m#ISjD=V3LT~V|LHd`()&VXQ6i5 zt}=oT*@%!j(~*s-*}_Wj`(HpG=&hRF`?IK(-m9spWq%&c4pou+mjt_!-LUA%{Sd3& zRI8CxVPTjz!@@9en!;=YULzd4mfinX2#59;vvRcwv3hY6err?0u*h#mDb5b;?)_M@ z*wx7XPa)Rq!G@cE-{92L5crTCo%=B}T4$vFm=?vbDu~}4kY|Aqah917=uG- z5$$l=|6_#ck3g1FqK;Ka0K!kBRek){g30+g)DOx925FZBVjFCNnUEiCeZAXV$dlE= zLhmy??Ev2|vtd8TS#AS+CMc-nZ7|fXuz)kEGJi8WmUSF+pir9(D?6KP6Y`ypOCm8E z{O)~MOrvZe~4DfLXk4+mO2DX+Mj3XEV;4ca6Sw>^%;Lkt@Lx%ZKA%RmhaYC1lepd&{ zL^?3ugd@X1_R1&gKCp1xer~Lk@)I+ z=$VmN$LFuAH|Ylu(7Qg23SrMK#xXoixn)ouyhI`~l1O{FLt=o7H4mc6pr+7cWd==S zev*`CUVaAS6~+@J!`S0Mg@u@jQDv-m7|bJ5bo;jSp6u>-eZhr+5s1Wt7Jw|6Wb?bt z%Ht;RiH6sMj@SI)e(-AWTF~JK9UlogUJVw5+rdikVo(hVK{3et0h~r^0d}lZ3PEqV zTEm}unSU6#&UXloK@ty8hzH38E^Jc5F(Wt(X!GbPk+ik zu~ULnp(m99fGfrN8onQC0Pu8t!t42zKeba7^G%%-Uk3TQik$a?1IujA<2y$(?~(KP zutaVd=W5|2O1E)-DGsOO`Q74QGRV)s;2aYCg*Fn^i1+P~983PeR3VK|>98f}K{OW* zeA2AptIMTDsT{g?b7V+9$SU6f67WcQJWPQu592jnuy>JP4N}#ZLN!KJKnmXsPbIeF zJf@HbGLGeQIN1-MqvAKwE)*-vrP}$@0=K2_&z<6_QTwmpEVEs){e7q6gNsFca-651 zEmeteIbILW9ypwk2Z+nprsVrh+g;tU$BW3mJNEc~+#ZWPz6ZBGv3>s$w|H#t&(3Xk z^~Co6ByM|Sdw(3aeX+eifZOA-y%pT{$M&w`_O968uYG#E>)o-QU&h-Lv7RrS;YYxG zeg$t|73;Z;xA(^4g!#T$Pd{$&kHtSRcW7RJb@=?1!HFS7PxxZ*@jAXL3<4AH6csun z=g=iG_@q-0NNHBSw5LBij6-SF=`T|~{*EzVcW2?P4jgE;Vpr_m^!r$;?|QhHrc zv!)5ai~m3Dy$!ro#d$71Yu5fg`+RZ^-;#Y$k4geHBoeieY={!1N`OWRBwClM_SrM<$Me23@64=OpL?CiO8y_J*qo04)R(}^w7@@CpEPOGsqcBu zdmhY94oWi+?K^_fc{6Y)b?GuZr;PtGf=Tn?`db}`|FMd-aLIBEru=W#N%+SjE3d?V z^-6%xkJP}Xl;9uCy*J43Krdbx+2ikjS3&Uy!Wl+-#Y2*_4=RIr(u`SJBhc=qX#8>&+0uh!|IBC`tl|CMeS+0`Lc|Q zxBQ8p@o&ALcjEYolX@rgp5A*w@4I`aVyPSdna}k0jqmHjiuX46=J^_4q5mN2!{5d_ z-ij=HJifiVb}CLG9-QnpNS63_$X8!=eNcXOE`E`Y|K!O3uy_yN%OuslHM+inx8r_9 z+N!s3?yP4Od|-e9!SbGI@;0_-S)1fj2fJdaZXNK5Q-8|CKu4Zh*HOumKyf zdu6YjzI54#Kf02VPy9u0pZ0OIJ>dLGuI6A) zyE9BalfaqPr_+xAN_Zs>>txg5ZwjRk__TpLYLn9j{pE)|iIg5iY&u`6e`(r-*cR`Z zj!7z075^(r2Am_0*Py+%7wq_ny`U%ZwDGs~e;57Evhny2YtZyg?5E)%oQdm9_)h~L zUma~2eEs+8@}!URU+SL0=biMu%Ac%V;QnhNALZ8nm=wRqv3wdfNWRc_wY(sb)hmMk zvcjWIjW0T2Ng4q3p6D=nAbry{!2TxRB^uZd$Zps!_(1t02_RYo2a1Yjk%jIPVcqzge`d;VX-Wa_VVbHf8Y>eNIurYdl z!h^Z-fq8x&UuBd0%F5DvqpqDOu#YqEpMK9A{JYh*JMdmlq%aqTp$&u3*uSzrx5w?9 z_6_?pd(6IWe`^2D9<{I8pV)u3N9?Qi$M#?BVf!Py*Z#BpC;N(h+5XV}qdjC_vOlo@ zU=P{@_C@=ByWjr3{hs|h`-1&j`(67tcAtIT{saH-bM5?hEb>{vi18!9$VJewM-A$_4jC<(A;l;Njrwc)!CV z!Jop*%73_fVyYwrX-GCU<5+YAdC-#Gg+YWRd*t%!jAWK5!^!6Nur zi0{S00_5*ASDG3j!A)iiOQ!IhW`YpC#?|x}!W;9y?F@_FGN+-I^C$}*i!@zPIV>Cp z4{rhYX_1^7$xlbwhwqufpJgZ6iIGN&W$^fv`H1FR_0Xyl$VM%I>mP+ixq# z{%`x|N(HY4|ELt&@K5+2!uO~4xmb1!so>x2|1_Tv8G6J%W6>YMtK{up;=9LU-UL4) zAG{p=FgO|<2FY>TZ4t5kU-({YKS{lvW1nWp6zmAz5xmoW3exNB8kNQQPt0pEoh6=0 z3xaEteE2&_PU-MnUKU6@Q2X5A)4`nJIDF%j-ow9 zasNNfF7t2TN?|!w-J9gBi|-B5{mdMTF+UgTI7aR#q^z)3ir{$gX7IB>ZH)OTRlzvZ z9Rvb0_H*_|QubE6RwbZsvkj5WlKggivy@-3>+LKActD@}N>{|`y znf)w1+M6U_hx{`pZngQM`8MT=^c3i)&Hpmo_9cb@+e7fK;2b-dDEkg8Glw+f(&s@% zm~G&3Doxsc!~Qqq58=DrK8XAgeE-xwEV@6iTLf?HXjnwsv;9pw3Yc%&KT=)rTj2f+ zz8fv}$ab5JW}Lm${(s=_wqHa3C-%Ra^@>N%*qSHwKyXE*x?0MW4jA~pa3W*=LC8-b zKV*IoiLurVni@v-Qg$R!feCh___294z$~?YjPC>Xe*1gQgS`uq-^KS!_}*ZzN3JV9 zZT~j-E9BqBcOSlggYRF{E_fc_|EeB>OHS*ywCCoQo-lY zs`j+Zb76tBUEn38g0Ctcd?h2l!SMn5Ke)| z1a}44o+QbvvZqAov386d>w&?SgFA!Ug~z-@Ourj!489m_u)l3TXs-%twqO@}^gvW7 zJs7fQ&Lt+qdcZg6Tm$ zlKy&BrV1R`XH%jFp*ly@jPV^o4*7KRYa&Txfd#X`Xgrr2j0)=AiR@jZkfvy1&PVw{ z!_j!Rxd526BDogz6emp37LE!#NQT{EK5P$1h9iR0g>QwdGi(b-+r02xZ~sSFA#Gk{ z7MvEGihOAx^T&S2{tpPHPmJ`W-DJN^oRNKzZ8Lu>oX?&>4a4ksd#W90YxXS`vrEzr z<}zEps{-JeBHf~kRwa&Vq`3uNO&&UKJ!yg5Y)Ga@QY@TK6tprv03-x2x!8>g{L zY@a>NO2mJD453Ke*KN z1hWiQf#3xoF}}gyp+t`c-=k^p_lE0R5!8N^C6wPsiFGr05hZ#%IDis;9~?w!f`2eo zDSu!vJ}!lQVQ)A-JUzsCgcD2~a*TZNR_a5n5#gB*8T?vsHtAqeFwwNDG@Jp%MY!vM z+OB!_j03f&Hr)TO@Ayu4`wvWbhn>=q`_P%+?^KSe*hxc2CUrC$tMq=`{0@H z^uVUnsY}d7>u-PcjPK;y8z#6TYkkIn@y|zF=!>Q(JJ}pog?h@@PVP#4l0`$8u{yUUf_pih;HiolJF)-B+)tX$xRl=LPwh{-LD|9($t^1QLt zQMEOl<2&mD9l&}3al$)WZhg!3m_vOgP>u{ty+^985HQNpCQXJKkX4(=?e0yPBsF@m%ZBBbKhqa}_>PqNT zJG0{wQ`arILG`-aPUF-BB@*U(&9nWsep)vY)-`unB{mIjsT9;RO`WY^YDk{Qpe|8; zVkzCUel~$f>iy&=DoDiI-wEnQ+;G*Py9AUh4%H;DOO6afa%K%f(g;j(ac3t=8!kQS~(Q@W<3_S7z^rC-(Nsm7l*WFmLg)&$Et z7oW|eRX-I|p25WGE*ZK&=2#se)a1}Nvk7JnC8yumHF3eV@4w@Mpnlw#>s~a2r<0tD zoT)s0j%G{KP7Tnh9mT~RwQR3Rr>+-uf$AYzek%6gyZru}htLZWhtO1G_kL=$d(Va$ z^qLE8gH@MAd-XuJ-O8I@VX}>Dq8m3=7T=#m+D>;Shj2(x=Z7fDNq8fz4V8APV_FE6CK1k zQRT+2s+*}bbMA|OcwoFcWjX}4cY8t<>#oOjmkjF8nUY_y2X9(l)u>5YKGa+TD2Goy zYMF*tkEePc;al_?`{ zzH!3$=Up&$>Fc>*^FOWYEhRTW*QpoCIq=vQpL*iY{^r<@@4x4N{A|g;{oQBZI1+8& zsvh}bViRm|6P(H$pkW_Fo9W}`|oSGvv5vQ zD{|1Uk5g(>$1UoFb$7NMY3DiY4H8FOLA_~Ux*SurF6%DK6WS1=3n_t6=Lx~!(gWBP5XRc z7xDf((ZdNc9e37EHB&bNTbyWlR-H8;lCOD0|Ito2t?r?Ys&UP$8w;LCJ*my0=0H)I zQ9~+-$Qn06Q`Q+{u&e}&tXOr{BAzm)lN^$C-Ptoe_^Z*W3ygFkW#$^TSZP{>NQ`X4 zCMG-58!+k^%6bUrPF+J4L)6V(5MeIW9dTl%TlQck-QB<=8&Q&qQ!8=@R%BD(nR~Kt zW56S>c)|Xt>A-2bsv9_@a%$%)Do=VqGxqlYI{c!SB|tzKq?@b0V}D z-7v%u^lMgm@|_QtgG;(TZaT(HD?C3(<8F*^D6%xU<7U5`+gR^spBA`2cgLyGkX$W0 zN#EyAoi@&LWfMHesOlK+dhV%?#2)w_3}{w;)8NO*8~Jce2RC5TZ7zv!7x^l`)H|l$ zK&PTA0!aCJsa|q;!y! zSW~6ti8Ym0rL(!9_=%iR590U)ROxx?D;dBPH^1g=#CrZ(4SEqPaoS=`y6&K!KGIC7gYm&7ay>PW>#2*oaCNTvx>k=S zQ%0>bS_*(R*vSsoLyHrz#1J(&4)sB> z$&JVoxenk=#A+UQ%P4F_eWpIAb~Dy8KrH6vdj?Z^=Z-S_kQ?vDNs3%Gp8Q)@8wtF7>X* zty*WzrzL85TH;i{o>OhQI&v4DS?#)BZU~Ot896^Ay3|W`9qRMaYIh}An)?f9)ervN z6QBK~AARCyKY!#cYyb4;-`7#!d1^yFW-ozd>ZwfWxS7|m-8HU1SW-%MYU$)ITB>u5 z7!xmc;)*BkQ4KH^0UK;H7^-RhyhP6Cv~JYO%>;+Bne{xS#u;zs+8zh=BrfgaAh?Q4 ze|lEaDJPmZljNzxJtpW*Um1+m?%KVK5VAVkgk#0TWI})3VJ2_Px5D|y+-a&i>TzeW z8}ntT-x{f{M7C4%CRyf`35W(!bz=gPd$J?5qk^V^uc}Ez+a8E$YidyVi>1=}xEgEs z%$qoM@|aw3*Z)>8^@OuVg65-6JjosZAmh&GvLp73ooJ#q#NEHoPi_PL_V51LO+TDE zd~EyA7JusRZoKBlneAJzBmYfw9r?{4OH}@;fy{Vk14~=Kq1J;PY5GpHb#qhm0~3d7 zm{BBkE5YbC-%1=B=LQ=|*V${BXqnlPQj3j0@)Pz1GPb07I+0Et*jlD*HGWbf)91Pu zY+i2@X*}MqFaFdQZoDRYV<0nPZ(RHvk50Ymz>=Lmf26qfPyaD`8n21llM`v*PR}e{ z86VZS?oGw(PG&r*}1f8F!0r2H9@OShs!lgWtOGkAD7%H-EnG=hyw|&;KQR zvvu&mGR|ZNow(V0l7anl-SVH-^8DKWGkqTIL%DlzB(5Xl#-AK{d~WOb?|kL7znc2s zsNksic+bpVU^j=W(AdpwG^fWGsRy|9m)%)pHw(|pQATE_dhH2O(e;+NX@eV;&Q0DI zblAEhk|o=g*_SwVox2*Op<7-fjEPIVEcXNN4Vv%f++OfMq*Ln*tmzRKV~CHqhK`$P zZTZa3AzD7f1yg!rs!P+>;lkmGJY(YOK1t^d*2Je-ewC>nwY>jPuGHexnJWEbKN|~+ zO)YmbZg!N$ca5x$GRp%w+0GaY%Eo)a<_8BScP%$Npbbo#Uo7QgvxaRb-QW4i9Ius3 z`N64XXT3hv1}1-N_yU=b2v1cFPb?<_x(BrZ%FJY+7<+ z&2h{L&z4`d%;gwg%L!2@V(lkqc0e;#B-H_~#%9z*u-O%PfMbUNz0^~hOs{2~ z51~%E@(ikIdX>r}(v;52^+TLNPmb^0Coh<$J$WwktmF`zptn;h9e2NjgGLHpPjUSj zjQ45Di_{qenpVq*hGy#y;}GixqDU@7b7s90Ke6qboOpvAT-@0p=yr+d^YG#zvLw>;hhM^{9hv#4x% ze$b^^VJF%0hPg9*v6{<;FD~vd3u@;^gP>i(%gk=(e<)Gg;kHQa2)IT0@X)-$(q>am?R zeF$r!B{d{J)!#nD3C;iy)(f=RJ=LJbEv!+1E5XRalO^ukWblHTL27WGHAwYKeu&ke z(GQUl)KVN6^r#LAi0H{${Orb~>UB>yqXtm-e~KHoshmC66%1(NF>MHRb*L)}4UlKI z(5NV-7Y|vR>UFPnFjqS38U(B^5s`x=ON`9GzLG$p8!1WVdE{FfTksgjJeg~O?e|QX zsB2!`zt3yVJKNk}or#<2esp8tCZN2opW=3s}3^;@ZfvAj~ z)1)(1f9bf`)cRotAMc^8&oy<_AJ@%=uC5}fNajqx-%+_X_>BlZCq&aSf#I1VEFSWh z7q2TC-G_FK#KO#dXf}n0Ezyj`*>S7Lak=lGWCEel^{n%mtb2XXi=Bd8(~PX82D&-B zzb_605=T7|m{>A=nx{)S2b_-?^tak%n*{ zoYdkm)MP@vC-H`cL@Q;~``?tPIS8j=Mjc(G9$Uq;l87Ra&_hU?J8@}dmrRF-P6sD; zWoEpc*p;g0Z<*w0vnHsq|4;OYORRTAPdl2$VvV`RHaGA^YDg|w!$fn9kM%9@u<|5l zbR_3djw;17b!QaV5ZhSNxsl(!57sT_I{RzE`s&&moO9Z#wX{h#U<^wRO{r^h8tih= z6iJfBBUWcdBx-qyKkzOrf%9zo<*a`N>zdKuo(DCwyk1Z2EOcEnI4Cl*u4P*uEnM|T z9<6I>RJ1w-*mI{9Sx)O-_Vml@Fd*=kvj95h{WBOOM1@NUUv zojb$9O224wG9{93f-)q{XG{9gx^MFq*4cRf8hS0B=W4yU$y}3)q;634M72udWG~nM z-4dARI!80-f|-0_m$pLQ=d{JHcRb=@;%uYx#~^1iYDU@q>Oi!VNS3gZ?^d0UmQLeKrR)612^d zz7C+)OFgY6?!?(#14h~Nu{yBLQ`BqCl}=iBM7r#En(CUi69#NrHZ|A}{*VfF$k7!?-a`xzmm&5A0_C z#$$Zf*qk1>%&fByYrO-_mT1HlN44}1Olq!2J(5w!Q*ozG#hV8o?}qr2O!~*O%_!%* zQCH{9FbP>ycLzGX*<90|MVB1)7;9!`4&Qa24Y96avL=%bZ&CtUW?^Qo4N-T-LzexO zHBBZY$Gg@VzrN{~#y0H7rt2?)3I;o9Y>k;0(I%b-aj$!1WK9rPNEcRitMLMHeAi`^3{ zwfI1^-k?pty6*Kq z>iy_EcQ0V-%>^~;*!9}$8ZlXVIH0(#(7>>tiLtlX z=7SoI8n%I~7VVvW;a;PwWIDNC6U$#&-N|5wstk5hN*M9!#9!{9H~^1-@Ay79z&Emc{+Q^k}vX6iBZ|Jy!y1IpirazHa1@K8e{ z$LFmbi*Byncilg2+r)SL?8%OCi#x9SYX!wQ z4ovh6`bpf3=~&$FjcPGa33rN&OZ&@%LQv1BGi=s5JGN|NxOn+^?~COSp~ zkCba(=5#HxcG@9Iw-N2!X}E*V%)EZaH*=XAcqf?|@2vA7tfLdnr)5^7>dZtQ!n)xb zo0#xkn5JCQ8apNKw6Z@J)$I;zvVg=s*P$xi)&H@2$Wi97lQkiKrclbZ=F z>oHQtoto936z}S8L~+N?^^B^&uM?QRv5|9*9~H|@W*i5_x+X*%ck-4-fE(P+Z$f1} zG(10OEecD%EMzfW7P6D;8t49rrUrp^X84I0i)6~I4%jfL9msiR1J?bpx~pk1SYA&n z(?8OR-dOG-*~gWK7!q$7Q?;1F?!Csy8tm@|yDxe$uOJZ;1USa~^ymh>I z$dv=UsXUY1WNOHL;C|{1`d7Dsdl0llIs0KNzL!*szt47pX*!1 z*Si(DS+Buxkc7P^Qr);J-BhoMJi1uB7z0lLc9M(rdTPxmKu`l^9dyoak!f?X*0ERD zv{(=m+IV53{r4^`Ce2e~tE=ldn>0=1RU^nxEDg5#i<1WZ2<2x5MUsZJMyDms28zh} zOO|dUl5I?$t4eD7(P8?P^jWs`PRS}XS0nP?XJ3+Ivx*{t^a~7j*$N{sUgN(5M)un1+OSI zlK+TjB>xdl!>Rrw%jBBi>J4h78m?Q&43L^x54mWHFIqOU9%Q!E2WUh>d_t>Qg9bTW zqZ77r-66#f%rv!@yF2S()Wo%O)fg!5z|`xBXQ>?Cm30z&q}i<3G7FcpYEm|{4ttya zpuZ0DdT!ky(TIPod#BKute)YAU|EyY=C_hF4n+Tsu1EeIovM8d`Txeve{V-eC;opb z=j*RB>DnUap;tC}#H?RcgV!(rN+*!>5@TxpjHA{!Vnq{3tOGHq`iyk1+4vt;%sF1i zKdeXw#(LwXbrkA@J4VGOvgR4IEV(CVO%KTwS@Zaub!VHFfYuXq6SA55o_pq0jA^^$ zz1!yHW-M=F^zR_*nW;5(FPO3Xz1zAU!9R`s;N{=ySJBP=B(b39aPXbrO6+t$$$tqS z?h8*Vei8pO@+aZVrHqyRo*IQau9~1!eiF-hKg@l*&_`;1A0@Nex)=0pzv2Vk3qErG zyj=H!*^A+CBmP_GHHFU`^WM9R8FM$$;fs)q2b3RDO`-2I?_Auye3LP^p8a|JBg;!y zFWF(tqSd4KTs46a(vChqFdg3ZT{qsC^>@8CbQZYmtY|Mq-l#nK}Bq>T2JAEkZa8_dxUwc0xu?w|YP?gi{K ztxptjHv2X2Y2a_iwm{ac|hoKA?8dZuIx&U^AYQ`J_rX4sC7d zEm>^WVr0KiMQ@m#jK|t7;Fnj#Gws{Hf=Hx&)Z}H}T{v^ijnqwFIpQ)GD3ot)`HX+E~Nvf#pN ziq)3xFZ@1x^21Z+_bvX(hxg6z3wO`&`^Ytj!j^_t-`TVMD)=o;C|zl#GY0vf$TZN{} zM`9$Q`K{%Zk>O-SKV{xV&gq%&X5MjK2RvvBemt^o`nT|(nZNmg#g|>fxmx@PqbQ=C zmvvwE=WAbiUuAwDu4Tz~q9gU`LksuMo}!ZLC-5z<3-@0*bAF%Q8(!BwTm8=35^Qe2 zVf9!ywxi}LzT>*#Q#!7*KOFI6;ySKteP{c8GvPLDiDSFIaMYO5fY$5?4vDcj;z6VL~T(0k}hjPy}%N%Q+kbI7$H zV{Xj*5N`>y60MuS{6^ICmhm^DMYYkNorQLGRS#0mG`_NM|EboP)hkx7P|4fpVc zEY_^0L~#zevLo(cN`C#g_IxK=^zNg^TyPlUDgBzqsJYeS`meWNLT=`d5f%Cd|BV_w z-HJJm=<6-VSq`5vd@R@5Y5UOQZyWJo&-W;8m$n9nM~z#s)0k0+uLU(geuVi)yUI3S zCsjq=@QB`H;x-iSCN-judx%_P?C~2W_iU&9h7BEisL3_35Bce^pY}Y1(V5UW2Qzw( znU9En0%}6XqgPF6`TG36agFX7tzBUWGvd0=t6&B#^q*g{W9b)B|CJv;trfl0dF7HF zD}VoY-q!h%B|APo`gfiQMs^}TrtSsnzsp|G+0q%!lc|R=I@=VXTRdAkV*_UBM<5m3 z&TpcgeV;z`p8YE@E@+jHLS&q7pd$;_gn|JqY|LjKA$k-YE z>J_(sUHgF)y-~((^S#>^?jJLq64JV=icdN2=qz0|q4mu9eV@p6zPt0EZ<)z?Z_Fne z+HapOjrc)%QKQ;+e&@N}3#ie2#nO+QKkU|UU;fX{xpS&)g_dL9sqLFPhG zy?@v?i+*TZgd-CC%((N>&gCP&-MwJ`p80+46^z0+E60o9YQaotc?H_1I~UFGn==dh z-O2U`Z96f0P*>-7JC|QIfzs{;Bfs6%-7*%fH|>v({Pz65>UX#`%vp!UZBgeNosW$CHhJn))>ZA?^!{;| zV*YfEd;hoQKI_>@Az)gDpxNGiO)n&|0vL&ou@%clM#hIOtzJDBfdNJlB(N?US z_UY#??8bhu>wG<``rL)o-8NZdQ#-%6xEpK!Pr5!&>8g#Nc!RU5aV570&a2xdvoz+@ zi!c1aj9Y>GqVkFZ{}tuadCS=88>05D_~cb1p5c+(hbDEOi7n_ST`MbM(>0zpOCQIW zf3s~r`u(TaUtHJKF~4uY>aKfQuA;VU9`o)Q;pFzufcxer4}Wobu(@j%MslR+Kg3+U z6wYnmjsETfZhO}Z9?5p?zV@0geiHbrfQJr}^~^b{YSVo~_kt16jCf|v(=(QH8(p}+ zXA4%5`7+vXjCclik8(BQUWReB-!%gLa^W2pVa%^YO~`jKUv>r7%y}c8S$53%FcRJS z$F*;x{H`U-+XA;KuC+{EEbv)BAcl?l=VJkk3nN;65Y=&_4(euVm?|J4^vq$`Zea2dn=~GKp-Znw!7VKxxg1BMm zliZ&2eccPbco%KP?)W0=!5Coe9QFYo({^kr?$JF9wwQWbH`~&7uKCHZ262t!%=tJ2 zSE6C-N6$Oud~WxeI!3SiO04_5({-LkZFQ!$beODh!wRrQFAu9zH*X)?#iNYNzcuU_ zDd0a)ecR#>b&IV^fZl<<#t%@wz*eEH%c&XmqUg`X>a$HK)3HX6bXtMq(OT|o=!OG% zkn6o3>$aZO4JpRFuWjticjqUqhu)KR2o-Y9;{AkJl$R>?FydAKTb($yqEW*9`TaOos~O>JzYH5dTHg( za5lMI4|9Hk$C*>Zk2$O*@OvtE77jVimBlh_7wXr^N*9r$Ww2gl#WFF;PnLH&txsE% z+lvbe%ah1rufvre0J04=+(k+03McPhvW4ywJ{CS^4-^lUZbdntT*q$a`~=ITT%{bg z-AHa1g^!tv<6K#q8a`GWjjvh>w)8T!w9M^OoIOyu!dYn9zB0`_uCTOxU!_poOul$< z)ZNA9z6EI8(+*dDpkq&^O=}4s8@0vB`T%)L_FJh9UI@3ACo0Yy&b2uUE!*!%^N!0cWZbzf@|79k z_|i*urPIOZen*!dsQw6XZ!N7CNuQJVFRMTDvhwTY*SS8oOenuzxQ|?UqU4~ucBoc) ztl8A!gBHDB*ycD_2FuH@x2-I{9zqJ+!d8_ejYh&Ey(!^_9S^PFOPyQ zMmco8uTn0zRmygUlT^wr8%T!_RLa#CRBHECMteOe?>8;4j3Xb;mwbyozqp+Bx=*;> zQI&GxdeXVo%u7eSJWCa>Pk0C_!LZHPzNc1#a!&JgRNE!BjcveF@sPg2FF$yKE_xuv;<#pR>7d3~_o(}i`U zbJLl3yx`?os<6&mm48(J5qx6%M!An1<{ffRwQWgqq=QZ69~F10G?AZG{!z<)@G{-Y zhFQ||*jiC(`}r-fPJV{9B{@%9!L{tBB%B&fFD@VZ7O&0C^K|D8q!r&e+{^n>XH{p! zve(M54SxjVJ-Pf^%iU#g=mF&Xj9$sSI!igUK9c8WK)S(kuFOw`ryb?j+Mjlk@@x4Y zk*?lReyw$!N()Dd6|W~%K+VlQIk9csMO`?x>yhH}eAE(3iYvTL*KX3K^~^g5@J3yA zB}Nvdd|oZTTD-4#u)4SWDx~1rr!(iLx?1uX${}ti2M%#ZoGS}!%CEML#`kF_fyafU zTd%-(vPz3x9h<$Llw#5{kw3t^G>ZA~O}T|~EDc&eDXZNglh*rII;1agQ7w+4{AT&h zyyZM9zgZbA+$84wRCh2hPF1eBM$7V>t%dTNn5_}YmBky&Z?=yszd7taCn>+#wu|(z zW3ZX6QoEzL&Fe`G-=F3kSA1Hi-IDJchW&T`b*Dp{6Sbocz_lM?K4!khWT`Qa2XS4M z)=Fz(T=8Jr)0NihN^a#+_QdF!l7tLL1wTBx+PK2T{bZg&#+0)^I}ZB=Xge(P5&ObhINnZIX>Hk*rArr6QhL+NvsB7MzLGER zDj#W|UCCD;uYl_w&77a=X69|%l|!VFymd<@-#*`QuB_e->?4(Y$5bb&7HN!+fkwUxD_ z&o_s=7gg4deNP2k*L3FmV2^{m;{oO1J(AluD{BiI9Ouf`NtLz3mO^vXN#OZu(#1k$ zZR>iK4%?01jQnVcmZo^el`bXKx|;cj*~1?nwxN5a(?Ncjr`x10#Tk^KSDSjHwC#>E z+NYoJ-tbjt!zCpQ>E42*o9ey0rryb|YHb_T|3-2Ad+DXED zOBawHaTs`f`RQKWKEdlnJ0s0IZsY?zPHmq=zI-g$GqTdU#OcC&D-}oUc}aM0%XCV* z3r^m@?4Ign!E3>5W5yMaj<_*+t!0AU5xmwt+HMG5D}x$w&>jt5E8@#f%OWjVu7M@ic(Cuhm)4$AYogE`#3 z#c3Mpy1(#o>-L-r{0SCs4M(lXdP>gmd|jy`)#d6#$0 zu*W;*<9f>qCjn{`N3Z5#H_j33}+{!cVVMn{S#M&j5CEfRR@9y4%azEl;(tQ|l zLkj8`;$G4-Nx7cMS_XT2)8+m-x@=M&>GmhcDYV z4Hpc0h^@AZ?P%Xoz6kma zW^1sQUM((3_ruZ)q~W}-$IBO?=KZ*}IxE-@oUynB-L}_mk8Mo*E=Sw9+qdUd;ilIX z`*t9A*tfUu!K{9JuvGY?_U*;l#0V#4us65?k1}k)tQMX*<{GVW$vWIrdd|yptHS*y zT(pm^abdi07iP6s>a6A(jaeQ0a#UdxHR=twh91C;={A|wf}~IVsK&nCA)TD1%xb~u z>W$eDS=o#5!Q6nKi`a3@;Q_h5D2F)gMdbLw_Nb*9`!OONFFN3Gooq(#Nn`S_C{E>t zFEyPopz$<0!<6xK&fw(}r6mb_da__ZH;`u=ch=x`7(3HPTAW zOV2tSZlvSJgyW!{W>N2m?HKQABOVDKAZNEr4ytPkq=$&H)5?(YQ(aDPxS_U3dFHM6 z;ft}Xt{-uV1d%SHoeW6bAoy;}v(zBGA3daCP zri??7u0*?JCb$|9chb`Vhr^8*%u>ezbB;Yn_$~IFVMh=*IK<6d<>z!)h_UBXA(anW z-YK_TBA&Y4_+o2<)q&ROUXHo*G;b-xmw0KNkK33l5Vv?r#jU;*xyFrtf{dOe9i}gp zXlc)h;+7U`yPd{Gp!o7#^bqSVuotLHdqMS~!VGelsmN7sFThL%2IXoks}EHlqDA!~ z<(U&*5}?!{K8rkSOB`DD)ai$<$@gd*AURO!a~gX=zNdUp zIa(*%R=%`+se05BImU;y@|Ah8y|l8Xd?~I@0$aY6GqnqS*SV{*p|Yj2t#VfdGhF3} z4l|3W%Hx$?yN3dRY z2^cnlJf{Q#n zOFc99NikSmqFUIR0G!sFtlh2}ja#0Iqdgxfa#nVsU8p`;Vm~IF&CG=Z}u?t5X z(GvU8C@IgJIL3{VaSNV#ZgU7e_o^Zw!ORepAe8nJ#2s7G0&$CHyRbOfV-#UDor0mWpPseB~}8ofj{s7M#px zMR-islltO3SB=`bc6d8;xb${KxYFr-4c>$5l*dClxHazD4B55zTJn%wTY7uTesV3Z zFju*~w&f@>_S&k|lGxJQ)j}m6O(`wiM|t%{ndcqH{Sy;;jCX8FY-yHy_I8MSqGDVr zIBdBdnfBpYgQK{=aP*~kJ9Zp-T9CP<^o{6Wevxfc_dkc9;P*z7XFTT!P%%;D>ZL(xW%*nhKhIEPfcAPzd6 zy`{xcUVKVDg6IDGYJ0VMWm$ZRImR2g$`LnY{J1i10}%XRykoTUq#E@gwFx506X89v zHhAKCE07Hj;*QbIlWNohWr|4hM0ig`*pEuwQis!K?bMfQnLAvv1}AsABueWM$y&Qs>t|`( zB;O#p$YuWxj7qe0?RE3qqn#(aR^~Z8jJX@v0F1MCmg47d`yR&=0h?%^lcq&~JIuvf zomNZ5C6Owx9P~aMr5+=@xpuDB&JyQi!ZBA$;s!<~S}L9helXrK+Idn9<#|1d6NGw1 zEk{*f*ouqGb#V7TYt7m8DkxuS#Nu;aW>6BMn*Jj8rwUB zqiGY5cZ_zPtelt7rqUH|QC~@0p$}Ja+)$mJuyNxZ)z{ySSlas5Xe*OQ)nmK`m=^Tv-(Qf3Z0G{HNm}~Uv-(Qf3Z0G{HNFl~Ot8N=e+ns6@+b+#c;b+1n-V$g}!F+zB3Z zI&RdEh&yVPdd|d6B;!Wu+oMRA198ylk|?#3xbL)gMy-`nIp#`9+`yQLD7pOx#2=Zj`<~u6<69xMLrVV(UmV?lO|LR!g5N#kh$f z=Ssz==eeStr*fHbdl@NQSBz>>PwBYn+s93gzL-Pq&r3uG3F0P($<-NojpVql80pGo zTvtrhEaUxU`(?G%(&tLacmqR@xk}Z-t>?0RM_#BQO2#{u(F)_8;6bOyn>PM@EUJeV zkf-7n?;LMn`0=e*u4T0SGOwpP9XRVyY9-^HFXz=#OP?zx;|&Zs<|NkQ{GmjjLCYE{DxQ?*rqVs#(VSN&95fV^S)|TqzlE zU{s=|;?wh7(aw{7QpP*-tiCYb2_AGRZhB6PchoAaH66DgIo{GL=Tni)G2Tzgc*j04 z-l>`;?&s`tQER1Cj=542H!v#EvT59r7wU+TxMLZu5qE+IosOF}@p!v>wAM`AL^5ua z4yUbE4skyxaYL)ELENdDCGNklf1z<`>2swdZeYkUSE*Vg=Xp|2l*Ao*rlrK4;2}xJ zO&cF~R1fVSPt9}j&bWc$$G2WN#Qhf%ckBakr)rkCAGQximQpImTq%hg7?o(L_{=Xx7X&WF<$4w;TM(Nw*+9&h;VTn8Tfw)sOOWaS`C!)Be zRF1h)5;rg^(XwgWkr#;@Xo)+P(He0lc+ly%Y2)LT`m_y@r{gA)aijF@aqW}1pOCm? zABa0uv&8+FeJqMwO68aIdfsZZMgc{*+) z88=Gb9@jpJ`!R_-_JO!lHA~!2*{7norBsf&QW7^XD$%lO+>sZF8)%6;meCq9}d*hwZXy{s zO5YyWK8gDwi97azxKlMt++|yi;+9f5=1Iy5in&8ee8M}O>kV4EkCUlCZ>xHzP5VmP zX6-!E*P>oL(%G|g__p&E<*n@L_Vmb7O68aEoeyivBzb3R#W>u}t1x{P=11LK{lS;o89_Oh+8lG5i&N!-AY zW3E!QNW~p_QBSs4;*MpsLfi=+bUJQ$PQ)G6Lkq~$aTCe7QTp~Mk~!k;mAGRch&xrY z#C^ZLU!%~{=SoT3z>s6E(k5|7ULC{VB?tLe1vz}O6_M@Iu<9$1% zD_wiE#V&WgTx$~Bx2tEA9Tl}rO68a*DJv-EDlO;}62d#3Z=2$n7p8mP&Q{tIdvaFZ z#!-r6JG9OSd06!-_d0E{%hNvWs6^aRn*%%n%6~#wJPV%iHV54K$J-q8uN3AGk$w>i)dW>h;^+%k zAfJHyl((RzD;aI)OL}s*usuwL?YT~ewKJ+OSD&Y}>x$uv7;VRW=3&%@UlNoz zk-~^F-%x$IyaQ#Q#5jR6|3!?4%Z&Y)MrWs1pD!O5yC_D%vKrX&*AjSAPrRCkEm~vo zt03_BXpFcgh+j*PFU%NjIZ}8vBx_`Z52r_p&y^F2=i=#IP((7>8OR{v-SXjmLO;wH zsWZ>YbLG@Oi&pGFE>8|JN>E4nq#kAd8|)oES)(LE6QZP@i}Kl?r$r7KqXbP4$lXYS z$0rpfB|bUYm61lGbVyfvD_4(7ppT=Jk%XB3o;7WFt>SPq+KdA?-t^)1WRvi}9`P1B zb3SrorgmT^Az`-hSxP+9umK!<(WP0o%gi?O%zU%RT!9z=Ea&`2T47cqUyU!e#B>Vh zDUT7lL4Mb8qgk&K>6Kf}26KmuP(h@3nN4Q1xf}ErbD!CUZLtUR17^E(>*<;wQec^$y4eROw9oxcTyqM={&R~oWWQq+dA=aegbH%o( zE_t#y=qXPprt&gz#0Nd_%$_qXQ#iKjAv|EW7oP)n6m=b_ycA+P=MxGoSd%I*2R+nb zRei2ppq@44Z=j5Ri_cYFZrR1LrLJXmaVI%%n?@=_VmRbFaY6CTKOOpq!sp{CX4 zUX<_+LBAD=^O(roz1VVk`7QVAibSbfkw~NcO;#jG<97!UlU$L=54|Fdy@NQWek)R8 z>>sxeAGpn9_hU3=Mbb9wigdDV?rcl88Nbu%*JjM;DCsI1>>Z@dCU-yjB%03w=BvzS z*mIT@+VHD{4cg|mP2BTEZQkT+h_)3Iv;|$k@Ng3M^VDHJBk?(Pyuj{2FsU$!d^iEW z$CyHCVm~kAX%FZu%dapM?)hMo*w4eX63okUJP&X`&twnC3S#oRgGI8Z#oiWvuh3c* zqqOelx#y#ld%j>xZZ%^K?t?$<=NW5xHM~Ug5O(oi-VPb7tBbM1XDU{y5i3!&T1u?I z$rgoJ<(LLG=~#`%3V9SOaNH+ItiCqg%X?nxl4F|YvBF;zYYSWS|46K@hyL%473184 zqc<7Xe2;#DXY<&*kPfhiR9bn5aGcH@q7vEPVYYE!=l&ZemIS$^0 zvlCkI{u$z#>|}FTF}BN2p(T&^sKKwp6JDK9=bZ>$J9#v#Yp3GLahos9piTZ2ZI|kJ zw3o-I@i-ne><;!gzuJc4Y%OVHVP9@7x8iq>$AUxUR^azA7t15ehuuJ)7+(fQyZ1r^ zy+u7Z9vzpPKn(HS2bn9{$?O(K5tGB}pa``f$K-4rr)6%l>XdUj-x~N^<#eRVt+`d+ zldFL;qFAcFy0yAhB`kwI)vewSak+fLhYIn_6P<)g+!oi?$ByBT79KNyi*)58-vIu+CjC za;IZ^A`7fTTT73bX~SlTY?_${4Ra!xVyduJB$QId#8R=s#uDXJ!(2a3%F=sqIww(7 z5^JI}dglko0*?R91rhWDp^#T!ro{G<=k*G~(aP98kg5FzIHL#Ft?&TRPd{J8B%}r_ zd=jHNCt+1CrDf_x(1nMw<*!m$brmV*az+oK)1b`{yP6>rdxv#ZDB4-jOE7`Ceh}>e z=Z_fWoX%NAb4^@|4D(x)^FwLjA$Ynv@^Lk(DspG*G{n)0_RwoPB5dSTH1+^3nCL}w zQlz;bRBaODaB2mV><86DEW>_Iy)d`d$$>s!+shI^+e) z3$OFqUG;u0mCjR7r*uD0@ukDl%8S?9p3n4QW^vD z)Y(1|Q4Cm5fl9_e8=vwQFCxxVZHk(1-IE(=t3IM9)&fk~|RZ+FW$~ zkr>KdNu0JtDdy@$`S6t7dM9%dc`vWjpc?f^I@J#BE4aVVwy>mDbM-`ypWK(7hhcX) zjoLZ6a;k%DWlJk1Ev?k^+?g7lPx5LMsOT)WrM0DX*be60ZgE_J<8AEKkoY_E&fVqd zqjYjNjhT2woyV~4+WZP$jRN&$k5j69cK!ygC0_2%o!Jh4UE*5eXq9VQ zd7Z#vbE{j*LYJ|YY|~ineR#`7bW9yxjhX^f8CH_J`Ki7cE82NJ^U?6EiD-?rQ1P*j zUXzNo>|({pBGzV!*F>tfQ=@qttF%UCYDYSFDZmvr)*ZaWwgxZdH&k!emZOcUNfSeq zmPy~f7V2G6H1SSPs(QP}IFHraoi}HLmz3X1%iPy!ON-&_)jH{&5^q5bj;oNITt_8% z$<07eGFNg~@q(9zA0Zah-l1pUh)pBz(^1jup=ueg8sas5JrunrZFk5Vw#$*5IV#Dd zqk^8Fo&Rz^nz33sPOp73ue=1z2FmkaCY@VNDgDL??Z|)G?sB~MId;GI8m{!diEtdR zin_%6G)zvL|MIBO=&6EkrPOrpcD4=!eWfTp!7F3D!bs0!@1S0<0tTb?Dxlt{K?L{1 z2FInrq+l|AG6hp4KVKMJ71gqTp1d*^E(@0h^N2w?pLr6``(H$e_6jYNh+y-WEov)% z?uL&oq)_76fLF%y(#Kg##b{0WUiIK}tuu*Hq~V{`h&p<57(VZSZT|-1%BL`Q zwdHS1KIeh{-fgkv=Wo-ikbK@DStn-vZt{Ax$A6om*Oo+fgja5Xh@W>L$7Ju~(O%_9 zQ1M55l=FE9{u6|rN7D0?x|Y%S;<@{vFLyrYXZe&COF8Ff{#IV4=JO7eXzIzdGdVv? zUoCw#n8*8NC^0`vUv*Y2^=>p}&|aZsO22tbw9lhXuTm2WbTmH|tzI>!gb2?iJtpzQ zwO-qLt;)1)z1G=!57g+FcxkKbOOrLIHCI>l*?N8J^&F|(^w#TXt+{InYmH>o$`|`m z*%mQo_qATD`%=YVJw?yAzd)bj3%2kZd7wS6!(dcM$tM+&t5fx~CoXv2$w>u!g6Gv% zeISb0A$=ZiOG84riYV63t2ZoN@_y*kaYQj1<(-tg$2bqfxYT6x>>Vt$;T{-x8ReHS?`DYWk*r_)l} z7hyyf<6W(^2R4?Imi9fNp3%N1M60<7;Rzp*#3a9JVj?a2FVaVHVnydlwRSmlK*Y~| zM{R;6qUc5FAdp(Yf{JsoB}*Top*H%ml`e^%j9QEM3DAP^GNqC{=+tT)AUUV8x2Iy+ zQ=*gHA)}JA_#5LPbht<_4xo2F)gz@!CHc(r(?EEw!#^3zo)p)bJEWGB`ES~X=hqB+X-_SVS_>c|6fE4myW2PbM+>QwURCj1aWvh)5^u zc*YVu)Vit_D*}_2t*cy3T4I&m*Sacy3boWZH0$&=I5}5Y^_kuu(keHlbyfQdt}b7% zN|@^^OUl&()YYw5Qv#Wk;L&1jO^kwu+W4D_C~3_-NYbb3a@RZG<|rk0G;39vBJgC- zQisL1zLL7q*GgYgOzCUXmAMIAinqxY@AwFVqv!H!3cN4fRjTD&9|JsFuNh@RuZr$l%U zEggMu#9xcA9O>ebW|VmCkVlR@M&T0|dJhfP;*ofa(lWZU!XwAds9s1Aqs|lEdKi8F z$$Yd5<)7p{aU8w4L|O8ioF}=J@U>d?9uKci6ql1PP0c?+t>#Gtu1Zmp_&Tlkrglya zp9jU4w3#iZwfay@{s~A9yBJ*Q?4#Nk%@eI_Ti2>w%ht8D)z+w2Y78$kjQSI!shwNR_tOc_*7eMiF#H0$S)B1NF+qk zTQa#;u*@d0l$Jnyl-FqNuG}GajRsrQQCj8h)%s|y&v6yo)KjUVSI+Rv+6~^fUa?4C zqu~_`URQKi&U6daD`(gyI++u zOCI54JH?6*cuZ=&Z`3t6eZ1_g)Y91nw<`rbsOq!9?X=a_Ft0wV8frxs<1-#(IjnD| zl}nyZ)&*Z;5y*TXR;YWGcSzV`OQ6huX&JR9t~0WZsst8Rkf~m1;iWFIofhB&#NS6I zLbdN8&ux)9Nvu7>u#~T}6%Pt?7;>HtrpdF)k;KVS^WT$BzS&E?xIFm#=-TbyC)WjP zaqUHHSqnaU_1dl4gE9^@5u*9xu+(8#eQ%42w@1N-Uz z>q2godgr>}XqI~IRwYhO1kTqn>wV(0BCXg9=~IT}N@wL(t3~N7;xwnN^G1w%V9Bqq zfpTv>O7?Fa2&oA{pqE%@bP?Hqm!{zT9DEb=g(nSkD~=IULq^+`*cVS zhv&Gu!*fvk>7MrBF^Et(+gCm}YiMF6+_RuXDQ902TmW}FIfqY{DtB9y;?<5awM^O);kF0oCn@V+i+W?OxKYQnREg4~ zCpcO4DayG;DOG*S)k2xtI2jR&Qn`N~G%ZhJoClU(UVX~b)D)I6cL`5WpeD`~Mfok4 zINI9v!Cv)Y5uHzBhwB;PCdzyr(Qjr12y4s~U~mq~4){gYvkh=bB z2fShJz%ScYa&H*@GAOln6mCzh9sVx9)}^s?t`_2>k6^F1ARRmL$)`uu9`)n*Lb^8; z#CC4E1IM1f+Sw`Pd6lzfCu8YoXXQ#KXY7JorLp5onS1lAHTP&>4pYV?x`>V>SF1m@ zQ<>t#7uo^8z^Di3hX~ME{dFeOhf;24Q?IRa8ZD_8TWO8==l6w*E1bf%P){m6M{{jo zewA*yicy5472#T;b}CaGeTCnv$6&#nm6YU122yik3rJRyIWb5~Px8`TxT9!>fPu?p}A!__eQ74%J)a)nuu6BP8r zIN4tsr|Yk1m5?~`>sYKaE>729-U}(lsb|FM$HkfS14P0PtqLocGhu%s>kjvkE>5<^ z`2qHB;)29z!(SI=(0x=(?}stDeWZ_xI32rxznEHZ9Y@pPF*(#gF||Z~YtniangyMQkr}wiF%9(3UdJnPN|Plr#{TIinbAnBemu=blgS zja3?X)D|Fm@SpOYa0sP5uWg|x$~gB}s$Ohi=t?J7UxGWJG^|14f3i#N>yrP{9$`cm z(cS|owTrC;L(51fUV%E$HB~Xe0s3-DapW9DZK0PIl#+5eWh!N<8r69`(M;aD=LMDY z$E1DJ6D0A>RjXu9Jl7$$(-q0BQeq1*ODAK=ui~*S$ec)8tM?=(S)cPmFP@HU)?%*h zs3IS`$*sm?H&aKMOQdy;P5Yocx2m|DUaM>IpA^TFuRayvf2KMQiV-^?sHa!vWA9d4 zYk{5A$PzvedMuDzs%zDc!}#-loVzb9$x%E?%ne$X7P@nL9NFS}1g{Y&M(ZYmZD8BA zEm|A%*jI#5nOsMJSK1T7I*WHXpK9&mz<+O+_Gn#d!4|2W_31T>;Cd%f%JJGd)dkm= z7Ec=QCqs&h;lNP{LF+%(Fg9GI2~x%2-I zd+!1uMRn{CchB_n>>I=f2q?qC@@82O1d+$^5J8P1;u8%Fy8}DAJG0r@MKDGY-^@p?_->k=_)5@Ryoud2HGF*D2TF1e3<|9g6; z&pCCf>eQ*K^XTr=y@YEm6Bw06uF^EYh0joo)E;p|j!; zhNh_;X_RXWYG86s@DfsrT9}LQ0T0IF@kh|X#lJ^e%MZm$o&xPG#oaG>idtF69g5{y zAG{Z9RN&%1o&CD~I;H7ZpR_HwsRQiER7a;yjce&~@to1|PxQ|3F?l`fvxDxyptC;h6I|M#EUDiEUV>-&6br53QBI^5$vt1v za(hYjmF7F(?6gTFCtibVqF?eq%hyp{DXpVrUx4J90yfvNf}mdirc&Z16v45AD6FFi zpT-`FHTY|{W{W3l8EVJ-A;cGQxigGc8mK*wFJXyn)^C-8R|MQ>!?598d=}&(09ETq}VYd^0gz)SSe}M3PglC?4=6eWFKlRj8Pd@qG?>_Ow zclsY5fBf6u{?=oUe)F4;Jn}HYLkQpa#)BNb{=nD1cK`if{px*R`O25S^rc-Wq&wlonTR!udPk;L6 zn{U1e;ZvWw@y6}jw^6tOVe8hd|03a&60X1gy6djxaLqMWUwze8S6+F=6<1uoWy_Y! zF59f((n~M7c6J0pHrw9*vHgd(woE3SZf$L8x!{8H&rhYA zo7b;jw=U_0rpC32HLE{*-npyJIol0qopsikXP$Wmh0`^xTzMLW6)R3Xb@?eLpZpOD zC!KWSi6@+J!ZHp^mo7d2_$5n@J8tpfMT-_LT)1FCJU)N^ym@oy&Y5%Uv9o6%bIhz+ zGiS~``skx)%$PBK`t+j^rcG@q3{xo7OPGA1VbY|DMZ<)?hwbcCKQykwSF(l}Uoh@69_eF!D}DIaIO$LNUR;T2`mC|5Zf+$c;2 z$Hj(Gw-aw45rz>uBs430e{^VMPk2RmmN7UKGM@>p3AI%|gO7p@3bluR5xQuaN=O6< zqh1ExJ>i;gJ!f$$KZjDdQ+9T^*={R4OyHrtz}aBV4$leSW-bk{4Bum(D<$69dQ#Hi z=E&m8x5^)wH>hd}xbLmnI_iVbx1j6>#kH2qYqLN!+U}(CIDKUDMykOm~-I z%s7kB*Nu7^&vb60@=1#jBWNkL{f2G<%H-E<2HQ5 z1vJ)XV{mjscxAK;MaCFd_n3GTvdll%s+#|4;upSztXO#)FcEA=&y=njWNof`(Ao@W z6Xl~eoe{q%v9+0EYctB1aM}Fu902CyXH>7XHdE||`PCb$pN-xZU1{BP^cYY)5>3|} zY5zUCasJ*oY@@-vtNiDZj)tPYhpk@u%qmRvJZ|1{=l-bJIm+A zw;4wKL&6%k!k%6JG^NTvj6aJStHy7p^MYDW=lJ}CqXFxlfsYa{g}S{9xVK5J>;c*f zT()~m48M5UZqU31y>BbqebDSs)j?Mf)|hw8c8@(5zen(Uv26Faf%sj5AEjR{+dckh z{H`k7J;BCr1Afnz?Vi|x-$nTC#BX=m?ny29JzchY^3bx~FPA@p0VO{7 z0qh{&K=ll|m(GCk$TEI2t#cP_wW{RWsQfDA?zE~7UP3tXpWgAoLHO9gFGCA+4nYr? z3IDe4nz@nBTj;F&m5FBN6XeI{OOXkbqgEesv7`>UPhvVB@~WiEb{`6Ehdv~^!-h(X z8W&UQu+5U6yrXRQVU7pXLl1|&BJldfWxK6k4t|hw_3O%Z58gwmDU-@}4>^ldz@>P| zMVy1ahwS3i%VoO{KbcYukPqkQ=v=pwAVP6?2c-{3OVDbj9$IS{Lm5h*Qvs=u=_ns) zUo&hVQp^=Gw`v$`U5}@MsHq=zRw=2Sms@t^2bzLg`+n=y!@llXN~zsj7Dig`PzynL(i7k#{2=Z ztj*=SsHYzBF6yGvGs-V9U-Kv{K5aZ5X3gRwBbyE5I9Qgx$XWhV#j$ous;ZtwZTzY* zPb^2zZ?~@@$iR&hlg}M_2w|4LTDc8+-5Yh=OHi=^r69wLUAY5>jo(2s8#@ zCmads1bfhIDLoi9TAQIJ8M{DN{(jXOb0bExBP%CWgeuonet2li+FS-3R8&;HQ&ns2 zF0Zfrpkhc>+}cw#ifw8|*vrt$=4LCRDvQ%`1xV0JZXRB8L`yJGFE;M)s_TF3(Ik|dt#qMg@ zf5;*Bz14FJ3RU47EAItlskOP1JQ2QGT~YDs;TK1@AT^1UN^RWDh14Yj};U3p23(`%)C;f>KNQ2R?Y;Nyik8!Ddz^cC|+R9#y&rVKp8 z@6UY&7#~0zuUSN_{$}-Fh%cIXyx~k#GTdb-@ajUBGcgn5uLrT#zwz7HEZ&V#U z;E-zerHVVt-mV!=WmU@uoKQmvV?0XAq5FnyvuvtiQFGOcICpWOK{WvTqcuybRt{*c zfov#yrs|V5=Ti!na{HF#tH7=1imEfp!DGP11L~{(jCCwR%}rHJ72pnu-ksHCf09y2 ze^9fw3Y==z;k(DifD@{Xn){>#lFSGVi9RklU~D0&%Hc7^0%obUs+R`rskzZGW|tXX zta__vU9>6sVb%KshJx>NBLFvy5%w)m%{@90aEr!Z=v#Bv_+Kr0F~eHlPrF*?%=2)8J&81MN-L_wAEHRra|=XY30N2d7^! zMZ`WO@`=bL_A8)0)hdUSN1`> zG1Fcd8Y)_{p0Q6s3rCm(kvbKhBB--Zq}oF1&`#@6W4?Ww(Fz&1hBBd>(5@#OEA23t z6I!@3bggl-HN?2xd_6ixbPLIshMz?HBW$J7p`DPDthB}+Y&6*?qujL;>KYod?Ngwo z8v8lpD*M!s%`mo7xRR^{88(G7_ATZ>;~3*+=Cp%xt~cgdCx@4mCi-u!cDzv^`=+kAcT* ziOz=aRM<<&L#)&6Riw+v2C|a*AlW-K94{{o!oN^B33@v>wACuN;>MT3>006heV;=5 zChpL!4R1SGtz=wd4z^FTyX?)d()FR6jJHEOiF>$OtrXd9ue7%~R@y{XvOgUf3b{{> zJO`gS5w9`5K~`d`pJsg4vl7}NeQ5`J2-VM4B3eJnH-K1aT^5ByHWWcvtsOJC}8tn?79be%y;*mF%c76Q88N z-mWwrB`cxN?6bF;uiIDIR~z36HAD|%Uq%iK&1&dp$Dv^u8Qz8m`~`jKU1JZl3oC_=fR3(5e}(;^vy)(H zveI&Eygf41V87$HlKEFiM=$lfVf?#V$$G;0CA@F1`5vtFYgp+O^a{(etunPzXgJ#C z=o{R*FB$uc--6TcQFfy7TEI&0dsec)+k=&cMkhz>qw_=QC_Iv^WS$Mqu#&Ma{FYcL zI?aC4F0<0;OBJ4#q6_Tu$T0g9j5BZ9my?x@ebHmgYH*qzevrma>Ps?q+L1_wd8EB8 zy3meBjx>*jz6aSKkd-2p(BT!~HzQT}hZpEekr-R)O7b83kM`|WcX){OB{LMdK3ZcQ zZ@x!Xij1^w2-VOyYo37~m>??ZOV&DA=@j#;uoA3bFOAL!S6Wfhq47?5JXt9^AZR7& zOZG+KADQQ3#QTchO5rtT2l~<q{o>@;KclaarXmCV0kW z3^f11co?S;4~6$lMLR}NUovADJNIFnS{)i6SrM9v*>#CM5vzw|V6S z9=DQek5tsJ(cDqc>P(St@fX=dce#8&7083 z4zz|=5Bt!Xy2z@~@u3qUmqu=goEKSdPN10~^ig1~g^emB+e15{=Q^qb8)rT()-mhB zce%MVQXRQbAaW7_Jo_D8>X<{B7KA<<{)<`5EqFGPwT^(V|I!>0e%WX>W0C903X$s2^^pys=S)~2{CnJb{{y^q z3NE_#!t>u_&%Zu=N$6#>*18(=N;&tcN@FG-qBg+a(Z}qs6Q9uUu@beg!ZV!qKZ>3= zFr0;Ve;ls|^7_yk3M;2k&pHdMve5SMeb!X8cmlQGIyE#LH^KKok6W!XLpOyVfkr-R z{~-KaXa}z&wpmTl3A|q38oB{}4EC}vgcfhY29=AsXMhX%??n5rho?X{X3X4U&I7E% z`V?;M?6W=tf8U9@bRX#kb19@E-9XFx$fwO(jPkz${`HUuvRb#ZkKmsz5EpYP#-a_> zVrX%%^=aW^eGYijSi{4x(!K*@q%&t)|BBh*OV-2I;h>#>@t_{_`T%fA8+)y19lzLv z9+e42qZ6%>tjnzRdGqba+o5!%60_O0kZ&S1#cNa=Cs2$#<~-{R^IhwA=3r|g zG*E}yzlquBA^Tzb66*--EN)|iwTk4lzH5CCs}H#v*=Mc`EdcLkGiBCW=ff{}?H@{8 zA3$P^k>HIwVd+0(&fFInYJF&phA*Se$UJL}(@u;@WCtsSf5m=1Jm;2hBy3wrtC`vi zpV$z(37l)G_DD@=N5miv*aNK<*hITGG%PX(Blh0VO&0nL>~NKJB{m~mN;r`QtUs4U zR!5ExZ6{gqOGi>Pn@2h^GU+V16TVUhsXhqRSl7YQr?91=FY9Lb-@D->p|4xRT{OO` z{=<7{WU(qS8t$_;!e6^EHj)?aMH^T*k#m8Ku^8n$tzG72_^jJ!sg19jgcFg82 zktSH-^O0{yJ|5Z{`8|C5eS1{ot?={K-SB-}sln6lQ8}&0?Sric%stk(VWGod!ADSn z)jBxRI(wh>EyxN#fwr;2u?J8q!rx=R`62s5Jv>Ha`x88PS0qP%#S%V8abybhP>h7* zz;(OzytN0M-qYH{pMmTRksmYHO31dyeBXL8gsUU#)yV6heiu4?Tl`h}mwi|m8wKsT z)C$b;m!bCUW|NtOM&7hw3;SOp^;lCKEFA4xdkl@QfKP~wHP@NAx+TBDxH}G3crSb; zW}GRJ$>4NrXa~y32R;|tZXavDAKnTn8zNJQQ)C*o%4z4RJgV%(48JdO0%$IboM>(g zorJM@D_R4uiYzA@^uryHjXY*u_-cD$WNoA|lC+mcwyDPKGb0_5jrJPzQgFHmv-ORU zi@{+#ak9S!yQL%7;06G5vY%y6JHi{o+wDEkqawFPx*~Ulu8rIiofmlo9|CzQv^Ba2 zv(T?2?|@Tgz=;as+Z@mfsK+8$M~9m! z#+5JvSr+M=U|GW)%y36zfXY}vKm>nnW-Icj3Fn+KHFyn$ye) zujBj(9!zEM8Ic?5I|xESMo&(?ZEk>1!Gk&HSdG&80kiN5i*>3cBC~1?TpeA9-lLIG zv2Zi;H2c-aN-rEhL&7F$Oz6@5uHh@(vBwHyEje%A;}ePCubsh;-%F zBQ&ZzDyJ4v8o-*AL+D*Daq3YGc=ad^W?`mL z9r$HKi?}`J9%_$ul6nYmGSD&0hPn7p(zBgk|!DP3be-a46GC8>wJ++ZOZy|YQg#iH+Hp` z`ZdjI)|yY(jt)TK*heJvya2MWMG=$Vr!kX42kQ6Gws`qD9!0no7T69wV5Nca72^O= zn5`~NKnL1Or7ffbd08>2X|W)&KSjQKAw@&@ z3Yi@sU)m&!chMtd?9b@PsWpLXJupU)rp*{ZbsdD1Xf4nVK+}4afh!owIX#QCjZrp3 z9ul685@#KR+-&B{?T{MitieC_MOFyZoB(>ahq{mT}TDA7q%?^=;yb+Ax|pHl%ite=Wv zCvsl{24Fr3K^15>^pmHcHTF*` zm9bO%iE7=C!7ZebJs_cQW)9->+$NuYVwEd6$`e{X7rNnAyCYS`;R^4O(HdA6Ano`k z*;0EYSxNnwFd#eoSD0s1)s!cf_`D+n*~Qmt#VXb&&*#~br0@O+^bMGId1XgB3wNlV zXpQeH(tLy%T18NL=HR~l`K z@mMG`pKqoQe^P6vn0T6(vaey}@&|8a3oNwOYmbMOuWKrCY|C>}xZDC)8o4w;GSv|A zbXqH=VQ3hz2CQu9I)=v)8oA6Z_+b_0j9mUX$r%y+vWed^rvj^shN!jS&jo0%#eFeX zgS77T+N9^~h&TJfcPHNJi=KzcR%2ETYnK$LoFeVO(e_yi2u! zv5{AvR03|l4oWW2{IgFB&gvi^15y-gk53Ck;jc?LC>8ZTk7p?@X?wwOJGBR6ild?M z8yF$dGNz!^^;a#ohEpxLzX-`db*e+tzaNBcbx-r4;To(K&{b zvs$H8e(>5WB{aiJ2u-1tnU*UQynG%`?L{591Aw!8{RF7%N1hh7pIG8STf^&gY$o2? z9^r`dR`Wuvv2X`~N^zIOxxa`s-D#qc_Xea{LymP^+oFs|X1RXyypcGeETbzk%$D$7 z@o~)J7;kY05#?$d%z!Txqly~Ic1z$Kg*4c`u_gMdH@OrD(1N*uoL4>by376|}dMoE$tHKLj z6K*o*s;)t!b1Yli!Ex?UFpr=$;lo}C&aSLQAEn@7>P_Res5$5ljCmpOcx16(Qe6W|AyCzz21&piu6N zGqP52>jOpT)A*(F!&sr-sBK|yy+t|lT7jR(pl>>B1<;^P%3U!j_U;=qcdnoLeNMUi z>O=iZgI2Jf$l8v~w5Fzjo=g%l2IrN=(YA8sI_`4T3YeEL@373wq{vBnGPsL`fe{nb z%H6THGQdboy1Uzlp<}KqA4s#djy1>UZs|Z4&PHXq$i$;7<1D`mu^~IlI;d z%xwkh-t|YmBG|>+V+`fW5Jzt12Rp!bagMnfBK;TYK{e#WuJ4M3UuNFF~k z5Ft^khz{7x9#QE);j2%rA{1hI;^C8yyv&iDORkliiS5QC)nA_mPG$VSJ zS59ITAGK?B#bBP~Q{Tc5Ehe5AJNSvHCmq8B()sF=J|*J_aeADvArU^0w`XkHX zP&@TEgkB)a2dTkXv_&m`nyKJv*t=L@9~!k(8j5KpiD&e(TY_~*ngVn7^iLEuyAX1jUf)q|mRBzYafI zJCKhuhG%`j1N=qCPY|`jBvxv0JDI#WJWb%_yVxVZJBmqCtRy+8Y?Se?wFtvMYKd*I zZ_w9k9E;F+g|_32RybbgjsgS+)U}BAOu$ICS%@94!yWc{zB?v9Pj+|^{$kY>Wb;|x z)0FZP8syMw3fePa8>vq%;@ZZ+t4TRT{>#TGRkrL zPxe}&Dcm20%rtwc)pfP3YaO;EdouIk_RxH&^)YAX2?<#SS982ahxobr6Dn!#UgqP> zWVn;EO|?XD%wBXy>>Nr<@UF4J4_e~#)mlpRk^j=YFRbNwW}!V!G2(=wG+(-QIWUvoLUopllLSDDjbJ!JBs{3%S`le?8CXy+-RRq8aKJr z;l9PhNZ?%yVa-I8F)B5A#BjM>DiFQ@M;H`v%}M;&caWQ4PB&-yYXA&)f*5lG-zP_3 z=N#`3k+cID=;h=tI`PXdlO2pGamG7S`E3D=TY~y={|~u=qH|go5kGT@TzfgC1flyE zR7zL3OW5BgGbOZ&eTXr$j_&_SInKUkBK}nqc7%ct%Aq-&>v#vF0e*4^;6AQ_YFZNX zQm6bbrmE-jQV)Y_fWJxojur@qf?nr3_b;TLJEY8C&S_}Xsp%rt0?X>*G7fB;A6O@8 zZZmA_)a2+~ad9QhcV)=>q*bwrY8Ck{k;BL)_IQ^u?eQkAQQmv|OT`I@6EYqcI zr^`g=9)?Qdv~{yv;=8LIq#+EJRb=XNDK7OSlUYJ!MGfQuXe;tUgMQ9E%F$mK>v-*h z7~daLI|*lp#u>3mqXG#vQF-_W4py3DuEl}4T6e7AdOA38&B1y|CJ#b)G(4GvBb~$F z!DvJ4tB`0#bxyg^TS1!8ABZBj5@TEN9U;6a-~{-?W&Y75$VHGas=6M?b=?3go+YT< z(Z~m!b}i@GLwM-fk(}3YF3k01PX{ckV?C#aziC}^b3fBS5vqj8V=6cd;IE!f&J1#uXXiZ}}vj zpxmXb@Ql$8{^9rmdx}~c|$_5pX6 z0jqhA^X3d69gmrghk!fk;IR~Oz+aGuOho7PZ?A1A<#~#wAe>enee$FL7Hp5O7p-vo zh4b!->U2jpR|n7>=wLt4A+DocLWr-6{D?iot&gA*NY?P>z;Wt>uhpBa;mgeb0F2sk zUF5eet$(~CI*c0>xUJH2U3=@*f~P;h#kIgJdd*t{`Vj<)}^XH)xFk7ZL$B2$81z$b4B70QYW3MJyhndGp+-SdMD|g zbwuS7%ljp`~dBAq_$^q zU%XD|Qjdq!1x+2JFxh)0`g3^GN<;Mrj^Qf_4j;$+Cx~PA0-X6>9+FyUWbYNV6<9Gy z64Sk`+(zYA&zzRR*5u>7x&sA`9kn#xM9yJ7;QbTQ0^j3b7y23MVvTEEcu(b(a1OOh zz)ITTs4HpW?~L&Ek?j~4m%1K-S|ng>=R13}_X_pZJ0k;R2Rw!o2X3n~D)G1oO?bA{ zu?KSF4K|{S{FTT&+cOhcO*u6KlWZNMHd31@U~H%LmaKEB2EwQdO#ueDGDfYo5iM)L z4|Bc!cVIzYv@gau^*nxHT(rV0%|NvuaM&lf7NV#n3a(`!^jB`qVS2^^+-YwB21#jz zM`=CRxzvndgy%PjJ-Jajfw)qLluImU_zgIy<^;!_XXl85Fu=7A+#tJo7UvyVI9==1 z;8+=&k?Y*gfCAF6ePinNL?J;}d*P=j@9B@Vz?ui;K$SP-cmU((dx7Jl!k6_%?>s$D zA9-VZ(XPXjAX+yUX8rGUxOAci%yZsvIb^5ktJLKrR07=ExA**4_f|3&%+>@?wZoS!FFd$p*W-(4e~ zfjORa6#Aso62}WdxVEOc_#8vZ^)0jtEi?fGA83QySkEc6kOI|(GI%=94Y(hH6tzku z@^+f|xgssLa4ikN`HDl`2B6lP%QmW5IhEOfQ zv5`su6>B2L(Oo%LC-RJom>Lb20q*dS}eaP`i_z$&e zpslM``clkj;qRrKywYHXAqdyzVhc`B=K@_)n;l)+UvX1k^V5r@3Q-(i-L4dhgLdBI zrKtwNmVf!=FWFz(tdEbJaA$4(CELnlscfu0nN7BDNH)dRW!ht%*<>u0j(sHAkvL^h zqO~QqEr!1`bkRdj7&##pyRCNQ+*vKDbTXFiY+ajdk7YVLVwrWZ_C$Jpa^$G{rnV*8 zv#Ip@DJ{v3$@Y4D57-PPmlp+RR}=+bQ5<~d^4cjAy1Hv;$L@^BN6(JcWxIB*L2?wO z0^shsr**VLgjh?eBiWv4iKR0gF{D~k=|o4eDZc;W^4euBEy?vDOSZOkY>G8DC)yK@ zAa~h~9oyAiK6z;>-7!11IMo!}l0n1mfi}B-0Lz zm%D6xO^izGI=Z^&u2A>!7-y3o>rAE_lVmH0|H%EK)n$p*(Tg&zt;uvpzQKBcqsh}( zHp77%9kRwux+9TFXJfEMXWFy4Hs0}vc>l<{x@YJ4)!O8Gs;xQMo{aCOtZSD6N9``3 zGM0KN31cCChuIEq>k4VOJrj$iM2_%Y@#(8FQ2xiF55?&V28h5|Px znv#vFR&+YS>3VW$Jl;Kz^hN4P#7<>dx9f3RItY@&vFN z6&pAA$v6__M~x>Ej9OU;8S7|H%Fsn)m~?yBjkB?F4U?zMm@&RSUVdz*E&~>IP5q$m zl8UGGr{3vxO?@XTHmn-=Exymf2lek=Ht{4LnU8C4&$M@SjY_1OjI~`|wTY~e=;|7i z$YL_+FxGT+)vYR z9U0?fz>+Q5r123{kVFM1b#;wTZfs1pb)+(BV`*2{xa3Ck&vc^2I3E1hB?x&5kTC@r z$5GswHWmX7F?Nr+>gt-9N~bzf z=m-}j+c!a;mc&JyHiC0Yvg3SI*_!BRY;K0gt;vq&Ow)QwWtuu$l8xZf+Sx%PH`FpJ zoxG6LlFp>jJD`;@nYHJ`c~_(I%({<)Z>BAoK96$k=Yq1WJ+%Ro%$cABK6EoGn_3Tb zjDglV8#|zf(Qvu+i6H36ETdd|XA=4t)zQ8Qnix$p2k8M0j^>ZukZSMfOthf!qb~#* z8eVr{bE+k|fB>nE<~UGWGVQn0380pZNb?zRH0M@25gbMa9B0DMw(Ou2C)+8>ZjePX zk!`20Kgp=T(gHW|Z_Vw@y=;WdG3GMdGrPh3dhUMn-^|BytBenECAru*-dGs=aqcI% zpXZXHYeLYQ+PUf64th_o=F9b06fsT6J0V`?>dWr`Aj!5VQU^;Dv#2TLa7QKgb?*&Y&+3 z3LSjL!S^2g_k&j)a`z!;8Xp{T@}YMg`u?FO9M)odGuIV)Blkt@FMsqfqw@9K{Am5) z*K%R2Yw(Y%exDmqHfYH2azC?P%C!zT-?+f2G=7_VHTRobu5yEMiP2*G2U^%_ypp>H z?Mxg0o_n@BW4xSu!T4qFCF6zMpN*@A?8$w9$Xi1WI(+)!XCD5&+%viF=bp-4ba>YI zhViZ3w{wr@er0?$_m$j3xz8Q`K<>fZtA|(qE%yOFF`LW%J@;Ym^{QC|XAMgYSUK#_gPtBXa(LLZ%xdGW(8gbKJ8Q<6 zKL|z4Kj&iBA?BZQkA>g14mID;EgF7=`CjfI<1L)u&;2Pk$hdBJ4qE(yv1|C7kw@&m z<(8QrHSxA-^uydaWe=47HTSdOALQN`KJbXYZ;Ugh z;0ySZj75M9Fa{VkMzv7|Wz$h+OfxJaY=ltOWHdQ6XFG8&H{DGUFQP~=-CBG#`Cxo) zav;tFaSY(}LBJkl3__0bMA4rRGvp{vTMNFU@EdKMhw~a^f^n{KrZLs6ZH{q@agvk! zh!Zd2_$*_Eak{b6#WXlojdKnEymRrI`wp!@ZzZZIx)dEbbTK;j9Ku{G=Uk4gLNp#e zo8ROs2oIRcNmJykaJkITTnbEr4d9g-!;QgsE@R=#)0!Kay>T7RClxtbF?nQ- z4aP;rCyX17PaE5Tw++3&@VL+j9vw#EvC#+~BaFTrpUT4?Y4q*5sQ^C&8(nH_#+i=G zj4iM;r7qxe*yt>Bgz;HV!B?95kpGIY-hqDG_?Gb`r|)zin~dP`J>!Q?iSpTP{NA_| z7QMrG4`({wH)#5#)UWv*F`jXbT&@|^xm*}t8$n9&>1+V^*YL&P7=OZ<4ho;=)Sn&5 zuL1cPFmky!TrM_f1z%|XVEn31urZ#8xXXrvupiwINjCHDA`tn{-%FZdqD&lvu5J`0qF0Z9oi zia3abzraV23I3l2oCvA3Ot$e^2g@)%!#t!me_i=po_FxJIx$IT7`M3f`8kN>G{lL8 zJiQY{G;s~b!i6}A)<{QWtE-J``AjAL7G1@8TD}Ut#CsX4m{LM~^pN5!5nbsV3h`h9 zk+a(BN^nq$D~;Q^kbE1@A^4!w6~^UA`ym81fUPYGgNOE}u<=ur(T38lBF9rk;c+F_ zG9=}h;BjU@4g+gMlCHn>3z;4)IN;WJ!K^{^NH8okVe|UcT903>fWFxJ$CHjy#V|_2ltZlF^b459 z0)q|-lA_!K;|F;MVfZO1y^eqD5clm^U?hp16FlAZCbghIzrCUIa7Gr;7h7qmY!Vm4 zCsoXHm?#H3Ep50ISSB&66{CXp;htpSlk5W>#1@(EWdoQK!l-Ps! zKBXM!A!qNYJj^vl-w&;G4HA8)USqsmo=OB`-pu#)ILo}^p%$I|0C}Ze)$^QfBr!2Q%K){>*EIJ z5Q!*fIFMJ3;9)TK9WDi721BtcgCK_H8gLI7|30rD2T3=BrJR9y23EloC`IR^8KSFj zFQ!t#5*n|hw<%`8+`UzPZ)pjSYB!9T!UpGAeLM;&JWHu1{MK_T@+JHfl>Q_C{)o75 zM+5H4zk^@jk6N~z%1feYuk^F<@_{kZbGzaNKTeATZMU%Hf}!SX^63znD4O)JoLvEF@@Pd@y^=6)Q?0IwePgL<0r z@gj%vl-Q3EEa_dYxAdhn8Z19h`xMgq=QL@V&VmvbwpQjyDpiaGkY?eTX)qL^4x;TJeSfd{@5eR&KelHU(@)Q^!kN2g++roi6llBHx@mU6gvBsQ!IVLN zS7sL*g~vCU>7x#7f4SDyQ~X$wg5J^>(_+uChYR%EGj6ex+5-AwtCV1KieZ$3DTm&# zY32r2SI-)Shw_xzUmh&!O)i(~E&cx2Ao-<*Ym$77{pSnmNP+~zrG(z@5TGqbAD-|-t#f`pa1W_ANO^qzr+LmCTNYq z+<|HLA7`Du>btM_`PM3=UjSEGzrNQkCStmQFv%A68p>Z<>@J}97xXo&Kt8Mx0m#=IuDZ$4&xr_Le>$yxhXk2V}qLxYQ=T)eW;t=IPZSD`f>QngyxhO}klu`=q zORO9YRG4T=4FEbOnvA z{jHaZ_nJbe%1ONZ`YgmO4v{go?i)D= z@0fVc43t|>aj=c_wA~BT#$wOjJq$_}!zcw)4*h+)pWrqolud~^h_@zy-H2SV{T~6O zq8P=f{4nLPriU8*xW&>5V=X9yvMbNRIEY72<-I^{EcT4v!=O|#j8ZV=(BEAE?Pz1W zGV!Gp^f9CGxSR_w$6j4Y8BWR%QF@69PfC@>tJ5e_t5CHYZJZ!n!N1(dNDf1o;@>H*?G&9z>jg*7%7xmLuN$HD z)0F1o@z9!OufDuvAa$00!+_on&_ikTodn`Xp)?oeAeclWmJwZ1UbLq=6o{NfYAT`k z9rTd0{%}za6bHk%Zhrp>;c~ap_e1&KjYQw6?>4$Y zl^=@n3E~vPCH)*c8+cLoi$(986DJR^@AuZ}uCIjt z-v7NH`v&^+RP#aJZ{W$Uaukn)cy!0p3*SJp*!@orgHpvXO2L#vfA6q<7j68mGV!Gp z^n_7(XjyOL9~p&*SEqqm{pB9l?;79X%y;ot8R5T#-{TC)Kl$ljL?QhocqxVa$|yXv zthe!Rjl#oU(~E&}kL!!ZFF7MJ?&0(c#_x(8e*Q+F{57NS@M@rxzg$ZEHTZG;n3@jK zE0p5?guc_$+hTt-Uhm^RJK2>-628+PG5>!^!!H=qyT-vlEuF~Coru?X>D6L6UtrvW zSBvHRW8>#|`IFB7++iR-k8luPiXM;iK{$V;$dSS;x9xb%b`!Q_RO5x@YT#Al(N5vf zhGoD1D7*mqSl%nh7xqzo)qTXzN8gqYKt7BYtS`Ztj?FlRa!StOBCkkyp!_Dr5t=P{ zDfvryz5L6dwD@=gFQR{!Q+GO$;7ipT@zU52P!e`ZiRwqj9)7|2PUBs?tV_pxc$xPD zPU#EA-@$NC#~m!=9iY$UBB1qNFwWs?A@qXrOL#q5mg3~wcW_!?IhI$8e}mVK-vI6B z@uL?>{Vy2ja&P0+;wWAlrn7v^f%s7BF9Ap{_a@8mCg`c0zNexGQRH%EfS2JVd^!~3 z!2}{_8|CyX0|%v08u_#YePTjV^lcDI`60rEJ~=_Z3hIVYtM`g#LN zCqKchVI0Mv?;31_-lgkYTd@w$_K!;#U$`27Z$x6S$;31`SzMZLtIOiewTmxZKOeu|pLoRna z%S!SN0j-qMnXEhvzuUnt|0rCrJptNb_~mkEg0?>|7!xJQFbwp=`f(fq8f{Z9cLdUf zAEqFvKNQ0#1ylN-YA8j2WIzVW9f^-<jj1lpW7mS4)r3F5($gA*Aaj8-e=4$@+?d4*^o`;{x-&g7X zdtNa1q@z@+mx+s&D~A|bTCBVjESForI+7QRg&U;>z98=<_U}8mgeMe)xsHE*d%2jf z7vQJz_f`4@MyZzVzkFl?ef~xt%6rmLsu)Hom~t42&q0*JEmoe(oes*r9$M?^XhC0T z3ICUQN8elDKW%v$=-q}!ZKuS=Hm;R|DF^x#St;CNnknc7v8@3 zRiCBrUu!)L6n^$;6g~x&e`rf3&M)mvUO9|H3wwi~k8>_QDc9FS>pT~A_LY|KUoLX= zRr)B61>Hp;4f8ujreLJXz|8#1W+Io8)$Fi!tB-c26(l7r|c_q#-?M+@ej6(~1 zgP)J1^gYGBZLi{amhvDy@eacCCEI_#f35X+7ScCBgZdEyk&JQ*3(BhHS}K^i+&RFf z7mS10!51(!C)kA9zZZ;&viksDFeWL_fvkN!xC^fTBN^0KhBjMBNB9};Y_ zS1OpfTmty?f^iV9*lU!tfTMW*dqG%b?C%T4RC@xl_Vu_Q6#aP=pUd5!rx(>yasBiJ zB@G|Q(YqInj|s?H>Sf|$<=Q&pRII!d%>QD(rtf8`E}X&bMdKrl2KxXP%d~VPR|%Y{KA}Qg5XkHA;$h8MD_K498zyC_jS~J zAoR+ouhRDwKVJ*;^DHsfm|x`Zq@z?Zj8ZV=FdrYLDTQ0CJeT_#DEoS7tzUz6`btaq zO7D-0N!K&1f75@KBtdF@pGoIcYh;rM5zh{X>ZA8~r$>-dye* zsP{nVl}}%#?<;=377FPXvBh#ZiY2`W|L!CI@Z_abera#=%0cSs4Mh-Vu_LGQ$>s82 zE~dO!N~vNPrC`c|c$LB}R!;v)B^U}{a>~akhEWQpbr7#oxW&qs6v(;6C_J!~%0ILgiStW)lUEK@UvKd9ah4Xyxzs2;v=)gA%S%I)1Jzd= zyAWepKu*f}Umw=A)*`V&`w}aMo@yw?>x6)u#LfTuu%@*Zi51$HSUFIAeW6p_6CF7z zmh_26;i0uiTv%Qjq8y~2()jrp`j3s2PcB#N1!J$2QpGSz!IT5lR|>aS`N@txl}|2L z>;+1%lv2eoO2L!^)mI9)SotZAoD@s?6#V#4F4ddsR5dtr$irm~x={O5qkOKM$`p=W^$9OO;p8aS*RC zSL{{cAh%)|rC`c|>MMm?tb7e#Yo>ozr+oGw2k{DXYmCAp$g!}zG(A2(GbSfOfRp13I(P01z_bN5>oCeU#Vac^cv=JjX?+H2|_79glOeQdZB+V zC8dH%G}kiiwfM(Uk|GGD{1CzusY%Lf!9z+tnyt)bt3iigOUe%sxJa1GZ3Pc0^=NKk z+FS7Nvm}+vNy-lqE+Qe7Z)I#h#;xF@ulfo$v5%eDfh7PJg1&V&QIrIDp!gLi+&Qklm~ep zIKe~9dKO$F=>Vn1bX(|xBW-TV=?_3a;d2sTOe$9~D#+xGnP;PF4OF7n3d|7y@|=L;jhGtM&6 z0OJRyiL({j5E}G9Aa}_4aVTn#1VekQo&KxHGojhxj<9WfIUKWkL@ZHINND4~F!w+F zQ<}g3&Hb;W9Q|L(ya(RoRtFOP&-@3XJ(qU4oBHQU!2A^p3q_9Ny=x0^xDPNU^ItIzsC2kAv0==7f*x!i$3(J$Ua^%AvouRQmsmv4*5&WZ^B3 zbMTtT?RbeRf!kRR;&V@T;QSk$3o!{I*mrWN+z2kj%>PIZT^+Nf9TI+ zy~Hjaz<;suBg>pG7mkZ=xLy6BTAPTyFmQ-V+BefwJYfE%A zXJeUlv5w|sY+a_kHMV5jS>x+FVu|)7*OTpRYs<7lL$M2+lW9iFv~{F1>Dc6SW-?e! zUe}p!j6pluWJi7czp<{a?s>~dAga1C(*_AUHnk-u#Wp0`Q;D@L$=L1P!7G$vXYJ9cM$S2|w4X#b4r5~bMGW$U}TC;8PJ59GSK=dW$gTmS{8(kx%P z11V^~9a?KoCTByCc=^Z@ICa^s?xTr8OR5R9jTa==C%G9+KC5_1U3SuxDIJ-%mgI(H z%akcSXX0Iup%!)AzAKGXU0tG{GtIZ}O2x<2CC1ey#&>m(ZB2GGXPQWHC&VW>nYwI6 zSNHf+Qt9Sod#a-%?j^grCp2c-ldH)zvD-m1*~``?h-x{CRwvS%K;wS4f5C9u6feu7CQyIqv`Os2nh=#6$ zVW76Yo^WR{t_z2M*Zb;qU4~>*mzmD!a&2u<7u zsl);JBuccmC(tb%wQ#1ZdmK||+AHF2s;j%fCsG0pB!{DBh_5pQ9g#uQ5i8=pv=+1^ zE<$Bez-j6*#H2G#F65Kc0kEVZdvarAk|%|Vcs@Xd^ZAz3C#ExZA6(QU&Bb^Q?}X{l zd4#1v>Jrp8cv~dxZoQc+KY%Ye? zJOK12kVdSJ7$Yy=)je4dE=a*k!6BGM%N>sGsSSyaWNa>L?x=jAG(e!OiF9gRGTTAi zrWSy(AnmSoyTdqK7-4zJ<3H9N?Wwh$s6?$h#Rn3kv2*B(WnM*G6Xe#cgTz|2FwqD< z%m+|EWE8SA8P>~?TXD`A?5NiS@=%Webl?kSQ9Gl%4uIP80Ac|ktj4_C?C6iw;sdev zNYMgQV-`SgrQjgB<9J4_+5^0++pQ^Jzv)_+3uO^hc5mW$8l!-&?iqywke!QzA+M_$ zZ|ZSI+hd9su^^M%NE7KqD>Fyoep=2Cz(p}x7VeTyT#<7&( z8fozA!1T5j-9W}3H`hg&qZn%R{z^oc1?5u6%g{hXIahVAa;E3QML!c5?2LG8s3F3@8T6b!L#aWnRfda5D(isO!0yZBy zY0GNLa82mMTD5pvK7b}FpcMApqw>JwTjL4p@3%}{wA*^kYY+u_4aS;EKwgiX;s>zk zla@ESeU)2=syqOrpyARl$qZ`b)4?wZ2Yz@kjLu|0_e2+2Rm&9MsH z&JO*#%QIhR_rQ$K-S2;>-%OGPzBf%x@dHG><*k@T{FljIo)M-nf^SO52hhrhX!xqv znbI2q5atsEjT=vf^pgQX9gaYBBZ?+!H%(Url%YjPW*yDSz8v`onpLDjP0xo*kDAET z{yR~`P4d!Yx3#NN9m!U9f@yg$M|ptK^wo*kd*X60LoJ~k3C!e^y{w~EEzWjgy-IU` z5I{{<$VR@V^5tjyr3*H%UT~vwMD0@5^(`Ckw!_ znrERI0k~%%hk;-HQ(aWH2(vvZ0P_rRbP+fcG)Mt)@UR^&9*|L|xIFURYGz)EC$^4M z?i8;hm4A*$qkgO- zzJUTB$auJdx4U^qw*+WwPqktu-oV!?K>&| zz{43JXg}^)k-~_ZlT&(c6r$l2jNZ%4=z41d5-5^^Vo(B0SGnEU81>(?g?#; zP4vVDcZ3LtD-F#SC%7HY5ECAw?y++k6WJu+hLHrGAr{`588fFTxeiE93}eip%j;Bn zJ(Nq*uDLxvEdb&xKKSJvy=^INs`ups0(Os?lW1ShRd9@l`YSpT>-DmdpJz@M2=pb- z8ON`1uS>lo-3rESKin+9I>SqndowuI?p|r*4iO;|#IeD0WM}|F!(6PX0iYm`XBZyk z;Q8k^sJ-6J*JbM(;b?vYT7mk?*$t^4|C-IqJ8n#XwV6zdJYb#7^qi+BtfcNyn9p(5 zb8@C7u{KGoUrnKeLUqAs_f zyY941EBdrVUEOsjXVR4AsH?knRYe>>B+f(PJS0Y~LW)kfg~-peyT>f=T#H=~aVLfo zE|(ixaZTV}&*IF5={TRk>-4rbe&Dqt*%+r2JO&kF#E3gFC{DqB!Z@E%x`-d*#+?{q zF2O^p=D0*qa4TC20r&%WMZO zi8^BA;MOhl{C=7rh%Ev9EMGD4h^#&KCKaEXhf#MLDv z(%93p*xEt6I=ah8##Uh{Z%^PJ-}>x%u{o*qIy{}47n_sm#B(yFDt5%nCpiSTMP3TK zZsb&Ke`#&0Z)@9F-Xbzwh{1dLiEC>r%g-BQxRh&6 zw9u|0j0CB4TW1kQg{-&5CyD^P6RURi?Alf5jcv?iE=VP@zvY-^^xQs;al_fDrMp^I zl^I6aLC5j=MkCXGRDL63A18fHjeX+0nB%Eg-tooTdwSpr0~II(e4xgBE_Le?c&a!W zOQz(33ps_@^I)qYF6gn@`xVj0LlpTBlC33$XEFyUn~%poNUF93X3_(c%EyC;h0!!t z9JqY!b{TnmrxIdUS%2Ivz-0=in@)7Q4YGwQs~x4TDY>?D{Y3OV+y&;1V3V9>A}u$v z<1t<~@l&Kpv^I5?!P)Uxo~IjAZHbog9hmz04)IYKThdwFO2#$_#hcujUYpsNY~pol z7P)L$Ozg};mS*g%XhI3n8(N(lb{bC4Z?apMx0x`p4yuVwuWvY}z9HT}vOXAX zR{mIlA;K9OX5>rkjyJ_Rp3((X5>!_)g?ft5H)v3We&rT1aln?Ii365*4O=+!s`IeV zi}%xbCPUj49SAQ>w5PE=^$*fr73C_D{WBhb&MUr-m zN|~R_nAK^_#;fC);3llhWH5K6H^tUq%$_th=3drhfA3fc%kPkB6O*`gr^Uyo(+D&0o z9ky6*nl9{vz_|h>1Fp`bSGVBSWP758h5;IfX7&KDOSE85hSLa6=evTFCwexx(>BLZ z#<#U;%EcJ#Kt?56TFPT9vA38R$M_M{SOCZRchpW<=I&`_+m(-65X-^^vGK&2$(^PU zk@_0erDPfGc3B^jM;2J>Pt5~i18eWluofgOOz_O>S4cy??R|K$krgqFe3P{eGO+Mo zW8B=D+=^{#v`rUVtlgf&8_8?OVz>0vK2gDovCa6H)6qR)P&g=U%P!Lkn^?U3L~I3jw)^r;%Ski&t6b(nAQ}v)*j1 zF_9)byyTE<#Ws%m87JZCrB>tInaS3dkKqbv|B=52#lsa#XDgN!_2pw%(ssjathE#C z%H{-KJiz5#OEQ7nv{+-NwG9(Px+7aZ3zym07F$?aL|L%}ubr^IuH2cd6eJwui zBZ;>9_GBw=8Le(jrB^3gI=Z^&ETbKu^{t5ulB+LBZd$z_8wl~#4q6*G9#<6cdHXA` z%ic#jVc;E8_-;#mYl~?-dg6Un$TXfhv1?c6$wgR4jG9uHqH98M8;$!n*)F;`L;+nK zj$T!lIxkj;30zz^GBz$I6L@l(9a)Hlf;z$(IdV$v>IPinc25>@v7DnVG2k*K0Klb9 zyf!v|RQoO;$9QiU)x|w7 zlvWlHW`dtbIzxT4v1f5eqVWzENiehb)OGQ?xJyYEb}m&{Vp)s{5LluydEX``zppkPTY#%te)+~X{;;m<-G)&0`Z|$f@pQ+2%}VOB0Ph7W_so9b&wG}H5OJUy$ZXgLh5G1?VO*Xrm=*6Nbum}{%57ILz6g7tjiMR)U7Ql$&@B^l-_NXg9I2*?TH%!^VGNh$#=O`PbQ1I-zT$1<#Y+)hCL5Ake# zpvkA)Sy0E$)JN{b#br?_#>FGf8d^iPd&^w8vxAUK@|cldp21FcXN9s&?oFe)B}lms zX_uz)<-_riean?*y7~vo$T+1fK#Nf|26=rI?bpQR;>y*9)R!^u1CN~J-aE!{ZNqKK z>jD;R${mwuOsR{Imr(up>SkOG!=SzQT-h#%u9)ksdl-w$PG|&7b4vjeNh>%(g_A2w zaX0<|E6x_K$NU4q?Xg1PdI_)Y2O6;qf-s5PC4N5@I&$G^r~CTRch zb5ZAqJC9(W-4O(jBJC}3TY9pm8vv+=Zw=ah>`XO$ThR6`r`i37+wxD34lZq6yLKy5 zeX7A28+yuQ&yB<&yY496uuiK%bEI&Y*`ec_?#k**(c}yisPzXp1x4#{SF%PXNu4Ag zq~Tm;Ao-+fUD2Scsr%44*ZH_v=OB$JG|q*6zK6_WH}*W-IpIj(EBK5>riv!nJ&*nj_`w*bTKb5XSv^$HGw#P9D2~rQC{}BjK=R#+M z3|%u(*O7>Ad^&E}IiVHyOAq#d8BlxtZIEQTWgg4`I{a0jYHjD`1)D$Cq8S?K4u7FK z`O6{jUmSs^3-FXSPjD;~GnM{+Ly>OBV<<5(W8ZmyVt0vdZ!-X0H)Z9vBr>9VOlsHp z0n;6#4Qc{Fuor_4+T!T;_km;rNx4zzcv7>?jbZo|^w%K3Yk(e*Wg2(Hx_4H?9|d+| z%P1j{dnK{P=85}Ea@pnnDKyuOTsjdn79^8Cij#IXcm@N?e+N+7-@izbj!$vai(dM< z{v*ER&8|HbZ?Sf2s_^?H%37HBkwhQ3q*Et)V!~I6`6geaWU=4!t zECKwQHr@LlZav<4B_?PmXLu@zrgcFcl#cAGW`e-LR?B6AOtSxHf}K9C8{|H()UMN! zLvLo=&fRv%WovscYA32s%wTZ=WV-jJT3Kl88N)WI$`}(2ZhdQ6!qh9Al5VvP~OlIW9&3O zWPubCFOMjHsK3Dman50f_b$xxUr-9R}#pC3bs7+j!XV=Z#{BQi== z7F^%u+OR3#i{nt2Wtua=KV_8)NmEoI7@IbD?R&+peq2=#(2R(50k^i`J!0}7tXfH) zSzQiOLFKuWz*u9JbzAM>nkcK5i!E4#gOzTm2HO7qiXA~yL_35=1kX@PI&UbO;#Q>( z$q|3sA7G~}1?JWMkbRMU*=GL>;R36DR#-M@qHMe`^Ve3IpBr_dr z|NH1|@`j_zotN#WUJKPY-mh~6wB}g(*HFE5gFd^=T2d44x4J*o>LIlHnr-z+t5(g@ ztshcl(5bCCmJ8<+AXbtt2v*mvicxyBOp){>j`v7m@0fs9*N_U;6vu{P=}`NXWGDw4 zRA&iMgVFSvhGheC_1#M9<9T&*#^l0kGk`J2n?dsd*DJ#I)eRchb-~}<#3nfC8S6K>V(0MG&`mEe*g02U1@ zBthUgd*TS(=AE`zjY1sv+p+wn+r*z6gkCZIgXg`Ey7qmN(kL(`~t zr71R-w%NKaN`5G~f+#|6pU%gl(K(8v>^m#BnFigJ(s^*#k}XN`GY-4ty;JAo$(pQ4 z109OY?gW0w{3;W)=rmXx;kC%j$k;6K{tS?Yo{S)cJ9uR}$e7^Z<#xF^)3GBFS!6oi z=1yUzqK>!ET2cY6C9o=B5O_2L5%3lRs`*k&{W>1?N(?f)mlw=Y2j~qePf>=ZJ9)=& zf|ZBJD*@*l?&bB^XB(;6HjwNXLiwHg^U$t1)|HB;WV=v45r6Uj_&oGKditlQ2h!&* z$1Zxv-XUU=9&C_~94SSyYl>eQ6QtC->?kA<;K6`Ar(KlIdXccynU0O5IOb1_ldG1d z?U6jw@oGJ0e2tG8AFacTZ}8^16=rT83@ZQpQOQ%abn{SrKyaO*kwBYMLj(JjSr8{ z)xqQQ-soDv<3Bif{Cls&-vxNc38LeVw12o5ktx!%Dna!pq$!}rAT@+?Y5|kX+g&OQ z6O=O;>sW4EGR}ln5L(-gh&|HnAoqJKJtI7R%KTO{;otK(hL9|bPQ3g*7GvXQZp^gZ z7voXeH2C0@JTx|C$c2g+6oei6ouaX_ws9S|zbe^37LWRA%#@AJY^+n{eGRu=Yqz4M z4N*C!V*iH7_iV{**H#&&y1i#{33@f6t~G@CH|pz)`j=N%c@GA6TcWYFx^iT|HM0NS ziYK4}oR3!qk6S-8cHa(VVU$$q3%Ibj`vL^r_S4tu zr$*uchy8B=`#p)N3XF*DMsUiybbT5Tkt>-T^^6RGrSQ)eNtx};%1c7Vum7bCL|*?;Nx-I#s}uqC3z^e-*Un)$;;9D*`FEq?l_*T zP2;t}9vtVQ{z0dmQ&_nSe-)JYS4Iy;xTRPT)v0K30Ak06d2>tYd^GsDvH?9AZFwe6 zzcxZSAI)?e2E_zB63k5x-^0yxAtOA@WTv>kLLOKTJBz9roCDpVFmp7)Ke90s+{Gpz)S0>2)2HUoJiYMT{E3DAqJpmK%00`JzjrU=y=VC*Qu6za906Eh(CN`?Bq z)kB@;URBT?&|7pA&EenfN&ekC)k`Nv3+ug##>w@aub46@*Wgm&$Z0wdUAUAlF2m`- z2)1HsRqCESZuFI?_%CWSeJ3>Az*DQ(d{#GBmIlt=Dj7Y?<10%nN{fK;W5t(>)YMM?hcD9_-1x;D$9uGk*5O> zu^H6%i5Rr75QWmXI*F;ICJgi!piX>!jT$4@Phl1?7jMMTfnzp(PVO?H4r<1MJ1bo# zdN*~@>QRYm5Jp7n0_?As@{5J|2$xrj47RH9A@I-Hy)AMYf1t==EgQfuiK&C(TPnLx zLJPi7fWIW@dtDR$(MHrMcBLW&Ik!MqwC!2?$c0 zjaud8{@9;~rrYvTVXZG8!7El_ZG7%p5qPx*;|`++TdwSWVQm#W9np%)o0wh4>FQi% zyK(4UhnyQQf@+E0Ao~->ahs0evH{TRRb>+V8i{V;&e1A##@VwC8Y5J<(E=Ggt(Q-) zR!7Bi{lC9!hn4|*<Qk#UTxD?wABi3}Ro2xqV<@WwG|kz-;*e73AV7KYoam7V88qp?YrcYoW06k|+th?}R7`bUsByiXzZRum-qsyC}{g1i)EnGo`!f7@52IZgkUT(rC-w15bw1m(&_z!s#7x9 zGrD-KSPgS8u1r0h2BRwTqh>%3evNUr>(nm$pshg7%j$@k0R#32-}dF$uHx6@NTBwv zD3&KwgZbR~B@u7Zk7J5(+`YPCoN`X9mMk>ibf=EUCzJ_wFrQihxzH3&#?XN5%b5h=?dK-?9Zo+Sd> zIK*YKNzHlv?dR{*NuJjw5DG(L#8aXC<4GRZd6$84*)Fj}V3+bx)ut9XMI<2kR0=M_ zuwV^ZpgCv_Y@H8Mm#&krioT3%(1d#GIFN7&y4LVI8gC~PEMK34EFUbM>CWwVJe`os zXZvrhZdhf<{1V)s1DJhixG#bl^9_0zhF&&srI77^9Q@OCbdqk~F^%{y@AXjFJvePx zUD12~UB?JmVs7}f1M&$0>;)d21?$yw6xO2K@xi9w zct0>@zorZAZIsOXd+Y}cmjhJ;klXRThUqLZX1|#ExE)W_qyVB3TuK_m(_PQG!Pioy zY?ne3cnkmd0!LGy44Ep|ONz1y3`^#+X*e>#bf5#d9hQyIn{HL=^QK!9a`_|do4jCi zw%+*@6~I!qv#x8&SMqN4J^Q-t^vq3-KhWE;n;Jhk4Z@_GUY^q7x^9}U4ZHYl+v(zN zJCojkZ^sTtyi{TW4mgUX)b!0`MXHGgBL-ljIMn(%TnPmN?!t$jAtd?Q<5sqT!Zbs2)0Q2LUt2Hw~bSTmEL#%crh=kc> z{`H&E_ZQjs`bOS_{yUQWil-#D~_va zA#z(32Jv_8|9WlvFtz|CFfMmnH;&7Z`o>$9^jrSj+LqB6cRHgN+bR zW>?D|Zq$cu*5UW&k7|1})C>+SIs?_9Z2_b~6@Fj-sxr)K3?QJ8HpadfLnm0J3>zf> zB9OeRxNhG50&l&FD4HVbgO#p}1^bEveWgzlil9u{3Ts zXFa+7iYV6`#CQ0zprt8Hi#<5suI!h&f>oPD?7%TISx^1;V2jNnJK>cwYo$RUZu80u z!(1#A%mr`#fwOoX3*K7c^LVgx<_SDc1Usjn#`CdYXFuN`4|ewO{baE7eSAI^5JY>KT#0k3?J|HWX(ktg-glnLG+WPkZX zMq5#h3&h+Qeyy>I-;>+LhIW`0X4*`~7%c55n)}^Fu-SPgr&> z2tUR5QV@QW&-EbO`~aRCLHNcEJYNdJ4d%NMgf~t`hj=0b54_-=qaDpcu9t)MKU>E0 zm7x6(PvQA$(EfWb;rUw7{@c%N3Vv>S3Syf%0m7yQ9GSaKA4r?3zP72>8=FS82^D@* z(Ecsg@chR?`^T2>+zf&noXgjPwm*1c^C%^uA`j)0Z!x}o`}vgt_Fqn`QCyv}CsLZC z(^8=z!t|dwD#G;d!lNT-`;KEGMgP=M7!{Sk1Vca2JaNvv1Q!tNv3;E2IU=qeFx9%* zTDZKnx^bOC+Gid|)$3fqtPO_K;$)XJ?FUlOFT8S4oND`FdShrf^ewsSgnvx`IRqV$N zYV<*xR-m}JL6R?t8>Fx5L_~(Cji%xTwG0H*+11(Ab&!g1Fl`baTsfQz>4vLCfS_Jn z)2!v;@J*kbIS3N$gxa5ExcQqCYNEl6CJ7o0W>^bqY$eEe7;ec=(p*|hCeg(Xl3Xsy z%o3Y(Xpp?%1es({Vgc2pNgb|-MYd$8a#FI|d82MD0Hl4_Lo8etN*41*loT+SC_vte zg^CH7Azw_$9xWqh4!AItFZyEp?^I6Vm{mR}379WQk>Eo17a4kXL#D}jqim2y4m!!G zt3};gH%Z5RvsVC1O#R^Qu1yq}`dR4(MG)1`Dv2g5xB#K1_ZG8MB(D)v%{6YQD@rvwDrBYii>=f;}g zc`8Y=4M;uKKe?e&!WIpK&S2+8j!HL{Y zTf!|l$zy{PNjAkLFefr%g?5tWjoK}))Wo<{yX4qHvgEusbWsFJ68t3jiGT*Y%@k8= z2~PSriG)vSXA?3AqgnlyDh8XkL(qMyFkbm3sIJNnUEZk28s*O7RZ~TMmngGX$F!_ zLj(OxO1{VZJR0!JOKFxz(F==Hx}zw~H|fcUR6qd>w-WBZ21q7FGHFt61SQin9L;E9 z58-&{XCf#`F85B_M#RFBGK{#{y{2lDb$3#vM(%_f8?us0vk=w5Np{xd`ra-t?gOz| z-S}xsC?{e{=!-4Ejoy^tPdmG4c=dX$q)>jBD+i_X*ao;f%7`yCE-XWv-SUza7kcMxQ#AYVGFnTbOO;qQV4gFoaBWR zLEa3#B-u~B<333fEbUCcg29mN4n5F%O#+&*!Gv&U1PdXVuXK_wM3?qI;~S;p8!7Rt z32!7MG8ND$PQB^cbK#A!PFsdIlJ73Ok^ffagl#vx(LAFM={_wJJ?1CKG;4}Gj}l#3 zCP^T=GR1~B@?JP5elqk#mi~B>VpqNmb7EC)aW;@6SgMh`i&un3T*wo|5JIBW!nQ;vilNiGpA!cDganAntf8jeggC23UQpNASl?(YEnie!8vRJ7q7$qn+iZQ z>;)jQC!ldZ&2Y&~BD3^&C=Aj4cYVuXL_pnTkBJ8k*;m6{;N6L@NQhJKJf|T6{5YI) z+h2ltHvAB_ZDg=4x#YnXE~^j=$`3`vH~*}L6_`pOlYkU|l}Q$}Zz~epB_+4L5(t%}d-KajT|T`~(3FdQ-Ey$jR9>T_kd@Mv`4RavG5Ob~C3(`DVW4mj3E~+=&j8YVvOO z045|PAA3MLfqV&5?8Sg#q$ksf%0`c;5+yE2Z3@>3tD}MzLR=)jDHGra4n`sf`ET5a z_)(>E+y%8$`mO_UWAH<4*nP(fu`x7{oGv7g_rk96lLO~S@@imZKZ}Yr_setw$6!+= zhKBz}2@pSeM~vD8vUtprKC?`u(iGBK68WSjJO=i_%u0}8zs+tw@ib^-1IZ`wkJ^A8 zK$5`8HXRTsxXDf>Y8Q6klEMZir#Zmpok0UBTbq&0N0JgCm?oD z^#}-%nDJe}OOk-O--4O=Ao5;WiNH1YZV3nyV8P~M^hk~*K}Zm?_$0`_N)4bd=H1Yj z;2!#qLE`v3*NcaXQ5g#83rD?pd38Q?PqW9O$iwrh5#*GvGq*aHR~pH_ixCr1Ink zlwIG106fE9ARR-7$NeOQa_^z5aJx-AXn7{xsSmf)Cn0|9HO`QEGu6!3h2qf^VbTzg z25hLiCQN<;{(GB1b$uKK%hqKMl}hbttLe*cCZzsUV*UY zeM9{&ME{g`j*~Tsxr^w&%~@QbLgtd#%6WNha&8HECrkxSk|K+FsxFn&kE3GT4K5sK z0vnzucE7NildwESCVmfrdhRtWPZETuL4=hW~dF)Gva@C#cAF(5bsZYONHoR>{HY# zD})M^rW^XsyML1bW7|C${WNSuW7Bs{$t`1mNuIq^(dW~7kdixvJmcDsGrNmE$9%hM zQ*$t7ymQeD*rVpnsif`1@PQfxF0^fgp1Ta;<7^=zqPi~X8^Ov~P<l(KFRB3U>WMo{e?|yM6<;cL%$E zYpojg1dkj&u{m1}dxLjehp9?8*nuo2;TX}P(2w8-uatH zS!_7i_3fuNI|o_wc(7~V>1sF;?8=>-lAS%YfEVYa zbj7_?4WA3z-*~|c-1r993la&BvPU6;OQ8iXwHm${1XJfY_V)*EKl1{x6RzGxx&Hdv z>Sai+jY^#w$xYci$i+k_-WrcVhfWNZVHZc6unSJ(9)=o~1ESa`I#%@N4Fjnws!%+t z>U815$h3P79^V;aU`4_VAon%cEG*V`C|0FbQG~;aRn2_ZLtKDvvb0QH{-*84QG-?{ z6gY@Ca0v%zYAQ`>%JC1uc^xc}HF38lo`ymX6#6u6$SXRUE;N$LZr;wSkNshjwX_J= z%GsR0X=pbi*jZR#C5KC&c_w90bIs>3mrPIQM2nDuM+|&YKbth+=hI1Y*2(s!vO#|k zL&jg)Xd=djOfd9?O9o%WuD4LKMzyBGldvPa1|^9ia=sCdYmK0=;6qoT&20$6+?+A= zH847}2o1&qE;B+@ET|eJOn(tt(R?{kT!x9Pipr(g!qT*sF<*2Qnol#0K8cTA*cca< z_UY$YXw;>OWxJ9OcAdMio2s)tn&+g(M^GL+k?@#YW?Ici&9nj(KoD5EwNO2)^t@7B zI;?d0wYZNjxuw^v{xMvrShuAvU#0Kha^a=IvJ}EgX%WW&ed#?&f%suvOyd35bB>UO z=Nr_fEto3cw?K>IhZLo2YC2C~6=Lj#ZNs?gk+rY7@6f@dtqlBILDd_UG7_n-->l(x z(_OYH6TVk`XUAg}Cik8cn zeiiZ?su!N}d-SybG9Sl)ko6jy&8Z38#Eh*548Qc&{V7?`u(Y5{X18}r7SV+K zL!_dNqb$m%L-~>tMV%}6~dLiRSp&Xoo`LL^8GiG&c%}SmHsw?a8d|P?YTT6=4jTpbp5|2^&|YHaK@&a z^g)@fQodpWNK>yM#X^HRrIQ#?0Df|Ve zNBx(?1`2=VT-n9ppWBR?;Gz1Qe?`MS99*sclOSY*tqWG#+UX5T-Q-LWrp`5JOps~4P+G`H2w43RH>r_*_Qc<fD$NeNU1Oh)INzWE& zxw>SsO{CH^pTC<}*d{A#^w|?e-%a)qJK!~cz=Y?-OgbZnEW=GI&<&^N9ny+tPe4lr zRvEGTC36giPQh0U#+{?lC;AUvDK5d@cxKQJ&0^-m0J!uh~# z=aJ3L&V|j`Yq~5BbHq_E!KaQW!-wG~3=TYVV$3e<9Z5ZOIO%5V*Ki02=VW0HN8i5$ zz5?A=tf_T?i240h5}3wc>6SIlVt-`?iBm)x$sTkb5-ILtak5*P;CH3BwbhyL70+wF z*-|v8xI%7N((XLj9+0qg(=4aec;Jg%qQ4!*nfCS;)m1a?Age7h!0^;-4mGEnsfG(d z_E%2XVSA1O<399_U6XI{FWE(MGyVe59Ii9uL`ocr>r$+fo#aHKL7AAlOdy!)#xJ_9 z#9~uFqxF4Y4w;Mg$=YJB9#%o0$Ba3k^{~DeC-komvZtS5rDi*+)?-Zj;byRl_xrQq z!%V>exP#$LI`|aqA!mI%JQ$KK<~Ih^{%3&dRk?932d z5`nN-AI6hC$@Of^zKoUPJ=JHp8qmIWM8`C}O?!(_vs%uLXPR0WjaGR!gl#dr(=1uD zy!HBc{WWlGYKc#|2dJNh7Bv;f2rwnK>{okZeT-xE8iQbiE@fDR zLj#*f8~RqYdJy11J`RU=6Z0re41f)w8^eTH;N!l>9p~e0FK&Tqvr@D|M*&_&hnU}q z%CmdU(o$LmrDu8|5RDVLed~J6!|0#F0Y54s;*!O~_f*og4t778=kEl?2CQ#a4*IPK z@USl2um$G8`vD7QBGAPTVt#Z41a^`iG+U3wgyawT&E2uhW%tyThf^x6z8Zl|_KkJ{ z83l#y$83v!Y^NUWpGELYJI)=5h*SqxNC+Tog83=J64G1?{y;!=>fv9TkFZWEhg3TO z_-86p1h~$7A`_H>H6nnY#hTcAL&BPQt%xMT0^>0Ir08E;ZL)Vpjq9id#Qz0A>|+PX zfQx|3r#kzZ)smfJADWZ{t~72u4JI6~5-|OGWsJ4y1+hS@DTID=YY1_#ummEBq`3{? zWCvg|pX&TNdL_`O#VZj5{o!!SR#GBj3m8{`~G`D+*9 z`f7EfWPRMW|98hPVeReCtw$UM*-Vi1nmWv8fY5C9x`$0KM z4nsQLUeCQ>##B9`BM_Ccm-25V-FTOwVU*vxkDFWSM|2?45I-lC-%IGGLCtKDZ4 zI>4FP*_%mqkb@FU4PHxdsolmI4{4|<&Wbpp;Xp*k9L%J%|fy)SyE1 z-PMrYTUUkgceE`G`_Q0?ZIuUeZwE2mya$3=@GiAgOE|k#4uPOu z%iofTmuSV(e_bSyyv(%v%--xyxe(D^Ic}8b$iY|nX#6tVz^EIbV{o`dH&$S;E<-~Z z_wZ)q#A;4998|XpJ5&B8NTyK&y7OI@cHy;$LIs(7B7qJ%6worb+AG1qXK|S>^WY&5-)t?DD9{ZD zwf224Yb7^|T3!3oNbIsv`Z6JRwA}g?oR@4Vdgr!bD>EUy*i{Z&ngdH@Vy47Og;ExY z&Na7ye_XcnNkgU#O$7lLCaDGBj5iv92tH}dIAi$3QefysgZt1J0Py;{yoB3&GgQ1H zD2fb<$5X`EY&n30oQ0>iMh0+X*+>q0EyiSFNr$5zGQgc^8X1<5P=^dxm}tjuYeIN} zyF-TSDBvT*I%~BMvbEksqK6Ex;x&b=UzNgzkKpt6aN)-q;(`hnT7d1Z4;6@9+rk9g zW|ycQ3N@@ADtTB)y^g&_^i5K3?wb==mLpxw9g=v6`nc`Fv4#H}tla1^x(ydUl044f zmKWQWGzeCjSEekQ%TLF{>5Sm@c}Ni_JPkr1=j6=oIp?AN&YjiILhQ`&!ehCmUL}@@ zxNRt-Uc9FRwRj>^-7V!xUN#S5N^7K43aId%L^CHtk|VK^hM>!`Y`Cw1pCT8HEze1- zKvz_i2A|`WUybKEcM^15qXAx3+)F2&PzJ9)`WfZLovfHUfCXIbN1!2sgr%$TPX7R4a>oE? zrn4%ZX#k1lpY97BZszL!F1YT5w;JMhw~ z90k(aUn?8eE&>6tmgP9(009BmeH3<68uq|nE<1s{yAd0Hv>vaqL+wr66+++&dC+e_%B*T^Zo&rp^+ z5imnKY?0nl(MJ{mVlELRR|R+R(7 z$*m>%`ODBW7=`l|sj125vfKusrDP8<&Drq`WBv|k9d&u);e)tgh1Y*$C6o4?gsrGo z3yRzs;aYJbGZIV@soRkmd3cB*M#YOmIHv~FrPsy^Y<;Pv;DkH1#Dd_`sAxN$UMaR}hDF}v(Z z!)vOOc8$opQ5Asfb}vM_=79rx=WN?+c#T{m>Z(l7B>;6RT$pRKcxqYVYWP8ndbh!2 z0;NPdgS@?bs?Wcc2n4gIRixIu(S)J4nC>^>ebpmacK6d}i%Lx2y!pljj=6=yysQ;o zD&(Q5j+J;XrOJ?kLBZLfpSk@?NHBFa5yJ*pnUe*eq-HFa-$o%|0&gyeg`|%)vvm7j zrs-j{!(k; zQ;&kf2Ek*_=QV4a=F9 z{8FZ=`{GJ4JqI+7k6N{2sWL`~t_ge`kh|HHzI7~JnAJ7Sich>}WyUg!&B#1JzycvW zwqhK8H`Z{!2|{VsXR6{Ml;*rO&F|Ho?M$&JYPp!^K^#tc7YldGw}_&(@GKWdOav3L zs~k`wioNCTco@T{BmCH(0*O5h%q=cI8V$ut#JoEapxfaS#lkY?O{4-_QAQwg%j|%6 zOPV-kN~g$@uGYFuC=(pGJ93x_W<7d%QX%d-oNCgeb=#tZeWu^QP`gnyp@BKqpo4{i zHbpDl^mx>-SK1(%ZA|wv!3WZWFB4pBLisYm<%XnBBg>l}-aXM9nAH$GTai16qFv4w zgl^mstV={eskIe}!}d~JqB(H`7{`UesuammkAB0VIM&;Wq!exKS8*i?6}5|CKyW(1 zUDRGZG%>z_V<*6>Oe)#)Qzs2uL!AIqs2@6RLc{<;!#wvHCJ022)B@O~sz)iNXFqTV z|J8pf!y=1pD&@}ZSGls^AT#xp^gh;RYWk%~O^m7_oWE0jGyu7hQ_O38`3}IjwBzo<{^*MillU*mf>-F2uPKl&nW^3B7y?`uii*-DsWy#*G#BBhSFp%R&3U zeU1(q+JF8k<7>2k&r=6AsI)tZ`tFW5+m<)mPHncqR@oZPsZ37-hvSlbDaOD0y&SPR z#PD7jn-H;Zl=Z6erqOa?d*m3R8F|ku|D5C#7nxSCqt7_DGPOZDBQcYLLkIsgj%lwo zIb%v-a%icge`$|Q%#7^CSqRk&sVN?jbY3kof1~jjk9ejF(6&grz{rbi(>lp>%`vlF z>dEoTlfPI9&{%rOSA>-7nVrD>u3;OyiIzP>pp|HZFw9(^6i%Xq8! z&xKbp@?9twi+FeE3a7tgRW6;FFwH@oC++8*c5vW(=PavcA|w5mMU)$AnpW-`C*ZB33qPQ+F5sggF%(neyWzz5$W_oy-)m)5gZ5s;TRofDRHRGdeDQegfj$2oS`G+P# z!!c3O!z~f0i$m9torONH>0y26ninw|UDa%-p*IP}>AYcaQPo<|FZ-;Z-{8}BFV&zv z_F{vC%4`k*h+u^r^SQ&yO&`Qyr1W=L$~LB#h1U|T_-1XHP(#|-U6v}tu`!iVd@Vnj zGtu`mQ|q5zEBiSlGanl6Yf&ZLQmit9*?{I44ICk5Vg)!2KZ%*Aa2ZUP+u`b@pQf=m zJR>zpQG<-(3#eemKNFITAxmdfBI<>suDWxzXt|h1%S+AB@*fFW%Jp-j@#fZ3Lye=_ z0h(j0SY*NAx^?$m=EkTlTa6(nPT|zN3%EF6)$mNvaUIyYoxrMkQ&r2jyY1#504j%_ zPQCCD!aB<8xCE~<*qN-ZQTS1u8nV1bNyW^kxjYbwo#UC((u5l^Nmr*8sjE1K3;p3M*!Xee)o*g9E>i z%eT&(%MY$2s}kJ-{uGkiV6?lRS5;bn;g=0rN>tx$f+xjHR#u&uE&PKPx>UD04Q9Iq zXra;|w!NZajdeyis=|3ntqMlJV)i@afp5D*oSEky=oL(3-2IL=6M(<4B&ik_@!$M# zv)#vSpq0PQK_6@}XkGaTScx^1o^IL`(3E?N>E=q;33szoOQzt%OG4mni|S^AvvxVB z*MCE@n+eX@+-7gj1Phvi-7I_7QiE-Ez^7-8=&%e`y&~|wuWp!;w$c=Rt+iip&Gva) zBiyjL-3Vz+ElbneYPM?oE(W(N)h$C%;D+HVl`O;mqotvGHiFM4GSK`}HvQ@$N|bNI zbb;6*sd7hJ12dn#jDq+Y+6}H8j5Ype+O7q)R}4|g1^>{BUz!F?*@L9Pmerz(zpuIr zQ7iqx70GSFCK7rf;z+?>`Nj8D8jXwmszu{T*xLqe-$&tcrK^7+#=mmQGhHV5-;<+O zCis^gND1^b3N$~kWddxzW|n{H}Mc?*%s6fcqRKH-zgBu1YeY<~|v6NU9oX#@vhQ?_NdA_)sbzuvKo^4AKHGhuwW%BV^>=!nG9cH^$BOF>jza zHQr67wfH%S!mcmWYstg!3iLj(S6E#Q21nRlzYeDQb>!}=PWMhX*4uE_L?=Di-W-{? zKP+RLX$J>o&(fLp=LIV;{{uOko-xyyL*2+B;fJ|bk`s)R^cguJkk*`cuHekm9Zg5_ z=zT)|1+4UO&R#CI|G2;4|3zi^1RU5DZsvK( zI&8t>PSb?701ECBO|Rg(=d(1QgY~`r_Qh*=C4LDd zvbfig5^mdK6}UGgxV=?e@@2x zgd&1LhB3uw086M~S7Z-x9k@J$zls6SK^}a@g(R|+Ns;__iXhhb0%8iXm6V<3hWz+3m7!TEt{WXlJKz`XfMc5iVlVS2@-eT3 zT`}ki7J)^cJInD%@(R~l4#2gv3;{aoT3*UcUkz4XdWZ@}1qC z-Ba_nBJjK`rDgH8SPgds!Pr+;!?y&%^Kh2GGiV=uK?b)=tu|q4t3(armI-8B&B2_ zgnS@SFq_tUU;Id%oB$AUtB>IPx{N6;bTY9^pcYs^K(8vlf@=U{iU=nsTW12{kX{h@ z2ye^|@h2={5}-G#yY*)xn^^3c>Uczgq8EJdK~NCybJhT+g5(Z!g)KjRk;K^j9RHBbqkJJ$Z;?f zHEc7C!wC4Gb6xQ?-vkBNpXMbkzQL$hPK&ZUyeiCEsD?}AHTeL|3A z`G1hxF~wW5Ld1#+r+wUXrXxfUy{JiDU&hX3-TeYBX&c%1z|#bPXHQGi(-*F41Bao*F8m8kDfpGp5D5rQ0B-%Ouz<`sTB(hiEQ8R~98?@iG%vP~Ey zv7>aF1>b{@aEVlkAO^8riTd-GX#dWpe9jcx0F2#OtLTHAsZ6SOmE$=4A$xvlDY^ha z!TMsIW$VgENYHw;Edqm96SoarOY7xp-?czyBP2WR{zpu3d56My~rRYK4TzEHvO zpsL(22S^_yN_`qYP~Bz{y3Q&K9B~V1feUutk9@GOfAv5?+a4&?yh8B82Y@iv4(N-< zxQnaG?opou@UkOLHi0E9toxKe>w9cltKfzjgAF>aU& z)}#-)u?+HQ(hdy6z`6D7M7&^>#en>=Vkl<@lrZ%P|vtDTx`NB}f73MdByc zE<0mx@0MM|%wTQ%pesHWwEftVc#a2c-*Qq|{;0DrLc+e+7V&rgtJn6J2i|j5rH?xOY9!FlvWH3m{OtPK;Bat__rr{{cHFBXzBl}z%cTw?I zdlheZQy_y=U*!r}J0qAp)03o|;+aoMR1<|DUV&2FcfrkzWQ)6zV5^A3*AdEtcmrpk zE_?>euU?@9mw_-8*}9^GNs-%??sKn3_#3@?-gFbQh$H~>RqJsyC6KK2EazXoWjgqi z3EluL(LsI_cHO$3W5#s(M4Q!A^6!&M;AaGtICWQ3lc^&Pf7SzPoZz*j#yz4=?BQnk z{q$vrR7FV$NwA1)wmWUFn&y9)x%zVXSH!p`@#c;={fZEb5cb%Q-x`m2Z@Es2a1O=z zSHAP%xYG%na5wf2B@KeZyN(hJTyF6ZH>sK6y_NocCsxt5C9c(NqS6fu)=ZECXi`g! zyjHTFyqd=<-TmDjF#>wwy|%ssEpmx8y$hoC*CB78D?_f>1)-uLfDGk$rw!qw5W#V| z4ENS}JB7DXOQ*^V&3Fge@jbbfr459O0s74`!0fEO5m)@K#=;OF+s&MlP z;svZrzq3K+w_l*dDD#)6C^35AINo*!*_|&{!?y<62_(KP$c~$<*RCTd z9!_-C@Zli)jfhORE69HHlY`xg0RT=fbjCIo3!70j{F30Iy&Ki=-N8erE`4*9-Ls?r zaj;f!dN&-E=mv@2c$dIxEiOw01Nw6nFexK1z7<}9zbFT=t`bH7Lwng*-CtI0R@`@tIBfS3z1zy1^hRc4m())$12JV%k= zK+y4n0Qg|g@#i0|hC@NepT5knlpX&KkC7nUac*au{O=1#s^M4=wx465%8p-xna4!X z@%uOZUiiPu7ur5tzJ9CRHrw|8a$CObWm8RC+oKCbsqoQ-4{FW$`{=?-Tfn!W*_B&o z$Og{mFYk8fLd;Z*WH`%?ZXoZGpyNv+S&W1BFP>#g%l0n-4UPuw|LW9)E5>k>vIG$4 zvi+gc2i=FI)dl-4>L&poNES}M#7Lc(0EWa2&Y$cY>Kqz%C65#J%I$x3=CzM(#*>Ex zgP?%UIEg%%P^cdE!g5EABo1P?r-=+VeO`%~J^Jey4h*w#8E6Iy7)E78yrUsKuuc6SX}EzUhjz zx`{^^w0#Dk%(NYQ=Af%NRZd%Wlmu-^*H~ZX;8jRji0Xx##nL*&9z|S8Ssp%ul%?r6 z>>8CL5FT!<@YuA}u!4B23=stCjGaIcOf*o0FCsZ54lJ&kUn4*qh^Eb3G`z8b^EY;< z#q|Qi;m+5b{tXu@1{t2yLOEu6L=hW+@40Y>GLZ)QPgc~r#dnyA_fU2qyDxtrp7%6Z z6GVRNUMOr6! z^HNERZ`9;vJMy<&Y2~jtZuPOIp8d@v&T-Q(gh`zPLKCc|#61A0Dvo*qlWpZYKred& zTS_84ASXO&M1Op%i1(3Sp=a>21@aHo@o zY^7?^%&2_WOR>)PI59A#{i4`Sfv7RIDXni@bp0{lp%KYJ9>din7LbRxa0=0ja3O_m zTNtf_iAH3pH@OoKqBU~ zLE{GO{FqIdf>uNRGJIT~hqfc=8`dtH8%~PGaZ-rC>$BU*jl+pb7M@DE(mesv#Z?5} z6Zx2_NcAd>gp3Qxh*;w+LOI?`aX^)GDl*{%=)z;O$L7%i*bRx5_)V`fa7i!Q=u_^RK9dnwL|Jva}mXn%Fftm-ZWzWs2E&s3<{!|%)ai-l!H2Ul=k!w)Qi zJ1@OLNI6A_AW9r0QCPgS2t8U8mOy4D@A*#P<$}v(0hrt;=)IX-IC*}BY1rspWTJtB zl?vj5z?`^%u2@c zyHkrin~a#=l}Xp@2WQYFEfsYq+NzWGdP|8$oFB(qvqdmum5d} zUK^6f5TR;1(5TPJGV-t>J2WS*HB`81)pSZAq$O+$>6=qsMAh)uDIcb8%S$tNQP|w- zLvqD1dUl4o*>ccH{Ti4T@X5_-o7szD^{yb}(Ma#(nTicEmv| zR*k!NR%(Y7%32X)eFLUzwgZ2Tji~W0D^{qu@iX_ikWtDEdFTdL`Xr-;R*273?)=nghToiX6Z`_S@5Hw*AXOj|_2AQlHWT8`fDKsz4H z*|SNfU-zK=v19<5;1mAKxB4%zjZVr#OT!K^#;ClR;q3VT&JO~*2A^8=?OIaz9j|Xc z=(U5}8n2!62b=Gt3jOLA)s*(@Zv&I=46^=i_a zpYVEM(Hk?C-D~h04sn(>@ae@{ay2c7e|U$68XV3Jb$#2noxZ6akFu$#haQi;dHnjM zcb|8?1LgfWP~NVS5^$7qf* z;ENo)IGXKk1S{3~0ypXU?Sba|lE#1AZ~S-AxEO!)rUVStSk1&p;1dh9c|b-yFQq3B zS_q8J=(UjP1cCA)tcyP%`e{?QpxF1EE5HY_Z@fTSbovjm91??B83 zXIXvg(bW~G_FbU^z*USDLJce)429@n*!N63d9DLz=o1^~1qu;paAYMQnhRI}&jwpp z8Ana)Nw`CF@Q<2w5JHp&9h^c3vwNjx@tg`zv@7eoC*=XR>C{P58Ca_SB9L+2|3KsJ zryDfgzw1Wg^8>L3SU-MA(+Q5Ww^wBUaH1#C+}_vc>1N|oUgFcZ;AHK`IqH!-yx`*i zL5KYs|4&uf=!Z_Q8W@W$O1&2v<-bh(Nfu>9StAwZp-qT8u)6@CPJ|zVutJR|K?F?k z*Q&ms*G+1Mdy?g(lQ?ADO~)|fKcizqDo>P z)gRUcBBp|82-@z(T z)gBGPCQw}p%Thq^^iA(!9ahj`Yqo2ta2=Wja#yR0lB)WSn<;AomISkFzk(u%zZ}6c z4H5{e&FegLLasZ`-D$%uJhZ0Olbs;`dAI2PS0a=lH_eA9$Z>Z=f&%51!;t7@E&HB} zb8)KQsma-Ycaw9I`%$uKLStfELzj)yqD1=MU_>gg2O8_eHN{N>w!GC_E?VDInf9;a zEGOa^@Enk=ONdh#_;FQ0*mz}q1a}TFV_|?%)dt`VnBrNzn56w5v(6E<{%{Pu_-xLD zBP*Z|<6_p`Z5kBN8hv$Ue~A1_X?CXlBHW#-j`PV&60DVrYlWHzpi{CVL*?G`;>rN| zGG2$`pGHT=Zy>Y@Z(P-l_p&M{#kGU0^jpZ<^|_<1E!gFq)a`dSIRA*_LEe+#+zqrn zApy!O$m*7m&JS*Mc_!5ThXWV%y<>6|?ag7uy+^!6HVg;E->{a_A z*dP>GJL)vYD`Pd6Dvv8*OqP*K;ILY{zOhzB@NshN8Lue{94n=XQdU-SR3&8f8UnG5eiL%v;qZQlAm@3X^F3Wgl)-3e`&1(jGGcBzV1?ZaA(6m5(RI zwZ6?*W(wdP41!;NKb}KD+kZHU=Wx(==P8-!(V*?$Jc-G|bcr@FDTUEGDYt+2KmYtk z+lObq^xfv?&wlr>R57(j#a-yQGARoSM~j!?gE@bzO84JZFJ|>R9mlq9oG6!vWKZ8c zxlmYMpS7=hr}%obTpk0#+`qu9)WQ;z=E~&>N!oxA+$J6?m&cJfvDeFZyj-5tG(RWW zgSrTKY}WOdzGz#Im&<+l!t|5n@`&TRneYS>)Qan-mV7cv(9);ka=CwTVL6Y0+#JOy zgz7YnG$}`8C|zCyduAqj@3V!)1vyHN8YS@sQrJY*k60|OfuU^EaqTpfcOKgH?CbIC zTsyPA%2hRdD0tw95ML`BJn*Y{>#ffa6 zY|Y@yc>~w7*xQ2#z8}p!96b2@c2@JDM*Q z7fYYqzfJ~haka3vNDF^#r>00X> z5{YELbiPi#JxyOdup+1;)hJ`=p{SI>NMx3q1v zX|Ka`G?r>LoDbgq{F$7HbrPSvzMg0+PtVydYXKn^G8iM6x|-mNcJALFy!{tm)P^=0 zhD||dIXn>Vfw^UfTw$1S)BM7jzxTw6<&Dyn5g^85VPU0k1E^9Mku>`@c)YZjhvM2o zetpdTgvs0@RMv7wp)PxM@O1uiaS?>$<-*`uY#R#*2v=O}KZC=>0-DetXtfuO03&-& z6)vsko+Yc9dw*eVwUj#vqOk15`rlif?l$RIvrJ+Kcs#7p8)k;)nJC6&%Hh6A7GOfSy{NcpEcsr46tF z%s#t({Ysuc=C2gi`J)%=q<9QG3vKAa8h%Zjyu5;Ke+fFCCS};BEMi>l^CE~1$TDt# z?Po2p*S-RmR)AS>x}M5K&BB$-yKOG1M$?9D8pb%{{oXz48g)C3|9$V2d%MJ0cm3rd ze9~5Q$-!l+CP{#^$0ka**<&ie?oXwvlC8|~;8Uv$*I|Q+p$wfW0-eq8S%BUA9+BT5 zbVVM#hFQSAj7SmpW)VRb%^cbuASoBPA?P&WH6#fNC$P`!ME%{90}dznzIQ4o*w8~% zz)!69Q7ydy-B#=)%Zi!iWiY`MI&C4+2qbcXBhY{Zf{f~ib)qDS`L8f>>s6!~5mI15 zHZE@-s758hA%dGLA(Ykd-vtkU;fc+rdzT?4L&AoEafMR3|68eGH@f<%Lxp9Czso60ygwhQAR!^2q!r_kqa)hr+zF z8`zdUHKiZW3)Ep#`*KBDRs%UzGF-pKScxFqmKEP>C;Xk@k&lD9^fdUfDV{_^BC6&- z8EwW9{%y|c_FN7Bd+^Sw(_k{iS{rAbizL}AmrXDRvQAKz7QfT=U&@da@ixGHkq{$p zmo`dC#!Eu$Ot5=FD*!3bkiJ=PhcO^$2G@h+8?+vH_}~}xz$!V^>JE$KK}v6( z7jX`FL}ET2UFg3AHR5TEU?Q5H!DDiuZ!|lqGNd``NMTDeqF~6VHkKju2KH)TH_I}b zby$*UKM9Xabfb`3OPPrnwepQ)1Q<=&8eXc0?{?Qx)e!cn?uu$Jq5-SC!fMe`W^vxe z#e}Bs#zn#y5(&WQIj2KW!v|vZ#D|)HrM4tIyr<`gD+-5U<$hT~7QWqEWl4+(>r@Hg zPy;lhzHmcKQdx~6n8*Mt6DL)=;CDxJ#k^pm5}b-nJ(_3604Z99zxk>)UBq z&@^0{hEppN{X9E-Bz^0vjmwr-H>Oc7glbZhx~_;FAg4gInCGCp%_U969=4g47?YeY za0u>x%N!W(ekzLRgz9a0UGXG57LT4F3fW50q?yF+)Cf_bSD|+s5I$r2j0Isr?~<;jZhjATs z>8jDq4*wr+Hhmy1+%xHE6BqrLF2U&)uD3;T4cE;`WaKsDPqP~SzbvEMC&x%#5_}df zEjO;fzY?baG6EQsk;Oq4>ZPn8+TvHsxVGvUw%zS@hlCQf-%TF?p8nI~urg8PvVA9g zWqk&*(cf)nMYS5h5r;pqZZg}J)V6pv4_hSb>JS2=xPC{(4}fE(9LBg_JsF>SlWO!k3N^OJWj*uEr~DI` zQv)H22@GMktgyy#T(T5i)|K(S`qEY7Vx@Kvv z>lUW=I~Zfhy61|QHO zH=61?@iafP%&0^7?4IMED+ICwRAE}T%6r`BeY~*L$Pv&?u*=9)pf-NO6R>z1?q25i zHg#eEqXIB3Tl@aZ1YeGP*7>L9n}i?4>7EAZjh%l!ug6e-4UpN?)rJ#X6ThFe4W#qQ zdVk(O4M|LKg@4Lu-)(KOkAc=BdZR0dV+hc6JEiu)n(d+$$J^O6k)Dh*!7Z!&6WbKnqwuGwgauDkvOSRUpau&P3RA4_0EVudIQy>y09H<+2MQw7aNVJ`n#5e>_u(GO{XBWB~A^aMO`ZVbrU}n0#El@Q* zPg~Hyp2Y|WY|3{grnUQ*n-GbeY)d z3M683Tc?xFEcw`UH;o&}qsxBR>RS>ijyldXA}>AHTKP=n09S*Y3c*RFR(qVCBtRMz z)1}_9kOOo|k_{OuFRD{@5u!8+Fx5;un1~`GjI6gTp<`=sW`{kCSx83b$Jp_whN3Eb zTvsMj8PcjQim06VU!ui~!#+UqQgKb9Kj`KM;cnlY+6lJKD6V2~1-rt=7I9>SCaEVB zLB&>GP)@R_7uU1f%*?u{Om6JRI2anq=k3ZK%fi;yKGG;Zz#%fHn$EEPBPKufUu<3e z76btrE=`~rS2r{s%<24liwb~GO^dSwAo@JT)?ZsRm}qEGHOi|f>(6$JS`QI@=yhzZ zxU>XGL(Q@fZ?g5>(I%P|16tMHpLv!Pr0tIAJJsWdz$HL2NfeKbDwE1O4DD&(X$8dK zvxO9RM7nA1u^_WD4OsL>d_sznV{9$$rrTmIb5Xxdx^B{e=x*#&rbTy^YJ2&fq?gCi zn`Vp33}Wr9?ePA&CQh?O>Kp?i=(!SlHj<9KTTX_XWB#K zpNXDoi)$sYE!KPn=;9d2_Je@N5YYn)FI-cfj?Fi%6+A@2r}`+{w0AmORn8XCVZ)}e z`^xGt?Ll!G_g3WUjEqhW2C7|_l1A8F+`<6YS4P~KX@3HP$PS-0q70(QuwV@wzTmKI z{lgoTHBm7G6_{+`lo*CL+@iMXgY0L~-L!}0R_6j)f+wh8HgZFOL3ZNN7lhY1wZ@Qq z_b%k4(N9u{d@2*bsDe^&X(1!k^ssmo0>h$J&}yN=%m#$8?izLb6%jz$z4hlD>xsjP zFerUmMa+Yj3d>H>B70<8<+^x`MerAq-Qd}kRIqPb6(pxTtG$suxUGUb=!%IjmW#8( zDp9DFc(~JJU4!B3Zfw_LDSLcdrECwma%i!lwIt&4?Buqpp@yeDPnN(zIOErLxB#w9 zanTYjYPQQ6v}%s0JVe(F5^{?J&J?z`GLFxQoItKFUr$&Uh9m1SypX-bG5tg@wByKm?6H%OQ(uM%(rB%rdy8<; zqH;edjbD~K@U?KDrT=YSGg%@NNqQHoR=N zi0|`G)9p8mqaC7)%>WMthLP8eG(KeRo+TWkbcxn!R8_zh1tStG07J7sVtS@ z$EbK&04f=93@-y;-3uJ(yO(mJ7&T$J5raU~KS&nmXSq0A(Q9Kx6e7eVq7DF>Sa-Dy zm8{W5mFTt&FP%~{8KXNoCYuu+Q&$c;EiK)B%rS+)0x4*Ej3*3DP$l%QzNpM3qX_;g z+L$nApA;t`H|8Bkyoc%{Vhx%k=StLe7mBsyoR?A9d}##y_j=(PuI#d7%mJEh42DIz zrnzw)C-?tQ#(^_7=m%m=EnYcXUn6_IT#$P%@w;& zK!|>#GNn3V$BIiL)w)Jxy?{kq>FPUT)`2suOK0MW?K={m-;8r7XnIi1g#AJG=blVV z2R2W@Od;MpPAyD)9S<^JeBxtK*D#_8gi}HI)6Ybo%;to=6JbU!!j+A?5?CrCl*Yv( zZdy246xbhxV=x*E55O7m2hg*f?~dTL8<(+uzVX`Hkn!R7z*B@U+*lG_xpmYr7j(RO z5>Al$AMQKRx@hwF8;x^1$^DPobI2j^pk0}z6!`sRz|d}7)Y)&H-nSln8-Umy^O0ZH zyA9yaHSu>jb7AZY*O89Wz)_RUi=Z~35o`6N;Qd5_}o#FRVe6ZGp#zg*57k6K2Ws6n5o>i(s;8xO8=oD=Pk=7nH2T#%k0&s=IZv z#rw1HbM%+ovGaNRJ?seD|7adIY&DXE`V<(dK^hM&cR|VbL~v^k`^w*Z(KlY=mp5Nl-W5UN*SCB#Wt0NpUQ*N4mIia*c!ER=$9@ za1;z}a|94pof6B3)wpoh#aw6k9YQIyk^@a$Git)&Tit38AI3L&NTTH^sG$kgX4>I7 z*9}mOiggP_Rk~`El78$uu?(Ouq*w%+KoZEYth*RY$e?4At`%?sN(@1H*)+|q(d_&e zabmoS%#h3xO5Xn81v@Ehyp_SOWFV9l*JsL=k}PJDIXKdG*^R}K-?&|G7LZTa=hL%ePJjoz+*X}gUl z7Xu;yv*$rQw-FCiTum-Z_A+t2Zg!&(mws_}T!cCVoE{~&D5{(3Lp5%8A}*S=04v+O z9eQD7v4#b^m||UjVG%QHRG0(gbva$LF=1K6`1}DyP31*Sg4C^H~&Nw?~6&;#gN}DNZT%nEvbYN~< zy|ThOs1-N3nL}sZgj(D#VWk?LqZ50FL^8mGsG`Rf8Nt=7?8%A%7WINbkJ}Vt2%RGf zqro@|wR)S${Eb+8AAUnJ2ll4i_eB%#(*RpCn`YWRZi`eyI6bbkj@2n;bZNPDuqeQa%C(5s=^syW!5xNf{b)SBE0`KTWAg%jk88jEb`^{@&1j;b^66T2k?hf( zm~x#Z6_P@axzuM;2ZSqRN`fpON>1b>vgg@5v_xpYfP(CFn(XOi>?$>0$iHLL9Fq$} zTYlP{p`|FOX!f`v0ywCXRM>nXZ4em*r!Mj3i)@r7+HBKCB9Zj`8_EsEzkKTvr zLeafTod#Pude8xsORKg_D$%#JCy8wfKd#7Z^;<-*#gZ*BxuV}PQCC(F7ZZ8OUuAwz z$m}WaA*wF2;rMME-+`EaN*}!jq3=?g8Nxt=b8+|+s`u?L4=13Jc!2v-i_Ec(M!7i? zyw9#Rs1M=j3QcE~=n%o65rOatIDb>)UsyMfG0?S&;8?Z-3_oALSS^)FmSoZgU9;P4 zPgn8%*@7iYHGSt6hwxfBBA508Y)1^tJ-=!OiNF!yWR^M?+Ne5h>XHd!x1!?kchi!^ z>`8Ntc2{j$i!ZT&QRitsF8qNPWR&7w9@S(`*vrn~4CcxS5(8RhWhXJE8lb#p^y3xe`MIa$k}3D6!kLsJMUuiHFUk zOWv+;WQ7Qd1006IXz49_XlV5&Kg9y0~%X1f@b!i*OZ*U^eC4U`1BJ%Yw=l z!Q-qD_he=~RI8o(yKWK{0KW&|+;Bs#F#2kq$rncjGrTd^F>6>^>7vB1?fdoW&=KG{x) zqPQIRlTK`-c&bN52)5>o))KwN=#C4DV+391?#2<1&)Y3e1Cv*>vp^~K`yykf<5CBD zYF5?(tP~nyDFN;q!>IO~^; zm3?N~-_~~Hyf~egX4I3I%3BFceYdjOK7>00*aqX2=P=w*(sS4gPvb6v|EDWC-b&E_ z)#yB4@e?ks{<5$+`^h~*&y0e|#)|Q3^g6O<2i7^E&W6cudvdVGWu`E0i*jR;-2-62 zDe&201Uq3hRH&}nnbqFWr>b2sXBCwk@di* zGZ>$ETPd!?hX^(wVY&z_XICQ^#cp51+S28sLfh;C_6;F4S1~tmK+EW1Vq}M#@a6m> zPhcrEd_5WnJFC@%84?~`mdO~k884H}I778te!Vo{mg5~^!M$&Qn!k68c|AxT0e)+(P&cf0u$r ztZa2#6g8U@_|a#bordC+3;(7H8OCLWhi|xNzK24kof40 zzRm^LKVS_|@2N1Fo)A+TnLNZQTV1(zO|jlii*K^bo8{@lum`&9GIrUC+)`B|4cy#9 zHj~{*N;znEIcz%!>?O0fo#L|hI6lK$^1IJkssSV7l8EojmKyF)^OxYhV5ra_JL(2= zn2c+JftD~BOMkfu6RKum&)FeVLzu>hMUZ!W;&FkVza*npVl)I;nZ@fTSjG6$Q0Jg> z0CiGG8Z1>HVn8A-ma|^?L`N#V&VaDCs{$^$M{x(^ZFek=?zT5R@Nn=^$4j=;R)pPH z)@)!3l|*O*HbaQUMLEV~(qPE~A-cbf`lKCJQx`~_`-GzcKS>q@I~tB~8XC`>q{TtX zeN;mslI>H1q#Pu<pl$MF7|kXJBoKQC5jYDefTq&82~f*yV$#3EcU~n-CG>7 zyWnD%)bV(l8_W!V;SMn1%wTtMI#QPHShkX~mv@XxqZNWsZQCU_0+rL+$?-2X&_>N-AROUlF{1r{e+E1X&n zagHqvkJ~-Dgy<0bXD}gI5^HAe3h=h03N^XnP6Z*T{b{1>>R_hYAF%s$-l3w?P)VE^ z1ABxs9Zopfw*^inja^R=IXo`bo$)>(GKdg1F@;`qM0gT{t~Ia=(;08T zJlWvv%Dq`oStf?q?62_c1sIHX7cURzt!wMXcA=!l!>Eu`3Sm8a{o&z|4LBHJ zS_QePi}E_8e@m^uL~3Dfp1&B*O}?*_=+})w8;N8a0MhM<^D4Eh>cGub5+P^G6R`|& zRSy50P1iQKNMYlHan0@ld(AMu=@K=Q3`(YEOF7Cio~J1Ux$*4uRCanMJAE!Y{X%wj zBFr+AwobP~0a?&0n&F(BlwidCw)f19oA~`F-ZQsvQlZ|;)yq3LzRK(VqtTkt2Vvq+ zeLlpzA>#crSep~c|L&do#_JbkcB+jtAK;4af05>QJZ}&0jCjB6d3RuU?)@L0H}NSb zuFrVChxbN)xOI3Dx`G|r_t3eJ)6AUrvohh|4T4LLO^{p%s{gyEekFSggA#*L4;I9L z+lA~g!<0>Py#^Qa@O0kX#uRFSWza?>NP_VtE3HRWu^1W1W(ArWOIEU3!hbaAzi>2N z#TAEAVZ2n{*oSI=vqq!up4M^;-2Dx{Z;9;uyTiZ1C>EAvX)IaFCQJQa>c7zcqyE69 zOPRTSy@WOYpntGG=llJc{`7Dz4LwsPDSv~RRVgNiIu^I{;=8I`O3GszDf6gCRzmiz z4bXJLR84=x82x*%jtXn`7HSOsZ1XpLmC^t=`fA=YhX!*UJ>UVW2D zWQY3$cqmFS9uB-|aYK|Q?l<{7F7du8SD}-yzUkvje_D@%f532V*7~ z>I698)eM>p#^q7z3MKy36Y!_8F7Z(oiyJ)K;$~k;Wo#0TGb2&}^DjIBb4IGfM?_=e z=dXnYz<+I|@=Ph?CR)hfI#D6$m3Se4_qalsvZIi1J)w|x8vUaX`x9vN+em3fgX!=8 zrLC-RP?`kT3fm6Inz0zC`@cehhruv`7+6mC@g5KlLOapI;7$kl*LqY5`ZH!+irt>A z%A+ql3q_FCCUb@eCxJGVko}9bu zPs|7U6R&p=kVKR7Y1uajdtzFxWt8Toki%RWT0F=)S`FV3{!gEg_kQk?7?Lx*WV-qJAy#t6hoYf(BCS6sbcM5ifA^XT8?{6f!r zhr@D0osO1(#J?2l;fxk2=-8pM)5=cHYgVnnas7Naly27DH2B-yE0GjTj>7*?{97^0)S<0Tm zGYRhdW07syDO@jg5fG2ULN95d#G({I$=ESHjyfr5`Kj}^4I-zq-&0ZChT@t!f^&$b zOvxf&W)9c$kQpXH{oRt=Qu4)ShyNCK3-fNWi zOSNQS6AIYY;h1g`vskis)4&*vM*+Z*n%mm0HJbBXYWPU_6L}Q=ZOfuv5m9?dglzn^ zWDao!vIrq8@w3a~6Rt{b0K}!vGp8bgP$H%6 z18U*3B6V>^YL`T@rc2qbCw@8Fj1iF9Qo{|cUqgxjZ|yMxcPF8UyjM7Af>30CZ31mo-~Msh+ONS zv1uKVfvtvtVzj|IkdM87l@5$>8`6HZ4kz4qT3+YN1RW4mq0+z(Rc2JJZhQ83AWh|> z5frS38qNI;o8q4%#V`Sk$r`F^ootf-7fHrrF-$uaZInrR+GBaq2&Np3(8eZ&azDsM z;7o_dXX~(AHUzRMKZKNHCI&=e!pV-#w~4d89*bex5jc0N)$@BGh)p<+gkvE% z@F&(b4w~ggzFEtwm}3EWWlsUAHLL{SwBu{AR;{w!ojtm#Nw3j;1e7Q#`KZ;0)}Rqg zt?ibfp}?=a?uK8e_9P5rTZQv6t>*9=OdOc(zWJ>-G`iYQctL)%Yb*|TOfWB+jd2%} zN9!7+Yk<}^B`~@sKQ-tUni*C?f|)fu=4-!7CG&+UnJ-kze3dG96d zCPddfk?+Qsl1&qhXn<+VC!WExpMW+(Xk&N{PusEil?JXbr`I+b_X>NHv*T<@zR*Bt z;iFtnt=0AlIFcS&!>e#x)!Ig(Is!7gPwD_SFj(#kYp-M&Dg86$zFbck(nxepqWR>X z1V`5Jpo02h8D1-rYYeZczGn>tK~+*~7;E@Vvx4l4wC#hDHBcU<0&YLi))DOnrW{#g zE#+l%acs2>=R_QOChBnin#P1r(=0`vGVnh*xih%iv9?2Ma1l&2%{ zJUd&5n1-jP;^EnuoSBm*c`P_R6$|1WN0S(Z0(CS5y=^3Jc4msTjg~w)+X0%M>Hy8o zOhz(lG3^jMH`$hEb_QL80fQ?dskIFm(QN{f3)>zC+N?%9(^I`A3++7jeviU zuT~H64=@amfPe6b0TS?!d;$v2#Y_!+;t!aAlywEM5bA6rh3PbcwlLRXFa$nz%DD;? z{YVIr0%bJdK`eyIemNK59~NowzFZ)G0UZT&6wrYzKC=86!N&+c#_=(Z4|qS~emSSJ zGl&PVW}0X`cwN{m=fRnRP7szIlZ^3^Z`4}4-(ru2u()bu1a}9dJrTxY5KjaMBp}7a z;=@k|W+nrc)JfsTf&R1(@e97pAbucE82%jC5A+e;gPngz0b%BHv&EhzR&6GRwJc&~Pr8u=8Fa$wo_L`8&a2vNDRiqvtOQv6J{f z6;O&@LtjOMaAuGV0m%l=Y^Bd-mCU10O`=JcNPv<*4IuL;*C)FlxOj1(|6>1K|NOw*#ew;Y zgQ(mfiUU(!G%`XCqCj3ccRU7SH&1u4*2&qR8xXu9WUojQ3w6UYJ=F!z^i&KF(nRnu zva{&fnJ#!{XJUAeCW42NQ|(+GRqg`AtanTsDWZWcI8faV9ISMh4Jo35E;vxt4jim- zm<=hSfp#3|+m5yf%;C@!28W4?mkD4;TLc!x5w^udb>Qe|3lc`!A|cxr6Ez1>Q0I*N zoy>(Z6|H(~EIl=~WyV-XuI^yERBB5emW8%GHnw|N$knYZ4uQvD1C<^d+r2F0>Q)xX zdmJ{9_%Sq;*e+#hu8y)y^2e0*7#booiP8;eHyWDck16XhG(=_+rCV9uXeh}?Ff#Jc z1Xl{XnR{@8ij)60%CIV-3BVg=EPeO$_wbI_8|6{xX<=yru3Wi4X1?Jv1v?xQC?0Gf zJVsx7z?WxYin9j|$kpNrubIczq2zb7zCoc zX6P6)Ls6<)zCS%>zmUrC7KpHmmg`V%qMQIaQh=Ir5y=L`2@v)*E9o7MT$ihjC?*F& zkA)#pe|UxNDH)O0FAKzu-2m|gAg#Z+HzP3F;8(KIKce)f?@EyOye~vBYPqKdp_a=S z7&UiEc&gg9y7i|rh(!)S7&mYpa-_{Tfv92l^}&G-u)ZotUkmI95WR|AGzsAk_PR!1 zg5gQywUClgIzw>T9inXxYifp$GxE`sR2uns4?o@Nd9UX^{d1UpNt_Cv_r(n9zh}d+GMCUkZ+< zjJ=6mjpE*vWxw^Q7q9VTl;O=PA5Yz-T~(gr5liRjsDBkwS{0XkSsj?-jgIyOlM!&T zL=ZRx(vJE!ZX(1a@gQVtiT=!jjc*Iv{A<@@`EBs1_xrswcV9m0{fKww7uR@e`pnND z^il7rA9|$~1V_C;=so@AmtSx#Db@1O#5Nl+uG)l>cg97~6}0R)3(a#5h$9K`N%awW z9E%p$Zi&{Qnl9pU5oTxVE;kdYL2VFx7W$;nvdCzF^8h zlMMp{r&_x8!+nAL#fX3T_O-S3zQFt*^-g)u{+-pM-f8dIe|S3u{)|2tvA=%>q(16B z=Y7vNZ*=y~b}>&In8p#j@_x@x+{Ak;t|5^QgyM7eywAt7QV$=&0({^JiIRoXQE%XV z@WGX%-UaW2U;F&m7g&q02ewXA4gq;Zo(Jx*GTXJTUEdDg!T*kWSG~S}dV3I7H*X_w z!|VHdH>7_)?e+c2kI2`$*Y}OvN4>YazQ2f{+g{(Fy^R^z`~0H(UEpj?FED@~4J~SD zQA2@-f(5YAk&(3<>mwt5f%^ha259Bh%4aV7LUCX0%nk=%JKqPa(()4j<6`Tr2M>baorSc{{&M}D#dj8udjCD|>FS!X z^f>DM3GeBtPaXCCIq&IFp#AgS)5G}rN$&%{5A6TG_krI-=s)m2@DEm!)i-bv_U%A_ zN%MCCc0<%+us>=un8oF+!d=V*%PB^!(7K40NfSGQKfq2ek297MG+VhQCoDD%xu(ORwK8Duq^Pr z?qC=>OY-(VeZevCquy_Mr$2NHvqdJ%Kk!cd%FUzR|K2i8oD$#)H6{@QM zCnZG(ct)`3uAhdt;v{@J3N$(;&Qmb7g?E-QLodIxH16tidsmM0{|Y>fIa^|iWDT4w zeE~~q&zCWwPxbs5{+{l+vpA;Sgut?4z%h)g9eh|hTH6~pa#Fs`kGpua3Cehp22(~T z98-gC4P~Q&(xirLf5Ob*PoO&o zd1x3;RN5Y9kV_@@<>wsv|4{s#wRf;R+;L{xJJbb~v}eD)gW=~;q%kaOuq`}fXeV)z z?_^^B)quqC<*@fP)*4rSun0oHbzb_U#PDS%HhHJ=hTJzK!enCf1W2ThA&Cho#suZK z_Is<9l+wWyT1h#_UTC$3_2io%c_MSMTV!w%PBrW!spt%dqR|IUx}qDRDFCoN+QMSD z6%3`|YYHz2KyMSlRffX=h=mY?GQ8M}Y2G}D6=o7ZOKhVfj^lZE;VbTc{66{6HKR_g z5U`7~A4e}530LQ%dl`tca&bil^mI7L-N}D^0O^1k)pXJYowF=D7dqxqWLViL9G|tv zRo@U`OpDfj4_b#8>^m+S`;{t=i20`84xZY8+ZY&dKiUZ9ACmy4+qlX%C=T>-Iiu1% zkhSeNREgmeqy)|()?u)GfA?r6Msk9=tvL1bx4sVNM)05ijaw8W{ekgu{2xoo6<%3?bKLT9#yW4T1?3R>ixRlgf1qts~N1vm=Iod#ipeCO>%{dgz2W~n@b30lUwrkBH!C6RKK|l z(3k~DqRW7!lV&aa<`wLylhF5Q-BL+ClxuA*w8pvJjhx`MHWz?gR6%&Ifn&5qTFgOO zA2VQNfO1Qqi!mtFYXV(ZK+)!`uvK1Y&BFK*OaF#Da2I{oz9c@su+%!+HD05GrLNhh zr!@PE$7DBEdGVO+le3!rg=4Z$&PwSobjuEzdUi&$pIcb$th~fa_H)5vXXO!XD?fWo zc2oJ;W3t=IpFJkKsr*@FpE8sctELFmXVC7+jyS3G4BFhD%~p82OEy#4=`Pu9MW?!C zGnJfb&laKXB-$6NWJuY`_O?Z+I?*MYspLeLY_^i)U9y=XLrcl9lqgLijR>R>Ve=VfY9C1L z<58yC*x{haFe*}CB3y2ZG8HAl_FSfhM98@yO90Izb%{WbUGek}E@GLmvC#Ck#Rlj> zS#M@%m>0Qp3?U!-(8lO-w2fInp6R4R)Rr$mzG!S)Uesp9)Rjg^T%1yiiw;H`CBlYd zu&Th45g09;m~IHLjKOC>gOOx3j$*Qb2#kggfIZ#62)fz2K;`$PnWGkbx39K?ckJ=bSLC;@*g0#*tM_@e+zm8Pd402uOM!djRkPYh4m&u`uGZCf<}jnG|D?C?Q^_@D_uz3He2^P=#95t&OEPjOhv- zcACx<@goapw-H{NV~*N348`{dMaW!x*~8^uD#efW065TPZ_*uID|5p>8r^ zaFtsRtj08X`23}?=5Q^U`lDi~1 zq~~BSFM)?_Ck}Y`i|`!`uNi1&iZo;3B`)rpbw2)QEczRlF*0J-3ewRRu8=`TO&Sz@ zncGYQrqzQ&mr3~0EJA@09%T&@qX`AcGUqHR6ecV`W+1_p`vPh@n#4ZU*kNc|Ff43m z@gglPq)|f<1G{dpYjhu4%pEvZe)QQ{^$wBe^-uSbVHplS3>^8PAt}GjY{rAc+Z+vY z$KdS%ZKMj>Sh}{TpXLHhn5f7B2?T=4DST(5^-D;@9+BW=>usUBiF+Gqv($yj=1ZWBK;#<*&-DLJ+5AUtI>-7`3``{qk2yL&=C^(ys=nt;F0|`sxyD zD;L3ELJIh}m+z~nfLfuqKbFoS3&av(fT$e$3BI?Q&}dy55e0$hGA31z zBDU9gflR3OK=!Z#P*sanmptY~K)IYvs9JibRyi9j$UzmGWsgP!qXjYzbt|y~El`gj z!hB4qO^GUMUWk?%jW`!+V-&7!HxS~~godd`;Io|wm|PECj2fuhG09XUpGkIJKyXLW z#6_oky>KrwmeYgA>B9)kKliI;sL+#pd|EN53Nd-gv$)@EQ!5IX)(YQS7o{T;-LyP7{onO0(e&W-Z+$5PKeT$xb=3PYueay= zARK0C)jr|%eiR3_pY(b^bc-e#v?J*K%oQd$>K*WUx2_EF{oo`V%WuPcB{6V&R~|Lz znQZj!$9r(;BoXBjPVb+b2&gVB;86?GU0i13AsU{&@QJn!xaH(iknq(8O(M>ia0&q3 zJ>M%euU+8j+wUYdUSk)9rgRk86i&lSKfh9-1s%5t-%LVVFS--`>)eBB_*$}@pBrVZBI+_ zwC(B8{ZC@D4FL{(G`oDXXU47H#t7+|7viv6`7-yN{XLw{VjMT#Uhr`t^&V+ZA%H2~ zUgBRd!Vj}WutYw`)YH8p``Lwn6g=uZ>z(@TYbjHL5EbAdc4ktl(c)yA^G^N#Vp3|6 zl#Wd!fqu9_07zq4wCE*PiT~tEh*k@03^*5ou(E>z#O~cJyM$<@uQIOJ#@(03NILCL zq|Sx0?8!(ZsFE@$>GMQ7T2eEeqLO%|lU(>UMYBRufE+8!P(h>{EmC0sa)QW}A0}pF zTpT}ea|RLe~HWN2i0As9zfY1);Bfe0*^QriJQtGGK-y9Q;;Mxo9pa!Yw^OlaF ztqIvj!(d~uQff@vF^{_-I*!j0CF@ZuHQZ2YOthzyNu3xlV+Oqp2A79Wm9OvbM(1{8 zGM)ryv@`8V@&I-w8wrby4eK$&K^__7lZFR{ucOGw8pc|KCCB_+&_r1Mr5;b%%?eE;UY;a>-IAe8bj1ytGu?-NbVr*p+Sh z=2#dUwh2KM?`M|vX+Ze;gnySOq@;66Yq|yAe!;ka6nC(?{Weq{nkx?ZBHD>4F$CMtN5s zP!SV0d1odp=-lI)a7p^b?z#$LViUVO-yR?wCV-FOWi`XYqdR4 zaQHfGes_vTS!v2 zXKc_#3iw~CvI!5%=yIRFRdV*-ky51r*OC>ulms`27g9*DWGayLA!mcdz$>d(g^hVF zSQ$XmtYeL1wAv{|Q2FBQB#IENATqul5n=<$*se&Mz*Z6i zA$dV&TT!e_5gMN)5h*?KU8l4du7wh|^J)r@+R|&->SA=T?}PwjKHosL-G;?}pT6cX zn$)9tlt^3*Bdy;l)bF6v`GQW2_^z`zVT>xBW|j|jI9~@W%PYqaa^NxkKD$4fNQZ-r zUCI@*4)s0#iv2%{6(Qz z1PRTqi`ERLp}ZmCjbEKz zr{h!9#sns6UKEVlr?v%$x$x3~y@! zlOCH}(KVZRypCPWm-csd4piZT$!h_c?nT8L1shk3of+Uew{l-QK#wi3-@wMfRIOew z&^EUMX`0qMngSC7e)FO!K+&qHtK@({t$HTSK=~T{tsYGRmK{yPT|`Hc{SDR6DVFe( zWEUv%n+oB+RE$~(8)_QzH4D2_n!@A&AeIARlS4IU8wDYOmWlvO*RXfT?&bg<5wuN& ziY?Zt&&OdOM_#~YXKa@h?_eQ=>_G0cZ(EH~jmZzG-H?T0)u|d9 zsw1K<%2AUcR7M**3jmFa#!Fk<0Mk=#fZ3Vjbic=_bh~P(4W*Ojzh!tx@>*be5?u9h?w1O>_7fzsB&flbL1g-F5(PK+(V8OcjfyvkS`OtMIo z6^Mk&n95(&&WfBfX*XhJ*BBiN2o^PLaPeMYwYG%|l~BJMI$0PPCu9qg@&2A!SPWh$ z%p>bI1je1oXhCH5Q4SDr* z*@W`yq5*MUg23WHP6;X%q*Md}PTS@nT9pV;*I|kS+HI23$OJMJOto2xTlqU+=qVkp zk?i5xeq0oC>BvJaxbTy_O6JWScxVh6&L-q74VwmHM}|g6Qz!%tHW<13=?R1b*sfE$ zZQ-&ei6)vXO(URvdZuf*G@JYA(4E2;YIR-wkOss5f^-|cxA(aLM}P6m83>VEM<(JV zmy*hcz`(GKhAArWIT)s32)+R7rLg!f?pJ`9Yn&?{R8v+8q>M1wPz@4HX&q%gvJoWv znA1vQQdzzP1#qQa+vT1pj4axd+5ZyzHR6cvqg2sV01J$TTe@z_IFLn@B&{0V>ZHs1tVT}vI+7f-^>Zd_t{2EKN8&8BSshaIM z+9PZCeq=|w?*f9}jp8GFReaHAq0eK9_Njv8&5>v# zjD%<+1Wh70K2Ti8_)r-8#r9VSnbO&aNQG&c2r7?p@V2qU#PwK`x~WODeq9C_GAcAa zz~bP}0mgW{nbkTW*rn|q!wwmB*hSlJAhEUs=Gq=5IfiJoNeH$V8@czREDRO2!^+K3 z*DH>P5TaDItm|$KSHoqWh4nY4ZxBOIxfzSmb+1q_X+hNzL?WGMI?JnOUD5_{3llN* zu{#=-wczChhn%o1D;r$3t;vZf--W<7X^@*7wXK+RMu|>lfhjvCB1mOLgwau=l_%TE z^K!3NP=E|7|A7_|n`rE8ApD5snIhgPofVCN)`B4=n^F?WE4*JxQo=Qbk~;*|_DtzU zOa!x|3tk7bdnq~u(usgIDhkZoEimD-^)RujAp%t1PlD{XNuw-oj+JR5ro77|f1bYL z4s1D(Zo?BmTMg4F?&{>^O*tEETLK?Q?fN;NwDmqGPP?us?5d&m1T+0j$ z?J#4Y3UfwUExU$l5R^9^t_hIO;b01ck;KSKXhl1j4f%~84he8Rc?ZQfBqj_bIst4F zAa)IqG+L6QI`>Ji;w;n;$k@$xMlu6#$gWF~0UG*&ZS0hll`uk0^K?9#hSo}EWjB<; z5+L(StL(TFm&p#$Zb`c$OeHIwPOK1UR=f7>Zp8~z>N3`z5H0Qi?N{4DSeKMsAv(J# zDFI?|H>BI4(^E>v7+eXbgC!DC*C881!nH@|Kzod=KZ!wE5xd5@MX0@XSb5r8XP2G! z*6BjiB{kX%zsPNcJ86jPy7asbgk8Jw)^SN|kdS+uZpQ(wJW>(m$W~pY*?2lY#fqNx zDQ3b%7q5F92H~GmTfsnd$O_9rTEMShiK3acs}BGh>xR&HK0hW+=(p}0oj=Kp_^gk1GKt`FgjFjf*x9w zJ95;TgeQ*5NWhtPL?(wVvN@iTMMVd{&RJulBj>=1^j^7eM|Av(RDv?-lpAVTCbTw0 z0O(sS(}vL4J)!=j@~vTKNP)w%u0jX! zFiD#7?HPF-{+LXWHbk?WTR+$lhLFR1*LZmt21qp5Xbi2ta&2*F?dHn0q2<-JTmI0} z&82m`BX3O0V7sELGstUM3Q2^8zP`VQsu{c&8)L(yPLB|Y9JXa7*AwE=eSq9&#NB8|PoA_&%2#yI*hm3ryhz}c;O4}xJ88;7!cd-oHQHaHPw6EWi)km1^SzEqhZ~6)iv0f| z3iVSpN_l&GCJDxao0>>6&r!RkD5WFLnZS+xCUjX4VN6Ye{vKj@ng3uD+vvmp>16kI zqp$^IQ;e`n{v2$*Sm}9xjzn(E_uWtc4am>Kh}k4YxsOk3O5!adl*7l^?-vqt7Fo84 zm&rS>!}#*%CRt(y2k~3*mxlYZFo>1@ZX_l&x1TLU4A|sGmE@Bm&;{V9njtp`5)a{D zb0Ak7LbN>NUb#@J?WUUko!#0!41SnQVy!CGv}`1t7h;PB6$Geb)1r$IHxC8!x)+y3 zaN4iSCPs=duzQ_A9a^&6U-x@X^4DlWWE(10WcAJI!obu!1iEcn+#S?ch zA4!2h09BkH#$#-5b>eTYL6=J6uHlW7 zcRU|+AGcxln%h&R7u1Ecbi+&>w25A*)on%|md8>-7?cf;0B22Bn6L7>NOlAEd7G7H z;_PBbKbVO}W(WyoE|p~4a-|Z}C(0J9K`JqRqD-zGCoRPgNU4!ZOrEHe2vt*dyp#0m z_R-RmVv~^1c+AY&8x0yJAt6}6eSUj5!A*%Bm&eo9qB|*VTzyiBi4zqNHtD2Axbb(= zB0?^KjZS=0nAs@&)lCPPk2-JcY;XxM4~9ie))?Exs#3pO;QcTLcxN#yi~#Q%G&i#i z91c|OXYQ2CU^um6L%(2o+(^;t4VB_AxcP4Mm+&xUm^+IC!UZ9{Tf>XV;MgPh*l*T| zFtdvnjK!c1v3irxeS~q53?Y&bajYGKkfD&M(JX(W<{7zck%h)1*}(0??Qye_ z%$gOXzcI?&cjgVcYy$#gwt}mreB61ov5h&A#YOyWq>6rrIrC2nlbdLPS)-=3@A> zdi06gZYr!$v~;_3dvBE9P{(=iCuHbwLZ5i?WSNueZCR83miDbv=YIWPW$8h7O_ajE zcyQjtof|j=#$c8^whRn-gnjg{`|RSt;Soh2YxD_!o?z1AL2t}e5ZoP4ZahJ`kul%w z==@+djKMC@!ROYYk}N?mhkIWv-1P&DeWSWP@4tY3JT@SAbC;ny)+;+|J1}h{)wc_UKZjK#JiPJc(g5i(qvw}c^>KU6CQhuZ3A<%OWOp{OMgEI{Wt#PRb}yBo z-bq|zG_3z|e}9krF>UKiZsLX9#L=|bHt!U0H3V$BK?URoe(uV2cC$m!ZOP_#5Svas zXBE=MiVY!!B;BRQr2vjZ?lChFjNEc#J0;Cr=O*U?GZQCh5WhQdH+p+ zP8RO@iwM0smdoW{OH8)saN^6cS*F^vgaXX5c{+-5BFwQ_plsxhA#6*VfO~Alv+WsU zBJQ!-I;!Y|++(wJloS(lkIgpSUcrcCEsZ4)1QM7u9vJa`S2%}%wn z;AOEnil8-UB0Ii@`*@=Fn$DeQc&{(Y|>vS(s~-rHCjnAtVK5o7!}1W z(Q0|CP(1K?4YEwrYavL(Pec7(fOacmDDR{UbLWwZDvWgPO;=Gax{JuTugeN)R`{XE zMbz4U!|+VAGGHwriSFTw0`38WV(8B*FEC^KMb8|z&$)hW?$c>STmGE?N^ReVD9T&d z^3(yH7vX{{ST@uRTc>!jZ(z<1N`XTI4cQ+$qF`RT6K+zbW--&u{|b{r`hxO6{&R zqrMSRkobR!kDNx$$DKrKH-(tZZMYS}G>eljvF9&a#kg67vF_GujRyA~xT-3WgMIb_ z1lF;HS!E~(8+<6!p;<3ey-(qQW*$_!>U4$dXb{nMY^$6}W!2aGxQ|C3tQ1f#WinZ- z$7+umfliBhQ#7wVDxJmlZMR&gw?~Wt8?}pcSh&?5iCi$Mz-#mE5vgoRcyBu#889<& z;kZkLRBf|80+<@OtlaDh$2@9>53?b6%kAJ~wp46%KtU>y7@EwE7^H_cux?m(b}slh z#HbhGwFL)m2jGUVK%m6rFYWA10AoxE*^Xiq33zM(jZCpU4s8|wpBVSo=v>mjqDnYUXzRKtJWHJlynyP;^d%eW$9M+$mJ*-!X>fSaMCJbGF3)Im2)8iQASurExeDM7{^SABP=PA z?Mf8csQYGDj75mo8F|2iaSM|wLzS6sS<(3>y1gGbER>w>F^ct=NX{YYg!WvBz%%by z@7p6V7@+FW)u%l!mo0&S$3~+j@Ye~wLKg0!+VhS}-s9s@E{M~;vYc?dwcL&qdE|t+ ziEBY!;^d@@afuh^u&bH(sXF(~2C7=QQ}!)&!27^!CDHgC6z;HxA}Ln%LQ)d$Hu<&{CZC}LsS6Pi!(l)$L0v-sAcZOxStx?`aQ$C!>3qR_E|m=e zQ>Oehb}R6wKs${(RAGBH`rL(^5B1?<3$~khsg@vNJB^43Sz21jy)MphK#KcK)Gd`m z!j(;_g4q%y0qs;&KUAR@4lW9r%OapyP^e;6)eU#`02tuo1<^OW2=>v5g&}H0u}NjP9b&v{%hYin>6gn z=);KqPUSR#t3JNO9ZVhmNOd~9(R|WbOZ7iz4mS(i<^4J=5i8g}0;m^KY+<7I!S>Zn zdnw5`yA(g3+QjKL#BZy&t75ka$LipbD>5aDB<3<~STo6N#8kH~-@Mj!(vTm* zvQjw@j3@9PXRJKBMl-SjtPUGsG+G???rI&G#*qbhL&o2(RZETU^2A@dv5Mz^kDu~? zJOad-mm8b^PK|)p5GRCvve3L?7z{&pfI&xM$Y0-vQH;H(#X|%L24*pbLWZWIjgc$? z+3j+553FMHgw+EXyH5C>6l`qRxd>XiwgtSaQC<4#ksIeBYB?oRAGQ zS3qSA61$OML@K#9bdst8inMsf|2i!&QVAJ)h(NJ z*}%g!PAP;GS(nzb`^O}P9nsUzzxAewdS{+khVnU4Qlgi3=s-=HsGQMMM6?+j<*@Q| z7)Y#o_#Za77z|j5OwG(tb4_55$@yH4zf+R6;KOQM6`EM~VCAweFEPgRn`)q(IqWbY zH$_S0~>N!9h93|R+kk71B!yuH~+|XS>XEDEU=y3`|m_v|VmPs@)-ZtTq5J`D*4-UFHc$9g8KGMaiw+CAsM`1UMyb^_;B#$- z+I>?d`=k_Un;_9|aESj75tgh$EF>~2yBm_0#$Aa8o7T!|u6hu1qFa(NAfa{cqxdaZL)WkrPq1b|%&5|?fKj%&s zW48X8Ts+@d{~B)fpc}C%#m3XT)6tgbQrASG(!MQu;=CO$MtsH#%g|K8q@JoQ?iaC; z%4KvJiCVTOx*Ls@sUC2^LACXCif zc8^aT>)A6F0(vRMn1MP0n6R70ZBMv*fmRAM!r_*2I^bHSKBr-;@RNT;>XR&GW|dg3 zwZLu(n~Trq5hH{oqckVq~zEHsfu$p{6oMONq3Z^v0kk zs?`@M$th@&$D{#M!7)>pxxM0#DxbsXGYoIiUxgo*EFIQB&0B|2$|gF*S`+ER)p7{M z;fVgOG$-t-giVyV^mrV*xZfqar8pkf+0bKQ7@MOGht$V85$yuS*PNciIkqOI-owZO zQSux`*E&2*qx!I+;$Bu}&RABq!fIJ{5k#~X35;!;%(1=dK0HyRkQ9oj5@?;~vmex} zh%Vc5Cyr9`H@ivBfWk3uQrR*5By7~VV^W}Ap=B4=n@_FTze5SAhNF=!O>Ry&5eW_i=jtOye}x3!N0HE+TdEVznVmrHhbam0S|-jVV>bquh_j{X;VM0Iv&C%jB&WpCWf|v=z)dDXUv3YXC1qjqYBCh zVqwT58q6D+A~!BQuzi4#e4O5q?~vyX&1F3ssU1)aOfFR84?Czj`o z(14U{70g!{=kxY9q!-;sQF%^x(W)~9hrlq=n?AnFs<&NcUD%*fZRwLT^VUjY6dbX5 zhh_(%P{2DHGN3s_vG1cv8evIH(Bhrrvedd{scDwk?z9-l?j;s|T!7(a5Hhmrrs&6E zK?E)oUVIxvHTaqXr?#C-{AcEi`pndv_g*@?4ij? zoa>f%6T?=dTL;I}21|p~K#jX|5%~tPwM1ZtzAX8XJc6%cF1=?`nhV%A&=EcFMhVr8;Axi3a%lu8OaQCC=`<>q za1aG?u8KtqExm(Tq}GR^TX?F0n#hz_W2OdoQq0N>iTQ66SvOp64`+pPE~s^}j8%Ov zsiiQM3jqo$1TMVj4~iH~_QGCaOKl?9v*Nh`(!N+$-8TNyi-ECl#Ma$ zL9H%fmt^)8q1lz&Sk(Sa7K+`&q%{R~7MF>^V+cg&H%>&t5igvxnH36q#YMhEf`!el zS>~>~Y@T)dy=0aqJ*;r^Fe{iW-bBiYY-CN~ti1n$URM7uIE)c}Lam-A>tY2&4;7t#R`&Jtcsaq0^Z;CW+HSAH4u za&rasX`t33E?ZqkTjEgS8p(!v97mLLtPzt=Zf-iL4N%Tx$_&wjrPC5Jk!%Kr=1Gq>$Qm-b3uOcag?uM*-J)axp0}6XskOh?(Ko65+-P_#f7;a0Z|E zVFX^uC<=48DUq~-%#y0cVy3f9FG!M7EIQ%1$$uF~mRQMDZUrmfC~V+9vI_SFV?YZ< z3*f zo{bqsgAn;+YI6&+kh%6q#%oNzDK}Ao;L0ZwlXWan!f7vP;+V2)xV&hR=pXa9@!BSI zKdP36_KgCK7C;RN%wGP~cey4>7*#x>66Y+H+AQ2br-{eZj+cH(B+5#%NhK+8Sp&C@ z9!r*s-77?N)dNuE&igGhiRZD@eUD5|FQA*N6tB`2rN(wN*B; z;edO8Zg6N=3I&whLlSK@ck(Lz>pIU~&J1R6Ohbaul58eij*HUT6@3dm|9Z|y)j2zSQnC)F8(5pDfI*dg z=>eSo;QXKCg40b>m+|N*7`~a|6FP8_0@^T2+!(gSW9G<$>qJO|vIn-slTX+SS$?{m z9hV`1%EAzi0pgCucJlb{t=#+$N=xP@rZ!JjP|ENh zENG(H@%>e*2~2>ZD0S}Ox>j;=$^*(yP#p}}e8&h{R?dRbEHSM{y8Z$*F8cXoEz3Z5 zooLH*)fOw7pBZ0###L>fz z!A2ElhKHJ}=KSn;TnOCfbQVzyisGOBqX#nF!6vT457wy1-0QX?9OjNsXix<1Y=2R!% z_&8HeL;=GBz;| zla&n=W)Eecu`BGTdJe|^cxp1d94sk$p9MK)bb}AF6!*~sJ7&ACfy7VQb4ZK`HUcX& zPYUf3nXa=|b2}z;gPl{rWh1$Ar?!za#*isPH*3(eL1^CQ9Oi<}ILT)W%e55thZL#S z%b{y9vB=DfQo9cm0&0ArQdkqL?Uh1pRU5)0QYHtKDNAyUBQrcaIdfj}L?MC=GX}-< zR2IidK1|1(^79Hk8gl$|(E z#xdeXqgI7`Mp@5ThUkdYu+dsbr?bZQl^R$ljyDt&pH>)w*7}i~XH6X%$BoWODrt|i z?h}w7iP7Z-hHcphFtm$4KK*D6KS&5sEQ$ghw29{rsyg?=Vq)cV&Bk*H$?7tRPzzha zM59ZSVufOiD^5(VE;Wdz7IOS*-%l^mASt?lN$GXH}6VamZWOnCff zu4U!1@2J9;+jOWL??MXY4zdsHV!Z@euMYL2l1~oP_E87Sl+}Apz11Z63OJ~=Z&kD8 zASsvK`g8i5zJ4PwmjfOwJ{VpXCrV?6Q3EyhfoW?N6traS9!2-6hsn9^yHoRl{v4*v zVG;C1!|)u4t+;MwkJ7<~xk*1eHNVjF2Zw_=U=mbNVW+rB6&xmOvY{EVaWz?xI(W^L z-TM)|FD+Dmv2g>6gjvNx7R-@aHMJa|5e3U$6vYY8>V|Nk3YWNXvS24iX#< zzDy0%+?_!%k^7+yTy{5RU~_ZD9f~mT--HI))O;ovMezjF8Dyf_%!#dhzHM`lX=`Lc z-H%LsDu77GF`oQ^>~!~Um9F|kOeTxOJk=}1?BRIwTA>+IE({1%hJ&d!39Q71>ei-7 zTzCwks7s+J8e<8BPSO95r^3_6nLVVNgJ054IDqw zsCfx0Jh0xn&kz_aOot92*&OUxa>ywXZg9fB1}o867Kch%lLVTMlcK;T$6y!*28Up2 zZWDD7Zox0E$<_veDhu3L#i9^vBG#esVxF9k4dH+ngNTUM)T#>-vS~}(5!n2(sid=@ z>!JSUsy%w7$&9@}hX)G8u-RJ1K-Kv~)0ttMO5%ZmZ&x7%aekQ>y}5ztpv3|FbnQvE z%I01I7|_s$mZ2XaNfMX+8`Oq&WbJPK;HTr}4}SKZpPhLT1Frx#8$dVbUxB1TW+c)l z9KGBx*RvZ?K;u9VWysWCSzCtR}>ndiN=XoJglLXNXz8 zt$j)2+!gZ30p~>vS}Wne7!J6rC>-GIi|58dXFCmlYBoDP4PRQacrOP->Zf~3c|8l(gN$E0ZJ)JpI$vn5_J&X1_}{``vjs>3ReBd!LKy z$(JDnyo$(V<9re>f}!=!4eV40F%wbYN4xm|#WaB$8R@j}(k z&cOm(^htdpBm#!Ba5zC)JSI{s#5AYALKDqt^^uyn^NEnfqu%GeQwN_G-1`29eV0qK zsk_)X$vv5c zquz{n>R(<7ALznOk;K%Z=_|~KJv?%=S3mEsAwsX#G_juJ{^5Pt@j-P&*#=YTsCUde zJ$4^N>;0jHuPl6Z@hb~oS$wez9;mW$nt0SZ?VVb>GH~hAxh`p-TlD?bPcLYl^{Jn( zPqu3xcYPNr8pWX}??kA{j7I5DgHlvH&|^EO#M3ukgqraP9Vtw2-?&pe3fByXK>~%_ zVPc+mivpp?(*BA8@n&136E(Yg$4M)vKzQr#Ov%@4BiZ#eq4oy|wLBdJN((+&q_~xe z$f49yaWq;%g}d}x7X{)5$CAt!9Y^vc;pD7lo|Yj;x)mDsjVFzX4Y~z&yIwB~9_@2! zj|{rV(?D8VZD04e<1)KicFFAGw7QX!U4u17iv*DGz|^DN;$jrofvBwrO%9+SQt~NH zUCh$34ya*$Ur;EcPcErYPNHhm^puiRV*$r|xXA00MPnV1DUj6WbseR7BQa5|D9<5i z>)`MW-l>H|b}`CBoQ~-{7I+*qR7(C@@op0;Wa#7zjpiVpLL3A^2QlCWF}?>eoCmSh z7=&m(P^%B($;6THrN^1b)57lgMtF1PGuQIoqflx@2A(|lrahuO8vBzD824d3Nz-)7 z8O)pKAy_+yNhA4n_DA1GUo>-|Ag_VB06W?RN|l|w)KRmCQ*m-utI!Ugp6U*torzZ2 z%}|R*TjIbLOB=Ww5>$6`RtIG?HNewTUBR<63f57yQONJ3Z(kq{Y-KuQY<)UoY?az# zBDLy_u@&o#LET0++=F!)_vjn6nEF=T2<(IM_iD6d8HME)PCYQJD)-0Cw>%w}HG$&6 z7Q$oPkU)(lkK?rt4NJuvW>B8u={$(yrVAYiZ?ouAt=%VvVsKL{KWf<~-m-V!m|=4n z-W-uz8M3Lt%)uasUZCz2)tB5 z`XQaAa3CDIY#G%b- z90>X{5K#|&axkV7aNy(MBQ|8lDa>__UpU07A8a-!wK9&-Oz}%eiJ;B zum{~zFNb>~gj?jJ76gk<%srD20X*SmYBZ$P7*FUU!xptPXtE8+(nr~s=4rl%fy^rt z0&hVqCQ>9e3`IE4(A*>#kNia&h0BsDfz|xa3xVZCQ{Y5MrqN_vU`RmE{f<0;9H;AK zB*Hd+LSQ2Pg*k$$cBqmRjoPe~VVEur7gnTUjYd0S(JsvBags#JiKLlq18PF%$IslbBq54?~M`*rq$cOgz&D z4KdGli$NB<&P00~Y);MsA3mztex5P?tP#n=xb11KEabMXks$!sAFWVDmf&*>}B{)mtR-QBD#MHc;mkUKvxXL`(-bn*Ttd6w=Rp6u7@!SUt zgmSFeh|_cxmt@s&Q7vo|AMXKgeARHu#5kbfkXJ{t*$Rw6X+(l7yt@xENcoIE%;_!hwT=1aX z5zs$$@6&}aa>oo$*EPlAyz|BqI)jN^j1KVls7;(KJU%U6wPac>x%L@9^wweG72GCP z+o5}P`0bIK$vK}X-ARi0Sf?_dmWSc3Y;pS8L_){|cVPIAOJ;QLz$dXG-<399E6F!o`47f!96OwTJC6Y=cOxcKGBaAtshK=Vj zd=se?B_z)DH8m}G9YgLCo_1+~)i?)3yrlBQecS{W%YG&qNWm~YYx9^_dXLY61R2!Z zUzazjjdi2WVLsXH2tdqKtp|zWCne=U1~`IUo>J^3A4VGX<8bP;GF@csa`o`gBW^wdxer-H48)?({Q5TPYr7|w#0Jeh>CHBJn8qIePg zK6;T@wZI?&H&`8sl8s1`Bv0h;^y3BYmBfEKsLPHPdSFZ$MW_W_RFUTO6yw6Wu7L{z=5oMD$Bbp8=~%Ik)sgpxY7MGmc$QGq6Vg0X6eA-D-_7*>C{CcH(%gRMap+5D zJ9%tg%dkyax^Zo7_42LD`O80i`GQSo$Rw?l@g!e(a0NP^+GYsJj2R=H&`Tn}q%gKL zo`aCb<**Hn=d#daa*mJqd(a$^FO7`*6WuE$ba1UJ)nrDcC-BaV+i;Dsimdr1ru!MqEr3}B#P5z^08B~`*2cf{PCz7_m81ow^4Pm+cN2d3D^>p z8be%KhL#s^zl3FexwV9az9rY)v3-XD07y+BZRi#N{s7 zxwGqv6B|(2uJe5#{$d+#@mRv30A1?k1B zBS%KO=vaWOUe}#dX5fiDpmx&if=*~s9&N{Kj0)ul6@`@&@THv4B(TuYMj5N7taT~@@Z(i+x6Ax$JFdBhu zMRxj;o0xo|{V*|}foxXxF*9h21F4#?NXQ)oxt0pv1pzhUn=VLPdmPFntiInDzQham zI)+?3jlZRf`yJ6*Kx~iH1UoeB!LxDA5pqyN6jeIyK$%9hU=G>Q;vt$Ua!Y>pedWX~ zK|XB!u{GfQ#mVEJ`44~YmwS4i{TDqwr#_5>g0J=TeBhmy_sNfb%lsF-o4v*})BGj| z2|Oa-d?{FXH+y4W?0a_L{jz?r9(*f!cVa~i7Wg2lyyAFkDOgy1H+4m`-Cq0_5@oK} zVA4hB3ZJxaezQ7J6s?svu7;QZ3;< z^EZI=ta#VT^AaugbljikfzCVqI*?B>4l49~0XQpoP^gTGObUt=S4fx=dY@QCp<-y_ zmLl&HzXM93ShI+FpZMR{q%npqfAc=^2W${QRvh#`dKfG&y#dLRFrNRuXzdIRs{*EmWp zzcsuhw|>3T>r$xdm7RJ}9%$dFu;PW{lwh4#zXB-7}?d-k_kerA~p7@8b-A4ccA zHM}fF(cUuwNuFB9RVpmC-kD!x;z<+K*OKp)4=`~4E+Yn)t5xr#f0Z;?hMO;SB<4N! zCx~No84eM7a|MWZdms8uA(seQblO_> zKKPS}POiXHU(jr=Q2qcF6o;Gl-0vbbtv8j6P4DA>3zft4ytD!f70|MZ`eCD0 zJpfzU!~HjQ7tAry+CRz446n+yX79uAp&B`kvOMim*sMF=nZJe<$yJ)odx@U{-pg-g zR-wI>dFS=+NOMM4v5r>rI5`K>-ZIdn3E}eVJ=F^Y$g;bI8yld_Q%@s2bPW{uKKT*W z^Q{a6@?y02@g>1GLWnMZ-Y35w=m4(wFee@R*IebIt={@@mM5WgXoCU>g@A>~k zYMBI}QT7t=3dtk@id2wqXbmjLd#1n$WaASSyAAL85~6Zze0)%J_<2sE5B4C<@EV8@ zR3H7P+D(}?DHn!p-qUBa&ckaWp?c5$29RXdpv=UT%DZ5E2W&gSkR*}3@0T_Ch(I`o z>)t2+0K(DKN-~Tn23Cz-a{`CNyRT6+O-iQ7=s-y@=r;_(Q|1o*fTPfU2;bQ3Z zzRrea;K?H|h9}f((Bdp)@WxiXO`QQ_5{47#o;iJYFsf6u%-v7lKIp`v+=`nu2Gf3*P3kUal{yZ0&F`Iu0ipn0asR+vD z3f{|WdZ%6haKfgeP|6$3-YN9ZVu=}n)f7d(p3E&*Dke724X*b&rYAT^}ddof0xJ8UJt3mDd}+B z*!aSiv}axKsLa^|VI@S&`6YGwCo&2g-DTLqXN-61V@U2$2zb-;{x(LsBgv=t%lrRd zVOJhk)Aq&hZIVbrlT1z0fZc$K9+gI=G|)g%-Ac3O2#F^O?UH)xsbgp$LxqG?h*YQ~ znbQ2ECqqKKmS;ZFpSCgOb$FPqa77> zn2c1Ysm&cK_C?DL?vOBH@)hlWr+(K0!Zq&UM3MAwIg;8Ojg!IuZZ7lI*0 zN_llSP)~v`!Dv!xSWB>?LzxpH4#V<$cA$h_28Nsb&Z4PCX!IZh{QK@ z?5S^eL-ZDiAg3K_D%b~jFlETFI^P~X4+KwxaxofH>L6ur?91%fCeWV7;WJPi) zrhxshf5Fz5IcW!=o8>7=WGSHEJW5+i9r(6oFjHI=DyujIhCwkIOD4LK+OFYz5|k+z zvJ58B%-n*#6Ouf~VDP6f7^1QahDaen&=oP7Ht{dU=338txtV@~4y+h)*q9 zntFTBh~yrEptJ0!3bb9Quo=uf8y)Lr?yKh#`k_T z24TqVsNuq>eK@3R_Vf95RVN;WQ@j&1#P~u#`v!WR-4VYVDFOz@zV@p z6g>I7_(Dhj?u9{rFbw-`?JFC!*BRbM)SzLHygdV6>7sU8P*{pxno0TXdd;%U&P|(i36y zzym%>!e5?rtaIq?ntW$na?ChR3!^W$1OMGC{KN)dQ2%9zpHhY1*XTTz85Q|CbHRO+r2H3%>C7 zt@j?E45hU5#pvDc9sBE7e(JW!GOh|5*)#&8ah)|rua$QHb2l~9FrlvO%FAbZYYAeu z9p%XE&5IZoeMu{vsc{C0_s7U^hf`PNZ>o0TTaASL>T9=?jYtm=iqRyI z@zL7ag3Q#!{<(%1Z>=PV{~cs73hkKNBG-2;W%8ogG2`U({vik&J*;7E@LR_78=eb< zvsA>7kqo2C)^=3~-+<^Yk24F`Nv;F$z#IKAikyAavMXqRNTeLT&v@;!^agP4GOaSNupQdf2_jV5CHPg5C$5v zgEFts6uW{EI=fHl!1mk!Z1V`tGL`zH`lyO-+oj#wcf<>hw@Dr zl`IhFmlyBrzUX~LV@ZpOJI}CCpaUb9;kcN?vD#UTfm1VG&-5hmh{}d4V3>z>o6f7w z&dHc>^{%A&FA?4<6vV-3NB81_%!gYFVpo>*#G!x=o_;83gi)bah;@%vb?I=X?Tkfd zpFZZf2^&#iRF?2b&LI7H(z3ohofG$b=YTWh4lEaoVRSaxO3bC5oI*%S!;6iDOp!MM3UyP)cHF`dJTw-m$r+6kZX`uv9|A3k? zN>7SQ_H&j}7k_X`S?2NTSe`pu0??-KOfMkvDn@VQl?*=($=Dm%FHY3W^t{Y74s6hl zQH{nvW#8(qo!@-a=Qj9tgMS&l2S9y{m`0-7VS1Sf<(5??Fm@mSQpqu01d`2F}(T0A#o@55jL_FvxO<0#V` zYBsZdjl!KW9(}3(8#qvzOk<5^-?HrQ7O(tO>j!zPp1bqIXmS03O)Db)n)Nl@WRL2p zHXfTY4u%hH0xuiLYq`eoZ6{U;MzeRV8`v-7XcB)sVQT4=n_qY&WbZXG+VIJIoo3hx z)u>!;rMG+KG0)N=*){gC(DO`gS}}4z*R#d^#c*X*nuyQkw^t!X(ks;n9$_Xa9gv1z zUexxNwmaG}Qy6{y~$>))V zZRhW*UQLsQs7sR(7!4>T&T5b?wrd<-diC)3r*{Bea(D}jSg-o^-DTdJsRXYqK9S`K zE9Kuz2N-C$y6A$v0n!~sUW%IDfMg)}lFSIKA~ToemG)JMktZtcgILSJ+3~O_02EWN zRSNF4vNqi6x^Z*XM+3kDH0gqohRyH@v1v_swcA?@>9}@?DqMyJAdFXs$bJOS#aygt zbuSFL4ztJR#K1P|(vst|!t9S9%6e#Eri;jiu+O6?F^uGE%Nap$B4%$DseI%2r#AG- z;oD%^`-&_+SoMp}j!6$`ZCC;!<6rz7MpjaPPFV0t*>!BVwbd1Gaj-_3(Zk5+wdcqOS9)u75yZo+|h# znvn#Dz52S$t9;GxxTE{a$uwJKm==hZ!0K{(^fn3$S@O{0x{UFz=;ZJr5R}7hV)VDM zLhrOXr2v+H`{TK*6jH#9I3y_e;_Y2+Dp%IF|E_iDQ-0a-3@GF9r5KHyrf{a^Qu&g~ za#zzexvbY9DaET|WH3&)wddtMGvQ>F5P?4X92ganf5qsly6l8K&RUM}$BAe#VAnlP$=VJ6QUDbS}0cw*BZm#TllNwX)EILIze78 zy^YZs!K2gcZ1M&4CtcWaD7?r%z9R3`m0~>;t z{~qh2l`of7qn-CV_*pjB4wiTu#d}{nZ#xnpGL-Q$rx1+wM`|9F9WRoL#G@zwBwscO41jhf(7uk1z_mcKB24_xq*a@*M7;u9f@*s`6x;K%5LlhvVrI z*SNJSjH`rw7J)dU`6)0wks6mi$q(O#%#(ZF>dy~DpODCc?e2Ji)mE`5L|#YiYaPG_ zC4fAB%6!3oKWoyI@R*fSpL?A2lD)JNU^#PYVN@R2t|+VNdFJHHw|Z3t3&HVl5^EUE ze|53ht3>*O=JBcG+lN*_Kp4%zVbq`@G0su9MYium263C2v( zz}aq768)56OUlmeVWh18ROX4bafZ`(`5otu_`p_iGz$nGQj^c;MDx-vMZ3d~vJ+V5 zAPqZZh>=sgQ_Pr2e)k53>@2k>P7;9rxcNnl28W&R@#|ktm#~;u+u)F~9o7h0IGT}! z&saW=r>VbLT>KjltH2f{7hF-u&COj zrW@moODbK=$jCOD8->+5OV=W4Y-4sr@?eEfvup*a4>y+zuzk9upHZ{Cw|&dE{X@Us ziK7|^aT2Q-z5KJkeVoXFV?^1fJ&DKnU#E(>nOWHM9=-Fv{egOqbIBd4_0^@1NU_*y zT;N#F?&tqnZ>}b-d3WESjgTEV!r=E|hvB&3obJl?Ln+c{BZQ8R-vE(o9&eu5+8VZL zCnvwXv~I;dA;z04eDa@RyZ7r{ugJIs1=y zKK?4V`}5Y!Zi4u)*=&rGl01wZqYrcow=J>BvCEWz9Rja-TxeeHr7~i%QsO|t!{l$z zvStE-^+Po-Xp~c4Ce|W1z5i6?z)(+yAMAdANXTO}rVL4VKP^@obeLr7oo5-yslZL* zW3-9iN#}@&mW{tlj)G=LGRy&;^#=@bVZFXd+K8rMW0}iarPOz@K_GE4eNF(#1gZX- z10TEboNLKC#zi?#V2;QdaIOHO1x_0Rq*W#@6DT|$p{H~z3Uv7SI06tuPxy-#GK3cz zH~XrznQPa;Z2a;>13={X{wU#tdj^|MrbP@~7psCvr_MoO)Ld0CkaJtCr8Gx6G^UGy zWknyEfTj9)P$|#OHEz49Y2qdOzGL8g3`UPwVD$c=^uexHv%W>$cT``z(EA%28-#{& z*r3~WPsb=1C=OVE-o`wa4@1W|C87ZX(6QA894X`&<;z^zsV1eML!)@rq5 zH??DTYg@Z7R;}%{Gi^Uzr+ck-W@>Gxc3Q`+o0;GD<~;FmeBZl3pq=^5`S9bM=bYy} z`#Jyr`{w56{KF1A?Bj>$e`(JN?sC{Y54%_T`veaNP7EFtJS><5=LXLVE($ISUKv~) z+!VYecxSLHI61gWpzR30DmXou56%iSJWcgf9{ZQ#v41I^Rm_7XRI{c6P8P==V&^ft)NAJ9?Jlp>rvoyDx+19v#n? zjJF0=Lt|||Fl(EG2M3P|#N_G0bAw&MOM~l!uM6HDyes(rU|LPFzv8|jIXi>bY#2#aA`G6dxVS$wk%nQu3<4@lCJq;|@DMYkh4$HuRH&OM+Jf zHwWJy{7CS@;8%j*3qBG2eW1X=EqDUr*GLCLEa zET=B&OjKPgXAk-8sXdR+SU%Mh`^k`x9l<>VF|V33Ul3O^fIRiD-ClWh-VT*Kat@_^ zb$$<(eRG3-;x8ZKFV=EW@i#vS>e(dr8s2HOH=gI^$fl#OkLB#4yWg|Y`-z|S*Zs88 z{dF(Y{#o%*&-APcv{`)K-+I2~#Ngg-PvvAedyXFV%(BP3WN*((<8w^gU-4OvZTDTK zZEFYHmLvOqgY1?1b8P3&_Ke+~+PZ(;zrUwHGSIL5(*FJU>JB>_ktV)s;t_#bK0kPT zf;B#4F39{O(0V_e8EX#-*kX+w`K&e1bFFmaQMY*Z1s{9C0p3Z*nlrwx^>gX%Qd(tq4EapH80y`tn*x40zwEZBcqbWaeH`!s znc^T%&Q;ID7APLi3NfM|YM$OchInoaG;6y8I*hGVZ1gV-?v-GQ!wrFkXKmoKr6xXC z1#C0EGAP@6-}yk7xcJQKUFo<$KFf~#XDmnfPH6KdrWdo_!C8TZFQvR7hi&|&b6dc^ zPwwBpzvl6lE^`+Kbc!dvY^0-};pR2+?-}34Cf&gp8UueX4mLI(HddT(3(uxy$T_X! ziMj4%W9x}iWcBtJ-w_?( za(tS_^WZ5qoZQJSeRu8VX308rima2mebZ#A?W*%ye@C~+y7RFkm=B7->b=f``C0Ma znKfsE3_aR;M(f>?dUk9G@YL8m`r)mYD?F1xqqE*i$#teGr)*+7yUFWqEuZ=Erl4$J z?w(I|dpz68aX#He<6UuC=GaANol$(Xr*vm(frrg}Tg}=KoFp`F_azf%{p`oc-seFaP(n@!{#~Y#M{R-E+mbuY2`C)~d)dc7J=UDcJZ}ov#OCtrP};!%#cX(C*43HVR&2!WO!I-g>UvzOnATd^ zE_QOFZuoym@SaSF_x;oJ-I}}cp%~Lj_jrGJPPjjO=Axfn^;u@*UF@#Owgvs<)fhj$ zrpk8XU4h&J+h5T5_*Hx>&CeN;F{?(L;idAkzS$rKx7CKl>QqdZvSGs%8#1*JKe^?j z{8VkfFypejk6piqP2--@V~^%Mtv5*98K|8d!J1&KfxceUy|ap!Z}z<=AWt0SSzXB` zo8A_PL)EXl%egJys+F~wtNY5nKWz7v7_7?#J@%2S?F)V?^Ujm+TE_F#ulru5U$0!3 zO=OQ}>Vc8H)R_`1ez5UP!C8UUKbx0|761EK+0Q5OaF)M0s2XCg?_t>cy5NG~$iSWG zS?1ou>)B9oGDpre@rNz$+tUL3w3~uQ27Hk>JlYMxDFHckPtd{MiraM=N9@7RjHR>c zmMrI;O_f_bztwVEITb@S*T?fyp$}y|#Z4UE9#qYV+i?Lqtlb!A#FWj}jt}~^XNP8^ zH9qxn#JT8Q-5Bo!gI*3DXlo}7YjnuX?qHU@by@3cBIJVIo`qzt4{9%ZzN0fd_{_zx z-4g5%>iN1M<57Oe+mf}dfxK&#YcZ>F<^9SwcS(Bdd%E6p?$TfqkmalukGp#=sPzmN zWY@b2yDtk;M*GF_Yl5;b!-M{*E3IFQ$ zXJLX!yXZi-Fi-xZ(dPO3tAY5kUrsj$X9m3t^rk>9?~Oxhbz7kQbz;@i9}m4J^JKmw zu-E-M3BDMh)uCQK^>pdkr&lj}O+VLqu|$iXUcU77>&3aZ<%b8`zI~v-exP3;dT(Ux z3o_jQwdvV-T~NB+fqeU&fX>YWEsy>BmVs8|{kk|7-P`_{=vS}q3Ow|0&RoxPY~yi9 z6wg29d-0y0_WSwsfnMe>hvw&lf|B#DHg{?_ z_v&Ha~3WB zO89#n?{E7(Z%gLeGuQjSrt#dj0cTZ2AIx4;|rjFFYBZIysKAm~I4{N++{6?E&&sl-SmcB0k z`5*W1CtLeq_(6cdlUx7P z)|cJqHJY8|JiGOyU01dFm$m*Ct$$VPU)}oGw*K1IU)TCK4E>FbzPa^pYW>%@{u^5V zme#+u_21lj?_uoy*4DqX_21U|?`-|MTmN0He{bu*r}f|0`X6Zh`&$40*8fQBKhXLg zZ~afU{-<02v#tO6)_2I$T=#wIQWUc9{Sm)*4aib|Gq8ErB7_i|A%KRMn?u@y(VC9`C9Tawea1^W$7;u z$h;z;)A;R?zo(7gnX&tPM^JNb?$*Dd8-H^*{>EkRQUkt?WeyvxNcMHU3Rq({@#eZr*hOzfcd+W`I||xHLWxceUnvh>vy!7`v#FCC)&wOajd3bq1AGy1O%B^!-^UmwE`Ajd|mE|M9oMm;7pZtp= zxav?0H2$b}I>lj>@BE96<~;QB)$b_3-Y;g!GA|D9moW|}WKR5gdrO{qHj0BW8Sd6z z#)+Z(v%_wv`ctdl5Rfs}D%lm+H#eU0`}LtOY;*W73!FzW^^UYH&^+(gq%V5>4)jm6 zz9;MZg8$w6&$j+^t^a)MztH+Gw*DVm|4*&|=b`_XM*nN;ztsBut^ZUUruVN~|2OID z87e+%Ox?0wZ1xSleDy$I*yyk>#8)kxjYv~>WLzGo89DMSp~u-VM~_&Z7CGjNJ}Gp+ ze$+sJarh4KFGKhHep-s`==+7fcjP`HD4Y3!W&<1b=-xNIn_@vcm1v1pC=FC4Z80Xkkb6YZ|&mIudivvF3ajz7QF^C(u zqmB#kIYY%a%5o2vtjjXaFe+PZzagR)^Cbm zye9ArbuPq#FJi0a#NBy#SYVHFzenEG??plJkb~#70lA)Ga#OOz*m+V%Y8St@Cy+C9 zy+X&?We7tk**Y~2=^SF3E8X7}G_ zUSlg?$$dv~X7HF`5_mTEwfgHrZN5J=eQJjedfD(zZNBWdDYQ87&z#sjyUEIMVZU>6 zHX@B*d{yIWUyc9gz&%DETh+Aj4Z%MJYLw4A0{rA@Zwx*kSl94>HV{|*&IKLD^MSqW zL$kwJeX1Yhu|Cz7eQI!1VBf!mjpECWvQ-|~V!mSjqlx)hp~XYJ@aNxSOnaOEXo}6_ zom2JT?%@}|wVI!H_dPr7YlBgid(oO&tu?j7rdm@wwT7?O)PTCBpYFd2D$eF=ygTEv z$vx;EIzJ5L>d<<8K0UHql1w~37! zpZUVZ-j+#djo!JSd@jDtnIqTya&0>L_nbYX19PmNR*v%fbIL#jN z%#Zo!x7ORUCv@dsyo}v@DV2NvAwPOJX8||Co5m-;%U{)#`kf1=>BToKrzd1y z>-Fvlt(NA4(z{shj}9Nb8v=1)PtB<}b*`4mu36`HRpS}Y7`fVLBb#~~@4LWtYd-di zA$#1h)o;w0P5jiG$IISLfjIL+ZpE5^Vrbl-m059}W%C%r3m2G;mtO}!fT_M3ZS zps`D1mwEf^Y_h+6BBShAGa8-jzbwcr`u@dyTNNI%*?e_iFFiHaKZEGp7~loxcM@oH zuz6QEu9_7W&3=2vcLBO)@rv~{UE>~l$t@lB)ce_(OZMPpi`e3|Z$mKJ#;3APtmqN* z+AChuo;~Dy>mgY*Vyxg z|Gls5)^-MD?r6R9%UAU#?z3W9It~v{#Z^AE8xC{}I@e~*E_~MMV*9pWRp9%8TJPnM zU-crl^3%u2TG?s6bc%KDJu%~YHz~cI&wXy#PC(`*wfd-_~Bv)X76dHC2h2{barwqh;@TGb!g&mh@*PM}`Q-I;oy5PfVc-D4f_ zr}ux>yJF=+O{m9d?~0YPzCP`n1lnZb{|DlxW-4w~R~65)aaH4y&)!C3tnVr z-1T~@=IVYZf5loG_0T0>g@0=XpupziH(D=D7kO#F>e$o5jV0}QoeUm^VpRe}GuYF~wUQGNPdts8}2-8yC|Xbt|%cv{Ama{+S{t@+~HOtLI3) zZ`jk%@tObU2W&kfm;`4A_8Vr;Z?NzSbL>T7pa9O=<|d-sGMYn-iG&nM5be0Da~ z6&`yx1bt07Gc`ZSSQA%!#A23Q`>NK-9M4qM5uSQ~I4R@)POE%*&s!{h6*G3q<9tBA z99GTu@n8$ya|7+H1Kq)zuDp?})jFBm0=D=WWpU_r_j=u78hgZZ^nX?6Mm^gzM>hD` z>2wP=(NX8D)<=1>c-X;a&ChM~+c{Qqn*5m)dp7xuOSXCY$o2E#Jx|$UjXh#4k9h1M z$IpbLHw2a6`HaauF;F`i9&@GNT-ns`wTC{<9X$sN?jz&Amc<@z-;My?utB@Jd?xb;*|@Ht^X9~c zKWrRpkbJGrBc8tA`Z%zmd}Ze}nIq5c@QES*vfY^Ny&gR5EFSCXY~(4u`0-p8d{f{a zy&~8aX#Sp<8bsssZnCD)=??qzMps>#yDpo0`W*xPLj(O=q1jw}==r%=h&6fu4jef4*n1|IJhEe|pnXKEG}X&qV{z6;pVw9C)5Ph3AIw^tOM; zK>tMOvi;Fh_Wydfe#DgZzZm2lk-rGo>pOLzFC6IC5A^#7`V*n$pkno-?dQCE9e+RU z`9kQq?3oXWPtL#8WO;Ad7?7z>ub(2b=XExV_wp&chv&d-eUC-@j0FmJa)+f&SD$-z$Ha6+izqziVPga7lnJd$%@wd)ZgFy=>6l z+V_j0 z=Ja<9)B+vG`l5~DnARUP^v5@PUF+vtzp?etYW=fY?>j8=p5OXoTfepS4{H4>t@j-x ze&1>8z3b}zOr`#jt$$4GUo`ZOYxLgMKfd+nw*D!te_HEb-1_rc|MJ$qvh}ZOefja+ zMqku==a^lWwEoi8?`nP7=lP7U?0QL~J*&-M)%wzZb)&2Q+D7}iTKv}p&ae8@oZn{z z>h+w!XF|Sf7Y6m7fbPe8LhlQ_pXk-#3xgjHif>EC^5qPInpkX)bD(*Tbf?H6TS^}K z2_2o`t$3fKls+B?mbi?ja8#zXfsp4W8i&XAT@lv|x4f7g9Y=4<^=273IN`=1}y zf2h%9-z{*a+_$~V_k>6O%<09lUw?bn<#jI5&F6ZPq0`X(%enk zbN|TM5YXAjavHB%manRV>oR_K{8C$Q4vq`d1^dk5bvL5%)@Sm5|A$wwe|=>1`fqNu zJ6(HY;66GMk#>8!PgnwY z)Q0!|;&t!R@zkJnpr1C-PakM^Lh)y~5N|c(-Q3;f-a?DVp5ShQJ6sIh3Fwyvcuoth z4E6>+pB!4(dmq97@}S>ydFXKudgOaa$Cu%PjrF?`+03T0+u7-D4tXp7svmjM)SPxp zus@g!#L(R@_ntx8i9zi>Ib-?X7HEH)I+XvS_YCy;13ek&GeV1#{p9*PsJ*=V4s?Ac z2~WINYl`Q`O{E#yIc;lraRpIy`BXL@1(XwS1}@b~sO*W~XGrrLAlt?k9j z<}cfOVEx5yzZ$~x<@K-h=ZLKH$MbKRKWj7pfIz-p6}&QF8@smzTiY1z-o>{sm<#as zd&E{OQ#K3Fl2>G0vdqW5gEG8B^y}*?8D6ji=;U*Giu8 zErBz*29d_k`CzGYh_{y`E&_M$FfYF3T@c8Z*6&+NpY>~k+J9`u{5GfV|?tBIcX zexZxEbk;M^ytwpoi>LP0y4=apteB|nv4uYd^b6@9oh+cI{W!&k6W(W^iGk z7Tz9|onp5ku>Ra({-n^(7dg)hO3puqvSg$=ViY4$&#Dx1J8*Aef&V*eW33eT1@0kUv*USKcDYL z%0~MBrhQjpUHe4n^56Pzhvq*!0UzH!I_&$pf&S`7hxIFRASPs0&wq413rp8AZQi*t z#}~c#C;bD0KE96|Y)dO)``tsz#&nD_ z$v1DG`;}~GU{`?GIj;4(bHvuVJ!)V+m;_qwF=mf7eC1>DtHD|SejT2<25~p8o*Xvs z4elL0Bv>C*%;bW-e4hjwo2*wH`NuEzmCx>BKG_G}7i(YfmjBlA+OIZy|EKL|ue$`F zJr#@EyDxKNEYu0!Nub#e>|!h5p^t~S$@iv!zxHc#YEA3wMPBf;%ed}#`>PK5DGp*< z@iPW;AKJ#`@_k1@mNjxT^VZp89bLZT+)C5wgk@ass=uZ5t=_@%AfN0#Ei9R{#O0cjUUaXS$>cC$8WBBb--sd zdE&vh(}PWcHSy7^_C}xkn&SVgGeB0wLR>&B&T8YG=_|Jtiw9*+n-&Xpv3oAq5ZF_- ze3y)^iH)_zYJ$$H31j>8{h1)QYGkQ9LVPtc#D@McX5!>7tvXQ)6&rB^u~8SsVnbG6 zC#Qzirp2b>qGwOVr((jlijla@iqT5yhaKeW``C^52_B6<;yNup)>G8+4^&L(shE~rdZ)=X&vyLAeLT#GP08ArF+FH8aVFTZnA{g-eUwWEosSDv zx3TweWBTR6y13Yjzqd<$h?V#{$Ku$fx%;`9O;sT1@%P-?eSr$3Xq|`+cr6$JeS?{_<&0z~@Pz$qPSveU&qx zJL%mO;A5Z9L6-#ee9my;`zw4^i^h1_`{FicFF)B-xjidmX9gd6#`r3?r)E4Ww|K}} zEVs@VpXsgK8k?Jz+ltjB>zaJxuikwjHqMYay5$A|Kz+~ugx$7zi|JiUBw56W+! z6Gp$se69}6bUY> z8gJDAU*(Pt@jx3N*T(W(_n#guj(jASKUK4AG=~=F%>kdtoK>TjX05mP#L#>$`^YSt z-vB_^dnhS2}mMF`Ftr_`&|AbjZO{I`~9iufw=>s2OzCjPYVQ;A>yg_BnH6 zX>F`+x~-F2HB)}uqh`=!+*fC=Vsa?$Wy4DCtr(WQFIvLhK8MGI7cHh$Cly2AYlz>T zz~|uGn$KR}w3;b>hf2q>v32xG?ekG>>o`;~SVF4ywlS+P{iy#q{(d9Syx_1mLsR-N^_rqwu|j% zQfM{2l&<;kEEPxgTo%mw%r=)b`rY+=1JB%t1nYy*M!LovOtW!S_<)}q+jwVsXLLs( z2JUJ0<53UOY%D&!=LKTKK6aKJn=)pn`+*Wya0JsTXh$c4{Wk#%x=2a zt-mgyhrZIYA!B>)8>-iU;tUPsZd{e5&5bwN7sNQSvusPMs{r4{^}w^9!_&az1jh%=lQh%Xz&jXnCxF|xs^&_;T)FngdL#Pf{c#ew=zTU8&% z8k_1}#n_*XTccBK#YvB57g}$QjT<_8lCd^f`2PW&@kYw;fo6_f*6Yk}Z1a=!8XM)FEp;yVi;w@4 zKr22r$|IVe?Ck0C2cO0Va?3Zo#_VTb^~Ut7Z8q-?Dt@(B9g1U)z`?&;xvS%wrdv&G z^oT>nW_8A;gYW$CJR`feg--f!2sHb8oz`x#kT%V}(m{UNXIwu0TYt|{zKFpz`_?yG zccvG=9f7)&*R_FoSaVjb$*;PpT13Aw(C}*VIv0q8eR3rCn**`m9pDj9Jamn*W$&&4 zUybdZ59qXqJdJ(Ub_9C@e)N3qOs(hJ7ka$M?b{pZ-PIcd?LL8gipwO>*yUWY5&tC6 z$}jWA{OjXxUi^Cdwujbw`=E5?#K3qGXylXA$4+cYo}Uvlw&%oPRiM$+@58e@AkVn$ z;NX+IYVA>>O{tlOx3L;w zySdK>T0i$c4@}*v{;Q^(Ewv?Ya6;f79P3LR({JA_p1OyIq;@?}u^E zT-NdQ^F4pvhvdI6&`Q4dqor&WuTehVCV@uoSqq~t%eB6k-Q)gK!@oLMEM{d#?_2LP zJDex2{F`QnJWepBjr-+wF}wS{71!$Ne^wx#?v`1(FF*PijCL$1o{R0Tc#^x69lh>8 zwu{BH-_yrr++XqR`FoyzZ^d!!?ImXtXwKJ~0N>#OJ10TyLq9sGvtQ4S{+zq#HFIR| z278)LwZTIZ|vy{&(BdUZzbRe}A+4+%B| z)_ULV<^N*qd$LZ3oQVzn8-q!p$&2-RUa?7gV<1moLZsagtO_35?qqlIgWI^z(cfiW z>*xORz|^g5=bOB-OV1Z@7nHAbYMTSP?U}Y-xfP2^p!K=E<-pWJ{B~vB*Ydcha@)`M z{FOWMzpu$H`OgZyn4NWp^s@OhX>!PXY#WzM>x1AB%B+ z#j)q_dHTH-zp=NMoJpXa9E|s{=T_}w_oD*$z`{FN8~5k=!I{&{k-a0JM~{YSF{^Vb zuaiKdukPTgw`utu_snIV8tdo#e3n1vM*rDS>-@C7)E&&{4FTJFzwPDwV(WXd&QAIA z*=A!f2{iezHr~JZwg>DxJoth9o&w`>{;!7LUtkaZRl%nG4v07B?{0YCm5=#={ob?i zxF?PX*dQjx<X&oJ|FPk7-(!N-4hdOVr5@_ zwkw`K$KsB!=Lxy6j~+gs6p+ofs)c_3j_~W2=+eq&woFW<-PwNeTYF<5ci)0YyCGN= zd?ctG{z4ne8QbOcraSNkES-XNh*LWv^ z*2mNR@vMNnS^7#|FQb<|%5xvm-}Co8{a*SX5-dl5zpt0q>mhGllV^Uh`1CS**`qvs z{OS37o__Cgo)`SB`;)z=2314b+qkcn6Emmv^)fy$runG`7s~_PbB$*)-}<$>&&qyw zTVLw_=ktbuO}!uX@@290Jy{oTXM>;a+Ks^^(AZ?X?xOL`z7*sv7(0beDeMc~!*?M;0VnZ6=)HfT)H8SL=uOWPsK(B1R*JpEp}J)@V>-S6pT^*YFs$E9M@@9*V~vheYv=kIy?y~{bDo`+T6Y<*Br z^|Gyv``Xx)Ijyga@qCWC`uB7;7kl^O$71XK*}SdqW$$x#FqTvGvm+p%jiu{38RNo-N5g0A zPJq7l#`mnAx35?GdS0<9AJuq`CmCyeTosJ>A3ia&pN+qocEG#IiJxm@$233rA_f}*evaq+-kIzDjE-xGWqZbD+sEUFbusZS!>5(lRyDyUwMvI~OpQ)<(#40- zHvG5MHhRdV*UxRBjoD)?hIH;|Jz9K<7GG!CcMj$&zLSi#sul4k&!0>5F&8KA`f@w| z+y=gip}krk^WSc@!#?}iUb4}Zr%A?I)rTBta>drNn=Gxj z`@hF-JnSJ;eNC(7rEJc&gP*Aqp5|Z07q8!2BEIy@iZ4F?cn8vE z`Lp`K^1(B>m>=T*lA!Ek|E#-U^lM+YFT;cTdcS^WhF|#kQnBZY^Hwos*A>BNSDmST zuY8Vsubi>BuaBy)NqDu=ZM-Mw>*})5{~>rmz^>lMHUI0t`_Q(`lj+}YSd$*D`8Ozf z+8xl-zcA469q7HGD-N3?&)#1DKj$BDpr`advhBxH@j5a#?hM#heE0A8%xkY|zLbvI ze?#U!67({^6#ASv+spjd;diY3ZKHd8Z_J*a{+7^mmt7y8vgdn;JwMavvhUYIpZyPC z{{74EnIhw7v)=3d*g)U)Gq+wpZJ^H?=;sae8wUCZ2l}G}{f7hn*?~Sf{~$(h?m&`#`>wRB9pU;N+=e7RA z*1OluU($MiPLF(6ez=YaXWt@oTk*Zk#;_T7?s&oTYi4E;5YeqHNdJJ4@v^bM`| z>?P-x)_+~=AJ=+yX}#j}mW%w!3dDoYnrGd7|HVtc9<)x}GLi-WfZi^&s<3xd^whL;@rYCO#jvAiw&*!0OIWWT0cm*YG#7k&m< zKFgO37k)pizPFv-n)ij`C1XCQ_XzKiYDp}~UX#Agw%<|QuYGOS) z_v^nn&_6QJ-#O549q88&^vfF^GZx-g?~(pqff}4^JzLRtYds!x@fpK0tzX;vV_ScG zdNpjHriP8x@XG=<{Erc^CB52IE1(uOw6S+Xcb)UW9&7Z8pU+J-&nEEQ0h`1QEl;b$ zd}Vs@PDu9Y!RCNWI{Dc1%D2x)n(?Zj>{KJbmPs44v$x0EDFHj##7<|fbdW6+h8_>OrLXo?9MJZN!=`|*_XyZqd(bf2C|)NAY}JhW z&yr$Aj=a^KVBND^OzgWTz=wyw&kUSZaTD9pVO)H5ZtQ`w9S>hBKhyN%*%h$0mpSS_ zBI|U^g*Ngp*9J1gz`d_c^B)iWqYdn{mu|ikAKf{&`|um9v>rz3s*8uE1Zq z+=K45TiN($Uuk1s`|Kfy4D;?(D0}G^!|g%U-w))Ru|eL&MZJ2Ckl_rP+Z^ztuYtW;N+mzzbyY=3x76Sd0Q&S{2^a#S+_6$CyPDanb7L+ zm2K?HdwJpO!dmig4gb+IdiH9yPM6v(x_W$<1>(&&dgO)tX>qOGv;X$y-aF}-dpXk7 zN}XMEyMqS=CkALSmP5GJ*+|?<#w}TMew_vF^5BGkuO|gHFZK((Ik)z{C@5Wc`05;r zA-&`Il}~)m=~V$fdrC&FR}QMKZe@3JI@&$j!cI*Ms0sP6ny^;$Y&HL?KpyF3QStD< zkAoOiUe!qDwLh=+$blL$=3k#9bGw3Cul%T|TlqO9KjLG5#fMxtJ=h$~1zMk{UY~O( zR`yTJPtPk)bx!&E|N8x^2F5eSe=#w?)cxu{Ix`UaNud4z`}M%{KrHGWt=cWR`i{UzrVehkpV}iP4`P$#H_1u|nyzYLj=ed7q>lXxk z-xcuP-L0{=n!G6IeSx_+U_WirZ)>TNbm^-m;V2;^p%+d-;Ax`t$zCzdio2 z|KHl5n6OZPf015}itR%Hw5mg@}*+lug|I>G0>`p?18GGlI6@? zAFK~F^hbkDLD|fv(dOEJsBGzV@g2%mXSB|SI2Et@9PL^xmKCeMeh;<%&fjR$12Z=( zzr9Vp?R=YN+Z|#1anYq-+!O4qyG!k{Z+oByti3gV{wNpjVSc_KSkC8X{@4T03fyyI zwI$dZSg-p&e_XlnUH&LrO)TeK&Y#&#d*{gX!rggedgr2Q*c}Ia-5Bf+>K^8|`_`WQ zxtQ5o_oFp7)ma|zaq=%~{QR!ZydTNf=ar)awOxJbx96v6>g6ji&=qmo|+5Dn_ z&2)<8L7Vp<_iM!9 z|9czkd2zsh_OELFLeBDU4V@QSoPl2J@;xgC=GnleJ_dgux?(_&b^Wv$*tb{=?CWFD z%j;vXoOqTjc`uu)?`5%R%tzJJH2v;bF~xI6aCI>4Ty4qx*1&lH{Lc*RWz)3vi!;A7 zkjHI-mLFSL_zrwL_w2qo_(bsHC?FI4>0n)>Z_4;{!8bNqY^S~JJu&m}l;DRu{8+|! z4Js#e^5fdTxwhtBkn0nJxj<7#&eMiK4C`HMKI3Wo_!|=s>KX43dR`Qi9x^rgq|1H39>f$AVJN~4AzxN5)c78C)fGvk29!Ew_Z(|?FJ3AiyE1$+Y zfWPjMioKXnktnqtDB6hcGYd>Hp{D zz!|krEFl^G#kpc(T2L; z%D!F)-%5uZl@9igI>fYe(?L$%Gxo7p?&>p^ocSDxhir}C-xRo$eU6rU&HRUhtApYv z(|RwHj$Y<89(zU}xhgsCqJF*ipPlvjmi_Z>U(Fp8`lMjYjr@oiToODz;71={JR{%J zX7D{M^A8TxyEy6X^f@7KytJiUDH$akdt(f*$q?0?20_V;Vcwf|7d zAMHPTu)ojs82^54x%S@?^40QUwpmkKi|M|z?7vIw=<8Gb*97LB;fsSO1a%hFKKsY@ znlHOYx$6FokUP!Z$2WV`X4%!-YrW=IV(;yh%m3?w{1uUfzenTF>F3<{;Js`^;NE|A zu$Zm={)dP6&XlP(&Iy)dXWgyr?Q>y&orUsqT(9{p;oaKy_cc4Mwr;Q7it87r`CrDHMQ>u&3P@AIX;*`f7*j`>n+r4O&O&IYph(#KG2 zDuxwj{*?Tx+kVd&cl*S8x%OQj-aFI2s5|HnKbBJ$ub*NgztyoiBFA}`_f3KL%1y=c zw$|etB4dorO7vC^>#S5B+1%SYE$_?Ob8O^{XLonzP7dhS=y_&4axy(VA>``AGqoz5tK z#Av1d-qAj)IVhjh;~zGkv}$-Jh<!g4zt=7=}+N?a>u(0bue8rX? za*geu55${&bUHgVXZ)-{vv0IvCH5^RSCyZ#OaA3sn^t?fGS4o)%<^Bo@eTUC{8{p1 zf7O-PPqVSt5tf7Jq_YVidV9$$d)el!j5e3O*JiD^ z*WR*|eQaOMUi`PmUi+c!Q%C(-5;?EfS zJIWXFRZHYoZscS>Sg9ZRwJ5iG&yI+N_^KhT&YL{ACp-(pepk@f6up(RSvm0DTXu`J z+9%h$$NFGfpxOWDvCG=m2agQ+td(qQZw}nc?vOeM=Vwe#Pj79scv)A+8og|;{k871 zkNrg-KhV}S``u%8SE^I8(e$Vx?WSNZpy#qcY^|eT)W+(1cTjrktX-Ko<8uS{ELE4^ zKjhP%$_rba-~Ka(b#+U>W_>(Ubjvq8N>=58J#v3-;NJLypmMAx`y6i!%?9m_0lxPl z(!_|&7YAbV{y-Ds^+ClLpY!^T0AIgfO?h@{&k3r=*f0xt)&-|^JZEPtPweBvj@Cab zz1&?Nh#Q`-4n`h!-PqQbBjc4bWSC#B9qMG79lKT_FvXr&X%uu2KrvqGw>{nX=L)t9V1`b^#OfQcY*g4XNKJxyPb16 z_c>*CFdsPE^{lYJ&i_*SV*0{o3vx?my^r@g>#UAC>ph3gX)^2^*RE>znO8&hIU5fM zHU~!rYlC`TXSm?c7h)@$-W>2-9JDtE?tHPV9EvTOJ@(ib=IyZ`k2tWy*ynXJ{COFDY-I0ku|uv#JH&QAplc}` z@+;b=+Q1&TIncbzkyo^uwl3ykbw(DQ9WkgFiG}#q9<^r=`zpTn;Il`)$gy1A5RAEU z2JFY*QRKpguz#0#Z=DIeT}hth`|qkAPjIB%m5;@8KW-|DD*5>s^LVf3MosrR4J z9`T|>P6{u~_zl5Wm-K)f_h&?0Hw4wQNq#R0_B1%-^lN-j_s;$m0o&_*WVkS9llzW7 z_az>-lD8CpSQd0tF6rs(O$@vnI2-I{FS%C-;$>drBfG(QH?P*@iGAWT7iakx8ka53hqI$L#ylUHxw2DCfgX^zje!`| z?|~t+=cl`B?)KE+Es-6Mi2*qpdOqlV;)7<+ zIqB=U63nv;dg_fuMOm>e_rruKCmv9&kD$sYx|AsJQ$D9 zi#iusT8PDBcF_TR64w_7ZwNGTwD+>$BZ0VF5o`-Ie_xkPMSnCjIr#Y8ul-=w#1k)@ z-yK>^i+)Gwp8xWJ|9Qi@_tswCC))4JEL(ndpl=xHrw{bjfnGh(f0y4~N#FKnKOcT6 z0Vq1;VSgQ3FP`%0*~=a={Al~#mu26(2KrS^zI}C{$Z_p|;K2XW|9rq6{KcoXe=zfX z9KU9uA3MAmfqY>21INls$LP z2aAY3DEF?zo=@fnX~d|P^S;dWF?v_%svmK_B6J_47d9CW>h#=W;5lrd|0o|q=oLr( z>8*c6dNEL^Umu=c&&GjXGthtEe*dZc+8+$`2M7ASq5GJB-9W!=;D63QKW3me4)mIV z{&aqKYwyqR4D?S9^tTT5wF7%{=InW;(=no9E-}BqczkZ-E3auXH$}_09neEo}*7bPw#b>N0@cnZ>L==xX z_582-aN{0Ph`bl1%kO_+Z-Lc+FbFOds>?t?cLJ$ zk#$YZFIoK^_Ql)-=8BK3|DHK^%i~i6>%Qx$-WvO~tJ{8`S*`2)^}TI(6QH z4{Yn}T0cMV?Pz?P+WM(o-^)9#@jbMy>-+U}ZQb3#-s&IS=(D=M-#6Fx?Z|pR|BwIk zK>ViJPk#9=SLn^H-_m+Y8H1d!Z~Zs6{+6My^>1kN zZ)yEoTmK!ce^=|jwe{cL`v2Ja?{59~w*LED|Gw70zx6*l^grI{pKSe4xBh3-KQ@pD z?LL7Rsh>9m=LcuyP|NGqz&i{0T(hB#)z006oq_wq+A)DM=gz2kcMbG+2-^Fn?;FG( zyz7&FdZ4bzq|@Ei^PU_!rY$t%RYBRgI%8nVq>b6x+hgsNfSqh&=TSlFD0}y0&b~{7 zNpNJ)+hQ-f@#9qwY%cx`7v|=M9uK*tul7|O(DsPKrhu>a2-sVD&@kF4UMB}^)r{@0 z_=pub^7gtwEUZ5)5EJ_@3h?3K@7sgd1bD@^bQl-kbs3jj`^t7ad|6CCo?QW3dzqtd zpNr{sr)eYqa%~`ktv3;pHqC!L^p7^M&tAIuUVL=tqs}4uow0qq`AlE$^GfvE3+mfl zd36Z3v%7LK@?5hFo@t{v9ji z-?>8m$qM<;ULn6)T1k8!vqFB)m6gbURL7s;!S8%3pPor42D55*%%{7o^k?`L^3KfM zO5{Cs33(4$p}YqV^2*QCGOv#LQ}$)}751OH#QKA}^=b9*9(e7HGvywxyT;vD&zqWa zx7XZt8N2iLq+b)@zdG=aNAL3kXVAQ7Wq+^TFSL8iS+ed~W_(ppa_KUTsRy5hpENvTS$7!u#|C8d z&&%DR?X#|tDHixn2t0qT41A6;&&GPzva#P=@$h`D8WHQQ0r^n*A-~4nImB6fYh3R+ z+cRe$zwW4?11*2=Xdl%BluxTN{=?*&f9m6PLA~>ctr&^p5rH_%g~rbLpw6cI1TA+J z_YA*+&)RbMHZ7BH;}pKich&99;nC&}bO&=T-{r5hGlH)R_;gC3u~*)o8;FHCR9#f< zi<26DULZzdS~9#Z+Sk`RethI=Zwtz1d4N3u`{>vlh!lBG<%=x7K*dmODuxwj{*?T>5Boi1-0c(V<=XcR;k`5Mi@JmU@MAf3@r_e#4mdF@mvl6|P!#$D1#>yj`dt0aFeK~s~=HUJ1Jh1gmfipE9 z(4pSM$=&fyfqJ?)@HwKMQ6UdLqnsB!?)wu0u_Vho0lT&Gqv~-QKiTHB@h)DQx!%6Y z&&ipOSqqKqd-zog;gOaaapmezFHV1vJ)E<2OzS_gLaZmYCIqCiIj<=!7 zs=68dnYPdKX0d%@%f_*8*0lL+)2lB&K0jci+^IqPjLA1|kJ>O6cQG)o_rm4=ERXN4 zs(wd1#9_2U?aen`OW82%XL;BO&W3zx6%#Vo1!AC1`7EyP0dv;%bAdT|*cjM9jaNj_BKtk zq4?Rgq2phb@nZa0{tEufGWVuHe69$5rbKTGO3(I;`EHKRPvyR0f6;#w`pnSZ9Mm4M zt+80SbJUAHV(`K2sdci~w6%1H`S(uU)AUyCzcqgbTQr^zht{)0zSSMsVsKTHEe~SZ z%YH)EdU`&z{pv`smdeJvwKcX|>+SzS{ye_tXXjtGx#BbTdu!U#<(W7JDaRNUO(UBRr*ey!t=WW&vD_YxU%~T`7?je|^WO#;9}dq^-JbVM+4GrU&({rmUJ{!By`0lBCq8A%#?XD-Ka+op(;m+oy>p6J zd_K|E-1*kF1hw{CZ4JLQ=fBoI)YkA@Ghb`(&sv|qw+!?%2YPFh#Rf9O_m794efW*g z^qku9e5lQx*3EsO&7I!OefN~Px3{^6bbL3pxrcUhuWEDdw6bkan{&=*V4=8kQ1kLu=*Y;%w9=02Z#5tqkwbAQ?99^1|R*EV-nH}^|z zZqm*DSerY$oBOWJ$)~&=74*4%Yu4No(9gf2$rOHsZyR`K?TEDOLPaFF48vUf!Kc)5OrtjnUnfx3K zxmULJm$v?ETL0?SduPITP3ye_psx?q+a%EBQEbH1I~o7pnoDX+da+hZa6ypig)x3( z_v&?R?)3C>)aWYPNGupEG}WKtA1N%Q4-&v&xn~Z~lnAny7rsiMZ0| zJj=B@GS7~}2^l+oe6nBtyeP2mWr02Xxhi1Gx<->@UcH#FyTyLK^z)~OULTNezdA6k zSlIi3z#jX1{^AoO{KaDrJz`tWm$HLT_H7D|4EWl|MJ9YXdQTVo>?Dx9qDN z;-%Ak$v7)xjV$*e+sM#%1bq$g-<-X2jQ5g2JhkhCq;6OP{f`%?4*m-KwRMCx>Ki5A0{hP02k!i?^@6 zI+qp8J}>y_t+*POePow?^lb~|?02GzZD3Bk@0Gc-nG80Tef0UfsegJ~6Z2~Vb;M?E zPrx2MTiIj}xi1Rrd0C_BzAC_5{#EYq8UIT__PT%!vhcI7_UQ4i53CojdMiHlPpE{YLKgbPMlo{ho`mhaYOF z_{HO|8h`PcJ2SjhuRZVIhu6LJ^x!1{yUJg8h;g<~{kfR6S$lrK&Z7f+FAmtxE_b#0 zHNnOJpK-~Y_KuYw<-XO=vV{F0|K)8z*;fbNS5FLP*`QwO$6t1_&7A&{KR+*A3kv%Z5`*!#*@P<##@4|0h=}X z6$d>X#`Ro~f6sz%34C90N}$aL_TPX=Q|FHi=rG1a>c;>N@6k}{)$P}%`|=Vt7kmyRx?!>=Ebk(%&!WT6SKdV z5;OKs0!=K`klN;FJy)wnDppxK_)b;z>yC29*e>4oX!aZ)uurY%PY;}TcK7vdt?F8A zVS8X6@1HdL*=E07uhdp{&Ifm-oqu`=?G#JTFYT-Y-NBkgjxiPMJ3FRgS#h0Z@1d%J z`WeaFTLXPKl*hWS)vP*J11Y;j-@)zM5!mCswa%6r-Vito=LT$C6O_zp??}_$!O2#0Vlvvx zMrZ7XK$BbVN_0*Ft@f(j{v8nyu#t?Nf%||yeers4LRW0|X3Wp>gHL>~_ef{Ce`m6{ zVnQGJ-a+V`rrSLE=LTXXj^lgPO5UNy&jn@1(#z%oi~c2aQ~F zT3;t6SA6Q(A=hfg+V-Gq`-7aLRiXC=?4qmcl`ec0e`D>Y1KmRHn=6})<&e&*tx3k3 z`KrzGY4yU&t?l__d!DeR&uiIcPj3&M`1o~0py6@e*u}S9ftZ#};(}J^bq>U)Vo-Lj z$sE0PhJ1%It(NepE%J=jWS>uRDxcHpDSzGhD?a11ee{(dLW8D?bY1zd_ zFqTzOZb^PWMUtDfdl#kp#FZ|3UE#O#Hi zVPQ|@?Ex8AOzO@m`S`{;XSH;!G?!Js@*q~47&^aOf~|r0Ehm?Kz0Jxc`^D$B)Z3Wb z<=W-Wsd)Bw$-#VZTWqRl>@=II-d1wP*}#^SobTSR{#hZu<=0B-1ZTXJyjJC)V`D7Mem@(hSb4SOau;V);XS72+$fp+hVrY{Jt2%Hb{wguWRwD-KCUq8_6 z2KuW)t7H6Z`&9m%ub1~r1O1%?efdD2Gtl=K=-^XIye=k30-rM-zfqu(CfAv70G|>MeKcn5t`@lf^S@C}T z*#mvzKz}|ztK9Sd=YhU(pyxunGu6yHf-{5f3MRo9gFgS4=J)dL%bYW7-aU6hAa?HV zKg;j1GvDif?eKf#_6@Y(Lr2cBLFM4Cnd|lbN&6jd&ZgWQ6}VH~$@ZGBJ6G>q>FX{w z26wG~ZR_boAK&^1w4P7q*SFq1j^5Pz%|m~BqaW6KHsXI!>rZRF`^3B$>mSwn$F$yg zHGg*Ni@*5JY4cBL{gYe&r1X8v{Z2e`p4!%*(fVh${`~Zh4YmfFyXTa^v+zF#*6;4X zr>PA&-`#q7d13Iw!N~!(Edg1^AU})kQ7hvfIRoz};_cb{p@1yoUk&IR_sXSxcs>(c z5U7o^OP73(k z@9XWoW`^vZ=Vv>f=VrVnAk!W8(cr8=dtSg!d)4iZz?o9(K4XaQYl4ccXFGn+QhVMO zXlDlR4fy`Spk#Va`0ilLlll{jny(zpWlm$~e+kOYl2`iauKmUPiYff`e@{?)el6pY zW$k;rwfALQer9-(&zO!6cXRfBUr=)E?6J$*_jhYQnQ`g7EMs>ac~=B@e;^RQA8b84 z1fGKNRTSAN1=V&bpjFIG79M`HjK)K)q?`Nno8#?k=+MP6F+s zfc@SE_NDi1(W76L{*?iKc8kM1qqpAK+?URX`(JGx9f-j%2K}B_c6(}X@5_s_-qYs} z^kWA4w9s-yAK%#KE_guZ`#JW`4SPQ~ynFq((0s6O+H;d^XY4;{T63FQza{-+1M)R_SsQp3 z{zxFVs|7G^Pp~i8-Fk6&VQ^_umcp zE`ILS4+LYLmh&w9i|i{qOJ4shB>TrY+5aQs;t+cMwFdeuPtHw*gp7lalQdgcN?I9HxW{oF#{hrJsH`ktZP3HFV5`!Sg#+j;!0 z;koj`;W_fYf&PyFi=Qh$AAipej%bCsC*ys=?$+O#&y}-cgIqh$=Vq+_$2+vY%RZC! z3xY%WTzO*j(*NkzKR$i`Tw!B9SJ?Rf(sPAB{c{Dq+~>-)y-Ph;=<*y^b3Xe_%XdsT zSQC#5Q9R@GWoOpv-aeGimk&n27(AxwW{-RR7lNwQ_hnpls6K1Hp7C>;)7+C!?(F0X zdE@itLzycXPaX7rxLYf|{W}DC8eNlN??*CMa^gM9~quK?;7a(43w=4_f*MNgJhS^>c{6Gp0Yu|($6>>+y34ca{A9WX#PDma9%Y0 zbUh;Y)xb09j}u&HL(HEVco#4FDH&@|2&}tH^sfyr2+DS`dwgK+oPggu1J8^d0UPT4 zRE^-F&mQ{FPY#?H`POFX^&X*>UVG{HoS;{os}J;Y^iR`S=Qbi1?4WC$V>`X$eA!j= zTf(z7U=!HKH!-=g(d>2}_4bLuxbNo7Y2=rjeqY_qwO?FoJj!B2zjx%LpN`V0#?fMW zRlo-0in;sYO~H}D#-O)lb?CBXRmNpY=~#};&Dlq`_Jn}Uildq>o76(BPqU32{LVz} z*Q;qU;A7cmtdWPO@@m}Ix$`}(#_>Hh(2wyY8)nILc1rJ#jF*y6R-M78WL)}oXIys7 zwRyawkIu8WX!N-oG!P4Nxr!{g4XXV{d#>v-KiGTzY{ z_YFry#a#zuI7 zytVnR(60^be_cRV#Z3(P(CTaLYvaKW?|VNHkab0%2A2b^@=8A6oj_9WdCw}sVRv&2fQ8am4@vEnnAFWw0 ze~h0MkVOaIM_exd&EQB*(M%)0x{Ve z>sLGq%<|9(g3ApRatgr)q*McG7=15X;rTJyf}` zc$RE?H2&b($e#~n{UgnvJ7TkY#94lI;Jp82z>ocb`uVZpnN##zhk8b9Z_j6tYtsKz zV4wJ^E9>&|;_frdEurzahwx0#a`!prx4NI7`H!KiF3XPZ?Re_%=`6dxv|E2&N3V7C zvpf1J9sT%@-r3O~-_ef>&1Pq@Z2pV<439a!>(zS2;Kzrb?{Vhssdc@xtv`S0)h=3n zi?y+RdO6UGv0g3fi_aJ?8T!Wzy=Rzt=S;sc^vgrPedzb4cV;dMG-swhyZv;=o>5Pe z)HHSV`V^7#qn6f!8fQ3t2XY2?2E&%=9G%W>&)d(F=Ur&t`LIs;>khf6p~bCex{m~6 z*W0k!UUy8tSDx*ogT1rle?itXeDm%huVk~oo&n}tThz`*ysb_2s~>(mKZ$!`diP(3 z(|9bTmoK_<9ZdhOL^;I6?gIf{_^GUyFKht3WYm3Hyw+M@(1!zdsCl`dcWj^fy(~C8 zczN)O2<69%f^!B~UkdC$7~BzD8k`$g!?!$)&6O==KPOlWir*UhYRwtd?hMG@6_CgG z+XA&phZxa;zAGqRc8~GAYJ_J!bM*Nh)H!zk*uf@wt2nG?d?ZlEblx4%&u(`N`!r+z zI?LkwlE683#?=h|HwNl}EOwH`=90CLu|^ghWSJwU*4~z}#>VoSUeBGM3CeDM$alr5 zbk!buHSZ)(osN$2vX5->V3+&nwlk0Ua6`rw3%=C3E?$0Ct?{wtQ7`)fegNC(DSP#N zmV*O9R8C|2qSU_p@JB5cU-{S4d}?Vnw6t8cw79jjXF*G|vF?JJSHtwEWA)R{lW$(! z*r#vTtKRf$ff~FZpl2meGh$kC5f5_6#Yc84Pdr*5*hW_CXW84v#+=xY-^#O3ZrVBW z)pI*1PV%!F^tDX}es#b;{&;TU=L6sN2Y6nd+>&e0&BNT=(u<9K_FNwD$sAqc!S3~e zrbi8bQ^3}xzorLGH%Ft%nmsq<5|I&9crOu z+?es0j7(2uJUhL(lP536djk2nBiJ3(d$jx+e^qcz@Uy`r_}hTKcJ1dvPXcRre?G7u zUk~2JL#yRem>GBdg~ho4YQ2a-caY`vdWI=bhis*N0Y5*0m>xzW&&7 zx=%gIL%kChuR3~1_qpJ&@=lGnbp2syHWd9Wq3d%6TfTC52VZP>?#&#XwdXTB+TY#Z zuD_zAUliIoXnlT8=F09YopIwp8$TkbyF>3x={;N9Jy#EMopI})qb)x_(S>=|+Z=fw z+k0*B3xVhIr^ZpWdoZZl&2U=d%jx-eQ}EQ_{9*i*^n5Zu3B=0y=>gx24+ZjMOds2g z)t&qplg}QxK`#YpF+o3epvwm5&U)G5S&J@PjG^qQdMcaPW4-L!KG0>GvuC~RTN!9` z?74cN#S!g3u_h1b%LZCr(N_+%e4-ye(B3!DR}Aze1Fas(yL6xr4z$l_`1cO9IH30o zbiMcO9%ym1E>7gJ3oVXlcB91^y%eD30WB}+T>~u+=p6$sZfJJnH;?8Qdgnlk1DYJ` zRj<1Ty6TZ1*4?N0`ROh;-WOPtBeg6>nmuO)c=4P$;DzbcD%vwaZ5$5N#A+ZW>Ol3*IUFysJ?HQN-l^bi~ zQnKu^zm=y>=m+a$RDUpIa$9-5e!T3cn9-?`{GnpYn+pW)O$@zBJ8Og`JM zv1Mn#A2lOhc=iP5o)laWsQ23f&3>`ewj%TTV_S~PUJFeRy;>_*{>oOmtDeo3&3xU8 z&F&=aL}brnyE{^AW1_aob~zGX_f*|gd|3`E&%LjehbM;T7X!~&`OxG|?#IsOO_}fY zvW0D>n@;pfAg=cZnp#{4?hNcX6liQw*V+Tey6N{H^r$hulq@l(hrj%$N6mm*R{Prn zYtZUo3;pxRto`~6g7ccbbo8>t@|Obs%!=RTS>qQ!$mYjp@mmj%JO0*zH{J0#ZOfQE z?`3qh{yDE=Uh!QU#?-{k9=F$7p`*`%7|eQ(ktMfe*WETN zm*mcplclMgs*~NJ$(a=w{O*pI2W&Qe@i4wIJ$vMl?S}($SBKs@Tda>gFYvx4Aagko zKe438Sl+;1=SeK-Gp82YIQM6R4bF(Yb#~ZdPdit!G`A4+`b$r*zwD|!kLj;7Luc7g zbJdGmt+lpf`eDxsF_EV|0Xz2w`vUWt7`ngE#$+0c!Pq&YcPxH#XivqDEVgR)ki`yj zVo&k#%;VRMmJ~P zcq~3*z-BVUqVlUgG&0McbEY%@aK7y!w?E%v$#1QXvw7gh{(yYn|FdHfXyTwAOK;sb zV|vVKy&m#fUE4!X0&Pq_TeNSEE#f;tq~Sd)Xya<0k533H##anuddK3-PH69|@=shB z0`(!LD}mah!)GF`_0O7|RbAm*49Fv6IjFO*zSuP8^U+~`mVfOzyE43do#o$F&KcXZ zjm{ZA@+mTHVVD7tJX^Jq}E z^Mj3N2X_QHA`jKtW-;`xQv07fjKz>Y?B@>~DyHW7XP&J!Z%^;%{h8D3-xlDhdSNer z!Fu_IhwbV>d*E0%J!fRB52*8cU1;-KFI$dh$)=aAl4HD?tg?Sscw0N$7$40V`}>-$ z7}qD%t35W=+U|_q z_hj>JAt-(1m%dAf@t8ik$``q(ODmt~teT*w=Ea(?^qw7T7TFkqu*U zZ{u)9_RorYpW}-8a`y1qnW{P#Gcl3JvZtO;@}c3cIp?5awP-O-4#};1mP}24>&|A= zW- zwS4xs@+P6R+UIlQy9Qd!HMZEJsqOMh&j)_BW8WFk|C)f@g`nbVe(db9)!NwE;cI&y zR|a~LUSmU@6EvM{AJcOppLy>mG);YxOTIIrJ#eg>uCd?q1P`C<{$Sf;(0|WV_TdL{ z_6}_<4t!Qe>Sr|&V=|WmylP!DhgTfhyUKjoQ1h8Oo|DqgZXnb5JH}&qpr0+heslEK z8RIJ-%(uDuaPhzYp6f#$hdK*lRJx7fL~6jku^PzqbpCYL0R3Y%K>vrL22RBP(@_Ik ziNjb8wCB(n+w2_9df#+6v8DC#MDDB2Y}~hjjqdEq{Yu6gJ?E|At>?Hg-_>o+otLrZ zIaG7*Z^aL~oL|ps@>YX-Zk5e^(po?0!0$O-d}n9u9)&#t z|MAo_p#0;nM$bI&GkDqPd8@hS$@H8di_LnVL+;$+%K^Sgps|UKvto;fp8ma|)g#Yj zvi(q?8Mn_2KGUV1>#j7Xoo+wqq>G;Y!+7ku$mWWd_=%aE-WO;W9qW$2E2vrLk^kbu zU(aWIYTjDKgzS0v#EEQn8!rTH%q|XnAm9_!zn#MV!uE{S(aym6S_|Z;YN6KX*l3L| z`>G~;Te5UKX1g+`tF^UVuh{=ZKG*xsM-K3dnHtpO==Ial!{5ExVC{~8&u#tH+KV<= zTisx7U$Z86^oZkP;Jk{N{cOG`czU2Vd^al3V$241$+z?GT#_Z<_FBi!-{pXOF(t>I z8oO6&Y){3VOu4d7HrvQ=WvZ{*J0@R#=qfq$?6-#<_RQkP!yc{dsk*x~b8@SW#iy^0 zFV38ra$jn4C`M2*dq&3g(!U-|0*y?2t;v}+Y(hoav0NH_Uy}8Yv-1aO+Cy; zezUP^5zW?(Y&=mP79*Dr>V*&TQ$F!U-00T7E)X|kcjrpLw>G}k#NN*mRX*(Dk2OBk zd2lxG4Sa97kv#j_bL4z)4<>=OClDj=6Tci>6R>L%XtxCy2L}Q+!Ly=M&$hZJGMt`u zb9`en*=Gg)IpAZ($=Dw9oag0%W@nA-oV9l+8_5@Qdt18n(XHKgtUInpOvqG&bkv>4 z?gs+RXG;6qy=eQK@v?1fue!j?FKF$jv)1bVDtkN!cLn5Y>jC-Z_*s7O7wogX65w^O zhza>E?^zaYtorSjPHzlm@tSwW?PW{-9Mj=pjvU|d zS-&A5+gf{1%enYhtr)*0u-BZL^Srf3ezpg60a}jm(P2-Wi!pufCN@_;CX+5GU8MuB zJLtaz?vyJ6ZD(*^VC`3ee$9DO7ZoSAR-D9E-q`)LVa#s#p*Ynug3T2tF|2XL$z0_? zT=>VP>U&?Bt zikl{`=E_!me;&@x+=uEsoNBvc`ZP}!7d4|EoO3x}8^&UANAShL%Ys)2npp3jj?Os4 zzuVB#KOCAYHsc}h1H~WKHaoFs%H7I5PW6)I6r-BQ?0!=YwiJi ztd~r&xGFNmy^ZBd!jBhNhyflk?d9Nk*C3~4sPoce{p!Ct z=D*n6?;fmmHoqb3>5k8_?I(vl;$~0XjmEW??7s>E!&{AgAT|K*#gQ{JRO+`Y<^M zGFN-7-891UDIL#SMtHt1bK-Qclm9)#eCr3l=+r-M=&u@j_qtfPoBW=<`YHRS^%Z$~ zd&Q(=*rTqt4}1E1~rpZF8`i|IXornhcj2T zZVu%CTL<2ij9Wj>$$X}!vUj8}{;$e>d*9%>Xy9%4?-}ME(d@l9b9Gjq(ahg9$RrCt zp7ws?OWAH6U2=-g98{fOJkXa6z26KV|5T4*jPN{rb?~HS~86{cDE)wL|}DL;vYR|CvMohM|Ac(0|U* zzh&q@cj!Mqy_krDChlUP?lkwQy3@=#V{iYZokE zVpuOb>X}!z)bq6L**Wl+P5TDA?5ew`Y!grRlzksR(B{}9CdT53_MAdrIM8)|Jjbom zWBuZRW*6Es*g8MZ&L5iJXy0L>*@Y$-eeOWB1ATCy*@?b#pxK3HhyCJ;W+z(Q(fmL! z1!!Yf9_S|w^vXa#ZlJdh^zMOnAJ|{_fw-gjNuK!|hOs@?_-swg(R@bB3HqFYmNWFW zK<%q*&Azh&{CJGPnLaX%YoEB^7^nkw$cu9$zN>*e7>g^KziRIOK$E|71N+|?&~bL4 zZhjgR)0jn;ua@iCq!mdnGQvQd1?MsmtV^~FZ(6|=>RKayg0eeBgf zTw=F2*rFaQk75ibQ)~8bRBKs2UT66JF=~yC8`T;cKa{n0s$+IKYwbj0x0ZOS`?l8F zJ7as+=Djm!-M{BV2HRTSPvjon%vSF&t*wVcdseIl?nw7nZ{vFAJlk#!@M;en>!$Z8 zdG&1ILtlGh$G_ILkkfPOy-K6sJ?ZS$v)F4A zo;E+8A>|YMH1?M+&yey-E-UWl$~Q7j);I5i+NshvkB@3ZYvbuYEFbOks59hNiK zJ|{g#Yrhz&8@czH>DL3Fi@alK>SES;R39a$w?loiS?#FPzSi&0oF-p#W54$n<6S{L z>mSHi^ErX8@@XYwwmT>FK4>p_{8FH*ZS`sT~j?BXW8!C3jvtlPs@>X?pLB{-+?>Y}Y-)Q8SYyA@+{8a;TC4TBl ze8@A0?%$Ek+s}tKZ}w@Gw@WjYx3aDJgPGeN^f@e>jPwd?r>OM186J*^G(4!{UL6>;Y z!9Qm}ZQ{m=$8$8qIu|e)D|MZnT`mN}eKaKyd z3ed){7{+z})tk7;wYbpj{5!|1f%)RKhSwV2I$QWFPWIIJ-i-N7#+w8B#o_Wmt``F` z@%O#h9}Jd)ZNaQK*lWFXp`Dr1=b1zgSZjMaT3h51Pkj&B_6IY+6wuY?p=7epc&u;V z$M9(7kLRhHan{cbkY;2*2cD*1Lsx(S!f`KqKSO zbad=&u}yp6ST~Iu8{|!FRswS9r;mR2sE1i`u6S23H)6XKu*ZIA?Z9ho9=)}{^xG@e zv+~sH?sYyf`+g(X6R7FRg|Rruh1eP26qNn)B9`JJzTzSm;^G|1$#P)sEde=Xi#Pk# z2U#1%7ayOhw)rV1+k5SZuF zK|M-iq_P2hrN8W!kxF(=y5@@#tV>R%#nJ=He zVi;FF(8GUv)dTtJK|EK7zIfS(mwobz-&if%W6U1=YQC+ZYcp>jpXZG!d1R1R=S#dQ zj&xgN+rgmL{U&t7oq2wr4qxdfyRCCRvcI)mEVQlK{;cfTs_kMek8ER?ID%Rf zW4U5u(UsqRA6w<~;(!f&5_kK_xjdjljgiI2wznn*O97rqpve{4{eE-ySKsePw>C^d zYbDR!{GNgCYXKi$>bp?2K%Tl+|Kde&#fvY6>oR7)W{-HOy~RLWs`fIR>R_W*I;uA8 zTMkNw@x1{VuL;Om2-b$N`LTMQ=d-0;vY##V%31j{$yl3A|Nn4*OqD;aZu51vjmx*O z_=zLPJ-y|(IKw2+Ce!~P(|1nB<@Z?`kLjK_cj8;Vwz)GmD|ci1#98}L`O0rO7w0R7 zG2OH7XZ~0dXEnAG$oqYPR`x$|jGVrgc{gkCZFi%1)qLF*ZQST^Ux?j2{OV^h;7`?b z8(;Uyfq<{@qxpGWxv#p>Zx7rxI|FCWIy$dwyAD5m;65)oP`ueKgHj5n(->*|3|?h$cP2jZmmDj#UI$Bufo*XIFoY~RJ`Hz%fK@zGxL zpy)cMc-4@)UK_@8UcQJyJAbs{so3M!$QGvqf&B}?_YSq!>gGpFvq5an2}-8@8h@S^ zls(rB<5L~m_FPxq#YGO-<;=8kp2g3X#o)Z)f}yXN%P|yPIS`9BuH~!xz9UEoH~c%c zHj4khJ;C_P9l7E!2F9xaThV%u?;U}d@!3A>eB3Cfex|Mbtaoj)mIJXp9FS8w$+ITD zAdZ!fR)40a`{j-;bdXnchR1y}Cf_>UlR&G_v-a?NEts`Ve$^~q^!}m$!^B?Q@Iz0A zd&SwTJ@_?o9*ar&Jrr>GxX^PVF_A;Q@|#^pn{nAIrW$+YTe~T+myMN6pPMRn z>ZJJbZN^WI_cr_aRo^YL%^X=T9>(qgv2};ib2xCPt_Brz@sR^@F@8%xhR==Ok?B|* zdS@2h_WYEGrGWk97R>J$=IIw7viA*R_L*lNyV$38*+*`x-#op2KTCh@=bJmqUUv0; zYkO-iKJWCu74&~DO{TTq9$8br>Z5Xmw{mneWA~OA_^#Ag4EQ7lo=IXrx0s8Ad{=J7 zs>W@e#I<5R=C|0A+4i&irbDYd8MBceY?OaC(l?eT_R`h&Tgj7iLPp!qvKOCR{7x_{ zPro~|CQllFDwgV`a;JArw*{Jfnv<&**M*ix&D}u8-aw7xm-F?Y@?+fZac*mmTxyl) zHs@k`I_#xSzAGj-Wz28-_*8e5F`w=TK0kO_@ajO5-~H3kvG-AX(fIwnwe9*3gjP>t zf`|O?%FpMEP0RPMGsj=&;y^$a-k<*O4?V=znlpb@_q%Q{4xQT z-U!b*`Mt8zO~0xZZVT;rFhwS=P=*;Wd2J#ncvmX|EZ(j)6stwnm*^D)%S?u zci8IeyVu2Bo$Vfe$IKq{de7O~k7qgi*=OzIp;wzN&(T3g<$K%kyB5V0_A`FJ`+c~- z@96E_@1;Gfqd&Ey9|+Cg#|CV>JScr?Y{EFfCu^utZ(fwJOL*v~Ylss!!4Zp`$>wB7Y@&3}Ri?_4U){eEs{Eio! z+Icd+HS_MEwx-O#C-d$jc8FDL$JzOvsiL!V#;wEeTj70NQ0LOW)p~wt^N(-le{%RY zR$CdjcQRi$$gH~f^x@xZl`Hb}6$d)aT^W?_mks=-S6r^koVx|@RSoaXftRgi6aIS| zzuNoeg7CX*iZ{bE?i+Y(&i=0*=Ga+weK2!X3-0oo|F4-RQ^Su(uGm^-Y^=pRSvlac6 zp?})Y^WXer=$|q4hll>gp?~Jk-!k;i8T#i9{U;9nCk_3rL;s?o_fAXCZA0(bgT8&} zUorG+L;uR5_pHKq=g_}u=wChb_YD2(hW_X9~N-b%%hTnPA*h!Z=DbN2=b>-4kh zEg5en&$B|aS6t}Q(?jk;(8@JWuGadwE%aJI-e^qcz@cY3e_}k#TV1JepE>GuU0^jMZv*fdmvW#2bwV% z_)EsZK;w6B)%`)wYlgL3(yPU7!RfU5iIM-2X0v#oZkwMJ9ajeOrxxTv&8VXqyAOUY zP!ILY?DN&jk!x~lFL`Rp+*ah24ZS_zzePE%J@%ezdk&q1J@(FPPgoyzmgVhmAf~H< z^XIwh9&*mizd4XwcaHnsnsJ>|u|bpLE+GeQ4?Zzq8y;{E(ot&}PWRS1J~#A6=XjRA z@;u94YxCOs3E`b(uQiRVleJeZ_x6g7cjb9)eO`EH*=kKY6}CEaW40b0-OL!fitG2E8ck6SpKWcI|6a)?P7ax zkNw))g8uGBlOd+d!+$;I<2w^Gebuh~i>Vr< zv-Xl-Ix0@q`xGObq})u8$mPyU=2X!ix`%DRSDC+gg@>5qbI0(qYVnmW59cynMc zooIFyT{c>S!@+t$|LOqax`)l}2-qyvwO=g2UixkgtjqJ2f&7tU%{_E(!0!JVl{ne-^d}?_%%VM?g`3vyft6Fn%)sq94fZ-90=5n=Feo=L&ka_R)yM6Pwn5V=H$UXGTU0K zePZ!N!Tw-5sNC(!*q&a`%QELVi|=qC26D+Jw0Si9;WYss^HnFlhY|-lY3rn7C7#A5 z)41f4EiUHBFZ-=81?0N3&l|>Kr(SChzE=d3Kx4x#!JdHL@>gEKUMM~LGZrUvZEX9! z>X1%8JIDCRYv=4SCq5Ndb%eKKRcHLYnX9_ZaB73Tjd{hZV#T*vIdJCa2ld?M!S{gX z$q{FodgkLJOMcuHa#hbt`^(1uTxIEDHqs+E*IP*A6CGmm(m-RwUBPPu zKHMB==IN?DRz2m9u%@3C+h>D)_^Wn2!`t;%&gW#!Gk^^(Pw8e~)!zFuuG*7>-MwroSwC(Mc8M-4wKQ@THxpH*sodRJ(B+%vW3n=@B>R)%?gzHQ+3T~+ZO z9p>CyHFxze=lNW73&WiEl$!gcb*mOId>O+YwXaM-_@%#^Tk)axR3F(*Sr|%Yd^oymks^W(2K8mHtQch^zJ6~)kA;H z4Em|VeD&82^fQLO9+|szWbQG|+}`Zl7xZ#ooH_UNS|HZT!Ak;mxDU<`=p;*f zThPz3&-s!A?T>~#%vhb&{I7R++b?$XPjvJFgFtXhBV zVe^sTqXr)5QM2#7W?#*n+su{yISvmy`+wfif6&qVWxu;xWA~p0?7ns|fc`rgUG5Rj zW#{LGfgETxSFy%-IB-YY5O{8q9Z}Qo8RYX|urrVw4L`XD0(`*cbkp-|ogA@cv$KU? z&AO?XtX8zvp2|XUn{{Nbw_V%rZU z-h2l2_{zZDiJk-++r-FosN%%$(t~$run?5Z*2))ad>h-(uX<+SQN!lMpmd4tu7C|> zvggcTf1u@&IQ?BVbM3mC6sxBNWV7j$19j|fIU3MWJPR4G1ZDSX#`ct+_eBr8ZVt+Z z;>Bl7UimwwpKh`9PW>(B;iJ2?i5+ZO58l|VIpZIF z=0EU}&5Be`ac({mTI#RtMS{_+TJMJ};|Hciwv7yz4zT?UlQ4 z3KoN`nAEsrldG);^jGZ35Yxkfn8`hmt3Ju0ua!fWJ@Wjt zKps{C``9`OG&Gy(5XaJOeiCS9M?LqvW8me3R{Af_*#5hN#h}g~U*x#_w^y@|&-StD zO+n3NczjHc{f`K9tv@BSIPVX%{3^}#cc-pDMm}uKzh6c^Ui$iXsrO`^EREl4RlQvo zh^xkTW4@G}9~*R%Eide>cxQOLzWX^c4g_q0ugT}(bkiJ=Ek0iw*>cTom7@ z4Ys4T7lkHYKI`mQTL>11wRZnsMJ8T6Y-~xf0niL)0eO2{-paZ;I~85!G3bR zt2wJH0eLlFGW|PVWSTEq$^Ev>quF{za7S=+pjE8OHhKBX&W-~e{m}z0{_JO$XAQmN zq1lU8GiY`n3beA3PCRw5RzCZA`N3B*?Uz43Y1ZZX+Tbq(_rYVLbZ`27LDjW)`!iz^ zUVAPN#O_JKYVf?k-Fipx`rw}j|2p`$!4CvK9{gh9Tgh zXnEwNc;w3S$=nTr9F^?9&$!(e^7y`z{r`46vt*Y{m+e;SfMHwVKXZ%xXKj(+pTBHo zk2t+Bs58rVV>ww4?hIZN)VW$4#t}Vj{n_;nurqjE;QUU4n}g>Eb%sAP<9mZI489`x z+Mt))+fny**^w>N+_$#kVb^9nXU)O0Fb9w4{ARk`Et~PE>CJe~?RcCm_pLbTD__Qw zU@;(*ADZ)Gtv!=!quuBH917g$_VP~~%Z0daW;1=8@vvbt9(HZU~=O5n(x#w!V|8s$N zWxf4eS2mNi8nn+H;~N9_UA>pMXWd(P^#%H3)*1g-~DrcbfJ6i%#E{onn3UoOpew=gyA4y`yhE zO?F({>G5~pwE5lH(H}R%j=ia`eSv49)_$J6BJ|zCcLaYN>snZL9ge&or$czTcdsx9)|N@c4d1EPQtMxr{#Fhw;UCXWtcD=%Irh^x(6%{e0|m zTf6T|vahB8w~oHPqi^o$PwMEGb+mYEt3mHO|2Fd9oj8y0uZxb2d>12m=zV`~XX__- zv=1F^Y(A=^FYM^cI(koNZ8aG4eIx(p_5EOUY~;JOG2b8A*?MV5|7bS0zW;Pb|Cf&b z?T&t5Xl*0kXZb&`?;nT`YUmiN`M5Od`!961{(47$en-ExqrbYNzpVY z>-+aa2Q{;NSLFAY?J`h@)*Z0={d40boI;ffDdwpNn-*u1bY<+A;|9CFR_Pqam zN58wHf4`&OA6nar@8$ozzW+^hY~*`=58C_w%bl&i)zJ@h^p|(^*LL(bcl39L)(!{f z2V&rTr+v=zbtBYsa7Xym?t$P5!PSAh@Y{2qEeq-C^1UWqbQ;(5zNaTyTMWomAFaHb z24714CwBC09sSCVz9+Oc_Bn`6TaCdb+2ehMUpEEM3j7%#oB1sUejc%S#av*{(k-w8ppgo#HW}=Y`nxyc?Y>@liWs?0xs_*f93Ko2CDsT^rSWzvc|c ze>=~2F3bBnf|mZ8&>Pt;7iD*br^GhjKbL*2E&n|8E&aNV{_M~j*(#T(!`7w9Wp8WS zt29T!CXUnrY+UK{{_T`S=-_h!KBVU}?@&)fXGiu%1xf`tc zS?{qkVxKcTYt7Gp&ssZwgEc?bG;5!q?VPptF&nHsa)Y&hw!zxRZm@R225auNF*_5o z>2pNp46}%$&tl&$6cLaW( zL8@wxcckqY7Uj}~{_#Qz1{I0`Fus^suczWPDyA~d`mEp9NT?a!g2kqx{erogZ zcxJil@akK6beX$4@J!<4*@1SV`|4TgdF$RHM_+p7hcA3^H_&Z;C9qa=WzS;fw0Y$& zgtugzO1bLhbjTI&(;@eqEy~>}-`<^P)k#}}JHsdb8hP?5@AJ&77dpz0suy#UKpi+A zC4VD+c|R1?dsgjfZLKrKMshbgQ*3B?Hu4QGJ^I#%dY^o9=GmvU=WWb3b2GN6Nx|091U zw=;d|-Ds|2T<->AeIjz^)%T&~iz~dG0cb5^=a{_3z!&e_4G!N&%-1-+f^JH~R> zpBdZ}d|UAQ!M-SdUGV*ZUqZPt#r3(tR|ek}yfgSmm6&|{r@rBJbTD1 z+ddFu*`_}coQ!SuP6AEb*rpv0$`^OGvG1)e2v!3ARvhr6%OAeLg+pKTy#1rHk6kYq zWTczwqJs?gaoNz?$wp9{li;kOPdD|=n%Z@*sa>tz|B>ov%4X^>f8=n?&l`vN8`8T& z_|0EA^nH;r$g%iu5852tHs`ryadWqmsfW#EdNxb~`}G>Ri$U3VGIH543A9#jy$ksn+|3}5vv}Cp z+viza&q>d-s-t?>WK)fgWc>UH@p)le&_4UnWk3vuds`CDhJ`gzY- zor#E;+E!<*^7r$Z-wN2*@}G=tWK9B1+{(6-J^%HYpyaA&cFvNkey$332gO_Qc`$P) z0>0UIGVyVLPXeutPuceJ%mZEet)jK9&Y=6p8Bk~XdCmjm<Ava`I z%-N!@d}q6oek}iTdsi?C_^#LFklpHVF{tl3PQ<@#pXvKY(%Rt|D_-L3xeOJLNyg&j zuBkJe;ls{jyQj|k_V83*sxKX6)1{UQbzUc#a~}15-pJ9)wyo4+dp6FB413w?@Az0r z-`mJmsJpMX#hup540*iP)$7Lve0){#mB9}MzaRKB`>O&!NA>o=&lLI@zV8f<1P=uH zZ)y)e*_eNpd1~W&#*;u($J+wDb;iCt1l{@*0a0k)>_S< ztbP4=dW+FXX5BAuhtbLx_lRz7b-zUVr&A`T4JnZu3vBvG^ zWoP8#zJRC_daHNS{MA$=w1#=*CgZ0EBnNwWcK=N-k!3va@y)OS8?PU z9DD8^`CaM=_V{vxw@b&q3KU@)Pr3Ts>chAZp*$0E& z1KsOUUm)+3z`7jPp2cCVt<8SV!i+s?k$!ut2Kg-JXlr#Q=-VGS4?mW_o5Fb%8}_tv zTHS26PhI=jQTy%r#$i8M_P24Vc;MX@+&}OdZ^pac@$!p2@>{zmp|!C%mM!i?8tL?% zycm*4PVwm76Mc->`sCPxcYWZge3{#-tV=eK^~A`#C>N^xTFxecc3Z%9xv_R}c*J57 zs2RL$uNdslnB9M!zZXJoD>rbX8pN^}IjU@sf+j9x(y+0=@^`5s>R# zmLK@-W3zn~TlH$cdG{tb!}3NBU#xqs?F+=8OgZkqyWg3)0|6VJ5*!Mi89XoWEPPpT zGzju32KiN7^pLGY-->Y}=kjuxV zclX>FJU=)R+!cIg@cF^N48A@1-r)ZZellq5-C3ynhmO_29qw**R-k>J|HAODTzCFv z{6DZo{%_hM{}*qO|I@d~|FSLe-?&Bo$9MdP6Yq`Ue@VxGL-_k=ox2XaOI;9n<{3XK zSP96NS8JY`de8al4`#eSaHssq@SbFSp8EKufq&lm_`xmmzoX&zOuS^qGtrvg^Bj9# z*8R#Kz~kSi630ov*Lptt^GN4IENWj^kALsseq9bK-u624+XFEdhe_aGM3Ymzbyt@B zEKPYzCVu(RpQv2=wbIR2W4b3pkH*KYdM2>RT=|UOy>aaG|FPc_QbQ|&HL)vrukmN3 zYKV;AX=;{?!-2i-4mzP~uinY(y^I|8xsS*bhwmNai4%F`sA=!k_zGo5yWgHK8}`r2 zX&ZC?+0RC?K^vQ+v&}WxwMOwgO|7oBj>w(_rAyD&Ue8&X z1M+(x)%&URkNw)1E_1Cubj9stVk!B-HfC~GdrOY>%8k031XW+^QH{-tOP>RB>?zsv+K8{>ZtTpr_t29QQ_PbUI^gul~_(-`gQ>_VEqh4TC-8mX2Nqn!SDB z$}XAe^wEP%<5nga6}x(tkjekH@BKozy6kQJVEcQ9_XfP;N{_mzc&aaTES?tyTE&T- z^y~ZQQ(Hf+PQ3N5VyyM?nN<%JEAe>4V7IYmPsOO>z(2C9Z|yC+H;NBGuOIXn?+x|^ zas&J_uV;tn#P)zbbM&>(CTFPD)aWE|F7S%69_{Y1KBli^E@!=T)IPe|!+&$eWfPi> zrJpU6p!Cy+haL1=Fa2j_3?=te`%0Haf7#dSC|~sDKVQ-I)}GB`$~Uc*vr!!JmF$y= z;B-t!{WxtGPz9kV~6=a+`N+IX`)_TsUZZ}sPD z_R_r?s4sVDy`$^Lbld+$gKlF!9uCHyg^$lX9end=*A-)NhI#JB)^~n5fBeutd$5D; zCA;p`{&_Gar;Q64mk#pORVxo&F{<3qW8C`C`qam+wVkd%818j@#E|^TWV^9B#8uL$_@cOsr$urhA%X8V<#z(y0JjjuEZS0xX+E}($zfnxc_wUZJ(^#Wl z{VWe-ddnug+I3Gjt2+Ym!oN4z7g!hDI$ITIHnP2~^@E|s%YOfk1v`vAcks#eBp}ms zh%bKi|m9IaaN+*3d8o_b!Au@JO(^PbSp z39Nly;C;fg1#L_ZopivJLHXt!Roxk@CAv4_-wMx%yG?#(t>Pqq8~NSFsU6P~k5j>4 zH6Z^Wx1MdrtARS>k2}a*J@@p^=~BQ~HK`x7TkZLMOlMj>l+H6VhGTVi-tjX?-|K_> zn_exxICy2S7N}2gwf}IS2HETEcz0YL#`W&A5?Vuhr@SIK6zmGvG$yCL&n_HzN=GZ# z{qpe<(93RhidE^#@L~2kqt@}0<>yh&wRV=Q;w4K?db{f$D|u&yM{MNf?17&Tbw3mz zIi>HqjPc9oX7by8VSkvOJ}+`ZZ~4F{`+Hw!`BwMhW-=y`Su*CSwbz9I-k|!bwU=k^ zRMgu0BZrTb|30St+Dffm76DajCA;dw{8no1^2n|)j3hPR&++oYXM+fSn&FMLz z)k}Y`{m)u!?YR+`^}zF29NYuWl2~|lduBSvo)zG^?fV(A^lnnmZTlvH_L5*vK%Qr* zx_@Kf-GEHb1$(avRuXtJoN3Q@y0y0j?HMt*nVo#0^MZh_bg*^IHa7IO*>Apl;-mYJ zo!dJ*$=7;2!#4GoET8T9#JBS0tc<~W#e}S?QS;t+YA=7tWYhD4BZ0rKN}TQsb_RYH zUqepGcQ7~P&ZHm?QpSz!B)K+fghXi#fq7rN)WG;{LO)-{`IzRpLcrZH{pA=l3k ziS1hhHEQpp0zSMTxHZr`)9Za%j)AW=9_z0d)~{{&ZpfHz>{SQiq?b2wEML{f&Okg` zd#(&^zZ}iGA3q1XzBo{qhX>lcI5~6X<$+G0p?1cgyVGA0 z@DJR9*9J?0z4qaM1t)O?P$PeHj3qupziSpGk!v_E6^SY{2a8Lv9G;@`L;a} zs=^YtHj-Z?G@mx4iP*-QrB}b$g%&`g3=E<~01)_2lc>tUq_?>-kaZA{hpzpvP* z)qVBMj28kj#ms%C*W7XYf{K+~{7Q6?;hc*LTpoyX^~Og7K5SM`8?DnPuO+8)Prv7a z{9AXY%SlVy4tY4M z%^v5qzZVZ>&b`VX_OM?aRIb@1|Kh4ITFlT@!)guP);OBHiV<3EJ4b4pEOM*1$=ay4 z-Tlh}U3kT6-hS*Xh!vYWXZHu}d1vaeWqzTj^t5eH=o4&Kn%P){p~?pk9FV5 zncT3GKk8Ade6;!(GT-_m?rM8iu-V$)@azl33*3M0zgI&K*<}Ns)qsC^$p@b!E)Upw zIN%3=`JlD-@=Xk`h%hx&ackqSBlGwcgOW*SFQ?Y#(f7DH^|9^o;T6Y?Y~$Nz@pDeZ zY%G4BL+n>;y&vu`?ap9gkVZzu?g?}HLau#s#E!~c>Go`KKIFV(gv5T}#LQK&*Z<&(WG!!!_^sZEM~;N6r6OGw)rh=D)w0r=#Zm zEN;n>>ze<@%-82wd8zrgXa4-q?mcqosNUy{D*|=*$0&K# z&*J_3@QPLIr=MA2A01`$otY~;`ADw5{-?>boXUEl-3=LG+K;n*E+&KWlMXPNuQ z#BWD`*&qhhJ%g^RGH%i8`Rf!i`tKXNYTb8nHLm{a z2Y&SJ-Fo@)FEamSS^tjo_*>n^t&GyIZ|C2az2{}_a5vxbyfAC-t&0M+p;tG5n3`Tm zul`nt-W`ChyTG$4+ozv{ejo+r-f)kQ<4jdgo-?z(nN!2}2KJBXa~Ig}88Nob4l=!) zF9+@={LTUTg#r6C&x_jw>-Jfn1fCJ@7Pd?R&-vE3gm3B_TN3gqA6f2jvg{-4P(V(* z*S+w9;Pr{iM)AdS*CsrbgYuC*^zxAp+MU59Xni1?9U9yC)7mKZcy5_f|6SoN8{Cg& z1K%~W#e{vE#ngKSdx}rpwYG^j+qTEHwe;?4`ovw{<#}bG`&#R3cg$w;)a&hmyOeDD z%ciocji-9D&MtOn;=ms73G9)p!-4&)LtnD^)cZ(g`TE`r#%hIqW3t)ce2{;2Fw5`q zug(O0>X`3js3HDO0``+vHqY{3jy1U_>$ZR_`^h>KTo|B=>&qH{+O>+`k-=|ghCli-f2!`~iXH8JaaZU` z(B_v-?R~+XvAACs{cBmPII-b$p2>)xt0vi@ZRJeLN$X==n?5)6;<1py*qNMFtMc2* zt6Kew4BR(w4%pe>S>m@nP+zq^mQ!oaJRk23$RFdAb26_AaXsCEIsTlpdbGv z;5Rw*+y!bCpELB?0XxxT9SYdn#-*N*-w_8c&zd@P&JZl#Q?08aeB=8-+Sc(VWeQ(gq z8LL0`@!i^v!2b2Xd>iA_`R;JxX{xP#@nI=Anc5QTwSfO(b9ZoiP&GcunEX>wW2NI{ zYfRoZsLWV;*dT)HFtjv(6ES_+(X`#(AJWz&P9)zohWHTOWq z_XO89eD{X-od^3~6z~&X8QdALhmT}S1Z?yfrT@9sKN6@UJmmE{ku_K)JdC{H-ugct_YR_I?1s%CZFwN@~_>Ze6bmm@3ZZg{HJVDKL1sMqsgOz+bNInL>rUU`$Rivo6fUdn;|i-+2GC*K~tAXo_GY2JLwH#xO$ zR-O1acRj=DsrsmXtWKQK*58s}`mV}4JNfZouq#lLHFsae2Z9TmIrrEkxH#Zz&%c~G z`%8v*jGY19_|4aMBz#uWYk{>szmp-(^TaXRr{BZM)84>4dA3jCPVw2MawUg{vbZPx zS%D@7R|o2?{aK|$pc^hwtak9c-ije;@pq$IkWe z&$9C`vo^1tP4zYj=Cxr=24CDWv*etWH8F2}8I$v>88XP8SBCpbZt+io-Y>H1KF0InKn%px z^Qpa;ozp7;NGo!`M!*w7Fh51+>yEK0(O-DCBwVg+k?x4?SW_KV&Fc0 zOW-Vx$z%_ndxDZ#dwbdL^^&bV`aJx0cVD;nKbiD63q7BA7i*J1!%H@s#Zr?8?FE5a z*UY&?+WqzxuRB2u>aKZ7#(M(wE?$)nx+_=i8|!Qzv(=eB9Hn&5Yad_Azt%psuupqi zP_@LTwO~CEXLa=(fn3QwTW<}liH|%zE;tgXqr20qp*IB^<-M&VzLK{RcrNua%{>@A zAz+90K=72nK6&Az=1vw{aWp?xcl@?bZ0J^7rTcKkWUU5O3+Q=lRKxEYp7&pzG5OCA zG;3Kp{yS#kOb1(>S2^9x7PT~wEpl*Ouu%@^EqQhR#Ej1u2JFp`u}nX!$#0$UI)`c$ zFMIfTDA0`U<)1aOK+}8IrfjRdW`s#ru1AQRS?hDk7oZ_$bJsI;y4B6HD z!{*KWSq~4JT3^WPeIZM`Fu-3iEMKl1=E}CQ`m?8e;IqAaaJP)z4bB@~nwlvd=TD65 z{wSHHTRx577I-(mAq1Z)FV;1_(9JG$AP(~2=f>)6tcG?L#ds3P#r1*4e)jAQ_6791 zJG|qwOWerAQ}Uei{XyLw^PF=$+WkR$&e^{fydZdL;GQTS^riD~#{B1t`Xvv&nQeE6 zXPz@v^7O&03t2_I`j5WR&&t^45M%56V z#`K&OhpCh7bA>aVR! zK2%)l8D&oF=vWRkG`=H2y(6i8sJ!q+40jLxym~x;T0MMh_1qU)eXCIo?JU`+^>$p9 zxw3&TWuJ4o5Zn=v$0vEAyJA|r2Q#-TXyb*4yjk($d+Ue2tsf7Deq7M{F$v8M%{k_m zxUtjxxdEB~HT~ z`^c%hvbB{Pa=O?4@=3gR2XfEat?8lsOG8uJmbo_Q=ml z(EF*5{e4d5t2p7Oo6b9es-K!0%TF)2Vq}lC@}b>3%NKR3@nsUo0U7KvmV?TRyQTGy z{pvuh?P>i}2O3-48#l!mHpm4#D;I3k)QP<6-yC=zUl_bJz*Bc=`KBjtWmvbja&8}c z?DKv`mcR3MEqz<#B||>=(%NM2tn;XbmILy{V<|w3CE9p@z=l7HUUK^RAI-cu_UOgA z_I!8N$P$aHDLRY)K*nOI&b~P>kUtXqdEoCjX487$E}*yisu8(#7Rsjb#a!9XrXxXH z_h`0|PbS;Q5Nom1jM?RRW$p!mJx7DuQ#smfZ`nwXXN^3QQ8uE**}CUT)teY?53JEI z2O7SKK^p(qHE+JvEO{FFa#iuUKjWoo@Oxatp;4{!U77K9zt@O09crf#PvtN54cuFt{ z)NDPk*iW}}pxqz1bNL`2VpDduc37jg>|ks0joD+Z&kft`qwD4j+L(|bZfsLaZ0_U6 zcC{_8hXe9fhyK+=KS{62IXOO)+!9@M+BXTb+k%Qc-?XX=eD_Uf&NyRf=+SIfD+>YL zV#;p!sJeN3z~=42B*1fhps`0y*h^3CJCd<`W-`o=@%MAB-E5+#a>b_0hdKJ#OV_1= z7(6Q*&=&_w0UoV*%ASgWv#w6rO*Y&c(Cd85*SUchZdN;+s4z56?ITLRQ-iAmctNsk=MH#aT+~1E5?g*U!whsBp@9lxuLit^5 zyEDh0`rP6k{*0jH$-}ebOke-vV6S*QWPnv7b*PUtN}LIVgS3j{B{2S<~eF z*?}CqGANte_s@-S@=xX@&~6LV$iCq0fSeZw7Y7T0cjR{lD~#gAo;Elrg-WaKUt&Neo znip!V=N+5FqyBncbjyDzw0E124b%!h_&Tdj)o~j`I$D~nF?ns>w)}E7#(!?+E4D3v zFP~gCI|u7SZw#KhI|6x-d}(Ij_47zd3PvOwig{dV8I-^nOD0 z-W?fB!A82rbd*1>t})*}aSq?gpILEib(G#QU4AZYvp9<1Cx!2t^z%GRJm<>3i!x@T z`%nDM9}PUuJRdI)$fV;1(NVEw6I>N61@^ViK;y+>zU01g;E{Ltf&C8#HwQZc_2K^e zy5>E^^GV&cwdwPs=4{go>X@B!el#ds=qX!1br_T9?9pc}Zaqx?(}p#+-4J*eE8Bi( zu&vjvPUW$DWJhZ=nohRTSvIhH%!W2c?g;wt4{i)fmiXE$j_rEM)?3FXf49!45pi>F zCxNynuxD?uFOUNb&piQO#l*h;^Q1Yo#3p_5sm&KgKbp@w0ydLXdejBb1KyME^KTM~ zhdq31ZJV{n?Ip1*qe(2IfCi0gr%?v&qq-$M`mNpRqgAA0CX!M6MZTTcxh@!uYL=uN?u z@6X?-`DYJ3^nHKz&_f@We*pYDga7ci4?XnN`2zlezkBGRCj_q#eknL3zf=3ZV8`D- z^w4vI-_3WauZc{wflmlz<&GeKWi9!HktFB-Wl{UVTW4a zS8GQvr_N1l2igB>IFoP9m@GEX!G;=_4eE*=>YL6sH;)dznGI^c)&F4VCj{z8dm!+f z6&ueGXF$6@xFTSed3K2p8_gM)jch0z-4pD(CU|KA(%-)?%bfhN>9aGILwnrKM?#aI zZrbXc<0of-K<|4KKXYPpASip@kom6(elS=Y)|b=s3BNPDGK|rlacp;o@V|e?;c@0# z8E7)d>|;--SgDy82YC7BzNQOJm%i7<*Y^f53COrGpkp<_D;M(5rm8tPq?1hZ?6h|w z5W}|xo;zY@z5K*id(6Kns66!YfocY9Z4O&#nG_|C5zhB2F8I*jFtZ)oJY_p{=5 zWA@a#*poXSXzEh^X!ZP42Wnk@J{82YQ4T6!=4wIwwVlCUgKQL!>1;qBxtjy@zE8>K z#XztAHw1Ft-T|48Y{SELwS|^UF@w_rKCxG$hh0-9X>55xz}~W@&K`T|CC7QE2mKoY zjZAxcg0hzl*9Y@~R`i=QruT8d>VOXUUt! z{7g`_Z12W~&)o097O&i~z0MPT3xRz)w31uT5i#)p_p}Bh~_y11Hoc(nM z)foDAuEsR}pBEH8{pkC-{M(~Tzb#lFh~4g>e9Q2_dlFm4bxVLp41K?wul%14#Ek#; z$RJO=_Jo0ra=0}RkJAHo$>Gj`{I3k~02|4@F~C!2&V2JQ$8SC}%-L1%$mFTfs@rQb zes@s5RsFLS_y%Ot|EKY7qCL}fN}f$s`aIGvs>IZ2AcwYf;`lHz|P+r*2GsH z<@``Qey5F`!{Pab&>t?3IP^SO8tL7co*!!Axq)-^nt+dd*SCITI=VyT;adVZ*dAz$ zf%UrMoTZe+sAk0bp5Tf={aqc9?ODP;IY!@qFIgPvQ0vCHg3*bjLPOaGH!jjHFJJl8}M^`ps~Bo2%SF?J!GlNlJ&A-%%0*S z!`Cto6{~YXQ?WWBV}33bFZ=Yci~QN3d=x{m5kq-rL*3ES8M`<5=M3U|X&^rr2Nieu zB)@1Xp4JYPgWu|MFcqHu8O9E>&IrVFW6++vx-ZK&IXgGFDNO3hS$22q4eBnL9p=tE zdgl!d{pR?bacg35X3)~HgI+aZoxI``7kq4Pc`_ZzeO!8a*`>M9*+rgSKAsVr9I$I9 zSQqerOYo%NoM1k{gVxwHJ}zp0ylLpT4%ZvIW({LS6`EzSI~j?IIO zY<2U^-Ta|${?=~(E#3TEyZN_ubAL0m&Bb?g^Y85D-_^~(yPJPcGZ!0o#zTSoWj63! zsArBl(%t3W@~k>0K>vn7tGzuLd&VsW?yT#B`9LfB%^ADr+;{Dro#}{XYx=sg$toMj z^sMv_Ri6bO$oOf2cSFtmqJVCVt#8Y-gfDLj=!Et;_gmfkotbN|3w8wG7hE3va-iK8 z%mlXv8l8Ol1(P&7KQicahkGspoz)wAfAS1H6k1!KANqFww#?;1TmcYoGi7;Fh{3_M?2J(bTakMb|~@>a5|7WntvU`@bw&o{Q_ zOUeiSM)S(dZyVN+O)pM21>R%4ThXO9{(u~W` zcE9)28BmLAv-gdCFo^#&UgI5!$l7Y+jSK*5=+;aYaKX+vJ|! zvdKDMj>HyuIwK%=W8mG3e^6(Zf6kGHej#v{(3CH1ZqK~ZhgF3?}W?cT=o3UCiyUI`N z^26Uff&Hao_q^jtZGHPw5oCSus-n2+ZZ^PXrR6hftH`vW&>x$X9{QF*r53M1hqexF}|-2 zoXN8T`^I!?y8^nMucH$YF)Hx8#>?&7`6Z35 zglR3U`=|8a-;N;7{m}B#vpTpcsJI=Sv9>=3$Bgcnm6@Zn$A@s% z%IH1r)a;)dTo&9Oyd`*7@S)(7!BmVnE%5h~{5a1Ks!<$_?D}q zt)EH$Of~Xaf7n=h^y;4l5pg-J|ZJad%5=yP9oz)wXjy6^KLC z@3`~Y^QzmWc%3iy&`&n|_Xg{OvY~wDL#^rS9?kHeb?1ss=jHBZujC{&2hpqTq93Q1 z9G{m;cgbP{QC?!A?~%LDI9ni#b* zzxPqd4C}-*eWbZ~S!9+khsyWo@|^Ik?9jWb#CjnZcV^qVm~{V4g}0UIytny#T;{V4 zP3!--d-F(Q?CZqu=yG1Q%C~Xns`br2c-LmTT4KkZpyjQ1lgd#`BL==+z*p}=d~-iu z5!kyraQ4>^bMGh>3o#lOL-al$)n3udBOUh!#yp4Qg# zrM?~}4!&MOH=c^SyF%Q_X8$#TuW^%IxweOIsaWR6dq*~T#<07!1^<14yzg{=~QRh&VbG1*7juG*Fqi&G(NcNe>8HfZw*}5sWEF)L9MA7Yv^n3xM2L)bg_r5vWH$MUp>$00J7B4Lf~2CoUna! zpa!eH>`e#uW`cf?e05s7c4aKC4+QwwgLiFEyzJy3-Qv%lve`O%^;mw11Njw)$0COG zwDQGNJZGDAcJiTYqxbV++az1WvTUh%%W1vq>YY9DYR6S4<9chrFS)On@V)$br5528lo3$$gb;o{VKDh(ll?AfcQo37N=ywKtgENDwCBACTh;=h zWwgHZzE|Aozc%P|=uD2wUweP73=N%RYz=xDt$sA_{+=dF2cBE}d4YvA`9oXJ#c_M~ zJ#WOi?y8DYmL9P#uHx6yzc6#Y+SBC5GkkNv|3A)ib8mXjY5LejhdY5!*73Oi^qzg{ zad#j#XAko>MkPc1YQ2|H^*<>OY~qaf1ooV~e|q5A#7BDAOtv_&3vJb;J@%EZh&zxA zd)u15Np{GK+?PHzE@$oE9hGYOKnQaVunPS4f z(tkz9>a=*gJKCq4|NQP{l3}m@u38^k?`v(WS7)w05Qw$siF*B)V4N;{m50`jrSj1G zDKEXBkI!1=Zjzt&$JtbTda_&p<-OfkJCz&bvx5zRSk~E?q`&s{YNgd9M|J6#@I~iM!hB*U2q^#_jFRK7nZ$;KT z&t`+mgJS|~&Yv}Wo;xicU&K^vpV9c#5}v(*{K<#;t=;^&&Ag8Zo8>^;8L&%C$hk1! z&#r(C^s6Osj@T*3evbasU?x}>um%51hq1Vs-_Xr3=;mnf7X3xdoNw*kVmE(wH)ng% zXE?H5oLiijdEw-YK`vot0DthHGiKxNfb5F*o^JliZvMhSmtdC=dLr*gqxX zHv}t!4T1P<3^oO90CnT{bL9zNy*I7N*z-Y7eGZgk{_G0qI3bWvIvxtt!pzX88_B|> zrpUcG;5&J(4Pv4mOD~(u@s=OgW~>%9>+Z0kE4j`@D>u`Tt^D(SV6vcWq66*;)bdQA z-4v+N+XKGc5r~a*swa;iH@*@}rdwvgR$M z+2^xHE_wF_=KQUB9~)=#*igu+=c#*YeXu29Gaa5W&f?buuMfT}_@UrE z!3Tri4%oCk(5f$;wO2iwevki?_`GlQdt_8?h;iME^BMEIrJu@Nn?!Ga96jI3#wWjv zLtnbAogc^-v@*=K!;v9>k5+~ne6%v$6U&jIuH1FAfpNv<+>C!L$*$N;XFg8eq_5Faq$$iJB zxF?_1H+J(YGp|}8LyTUY_u5v*b=~~(Za$Ma z8D+z9nXhW*f04ft(#re2ZvK7Ue4(3Pnz^`o|8Vy8=Jbi(3EB5dEB#mGZ=nJ3e^1sbhU%Ga{AFv|;=aB;w0P~6PtzHr$Eydn zqkrb0&z?2HI?Wu^-&G z@2i5>2MgJAR^J+U2L5;i%%}fM(8lln=r$J@_Rw`!v&QCCfxeB6yt0=aaCdaRIryU- z_|3n%Z{NegieKBe&)tR>O8%2;zpR^Y=;r@1mlXYT zf&R>)KWpgE9{MK_z59=C{QA!Dws*s4{_FmD)p-`Lk7iAb)J*yKp{$8%yY{nLs~D=g zqW%7?7o9x6DDzh5JM)cEc6&zX*{6SIK!zH6OK2*OOVu}<@H&6`)kA;s&{tiPYrkT3 zNyhTcZt_3=>-+Y7Prk75{@>iU@2&ZT*N+Fs{La38zmf;QJM#w)@M|v}>>{hqnrAUt z?1qno{(Ju*|7Xre_WzA0d9W`QaNe-4j@$L$7}n40*027<{bz^HimN<5aj=DLA~Ex$wY?j-5*^dAhgGXi_J1;e`Rn|G*vp$U2o-BF=CfW?kF_U0 z@~p-xuVhVxzfcJE!WmT_tbB9^PkSVVuVMHeqYwa ztLER-&F}8!-osn^ugqLbivQBg+q!#7=5*Hn<1=5CIU3DfVqZ_Ld)b&wecf|-ibh{_ zEpNN-K5~DMskuLl-5);@$K4-)oupK*#R9Gj)Pr%=RR5WtE$;DG1?YW_NAD~;TjqG! z#?Ebl^Q#8j(^~`ecvavzOP*)gPew@93>&p|0eR$>t?JHp-5bxycsAf4S^CWZI)Bp) z-8%w%YEUcQ=Va_YBmd-K{Zr}5CzCyVRNI!Yix(a9fmZ7mXWYu>JDvP$ zeIl>yx-4UQJSTo_SZ9}JeKFW>k|xgXSFvUv-^up#bzV=~nb zS$y!Bw)}QadN!Be@~ELVCWmeK#8<5y9qbM~KkIL=co$#;J4-j7Rv)|RLpK#@4+bT( zVnm;uR4ne!n7zeMradxB7r(8sZRfClTY53Fj_w_S7|2ig>A729cYl4x+KKzS1K*<) z|IwL<@cT3V!hj9hy+Km3Z!x`fdL9bIVMCyH*mOp~zp4pq8o$tJ>=qk-)>)DV`l~kC zPnX)Ii;t%SYXfxbvVKRvcR8zdHA{BI1FzWE`E6}uAA9ib3ix(GaBlEZ*`!BI{JjZv zKrZmJeE!OeMM5l=i>o?XF~du@I%Nyp6%Te*4y{AgI{!e-UK?n}>=Zw7a2LCWcLW;y z$+$6?8OD{>-gvxA%?sa-MR zb3yG^4#=!pxHV(BYU9s7_qJAalV~0v8uDHpxIg%1t>Tj5NN;;*&19|Q%d;453)Tnh z)LQQByVT=(qGW=)LN z1awaabnsJOpN*}HBYwJPhTa{`C-LN$F@MNcUu`_elBZn(8fWvTvmpN7yZFI}8-mKo zOETuKSmGsDE%$QqwsPOo$i+wQLeR_Q7hZAh<9TA%#6|qjiIcdr{bJ@7Z{v#ZOvd7L zq;dI~#(ws(|FMY6&o*-ZPmIfZ8~Y#2xcpor_i*FlTx;$-IoH(bW_4%^k zJAw}e|0y^j!CVu(An>=(eAd#$r_Kx6vw`zzygrx;w3d$D=-eH3&T209)-^oF{IOr} z@bW>%lY^f>djFUlv^#<rO$zVb%qkQ(L12$^=(1>o@{SdfOcn4_ej--btqnU*j%7~R|cAMEHC|;Q171k z_?_`{gZIZz{Rf8r-=}w<&ICpC!K~H0g?p1eG7fdWgybL}@XQA4)Vs#jfqQm3;Oo6X zRE^~F#o9H2yRLX!pUA>rw3lT}hOY~-t>oUFar-rs<=k8K+#;L3s{{6G>}usNW%oRW zH1=N{JR1AG|Kr!#P&L3tu}~wPFY>09o!&2B7*vgTM*N2ax^k*6<^#=hp=_+0b3fL& z>al8UT>grt@1UU3t1~YH)i~6f!KX2&}IX+ z(a$!1nNJ7h5C5x1TH5l%*_sN}?AVddn=`*K@L7X@^sxU|Ld$+~d@YQR z=H&cpx99B33xDWy-_}?x*97#k#WheHL#EG z&Vc^&0y<{`d*qWh8?as7qi2KOousjioz~UrIJ@v`?83_~wzI1}Yj`KwCnoBv^rAJN z545ZHcL#m%gU?fA)+;XdpE>NyZOPo6F}@!fe!frs_}TU?Eni*{TK=OWiwv>9VfdLr zd&Mt*=*EFuG17~hp6~j~3%|Dn>X6)L=Wj5u0iS&FPwx0byQ2g%7;P&H6_A^$Z2x#W@U`9r7i-GTdL zc6etxBV#dDzf~uruWe;s^}<(lWR|a0Yhu;fOy@#?o-KIT*~|aitUcE9*+GBVwkBio zT8^Hofy&(^KQ>0*rhs2Sr@YSv?x^3+BK`HX&C@d`tL3{f^Ir?leJaq{sm2Oqt_`%J zqi=oC%2NkG_wR%Nf9Xd@20nK(9c8aEy4!;KoFxYGRB#@&f( z6)hRR7a8l+E z7pMbwSjEMf8eq5Q_a6;*&u6S%6|}XH?a})Zxw`_gb_V9orSA%h!<{)Mt^=G+5 z?cWxh608kcdb;@~?|&8se(>G-_v|cNAIcbS*w$NKNFCNuJ%5*#NNl7J+-kV;KQipmxRSn`=!Ls ze$Brvb7#sN{nIn&W6hs5?DN&yF~J`U?+EIt)_#6iE53Jh^EYSCpSq7)8*a^BJAXkp zKX;HN&TLb===C*MBj$w@hww52IZNF)lS6^}SEJ4@z?k4M}2ImKItI6Biz#aYur9LD_WdCTYOJrBr|Q~g4qj*bgvgOvfDdVAu& zHF#-YpI*G;MQ^?5NXGK|jLbjsO7{5~v!gz{l#gx9i*`D6{Jt{~V{^~dPYyPaeNM1Gs2Y1P zWAR!Mh_U)oOC`VjIU{R)*2L!Gz?%Iw&zTs`NMR5rJpl(QHt8y(VKcwa-uclVaM&pmI%LofUP{`%K=RC1}_zepki*`_pR`*GY0qNBJ)H z>|tNU+uepPVn?l>$vxeD+0EmB^gDY9?N?mXC;P7m*rd4&(bxS$U+G~_jWZnHo%jFk zR%dm0v)|KJJjFxqP7So3fwR2XBrX4a`skVG?sN|M$A;g`x}M)OnHDPfgr_P&uhV5+R*F^!|)`qFf%La5> ztM`=sO9%M*K_^*siG#7T>3Mx&pr$Vf+_$>|_W?ew)y>bPbhA|}+tq-$9f}W~hHqz3 zJd@Tc_v&qZQ1O?yXJJYsXRkpVbzVPZoHiRQ2IA1>Ufiv@3*==(aCIQY;!`z_hW@#r zYERrWI<3j|--Xfp1>No?@m?FWxvsd>8eQyAkH#kkXpHX)*!9uW?LvAy_O$X3op{jo zBO6_cyOwqyI0>KKlRK z%-guru{p^0Q6Eb!sK@sFUz)kPP=^-^dbzW{BDgZBc>TA?qmzFA|3l`UkJG`fz?giz*39{+?u^+w z8?fykJKJWmhNr#D=&d-B!4@^X5Xe)FTe<(#$rYzoCLZrO>@;@XyyFy2`@U1Qi~H6< zoaCi)RQlN>CQ&{5`fa)cb=1}cy<*BQ@fM5H$IsFuH#K(8qtoili{F25{KU)88-n6{ zNyh5~HXe=*d~Wr8W{jRm?^0#wgOQnG`FFWIer^u2yDIh6kYbp-n9BD?Y|ZdzL-^sIRXvTPDOxs_y>(w$ zn-4TH#8_kd+RV3nS-0_{v=|I~VSSvf|7SrMrvu(lp zKuq{mK4y5}JsVwqm3<#u#Pt~gA7%qK4rc&<#jID6R=mD%+C$} zB}&>eu_0@0)jSu;2YIB^8Q&M4il;e+HQ${novn_ev)}4a7yRBBYzp`Zf`tH|d}@5-&*Q?ww#|X|bIH9pYzZnxTk`i@?1?eDupIT8(DBtA-EEn(x#nvJ zIW=E7%)LukBjf9buLqYLYrdaNfAL+J`Ko4qR_3j}8@u@zcJsG&Un73zFjtdh$C(|? zT;{dUw?EAHx!KfyUHQXVYwdV%H~+zIeqT4gK6Cd?>+5-0Yv-#58vfJWf^JPt#Lpgi z(}8z{I#15Oack?Rlh2~9IDc|jb8g$*|9ZZrjz;^<(6sh_Aak~rjDMH8nmR6tRCiY< zc?OaA+55xa&VQzx|48QePaNc|PQP;)KR*3Mfpd!HVOY;#o@|8 z{K%7UHCK8w9LW&ll`-DB_~V}o>a39O42h*NKie3Tt?YT>7#j3w_{MIvF>L_pE;I~qW5>q7c+Nfyfxta7ex7d`p*~#Xz6=bXe(CJ zne&frwSVs*o9)(}6}c8~I`!7o>v4gmUe)DOgH>Tv57P;5`6{Sblc~#cR&as%LWP%aPyb z%<`FS4+hS(JmGm=poxKfwDvTz&k8CYugX|F&}wLnz26rdnc{wJ(8e5{xbd0&WVSJ{ zoK?*6YIv&V+E~*ghWhEDuUM#eajbZ?@ho2|PV&NEyyR~V)(53uyzsM`9yP}9ErEFP z>*~aqoO_2g_VTl>NA;%gB0_zL9B1!U6G%D`Xe z#5(%2Sx)iQIU%R^=!7~a{9XuJKb#G|R;|@uYd?D*2sCxY?waE@mnV5GAJ}nEpth$2 z_3&>ZsBFu0bVm7uAAP~uTo7?>oZ@parI$uoG!WkeCg_+56i9l zL;2O#T3?qH)91y{xj>z62;6tYmvkIB??wOItQBorGvjD4>u6VJUUHnT^#LDz<|eb| zrQaU8&b?eX6VA!zz+V3J>Oo)AsJ~0*bAcLif4S3d44x6tc}w7q-x|83?x}-}%FBtF)8XzsY3S9J`6tlXt zEIH!U%lXn}$ZRh`Z#6=COTe8_X8#rsP3p8VmzsBwrdEXL{C7$`S z@uSa-d>4xqfwmOStHXo05V=nV*~m_FNx4GdLqS())wFQ^v>>XZAc{*t;gCgzK|F4(L2BSJ;4>hrr_#;&0ic;ov=}TkoPr#z1g7rro*}P zc}BdA(Y`zwM@v5)#Zx)6CXcm$V#ac1-Fpuk|2TGgKH;g_7V9?zn*%u%Yj*I5@9s5w zn!k@uN6lZG`4?m^4%WzgU(Pb0*^XA*zP~$AU#l_~19UUNBsy}7Zhi?m=cefBt@=Xfo7>V;O%48+qNS#TE(~gnPlVqi29NA<7}AwmdQ`wIR2Ss^0Q|g|Lg?*$~U{= zvcUavf1r`I5I86931jEh+0ZXVzcTyi7Xx=w@l=l&jWZ@^V(*@)vt9R`-Z`EL>fZJF zfNi@2wz0i*k#TR3NAM%wMP8QmdKYm&kX`n$ksa*nzaBEz#cwt=^s#l4u1m64x}3|> zL+^AjN!Qv5y6}nDBzO1H5)RLqU*9qKO< zZ!vMl%H?u+-g^W*Z*F+X24_`FHwK#mb)v4=ydvOhi?*KJgX)Rhc+@pncq?{&Pu6LH z8k`B})7U{DIpVh*IbR;SnV^?ZzEqvFi%smUck7)Q%eix)?)&{Sn|<}&?|WY3r9orf@v5?zIGM_Ne@=@&63!aKAd*~`T`ooQ_?}Hs~oP4%DTpmAvj;D_; z-(Y*7xjWo(+XA%mU3oYhT6`cz^MTgOp2}LuUM@X3p4ICD@{HF8^cc?t@?)%a+!3?E z?G5)p|7LqtkwNi zwk`F%WcQ>xepdFJ4L++;y6ZVcuQ>9de_pPOgYEm$Y-sr9KAEJeJu~t^j~Ln zd;IM)h7RqFfDZiPzZCzMXMZN>dCP7w*d2(k*sPP!k}B^%oKs||H9A87dD+F&NYqc)32 z&cU5hw9e1kVZPKoCI|Q?<+{zGT-E);K5(ay!L~C4zNmTfjK|$41*Yg(^-1Y%DD7CEn~99XLF$WnXA*&v#a*Sip<_W zwxVg}&kS^}9c)GGjHwKIIS~+E>8dF#JJQvwwJgLUSsOlVjoonMYfqpvR zbKT`+v7_dFzb$(+0b9`FEuL|A!^fL5(!VQ+>+1q-x&AxTz5i?wuR7mH>UT^XeNDcN zNBRF)`7LIk)@~2fk^0co^=z;wU_)Dn-Xq@;xU<&=_}hBNSMtc$>~9Gc1N7?Uv%_4x zCe@8RR^6x>eB|R1`)dQWLk~Nb%D?|pSIySDOoj)}+{TRE8|pv|$OrOg0%yTF(K{o) zzP%=(TP?MXV|zIvAN`IvSwN0w zt*>CpYVBG;J!FNcvf&haAV+pV4K*QPd9V5UwiHNhGxATA4*=yS6l8Fy6$LX zEqA|cLN7NppJXFCKC91L0&_WD4CL>o;O1a&ARc=0*2|fG#n7|aTpjAwfL^`pj}Po^ z4zzDcJ(eEpTLQ7xzAfLIZ0CQNxpgw|tI^BD-^x2Zb2`;Z(R|@Rlcf=_dJvbYMLFk> z=3E%JGWQNY?@%^h-_5VcoILw%-;w#M^z@VsPs|#-$kq7J+flX79&y#!W8B*F#gXM6 zD1Ap|-tK>*``+gJyZLuz&K5S5-Ol`7S#Ra;82GZaq`mAWi{0u#W4Cc@*G%M@qn@U1{$5ec>?n%)DS2dmilyS{vRr z*l=>z$&gPnJhyfRa)DlJb*&iYhokH6PM3S8*F~;oo$YKYI`)?@zQ^7B^5Q{0+woO= zo{(|*LY7888R#l*Vo>tQARirm@oeLE?x4%Fz14MU=A~;z##;H<>MEJ`yi?G-BhYG1 zPoCcUgMN1C*AM*}L%(V0HxB*Qp?~7gpEdMn551ZtujtMj=1(2^r>B>DdNnn6T3~;D z9)y>t-z30kV&EO(;XsVUjh+1BvpAd{Oa)@T6s`K>n`iBzXg4&p3mJQ#_}*NM^p=ba z4}8|`*AHbkUzTe(e@o|~?520Qv}7%pmaRpb;UV*aw)|5!YAE3w!CiEy_{@Yx4jvb1 zhoVBZ@SU|rxYRS#89*&dx`_2hj1^U(iA`j-cujrLv^c0&#P9Xzs+;2KNrQcie-{HF@4EN`7zKE3)^>fNnH*2Ui5g1$0|0 zd&r}Y?FBYfJm}Hbg}-9Mzuf^@VmKRI6Z}e0aWVhJK*37BL_Wx+o8Hn_>-3dQd9tqcIw!^B z&qLel{r$|vV{;Ra_hnx3_*lm5_;Aq1qt?s5M-z|Mp2sQX`NTTptr64vX`wzYYhDQlYkBF82{Q~?XS|8zvK8Xjnd+;am&9m z`#pczS~|<-xlU(mbIU_d&r^EvXcYrG$_FyEcCYyC_5Sfoyx$e5i|Ig4o){(WjIDuI z`6oku@i-f3-WRybW}A722Wsxq8I#?gZ8g%KZMLvmj7rCcGZx$So?!zUpA;L*{?bwQ zpEbsQ^^CXT>MpCA7DKg17ni!0Kjs|d2YHtTdjm1Xb9+#Er{~&WF<`6pd?|SJ zH8Jyh0{+u`bwHly=rw^F!T(1=$yXcX+f$!!2=J>Fyeos!?dve?wSHHC?r)--pU#Xu z=fi$4pKa`ZZlKZS_X4KU&j#r67ax1r#lGSrcN|~E$=*Z3_Fyik81?I|j(!i%7X|&g zI;2Nj*9GcNZjL0!VH@R6PSo@n0pHbs)p*&cSMy>)->rd|$fMs?t30rcjN^l{-T4)V z7Y0`bV(MJEkDRS@gQtWEy*b~|*Ic~iMo!6J40=0CSH-;S-ZRj$hs|_PqP=OLdnQmD>VmEI z@h){Py;qbiVj#wJ@QdC=VQ(yd7>mLoo&D@zjGsyPn`*H0WzNck_@A&F72$}5kjL@Tddg#9Hu-J7-09`yHnwnUbAYzfHLzA4`$(w9$S@&%z=m0k^$ z&3yf{;rnYX|Jw(CwB^H3hK>(->zwMz)QcfnHG56>J-ZhSyrqMkKQ`#VV}8yUJ3c(n zlx%+d&+hwspB}!y*UJ9WPWJB)JVg^RM}20D?C%Jjdi>R3I=DZW8OG*SckF#2wCbL} z>b3m1>ku-?DcXfbhFsM8^Crk}UZCjCZTQ8e)@QQb*Tf%oF*$yq!K3|4_T^EI_3HzB zIcgNd5 zW9T;xy&PLVbLgKm^xKC1oS}C=pp$R?(}w;TLx29z&ky~xhJM%3UpVy79{Nj${?eg; zZhA7)}A$-HZIk+n$A2g@0An#JX~IbJpabJ^L@t z8a}xwx(l<0ukHeQJ|}DV#A7-r+BI3PJk}XNe|*;KJ}AGe|Mz^awPfhoShD_V*dxat zTWjw(hdr|FwZ8t`ut%1?*5`K)dt}*beShn)N0z-d2KNnnWZ7$DamTP%@vvWZUX#7@ z*IjUV=IpX>e#yX#2Tlr#_bJ1kda&ml)ZXdCUY!x|ueJB3*%LGIT@{o+&W+mf*^@l) zoaXK&bLXjQ%ly<~KAYa$IkR8q&NIlIZu>KVd7U?W=I#gkbHjXQn6Dk?b$*>!^w!bi zGskC6t~tBSHw<%MFEDpz?ALvU(rXO(pEHczUCz+1K-?|}oHP2w)0$ckYkch2 z@QJOOx6T(iG`DUJ^oR%h#DN@i`r@yi4c7*AYR=Fl!BkK(^~Kxv+p@kcaIWw>Z*06b z@J`03ivzJOeUtiDme|nG#}&hPF@5rvr^_==~HQO|0dh z(8iNZVzpFUR%c%f*odAUHuB4y?%pr4z*BNF9MM%A+2%}b4UDe}Dwg{)CP#jhG1o|J76yv2D%D%FjjPg}%_`z@X%>*S! zjP2hTpvUKVU$J42x-{3&^GT!AKHKy~i(ieA+vcwPv%fhY$Ir8iuXyp}^q_3}T*{wh zSNTo1_{)PD5`(g>c-db*RgCH`Z~3js6UYJo)&}ZsCeUhs$NuSoyN;Y|1G%A3tm`@9 ztXv%I4vf)W7QAAZqpf!axxmj(@#o8mKt9!k*4l$tKFQ?2{8atWB{t~q4>WO7L;ime z^z(s6#-701*#W<`R0wz7F{7>jjVa}|?bo|qP2<*4}B zD^AY|w4FiGuv47$eC~6oM%dUs%dBZ+%AYn#X5Bx_kt=>0xjrXpOUY&Pa^#}Z*kWAg zR*ftKa#Xo9=3lK(Wqc&Dz9@X!B>Tt3`q-Lf z#kQ5VR80H#szc3}im%$Gt33ycnaiEC;ta~?y1-pA9hAH}Uuu1+yO=E45oo2;8oi&7 zyS8kWf6bl!Kp^JwtFgtpyFS;&=<7ye3$|rl)Ijz?S;nMTVmqoHt1G`IW!qvQfN?m!8UrI9wR0Blp3v zfqFGotNb)}-*}%hUJ=Om^f1@g`L@4unA2&lx6f{Ky*V4q_2z6b*PEA3dh@bNZ(g?P z&C5Q$IgnRlF)`O$J8_unYhH1EFty8WwpkO)uged>zldO5VdcIefK`G%oa=jN+}^M^j&s17}+>~9L>7u?xfhOxR}=LLaS z^O+si=K{3uV==H+XPb`~2kHdPieW4U@SMQeQXd-Gp#JK#1$PY)aUWlneRmssF0xfzb==yq1w);}A@=@uVy4o9~$g=c%9EoDRb zE(fLG82Iiks{EAC{56K&Z?!!Y$deq3gYhLn=_>ow28fAzTN&&Q*h@y)!xvzWI&b4q zIp}Naa6fhcc@6CostDKUlw$#~aft=E1?7l#! zR@A0*p^pB){LH6T$DK>HJp~z`l|y4b*7{V&M-uO6 zhfka2!?<{}OWl9j`g=i}}zo7t<;>mGN{=ZZM! zv!2-4=g-RnHN#hTo9{8UpKH*HPu0F&ocQMXOP~KEo6q)E1od2gch=SFmH-`Gn4kMe zH@dHi&i`Yf4#mEuy=|bCBm44z$GO@(@X*`xeC@#FeHD+puy{V0pNZ<%`TfqU7i}x+ z8wXkTdjHtqZ!XwlU(5IX4d3zED?k4+>*&jmQS7o-Hk$uR=5(R+o>sg+oOSUPBfT@J zFT313=49*X)swB4FFg36eA1&u$B&8++Okz|UthT>y4AyaeMV9%=;+kX4!!ebzG3J$ z4ZXNoKXd4xl>YpHT=P%t1k!*@in76 z0&?l(o5seX-JCK0dY^ws#_DWsfQFp1gI%8u_&|m|wv)jgUk|5~4105dhF;w8h_`y) z8Jr)KO?;XPTAwl<<%G`~9&*VcQ_d?NdbY3|jlA&L-N--k*;w+8wJkx#&z)+WoY_F! zUKmteuumTBy(n;Rlg}RKX=SiI(8P|7{1v~59(}FEnsVQtZ*%O<}KbaLr zHGXlxR(dKYzE*?Z`dtCJ|2euA(mN~m)Moji?xq7W%9jjB`iuU>nTr=%`s*{PT(vw8 zX0GWs2AcwQK;>w;v3zoP*euse#q6}~i`kk$ow7-s#D~s`o%oYwPfV-Fk7p*}A6pL< z&rfvm#9#3=Rs$86ikTNy_FB~7w6evIWhNj+_r}KSTQ%A9#Cfm~LM*=) zbwSmTyz*J2&%3!cu1@f__toW@JOAvX&po*#(5jy3VRxHD*b&9%KttG;z&mu z??c(!-)rJ72infSoIM&lE)3-Gf`Bi(0yXYjyd$tSH}v?=55zzti;ewR6Q8vKJ$Td* zxn$8pZ(q0KQ*}u`o1l-$bk;mqo)yLCrYCDY(5?#T#HaqeE1+Kp%GL}=dYo^KedyW8 zCiaPO)m(;0eJJ%sF8kHvjzB|?w_;?Co;sVx_%!m>D|-C{LHUVB9>jcW;7*wh(AGPw zGmK7d)(2Aozu0hbGae^L-8oliFA3UM@P9G5I}m@m$)&sG8khZO`D%ACk*|Ur)QJ9 zX=cz-Hhwby8FU-l_jmK3?B;Lp=C8_}&GfhNzIdQ(>*d}dKJ1`h95;`l`{9AE&FzQs zMVCI_zckRvPs!UIx|)mWrDOPhXW(OV*)CROsNbLc$4Bb=n}$bzO5b;fmYh|?8l7LC zwer#Y*33(f`>}YRKk)LCjG3W#ubFQe`ZLqxad-TE>}d1#XPKi_w{7oUHb155tB(76 zS~Jkh4*lApXDboxE7tsC|?4*fHSetzhmHT3Q# z&mjC7pPv}8=fV_|d-MBpVe|R8z_U@z)W3V1UwnVj&^sq$e@*Z`NtEZ!iv#gjn{u`@ za2IYJ=JI@J;5jQU>g9pp#9=Jo4-RARzUJEkv1Ci_^HqNFYvkG2=;VuM&!p$L8Y~{R z77uwh1|Ntbz5!Zyh8V~d8|eC(+`|j$`NTfYM6sh+?AjRi@k1wG==5T|Hz0RD&~6Uq z4bt`m^9E@ZPkCM&uyH=nKHu?YyH>F@Ze!_LebF)dV^}nq9z-MFuSrnFxM;{NIZNfy znS{!bJG9M{9DHY&Cv_?QV%^5S&k=jdwsSLnb_^%~+TiW6*L%+!)3f#S9d|L*DqhCR ziI+16;?>595AW;ZBzCI<_4aV!?C%QHdg&*l-M=97(}Sr%a~C)-+w!WpyZ&v0HE)vE?y38$0?#3h z?zcrZ``;AQbIrRQdESHMt)0u0_PSt4pzaoe(zCl6Z_Zfr|FO2U#-~>W;=vaDe6RC` zw&Fz}neG1G%%2wA8PKaXss`DkR-c>2dM6Nn>pKH$bdGeTXG7g}mxYJV^lMckY!TPz zWxub#Ha1hCq5Juvn@_LF8y(&=?6X0FysL?;LX2iU(CD~2Yx5>)=KojbB|}{KJr!u>m$7qvelQbg&hfu*&haxcFJFpQ zjkmRWPB-`YQWMWLK~GPA%U`i1e^XHTxj$q2)x+h1n$XZ0uQo|z^T!68zcOR@Oo8pt z&THJ-;2hOF!vppDsf@+C;&)@l*NoYp%bHeo-t*aO@97gWmmhQ*f9L`6I6C;Y_*6MO zHS^L@d}!2;yt;4sh2LFvWxyx);&Wciix*w_l;LRKIpCZ3Bee2|x1KZRR|jfR8z&Pz zyW~V)?QureTj?#|7@E@=HEjzgA@4`c-kFr{Y5od)4ANA5Y4< zRz8Xa9x`TwV}i2+^4M)&KC-RG_3lUy{+oi^oBfh^DEnLat=`>{C3kX7?>)g4fqIe~ za`k*=XCD_f;Vpad(PjOvfGl^~LVD*^-n6P+b%A$W{qD{BT)@6wZ(s+}zXx!~`t zy)N)GICRRbc-t!(Y!i2RZfhgc19pi;*+@UUI&cp7K?WM|4Dw7O|Dj>LHa*?7_JoYt zQNEz7HT83M1d`1k@hiFN+dDzYp@;14fyNfK!PkB)U#)*^Zhfk8`6b6KO&f!D%wO}~ zrgp7-Tgu-r9rUrA&zk#AoW$a?Kr1`d{yl-3qU*`QHDRTxun6PsU~6bjE5%e#FQfy*K?6 z1Ls!!*96+(@VhIDUk~+27Z1Yp=VbY<8Ec3;UXNw$!>aqFJZI zIvrC%>2O}m`Tm4qyfeMJ;>*a+^!CY9e=kWsE>F)Et?KvOj2E)!jBFj&=h9cr~i4-pe!LRrBlsy4ls=Q(|3p^!d1Vqi$qR*+F-`uh^>`%TIr&v}cA- z>gA@y(E4J)my*lZwLyF5E$2?TIr44}-=XBynGETHGkrLBO7YiulPjoPw0BUQ&zLr9 zuN!)2!o9)P(*pC>fAMpUwc6KD2Wm}>)tBbIBd-bj>YcK5ot<^>2Q@F<&ipCCaY6Z# z;Ybge^q?s{##%3LlHStO`^cZAe6+8IO7EfkqhH)BhLhx1p2Pv_Ty4qN9R=T>_`Nsq zH9)nwH-z;yj5=H7gP4h(xYRSDVxf-L2W9)DSm0kO7WVr*l+4oA=ey#e4(00ffN$l$ zSZQU`%8V<1U!HMqPvzZSn-}L(tGlV}p|@<9B(Kg%@zm!6aV}7yJ-I>)uJ&^5=;od)=${ zZVV>*m8}E5k|BQLi)VWvZnp%R1MNp6oBo==v74Woxo7CDQLMjh=x-nTJJPrOez&Nd zKREn+4EgNo|KHflJNlVn{-V%M2kPf#(ZTNa=c4NK$=0l|2*lI&C9cgpF!fU_NAG({{MXU^FnXx z=Kh8=d2OEVjE*D8(_P`4l&99_FY0W#IzK@66x*r(+maRHNU$S}~N0N8C+}C=~oW2gM%m3X& z-d{EJ_YD23)6;uVz$f)=?98y!*nP_{;}rp!YS+B2VRLb{&rkE#NArqTtrtJ}b3yUy zOIGcfYn9K6W63C)kM%k7tT-!BJ7RfnV#W{8ulihX?v8m)x97fI5oCE()8eWQ)VDP< z>keW+>zDI?&&r!Q zf8R0uU$jMI?SZV(T{P=6Z}(SZPG{|ZDnE}W7xnWB;H^bYlnXQ&~F&}HABxfbX$l1iRs-fMy8k)*i7EG z;PgOFjve}Xr@A|Hd}QELH+13=S2>#xv@-(ooLjPr7tK^a9~o+`<(to3YwcK(IePlq z^-M>462?(%=rnF)S@C1Hrhi`WSj4jRi;aCuDvsG2)nml~?IfT2c&V3Ou2|Ep#>LK= zyCV>9d-H)dKl=AybJ6QWTW95PXHb46J;AfRHiN5ra$8K<*)OF>9ynI|3-GTENYxARj z_uF6RujN&1a@ghr%NfBj25IeGp;p-AOzGVTp1J(-dCm9vtbbV`hwK*z^yRO2IRR( zp9wJE5|sYu=ksPe_xm30{C{MABjI6COS8e=U|&GL^Dq}!Lt{-XSQ8`XoP9BS^s}?A zJ+Bz-$<`>|`09C~$FCP>J^k&ve3_p#^hH;5XTdYvy5>$c_6)y220d*Uzcypf^RuV& zPnw@UI3^XgEq%cqOzzr1e6+T%*@{+t+VOnm3Ck#-gZO3hiJ3YmzMUEKx%6xw_Ryf! zTAKBl7cUxiXyu=?0esURKlH|0$!g^<$7gqf_)e#-f@6c@f+q*Bi(LC#1AKhsyBg&OImIv6bAj5#Pu{pacL~~l@8+zj-+uk3tf|F* zo&C;3zfLy0N{9Q>IhYN|nGduR0x?sweAdLCUkkxF-_%3pM|>VgFwDh9Ovo9>$A@w8 zSj>9aDF?=4NDunTkKgeidqYt6mEIe&Hcltm<8-2h`9LE_o$$G2F6F;-prMUf2k|Wx zgPTJ;&K`Cy6$AV7*5^q)J{S7b)g*npvv)YLt~}0%PZP5~)<+^!&9`+euJeIbIzCr& zKNt0OB({$8x$Zr6+19D^Nr%`NFIC@S>ppddxieZhRqx|!K(3uvccdIo@(Eop^H8+p zv7P>B;O^om0xF};%hz^w6S%kS5S*-U`{hM;VCNyh7k^>m}} zXV@R-=cJh49Qv}k&QrU_PkxYjK_D+>w=uhGjc@k&!w=7c#|4`B+Mf?JH1mNti7nle zaofvw^)6)Z>Q;l_-vs!#gF==6ZEOX(~7_*(Yu&X~QGgL=Q1l&@a*ba)S? zyJXWdA81zvs{@~<{JxdFR|jfYPWT}&*?I)sy~BFdKASaX=bFIxMO$ChPkV=usg<01 ze`mvTWXy+-jIuAo1E1ln|9U=0RURtN-b2{H-&+FDA?H*b+T(+mv)j9zHWxU*n@!R_ zIp*`?d-FZ0E!iud{yuZ>oo|Q?x~|NI^ZfPQ{EeAgf78%^!_a@@(0|j=zj^52l74UK ze=5ND;IRJ9L;ujwzcqbp^WB5Z|1WuO0wC8_-uZT^+p<~$8;mV41NQA|mAYHKXtQK2 z8|g}|1=%t(T8zPpn(C_R?y{<@+Ev|Ju#HU23`@wwIBb(i7{!^HB*+u=l9`uf@|e7r zg_$tC@Iu}sA(=o3AtVz*h6FH)L(l(r@A;}u-M-b5fMnis?7!|=zVq$p+;eZ0N@hbb z(LR=Fzb4V%lxPQu_A3(Y&*}M?z3x^4nfT>L)#vNFf6SMEmy=?N24zzmRDEOrrfGiT2Zpb~(|WOtcRr+9Qef zOA_sC678=iJ|q1~qW!yx_HU|9{OE^)##`L-raFs>#n!BE4f3zeKv{=bYMOO{+35sr$7C+Pw{Sq z_ZxQ$AJCfOeaM5_=-Dfj^3lI%jjrr>ysN{e2Ly7-_MWY(vp07OL&65Z_6h8|U4RBZ zd_usMegWOyBd`}zXAbn^0=Y|}y+yFSpFZAWU@r&+WYWj|tt@<8_#NT%!dHYbF=l^i z2=5X;D*TM_v%qU7ktZjw}1`Y zN4RgJH{;lJP{1zMip?8VJ>z`p*$6|qkE!#-QSUv=&&A4(Yu z-Pk`%8DkFkp_DOlk+FZCG8VY8A5Iy&$&LL;${41|9n9m-!Rw4 z@UhhyV=emaRf#t1#>S_-x~k3fY~uy>5x;c;J|_;WLHaCqM#CIv*b`(@B!k$YAGvGs zL!Ybw9sHOF9rmWtA&a$Xy!|=U4+!|>yntMvhrLU-wPSS1^Vf*c+4?X#uKqeOI`$cO zGKPMmLcc)&JB3AoINTvX2Oryuv7g-i7g83VB!3eCI(U+E>{qOJitjJhK+<+>x)R&b z|GTZ9`5fPD5|TNDzDb##@&R7N;6fq>@WeO1|IHT5Uwqsr zz++rsE$$cS-zzYGpHLRy11)_~!+iW)6PODhKUa3DjcpWsOq^LW@pzl}VHun2%Y_m4;Ge48#_>T7b zgj-yjxc#V$+o zA0_Yc=X>0hI&+{WH_)F#JMH{|T#NsJ>h}uo68^35Tf$4ljOWeW!lOb#eZH>_sEwU7 z&okUcj|s$w0{xMww$x|%ezTAhRtXs)>5H^DBz=Z2uEb~9bR|AxUEni6zRWdU zuT}lKtt)E^yO7D6#E-swY&7}oeI_3tk~ggX%lXA$8}J?!`h>LHAWta7@1%fCXgRmx zL*$baKbFV|^ky9Xo$>*G#2bFl1+L!7MtqNr$V|(JH2tBYpyR(x(b4t<_Cj=?7ETE0 z!x}(0ir*HSW(@FqK|nS#{*?x~{%c*C!?Wg20XoVf0{WBR^!c&!bJt=751!e^1!UNJ zHTKbM!jDUizZTIqX_LAlT^IxCYcyA~7pD1|JYCKwtR34j~B z0y5Hco>u?m&I1pN247yuc>o_d%_XhBCA?s-F*Y&6{ zA>i+d!23e(K~D+r2et>|OMe`Dt&I+E7bwsb1pL)4BzZ7KEN>9doAEmZzUxIhZQR!Z z`eeM(-(rrP#FKc_XMVJp<0ImLOnnV_5q}UaijOPU6ljLVPh3uvu-;t@bY37#Y9(#o8>C4BD=!>5Z3g}~boJNm5mZ#545PAA< zbcM$%VW-e3Pl*BgA;Z_;IrxmL z#hKj1W_&X!KHk~0o~9U{f-InqACLtI}j*#1DC zQfxjn4+zXdFLX3r;7>7K;A^~XpM!r*fX`lm7%-1E`Vi}+OlhQsz@JaTEt{?sYdy{gKKDt>n_6!QY#|2_$ zKIVLPQsA>uv&H0MD>mXU^z!XX?svq;@&i620`uwnud=bA>x=+z@(sV6UoYnm>`e1V z(e;}@&;dVFnDY)HFRT5Y99TdVl0Pv{ly5V(gB zkL!ee0{2_XNq91!K5`S^jtlHZKP892Gx;5hyVN%-3>0e|2(_%esM!~2{-j%^aq!(<^F`#viBkVD?t8S@&| z$w}hJzR~aM=m-C&1&YyOFLdn5)Y%8PrqMD7TH%` zF?`f%44Z7smvycBO&0y*!i-?Kh~Dgle!uCAJsSn~$yuQw>=G#OusS|Ow_yRB_}&HM z%zM8;ZeP+ssOt+tMZgJWGtE8$KJdUl{PqAgS^HPiHW`fnyxPRZ#(zp}^4Qw{Qf*>I zn=+?1F|~2NM`3wxecwoY|KO8}_N7GogKDqwc)lYse!tqjj@uIBHzwL&)^`E$)&C-2 znNP8aJSRxCxznzGI@7I&JYXsR<8JzoTHySVLo;2 zlPXdDExN+vFU6PKN1v4f1szN_dXUS{39P4n0sZhZGAPW2uWt+T-XTzkGX=ir|G4mw zuu6c=>^1$3A8Yy%!RM=H+e^m)W#e%JmM;)Ch=F<(T8`y&ZzC|X* zY=SR)FE&t+hYtRDpW0>%Pqo_|35?DFw&x35AzrK^!FM6WS;u_-zv!_ z-sCmD!#DVm`@{-?u~48~Y3_8ow|rDQ06D~c>0Y5KEC`gcU~9|r(yqHBidYBJ3th3z z{AhbP`m-+f3FM_u$Nq99bnpd!j`gSw?@s-`j?mycUp6{jiEMO4F6(GHTTG9WqI*K% zeuj>$Z;M|+b)!qJjZXb(c9@T6#1FmfzLRF-c8&i#1?fukM`u3w6L~X^Ppb}J)--uS z9ec=8a>vgT{0VLlxCi(-?AyT@GVrVIx%k%i0kN_^e=ci;V!3Enp9bDT!UlmluzM#u z6MN*ccODQP5vB#=!@BAgZV~V^Yk(`y6#RV^{16Hh#tsV5J|*CrqL93AkO$}hAG6oz zjoqO@N#j{if08G9z!N{=bNFEw_jJ3j_p1(Xau|>U^g(AbyH&?#{PNx4hpj$8)5~(h z*MYMlc0ljjgMQ4z4x68}!R#dd#1Ow`1#%c!6mqmIFxT<}nb;W$zU|1L5#XDoHQz&j zH9SQgI%_T=zE547Q z@qLu^8RO>P<>um7VgoJyAz%D9d@1ZH#FqEW_yZd1#Au(uK1qQO^0=CRSbzAE5=MW< zG)aFgHy1sYo9p`;f7#w+K4U+p&`+Mwk6soN`ni8)1wTI6!kSCQ$M?O4+v4TV_v@W_ zVK+J(&u-Ok7U;K}wLKo)0c+)ZT^-xWPvevH#SI$k6>MLpj-AM~KKyIGBDUl@dkL{- zzTNAVyP|&};79hBP@rG~exSh1mrH#)UGO{hl3(0IO|Mm|1LVMSxvQ@iw!;H@=A&2I zeDtz@@;DIC1N-rd`R#K0GrmF~*N9OlP{QcX*f;Q7jt0B!9>%ngKUDB5a|^DH-zmxX zGZz~s1ax2?IY!wh-~;ABXF0TAb=Cy>lNZoH>#v`T+RTGDG|<{Q^4sJPZN~5)GAs_X zc`t!%#w{L<kSnldIY9`-gt>HGZLu zeO$=__L*UUIq%T>J94!qum_?Gve0$A@V~Bz=V2p#CxsUUXaIch)uSFC@)17RfK1;e z+USIh6!Z_Ns0<2>4G9|r_)>iTVHbL!JNFz`hE$CF&6OO4Cv)J%T1HQFppE~qe?}mV z^!e)-TE@!)Yk{$K0`?;l8SsXWPfOdUWsKtM&ba9gFN*^_`5ejOz;j2x01y1tBd|7+ zfseWc_F#BHWAjvv{F;mra*#bNF!wW_EQ^)8Bi`sTB;bGKLXRBtJJ+`ftQmYl&M=3y zf*fLo&Coq9P>c><(BXIJ;A?9MJFK3(?$#Iu8{j=4;6L=kAMp2err&fnUAQvGmr0++ z1fM-2U>9`gNBpT117!3I=otzWWRpM0V_qPzS3q-4pbs9a9FUi^&EgC186gyqZM?5W zk1Lf!oUqGuME`<7Y=|52Brj}lG259F3Y1Xr^)&x87ho&%@i#o#ukiH&0h_Y|XYv~b zqc?xS7kc(T>Y+fvueQ$M506lw;4k!qJ{coFKad4{{rnhPJn#`QVGNl`+tn5I(QkQ~ z)Q7#+_X|F@d<#{l;3I>{hGtkGE}zy~MHl==ZlM$YM1SnWzg&Hr@f~@0Qh>Md!#5vX zh97+KBYEWO{YJIngFZfAas=M!MnCp*=7&eOz`ispTq~fTg zzC_>OpqjK3d3}O!ugUXuHeW;AD{vp+N=(qzU_KAjhkfXRzlR0<^;vJPwEH78*v2~$ z;*SjT9k%*t+-pDZC_!k?YFh6^swMgaQRx^njMR@HAUO)hYh{wOeg;VvhCOdZWM7db>qq#D*Nie$$^iYZ%$4 zAG||>Vt(tS+n{LBm-4KTj0f>HAH&0Zjx6g(#^VC_0^4KYX?sPWI(cNi@?&(X`pqBM zV!k)~tc_gXM&yJ71sZsS0ws+8jQ23~XABGq=xyr{odCKfV~sppC&)sdtU%pj%{pUE z8^0B*17rZ3&)i{w*nd7{y}*M4-#&rdB@XPbKPQIhjh+;EL1X?vcjCYmaKEL5(Vy|$ z9@R}p_yD6L&slG*70wQPZ|8)tRv;I@AfR`eOmwjLFm7=`AN+(5LV*%Sf41lks!jf* zTTvi)@J&Hi)&shbSEhrik$sj^%!3v>^rJj0z!Uo@=z;HS+=%eZC{RonTi=@AaeZ&r7;AxCKp%Kge@eg}Y@m-k?i7op zuFT5{W+Q6>oh^USmpS;7cpxA9pz~vAF+hL#!55lPpx|SCL?H%4!Uh34atnKqf&cL@ zbFsl}#Anpax74xI)}+OQe&pENx*R?E3GG`1*3@kRI>85h(1CvFkOyoHK^F=Xa*TX7 z8hHBt3Du@pE*c&2CvH~~f99~>e_l@Bt}8l)0_BnTvc$J^?-kG)AKRKU|G?9H#+7{H zirHDJ}t7yAHI`C9a`c5 zZ)j=bU;M^7iFH&HumRhN6Ly$ij2@l%_sfiaOzo_I{pi9RQqaUvgPgixTcr{EK4`vrKRXDCpx z*J8xIhQc`WxZ*dvlBbUgxsA>6tElq$V%n_?fV1@e#Z_9@h89FSrOnD z>PmqQ-z9wsf6l&)g#raybTeA&0DbTs{JGM$JflqvEH?PHU$Fc_4)eH@>(Fuy1qyp2 zv=&3=h5`kB81wZ(U(*Mk%wrEDw0?=t_B~=AoOfEAo*8eJD`O z=V8=p^;;XiW1H{y6>6K`u?2p>x1mpM_89!sBiNcZpWtc`AgLLDA< zc08s!G>nr!Mvq<;n+v`5VFR$e4SD@SC{VETS|Mp?GG6%Ea)nr#J+R zguL|mlT*wyUm+iT;cq@6pW#P8I%2c&U_QWp)5COtp1&6af6D=MfER^$Jt@Ew9u)eX z5UkIa zFqe7w6nSRvN!6banA0N^1Z*YOI3xd}0=ZpR=7a*}5dnShp>MnK4AoCD{jdk#_!|0s z0(LJ)4}af&snPTsyv)bls{gWlj6cw4zkn}TbIJMm7?@n>i4#27bK!YFK+ntZ2t`9N z`)v)-hcA&sF@Gn0<@*NPlD_fBlfIx$Jdpu^_EPF*5B&Z>_RxoZ<`ZJNR$z|hpzllO zagK(M`JrER{6((%^JwEcbosdy-!X3fhX&Yut|tZjL|#2DP|$@!zH|%dV|H@2_ynr^ z{$|Y2ZTMpYeYTd#2eX}ALH-kh=0fvDM}sb%Xs`o5X*6$8Ki@-SOp`8%ev&Wp7|Ae#?cR2 z?D6TgsLeQfz=Jk%fKQrkMzh=;-wyKCmzUJb+?v)6WPdvAG~S9|D-_Pby~;d zF}5(z>At}e^^=S+lMvE@cq6=#TUqfrYhc|N=BmZv@=-Vlv4`p|J ziSmfCf`E<(T^+wsr&uoFLww`E(`3yNXXc_$QU}`43FwbbGlI#17q*82#n$?e>Kg>c zfp0H%;|J`;XV}L$wj!T4{E>xBbSJ*Fkp&$*=wB)HyEgVh17EY(c)*{z@W)qo2+$E< z^Y1Fv@iTN>X~PGaKtKodL1$=uo1lk}#qcrJp~bH@c3$<2*QOuen|#{41xgtG8PDZR z#{HDJ*d7Yq0`%7IQGKVtl|mfgP1!E|Z!221nBTZ!6IbT>>kPj>hOZj_~55dpuops@gKyn zQ!MbWMn3|Mp+M>b@MGpV`7VdAVHf zFm85m#fBRN=3*Q1px@7hky)EtD#9A!6d3GP^l#~C*733uR z@Ux$z#Eh8QKAXlL9idq(*xqk@E3sw{JVSwEdvNleBo*84ZR|HaOi=N2CX9MwKI~0> z0`hDfkaM9xF&^eee2gy8qgSVU6Fi{pG>)H^%Srenb4I{k{D&{;$5-&C__|mO)ATQh zHqH0+r{#@*A2K=chn6*TKtL~aLLbhYDc7U+|4IRX)>@sDPy<#D9DGm@1sy{ipBbks^e$$g^%SKwqUP)MuEDZ?;*kh3cbN+x%lP(V<_s+&pye7AVgO7C+`s3p@{#OU75#$d+DRM+9`Ed``bV z#uXnk2Rk^gSp19@UySKD%B-zs*KexL72n<u1JF?ITU-`Py2QT`$=TPSi zXjgIyJQRUbTQ+r78y`a)eP=6AcIo1J^p^kmN41abj=(ADUu`(tXh zjiE~@bbI}(M(5dImP2e`#9zMd%md~R;)*}eGtD2^iY~VQQpX483*(0`e7muyAecQq zZ{vq<#*aF2Px8S&pO2c6?m1nFI|W<%1bCnuSL8C+m#bzZ!?!)_`jDOMw>Gv|&ZrvE zAqOARpOk}5`viF6d-gZzxzf*iqu+9#e*DNj^**6jKrifgTA-i<1-lq$jWUlp_X+r7 zxjFD6*2rYeW5Ox{{n69+lf@(%V_!e!txTE69Ms4BzODXz^dAw37r6P)TlX=1D7SX;+oi;pHZ-qM8@c|xH+%Egvu%vLezzO5 z`Rg1%_GF_&&SHXYt>}DzXARy8W=w|l~bGzZ~0QV`k6CHE%}amJfd2=a;l2 z_ZN$cMa}bd`mlKU?I+bn9x!`Pd3v&L?ViSc3mVqpAL$H$Y#XBv57wIT<7#tQHy8C= zs7A*+WSllUvHy0B(|3#OBX*zp=69a6*lT`Pwd=h6!WCKUXEsJme^O&y8GDsrG5B$( z2eI>g(xe$ zkEFzViPe2x#AaMT$E>USdWY(x;E#}sN*Mha@6-6e{P#ZT!Wujv1j2V>qvZ_wF?AUm zuVg<#Ps`&$)zO)I&sOm!pIP_#z{becFX9~Y`6LTzax&`c3Hx1zgx6^{@;~okEy-J z&AU4>A3bk&;}(~D98IVzGRTQP{#qP&i!J9R^w}*K%>$yLkNNcB^J`rndRyP`{B>(T z#17_!ZXA6+=Elhz#%_1lz+H!Qg%`g20nr+b@xM-ezCU^r?XUh-yDheNA9Q@N_cM;h zd}6u~YvlF2>!7>ZT+UtV++64^-ZwhBTiwKQzqPEv^rLeoGHH zYjmZ5o$DuGKC6CT-fJDreU1jd{+eh^AM{2JbFcCGH+%hmp&z)0endbv__%kk-k>%z z8HX1#e%{ToeT8uwJEt+)54b+~9dPvY9~QXsoNIGl?#9jkTO5t)NvtNn67zk~&4ceI z^_i_lTtBwn;QEc9#n<%ZzKsqR-<)fcbM&JZ*HL%%^Ot`1d1&B&Qujpikiys-g;1cd zZ_#Ew{;Cwi=6B;j75p$GtPxHMFAD5QI#xyJJL`iclH+J-V~;;hZu@QQ^xN!n=LLA9 zE9;x@+a4F55>5#C6aDcgbCE&)4FVa2U&&|6UID$w1!&;S{8_=)88RjWbYbk3LZ4vc z=wajd3I6zp_)?NGcwQxLl;jxpp*wyup1w>QM^_v7Wg@#EFbDl^7g*z2fjP*ttJ#e# zvp=a1x?n$7oF{ThB`YeC( zeYY?zuy5JE0lnouIPQvs4;qSO!hb}7C%)w!4Dy+aT>2=!jf?@`KKLNl;>f;} zMgt$C!4~*izS>@9w%~hsz&k78TZ>VT>b~B5f4!hS==%hlYkLlPG%O(RKZ}+PPh=H@iogbBIwJ#}O=j9S z@|X+l{lcI?o*6%dVKF%mU6Osf)km@U?^^|8B-J9mMx$nwH|WcKot%Q6_7ehg zh!y%oan;q^zVvdtd9pZvie*nv-p*-Hdl^Y^QMLO>_mzu^TPXIb<_7jkX2V0sY$tib1r z>^H1K#zqBv$Gmd_zQl&2V0ys^8Sq4o@kCC)KuO*g=zG@dhsRR_dZWv@fK0B~hTK&G zg+6RMC_qncQ@3*vedvLYsNX0M6Y6$$`dJqro1>wK@1U;eT@a8@E@4kixJ~F6@C`AA z=atgodu)Wa`8N6Y-H?rro%~Mh8Mi&t{OS#UJYh^eYJFYgHp(6R%+bIz7&}z5n=RqWu$U;|pTW9I=nSyNhp1!i)fa ze-D8_bBw+q9?;=Gi=of&^%`f4wPbVlB=q=n;+_02C))2!wCB`DCVC)~I`OB@nnVs| zi|Ei7+3Xvu1jg{)3-0|r^T;R0(UWoVd#@YE7Joi;^l>HEp(oF8)b|OHO|dr&+$R*@zxb3lwBPXZd70q7ymso07}A#5P~{I<<)l{$xJ7F$bN9M^cZssSjV>C_qmg zp4j$j$v`)sKYZ{h8uN1}w zY}zj%>%WSaw(pZbZRQ(~4XPIf{vCm>-Qb%M!Z_iVIU%C;8y#o1fxyUmDx}g{A58o3j zd=0I?rv_^GI1n@TN$e#z((J`otgoB^-{gLZKG5L%PH{pn;sl-P{Cd^<1oW*4(OvyRQ+XZ5K zi%=Bk#}4ALUpOxiOMG`oKn^s>z;^Z+{I?u^kH*p4c$<%q$NW#bJb07p_(yJO>W+T^ zdl$Kf9*iR!y?q_o!#=A)@^Y`>`*fY!=wZ40tm+isPv4_3>=b4_jsf`ZS{-}GFv-Z1O z+voYP`g~vfM?KGxBR1!KYO@yod{;ACYpiu>S)=I6l{LtfF|IecE6*0h2w4rfPfz48}^_-`EG6OCV#EHM)kd38-E~!@oEB(sy!!k;%oEBuP;bn ze8K)ijsyaF;Rkd?4`kp|+UQA}wMrXXOh>cpTCWd!=IP>63 z_;m6!@+sK$#|gWLG4qJUdcoqqQ}sRpzWW9AiPr2>EtyK6=-tF4x)R6hg@S;8k=f~r z4Dvz$M}Ea#<`YZi0sLq%di)m%#DOt#o*cvm#_*lRWkz*;W3k3Z_X_aF_v8#?&=Yrj z^F=8HU-Q9k)!~h9#2I^;gPy)^wg&AAPg^5_>i94tus`7=lbgKS9M%JKZgu-!O?C7_ z7uM^abkLJEuA%1MMl38I=xqKp8!ZOwG)4@tk+M&K9v|6y!arXUbNr2elJ{-K|1@R1 zU;P$a;$}9&hdsk$i~K-<272Tc1$62(2U`Pyx%lPJQsl2!KfW9iHVDLFt?-aQoM@x_ zf74uK`nC93Y1)I*~)z#&0*#ccYLdW3Bp;0q-x1H?-VCd_M$gqa%8g zW7veR()h6^jo)85e#}ks!+#WfMVN_qYD74RAo zzYPNM#*bgq9P~jpdA3`~3bwBB1ux2Y~Hu7Vjekf ze&I{^%f*`YYyKpEZSTc5ERs%h$-9iklXh>Pz_oXMg+r1fnJt;OW>n907x2~t+ziZg9D)R6(wk$hWj_`eaxq0Y! zO^SY38iTExe<`x5Dg?;!NKa*n?v$LvO-26GLAwO=klW|)qJHFkx{YFaMu1)bv zn(xUgeBiHzP;Ilfs5-hoCSdm_p(?Qd9uX*gLZ|txOXhLKKKRsyZ>2kZp>xP8jP0yKtPu9 zGJVmJeF07lLQbKd@lIZ$9TxBrxrVHo06%Oab}#9mhutTL^9rHhV0xGz%?69f zI?*8ypIJ=N6`=n~f&9crwCTr()^B-D3>X^_@F_a%6_^KqbbqOIM?ZW;`#M#akKKKO z;3U@waG>FyiK53A9@i3 zzF&e(S>d>V{RIJid>ZWU7bwWh3H14~>2_^&hX=Y)rzCAjj^odYfG#tF>85I=8~Olb z4-5F@<1UY$Q=Ku}167TlL&tSBU7@G=K0B{A`WfE|)rpho?Z*Rs@y%fYpT8*Beg%&| zl`f3K3;pQ(gOoh)PSE^(!Up014ZMuc;~owBEOwGJrXTcRzkp8o5E~)| zD^T6m(koJUVh{3d9{g_f_>rrD01buln>0>5v3;M=FR(_(1ax0}g>r7bjGS9ia| zFgkeJogSrZ@8nU-8{6lY>6khU_6>gMbX?p!@BjMMvoR1?#_~ zLx0erzpq1ownKk^hyHaP`g0xn*LUb2Nc3a#0f8&N^?~if0x{4d(31P9`DD=JY4(IY3(XVE6|Fe5AwqGll?f8d6KKBXedRQn6y95e8!JhMiT)gDjdZ+qN2+U=VIVljM zhXwpNBH+hY3CP|n(2q~a`At&PKQnAr8$ZKqT<~ePBxtv)jnD7YmHmP>ZZUyBIuR$+ z$>O(7^tR6WHC_<#(LsSZy#n@9zfr(X)a}`w@4+y~?)%uWT|8|)vTl=phKGOuCvWM) zAIuvU(BJag*AF`Eyh}2$!E(#`U!CX|NyI1V>$^qg`+A4k$b@mcrs2O^X&cr-`9vQ zZS#MiIx>j?_Cimrh+$fr{5RgrgBLjf@12gft?590(6BGlw@aX)*FJ&1y@JJbr|QsC zOb4!F8|i|7spA9Y;akqB^dWzjDki&MZRm*^edtXewDgf1_=z}T1LqHTgd*@`OF#73 zyjH*#e~#JD6}`A(A6MjZ#XflN7H{jfwZ|OG%{>}NFV0${0yJ46sXx5NMQgSWs7(wg z{<^t2?pl&}c9s*1h=<3b%q6dwPw{ocUJCKVZ}8;` z&||-Np_A!Aei$Fq0lEVo9sWSxkg!3(zZB?RD>}>lezh4hKMuS0Z>QWJ*|!dAuF(<~ zn`?c{7fIKL6Z6^Qe0^A30GpXRF5qiusH5LW;fRPH(iI;e3!gBC&uaoP?-MLezMtU5 z_@IE#%ol00;cGlqZR3ePj6W%$3w3NH9tQ>ZA(uMEbfJyx%h^368qh1eQCKUm#^8@m zJa57Sf0J*?JmH>W`9OV@V0*@!RA&!^C%jlw&|-t_mH4wD;A8sXfqfL}_|Evj%f_Bn zox;43iVCp|si?r$w*lSBOY9sHEH9^3XFtIQX0NJEdxurW$Cs2-&{PCE;DbEka$G>i z69TmGBY$k~wp+Cjt=+} zI`%qDn^_O!Z=V2f)-CaYx6OT^!(8M-$KLZg(ZJ92LNtQ-=m%>plUV#DM!T+1g{tfCQAJ7dS zV0SW($YLK5%gA1nj}NS$J&b;MkGnej9~OUnZ2ZXu_*l*jtIixgi}Ul?@WTVR)HHfW@*>@3$2RflU1%A}i=D(@KeEa|pihl+nUnogk z(HDIl5kGWG>O%~SpXmeri4^()^&{V6hA+WG0x_qMhsYQeb_-d7vF{PTv@zyG&z?f* z6OeyW^yIOxZ@=2m!-rTB+m9t;Y4RqPk;i=F0Y83o#B{)qxZ7F@htHr|GoN57d?!J>5MK5e;bc6XN|xWeNER_Xq-Og`(w!e zr2FkoqeoW5{obd^^6mZ^{RXDlCDN{UsBQMb1OC8de^tN5XnJ!`WsGwKw9#?hepf&6k6Ko zWcLUBfzHhReviLTV|tShHvh2d*yQ)!vN#K{mS22=MrXAa_Om^ntQqG2N*; zF{L2m0e9tDc1mCjK0odFQ~!V`3mx`48h%p_S?Fv1@EjNL16O>=J1@?^YXy9}Paq#H zC&|_Q0y@HndDOW-bHz_wZxYale4_*cKE~J7(S`9}bNZqeyiGQ-O3Fr_$u`}QWw_DR z(H-8s3E37y^k64a?Z5WxGr%kb{k zIQ)2?fgkyfjmz6I&pfRbRbWL z1#MI@$_jw)PeS&rO^IR2ikwGetgV+ zM!eyVKhfofJIwhJ^|J=Bkyw7eY+@d3hj}0FFz;WepS9x4xR64Nopv^Ye^vbP6MFt3 z9V-3tC0e7t<6>|UYbU9TGME?rqOCmqcvTsmg?m~ zlhvuRC5u=kbgeGTqM&n|#_OfVOn$DVJyCCorqvQnt0kINQgowIE_l2wTO?e`aD*+jx|H&1p-A zCK{ER^HZTVcdk*MZrk`0HzqaPw!wJk@e|PX_$gQ{pZ5Jxtj*@N9~UdlOpMHJhRYjo zW}(-Yq-)IO&$vt~)@yUo4r(5b?Jl0HR?5{=?7$Oq_3~_azI@s_-i8X5TB9^kDZ87C zbxVF^TcK9e3NA(WPq)x~lEOm0UaHPBKQUUV)lMzUO*GEUPS)JIwuv>}Qd<&B)y6_S z+9e97bXS?n7s~VQ-d>uUDMfdI2`&44Y*MT5RLLhR%#<`gK^J!>2)$cI#0*mt^Q=oQ zo%4mz-_FhTBncI&Bu~29=jvv?lq~LS5kBT8khlCx^{KXz`c$E7o5&$?wzmmBjXx8~dX6ue5MRGc_do}bY@dg64xvfz@<2rH$$E&S*V z*uEjhUE0xfzlww1>}k`4(_=n5X|+xW5oO%zp9#EfMap9ulQvhBN0&TUEgkY_)#`0t zoXxj4Yi)ytL#xjPzn+sZOSrRwQ&y;hyo?&HLZukI72x#$LyxBMSdpVn28miDV>eedqSxnWt;0i zH&<($Qm)RmFDtKOVya%7^%t-|HeZ|2f^3wvmCuy&b20mJRZdruaNm>F?q+LaI^(p? z?MhFYcC?L~ljZqFLSr|;xy$F%cIt|0bYt`>BCBBr)3$+V#rQq5=JA-(?1HUtkG44w! zDJu1}8>GHegZ!9J2Y5VEs~4J2aZATMDaFK%uF`hbNIWF9 zKOR*|XD3S4>2lTW(Usct=1u;hqNDBnqmH)Yk=kwaZToKJ?5vXatTQ}vP;`8V4UQeg znPlR$&dFY<->mCVKfbkS!+nd>bGEoGdavQ;sO5)hwlq6eSNMwMMxhxD>(t&|H(8FZ zF<*1ru3oc6560TCs?+oCHlt47q44bHY0%y|VGptpM-K*WiqlZNwQ5mM5qgB1tm`$7 z-U68x{#dniCS^u^r%4$&lebrDl3OfIE=+5UOx2EU8kb*Y-vJiR#g_dTZ_i0Dhqb|RV%tzHuZ|{oRj5gKgf;<7rG6_=Cw|% z%^t;z2OLXB`WxDltNFUtmma8EqSU=GHC3wH4ML=|3-d~6z2$W8A)8&kQ)8le@k=3G zsJ3-Rk6W$Bb?MubzjP=%y~{m$&sj;T<_kEfmNJ&gLI)R@N)36&OBylLsivh-)ReOl z-jB)r0}jGt;c}*o;+b6M1DxKDWvoWEUND~~v?P*$4 z5)^a!<~xq1gKVU;tu#nX_1AWbujR1IZMQj#ccWA~<=f}lzV=a|oRC^3E`=&bD(*tGjuYX?6L> zmR4``=;C$R@uk((Ji@fP+K(}9{mmRq_S)UQt>54Jy#cq|w0e?9nB<6ej7c3z9A!Kj zJI=JaxPiAmt7+>`F;3L#U20tO7$f(!@hi2x+|d4}v}wPSbKA{N>CDqMukAf(ZSv9R z{Z?&is`>ay-(+hOr0EhQe&N=9Kw+e~;BK2Vv{CC$-Q17q;%RZJT&lPg7j>2LN`CGz z-Xk#sEQ=KS`Mi59frj@Z6Rn(p2odq#oVE|P-l*!l7=17oKU2pV)=LV49@zC6PxD@0(;d1sS}!Kw z+}aDLXp<@W@098#-Zpd2;T@&%AOQI(?$)wjdu&y2A(|ikY1`HNY8?xfz9Ftlk+yd= zi9K1Hc|Gy=D~;kzy=)&x*|2=C{jv3O#`;g^>*c%|kJ{c_ADU6j>hVcEwvO|Yp6uEh z{<=tf)|dRKukl#>n|W+Q zJ5cL5-x{ekkT6j=H+{yAK1&7{s`lack|9lM#;d72dtE|}(%DjBVLsXkTc-fHmCiO3 zRV}?u*7kE&=RUVtLBgA~b_dcUH%*n@Zt18BXWZ87+IscZa*#G`d0h`)wYqx(g-X5J zITk8;-8dxMC(qB@#|se7o@$Gkjsff{?P_txZE>jUU5j3|=>+9z6+IrO=ut1t*6fUk zIDJ^sJS;`+**5X&nlH_AubOSX(SeMIn3e|7BTczls4VD(USXzODT-}txb*_N>8QkK z`f9d)mZi-}uQ~O=Rj-|K0n+AKZTmpMJ<@yMyf{L*GQv*HQM| zs=u{=a8=iJKfo7L*1Rx!SkD|<(RyMgH5Q}Jp`-FIVU1N-ykiavkp`n#yP z>0nj&-Exr(i0&R;FGl^t`?O{`>XA%;8MGcYZH2H!(J6`a-x(V zV|(PeQ@L$pTgEp1(!M=m7;Zm2`RLd_eHuBdI9JE`*on{b?rQIDe%hGmZ+@h=t(~5` zytwRW?`2J>SDV1xxx@rFbZ7g7`17v2>D1XwAE%O&(cPxLz_!?VBn)?q>pNMBOsTHV z01oLT-dHoM!tm01eJ^2bwvt&fvv=^Qs(i{ERp#}QFsiT`?=sJcV!vMZDIw?2=%b|2 z%L2ZZrt+7&Tt#2n%bqxqJu#3yF_}FvpFL5{o~RFwD^yZPOdb+zFRK2I`_<|lS-gtgqQ_$I`o$c`r3s&c6@mAru`~5)>tUSBjL~?-NeRb z^K)BzG8>}04t(`38>8w}ty0v{d1`*krdB(89@{eNI_eWT7jGGfTJa5W%Y`tE+uHW^ z{9TGk>!s6r7dy8l7Kon*qe<2InSPJ=P|i5)4l6p z8ev-BrJidtE54;!D>L1_sk1KitjetTr=sZ1toZSRyY}!nGR8JgdTd9aw_pTmT6dKo z(xP|dXmmgvt1CU{^;HO+4D_*8urY`yws-e#aMbC+#p6CKU=h2fT?rTMY=(Sq+MOq43~mn1?r5^mYLJ?WNx&yfMB^o52_*Ko@N z`MDG}m)0w#qxJBi`^0hpD%f-w^*?4 z`u&4j+%Vru)2*8irF#3kzUHZPBNS>yw~w7IiZpL;aKpMg4!df!eq5bRFbwaVD%Z6{ z-xA%XA-oLpHZ?spp2w%C&p%eo*(s`KcYjWWE?^*V7XRC&VE4 z$fceeGb`UTeW~ZB%*w|mF7>R8#w*Xio0vKd7jU<@jOHERycq zwRO+8PMd+g(>+xs~uu0f3(6{NmyZbhIG`m~%3m31_mVpsx z!Nq$yNY|>Bb6PBVP%RaM=zV;2e;atdba9tRCrgTXDR8<*p=zoc_UcOu(KEHVaXA-6 zZp)1?Co`A3jKr%pcKe7@H&)SGAKB+i&pfYl(_R~MdA*$aM(VT4<+O|R4-6|v{1*%; zkZ*RbQhoT%O;>3Ys)>PTp6}9Do(*;5(4Qmh?13ux><*uOBGtP79RacE-8i5q)vBfD z!;cXg1DdIO5V z)d`Xla;ai+#j#Y2Hs~2okEPSLxbDFu_mw*3UcMS7V1=(VN2-RsJ5m%i7CCvK<8-~( zD3+(o^Ot%)lv#7r{i*8o_U#DtLX0=M#XxtG(Ks1K0)1&k?;h1jx?J3z?YKRJy{}7A z@G?B3+(~7bD~>jwd4qwW0l)R+z@?ra *8D|_h1p;+HpILL}1kFo5Kb2YY{prRo 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 delta 89887 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 diff --git a/build-aux/ax_check_compile_flag.m4 b/build-aux/ax_check_compile_flag.m4 new file mode 100644 index 00000000..bd753b34 --- /dev/null +++ b/build-aux/ax_check_compile_flag.m4 @@ -0,0 +1,53 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 6 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_VAR_IF(CACHEVAR,yes, + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/build-aux/ax_pthread.m4 b/build-aux/ax_pthread.m4 index 1598d077..9f35d139 100644 --- a/build-aux/ax_pthread.m4 +++ b/build-aux/ax_pthread.m4 @@ -14,20 +14,24 @@ # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # -# Also sets PTHREAD_CC to any special C compiler that is needed for -# multi-threaded programs (defaults to the value of CC otherwise). (This -# is necessary on AIX to use the special cc_r compiler alias.) +# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is +# needed for multi-threaded programs (defaults to the value of CC +# respectively CXX otherwise). (This is necessary on e.g. AIX to use the +# special cc_r/CC_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" +# CXX="$PTHREAD_CXX" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to @@ -83,7 +87,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 27 +#serial 31 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ @@ -105,6 +109,7 @@ if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) + AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) @@ -386,7 +391,7 @@ if test "x$ax_pthread_clang" = "xyes"; then # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do @@ -482,18 +487,28 @@ if test "x$ax_pthread_ok" = "xyes"; then [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], - [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], - [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + [ + AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) + AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) + ], + [ + AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) + AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) + ] + ) + ]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) +AC_SUBST([PTHREAD_CXX]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then diff --git a/build-aux/config.guess b/build-aux/config.guess index e94095c5..b1872139 100755 --- a/build-aux/config.guess +++ b/build-aux/config.guess @@ -1,12 +1,14 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2023 Free Software Foundation, Inc. -timestamp='2020-07-12' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2023-07-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -27,17 +29,25 @@ timestamp='2020-07-12' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] -Output the configuration name of the system \`$me' is run on. +Output the configuration name of the system '$me' is run on. Options: -h, --help print this help, then exit @@ -50,13 +60,13 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2020 Free Software Foundation, Inc. +Copyright 1992-2023 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -84,13 +94,16 @@ if test $# != 0; then exit 1 fi +# Just in case it came from the environment. +GUESS= + # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. +# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still +# use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. @@ -102,7 +115,7 @@ set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" - # shellcheck disable=SC2039 + # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || @@ -112,7 +125,7 @@ set_cc_for_build() { ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$driver" + CC_FOR_BUILD=$driver break fi done @@ -133,14 +146,12 @@ fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "$UNAME_SYSTEM" in +case $UNAME_SYSTEM in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" @@ -149,24 +160,37 @@ Linux|GNU|GNU/*) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -178,12 +202,12 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; @@ -192,13 +216,13 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` - machine="${arch}${endian}"-unknown + machine=${arch}${endian}-unknown ;; - *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; @@ -219,7 +243,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in ;; esac # Determine ABI tags. - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` @@ -230,7 +254,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "$UNAME_VERSION" in + case $UNAME_VERSION in Debian*) release='-gnu' ;; @@ -241,51 +265,57 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "$machine-${os}${release}${abi-}" - exit ;; + GUESS=$machine-${os}${release}${abi-} + ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; *:MidnightBSD:*:*) - echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; *:ekkoBSD:*:*) - echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; *:SolidBSD:*:*) - echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; *:OS108:*:*) - echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; *:MirBSD:*:*) - echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; *:Sortix:*:*) - echo "$UNAME_MACHINE"-unknown-sortix - exit ;; + GUESS=$UNAME_MACHINE-unknown-sortix + ;; *:Twizzler:*:*) - echo "$UNAME_MACHINE"-unknown-twizzler - exit ;; + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; *:Redox:*:*) - echo "$UNAME_MACHINE"-unknown-redox - exit ;; + GUESS=$UNAME_MACHINE-unknown-redox + ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + GUESS=mips-dec-osf1 + ;; alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -299,7 +329,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in + case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") @@ -336,117 +366,121 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; + GUESS=m68k-unknown-sysv4 + ;; *:[Aa]miga[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-amigaos - exit ;; + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; *:[Mm]orph[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-morphos - exit ;; + GUESS=$UNAME_MACHINE-unknown-morphos + ;; *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; + GUESS=i370-ibm-openedition + ;; *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; + GUESS=s390-ibm-zvmoe + ;; *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; + GUESS=powerpc-ibm-os400 + ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix"$UNAME_RELEASE" - exit ;; + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; + GUESS=arm-unknown-riscos + ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; + GUESS=hppa1.1-hitachi-hiuxmpp + ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; + GUESS=pyramid-pyramid-svr4 + ;; DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; + GUESS=sparc-icl-nx6 + ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux"$UNAME_RELEASE" - exit ;; + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" - exit ;; + # Japanese Language versions have a version number like '4.1.3-JL'. + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos"$UNAME_RELEASE" - exit ;; + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in + case `/bin/arch` in sun3) - echo m68k-sun-sunos"$UNAME_RELEASE" + GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) - echo sparc-sun-sunos"$UNAME_RELEASE" + GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac - exit ;; + ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos"$UNAME_RELEASE" - exit ;; + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -456,41 +490,41 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; m68k:machten:*:*) - echo m68k-apple-machten"$UNAME_RELEASE" - exit ;; + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; powerpc:machten:*:*) - echo powerpc-apple-machten"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; + GUESS=mips-dec-mach_bsd4.3 + ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix"$UNAME_RELEASE" - exit ;; + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix"$UNAME_RELEASE" - exit ;; + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix"$UNAME_RELEASE" - exit ;; + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" @@ -518,75 +552,76 @@ EOF dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos"$UNAME_RELEASE" - exit ;; + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; + GUESS=powerpc-motorola-powermax + ;; Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; + GUESS=powerpc-harris-powerunix + ;; m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; + GUESS=m88k-harris-cxux7 + ;; m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; + GUESS=m88k-motorola-sysv4 + ;; m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux"$UNAME_RELEASE" + GUESS=m88k-dg-dgux$UNAME_RELEASE else - echo m88k-dg-dguxbcs"$UNAME_RELEASE" + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else - echo i586-dg-dgux"$UNAME_RELEASE" + GUESS=i586-dg-dgux$UNAME_RELEASE fi - exit ;; + ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; + GUESS=m88k-dolphin-sysv3 + ;; M88*:*:R3*:*) # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; + GUESS=m88k-tektronix-sysv3 + ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; + GUESS=m68k-tektronix-bsd + ;; *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" - exit ;; + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; + GUESS=i386-ibm-aix + ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" - exit ;; + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build @@ -603,16 +638,16 @@ EOF EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then - echo "$SYSTEM_NAME" + GUESS=$SYSTEM_NAME else - echo rs6000-ibm-aix3.2.5 + GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 + GUESS=rs6000-ibm-aix3.2.4 else - echo rs6000-ibm-aix3.2 + GUESS=rs6000-ibm-aix3.2 fi - exit ;; + ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then @@ -620,56 +655,56 @@ EOF else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + if test -x /usr/bin/lslpp ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo "$IBM_ARCH"-ibm-aix"$IBM_REV" - exit ;; + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; + GUESS=rs6000-ibm-aix + ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) - echo romp-ibm-bsd4.4 - exit ;; + GUESS=romp-ibm-bsd4.4 + ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; + GUESS=rs6000-bull-bosx + ;; DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; + GUESS=m68k-bull-sysv3 + ;; 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; + GUESS=m68k-hp-bsd + ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; + GUESS=m68k-hp-bsd4.4 + ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - case "$UNAME_MACHINE" in + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "$sc_cpu_version" in + case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "$sc_kernel_bits" in + case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "$HP_ARCH" = "" ]; then + if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" @@ -708,7 +743,7 @@ EOF test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then set_cc_for_build @@ -729,12 +764,12 @@ EOF HP_ARCH=hppa64 fi fi - echo "$HP_ARCH"-hp-hpux"$HPUX_REV" - exit ;; + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux"$HPUX_REV" - exit ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" @@ -764,36 +799,36 @@ EOF EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; + GUESS=unknown-hitachi-hiuxwe2 + ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) - echo hppa1.1-hp-bsd - exit ;; + GUESS=hppa1.1-hp-bsd + ;; 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; + GUESS=hppa1.0-hp-bsd + ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; + GUESS=hppa1.0-hp-mpeix + ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) - echo hppa1.1-hp-osf - exit ;; + GUESS=hppa1.1-hp-osf + ;; hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; + GUESS=hppa1.0-hp-osf + ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo "$UNAME_MACHINE"-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk else - echo "$UNAME_MACHINE"-unknown-osf1 + GUESS=$UNAME_MACHINE-unknown-osf1 fi - exit ;; + ;; parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; + GUESS=hppa1.1-hp-lites + ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; + GUESS=c1-convex-bsd + ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd @@ -801,17 +836,18 @@ EOF fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; + GUESS=c34-convex-bsd + ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; + GUESS=c38-convex-bsd + ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; + GUESS=c4-convex-bsd + ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ @@ -819,112 +855,153 @@ EOF -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=sv1-cray-unicos$CRAY_REL + ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=craynv-cray-unicosmp$CRAY_REL + ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE + ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=sparc-unknown-bsdi$UNAME_RELEASE + ;; *:BSD/OS:*:*) - echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE + ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else - echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi - exit ;; + ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case "$UNAME_PROCESSOR" in + case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL + ;; i*:CYGWIN*:*) - echo "$UNAME_MACHINE"-pc-cygwin - exit ;; + GUESS=$UNAME_MACHINE-pc-cygwin + ;; *:MINGW64*:*) - echo "$UNAME_MACHINE"-pc-mingw64 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw64 + ;; *:MINGW*:*) - echo "$UNAME_MACHINE"-pc-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw32 + ;; *:MSYS*:*) - echo "$UNAME_MACHINE"-pc-msys - exit ;; + GUESS=$UNAME_MACHINE-pc-msys + ;; i*:PW*:*) - echo "$UNAME_MACHINE"-pc-pw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-pw32 + ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; *:Interix*:*) - case "$UNAME_MACHINE" in + case $UNAME_MACHINE in x86) - echo i586-pc-interix"$UNAME_RELEASE" - exit ;; + GUESS=i586-pc-interix$UNAME_RELEASE + ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix"$UNAME_RELEASE" - exit ;; + GUESS=x86_64-unknown-interix$UNAME_RELEASE + ;; IA64) - echo ia64-unknown-interix"$UNAME_RELEASE" - exit ;; + GUESS=ia64-unknown-interix$UNAME_RELEASE + ;; esac ;; i*:UWIN*:*) - echo "$UNAME_MACHINE"-pc-uwin - exit ;; + GUESS=$UNAME_MACHINE-pc-uwin + ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-pc-cygwin - exit ;; + GUESS=x86_64-pc-cygwin + ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=powerpcle-unknown-solaris2$SUN_REL + ;; *:GNU:*:*) # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" - exit ;; + GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` + GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL + ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" - exit ;; + GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC + ;; + x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-pc-managarm-mlibc" + ;; + *:[Mm]anagarm:*:*) + GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" + ;; *:Minix:*:*) - echo "$UNAME_MACHINE"-unknown-minix - exit ;; + GUESS=$UNAME_MACHINE-unknown-minix + ;; aarch64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __ARM_EABI__ + #ifdef __ARM_PCS_VFP + ABI=eabihf + #else + ABI=eabi + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; + esac + fi + GUESS=$CPU-unknown-linux-$LIBCABI + ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; @@ -937,60 +1014,72 @@ EOF esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi - exit ;; + ;; avr32*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; cris:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; crisv32:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; e2k:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; frv:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; hexagon:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-pc-linux-$LIBC + ;; ia64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; k1om:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + kvx:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + kvx:cos:*:*) + GUESS=$UNAME_MACHINE-unknown-cos + ;; + kvx:mbr:*:*) + GUESS=$UNAME_MACHINE-unknown-mbr + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m32r*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m68*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 @@ -1035,123 +1124,135 @@ EOF #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` + eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-"$LIBC" - exit ;; + GUESS=or1k-unknown-linux-$LIBC + ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; padre:Linux:*:*) - echo sparc-unknown-linux-"$LIBC" - exit ;; + GUESS=sparc-unknown-linux-$LIBC + ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-"$LIBC" - exit ;; + GUESS=hppa64-unknown-linux-$LIBC + ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; - PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; - *) echo hppa-unknown-linux-"$LIBC" ;; + PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; + PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; + *) GUESS=hppa-unknown-linux-$LIBC ;; esac - exit ;; + ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc64-unknown-linux-$LIBC + ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc-unknown-linux-$LIBC + ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc64le-unknown-linux-$LIBC + ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-"$LIBC" - exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpcle-unknown-linux-$LIBC + ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; s390:Linux:*:* | s390x:Linux:*:*) - echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-ibm-linux-$LIBC + ;; sh64*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sh*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; tile*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; vax:Linux:*:*) - echo "$UNAME_MACHINE"-dec-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-dec-linux-$LIBC + ;; x86_64:Linux:*:*) set_cc_for_build + CPU=$UNAME_MACHINE LIBCABI=$LIBC - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_X32 >/dev/null - then - LIBCABI="$LIBC"x32 - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __i386__ + ABI=x86 + #else + #ifdef __ILP32__ + ABI=x32 + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + x86) CPU=i686 ;; + x32) LIBCABI=${LIBC}x32 ;; + esac fi - echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" - exit ;; + GUESS=$CPU-pc-linux-$LIBCABI + ;; xtensa*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; + GUESS=i386-sequent-sysv4 + ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" - exit ;; + GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION + ;; i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility + # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. - echo "$UNAME_MACHINE"-pc-os2-emx - exit ;; + GUESS=$UNAME_MACHINE-pc-os2-emx + ;; i*86:XTS-300:*:STOP) - echo "$UNAME_MACHINE"-unknown-stop - exit ;; + GUESS=$UNAME_MACHINE-unknown-stop + ;; i*86:atheos:*:*) - echo "$UNAME_MACHINE"-unknown-atheos - exit ;; + GUESS=$UNAME_MACHINE-unknown-atheos + ;; i*86:syllable:*:*) - echo "$UNAME_MACHINE"-pc-syllable - exit ;; + GUESS=$UNAME_MACHINE-pc-syllable + ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=i386-unknown-lynxos$UNAME_RELEASE + ;; i*86:*DOS:*:*) - echo "$UNAME_MACHINE"-pc-msdosdjgpp - exit ;; + GUESS=$UNAME_MACHINE-pc-msdosdjgpp + ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else - echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi - exit ;; + ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in @@ -1159,12 +1260,12 @@ EOF *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" - exit ;; + GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1174,11 +1275,11 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else - echo "$UNAME_MACHINE"-pc-sysv32 + GUESS=$UNAME_MACHINE-pc-sysv32 fi - exit ;; + ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about @@ -1186,31 +1287,31 @@ EOF # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; + GUESS=i586-pc-msdosdjgpp + ;; Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; + GUESS=i386-pc-mach3 + ;; paragon:*:*:*) - echo i860-intel-osf1 - exit ;; + GUESS=i860-intel-osf1 + ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi - exit ;; + ;; mini*:CTIX:SYS*5:*) # "miniframe" - echo m68010-convergent-sysv - exit ;; + GUESS=m68010-convergent-sysv + ;; mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; + GUESS=m68k-convergent-sysv + ;; M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; + GUESS=m68k-diab-dnix + ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) @@ -1235,116 +1336,119 @@ EOF /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=m68k-unknown-lynxos$UNAME_RELEASE + ;; mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; + GUESS=m68k-atari-sysv4 + ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=sparc-unknown-lynxos$UNAME_RELEASE + ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=rs6000-unknown-lynxos$UNAME_RELEASE + ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-unknown-lynxos$UNAME_RELEASE + ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv"$UNAME_RELEASE" - exit ;; + GUESS=mips-dde-sysv$UNAME_RELEASE + ;; RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo "$UNAME_MACHINE"-sni-sysv4 + GUESS=$UNAME_MACHINE-sni-sysv4 else - echo ns32k-sni-sysv + GUESS=ns32k-sni-sysv fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + ;; + PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says - echo i586-unisys-sysv4 - exit ;; + GUESS=i586-unisys-sysv4 + ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; + GUESS=hppa1.1-stratus-sysv4 + ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; + GUESS=i860-stratus-sysv4 + ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo "$UNAME_MACHINE"-stratus-vos - exit ;; + GUESS=$UNAME_MACHINE-stratus-vos + ;; *:VOS:*:*) # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; + GUESS=hppa1.1-stratus-vos + ;; mc68*:A/UX:*:*) - echo m68k-apple-aux"$UNAME_RELEASE" - exit ;; + GUESS=m68k-apple-aux$UNAME_RELEASE + ;; news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; + GUESS=mips-sony-newsos6 + ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv"$UNAME_RELEASE" + if test -d /usr/nec; then + GUESS=mips-nec-sysv$UNAME_RELEASE else - echo mips-unknown-sysv"$UNAME_RELEASE" + GUESS=mips-unknown-sysv$UNAME_RELEASE fi - exit ;; + ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; + GUESS=powerpc-be-beos + ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; + GUESS=powerpc-apple-beos + ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; + GUESS=i586-pc-beos + ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; + GUESS=i586-pc-haiku + ;; + ppc:Haiku:*:*) # Haiku running on Apple PowerPC + GUESS=powerpc-apple-haiku + ;; + *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) + GUESS=$UNAME_MACHINE-unknown-haiku + ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx4-nec-superux$UNAME_RELEASE + ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx5-nec-superux$UNAME_RELEASE + ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx6-nec-superux$UNAME_RELEASE + ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx7-nec-superux$UNAME_RELEASE + ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx8-nec-superux$UNAME_RELEASE + ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx8r-nec-superux$UNAME_RELEASE + ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sxace-nec-superux$UNAME_RELEASE + ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-apple-rhapsody$UNAME_RELEASE + ;; *:Rhapsody:*:*) - echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE + ;; arm64:Darwin:*:*) - echo aarch64-apple-darwin"$UNAME_RELEASE" - exit ;; + GUESS=aarch64-apple-darwin$UNAME_RELEASE + ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in @@ -1359,7 +1463,7 @@ EOF else set_cc_for_build fi - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null @@ -1380,109 +1484,119 @@ EOF # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi - echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE + ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE + ;; *:QNX:*:4*) - echo i386-pc-qnx - exit ;; + GUESS=i386-pc-qnx + ;; NEO-*:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=neo-tandem-nsk$UNAME_RELEASE + ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nse-tandem-nsk$UNAME_RELEASE + ;; NSR-*:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsr-tandem-nsk$UNAME_RELEASE + ;; NSV-*:NONSTOP_KERNEL:*:*) - echo nsv-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsv-tandem-nsk$UNAME_RELEASE + ;; NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsx-tandem-nsk$UNAME_RELEASE + ;; *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; + GUESS=mips-compaq-nonstopux + ;; BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; + GUESS=bs2000-siemens-sysv + ;; DS/*:UNIX_System_V:*:*) - echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE + ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - # shellcheck disable=SC2154 - if test "$cputype" = 386; then + if test "${cputype-}" = 386; then UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" + elif test "x${cputype-}" != x; then + UNAME_MACHINE=$cputype fi - echo "$UNAME_MACHINE"-unknown-plan9 - exit ;; + GUESS=$UNAME_MACHINE-unknown-plan9 + ;; *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; + GUESS=pdp10-unknown-tops10 + ;; *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; + GUESS=pdp10-unknown-tenex + ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; + GUESS=pdp10-dec-tops20 + ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; + GUESS=pdp10-xkl-tops20 + ;; *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; + GUESS=pdp10-unknown-tops20 + ;; *:ITS:*:*) - echo pdp10-unknown-its - exit ;; + GUESS=pdp10-unknown-its + ;; SEI:*:*:SEIUX) - echo mips-sei-seiux"$UNAME_RELEASE" - exit ;; + GUESS=mips-sei-seiux$UNAME_RELEASE + ;; *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; + DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL + ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "$UNAME_MACHINE" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; + case $UNAME_MACHINE in + A*) GUESS=alpha-dec-vms ;; + I*) GUESS=ia64-dec-vms ;; + V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; + GUESS=i386-pc-xenix + ;; i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" - exit ;; + SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` + GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL + ;; i*86:rdos:*:*) - echo "$UNAME_MACHINE"-pc-rdos - exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros - exit ;; + GUESS=$UNAME_MACHINE-pc-rdos + ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; + *:AROS:*:*) + GUESS=$UNAME_MACHINE-unknown-aros + ;; x86_64:VMkernel:*:*) - echo "$UNAME_MACHINE"-unknown-esx - exit ;; + GUESS=$UNAME_MACHINE-unknown-esx + ;; amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; + GUESS=x86_64-unknown-onefs + ;; *:Unleashed:*:*) - echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE + ;; esac +# Do we have a guess based on uname results? +if test "x$GUESS" != x; then + echo "$GUESS" + exit +fi + # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" </dev/null && SYSTEM_NAME=`$dummy` && +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. @@ -1622,7 +1736,7 @@ test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 -case "$UNAME_MACHINE:$UNAME_SYSTEM" in +case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 + echo "Invalid configuration '$1': more than four components" >&2 exit 1 ;; *-*-*-*) @@ -134,7 +145,8 @@ case $1 in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ - | storm-chaos* | os2-emx* | rtmk-nova*) + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ + | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; @@ -163,6 +175,10 @@ case $1 in basic_machine=$field1 basic_os=$field2 ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ @@ -922,11 +938,13 @@ case $basic_machine in *-*) # shellcheck disable=SC2162 + saved_IFS=$IFS IFS="-" read cpu vendor <&2 + echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 exit 1 ;; esac @@ -1278,34 +1284,44 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x$basic_os != x ] +if test x$basic_os != x then -# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux - os=`echo $basic_os | sed -e 's|gnu/linux|gnu|'` + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto - os=`echo $basic_os | sed -e 's|nto-qnx|qnx|'` + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 + saved_IFS=$IFS IFS="-" read kernel os <&2 + echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 exit 1 ;; esac @@ -1739,25 +1756,52 @@ esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in - linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ + | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* ) + ;; + uclinux-uclibc* ) + ;; + managarm-mlibc* | managarm-kernel* ) + ;; + windows*-gnu* | windows*-msvc*) ;; - -dietlibc* | -newlib* | -musl* | -uclibc* ) + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. - echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 + exit 1 + ;; + -kernel* ) + echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 + exit 1 + ;; + *-kernel* ) + echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 + exit 1 + ;; + *-msvc* ) + echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; nto-qnx*) ;; + os2-emx) + ;; *-eabi* | *-gnueabi*) ;; + none-coff* | none-elf*) + # None (no kernel, i.e. freestanding / bare metal), + # can be paired with an output format "OS" + ;; -*) # Blank kernel with real OS is always fine. ;; *-*) - echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac diff --git a/build-aux/ocaml_version.m4 b/build-aux/ocaml_version.m4 index 8c69847c..5d12d190 100644 --- a/build-aux/ocaml_version.m4 +++ b/build-aux/ocaml_version.m4 @@ -31,9 +31,9 @@ m4_define([OCAML__DEVELOPMENT_VERSION], [false]) # integers. They MUST NOT be left-padded with zeros and all of them, # including the patchlevel, are mandatory. -m4_define([OCAML__VERSION_MAJOR], [4]) -m4_define([OCAML__VERSION_MINOR], [14]) -m4_define([OCAML__VERSION_PATCHLEVEL], [1]) +m4_define([OCAML__VERSION_MAJOR], [5]) +m4_define([OCAML__VERSION_MINOR], [2]) +m4_define([OCAML__VERSION_PATCHLEVEL], [0]) # Note that the OCAML__VERSION_EXTRA string defined below is always empty # for officially-released versions of OCaml. m4_define([OCAML__VERSION_EXTRA], []) @@ -88,3 +88,38 @@ m4_define([OCAML__RELEASE_EXTRA], m4_if(OCAML__VERSION_EXTRA,[],[None], ['Some (]m4_if(OCAML__VERSION_EXTRA_PREFIX,+,[Plus], [Tilde])[, "]OCAML__VERSION_EXTRA[")']))])) + +# Magic numbers for the different file formats + +# The magic numbers are made of three components: +# - An 8-bytes prefix, common to all of them +# - A 1-byte kind, specifying the file type (exeecutable, cmi, cmo, etc.) +# - A 3-bytes version number + +m4_define([MAGIC_NUMBER__PREFIX], [Caml1999]) +m4_define([MAGIC_NUMBER__VERSION], [034]) + +# The following macro is used to define all our magic numbers +# Its first argument is the name of the file type described by that +# magic number and its second argument is the character used to +# characterize that file type + +AC_DEFUN([DEFINE_MAGIC_NUMBER], + [m4_define([$1__MAGIC_NUMBER], + [MAGIC_NUMBER__PREFIX[]$2[]MAGIC_NUMBER__VERSION])]) + +m4_define(EXEC__FORMAT, [X]) +DEFINE_MAGIC_NUMBER([EXEC], EXEC__FORMAT) +DEFINE_MAGIC_NUMBER([CMI], [I]) +DEFINE_MAGIC_NUMBER([CMO], [O]) +DEFINE_MAGIC_NUMBER([CMA], [A]) +DEFINE_MAGIC_NUMBER([CMX_CLAMBDA], [Y]) +DEFINE_MAGIC_NUMBER([CMX_FLAMBDA], [y]) +DEFINE_MAGIC_NUMBER([CMXA_CLAMBDA], [Z]) +DEFINE_MAGIC_NUMBER([CMXA_FLAMBDA], [z]) +DEFINE_MAGIC_NUMBER([AST_IMPL], [M]) +DEFINE_MAGIC_NUMBER([AST_INTF], [N]) +DEFINE_MAGIC_NUMBER([CMXS], [D]) +DEFINE_MAGIC_NUMBER([CMT], [T]) +DEFINE_MAGIC_NUMBER([LINEAR], [L]) +m4_define([MAGIC_NUMBER__LENGTH], m4_len(EXEC__MAGIC_NUMBER)) diff --git a/bytecomp/bytegen.ml b/bytecomp/bytegen.ml index 27e170ff..434f5ca2 100644 --- a/bytecomp/bytegen.ml +++ b/bytecomp/bytegen.ml @@ -18,7 +18,6 @@ open Misc open Asttypes open Primitive -open Types open Lambda open Switch open Instruct @@ -34,20 +33,53 @@ let new_label () = (**** Operations on compilation environments. ****) let empty_env = - { ce_stack = Ident.empty; ce_heap = Ident.empty; ce_rec = Ident.empty } + { ce_stack = Ident.empty; ce_closure = Not_in_closure } (* Add a stack-allocated variable *) let add_var id pos env = { ce_stack = Ident.add id pos env.ce_stack; - ce_heap = env.ce_heap; - ce_rec = env.ce_rec } + ce_closure = env.ce_closure } let rec add_vars idlist pos env = match idlist with [] -> env | id :: rem -> add_vars rem (pos + 1) (add_var id pos env) +(* Compute the closure environment *) + +let rec add_positions entries pos_to_entry ~pos ~delta = function + | [] -> entries, pos + | id :: rem -> + let entries = + Ident.add id (pos_to_entry pos) entries + in + add_positions entries pos_to_entry ~pos:(pos + delta) ~delta rem + +type function_definition = + | Single_non_recursive + | Multiple_recursive of Ident.t list + +let closure_entries fun_defs fvs = + let funct_entries, pos_end_functs = + match fun_defs with + | Single_non_recursive -> + (* No need to store the function in the environment, but we still need to + reserve a slot in the closure block *) + Ident.empty, 3 + | Multiple_recursive functs -> + add_positions Ident.empty (fun pos -> Function pos) ~pos:0 ~delta:3 functs + in + (* Note: [pos_end_functs] is the position where we would store the next + function if there was one, and points after an eventual infix tag. + Since that was the last function, we don't need the last infix tag + and start storing free variables at [pos_end_functs - 1]. *) + let all_entries, _end_pos = + add_positions funct_entries (fun pos -> Free_variable pos) + ~pos:(pos_end_functs - 1) ~delta:1 fvs + in + all_entries + (**** Examination of the continuation ****) (* Return a label to the beginning of the given continuation. @@ -109,7 +141,8 @@ let rec is_tailcall = function from the tail call optimization? *) let preserve_tailcall_for_prim = function - | Popaque | Psequor | Psequand -> + | Popaque | Psequor | Psequand + | Prunstack | Pperform | Presume | Preperform -> true | Pbytes_to_string | Pbytes_of_string | Pignore | Pgetglobal _ | Psetglobal _ | Pmakeblock _ | Pfield _ | Pfield_computed | Psetfield _ @@ -130,7 +163,9 @@ let preserve_tailcall_for_prim = function | Pbytes_load_32 _ | Pbytes_load_64 _ | Pbytes_set_16 _ | Pbytes_set_32 _ | Pbytes_set_64 _ | Pbigstring_load_16 _ | Pbigstring_load_32 _ | Pbigstring_load_64 _ | Pbigstring_set_16 _ | Pbigstring_set_32 _ - | Pbigstring_set_64 _ | Pctconst _ | Pbswap16 | Pbbswap _ | Pint_as_pointer -> + | Pbigstring_set_64 _ | Pctconst _ | Pbswap16 | Pbbswap _ | Pint_as_pointer + | Patomic_exchange | Patomic_cas | Patomic_fetch_add | Patomic_load _ + | Pdls_get -> false (* Add a Kpop N instruction in front of a continuation *) @@ -154,78 +189,6 @@ let rec push_dummies n k = match n with | _ -> Kconst const_unit::Kpush::push_dummies (n-1) k -(**** Auxiliary for compiling "let rec" ****) - -type rhs_kind = - | RHS_block of int - | RHS_infix of { blocksize : int; offset : int } - | RHS_floatblock of int - | RHS_nonrec - | RHS_function of int * int -;; - -let rec check_recordwith_updates id e = - match e with - | Lsequence (Lprim ((Psetfield _ | Psetfloatfield _), [Lvar id2; _], _), cont) - -> id2 = id && check_recordwith_updates id cont - | Lvar id2 -> id2 = id - | _ -> false -;; - -let rec size_of_lambda env = function - | Lvar id -> - begin try Ident.find_same id env with Not_found -> RHS_nonrec end - | Lfunction{params} as funct -> - RHS_function (2 + Ident.Set.cardinal(free_variables funct), - List.length params) - | Llet (Strict, _k, id, Lprim (Pduprecord (kind, size), _, _), body) - when check_recordwith_updates id body -> - begin match kind with - | Record_regular | Record_inlined _ -> RHS_block size - | Record_unboxed _ -> assert false - | Record_float -> RHS_floatblock size - | Record_extension _ -> RHS_block (size + 1) - end - | Llet(_str, _k, id, arg, body) -> - size_of_lambda (Ident.add id (size_of_lambda env arg) env) body - (* See the Lletrec case of comp_expr *) - | Lletrec(bindings, body) when - List.for_all (function (_, Lfunction _) -> true | _ -> false) bindings -> - (* let rec of functions *) - let fv = - Ident.Set.elements (free_variables (Lletrec(bindings, lambda_unit))) in - (* See Instruct(CLOSUREREC) in interp.c *) - let blocksize = List.length bindings * 3 - 1 + List.length fv in - let offsets = List.mapi (fun i (id, _e) -> (id, i * 3)) bindings in - let env = List.fold_right (fun (id, offset) env -> - Ident.add id (RHS_infix { blocksize; offset }) env) offsets env in - size_of_lambda env body - | Lletrec(bindings, body) -> - let env = List.fold_right - (fun (id, e) env -> Ident.add id (size_of_lambda env e) env) - bindings env - in - size_of_lambda env body - | Lprim(Pmakeblock _, args, _) -> RHS_block (List.length args) - | Lprim (Pmakearray ((Paddrarray|Pintarray), _), args, _) -> - RHS_block (List.length args) - | Lprim (Pmakearray (Pfloatarray, _), args, _) -> - RHS_floatblock (List.length args) - | Lprim (Pmakearray (Pgenarray, _), _, _) -> - (* Pgenarray is excluded from recursive bindings by the - check in Translcore.check_recursive_lambda *) - RHS_nonrec - | Lprim (Pduprecord ((Record_regular | Record_inlined _), size), _, _) -> - RHS_block size - | Lprim (Pduprecord (Record_unboxed _, _), _, _) -> - assert false - | Lprim (Pduprecord (Record_extension _, size), _, _) -> - RHS_block (size + 1) - | Lprim (Pduprecord (Record_float, size), _, _) -> RHS_floatblock size - | Levent (lam, _) -> size_of_lambda env lam - | Lsequence (_lam, lam') -> size_of_lambda env lam' - | _ -> RHS_nonrec - (**** Merging consecutive events ****) let copy_event ev kind info repr = @@ -321,28 +284,43 @@ let add_pseudo_event loc modname c = (**** Compilation of a lambda expression ****) -let try_blocks = ref [] (* list of stack size for each nested try block *) +type stack_info = { + try_blocks : int list; + (* list of stack size for each nested try block *) + sz_static_raises : (int * (int * int * int list)) list; + (* association staticraise numbers -> (lbl,size of stack, try_blocks *) + max_stack_used : int ref; + (* Maximal stack size reached during the current function body *) +} + +let create_stack_info () = { + try_blocks = []; + sz_static_raises = []; + max_stack_used = ref 0 +} (* association staticraise numbers -> (lbl,size of stack, try_blocks *) -let sz_static_raises = ref [] - -let push_static_raise i lbl_handler sz = - sz_static_raises := (i, (lbl_handler, sz, !try_blocks)) :: !sz_static_raises +let push_static_raise stack_info i lbl_handler sz = + { stack_info + with + sz_static_raises = (i, (lbl_handler, sz, stack_info.try_blocks)) + :: stack_info.sz_static_raises + } -let find_raise_label i = +let find_raise_label stack_info i = try - List.assoc i !sz_static_raises + List.assoc i stack_info.sz_static_raises with | Not_found -> Misc.fatal_error ("exit("^Int.to_string i^") outside appropriated catch") (* Will the translation of l lead to a jump to label ? *) -let code_as_jump l sz = match l with +let code_as_jump stack_info l sz = match l with | Lstaticraise (i,[]) -> - let label,size,tb = find_raise_label i in - if sz = size && tb == !try_blocks then + let label,size,tb = find_raise_label stack_info i in + if sz = size && tb == stack_info.try_blocks then Some label else None @@ -354,9 +332,8 @@ type function_to_compile = { params: Ident.t list; (* function parameters *) body: lambda; (* the function body *) label: label; (* the label of the function entry *) - free_vars: Ident.t list; (* free variables of the function *) - num_defs: int; (* number of mutually recursive definitions *) - rec_vars: Ident.t list; (* mutually recursive fn names *) + entries: closure_entry Ident.tbl; (* the offsets for the free variables + and mutually recursive functions *) rec_pos: int } (* rank in recursive definition *) let functions_to_compile = (Stack.create () : function_to_compile Stack.t) @@ -365,10 +342,9 @@ let functions_to_compile = (Stack.create () : function_to_compile Stack.t) let compunit_name = ref "" -(* Maximal stack size reached during the current function body *) - -let max_stack_used = ref 0 - +let check_stack stack_info sz = + let curr = stack_info.max_stack_used in + if sz > !curr then curr := sz (* Sequence of string tests *) @@ -383,7 +359,8 @@ let comp_bint_primitive bi suff args = | Pint64 -> "caml_int64_" in Kccall(pref ^ suff, List.length args) -let comp_primitive p args = +let comp_primitive stack_info p sz args = + check_stack stack_info sz; match p with Pgetglobal id -> Kgetglobal id | Psetglobal id -> Ksetglobal id @@ -391,13 +368,16 @@ let comp_primitive p args = | Pcompare_ints -> Kccall("caml_int_compare", 2) | Pcompare_floats -> Kccall("caml_float_compare", 2) | Pcompare_bints bi -> comp_bint_primitive bi "compare" args - | Pfield n -> Kgetfield n + | Pfield(n, _ptr, _mut) -> Kgetfield n | Pfield_computed -> Kgetvectitem | Psetfield(n, _ptr, _init) -> Ksetfield n | Psetfield_computed(_ptr, _init) -> Ksetvectitem | Psetfloatfield (n, _init) -> Ksetfloatfield n | Pduprecord _ -> Kccall("caml_obj_dup", 1) | Pccall p -> Kccall(p.prim_name, p.prim_arity) + | Pperform -> + check_stack stack_info (sz + 4); + Kperform | Pnegint -> Knegint | Paddint -> Kaddint | Psubint -> Ksubint @@ -508,9 +488,15 @@ let comp_primitive p args = | Pint_as_pointer -> Kccall("caml_int_as_pointer", 1) | Pbytes_to_string -> Kccall("caml_string_of_bytes", 1) | Pbytes_of_string -> Kccall("caml_bytes_of_string", 1) + | Patomic_load _ -> Kccall("caml_atomic_load", 1) + | Patomic_exchange -> Kccall("caml_atomic_exchange", 2) + | Patomic_cas -> Kccall("caml_atomic_cas", 3) + | Patomic_fetch_add -> Kccall("caml_atomic_fetch_add", 2) + | Pdls_get -> Kccall("caml_domain_dls_get", 1) (* The cases below are handled in [comp_expr] before the [comp_primitive] call (in the order in which they appear below), so they should never be reached in this function. *) + | Prunstack | Presume | Preperform | Pignore | Popaque | Pnot | Psequand | Psequor | Praise _ @@ -537,41 +523,45 @@ module Storer = cont = list of instructions to execute afterwards Result = list of instructions that evaluate exp, then perform cont. *) -let rec comp_expr env exp sz cont = - if sz > !max_stack_used then max_stack_used := sz; +let rec comp_expr stack_info env exp sz cont = + check_stack stack_info sz; match exp with Lvar id | Lmutvar id -> begin try let pos = Ident.find_same id env.ce_stack in Kacc(sz - pos) :: cont with Not_found -> - try - let pos = Ident.find_same id env.ce_heap in - Kenvacc(pos) :: cont - with Not_found -> - try - let ofs = Ident.find_same id env.ce_rec in - Koffsetclosure(ofs) :: cont - with Not_found -> + let not_found () = fatal_error ("Bytegen.comp_expr: var " ^ Ident.unique_name id) + in + match env.ce_closure with + | Not_in_closure -> not_found () + | In_closure { entries; env_pos } -> + match Ident.find_same id entries with + | Free_variable pos -> + Kenvacc(pos - env_pos) :: cont + | Function pos -> + Koffsetclosure(pos - env_pos) :: cont + | exception Not_found -> not_found () end | Lconst cst -> Kconst cst :: cont | Lapply{ap_func = func; ap_args = args} -> let nargs = List.length args in if is_tailcall cont then begin - comp_args env args sz - (Kpush :: comp_expr env func (sz + nargs) + comp_args stack_info env args sz + (Kpush :: comp_expr stack_info env func (sz + nargs) (Kappterm(nargs, sz + nargs) :: discard_dead_code cont)) end else begin if nargs < 4 then - comp_args env args sz - (Kpush :: comp_expr env func (sz + nargs) (Kapply nargs :: cont)) + comp_args stack_info env args sz + (Kpush :: + comp_expr stack_info env func (sz + nargs) (Kapply nargs :: cont)) else begin let (lbl, cont1) = label_code cont in Kpush_retaddr lbl :: - comp_args env args (sz + 3) - (Kpush :: comp_expr env func (sz + 3 + nargs) + comp_args stack_info env args (sz + 3) + (Kpush :: comp_expr stack_info env func (sz + 3 + nargs) (Kapply nargs :: cont1)) end end @@ -585,158 +575,108 @@ let rec comp_expr env exp sz cont = | _ -> (Kgetdynmet, met::obj::args) in if is_tailcall cont then - comp_args env args' sz + comp_args stack_info env args' sz (getmethod :: Kappterm(nargs, sz + nargs) :: discard_dead_code cont) else if nargs < 4 then - comp_args env args' sz + comp_args stack_info env args' sz (getmethod :: Kapply nargs :: cont) else begin let (lbl, cont1) = label_code cont in Kpush_retaddr lbl :: - comp_args env args' (sz + 3) + comp_args stack_info env args' (sz + 3) (getmethod :: Kapply nargs :: cont1) end | Lfunction{params; body; loc} -> (* assume kind = Curried *) let cont = add_pseudo_event loc !compunit_name cont in let lbl = new_label() in let fv = Ident.Set.elements(free_variables exp) in + let entries = closure_entries Single_non_recursive fv in let to_compile = { params = List.map fst params; body = body; label = lbl; - free_vars = fv; num_defs = 1; rec_vars = []; rec_pos = 0 } in + entries = entries; rec_pos = 0 } in Stack.push to_compile functions_to_compile; - comp_args env (List.map (fun n -> Lvar n) fv) sz + comp_args stack_info env (List.map (fun n -> Lvar n) fv) sz (Kclosure(lbl, List.length fv) :: cont) | Llet(_, _k, id, arg, body) | Lmutlet(_k, id, arg, body) -> - comp_expr env arg sz - (Kpush :: comp_expr (add_var id (sz+1) env) body (sz+1) + comp_expr stack_info env arg sz + (Kpush :: comp_expr stack_info (add_var id (sz+1) env) body (sz+1) (add_pop 1 cont)) | Lletrec(decl, body) -> let ndecl = List.length decl in - if List.for_all (function (_, Lfunction _) -> true | _ -> false) - decl then begin - (* let rec of functions *) - let fv = - Ident.Set.elements (free_variables (Lletrec(decl, lambda_unit))) in - let rec_idents = List.map (fun (id, _lam) -> id) decl in - let rec comp_fun pos = function - [] -> [] - | (_id, Lfunction{params; body}) :: rem -> - let lbl = new_label() in - let to_compile = - { params = List.map fst params; body = body; label = lbl; - free_vars = fv; num_defs = ndecl; rec_vars = rec_idents; - rec_pos = pos} in - Stack.push to_compile functions_to_compile; - lbl :: comp_fun (pos + 1) rem - | _ -> assert false in - let lbls = comp_fun 0 decl in - comp_args env (List.map (fun n -> Lvar n) fv) sz - (Kclosurerec(lbls, List.length fv) :: - (comp_expr (add_vars rec_idents (sz+1) env) body (sz + ndecl) - (add_pop ndecl cont))) - end else begin - let decl_size = - List.map (fun (id, exp) -> (id, exp, size_of_lambda Ident.empty exp)) - decl in - let rec comp_init new_env sz = function - | [] -> comp_nonrec new_env sz ndecl decl_size - | (id, _exp, RHS_floatblock blocksize) :: rem -> - Kconst(Const_base(Const_int blocksize)) :: - Kccall("caml_alloc_dummy_float", 1) :: Kpush :: - comp_init (add_var id (sz+1) new_env) (sz+1) rem - | (id, _exp, RHS_block blocksize) :: rem -> - Kconst(Const_base(Const_int blocksize)) :: - Kccall("caml_alloc_dummy", 1) :: Kpush :: - comp_init (add_var id (sz+1) new_env) (sz+1) rem - | (id, _exp, RHS_infix { blocksize; offset }) :: rem -> - Kconst(Const_base(Const_int offset)) :: - Kpush :: - Kconst(Const_base(Const_int blocksize)) :: - Kccall("caml_alloc_dummy_infix", 2) :: Kpush :: - comp_init (add_var id (sz+1) new_env) (sz+1) rem - | (id, _exp, RHS_function (blocksize,arity)) :: rem -> - Kconst(Const_base(Const_int arity)) :: - Kpush :: - Kconst(Const_base(Const_int blocksize)) :: - Kccall("caml_alloc_dummy_function", 2) :: Kpush :: - comp_init (add_var id (sz+1) new_env) (sz+1) rem - | (id, _exp, RHS_nonrec) :: rem -> - Kconst(Const_base(Const_int 0)) :: Kpush :: - comp_init (add_var id (sz+1) new_env) (sz+1) rem - and comp_nonrec new_env sz i = function - | [] -> comp_rec new_env sz ndecl decl_size - | (_id, _exp, (RHS_block _ | RHS_infix _ | - RHS_floatblock _ | RHS_function _)) - :: rem -> - comp_nonrec new_env sz (i-1) rem - | (_id, exp, RHS_nonrec) :: rem -> - comp_expr new_env exp sz - (Kassign (i-1) :: comp_nonrec new_env sz (i-1) rem) - and comp_rec new_env sz i = function - | [] -> comp_expr new_env body sz (add_pop ndecl cont) - | (_id, exp, (RHS_block _ | RHS_infix _ | - RHS_floatblock _ | RHS_function _)) - :: rem -> - comp_expr new_env exp sz - (Kpush :: Kacc i :: Kccall("caml_update_dummy", 2) :: - comp_rec new_env sz (i-1) rem) - | (_id, _exp, RHS_nonrec) :: rem -> - comp_rec new_env sz (i-1) rem - in - comp_init env sz decl_size - end + let fv = + Ident.Set.elements (free_variables (Lletrec(decl, lambda_unit))) in + let rec_idents = List.map (fun { id } -> id) decl in + let entries = + closure_entries (Multiple_recursive rec_idents) fv + in + let rec comp_fun pos = function + [] -> [] + | { def = {params; body} } :: rem -> + let lbl = new_label() in + let to_compile = + { params = List.map fst params; body = body; label = lbl; + entries = entries; rec_pos = pos} in + Stack.push to_compile functions_to_compile; + lbl :: comp_fun (pos + 1) rem + in + let lbls = comp_fun 0 decl in + comp_args stack_info env (List.map (fun n -> Lvar n) fv) sz + (Kclosurerec(lbls, List.length fv) :: + (comp_expr stack_info + (add_vars rec_idents (sz+1) env) body (sz + ndecl) + (add_pop ndecl cont))) | Lprim(Popaque, [arg], _) -> - comp_expr env arg sz cont + comp_expr stack_info env arg sz cont | Lprim(Pignore, [arg], _) -> - comp_expr env arg sz (add_const_unit cont) + comp_expr stack_info env arg sz (add_const_unit cont) | Lprim(Pnot, [arg], _) -> let newcont = match cont with Kbranchif lbl :: cont1 -> Kbranchifnot lbl :: cont1 | Kbranchifnot lbl :: cont1 -> Kbranchif lbl :: cont1 | _ -> Kboolnot :: cont in - comp_expr env arg sz newcont + comp_expr stack_info env arg sz newcont | Lprim(Psequand, [exp1; exp2], _) -> begin match cont with Kbranchifnot lbl :: _ -> - comp_expr env exp1 sz (Kbranchifnot lbl :: - comp_expr env exp2 sz cont) + comp_expr stack_info env exp1 sz (Kbranchifnot lbl :: + comp_expr stack_info env exp2 sz cont) | Kbranchif lbl :: cont1 -> let (lbl2, cont2) = label_code cont1 in - comp_expr env exp1 sz (Kbranchifnot lbl2 :: - comp_expr env exp2 sz (Kbranchif lbl :: cont2)) + comp_expr stack_info env exp1 sz (Kbranchifnot lbl2 :: + comp_expr stack_info env exp2 sz (Kbranchif lbl :: cont2)) | _ -> let (lbl, cont1) = label_code cont in - comp_expr env exp1 sz (Kstrictbranchifnot lbl :: - comp_expr env exp2 sz cont1) + comp_expr stack_info env exp1 sz (Kstrictbranchifnot lbl :: + comp_expr stack_info env exp2 sz cont1) end | Lprim(Psequor, [exp1; exp2], _) -> begin match cont with Kbranchif lbl :: _ -> - comp_expr env exp1 sz (Kbranchif lbl :: - comp_expr env exp2 sz cont) + comp_expr stack_info env exp1 sz (Kbranchif lbl :: + comp_expr stack_info env exp2 sz cont) | Kbranchifnot lbl :: cont1 -> let (lbl2, cont2) = label_code cont1 in - comp_expr env exp1 sz (Kbranchif lbl2 :: - comp_expr env exp2 sz (Kbranchifnot lbl :: cont2)) + comp_expr stack_info env exp1 sz (Kbranchif lbl2 :: + comp_expr stack_info env exp2 sz (Kbranchifnot lbl :: cont2)) | _ -> let (lbl, cont1) = label_code cont in - comp_expr env exp1 sz (Kstrictbranchif lbl :: - comp_expr env exp2 sz cont1) + comp_expr stack_info env exp1 sz (Kstrictbranchif lbl :: + comp_expr stack_info env exp2 sz cont1) end | Lprim(Praise k, [arg], _) -> - comp_expr env arg sz (Kraise k :: discard_dead_code cont) + comp_expr stack_info env arg sz (Kraise k :: discard_dead_code cont) | Lprim(Paddint, [arg; Lconst(Const_base(Const_int n))], _) when is_immed n -> - comp_expr env arg sz (Koffsetint n :: cont) + comp_expr stack_info env arg sz (Koffsetint n :: cont) | Lprim(Psubint, [arg; Lconst(Const_base(Const_int n))], _) when is_immed (-n) -> - comp_expr env arg sz (Koffsetint (-n) :: cont) + comp_expr stack_info env arg sz (Koffsetint (-n) :: cont) | Lprim (Poffsetint n, [arg], _) when not (is_immed n) -> - comp_expr env arg sz + comp_expr stack_info env arg sz (Kpush:: Kconst (Const_base (Const_int n)):: Kaddint::cont) @@ -744,32 +684,74 @@ let rec comp_expr env exp sz cont = let cont = add_pseudo_event loc !compunit_name cont in begin match kind with Pintarray | Paddrarray -> - comp_args env args sz (Kmakeblock(List.length args, 0) :: cont) + comp_args stack_info env args sz + (Kmakeblock(List.length args, 0) :: cont) | Pfloatarray -> - comp_args env args sz (Kmakefloatblock(List.length args) :: cont) + comp_args stack_info env args sz + (Kmakefloatblock(List.length args) :: cont) | Pgenarray -> if args = [] then Kmakeblock(0, 0) :: cont - else comp_args env args sz + else comp_args stack_info env args sz (Kmakeblock(List.length args, 0) :: Kccall("caml_make_array", 1) :: cont) end + | Lprim(Presume, args, _) -> + let nargs = List.length args - 1 in + assert (nargs = 3); + if is_tailcall cont then begin + (* Resumeterm itself only pushes 2 words, but perform adds another *) + check_stack stack_info 3; + comp_args stack_info env args sz + (Kresumeterm(sz + nargs) :: discard_dead_code cont) + end else begin + (* Resume itself only pushes 2 words, but perform adds another *) + check_stack stack_info (sz + nargs + 3); + comp_args stack_info env args sz (Kresume :: cont) + end + | Lprim(Prunstack, args, _) -> + let nargs = List.length args in + assert (nargs = 3); + if is_tailcall cont then begin + (* Resumeterm itself only pushes 2 words, but perform adds another *) + check_stack stack_info 3; + Kconst const_unit :: Kpush :: + comp_args stack_info env args (sz + 1) + (Kresumeterm(sz + nargs) :: discard_dead_code cont) + end else begin + (* Resume itself only pushes 2 words, but perform adds another *) + check_stack stack_info (sz + nargs + 3); + Kconst const_unit :: Kpush :: + comp_args stack_info env args (sz + 1) (Kresume :: cont) + end + | Lprim(Preperform, args, _) -> + let nargs = List.length args - 1 in + assert (nargs = 2); + check_stack stack_info (sz + 3); + if is_tailcall cont then + comp_args stack_info env args sz + (Kreperformterm(sz + nargs) :: discard_dead_code cont) + else + fatal_error "Reperform used in non-tail position" | Lprim (Pduparray (kind, mutability), [Lprim (Pmakearray (kind',_),args,_)], loc) -> assert (kind = kind'); - comp_expr env (Lprim (Pmakearray (kind, mutability), args, loc)) sz cont + comp_expr stack_info env + (Lprim (Pmakearray (kind, mutability), args, loc)) sz cont | Lprim (Pduparray _, [arg], loc) -> let prim_obj_dup = Primitive.simple ~name:"caml_obj_dup" ~arity:1 ~alloc:true in - comp_expr env (Lprim (Pccall prim_obj_dup, [arg], loc)) sz cont + comp_expr stack_info env (Lprim (Pccall prim_obj_dup, [arg], loc)) sz cont | Lprim (Pduparray _, _, _) -> Misc.fatal_error "Bytegen.comp_expr: Pduparray takes exactly one arg" (* Integer first for enabling further optimization (cf. emitcode.ml) *) | Lprim (Pintcomp c, [arg ; (Lconst _ as k)], _) -> let p = Pintcomp (swap_integer_comparison c) and args = [k ; arg] in - comp_args env args sz (comp_primitive p args :: cont) + let nargs = List.length args - 1 in + comp_args stack_info env args sz + (comp_primitive stack_info p (sz + nargs - 1) args :: cont) | Lprim (Pfloatcomp cmp, args, _) -> let cont = match cmp with @@ -784,15 +766,18 @@ let rec comp_expr env exp sz cont = | CFge -> Kccall("caml_ge_float", 2) :: cont | CFnge -> Kccall("caml_ge_float", 2) :: Kboolnot :: cont in - comp_args env args sz cont + comp_args stack_info env args sz cont | Lprim(Pmakeblock(tag, _mut, _), args, loc) -> let cont = add_pseudo_event loc !compunit_name cont in - comp_args env args sz (Kmakeblock(List.length args, tag) :: cont) + comp_args stack_info env args sz + (Kmakeblock(List.length args, tag) :: cont) | Lprim(Pfloatfield n, args, loc) -> let cont = add_pseudo_event loc !compunit_name cont in - comp_args env args sz (Kgetfloatfield n :: cont) + comp_args stack_info env args sz (Kgetfloatfield n :: cont) | Lprim(p, args, _) -> - comp_args env args sz (comp_primitive p args :: cont) + let nargs = List.length args - 1 in + comp_args stack_info env args sz + (comp_primitive stack_info p (sz + nargs - 1) args :: cont) | Lstaticcatch (body, (i, vars) , handler) -> let vars = List.map fst vars in let nvars = List.length vars in @@ -802,27 +787,29 @@ let rec comp_expr env exp sz cont = let lbl_handler, cont2 = label_code (comp_expr + stack_info (add_vars vars (sz+1) env) handler (sz+nvars) (add_pop nvars cont1)) in - push_static_raise i lbl_handler (sz+nvars); + let stack_info = + push_static_raise stack_info i lbl_handler (sz+nvars) in push_dummies nvars - (comp_expr env body (sz+nvars) + (comp_expr stack_info env body (sz+nvars) (add_pop nvars (branch1 :: cont2))) end else begin (* small optimization for nvars = 1 *) let var = match vars with [var] -> var | _ -> assert false in let lbl_handler, cont2 = label_code - (Kpush::comp_expr + (Kpush::comp_expr stack_info (add_var var (sz+1) env) handler (sz+1) (add_pop 1 cont1)) in - push_static_raise i lbl_handler sz; - comp_expr env body sz (branch1 :: cont2) + let stack_info = + push_static_raise stack_info i lbl_handler sz in + comp_expr stack_info env body sz (branch1 :: cont2) end in - sz_static_raises := List.tl !sz_static_raises ; r | Lstaticraise (i, args) -> let cont = discard_dead_code cont in - let label,size,tb = find_raise_label i in + let label,size,tb = find_raise_label stack_info i in let cont = branch_to label cont in let rec loop sz tbb = if tb == tbb then add_pop (sz-size) cont @@ -830,11 +817,11 @@ let rec comp_expr env exp sz cont = | [] -> assert false | try_sz :: tbb -> add_pop (sz-try_sz-4) (Kpoptrap :: loop try_sz tbb) in - let cont = loop sz !try_blocks in + let cont = loop sz stack_info.try_blocks in begin match args with | [arg] -> (* optim, argument passed in accumulator *) - comp_expr env arg sz cont - | _ -> comp_exit_args env args sz size cont + comp_expr stack_info env arg sz cont + | _ -> comp_exit_args stack_info env args sz size cont end | Ltrywith(body, id, handler) -> let (branch1, cont1) = make_branch cont in @@ -842,33 +829,35 @@ let rec comp_expr env exp sz cont = let body_cont = Kpoptrap :: branch1 :: Klabel lbl_handler :: Kpush :: - comp_expr (add_var id (sz+1) env) handler (sz+1) (add_pop 1 cont1) + comp_expr + stack_info (add_var id (sz+1) env) handler (sz+1) (add_pop 1 cont1) in - try_blocks := sz :: !try_blocks; - let l = comp_expr env body (sz+4) body_cont in - try_blocks := List.tl !try_blocks; + let stack_info = + { stack_info with try_blocks = sz :: stack_info.try_blocks } in + let l = comp_expr stack_info env body (sz+4) body_cont in Kpushtrap lbl_handler :: l | Lifthenelse(cond, ifso, ifnot) -> - comp_binary_test env cond ifso ifnot sz cont + comp_binary_test stack_info env cond ifso ifnot sz cont | Lsequence(exp1, exp2) -> - comp_expr env exp1 sz (comp_expr env exp2 sz cont) + comp_expr stack_info env exp1 sz (comp_expr stack_info env exp2 sz cont) | Lwhile(cond, body) -> let lbl_loop = new_label() in let lbl_test = new_label() in Kbranch lbl_test :: Klabel lbl_loop :: Kcheck_signals :: - comp_expr env body sz + comp_expr stack_info env body sz (Klabel lbl_test :: - comp_expr env cond sz (Kbranchif lbl_loop :: add_const_unit cont)) + comp_expr stack_info env cond sz + (Kbranchif lbl_loop :: add_const_unit cont)) | Lfor(param, start, stop, dir, body) -> let lbl_loop = new_label() in let lbl_exit = new_label() in let offset = match dir with Upto -> 1 | Downto -> -1 in let comp = match dir with Upto -> Cgt | Downto -> Clt in - comp_expr env start sz - (Kpush :: comp_expr env stop (sz+1) + comp_expr stack_info env start sz + (Kpush :: comp_expr stack_info env stop (sz+1) (Kpush :: Kpush :: Kacc 2 :: Kintcomp comp :: Kbranchif lbl_exit :: Klabel lbl_loop :: Kcheck_signals :: - comp_expr (add_var param (sz+1) env) body (sz+2) + comp_expr stack_info (add_var param (sz+1) env) body (sz+2) (Kacc 1 :: Kpush :: Koffsetint offset :: Kassign 2 :: Kacc 1 :: Kintcomp Cne :: Kbranchif lbl_loop :: Klabel lbl_exit :: add_const_unit (add_pop 2 cont)))) @@ -903,7 +892,8 @@ let rec comp_expr env exp sz cont = *) let lbls = Array.make (Array.length acts) 0 in for i = Array.length acts-1 downto 0 do - let lbl,c1 = label_code (comp_expr env acts.(i) sz (branch :: !c)) in + let lbl,c1 = + label_code (comp_expr stack_info env acts.(i) sz (branch :: !c)) in lbls.(i) <- lbl ; c := discard_dead_code c1 done ; @@ -917,20 +907,19 @@ let rec comp_expr env exp sz cont = for i = sw.sw_numconsts - 1 downto 0 do lbl_consts.(i) <- lbls.(act_consts.(i)) done; - comp_expr env arg sz (Kswitch(lbl_consts, lbl_blocks) :: !c) + comp_expr stack_info env arg sz (Kswitch(lbl_consts, lbl_blocks) :: !c) | Lstringswitch (arg,sw,d,loc) -> - comp_expr env (Matching.expand_stringswitch loc arg sw d) sz cont + comp_expr stack_info env + (Matching.expand_stringswitch loc arg sw d) sz cont | Lassign(id, expr) -> begin try let pos = Ident.find_same id env.ce_stack in - comp_expr env expr sz (Kassign(sz - pos) :: cont) + comp_expr stack_info env expr sz (Kassign(sz - pos) :: cont) with Not_found -> fatal_error "Bytegen.comp_expr: assign" end | Levent(lam, lev) -> - let ev_defname = match lev.lev_loc with - | Loc_unknown -> "??" - | Loc_known { loc = _; scopes } -> string_of_scopes scopes in + let ev_defname = string_of_scoped_location lev.lev_loc in let event kind info = { ev_pos = 0; (* patched in emitcode *) ev_module = !compunit_name; @@ -958,15 +947,15 @@ let rec comp_expr env exp sz cont = in begin match lev.lev_kind with Lev_before -> - let c = comp_expr env lam sz cont in + let c = comp_expr stack_info env lam sz cont in let ev = event Event_before Event_other in add_event ev c | Lev_function -> - let c = comp_expr env lam sz cont in + let c = comp_expr stack_info env lam sz cont in let ev = event Event_pseudo Event_function in add_event ev c | Lev_pseudo -> - let c = comp_expr env lam sz cont in + let c = comp_expr stack_info env lam sz cont in let ev = event Event_pseudo Event_other in add_event ev c | Lev_after ty -> @@ -977,7 +966,7 @@ let rec comp_expr env exp sz cont = in if preserve_tailcall && is_tailcall cont then (* don't destroy tail call opt *) - comp_expr env lam sz cont + comp_expr stack_info env lam sz cont else begin let info = match lam with @@ -988,67 +977,68 @@ let rec comp_expr env exp sz cont = in let ev = event (Event_after ty) info in let cont1 = add_event ev cont in - comp_expr env lam sz cont1 + comp_expr stack_info env lam sz cont1 end - | Lev_module_definition _ -> - comp_expr env lam sz cont end | Lifused (_, exp) -> - comp_expr env exp sz cont + comp_expr stack_info env exp sz cont (* Compile a list of arguments [e1; ...; eN] to a primitive operation. The values of eN ... e2 are pushed on the stack, e2 at top of stack, then e3, then ... The value of e1 is left in the accumulator. *) -and comp_args env argl sz cont = - comp_expr_list env (List.rev argl) sz cont +and comp_args stack_info env argl sz cont = + comp_expr_list stack_info env (List.rev argl) sz cont -and comp_expr_list env exprl sz cont = match exprl with +and comp_expr_list stack_info env exprl sz cont = match exprl with [] -> cont - | [exp] -> comp_expr env exp sz cont + | [exp] -> comp_expr stack_info env exp sz cont | exp :: rem -> - comp_expr env exp sz (Kpush :: comp_expr_list env rem (sz+1) cont) + comp_expr stack_info env exp sz + (Kpush :: comp_expr_list stack_info env rem (sz+1) cont) -and comp_exit_args env argl sz pos cont = - comp_expr_list_assign env (List.rev argl) sz pos cont +and comp_exit_args stack_info env argl sz pos cont = + comp_expr_list_assign stack_info env (List.rev argl) sz pos cont -and comp_expr_list_assign env exprl sz pos cont = match exprl with +and comp_expr_list_assign stack_info env exprl sz pos cont = match exprl with | [] -> cont | exp :: rem -> - comp_expr env exp sz - (Kassign (sz-pos)::comp_expr_list_assign env rem sz (pos-1) cont) + comp_expr stack_info env exp sz + (Kassign (sz-pos) + ::comp_expr_list_assign stack_info env rem sz (pos-1) cont) (* Compile an if-then-else test. *) -and comp_binary_test env cond ifso ifnot sz cont = +and comp_binary_test stack_info env cond ifso ifnot sz cont = let cont_cond = if ifnot = Lconst const_unit then begin let (lbl_end, cont1) = label_code cont in - Kstrictbranchifnot lbl_end :: comp_expr env ifso sz cont1 + Kstrictbranchifnot lbl_end :: comp_expr stack_info env ifso sz cont1 end else - match code_as_jump ifso sz with + match code_as_jump stack_info ifso sz with | Some label -> - let cont = comp_expr env ifnot sz cont in + let cont = comp_expr stack_info env ifnot sz cont in Kbranchif label :: cont - | _ -> - match code_as_jump ifnot sz with + | None -> + match code_as_jump stack_info ifnot sz with | Some label -> - let cont = comp_expr env ifso sz cont in + let cont = comp_expr stack_info env ifso sz cont in Kbranchifnot label :: cont - | _ -> + | None -> let (branch_end, cont1) = make_branch cont in - let (lbl_not, cont2) = label_code(comp_expr env ifnot sz cont1) in + let (lbl_not, cont2) = + label_code(comp_expr stack_info env ifnot sz cont1) in Kbranchifnot lbl_not :: - comp_expr env ifso sz (branch_end :: cont2) in + comp_expr stack_info env ifso sz (branch_end :: cont2) in - comp_expr env cond sz cont_cond + comp_expr stack_info env cond sz cont_cond (**** Compilation of a code block (with tracking of stack usage) ****) let comp_block env exp sz cont = - max_stack_used := 0; - let code = comp_expr env exp sz cont in - let used_safe = !max_stack_used + Config.stack_safety_margin in + let stack_info = create_stack_info () in + let code = comp_expr stack_info env exp sz cont in + let used_safe = !(stack_info.max_stack_used) + Config.stack_safety_margin in if used_safe > Config.stack_threshold then Kconst(Const_base(Const_int used_safe)) :: Kccall("caml_ensure_stack_capacity", 1) :: @@ -1060,13 +1050,15 @@ let comp_block env exp sz cont = let comp_function tc cont = let arity = List.length tc.params in - let rec positions pos delta = function - [] -> Ident.empty - | id :: rem -> Ident.add id pos (positions (pos + delta) delta rem) in + let ce_stack, _last_pos = + add_positions Ident.empty Fun.id ~pos:arity ~delta:(-1) tc.params + in let env = - { ce_stack = positions arity (-1) tc.params; - ce_heap = positions (3 * (tc.num_defs - tc.rec_pos) - 1) 1 tc.free_vars; - ce_rec = positions (-3 * tc.rec_pos) 3 tc.rec_vars } in + { ce_stack; + ce_closure = + In_closure { entries = tc.entries; env_pos = 3 * tc.rec_pos } + } + in let cont = comp_block env tc.body arity (Kreturn arity :: cont) in if arity > 1 then @@ -1087,29 +1079,28 @@ let comp_remainder cont = (**** Compilation of a lambda phrase ****) -let compile_implementation modulename expr = - Stack.clear functions_to_compile; +let reset () = label_counter := 0; - sz_static_raises := [] ; - compunit_name := modulename; - let init_code = comp_block empty_env expr 0 [] in + compunit_name := ""; + Stack.clear functions_to_compile + +let compile_gen ?modulename ~init_stack expr = + reset (); + begin match modulename with + | Some name -> compunit_name := name + | None -> () + end; + Fun.protect ~finally:reset (fun () -> + let init_code = comp_block empty_env expr init_stack [] in if Stack.length functions_to_compile > 0 then begin let lbl_init = new_label() in - Kbranch lbl_init :: comp_remainder (Klabel lbl_init :: init_code) + (Kbranch lbl_init :: comp_remainder (Klabel lbl_init :: init_code)), + false end else - init_code + init_code, true) -let compile_phrase expr = - Stack.clear functions_to_compile; - label_counter := 0; - sz_static_raises := [] ; - let init_code = comp_block empty_env expr 1 [Kreturn 1] in - let fun_code = comp_remainder [] in - (init_code, fun_code) +let compile_implementation modulename expr = + fst (compile_gen ~modulename ~init_stack:0 expr) -let reset () = - label_counter := 0; - sz_static_raises := []; - compunit_name := ""; - Stack.clear functions_to_compile; - max_stack_used := 0 +let compile_phrase expr = + compile_gen ~init_stack:1 expr diff --git a/bytecomp/bytegen.mli b/bytecomp/bytegen.mli index 80c222bf..1f0ea64e 100644 --- a/bytecomp/bytegen.mli +++ b/bytecomp/bytegen.mli @@ -19,8 +19,7 @@ open Lambda open Instruct val compile_implementation: string -> lambda -> instruction list -val compile_phrase: lambda -> instruction list * instruction list -val reset: unit -> unit +val compile_phrase: lambda -> instruction list * bool val merge_events: Instruct.debug_event -> Instruct.debug_event -> Instruct.debug_event diff --git a/bytecomp/bytelibrarian.ml b/bytecomp/bytelibrarian.ml index 294a6976..001af5fa 100644 --- a/bytecomp/bytelibrarian.ml +++ b/bytecomp/bytelibrarian.ml @@ -114,13 +114,14 @@ let create_archive file_list lib_name = ) open Format +module Style = Misc.Style let report_error ppf = function | File_not_found name -> - fprintf ppf "Cannot find file %s" name + fprintf ppf "Cannot find file %a" Style.inline_code name | Not_an_object_file name -> fprintf ppf "The file %a is not a bytecode object file" - Location.print_filename name + (Style.as_inline_code Location.print_filename) name let () = Location.register_error_of_exn diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml index 967a06d8..7b72b7cb 100644 --- a/bytecomp/bytelink.ml +++ b/bytecomp/bytelink.ml @@ -19,6 +19,15 @@ open Misc open Config open Cmo_format +module Compunit = Symtable.Compunit + +module Dep = struct + type t = compunit * compunit + let compare = compare +end + +module DepSet = Set.Make (Dep) + type error = | File_not_found of filepath | Not_an_object_file of filepath @@ -28,9 +37,10 @@ type error = | Custom_runtime | File_exists of filepath | Cannot_open_dll of filepath - | Required_module_unavailable of modname * modname + | Required_compunit_unavailable of (compunit * compunit) | Camlheader of string * filepath - | Wrong_link_order of (modname * modname) list + | Wrong_link_order of DepSet.t + | Multiple_definition of compunit * filepath * filepath exception Error of error @@ -87,31 +97,34 @@ let add_ccobjs origin l = (* First pass: determine which units are needed *) -let missing_globals = ref Ident.Map.empty -let provided_globals = ref Ident.Set.empty -let badly_ordered_dependencies : (string * string) list ref = ref [] +let missing_compunits = ref Compunit.Map.empty +let provided_compunits = ref Compunit.Set.empty +let badly_ordered_dependencies : DepSet.t ref = ref DepSet.empty + +let record_badly_ordered_dependency dep = + badly_ordered_dependencies := DepSet.add dep !badly_ordered_dependencies let is_required (rel, _pos) = match rel with - Reloc_setglobal id -> - Ident.Map.mem id !missing_globals - | _ -> false + | Reloc_setcompunit cu -> + Compunit.Map.mem cu !missing_compunits + | _ -> false let add_required compunit = - let add id = - if Ident.Set.mem id !provided_globals then - badly_ordered_dependencies := - ((Ident.name id), compunit.cu_name) :: !badly_ordered_dependencies; - missing_globals := Ident.Map.add id compunit.cu_name !missing_globals + let add cu = + if Compunit.Set.mem cu !provided_compunits then + record_badly_ordered_dependency (cu, compunit.cu_name); + missing_compunits := + Compunit.Map.add cu compunit.cu_name !missing_compunits in - List.iter add (Symtable.required_globals compunit.cu_reloc); - List.iter add compunit.cu_required_globals + List.iter add (Symtable.required_compunits compunit.cu_reloc); + List.iter add compunit.cu_required_compunits let remove_required (rel, _pos) = match rel with - Reloc_setglobal id -> - missing_globals := Ident.Map.remove id !missing_globals; - provided_globals := Ident.Set.add id !provided_globals; + Reloc_setcompunit cu -> + missing_compunits := Compunit.Map.remove cu !missing_compunits; + provided_compunits := Compunit.Set.add cu !provided_compunits; | _ -> () let scan_file obj_name tolink = @@ -171,19 +184,21 @@ module Consistbl = Consistbl.Make (Misc.Stdlib.String) let crc_interfaces = Consistbl.create () let interfaces = ref ([] : string list) -let implementations_defined = ref ([] : (string * string) list) +let implementations_defined = ref ([] : (compunit * string) list) let check_consistency file_name cu = + begin try + let source = List.assoc cu.cu_name !implementations_defined in + raise (Error (Multiple_definition(cu.cu_name, file_name, source))); + with Not_found -> () + end; begin try List.iter (fun (name, crco) -> interfaces := name :: !interfaces; match crco with None -> () - | Some crc -> - if name = cu.cu_name - then Consistbl.set crc_interfaces name crc file_name - else Consistbl.check crc_interfaces name crc file_name) + | Some crc -> Consistbl.check crc_interfaces name crc file_name) cu.cu_imports with Consistbl.Inconsistency { unit_name = name; @@ -192,14 +207,6 @@ let check_consistency file_name cu = } -> raise(Error(Inconsistent_import(name, user, auth))) end; - begin try - let source = List.assoc cu.cu_name !implementations_defined in - Location.prerr_warning (Location.in_file file_name) - (Warnings.Module_linked_twice(cu.cu_name, - Location.show_filename file_name, - Location.show_filename source)) - with Not_found -> () - end; implementations_defined := (cu.cu_name, file_name) :: !implementations_defined @@ -219,12 +226,21 @@ let debug_info = ref ([] : (int * Instruct.debug_event list * string list) list) let link_compunit output_fun currpos_fun inchan file_name compunit = check_consistency file_name compunit; seek_in inchan compunit.cu_pos; - let code_block = LongString.input_bytes inchan compunit.cu_codesize in + let code_block = + Bigarray.Array1.create Bigarray.Char Bigarray.c_layout compunit.cu_codesize + in + match + In_channel.really_input_bigarray inchan code_block 0 compunit.cu_codesize + with + | None -> raise End_of_file + | Some () -> (); Symtable.patch_object code_block compunit.cu_reloc; if !Clflags.debug && compunit.cu_debug > 0 then begin seek_in inchan compunit.cu_debug; - let debug_event_list : Instruct.debug_event list = input_value inchan in - let debug_dirs : string list = input_value inchan in + let debug_event_list : Instruct.debug_event list = + Compression.input_value inchan in + let debug_dirs : string list = + Compression.input_value inchan in let file_path = Filename.dirname (Location.absolute_path file_name) in let debug_dirs = if List.mem file_path debug_dirs @@ -232,7 +248,7 @@ let link_compunit output_fun currpos_fun inchan file_name compunit = else file_path :: debug_dirs in debug_info := (currpos_fun(), debug_event_list, debug_dirs) :: !debug_info end; - Array.iter output_fun code_block; + output_fun code_block; if !Clflags.link_everything then List.iter Symtable.require_primitive compunit.cu_primitives @@ -256,7 +272,8 @@ let link_archive output_fun currpos_fun file_name units_required = try List.iter (fun cu -> - let name = file_name ^ "(" ^ cu.cu_name ^ ")" in + let n = Compunit.name cu.cu_name in + let name = file_name ^ "(" ^ n ^ ")" in try link_compunit output_fun currpos_fun inchan name cu with Symtable.Error msg -> @@ -292,11 +309,6 @@ let output_debug_info oc = !debug_info; debug_info := [] -(* Output a list of strings with 0-termination *) - -let output_stringlist oc l = - List.iter (fun s -> output_string oc s; output_byte oc 0) l - (* Transform a file name into an absolute file name *) let make_absolute file = @@ -304,6 +316,165 @@ let make_absolute file = else Location.rewrite_absolute_path (Filename.concat (Sys.getcwd()) file) +type launch_method = +| Shebang_bin_sh of string +| Shebang_runtime +| Executable + +type runtime_launch_info = { + buffer : string; + bindir : string; + launcher : launch_method; + executable_offset : int +} + +(* See https://www.in-ulm.de/~mascheck/various/shebang/#origin for a deep + dive into shebangs. + - Whitespace (space or horizontal tab) delimits the interpreter from an + optional argument + - The path clearly must not contain a linefeed + - A maximum length of 125 (128 less the #! and the newline) is picked as a + portable maximum (it's actually Linux's prior to kernel v5.1), rather than + actually probing the maximum length in configure *) +let invalid_for_shebang_line path = + let invalid_char = function ' ' | '\t' | '\n' -> true | _ -> false in + String.length path > 125 || String.exists invalid_char path + +(* The runtime-launch-info file consists of two "lines" followed by binary data. + The file is _always_ LF-formatted, even on Windows. The sequence of bytes up + to the first '\n' is interpreted: + - "sh" - use a shebang-style launcher. If sh is needed, determine its + location from [command -p -v sh] + - "exe" - use the executable launcher contained in this runtime-launch-info + file. + - "/" ^ path - use a shebang-style launcher. If sh is needed, path is the + absolute location of sh. path must be valid for a shebang + line. + The second "line" is interpreted as the next "\000\n"-terminated sequence and + is the directory containing the default runtimes (ocamlrun, ocamlrund, etc.). + The null terminator is used since '\n' is valid in a nefarious installation + prefix but Posix forbids filenames including the nul character. + The remainder of the file is then the executable launcher for bytecode + programs (see stdlib/header{,nt}.c). *) + +let read_runtime_launch_info file = + let buffer = + try + In_channel.with_open_bin file In_channel.input_all + with Sys_error msg -> raise (Error (Camlheader (msg, file))) + in + try + let bindir_start = String.index buffer '\n' + 1 in + let bindir_end = String.index_from buffer bindir_start '\000' in + let bindir = String.sub buffer bindir_start (bindir_end - bindir_start) in + let executable_offset = bindir_end + 2 in + let launcher = + let kind = String.sub buffer 0 (bindir_start - 1) in + if kind = "exe" then + Executable + else if kind <> "" && (kind.[0] = '/' || kind = "sh") then + Shebang_bin_sh kind + else + raise Not_found in + if String.length buffer < executable_offset + || buffer.[executable_offset - 1] <> '\n' then + raise Not_found + else + {bindir; launcher; buffer; executable_offset} + with Not_found -> + raise (Error (Camlheader ("corrupt header", file))) + +let find_bin_sh () = + let output_file = Filename.temp_file "caml_bin_sh" "" in + let result = + try + let cmd = + Filename.quote_command ~stdout:output_file "command" ["-p"; "-v"; "sh"] + in + if !Clflags.verbose then + Printf.eprintf "+ %s\n" cmd; + if Sys.command cmd = 0 then + In_channel.with_open_text output_file input_line + else + "" + with Sys_error _ + | End_of_file -> "" + in + remove_file output_file; + result + +(* Writes the executable header to outchan and writes the RNTM section, if + needed. Returns a toc_writer (i.e. Bytesections.init_record is always + called) *) + +let write_header outchan = + let use_runtime, runtime = + if String.length !Clflags.use_runtime > 0 then + (true, make_absolute !Clflags.use_runtime) + else + (false, "ocamlrun" ^ !Clflags.runtime_variant) + in + (* Write the header *) + let runtime_info = + let header = "runtime-launch-info" in + try read_runtime_launch_info (Load_path.find header) + with Not_found -> raise (Error (File_not_found header)) + in + let runtime = + (* Historically, the native Windows ports are assumed to be finding + ocamlrun using a PATH search. *) + if use_runtime || Sys.win32 then + runtime + else + Filename.concat runtime_info.bindir runtime + in + (* Determine which method will be used for launching the executable: + Executable: concatenate the bytecode image to the executable stub + Shebang_runtime: #! line with the required runtime + Shebang_bin_sh: #! for a shell script calling exec *) + let launcher = + if runtime_info.launcher = Executable then + Executable + else + if invalid_for_shebang_line runtime then + match runtime_info.launcher with + | Shebang_bin_sh sh -> + let sh = + if sh = "sh" then + find_bin_sh () + else + sh in + if sh = "" || invalid_for_shebang_line sh then + Executable + else + Shebang_bin_sh sh + | _ -> + Executable + else + Shebang_runtime + in + match launcher with + | Shebang_runtime -> + (* Use the runtime directly *) + Printf.fprintf outchan "#!%s\n" runtime; + Bytesections.init_record outchan + | Shebang_bin_sh bin_sh -> + (* exec the runtime using sh *) + Printf.fprintf outchan "\ + #!%s\n\ + exec %s \"$0\" \"$@\"\n" bin_sh (Filename.quote runtime); + Bytesections.init_record outchan + | Executable -> + (* Use the executable stub launcher *) + let pos = runtime_info.executable_offset in + let len = String.length runtime_info.buffer - pos in + Out_channel.output_substring outchan runtime_info.buffer pos len; + (* The runtime name needs recording in RNTM *) + let toc_writer = Bytesections.init_record outchan in + Printf.fprintf outchan "%s\000" runtime; + Bytesections.record toc_writer RNTM; + toc_writer + (* Create a bytecode executable file *) let link_bytecode ?final_name tolink exec_name standalone = @@ -314,7 +485,9 @@ let link_bytecode ?final_name tolink exec_name standalone = | Link_object(file_name, _) when file_name = exec_name -> raise (Error (Wrong_object_name exec_name)); | _ -> ()) tolink; - Misc.remove_file exec_name; (* avoid permission problems, cf PR#8354 *) + (* Remove the output file if it exists to avoid permission problems (PR#8354), + but don't risk removing a special file (PR#11302). *) + Misc.remove_file exec_name; let outperm = if !Clflags.with_runtime then 0o777 else 0o666 in let outchan = open_out_gen [Open_wronly; Open_trunc; Open_creat; Open_binary] @@ -323,37 +496,13 @@ let link_bytecode ?final_name tolink exec_name standalone = ~always:(fun () -> close_out outchan) ~exceptionally:(fun () -> remove_file exec_name) (fun () -> - if standalone && !Clflags.with_runtime then begin - (* Copy the header *) - let header = - if String.length !Clflags.use_runtime > 0 - then "camlheader_ur" else "camlheader" ^ !Clflags.runtime_variant - in - try - let inchan = open_in_bin (Load_path.find header) in - copy_file inchan outchan; - close_in inchan - with - | Not_found -> raise (Error (File_not_found header)) - | Sys_error msg -> raise (Error (Camlheader (header, msg))) - end; - Bytesections.init_record outchan; - (* The path to the bytecode interpreter (in use_runtime mode) *) - if String.length !Clflags.use_runtime > 0 && !Clflags.with_runtime then - begin - let runtime = make_absolute !Clflags.use_runtime in - let runtime = - (* shebang mustn't exceed 128 including the #! and \0 *) - if String.length runtime > 125 then - "/bin/sh\n\ - exec \"" ^ runtime ^ "\" \"$0\" \"$@\"" - else - runtime - in - output_string outchan runtime; - output_char outchan '\n'; - Bytesections.record outchan "RNTM" - end; + let toc_writer = + (* Write the header and set the path to the bytecode interpreter *) + if standalone && !Clflags.with_runtime then + write_header outchan + else + Bytesections.init_record outchan + in (* The bytecode *) let start_code = pos_out outchan in Symtable.init(); @@ -363,48 +512,49 @@ let link_bytecode ?final_name tolink exec_name standalone = if check_dlls then begin (* Initialize the DLL machinery *) Dll.init_compile !Clflags.no_std_include; - Dll.add_path (Load_path.get_paths ()); + Dll.add_path (Load_path.get_path_list ()); try Dll.open_dlls Dll.For_checking sharedobjs with Failure reason -> raise(Error(Cannot_open_dll reason)) end; - let output_fun = output_bytes outchan + let output_fun buf = + Out_channel.output_bigarray outchan buf 0 (Bigarray.Array1.dim buf) and currpos_fun () = pos_out outchan - start_code in List.iter (link_file output_fun currpos_fun) tolink; if check_dlls then Dll.close_all_dlls(); (* The final STOP instruction *) output_byte outchan Opcodes.opSTOP; output_byte outchan 0; output_byte outchan 0; output_byte outchan 0; - Bytesections.record outchan "CODE"; + Bytesections.record toc_writer CODE; (* DLL stuff *) if standalone then begin (* The extra search path for DLLs *) - output_stringlist outchan !Clflags.dllpaths; - Bytesections.record outchan "DLPT"; + output_string outchan (concat_null_terminated !Clflags.dllpaths); + Bytesections.record toc_writer DLPT; (* The names of the DLLs *) - output_stringlist outchan sharedobjs; - Bytesections.record outchan "DLLS" + output_string outchan (concat_null_terminated sharedobjs); + Bytesections.record toc_writer DLLS end; (* The names of all primitives *) Symtable.output_primitive_names outchan; - Bytesections.record outchan "PRIM"; + Bytesections.record toc_writer PRIM; (* The table of global data *) Emitcode.marshal_to_channel_with_possibly_32bit_compat ~filename:final_name ~kind:"bytecode executable" outchan (Symtable.initial_global_table()); - Bytesections.record outchan "DATA"; + Bytesections.record toc_writer DATA; (* The map of global identifiers *) Symtable.output_global_map outchan; - Bytesections.record outchan "SYMB"; + Bytesections.record toc_writer SYMB; (* CRCs for modules *) output_value outchan (extract_crc_interfaces()); - Bytesections.record outchan "CRCS"; + Bytesections.record toc_writer CRCS; (* Debug info *) if !Clflags.debug then begin output_debug_info outchan; - Bytesections.record outchan "DBUG" + Bytesections.record toc_writer DBUG end; (* The table of contents and the trailer *) - Bytesections.write_toc_and_trailer outchan; + Bytesections.write_toc_and_trailer toc_writer; ) (* Output a string as a C array of unsigned ints *) @@ -413,12 +563,12 @@ let output_code_string_counter = ref 0 let output_code_string outchan code = let pos = ref 0 in - let len = Bytes.length code in + let len = Bigarray.Array1.dim code in while !pos < len do - let c1 = Char.code(Bytes.get code !pos) in - let c2 = Char.code(Bytes.get code (!pos + 1)) in - let c3 = Char.code(Bytes.get code (!pos + 2)) in - let c4 = Char.code(Bytes.get code (!pos + 3)) in + let c1 = Char.code(Bigarray.Array1.get code !pos) in + let c2 = Char.code(Bigarray.Array1.get code (!pos + 1)) in + let c3 = Char.code(Bigarray.Array1.get code (!pos + 2)) in + let c4 = Char.code(Bigarray.Array1.get code (!pos + 3)) in pos := !pos + 4; Printf.fprintf outchan "0x%02x%02x%02x%02x, " c4 c3 c2 c1; incr output_code_string_counter; @@ -452,19 +602,26 @@ let output_cds_file outfile = ~always:(fun () -> close_out outchan) ~exceptionally:(fun () -> remove_file outfile) (fun () -> - Bytesections.init_record outchan; + let toc_writer = Bytesections.init_record outchan in (* The map of global identifiers *) Symtable.output_global_map outchan; - Bytesections.record outchan "SYMB"; + Bytesections.record toc_writer SYMB; (* Debug info *) output_debug_info outchan; - Bytesections.record outchan "DBUG"; + Bytesections.record toc_writer DBUG; (* The table of contents and the trailer *) - Bytesections.write_toc_and_trailer outchan; + Bytesections.write_toc_and_trailer toc_writer; ) (* Output a bytecode executable as a C file *) +(* Primitives declared in the included headers but re-declared in the + primitives table need to be guarded and not declared twice. *) +let guarded_primitives = [ + "caml_get_public_method", "caml__get_public_method"; + "caml_set_oo_id", "caml__set_oo_id"; + ] + let link_bytecode_as_c tolink outfile with_main = let outchan = open_out outfile in Misc.try_finally @@ -478,18 +635,23 @@ let link_bytecode_as_c tolink outfile with_main = \n\ \n#ifdef __cplusplus\ \nextern \"C\" {\ -\n#endif\ +\n#endif"; + List.iter (fun (f, f') -> Printf.fprintf outchan "\n#define %s %s" f f') + guarded_primitives; + output_string outchan "\ \n#include \ \n#include \ \n#include \ \n#include \n"; - output_string outchan "static int caml_code[] = {\n"; + List.iter (fun (f, _) -> Printf.fprintf outchan "\n#undef %s" f) + guarded_primitives; + output_string outchan "\nstatic int caml_code[] = {\n"; Symtable.init(); clear_crc_interfaces (); let currpos = ref 0 in let output_fun code = output_code_string outchan code; - currpos := !currpos + Bytes.length code + currpos := !currpos + (Bigarray.Array1.dim code) and currpos_fun () = !currpos in List.iter (link_file output_fun currpos_fun) tolink; (* The final STOP instruction *) @@ -500,10 +662,12 @@ let link_bytecode_as_c tolink outfile with_main = (Marshal.to_string (Symtable.initial_global_table()) []); output_string outchan "\n};\n\n"; (* The sections *) - let sections = - [ "SYMB", Symtable.data_global_map(); - "PRIM", Obj.repr(Symtable.data_primitive_names()); - "CRCS", Obj.repr(extract_crc_interfaces()) ] in + let sections : (string * Obj.t) array = + [| Bytesections.Name.to_string SYMB, + Symtable.data_global_map(); + Bytesections.Name.to_string CRCS, + Obj.repr(extract_crc_interfaces()) |] + in output_string outchan "static char caml_sections[] = {\n"; output_data_string outchan (Marshal.to_string sections []); @@ -625,18 +789,15 @@ let link objfiles output_name = | _ -> "stdlib.cma" :: objfiles @ ["std_exit.cmo"] in let tolink = List.fold_right scan_file objfiles [] in - let missing_modules = - Ident.Map.filter (fun id _ -> not (Ident.is_predef id)) !missing_globals - in begin - match Ident.Map.bindings missing_modules with + match Compunit.Map.bindings !missing_compunits with | [] -> () - | (id, cu_name) :: _ -> - match !badly_ordered_dependencies with - | [] -> - raise (Error (Required_module_unavailable (Ident.name id, cu_name))) - | l -> - raise (Error (Wrong_link_order l)) + | missing_dependency :: _ -> + if DepSet.is_empty !badly_ordered_dependencies + then + raise (Error (Required_compunit_unavailable missing_dependency)) + else + raise (Error (Wrong_link_order !badly_ordered_dependencies)) end; Clflags.ccobjs := !Clflags.ccobjs @ !lib_ccobjs; (* put user's libs last *) Clflags.all_ccopts := !lib_ccopts @ !Clflags.all_ccopts; @@ -740,44 +901,63 @@ let link objfiles output_name = (* Error report *) open Format +module Style = Misc.Style let report_error ppf = function | File_not_found name -> - fprintf ppf "Cannot find file %a" Location.print_filename name + fprintf ppf "Cannot find file %a" + (Style.as_inline_code Location.print_filename) name | Not_an_object_file name -> fprintf ppf "The file %a is not a bytecode object file" - Location.print_filename name + (Style.as_inline_code Location.print_filename) name | Wrong_object_name name -> - fprintf ppf "The output file %s has the wrong name. The extension implies\ - \ an object file but the link step was requested" name + fprintf ppf "The output file %a has the wrong name. The extension implies\ + \ an object file but the link step was requested" + Style.inline_code name | Symbol_error(name, err) -> - fprintf ppf "Error while linking %a:@ %a" Location.print_filename name - Symtable.report_error err + fprintf ppf "Error while linking %a:@ %a" + (Style.as_inline_code Location.print_filename) name + Symtable.report_error err | Inconsistent_import(intf, file1, file2) -> fprintf ppf "@[Files %a@ and %a@ \ - make inconsistent assumptions over interface %s@]" - Location.print_filename file1 - Location.print_filename file2 - intf + make inconsistent assumptions over interface %a@]" + (Style.as_inline_code Location.print_filename) file1 + (Style.as_inline_code Location.print_filename) file2 + Style.inline_code intf | Custom_runtime -> fprintf ppf "Error while building custom runtime system" | File_exists file -> fprintf ppf "Cannot overwrite existing file %a" - Location.print_filename file + (Style.as_inline_code Location.print_filename) file | Cannot_open_dll file -> fprintf ppf "Error on dynamically loaded library: %a" Location.print_filename file - | Required_module_unavailable (s, m) -> - fprintf ppf "Module `%s' is unavailable (required by `%s')" s m + | Required_compunit_unavailable + (Compunit unavailable, Compunit required_by) -> + fprintf ppf "Module %a is unavailable (required by %a)" + Style.inline_code unavailable + Style.inline_code required_by | Camlheader (msg, header) -> - fprintf ppf "System error while copying file %s: %s" header msg - | Wrong_link_order l -> + fprintf ppf "System error while copying file %a: %a" + Style.inline_code header + Style.inline_code msg + | Wrong_link_order depset -> + let l = DepSet.elements depset in let depends_on ppf (dep, depending) = - fprintf ppf "%s depends on %s" depending dep + fprintf ppf "%a depends on %a" + Style.inline_code (Compunit.name depending) + Style.inline_code (Compunit.name dep) in fprintf ppf "@[Wrong link order: %a@]" (pp_print_list ~pp_sep:(fun ppf () -> fprintf ppf ",@ ") depends_on) l + | Multiple_definition(compunit, file1, file2) -> + fprintf ppf + "@[Files %a@ and %a@ both define a module named %a@]" + (Style.as_inline_code Location.print_filename) file1 + (Style.as_inline_code Location.print_filename) file2 + Style.inline_code (Compunit.name compunit) + let () = Location.register_error_of_exn @@ -790,7 +970,7 @@ let reset () = lib_ccobjs := []; lib_ccopts := []; lib_dllibs := []; - missing_globals := Ident.Map.empty; + missing_compunits := Compunit.Map.empty; Consistbl.clear crc_interfaces; implementations_defined := []; debug_info := []; diff --git a/bytecomp/bytelink.mli b/bytecomp/bytelink.mli index 2c8090c3..f061d9dd 100644 --- a/bytecomp/bytelink.mli +++ b/bytecomp/bytelink.mli @@ -17,6 +17,10 @@ open Misc (* Link .cmo files and produce a bytecode executable. *) +module Dep : Set.OrderedType with + type t = Cmo_format.compunit * Cmo_format.compunit +module DepSet : Set.S with type elt = Dep.t + val link : filepath list -> filepath -> unit val reset : unit -> unit @@ -33,9 +37,10 @@ type error = | Custom_runtime | File_exists of filepath | Cannot_open_dll of filepath - | Required_module_unavailable of modname * modname + | Required_compunit_unavailable of (Cmo_format.compunit * Cmo_format.compunit) | Camlheader of string * filepath - | Wrong_link_order of (modname * modname) list + | Wrong_link_order of DepSet.t + | Multiple_definition of Cmo_format.compunit * filepath * filepath exception Error of error diff --git a/bytecomp/bytepackager.ml b/bytecomp/bytepackager.ml index 2458030b..9351f9e5 100644 --- a/bytecomp/bytepackager.ml +++ b/bytecomp/bytepackager.ml @@ -20,72 +20,95 @@ open Misc open Instruct open Cmo_format module String = Misc.Stdlib.String +module Compunit = Symtable.Compunit + +let rec rev_append_map f l rest = + match l with + | [] -> rest + | x :: xs -> rev_append_map f xs (f x :: rest) type error = - Forward_reference of string * Ident.t - | Multiple_definition of string * Ident.t + Forward_reference of string * compunit + | Multiple_definition of string * compunit | Not_an_object_file of string - | Illegal_renaming of string * string * string + | Illegal_renaming of compunit * string * compunit | File_not_found of string exception Error of error -(* References accumulating information on the .cmo files *) +type mapped_compunit = { + packed_modname : compunit; (** qualified name of the compilation unit *) + processed : bool +} + +let record_as_processed mapping id = + let update_processed = function + | Some ({ processed = false; _} as r) -> Some {r with processed=true} + | Some {processed = true;_} | None -> assert false + in + Compunit.Map.update id update_processed mapping + +type state = { + relocs : (reloc_info * int) list; (** accumulated reloc info *) + events : debug_event list; (** accumulated debug events *) + debug_dirs : String.Set.t; (** accumulated debug_dirs *) + primitives : string list; (** accumulated primitives *) + offset : int; (** offset of the current unit *) + subst : Subst.t; (** Substitution for debug event *) + mapping : mapped_compunit Compunit.Map.t; + (** Mapping from module to packed-module idents. *) +} -let relocs = ref ([] : (reloc_info * int) list) -let events = ref ([] : debug_event list) -let debug_dirs = ref String.Set.empty -let primitives = ref ([] : string list) -let force_link = ref false +let empty_state = { + relocs = []; + events = []; + debug_dirs = String.Set.empty; + primitives = []; + offset = 0; + mapping = Compunit.Map.empty; + subst = Subst.identity; +} -(* Record a relocation. Update its offset, and rename GETGLOBAL and +(* Update a relocation. adjust its offset, and rename GETGLOBAL and SETGLOBAL relocations that correspond to one of the units being consolidated. *) -let rename_relocation packagename objfile mapping defined base (rel, ofs) = +let rename_relocation packagename objfile mapping base (rel, ofs) = + (* PR#5276: unique-ize dotted global names, which appear if one of + the units being consolidated is itself a packed module. *) + let make_compunit_name_unique cu = + if Compunit.is_packed cu + then Compunit (packagename ^ "." ^ (Compunit.name cu)) + else cu + in let rel' = match rel with - Reloc_getglobal id -> - begin try - let id' = List.assoc id mapping in - if List.mem id defined - then Reloc_getglobal id' - else raise(Error(Forward_reference(objfile, id))) - with Not_found -> - (* PR#5276: unique-ize dotted global names, which appear - if one of the units being consolidated is itself a packed - module. *) - let name = Ident.name id in - if String.contains name '.' then - Reloc_getglobal (Ident.create_persistent (packagename ^ "." ^ name)) - else - rel - end - | Reloc_setglobal id -> + | Reloc_getcompunit cu -> begin try - let id' = List.assoc id mapping in - if List.mem id defined - then raise(Error(Multiple_definition(objfile, id))) - else Reloc_setglobal id' - with Not_found -> - (* PR#5276, as above *) - let name = Ident.name id in - if String.contains name '.' then - Reloc_setglobal (Ident.create_persistent (packagename ^ "." ^ name)) - else - rel - end - | _ -> + let mapped_modname = Compunit.Map.find cu mapping in + if mapped_modname.processed + then Reloc_getcompunit mapped_modname.packed_modname + else raise(Error(Forward_reference(objfile, cu))) + with Not_found -> Reloc_getcompunit (make_compunit_name_unique cu) + end + | Reloc_setcompunit cu -> + begin try + let mapped_modname = Compunit.Map.find cu mapping in + if mapped_modname.processed + then raise(Error(Multiple_definition(objfile, cu))) + else Reloc_setcompunit mapped_modname.packed_modname + with Not_found -> Reloc_setcompunit (make_compunit_name_unique cu) + end + | Reloc_literal _ | Reloc_getpredef _ | Reloc_primitive _ -> rel in - relocs := (rel', base + ofs) :: !relocs + (rel', base + ofs) -(* Record and relocate a debugging event *) +(* relocate a debugging event *) let relocate_debug base prefix subst ev = - let ev' = { ev with ev_pos = base + ev.ev_pos; - ev_module = prefix ^ "." ^ ev.ev_module; - ev_typsubst = Subst.compose ev.ev_typsubst subst } in - events := ev' :: !events + { ev with ev_pos = base + ev.ev_pos; + ev_module = prefix ^ "." ^ ev.ev_module; + ev_typsubst = Subst.compose ev.ev_typsubst subst } (* Read the unit information from a .cmo file. *) @@ -94,18 +117,21 @@ type pack_member_kind = PM_intf | PM_impl of compilation_unit type pack_member = { pm_file: string; pm_name: string; + pm_ident: compunit; + pm_packed_ident: compunit; pm_kind: pack_member_kind } -let read_member_info file = ( - let name = - String.capitalize_ascii(Filename.basename(chop_extensions file)) in +let read_member_info targetname file = + let member = Unit_info.Artifact.from_filename file in + let member_name = Unit_info.Artifact.modname member in + let member_compunit = Compunit member_name in let kind = (* PR#7479: make sure it is either a .cmi or a .cmo *) - if Filename.check_suffix file ".cmi" then + if Unit_info.is_cmi member then PM_intf else begin let ic = open_in_bin file in - try + Fun.protect ~finally:(fun () -> close_in ic) (fun () -> let buffer = really_input_string ic (String.length Config.cmo_magic_number) in @@ -114,84 +140,85 @@ let read_member_info file = ( let compunit_pos = input_binary_int ic in seek_in ic compunit_pos; let compunit = (input_value ic : compilation_unit) in - if compunit.cu_name <> name - then raise(Error(Illegal_renaming(name, file, compunit.cu_name))); - close_in ic; - PM_impl compunit - with x -> - close_in ic; - raise x + if compunit.cu_name <> member_compunit + then begin + raise(Error(Illegal_renaming + (member_compunit, file, compunit.cu_name))) + end; + PM_impl compunit) end in - { pm_file = file; pm_name = name; pm_kind = kind } -) + let pm_packed_ident = Compunit (targetname ^ "." ^ member_name) in + { pm_file = file; pm_name = member_name; pm_kind = kind; + pm_ident = member_compunit; pm_packed_ident } (* Read the bytecode from a .cmo file. Write bytecode to channel [oc]. - Rename globals as indicated by [mapping] in reloc info. + Rename compunits as indicated by [mapping] in reloc info. Accumulate relocs, debug info, etc. - Return size of bytecode. *) + Return the accumulated state. *) -let rename_append_bytecode packagename oc mapping defined ofs prefix subst - objfile compunit = +let rename_append_bytecode packagename oc state objfile compunit = let ic = open_in_bin objfile in try Bytelink.check_consistency objfile compunit; - List.iter - (rename_relocation packagename objfile mapping defined ofs) - compunit.cu_reloc; - primitives := compunit.cu_primitives @ !primitives; - if compunit.cu_force_link then force_link := true; + let relocs = + rev_append_map + (rename_relocation packagename objfile state.mapping state.offset) + compunit.cu_reloc + state.relocs in + let primitives = List.rev_append compunit.cu_primitives state.primitives in seek_in ic compunit.cu_pos; Misc.copy_file_chunk ic oc compunit.cu_codesize; - if !Clflags.debug && compunit.cu_debug > 0 then begin - seek_in ic compunit.cu_debug; - List.iter (relocate_debug ofs prefix subst) (input_value ic); - debug_dirs := List.fold_left - (fun s e -> String.Set.add e s) - !debug_dirs - (input_value ic); - end; + let events, debug_dirs = + if !Clflags.debug && compunit.cu_debug > 0 then begin + seek_in ic compunit.cu_debug; + let unit_events = (Compression.input_value ic : debug_event list) in + let events = + rev_append_map + (relocate_debug state.offset packagename state.subst) + unit_events + state.events in + let unit_debug_dirs = (Compression.input_value ic : string list) in + let debug_dirs = + String.Set.union + state.debug_dirs + (String.Set.of_list unit_debug_dirs) in + events, debug_dirs + end + else state.events, state.debug_dirs + in close_in ic; - compunit.cu_codesize + { state with + relocs; primitives; events; debug_dirs; + offset = state.offset + compunit.cu_codesize; + } with x -> close_in ic; raise x (* Same, for a list of .cmo and .cmi files. - Return total size of bytecode. *) - -let rec rename_append_bytecode_list packagename oc mapping defined ofs - prefix subst = - function - [] -> - ofs - | m :: rem -> - match m.pm_kind with - | PM_intf -> - rename_append_bytecode_list packagename oc mapping defined ofs - prefix subst rem - | PM_impl compunit -> - let size = - rename_append_bytecode packagename oc mapping defined ofs - prefix subst m.pm_file compunit in - let id = Ident.create_persistent m.pm_name in - let root = Path.Pident (Ident.create_persistent prefix) in - rename_append_bytecode_list packagename oc mapping (id :: defined) - (ofs + size) prefix - (Subst.add_module id (Path.Pdot (root, Ident.name id)) - subst) - rem + Return the accumulated state. *) +let rename_append_pack_member packagename oc state m = + match m.pm_kind with + | PM_intf -> state + | PM_impl compunit -> + let state = + rename_append_bytecode packagename oc state m.pm_file compunit in + let id = m.pm_ident in + let root = Path.Pident (Ident.create_persistent packagename) in + let mapping = record_as_processed state.mapping id in + let subst = + let id' = Compunit.to_ident id in + Subst.add_module id' (Path.Pdot (root, Ident.name id')) state.subst + in + { state with subst; mapping } (* Generate the code that builds the tuple representing the package module *) -let build_global_target ~ppf_dump oc target_name members mapping pos coercion = +let build_global_target ~ppf_dump oc target_name state components coercion = let components = - List.map2 - (fun m (_id1, id2) -> - match m.pm_kind with - | PM_intf -> None - | PM_impl _ -> Some id2) - members mapping in + List.map (Option.map Compunit.to_ident) components + in let lam = Translmod.transl_package components (Ident.create_persistent target_name) coercion in @@ -200,122 +227,147 @@ let build_global_target ~ppf_dump oc target_name members mapping pos coercion = Format.fprintf ppf_dump "%a@." Printlambda.lambda lam; let instrs = Bytegen.compile_implementation target_name lam in - let rel = + let size, pack_relocs, pack_events, pack_debug_dirs = Emitcode.to_packed_file oc instrs in - relocs := List.map (fun (r, ofs) -> (r, pos + ofs)) rel @ !relocs + let events = List.rev_append pack_events state.events in + let debug_dirs = String.Set.union pack_debug_dirs state.debug_dirs in + let relocs = + rev_append_map + (fun (r, ofs) -> (r, state.offset + ofs)) + pack_relocs state.relocs in + { state with events; debug_dirs; relocs; offset = state.offset + size} (* Build the .cmo file obtained by packaging the given .cmo files. *) -let package_object_files ~ppf_dump files targetfile targetname coercion = - let members = - map_left_right read_member_info files in - let required_globals = - List.fold_right (fun compunit required_globals -> match compunit with +let package_object_files ~ppf_dump files target coercion = + let targetfile = Unit_info.Artifact.filename target in + let targetname = Unit_info.Artifact.modname target in + let members = map_left_right (read_member_info targetname) files in + let required_compunits = + List.fold_right (fun compunit required_compunits -> match compunit with | { pm_kind = PM_intf } -> - required_globals - | { pm_kind = PM_impl { cu_required_globals; cu_reloc } } -> - let remove_required (rel, _pos) required_globals = + required_compunits + | { pm_kind = PM_impl { cu_required_compunits; cu_reloc } } -> + let remove_required (rel, _pos) required_compunits = match rel with - Reloc_setglobal id -> - Ident.Set.remove id required_globals - | _ -> - required_globals + Reloc_setcompunit cu -> + Compunit.Set.remove cu required_compunits + | Reloc_literal _ | Reloc_getcompunit _ | Reloc_getpredef _ + | Reloc_primitive _ -> + required_compunits in - let required_globals = - List.fold_right remove_required cu_reloc required_globals + let required_compunits = + List.fold_right remove_required cu_reloc required_compunits in - List.fold_right Ident.Set.add cu_required_globals required_globals) - members Ident.Set.empty + List.fold_right + Compunit.Set.add cu_required_compunits required_compunits) + members Compunit.Set.empty in - let unit_names = - List.map (fun m -> m.pm_name) members in - let mapping = - List.map - (fun name -> - (Ident.create_persistent name, - Ident.create_persistent(targetname ^ "." ^ name))) - unit_names in let oc = open_out_bin targetfile in - try + Fun.protect ~finally:(fun () -> close_out oc) (fun () -> output_string oc Config.cmo_magic_number; let pos_depl = pos_out oc in output_binary_int oc 0; let pos_code = pos_out oc in - let ofs = rename_append_bytecode_list targetname oc mapping [] 0 - targetname Subst.identity members in - build_global_target ~ppf_dump oc targetname members mapping ofs coercion; + let state = + let mapping = + List.map + (fun m -> m.pm_ident, + { packed_modname = m.pm_packed_ident; processed = false } + ) + members + |> Compunit.Map.of_list in + { empty_state with mapping } in + let state = + List.fold_left (rename_append_pack_member targetname oc) state members in + let components = + List.map + (fun m -> + match m.pm_kind with + | PM_intf -> None + | PM_impl _ -> Some m.pm_packed_ident) + members in + let state = + build_global_target ~ppf_dump oc targetname state components coercion in let pos_debug = pos_out oc in - if !Clflags.debug && !events <> [] then begin - output_value oc (List.rev !events); - output_value oc (String.Set.elements !debug_dirs); + if !Clflags.debug && state.events <> [] then begin + Compression.output_value oc (List.rev state.events); + Compression.output_value oc (String.Set.elements state.debug_dirs) end; + let force_link = + List.exists (function + | {pm_kind = PM_impl {cu_force_link}} -> cu_force_link + | _ -> false) members in let pos_final = pos_out oc in let imports = + let unit_names = + List.map (fun m -> m.pm_name) members in List.filter (fun (name, _crc) -> not (List.mem name unit_names)) (Bytelink.extract_crc_interfaces()) in let compunit = - { cu_name = targetname; + { cu_name = Compunit targetname; cu_pos = pos_code; cu_codesize = pos_debug - pos_code; - cu_reloc = List.rev !relocs; + cu_reloc = List.rev state.relocs; cu_imports = (targetname, Some (Env.crc_of_unit targetname)) :: imports; - cu_primitives = !primitives; - cu_required_globals = Ident.Set.elements required_globals; - cu_force_link = !force_link; + cu_primitives = List.rev state.primitives; + cu_required_compunits = + (Compunit.Set.elements required_compunits); + cu_force_link = force_link; cu_debug = if pos_final > pos_debug then pos_debug else 0; cu_debugsize = pos_final - pos_debug } in Emitcode.marshal_to_channel_with_possibly_32bit_compat ~filename:targetfile ~kind:"bytecode unit" oc compunit; seek_out oc pos_depl; - output_binary_int oc pos_final; - close_out oc - with x -> - close_out oc; - raise x + output_binary_int oc pos_final) (* The entry point *) let package_files ~ppf_dump initial_env files targetfile = - let files = + let files = List.map - (fun f -> - try Load_path.find f - with Not_found -> raise(Error(File_not_found f))) - files in - let prefix = chop_extensions targetfile in - let targetcmi = prefix ^ ".cmi" in - let targetname = String.capitalize_ascii(Filename.basename prefix) in - Misc.try_finally (fun () -> - let coercion = - Typemod.package_units initial_env files targetcmi targetname in - package_object_files ~ppf_dump files targetfile targetname coercion - ) - ~exceptionally:(fun () -> remove_file targetfile) + (fun f -> + try Load_path.find f + with Not_found -> raise(Error(File_not_found f))) + files in + let target = Unit_info.Artifact.from_filename targetfile in + Misc.try_finally (fun () -> + let coercion = + Typemod.package_units initial_env files (Unit_info.companion_cmi target) + in + package_object_files ~ppf_dump files target coercion + ) + ~exceptionally:(fun () -> remove_file targetfile) (* Error report *) open Format +module Style = Misc.Style let report_error ppf = function - Forward_reference(file, ident) -> - fprintf ppf "Forward reference to %s in file %a" (Ident.name ident) - Location.print_filename file - | Multiple_definition(file, ident) -> - fprintf ppf "File %a redefines %s" - Location.print_filename file - (Ident.name ident) + Forward_reference(file, compunit) -> + fprintf ppf "Forward reference to %a in file %a" + Style.inline_code (Compunit.name compunit) + (Style.as_inline_code Location.print_filename) file + | Multiple_definition(file, compunit) -> + fprintf ppf "File %a redefines %a" + (Style.as_inline_code Location.print_filename) file + Style.inline_code (Compunit.name compunit) | Not_an_object_file file -> fprintf ppf "%a is not a bytecode object file" - Location.print_filename file + (Style.as_inline_code Location.print_filename) file | Illegal_renaming(name, file, id) -> fprintf ppf "Wrong file naming: %a@ contains the code for\ - @ %s when %s was expected" - Location.print_filename file name id + @ %a when %a was expected" + (Style.as_inline_code Location.print_filename) file + Style.inline_code (Compunit.name name) + Style.inline_code (Compunit.name id) | File_not_found file -> - fprintf ppf "File %s not found" file + fprintf ppf "File %a not found" + Style.inline_code file let () = Location.register_error_of_exn @@ -323,9 +375,3 @@ let () = | Error err -> Some (Location.error_of_printer_file report_error err) | _ -> None ) - -let reset () = - relocs := []; - events := []; - primitives := []; - force_link := false diff --git a/bytecomp/bytepackager.mli b/bytecomp/bytepackager.mli index 95177716..a518fb90 100644 --- a/bytecomp/bytepackager.mli +++ b/bytecomp/bytepackager.mli @@ -20,13 +20,12 @@ val package_files: ppf_dump:Format.formatter -> Env.t -> string list -> string -> unit type error = - Forward_reference of string * Ident.t - | Multiple_definition of string * Ident.t + Forward_reference of string * Cmo_format.compunit + | Multiple_definition of string * Cmo_format.compunit | Not_an_object_file of string - | Illegal_renaming of string * string * string + | Illegal_renaming of Cmo_format.compunit * string * Cmo_format.compunit | File_not_found of string exception Error of error val report_error: Format.formatter -> error -> unit -val reset: unit -> unit diff --git a/bytecomp/bytesections.ml b/bytecomp/bytesections.ml index 2beb0761..30a1c0fb 100644 --- a/bytecomp/bytesections.ml +++ b/bytecomp/bytesections.ml @@ -15,31 +15,94 @@ (* Handling of sections in bytecode executable files *) -(* List of all sections, in reverse order *) - -let section_table = ref ([] : (string * int) list) +module Name = struct + + type raw_name = string + + type t = + | CODE (** bytecode *) + | CRCS (** crcs for modules *) + | DATA (** global data (constant) *) + | DBUG (** debug info *) + | DLLS (** dll names *) + | DLPT (** dll paths *) + | PRIM (** primitives names *) + | RNTM (** The path to the bytecode interpreter (use_runtime mode) *) + | SYMB (** global identifiers *) + | Other of raw_name + + let of_string name = + match name with + | "CODE" -> CODE + | "DLPT" -> DLPT + | "DLLS" -> DLLS + | "DATA" -> DATA + | "PRIM" -> PRIM + | "SYMB" -> SYMB + | "DBUG" -> DBUG + | "CRCS" -> CRCS + | "RNTM" -> RNTM + | name -> + if String.length name <> 4 then + invalid_arg "Bytesections.Name.of_string: must be of size 4"; + Other name + + let to_string = function + | CODE -> "CODE" + | DLPT -> "DLPT" + | DLLS -> "DLLS" + | DATA -> "DATA" + | PRIM -> "PRIM" + | SYMB -> "SYMB" + | DBUG -> "DBUG" + | CRCS -> "CRCS" + | RNTM -> "RNTM" + | Other n -> n +end + +type section_entry = { + name : Name.t; + pos : int; + len : int; +} + +type section_table = { + sections : section_entry list; + first_pos : int +} (* Recording sections *) - -let section_beginning = ref 0 - -let init_record outchan = - section_beginning := pos_out outchan; - section_table := [] - -let record outchan name = +type toc_writer = { + (* List of all sections, in reverse order *) + mutable section_table_rev : section_entry list; + mutable section_prev : int; + outchan : out_channel; +} + +let init_record outchan : toc_writer = let pos = pos_out outchan in - section_table := (name, pos - !section_beginning) :: !section_table; - section_beginning := pos - -let write_toc_and_trailer outchan = + { section_prev = pos; + section_table_rev = []; + outchan } + +let record t name = + let pos = pos_out t.outchan in + if pos < t.section_prev then + invalid_arg "Bytesections.record: out_channel offset moved backward"; + let entry = {name; pos = t.section_prev; len = pos - t.section_prev} in + t.section_table_rev <- entry :: t.section_table_rev; + t.section_prev <- pos + +let write_toc_and_trailer t = + let section_table = List.rev t.section_table_rev in List.iter - (fun (name, len) -> - output_string outchan name; output_binary_int outchan len) - (List.rev !section_table); - output_binary_int outchan (List.length !section_table); - output_string outchan Config.exec_magic_number; - section_table := []; + (fun {name; pos = _; len} -> + let name = Name.to_string name in + assert (String.length name = 4); + output_string t.outchan name; output_binary_int t.outchan len) + section_table; + output_binary_int t.outchan (List.length section_table); + output_string t.outchan Config.exec_magic_number (* Read the table of sections from a bytecode executable *) @@ -53,49 +116,49 @@ let read_toc ic = really_input_string ic (String.length Config.exec_magic_number) in if header <> Config.exec_magic_number then raise Bad_magic_number; - seek_in ic (pos_trailer - 8 * num_sections); - section_table := []; + let toc_pos = pos_trailer - 8 * num_sections in + seek_in ic toc_pos; + let section_table_rev = ref [] in for _i = 1 to num_sections do - let name = really_input_string ic 4 in + let name = Name.of_string (really_input_string ic 4) in let len = input_binary_int ic in - section_table := (name, len) :: !section_table - done + section_table_rev := (name, len) :: !section_table_rev + done; + let first_pos, sections = + List.fold_left (fun (pos, l) (name, len) -> + let section = {name; pos = pos - len; len} in + (pos - len, section :: l)) (toc_pos, []) !section_table_rev + in + { sections; first_pos } + +let all t = t.sections -(* Return the current table of contents *) +let pos_first_section t = t.first_pos -let toc () = List.rev !section_table +let find_section t name = + let rec find = function + | [] -> raise Not_found + | {name = n; pos; len} :: rest -> + if n = name + then pos, len + else find rest + in find t.sections (* Position ic at the beginning of the section named "name", and return the length of that section. Raise Not_found if no such section exists. *) -let seek_section ic name = - let rec seek_sec curr_ofs = function - [] -> raise Not_found - | (n, len) :: rem -> - if n = name - then begin seek_in ic (curr_ofs - len); len end - else seek_sec (curr_ofs - len) rem in - seek_sec (in_channel_length ic - 16 - 8 * List.length !section_table) - !section_table +let seek_section t ic name = + let pos, len = find_section t name in + seek_in ic pos; len (* Return the contents of a section, as a string *) -let read_section_string ic name = - really_input_string ic (seek_section ic name) +let read_section_string t ic name = + really_input_string ic (seek_section t ic name) (* Return the contents of a section, as marshalled data *) -let read_section_struct ic name = - ignore (seek_section ic name); +let read_section_struct t ic name = + ignore (seek_section t ic name); input_value ic - -(* Return the position of the beginning of the first section *) - -let pos_first_section ic = - in_channel_length ic - 16 - 8 * List.length !section_table - - List.fold_left (fun total (_name, len) -> total + len) 0 !section_table - -let reset () = - section_table := []; - section_beginning := 0 diff --git a/bytecomp/bytesections.mli b/bytecomp/bytesections.mli index 22e1a3bb..3d287932 100644 --- a/bytecomp/bytesections.mli +++ b/bytecomp/bytesections.mli @@ -15,43 +15,74 @@ (* Handling of sections in bytecode executable files *) + +module Name : sig + + type raw_name = private string + + type t = + | CODE (** bytecode *) + | CRCS (** crcs for modules *) + | DATA (** global data (constant) *) + | DBUG (** debug info *) + | DLLS (** dll names *) + | DLPT (** dll paths *) + | PRIM (** primitives names *) + | RNTM (** The path to the bytecode interpreter (use_runtime mode) *) + | SYMB (** global identifiers *) + | Other of raw_name + + val of_string : string -> t + (** @raise Invalid_argument if the input is not of size 4 *) + + val to_string : t -> string +end + (** Recording sections written to a bytecode executable file *) -val init_record: out_channel -> unit - (* Start recording sections from the current position in out_channel *) +type toc_writer -val record: out_channel -> string -> unit - (* Record the current position in the out_channel as the end of - the section with the given name *) +val init_record: out_channel -> toc_writer +(** Start recording sections from the current position in out_channel *) -val write_toc_and_trailer: out_channel -> unit - (* Write the table of contents and the standard trailer for bytecode - executable files *) +val record: toc_writer -> Name.t -> unit +(** Record the current position in the out_channel as the end of + the section with the given name. *) + +val write_toc_and_trailer: toc_writer -> unit +(** Write the table of contents and the standard trailer for bytecode + executable files *) (** Reading sections from a bytecode executable file *) -val read_toc: in_channel -> unit - (* Read the table of sections from a bytecode executable *) +type section_entry = { + name : Name.t; (** name of the section. *) + pos : int; (** byte offset at which the section starts. *) + len : int; (** length of the section. *) +} + +type section_table exception Bad_magic_number - (* Raised by [read_toc] if magic number doesn't match *) -val toc: unit -> (string * int) list - (* Return the current table of contents as a list of - (section name, section length) pairs. *) +val read_toc: in_channel -> section_table +(** Read the table of sections from a bytecode executable. + Raise [Bad_magic_number] if magic number doesn't match *) -val seek_section: in_channel -> string -> int - (* Position the input channel at the beginning of the section named "name", - and return the length of that section. Raise Not_found if no - such section exists. *) +val seek_section: section_table -> in_channel -> Name.t -> int +(** Position the input channel at the beginning of the section named "name", + and return the length of that section. Raise Not_found if no + such section exists. *) -val read_section_string: in_channel -> string -> string - (* Return the contents of a section, as a string *) +val read_section_string: section_table -> in_channel -> Name.t -> string +(** Return the contents of a section, as a string. *) -val read_section_struct: in_channel -> string -> 'a - (* Return the contents of a section, as marshalled data *) +val read_section_struct: section_table -> in_channel -> Name.t -> 'a +(** Return the contents of a section, as marshalled data. *) -val pos_first_section: in_channel -> int - (* Return the position of the beginning of the first section *) +val all : section_table -> section_entry list +(** Returns all [section_entry] from a [section_table] in increasing + position order. *) -val reset: unit -> unit +val pos_first_section : section_table -> int +(** Return the position of the beginning of the first section *) diff --git a/bytecomp/dll.ml b/bytecomp/dll.ml index 0f45d15b..c8b280f9 100644 --- a/bytecomp/dll.ml +++ b/bytecomp/dll.ml @@ -19,7 +19,7 @@ type dll_handle type dll_address type dll_mode = For_checking | For_execution -external dll_open: dll_mode -> string -> dll_handle = "caml_dynlink_open_lib" +external dll_open: string -> dll_handle = "caml_dynlink_open_lib" external dll_close: dll_handle -> unit = "caml_dynlink_close_lib" external dll_sym: dll_handle -> string -> dll_address = "caml_dynlink_lookup_symbol" @@ -40,10 +40,7 @@ let dll_close = function | Execution dll -> dll_close dll (* DLLs currently opened *) -let opened_dlls = ref ([] : opened_dll list) - -(* File names for those DLLs *) -let names_of_opened_dlls = ref ([] : string list) +let opened_dlls = ref ([] : (string * opened_dll) list) (* Add the given directories to the search path for DLLs. *) let add_path dirs = @@ -74,26 +71,26 @@ let open_dll mode name = Filename.concat Filename.current_dir_name fullname else fullname with Not_found -> name in - if not (List.mem fullname !names_of_opened_dlls) then begin - let dll = - match mode with - | For_checking -> - begin match Binutils.read fullname with - | Ok t -> Checking t - | Error err -> - failwith (fullname ^ ": " ^ Binutils.error_to_string err) - end - | For_execution -> - begin match dll_open mode fullname with - | dll -> - Execution dll - | exception Failure msg -> - failwith (fullname ^ ": " ^ msg) - end - in - names_of_opened_dlls := fullname :: !names_of_opened_dlls; - opened_dlls := dll :: !opened_dlls - end + match List.assoc_opt fullname !opened_dlls, mode with + | Some (Execution _), (For_execution | For_checking) -> () + | Some (Checking _), For_checking -> () + | None, For_checking -> + begin match Binutils.read fullname with + | Ok t -> opened_dlls := (fullname, Checking t) :: !opened_dlls + | Error err -> + failwith (fullname ^ ": " ^ Binutils.error_to_string err) + end + | (None | Some (Checking _) as current), For_execution -> + begin match dll_open fullname with + | dll -> + let opened = match current with + | None -> List.remove_assoc fullname !opened_dlls + | Some _ -> !opened_dlls + in + opened_dlls := (fullname, Execution dll) :: opened + | exception Failure msg -> + failwith (fullname ^ ": " ^ msg) + end let open_dlls mode names = List.iter (open_dll mode) names @@ -101,9 +98,8 @@ let open_dlls mode names = (* Close all DLLs *) let close_all_dlls () = - List.iter dll_close !opened_dlls; + List.iter (fun (_, dll) -> dll_close dll) !opened_dlls; opened_dlls := []; - names_of_opened_dlls := [] (* Find a primitive in the currently opened DLLs. *) @@ -115,13 +111,13 @@ let find_primitive prim_name = let rec find seen = function [] -> None - | Execution dll as curr :: rem -> + | (_,Execution dll) as curr :: rem -> let addr = dll_sym dll prim_name in if addr == Obj.magic () then find (curr :: seen) rem else begin if seen <> [] then opened_dlls := curr :: List.rev_append seen rem; Some (Prim_loaded addr) end - | Checking t as curr :: rem -> + | (_,Checking t) as curr :: rem -> if Binutils.defines_symbol t prim_name then Some Prim_exists else @@ -168,9 +164,6 @@ let ld_library_path_contents () = | s -> Misc.split_path_contents s -let split_dll_path path = - Misc.split_path_contents ~sep:'\000' path - (* Initialization for separate compilation *) let init_compile nostdlib = @@ -180,19 +173,14 @@ let init_compile nostdlib = (* Initialization for linking in core (dynlink or toplevel) *) -let init_toplevel dllpath = - search_path := - ld_library_path_contents() @ - split_dll_path dllpath @ - ld_conf_contents(); +let init_toplevel dllpaths = + search_path := dllpaths; opened_dlls := - List.map (fun dll -> Execution dll) + List.map (fun dll -> "", Execution dll) (Array.to_list (get_current_dlls())); - names_of_opened_dlls := []; linking_in_core := true let reset () = search_path := []; opened_dlls :=[]; - names_of_opened_dlls := []; linking_in_core := false diff --git a/bytecomp/dll.mli b/bytecomp/dll.mli index 5d80e1d4..f87554ff 100644 --- a/bytecomp/dll.mli +++ b/bytecomp/dll.mli @@ -66,6 +66,6 @@ val init_compile: bool -> unit the running program (CAML_LD_LIBRARY_PATH + directories in executable + contents of ld.conf file). Take note of the DLLs that were opened when starting the running program. *) -val init_toplevel: string -> unit +val init_toplevel: string list -> unit val reset: unit -> unit diff --git a/bytecomp/emitcode.ml b/bytecomp/emitcode.ml index 8eefde57..c587f610 100644 --- a/bytecomp/emitcode.ml +++ b/bytecomp/emitcode.ml @@ -50,22 +50,30 @@ let () = ) (* Buffering of bytecode *) +let create_bigarray = Bigarray.Array1.create Bigarray.Char Bigarray.c_layout -let out_buffer = ref(LongString.create 1024) +let copy_bigarray src dst size = + Bigarray.Array1.(blit (sub src 0 size) (sub dst 0 size)) + +let out_buffer = ref(create_bigarray 0) and out_position = ref 0 +let extend_buffer needed = + let size = Bigarray.Array1.dim !out_buffer in + let new_size = ref(max size 16) (* we need new_size > 0 *) in + while needed >= !new_size do new_size := 2 * !new_size done; + let new_buffer = create_bigarray !new_size in + copy_bigarray !out_buffer new_buffer size; + out_buffer := new_buffer + let out_word b1 b2 b3 b4 = let p = !out_position in - if p >= LongString.length !out_buffer then begin - let len = LongString.length !out_buffer in - let new_buffer = LongString.create (2 * len) in - LongString.blit !out_buffer 0 new_buffer 0 len; - out_buffer := new_buffer - end; - LongString.set !out_buffer p (Char.unsafe_chr b1); - LongString.set !out_buffer (p+1) (Char.unsafe_chr b2); - LongString.set !out_buffer (p+2) (Char.unsafe_chr b3); - LongString.set !out_buffer (p+3) (Char.unsafe_chr b4); + let open Bigarray.Array1 in + if p+3 >= dim !out_buffer then extend_buffer (p+3); + set !out_buffer p (Char.unsafe_chr b1); + set !out_buffer (p+1) (Char.unsafe_chr b2); + set !out_buffer (p+2) (Char.unsafe_chr b3); + set !out_buffer (p+3) (Char.unsafe_chr b4); out_position := p + 4 let out opcode = @@ -106,7 +114,8 @@ type label_definition = let label_table = ref ([| |] : label_definition array) let extend_label_table needed = - let new_size = ref(Array.length !label_table) in + let size = Array.length !label_table in + let new_size = ref(max size 16) (* we need new_size > 0 *) in while needed >= !new_size do new_size := 2 * !new_size done; let new_table = Array.make !new_size (Label_undefined []) in Array.blit !label_table 0 new_table 0 (Array.length !label_table); @@ -114,10 +123,11 @@ let extend_label_table needed = let backpatch (pos, orig) = let displ = (!out_position - orig) asr 2 in - LongString.set !out_buffer pos (Char.unsafe_chr displ); - LongString.set !out_buffer (pos+1) (Char.unsafe_chr (displ asr 8)); - LongString.set !out_buffer (pos+2) (Char.unsafe_chr (displ asr 16)); - LongString.set !out_buffer (pos+3) (Char.unsafe_chr (displ asr 24)) + let open Bigarray.Array1 in + set !out_buffer pos (Char.unsafe_chr displ); + set !out_buffer (pos+1) (Char.unsafe_chr (displ asr 8)); + set !out_buffer (pos+2) (Char.unsafe_chr (displ asr 16)); + set !out_buffer (pos+3) (Char.unsafe_chr (displ asr 24)) let define_label lbl = if lbl >= Array.length !label_table then extend_label_table lbl; @@ -148,13 +158,24 @@ let enter info = reloc_info := (info, !out_position) :: !reloc_info let slot_for_literal sc = - enter (Reloc_literal sc); + enter (Reloc_literal (Symtable.transl_const sc)); out_int 0 and slot_for_getglobal id = - enter (Reloc_getglobal id); + let name = Ident.name id in + let reloc_info = + if Ident.is_predef id then (Reloc_getpredef (Predef_exn name)) + else if Ident.global id then (Reloc_getcompunit (Compunit name)) + else assert false + in + enter reloc_info; out_int 0 and slot_for_setglobal id = - enter (Reloc_setglobal id); + let name = Ident.name id in + let reloc_info = + if Ident.persistent id then (Reloc_setcompunit (Compunit name)) + else assert false + in + enter reloc_info; out_int 0 and slot_for_c_prim name = enter (Reloc_primitive name); @@ -178,12 +199,18 @@ let record_event ev = (* Initialization *) -let init () = +let clear() = out_position := 0; - label_table := Array.make 16 (Label_undefined []); + label_table := [||]; reloc_info := []; debug_dirs := String.Set.empty; - events := [] + events := []; + out_buffer := create_bigarray 0 + +let init () = + clear (); + label_table := Array.make 16 (Label_undefined []); + out_buffer := create_bigarray 1024 (* Emission of one instruction *) @@ -300,6 +327,10 @@ let emit_instr = function | Kgetpubmet tag -> out opGETPUBMET; out_int tag; out_int 0 | Kgetdynmet -> out opGETDYNMET | Kevent ev -> record_event ev + | Kperform -> out opPERFORM + | Kresume -> out opRESUME + | Kresumeterm n -> out opRESUMETERM; out_int n + | Kreperformterm n -> out opREPERFORMTERM; out_int n | Kstop -> out opSTOP (* Emission of a list of instructions. Include some peephole optimization. *) @@ -388,72 +419,74 @@ let rec emit = function (* Emission to a file *) -let to_file outchan unit_name objfile ~required_globals code = +let to_file outchan artifact_info ~required_globals code = init(); + Fun.protect ~finally:clear (fun () -> output_string outchan cmo_magic_number; let pos_depl = pos_out outchan in output_binary_int outchan 0; let pos_code = pos_out outchan in emit code; - LongString.output outchan !out_buffer 0 !out_position; + Out_channel.output_bigarray outchan !out_buffer 0 !out_position; let (pos_debug, size_debug) = if !Clflags.debug then begin + let filename = Unit_info.Artifact.filename artifact_info in debug_dirs := String.Set.add - (Filename.dirname (Location.absolute_path objfile)) + (Filename.dirname (Location.absolute_path filename)) !debug_dirs; let p = pos_out outchan in - output_value outchan !events; - output_value outchan (String.Set.elements !debug_dirs); + Compression.output_value outchan !events; + Compression.output_value outchan (String.Set.elements !debug_dirs); (p, pos_out outchan - p) end else (0, 0) in let compunit = - { cu_name = unit_name; + { cu_name = Cmo_format.Compunit (Unit_info.Artifact.modname artifact_info); cu_pos = pos_code; cu_codesize = !out_position; cu_reloc = List.rev !reloc_info; cu_imports = Env.imports(); cu_primitives = List.map Primitive.byte_name !Translmod.primitive_declarations; - cu_required_globals = Ident.Set.elements required_globals; + cu_required_compunits = List.map (fun id -> Compunit (Ident.name id)) + (Ident.Set.elements required_globals); cu_force_link = !Clflags.link_everything; cu_debug = pos_debug; cu_debugsize = size_debug } in - init(); (* Free out_buffer and reloc_info *) - Btype.cleanup_abbrev (); (* Remove any cached abbreviation - expansion before saving *) let pos_compunit = pos_out outchan in - marshal_to_channel_with_possibly_32bit_compat - ~filename:objfile ~kind:"bytecode unit" - outchan compunit; + let () = + (* Remove any cached abbreviation expansion before marshaling. + See doc-comment for [Types.abbrev_memo] *) + Btype.cleanup_abbrev (); + marshal_to_channel_with_possibly_32bit_compat + ~filename:(Unit_info.Artifact.filename artifact_info) + ~kind:"bytecode unit" + outchan compunit + in seek_out outchan pos_depl; - output_binary_int outchan pos_compunit + output_binary_int outchan pos_compunit) (* Emission to a memory block *) -let to_memory init_code fun_code = +let to_memory instrs = init(); - emit init_code; - emit fun_code; - let code = LongString.create !out_position in - LongString.blit !out_buffer 0 code 0 !out_position; + Fun.protect ~finally:clear (fun () -> + emit instrs; + let code = create_bigarray !out_position in + copy_bigarray !out_buffer code !out_position; let reloc = List.rev !reloc_info in let events = !events in - init(); - (code, reloc, events) + (code, reloc, events)) (* Emission to a file for a packed library *) let to_packed_file outchan code = - init(); + init (); + Fun.protect ~finally:clear (fun () -> emit code; - LongString.output outchan !out_buffer 0 !out_position; - let reloc = !reloc_info in - init(); - reloc - -let reset () = - out_buffer := LongString.create 1024; - out_position := 0; - label_table := [| |]; - reloc_info := [] + Out_channel.output_bigarray outchan !out_buffer 0 !out_position; + let reloc = List.rev !reloc_info in + let events = !events in + let debug_dirs = !debug_dirs in + let size = !out_position in + (size, reloc, events, debug_dirs)) diff --git a/bytecomp/emitcode.mli b/bytecomp/emitcode.mli index 95da242e..45dec1de 100644 --- a/bytecomp/emitcode.mli +++ b/bytecomp/emitcode.mli @@ -18,7 +18,7 @@ open Cmo_format open Instruct -val to_file: out_channel -> string -> string -> +val to_file: out_channel -> Unit_info.Artifact.t -> required_globals:Ident.Set.t -> instruction list -> unit (* Arguments: channel on output file @@ -28,8 +28,9 @@ val to_file: out_channel -> string -> string -> evaluated before this one list of instructions to emit *) val to_memory: - instruction list -> instruction list -> - Misc.LongString.t * (reloc_info * int) list * debug_event list + instruction list -> + (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t * + (reloc_info * int) list * debug_event list (* Arguments: initialization code (terminated by STOP) function code @@ -38,14 +39,17 @@ val to_memory: relocation information debug events *) val to_packed_file: - out_channel -> instruction list -> (reloc_info * int) list + out_channel -> instruction list -> + int * (reloc_info * int) list * debug_event list * Misc.Stdlib.String.Set.t (* Arguments: channel on output file list of instructions to emit Result: - relocation information (reversed) *) - -val reset: unit -> unit + size of the emitted code + relocation information + debug events + debug directory + *) val marshal_to_channel_with_possibly_32bit_compat : filename:string -> kind:string -> out_channel -> 'a -> unit diff --git a/bytecomp/instruct.ml b/bytecomp/instruct.ml index c684bedf..f28cb0bd 100644 --- a/bytecomp/instruct.ml +++ b/bytecomp/instruct.ml @@ -15,10 +15,20 @@ open Lambda +type closure_entry = + | Free_variable of int + | Function of int + +type closure_env = + | Not_in_closure + | In_closure of { + entries: closure_entry Ident.tbl; + env_pos: int; + } + type compilation_env = { ce_stack: int Ident.tbl; - ce_heap: int Ident.tbl; - ce_rec: int Ident.tbl } + ce_closure: closure_env } type debug_event = { mutable ev_pos: int; (* Position in bytecode *) @@ -104,6 +114,10 @@ type instruction = | Kgetpubmet of int | Kgetdynmet | Kevent of debug_event + | Kperform + | Kresume + | Kresumeterm of int + | Kreperformterm of int | Kstop let immed_min = -0x40000000 diff --git a/bytecomp/instruct.mli b/bytecomp/instruct.mli index e1cae776..84bd0702 100644 --- a/bytecomp/instruct.mli +++ b/bytecomp/instruct.mli @@ -19,21 +19,35 @@ open Lambda (* Structure of compilation environments *) +type closure_entry = + | Free_variable of int + | Function of int + +type closure_env = + | Not_in_closure + | In_closure of { + entries: closure_entry Ident.tbl; (* Offsets of the free variables and + recursive functions from the start of + the block *) + env_pos: int; (* Offset of the current function from + the start of the block *) + } + type compilation_env = - { ce_stack: int Ident.tbl; (* Positions of variables in the stack *) - ce_heap: int Ident.tbl; (* Structure of the heap-allocated env *) - ce_rec: int Ident.tbl } (* Functions bound by the same let rec *) + { ce_stack: int Ident.tbl; (* Positions of variables in the stack *) + ce_closure: closure_env } (* Structure of the heap-allocated env *) (* The ce_stack component gives locations of variables residing in the stack. The locations are offsets w.r.t. the origin of the stack frame. - The ce_heap component gives the positions of variables residing in the - heap-allocated environment. - The ce_rec component associates offsets to identifiers for functions - bound by the same let rec as the current function. The offsets - are used by the OFFSETCLOSURE instruction to recover the closure - pointer of the desired function from the env register (which - points to the closure for the current function). *) + The ce_closure component gives the positions of variables residing in the + heap-allocated environment. The env_pos component gives the position of + the current function from the start of the closure block, and the entries + component gives the positions of free variables and functions bound by the + same let rec as the current function, from the start of the closure block. + These are used by the ENVACC and OFFSETCLOSURE instructions to recover the + relevant value from the env register (which points to the current function). +*) (* Debugging events *) @@ -124,6 +138,10 @@ type instruction = | Kgetpubmet of int | Kgetdynmet | Kevent of debug_event + | Kperform + | Kresume + | Kresumeterm of int + | Kreperformterm of int | Kstop val immed_min: int diff --git a/bytecomp/meta.ml b/bytecomp/meta.ml index db2ba155..c1ec15f3 100644 --- a/bytecomp/meta.ml +++ b/bytecomp/meta.ml @@ -18,12 +18,11 @@ external realloc_global_data : int -> unit = "caml_realloc_global" type closure = unit -> Obj.t type bytecode external reify_bytecode : - bytes array -> Instruct.debug_event list array -> string option -> + (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -> + Instruct.debug_event list array -> string option -> bytecode * closure = "caml_reify_bytecode" external release_bytecode : bytecode -> unit = "caml_static_release_bytecode" external invoke_traced_function : Obj.raw_data -> Obj.t -> Obj.t -> Obj.t = "caml_invoke_traced_function" -external get_section_table : unit -> (string * Obj.t) list - = "caml_get_section_table" diff --git a/bytecomp/meta.mli b/bytecomp/meta.mli index 6ce6ea03..e48898b2 100644 --- a/bytecomp/meta.mli +++ b/bytecomp/meta.mli @@ -20,12 +20,11 @@ external realloc_global_data : int -> unit = "caml_realloc_global" type closure = unit -> Obj.t type bytecode external reify_bytecode : - bytes array -> Instruct.debug_event list array -> string option -> + (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -> + Instruct.debug_event list array -> string option -> bytecode * closure = "caml_reify_bytecode" external release_bytecode : bytecode -> unit = "caml_static_release_bytecode" external invoke_traced_function : Obj.raw_data -> Obj.t -> Obj.t -> Obj.t = "caml_invoke_traced_function" -external get_section_table : unit -> (string * Obj.t) list - = "caml_get_section_table" diff --git a/bytecomp/printinstr.ml b/bytecomp/printinstr.ml index 6b3754cb..56425237 100644 --- a/bytecomp/printinstr.ml +++ b/bytecomp/printinstr.ml @@ -100,6 +100,10 @@ let instruction ppf = function | Kgetmethod -> fprintf ppf "\tgetmethod" | Kgetpubmet n -> fprintf ppf "\tgetpubmet %i" n | Kgetdynmet -> fprintf ppf "\tgetdynmet" + | Kperform -> fprintf ppf "\tperform" + | Kresume -> fprintf ppf "\tresume" + | Kresumeterm n -> fprintf ppf "\tresumeterm %i" n + | Kreperformterm n -> fprintf ppf "\treperformterm %i" n | Kstop -> fprintf ppf "\tstop" | Kevent ev -> fprintf ppf "\tevent \"%s\" %i-%i" ev.ev_loc.Location.loc_start.Lexing.pos_fname diff --git a/bytecomp/symtable.ml b/bytecomp/symtable.ml index 18960437..21f87ee4 100644 --- a/bytecomp/symtable.ml +++ b/bytecomp/symtable.ml @@ -13,24 +13,69 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "-40"] - (* To assign numbers to globals and primitives *) open Misc -open Asttypes open Lambda open Cmo_format module String = Misc.Stdlib.String +module Style = Misc.Style + +module Compunit = struct + type t = compunit + let name (Compunit cu_name) = cu_name + let is_packed (Compunit name) = String.contains name '.' + let to_ident (Compunit cu_name) = Ident.create_persistent cu_name + module Set = Set.Make(struct type nonrec t = t let compare = compare end) + module Map = Map.Make(struct type nonrec t = t let compare = compare end) +end + +let builtin_values = Predef.builtin_values + +module Predef = struct + type t = predef + module Set = Set.Make(struct type nonrec t = t let compare = compare end) + module Map = Map.Make(struct type nonrec t = t let compare = compare end) +end + +module Global = struct + type t = + | Glob_compunit of compunit + | Glob_predef of predef + + let name = function + | Glob_compunit (Compunit cu) -> cu + | Glob_predef (Predef_exn exn) -> exn + + let quote s = "`" ^ s ^ "'" + + let description ppf = function + | Glob_compunit (Compunit cu) -> + Format.fprintf ppf "compilation unit %a" Style.inline_code (quote cu) + | Glob_predef (Predef_exn exn) -> + Format.fprintf ppf "predefined exception %a" + Style.inline_code (quote exn) + + let of_ident id = + let name = Ident.name id in + if (Ident.is_predef id) + then Some (Glob_predef (Predef_exn name)) + else if (Ident.global id) + then Some (Glob_compunit (Compunit name)) + else None + + module Set = Set.Make(struct type nonrec t = t let compare = compare end) + module Map = Map.Make(struct type nonrec t = t let compare = compare end) +end (* Functions for batch linking *) type error = - Undefined_global of string + Undefined_global of Global.t | Unavailable_primitive of string | Wrong_vm of string - | Uninitialized_global of string + | Uninitialized_global of Global.t exception Error of error @@ -57,25 +102,25 @@ module Num_tbl (M : Map.S) = struct n end -module GlobalMap = Num_tbl(Ident.Map) +module GlobalMap = Num_tbl(Global.Map) module PrimMap = Num_tbl(Misc.Stdlib.String.Map) (* Global variables *) let global_table = ref GlobalMap.empty -and literal_table = ref([] : (int * structured_constant) list) +and literal_table = ref([] : (int * Obj.t) list) -let is_global_defined id = - Ident.Map.mem id (!global_table).tbl +let is_global_defined global = + Global.Map.mem global (!global_table).tbl -let slot_for_getglobal id = +let slot_for_getglobal global = try - GlobalMap.find !global_table id + GlobalMap.find !global_table global with Not_found -> - raise(Error(Undefined_global(Ident.name id))) + raise(Error (Undefined_global global)) -let slot_for_setglobal id = - GlobalMap.enter global_table id +let slot_for_setglobal global = + GlobalMap.enter global_table global let slot_for_literal cst = let n = GlobalMap.incr global_table in @@ -117,34 +162,60 @@ let all_primitives () = prim let data_primitive_names () = - let prim = all_primitives() in - let b = Buffer.create 512 in - for i = 0 to Array.length prim - 1 do - Buffer.add_string b prim.(i); Buffer.add_char b '\000' - done; - Buffer.contents b + all_primitives() + |> Array.to_list let output_primitive_names outchan = - output_string outchan (data_primitive_names()) + output_string outchan (data_primitive_names() |> concat_null_terminated) open Printf let output_primitive_table outchan = let prim = all_primitives() in for i = 0 to Array.length prim - 1 do - fprintf outchan "extern value %s();\n" prim.(i) + fprintf outchan "extern value %s(void);\n" prim.(i) done; - fprintf outchan "typedef value (*primitive)();\n"; - fprintf outchan "primitive caml_builtin_cprim[] = {\n"; + fprintf outchan "typedef value (*c_primitive)(void);\n"; + fprintf outchan "#if defined __cplusplus\n"; + fprintf outchan "extern\n"; + fprintf outchan "#endif\n"; + fprintf outchan "const c_primitive caml_builtin_cprim[] = {\n"; for i = 0 to Array.length prim - 1 do fprintf outchan " %s,\n" prim.(i) done; - fprintf outchan " (primitive) 0 };\n"; - fprintf outchan "const char * caml_names_of_builtin_cprim[] = {\n"; + fprintf outchan " 0 };\n"; + fprintf outchan "#if defined __cplusplus\n"; + fprintf outchan "extern\n"; + fprintf outchan "#endif\n"; + fprintf outchan "const char * const caml_names_of_builtin_cprim[] = {\n"; for i = 0 to Array.length prim - 1 do fprintf outchan " \"%s\",\n" prim.(i) done; - fprintf outchan " (char *) 0 };\n" + fprintf outchan " 0 };\n" + +(* Translate structured constants *) + +let rec transl_const = function + Const_base(Const_int i) -> Obj.repr i + | Const_base(Const_char c) -> Obj.repr c + | Const_base(Const_string (s, _, _)) -> Obj.repr s + | Const_base(Const_float f) -> Obj.repr (float_of_string f) + | Const_base(Const_int32 i) -> Obj.repr i + | Const_base(Const_int64 i) -> Obj.repr i + | Const_base(Const_nativeint i) -> Obj.repr i + | Const_immstring s -> Obj.repr s + | Const_block(tag, fields) -> + let block = Obj.new_block tag (List.length fields) in + let transl_field pos cst = + Obj.set_field block pos (transl_const cst) + in + List.iteri transl_field fields; + block + | Const_float_array fields -> + let res = Array.Floatarray.create (List.length fields) in + List.iteri (fun i f -> Array.Floatarray.set res i (float_of_string f)) + fields; + Obj.repr res (* Initialization for batch linking *) @@ -152,17 +223,17 @@ let init () = (* Enter the predefined exceptions *) Array.iteri (fun i name -> - let id = - try List.assoc name Predef.builtin_values - with Not_found -> fatal_error "Symtable.init" in - let c = slot_for_setglobal id in + if not (List.mem_assoc name builtin_values) + then fatal_error "Symtable.init"; + let global = Global.Glob_predef (Predef_exn name) in + let c = slot_for_setglobal global in let cst = Const_block (Obj.object_tag, [Const_base(Const_string (name, Location.none,None)); Const_base(Const_int (-i-1)) ]) in - literal_table := (c, cst) :: !literal_table) + literal_table := (c, transl_const cst) :: !literal_table) Runtimedef.builtin_exceptions; (* Initialize the known C primitives *) let set_prim_table_from_file primfile = @@ -184,8 +255,15 @@ let init () = Misc.try_finally ~always:(fun () -> remove_file primfile) (fun () -> - if Sys.command(Printf.sprintf "%s -p > %s" - !Clflags.use_runtime primfile) <> 0 + let cmd = + Filename.quote_command + !Clflags.use_runtime + ~stdout:primfile + ["-p"] + in + if !Clflags.verbose then + Printf.eprintf "+ %s\n%!" cmd; + if Sys.command cmd <> 0 then raise(Error(Wrong_vm !Clflags.use_runtime)); set_prim_table_from_file primfile ) @@ -196,54 +274,36 @@ let init () = (* Relocate a block of object bytecode *) let patch_int buff pos n = - LongString.set buff pos (Char.unsafe_chr n); - LongString.set buff (pos + 1) (Char.unsafe_chr (n asr 8)); - LongString.set buff (pos + 2) (Char.unsafe_chr (n asr 16)); - LongString.set buff (pos + 3) (Char.unsafe_chr (n asr 24)) + let open Bigarray.Array1 in + set buff pos (Char.unsafe_chr n); + set buff (pos + 1) (Char.unsafe_chr (n asr 8)); + set buff (pos + 2) (Char.unsafe_chr (n asr 16)); + set buff (pos + 3) (Char.unsafe_chr (n asr 24)) let patch_object buff patchlist = List.iter (function (Reloc_literal sc, pos) -> patch_int buff pos (slot_for_literal sc) - | (Reloc_getglobal id, pos) -> - patch_int buff pos (slot_for_getglobal id) - | (Reloc_setglobal id, pos) -> - patch_int buff pos (slot_for_setglobal id) + | (Reloc_getcompunit cu, pos) -> + let global = Global.Glob_compunit cu in + patch_int buff pos (slot_for_getglobal global) + | (Reloc_getpredef pd, pos) -> + let global = Global.Glob_predef pd in + patch_int buff pos (slot_for_getglobal global) + | (Reloc_setcompunit cu, pos) -> + let global = Global.Glob_compunit cu in + patch_int buff pos (slot_for_setglobal global) | (Reloc_primitive name, pos) -> patch_int buff pos (of_prim name)) patchlist -(* Translate structured constants *) - -let rec transl_const = function - Const_base(Const_int i) -> Obj.repr i - | Const_base(Const_char c) -> Obj.repr c - | Const_base(Const_string (s, _, _)) -> Obj.repr s - | Const_base(Const_float f) -> Obj.repr (float_of_string f) - | Const_base(Const_int32 i) -> Obj.repr i - | Const_base(Const_int64 i) -> Obj.repr i - | Const_base(Const_nativeint i) -> Obj.repr i - | Const_immstring s -> Obj.repr s - | Const_block(tag, fields) -> - let block = Obj.new_block tag (List.length fields) in - let pos = ref 0 in - List.iter - (fun c -> Obj.set_field block !pos (transl_const c); incr pos) - fields; - block - | Const_float_array fields -> - let res = Array.Floatarray.create (List.length fields) in - List.iteri (fun i f -> Array.Floatarray.set res i (float_of_string f)) - fields; - Obj.repr res - (* Build the initial table of globals *) let initial_global_table () = let glob = Array.make !global_table.cnt (Obj.repr 0) in List.iter - (fun (slot, cst) -> glob.(slot) <- transl_const cst) + (fun (slot, cst) -> glob.(slot) <- cst) !literal_table; literal_table := []; glob @@ -265,103 +325,71 @@ let update_global_table () = if ng > Array.length(Meta.global_data()) then Meta.realloc_global_data ng; let glob = Meta.global_data() in List.iter - (fun (slot, cst) -> glob.(slot) <- transl_const cst) + (fun (slot, cst) -> glob.(slot) <- cst) !literal_table; literal_table := [] -(* Recover data for toplevel initialization. Data can come either from - executable file (normal case) or from linked-in data (-output-obj). *) +type bytecode_sections = + { symb: GlobalMap.t; + crcs: (string * Digest.t option) list; + prim: string list; + dlpt: string list } -type section_reader = { - read_string: string -> string; - read_struct: string -> Obj.t; - close_reader: unit -> unit -} - -let read_sections () = - try - let sections = Meta.get_section_table () in - { read_string = - (fun name -> (Obj.magic(List.assoc name sections) : string)); - read_struct = - (fun name -> List.assoc name sections); - close_reader = - (fun () -> ()) } - with Not_found -> - let ic = open_in_bin Sys.executable_name in - Bytesections.read_toc ic; - { read_string = Bytesections.read_section_string ic; - read_struct = Bytesections.read_section_struct ic; - close_reader = fun () -> close_in ic } +external get_bytecode_sections : unit -> bytecode_sections = + "caml_dynlink_get_bytecode_sections" (* Initialize the linker for toplevel use *) let init_toplevel () = - try - let sect = read_sections () in - (* Locations of globals *) - global_table := (Obj.magic (sect.read_struct "SYMB") : GlobalMap.t); - (* Primitives *) - let prims = sect.read_string "PRIM" in - c_prim_table := PrimMap.empty; - let pos = ref 0 in - while !pos < String.length prims do - let i = String.index_from prims !pos '\000' in - set_prim_table (String.sub prims !pos (i - !pos)); - pos := i + 1 - done; - (* DLL initialization *) - let dllpath = try sect.read_string "DLPT" with Not_found -> "" in - Dll.init_toplevel dllpath; - (* Recover CRC infos for interfaces *) - let crcintfs = - try - (Obj.magic (sect.read_struct "CRCS") : (string * Digest.t option) list) - with Not_found -> [] in - (* Done *) - sect.close_reader(); - crcintfs - with Bytesections.Bad_magic_number | Not_found | Failure _ -> - fatal_error "Toplevel bytecode executable is corrupted" + let sect = get_bytecode_sections () in + global_table := sect.symb; + c_prim_table := PrimMap.empty; + List.iter set_prim_table sect.prim; + Dll.init_toplevel sect.dlpt; + sect.crcs (* Find the value of a global identifier *) -let get_global_position id = slot_for_getglobal id +let get_global_position = slot_for_getglobal -let get_global_value id = - (Meta.global_data()).(slot_for_getglobal id) -let assign_global_value id v = - (Meta.global_data()).(slot_for_getglobal id) <- v +let get_global_value global = + (Meta.global_data()).(slot_for_getglobal global) +let assign_global_value global v = + (Meta.global_data()).(slot_for_getglobal global) <- v -(* Check that all globals referenced in the given patch list - have been initialized already *) +(* Check that all compilation units referenced in the given patch list + have already been initialized *) -let defined_globals patchlist = - List.fold_left (fun accu rel -> - match rel with - | (Reloc_setglobal id, _pos) -> id :: accu - | _ -> accu) +let initialized_compunits patchlist = + List.fold_left (fun compunits rel -> + match fst rel with + | Reloc_setcompunit compunit -> compunit :: compunits + | Reloc_literal _ | Reloc_getcompunit _ | Reloc_getpredef _ + | Reloc_primitive _ -> compunits) [] patchlist -let required_globals patchlist = - List.fold_left (fun accu rel -> - match rel with - | (Reloc_getglobal id, _pos) -> id :: accu - | _ -> accu) +let required_compunits patchlist = + List.fold_left (fun compunits rel -> + match fst rel with + | Reloc_getcompunit compunit -> compunit :: compunits + | Reloc_literal _ | Reloc_getpredef _ | Reloc_setcompunit _ + | Reloc_primitive _ -> compunits) [] patchlist let check_global_initialized patchlist = - (* First determine the globals we will define *) - let defined_globals = defined_globals patchlist in - (* Then check that all referenced, not defined globals have a value *) - let check_reference = function - (Reloc_getglobal id, _pos) -> - if not (List.mem id defined_globals) - && Obj.is_int (get_global_value id) - then raise (Error(Uninitialized_global(Ident.name id))) - | _ -> () in + (* First determine the compilation units we will define *) + let initialized_compunits = initialized_compunits patchlist in + (* Then check that all referenced, not defined comp units have a value *) + let check_reference (rel, _) = match rel with + Reloc_getcompunit compunit -> + let global = Global.Glob_compunit compunit in + if not (List.mem compunit initialized_compunits) + && Obj.is_int (get_global_value global) + then raise (Error(Uninitialized_global global)) + | Reloc_literal _ | Reloc_getpredef _ | Reloc_setcompunit _ + | Reloc_primitive _ -> () in List.iter check_reference patchlist (* Save and restore the current state *) @@ -384,17 +412,18 @@ let hide_additions (st : global_map) = Used to expunge the global map for the toplevel. *) let filter_global_map p (gmap : global_map) = - let newtbl = ref Ident.Map.empty in - Ident.Map.iter - (fun id num -> if p id then newtbl := Ident.Map.add id num !newtbl) + let newtbl = ref Global.Map.empty in + Global.Map.iter + (fun global num -> + if p global then newtbl := Global.Map.add global num !newtbl) gmap.tbl; {GlobalMap. cnt = gmap.cnt; tbl = !newtbl} let iter_global_map f (gmap : global_map) = - Ident.Map.iter f gmap.tbl + Global.Map.iter f gmap.tbl -let is_defined_in_global_map (gmap : global_map) id = - Ident.Map.mem id gmap.tbl +let is_defined_in_global_map (gmap : global_map) global = + Global.Map.mem global gmap.tbl let empty_global_map = GlobalMap.empty @@ -403,14 +432,17 @@ let empty_global_map = GlobalMap.empty open Format let report_error ppf = function - | Undefined_global s -> - fprintf ppf "Reference to undefined global `%s'" s + | Undefined_global global -> + fprintf ppf "Reference to undefined %a" Global.description global | Unavailable_primitive s -> - fprintf ppf "The external function `%s' is not available" s + fprintf ppf "The external function %a is not available" + Style.inline_code s | Wrong_vm s -> - fprintf ppf "Cannot find or execute the runtime system %s" s - | Uninitialized_global s -> - fprintf ppf "The value of the global `%s' is not yet computed" s + fprintf ppf "Cannot find or execute the runtime system %a" + Style.inline_code s + | Uninitialized_global global -> + fprintf ppf "The value of the %a is not yet computed" + Global.description global let () = Location.register_error_of_exn diff --git a/bytecomp/symtable.mli b/bytecomp/symtable.mli index 782a6086..cb3336af 100644 --- a/bytecomp/symtable.mli +++ b/bytecomp/symtable.mli @@ -17,30 +17,58 @@ open Cmo_format +module Compunit : sig + type t = compunit + val name : t -> string + val is_packed : compunit -> bool + val to_ident : compunit -> Ident.t + module Set : Set.S with type elt = t + module Map : Map.S with type key = t +end + +module Predef : sig + type t = predef + module Set : Set.S with type elt = t + module Map : Map.S with type key = t +end + +module Global : sig + type t = + | Glob_compunit of compunit + | Glob_predef of predef + val name: t -> string + val description: Format.formatter -> t -> unit + val of_ident: Ident.t -> t option + module Set : Set.S with type elt = t + module Map : Map.S with type key = t +end + (* Functions for batch linking *) val init: unit -> unit -val patch_object: Misc.LongString.t -> (reloc_info * int) list -> unit +val patch_object: + (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -> + (reloc_info * int) list -> unit val require_primitive: string -> unit val initial_global_table: unit -> Obj.t array val output_global_map: out_channel -> unit val output_primitive_names: out_channel -> unit val output_primitive_table: out_channel -> unit val data_global_map: unit -> Obj.t -val data_primitive_names: unit -> string +val data_primitive_names: unit -> string list val transl_const: Lambda.structured_constant -> Obj.t (* Functions for the toplevel *) val init_toplevel: unit -> (string * Digest.t option) list val update_global_table: unit -> unit -val get_global_value: Ident.t -> Obj.t -val is_global_defined: Ident.t -> bool -val assign_global_value: Ident.t -> Obj.t -> unit -val get_global_position: Ident.t -> int +val get_global_value: Global.t -> Obj.t +val is_global_defined: Global.t -> bool +val assign_global_value: Global.t -> Obj.t -> unit +val get_global_position: Global.t -> int val check_global_initialized: (reloc_info * int) list -> unit -val defined_globals: (reloc_info * int) list -> Ident.t list -val required_globals: (reloc_info * int) list -> Ident.t list +val initialized_compunits: (reloc_info * int) list -> compunit list +val required_compunits: (reloc_info * int) list -> compunit list type global_map @@ -48,17 +76,17 @@ val empty_global_map: global_map val current_state: unit -> global_map val restore_state: global_map -> unit val hide_additions: global_map -> unit -val filter_global_map: (Ident.t -> bool) -> global_map -> global_map -val iter_global_map : (Ident.t -> int -> unit) -> global_map -> unit -val is_defined_in_global_map: global_map -> Ident.t -> bool +val filter_global_map: (Global.t -> bool) -> global_map -> global_map +val iter_global_map : (Global.t -> int -> unit) -> global_map -> unit +val is_defined_in_global_map: global_map -> Global.t -> bool (* Error report *) type error = - Undefined_global of string + Undefined_global of Global.t | Unavailable_primitive of string | Wrong_vm of string - | Uninitialized_global of string + | Uninitialized_global of Global.t exception Error of error diff --git a/compilerlibs/META.in b/compilerlibs/META.in new file mode 100644 index 00000000..4c36fc98 --- /dev/null +++ b/compilerlibs/META.in @@ -0,0 +1,44 @@ +# @configure_input@ + +version = "@VERSION@" +description = "compiler-libs support library" + +package "common" ( + requires = "compiler-libs" + version = "@VERSION@" + description = "Common compiler routines" + archive(byte) = "ocamlcommon.cma" + archive(native) = "ocamlcommon.cmxa" +) + +package "bytecomp" ( + requires = "compiler-libs.common" + version = "@VERSION@" + description = "Bytecode compiler" + archive(byte) = "ocamlbytecomp.cma" + archive(native) = "ocamlbytecomp.cmxa" +) + +package "optcomp" ( + requires = "compiler-libs.common" + version = "@VERSION@" + description = "Native-code compiler" + archive(byte) = "ocamloptcomp.cma" + archive(native) = "ocamloptcomp.cmxa" + exists_if = "ocamloptcomp.cma" +) + +package "toplevel" ( + requires = "compiler-libs.bytecomp" + version = "@VERSION@" + description = "Toplevel interactions" + archive(byte) = "ocamltoplevel.cma" +) + +package "native-toplevel" ( + requires = "compiler-libs.optcomp dynlink" + version = "@VERSION@" + description = "Toplevel interactions" + archive(native) = "ocamltoplevel.cmxa" + exists_if = "ocamltoplevel.cmxa" +) diff --git a/compilerlibs/Makefile.compilerlibs b/compilerlibs/Makefile.compilerlibs deleted file mode 100644 index f6618999..00000000 --- a/compilerlibs/Makefile.compilerlibs +++ /dev/null @@ -1,466 +0,0 @@ -#************************************************************************** -#* * -#* OCaml * -#* * -#* Xavier Leroy, projet Cristal, INRIA Rocquencourt * -#* * -#* Copyright 1999 Institut National de Recherche en Informatique et * -#* en Automatique. * -#* * -#* All rights reserved. This file is distributed under the terms of * -#* the GNU Lesser General Public License version 2.1, with the * -#* special exception on linking described in the file LICENSE. * -#* * -#************************************************************************** - -# Targets and dependencies for compilerlibs archives - -# This file is meant to be included from the root Makefile, not to be -# executed directly (this is why it is not simply named Makefile). - -# For each group of compilation units, we have a variable GROUP with -# only .cmo files, and a separate variable GROUP_CMI for .cmi files -# corresponding to the .mli-only modules only. These .cmi are not -# linked in the archive, but they are marked as dependencies to ensure -# that they are consistent with the interface digests in the archives. - -UTILS = \ - utils/config.cmo \ - utils/build_path_prefix_map.cmo \ - utils/misc.cmo \ - utils/identifiable.cmo \ - utils/numbers.cmo \ - utils/arg_helper.cmo \ - utils/clflags.cmo \ - utils/profile.cmo \ - utils/local_store.cmo \ - utils/load_path.cmo \ - utils/terminfo.cmo \ - utils/ccomp.cmo \ - utils/warnings.cmo \ - utils/consistbl.cmo \ - utils/strongly_connected_components.cmo \ - utils/targetint.cmo \ - utils/int_replace_polymorphic_compare.cmo \ - utils/domainstate.cmo \ - utils/binutils.cmo \ - utils/lazy_backtrack.cmo \ - utils/diffing.cmo \ - utils/diffing_with_keys.cmo -UTILS_CMI = - -PARSING = \ - parsing/location.cmo \ - parsing/longident.cmo \ - parsing/docstrings.cmo \ - parsing/syntaxerr.cmo \ - parsing/ast_helper.cmo \ - parsing/pprintast.cmo \ - parsing/camlinternalMenhirLib.cmo \ - parsing/parser.cmo \ - parsing/lexer.cmo \ - parsing/parse.cmo \ - parsing/printast.cmo \ - parsing/ast_mapper.cmo \ - parsing/ast_iterator.cmo \ - parsing/attr_helper.cmo \ - parsing/builtin_attributes.cmo \ - parsing/ast_invariants.cmo \ - parsing/depend.cmo -PARSING_CMI = \ - parsing/asttypes.cmi \ - parsing/parsetree.cmi - -TYPING = \ - typing/ident.cmo \ - typing/path.cmo \ - typing/primitive.cmo \ - typing/type_immediacy.cmo \ - typing/shape.cmo \ - typing/types.cmo \ - typing/btype.cmo \ - typing/oprint.cmo \ - typing/subst.cmo \ - typing/predef.cmo \ - typing/datarepr.cmo \ - file_formats/cmi_format.cmo \ - typing/persistent_env.cmo \ - typing/env.cmo \ - typing/errortrace.cmo \ - typing/typedtree.cmo \ - typing/signature_group.cmo \ - typing/printtyped.cmo \ - typing/ctype.cmo \ - typing/printtyp.cmo \ - typing/includeclass.cmo \ - typing/mtype.cmo \ - typing/envaux.cmo \ - typing/includecore.cmo \ - typing/tast_iterator.cmo \ - typing/tast_mapper.cmo \ - typing/stypes.cmo \ - file_formats/cmt_format.cmo \ - typing/cmt2annot.cmo \ - typing/untypeast.cmo \ - typing/includemod.cmo \ - typing/includemod_errorprinter.cmo \ - typing/typetexp.cmo \ - typing/printpat.cmo \ - typing/patterns.cmo \ - typing/parmatch.cmo \ - typing/typedecl_properties.cmo \ - typing/typedecl_variance.cmo \ - typing/typedecl_unboxed.cmo \ - typing/typedecl_immediacy.cmo \ - typing/typedecl_separability.cmo \ - typing/typedecl.cmo \ - typing/typeopt.cmo \ - typing/rec_check.cmo \ - typing/typecore.cmo \ - typing/typeclass.cmo \ - typing/typemod.cmo -TYPING_CMI = \ - typing/annot.cmi \ - typing/outcometree.cmi - -LAMBDA = \ - lambda/debuginfo.cmo \ - lambda/lambda.cmo \ - lambda/printlambda.cmo \ - lambda/switch.cmo \ - lambda/matching.cmo \ - lambda/translobj.cmo \ - lambda/translattribute.cmo \ - lambda/translprim.cmo \ - lambda/translcore.cmo \ - lambda/translclass.cmo \ - lambda/translmod.cmo \ - lambda/tmc.cmo \ - lambda/simplif.cmo \ - lambda/runtimedef.cmo -LAMBDA_CMI = - -COMP = \ - bytecomp/meta.cmo \ - bytecomp/opcodes.cmo \ - bytecomp/bytesections.cmo \ - bytecomp/dll.cmo \ - bytecomp/symtable.cmo \ - driver/pparse.cmo \ - driver/compenv.cmo \ - driver/main_args.cmo \ - driver/compmisc.cmo \ - driver/makedepend.cmo \ - driver/compile_common.cmo -COMP_CMI = \ - file_formats/cmo_format.cmi \ - file_formats/cmx_format.cmi \ - file_formats/cmxs_format.cmi -# All file format descriptions (including cmx{,s}) are in the -# ocamlcommon library so that ocamlobjinfo can depend on them. - -COMMON_CMI = $(UTILS_CMI) $(PARSING_CMI) $(TYPING_CMI) $(LAMBDA_CMI) $(COMP_CMI) - -COMMON = $(UTILS) $(PARSING) $(TYPING) $(LAMBDA) $(COMP) - -BYTECOMP = \ - bytecomp/instruct.cmo \ - bytecomp/bytegen.cmo \ - bytecomp/printinstr.cmo \ - bytecomp/emitcode.cmo \ - bytecomp/bytelink.cmo \ - bytecomp/bytelibrarian.cmo \ - bytecomp/bytepackager.cmo \ - driver/errors.cmo \ - driver/compile.cmo \ - driver/maindriver.cmo -BYTECOMP_CMI = - -INTEL_ASM = \ - asmcomp/x86_proc.cmo \ - asmcomp/x86_dsl.cmo \ - asmcomp/x86_gas.cmo \ - asmcomp/x86_masm.cmo -INTEL_ASM_CMI = \ - asmcomp/x86_ast.cmi - -ARCH_SPECIFIC_ASMCOMP = -ARCH_SPECIFIC_ASMCOMP_CMI = -ifeq ($(ARCH),i386) -ARCH_SPECIFIC_ASMCOMP = $(INTEL_ASM) -ARCH_SPECIFIC_ASMCOMP_CMI = $(INTEL_ASM_CMI) -endif -ifeq ($(ARCH),amd64) -ARCH_SPECIFIC_ASMCOMP = $(INTEL_ASM) -ARCH_SPECIFIC_ASMCOMP_CMI = $(INTEL_ASM_CMI) -endif - -ASMCOMP = \ - $(ARCH_SPECIFIC_ASMCOMP) \ - asmcomp/arch.cmo \ - asmcomp/cmm.cmo \ - asmcomp/printcmm.cmo \ - asmcomp/reg.cmo \ - asmcomp/mach.cmo \ - asmcomp/proc.cmo \ - asmcomp/afl_instrument.cmo \ - asmcomp/strmatch.cmo \ - asmcomp/cmmgen_state.cmo \ - asmcomp/cmm_helpers.cmo \ - asmcomp/cmmgen.cmo \ - asmcomp/cmm_invariants.cmo \ - asmcomp/interval.cmo \ - asmcomp/printmach.cmo \ - asmcomp/dataflow.cmo \ - asmcomp/polling.cmo \ - asmcomp/selectgen.cmo \ - asmcomp/selection.cmo \ - asmcomp/comballoc.cmo \ - asmcomp/CSEgen.cmo \ - asmcomp/CSE.cmo \ - asmcomp/liveness.cmo \ - asmcomp/spill.cmo \ - asmcomp/split.cmo \ - asmcomp/interf.cmo \ - asmcomp/coloring.cmo \ - asmcomp/linscan.cmo \ - asmcomp/reloadgen.cmo \ - asmcomp/reload.cmo \ - asmcomp/deadcode.cmo \ - asmcomp/linear.cmo \ - asmcomp/printlinear.cmo \ - asmcomp/linearize.cmo \ - file_formats/linear_format.cmo \ - asmcomp/schedgen.cmo \ - asmcomp/scheduling.cmo \ - asmcomp/branch_relaxation_intf.cmo \ - asmcomp/branch_relaxation.cmo \ - asmcomp/emitaux.cmo \ - asmcomp/emit.cmo \ - asmcomp/asmgen.cmo \ - asmcomp/asmlink.cmo \ - asmcomp/asmlibrarian.cmo \ - asmcomp/asmpackager.cmo \ - driver/opterrors.cmo \ - driver/optcompile.cmo \ - driver/optmaindriver.cmo -ASMCOMP_CMI = $(ARCH_SPECIFIC_ASMCOMP_CMI) - -# Files under middle_end/ are not to reference files under asmcomp/. -# This ensures that the middle end can be linked (e.g. for objinfo) even when -# the native code compiler is not present for some particular target. - -MIDDLE_END_CLOSURE = \ - middle_end/closure/closure.cmo \ - middle_end/closure/closure_middle_end.cmo -MIDDLE_END_CLOSURE_CMI = - -# Owing to dependencies through [Compilenv], which would be -# difficult to remove, some of the lower parts of Flambda (anything that is -# saved in a .cmx file) have to be included in the [MIDDLE_END] stanza, below. -MIDDLE_END_FLAMBDA = \ - middle_end/flambda/import_approx.cmo \ - middle_end/flambda/lift_code.cmo \ - middle_end/flambda/closure_conversion_aux.cmo \ - middle_end/flambda/closure_conversion.cmo \ - middle_end/flambda/initialize_symbol_to_let_symbol.cmo \ - middle_end/flambda/lift_let_to_initialize_symbol.cmo \ - middle_end/flambda/find_recursive_functions.cmo \ - middle_end/flambda/invariant_params.cmo \ - middle_end/flambda/inconstant_idents.cmo \ - middle_end/flambda/alias_analysis.cmo \ - middle_end/flambda/lift_constants.cmo \ - middle_end/flambda/share_constants.cmo \ - middle_end/flambda/simplify_common.cmo \ - middle_end/flambda/remove_unused_arguments.cmo \ - middle_end/flambda/remove_unused_closure_vars.cmo \ - middle_end/flambda/remove_unused_program_constructs.cmo \ - middle_end/flambda/simplify_boxed_integer_ops.cmo \ - middle_end/flambda/simplify_primitives.cmo \ - middle_end/flambda/inlining_stats_types.cmo \ - middle_end/flambda/inlining_stats.cmo \ - middle_end/flambda/inline_and_simplify_aux.cmo \ - middle_end/flambda/remove_free_vars_equal_to_args.cmo \ - middle_end/flambda/extract_projections.cmo \ - middle_end/flambda/augment_specialised_args.cmo \ - middle_end/flambda/unbox_free_vars_of_closures.cmo \ - middle_end/flambda/unbox_specialised_args.cmo \ - middle_end/flambda/unbox_closures.cmo \ - middle_end/flambda/inlining_transforms.cmo \ - middle_end/flambda/inlining_decision.cmo \ - middle_end/flambda/inline_and_simplify.cmo \ - middle_end/flambda/ref_to_variables.cmo \ - middle_end/flambda/flambda_invariants.cmo \ - middle_end/flambda/traverse_for_exported_symbols.cmo \ - middle_end/flambda/build_export_info.cmo \ - middle_end/flambda/closure_offsets.cmo \ - middle_end/flambda/un_anf.cmo \ - middle_end/flambda/flambda_to_clambda.cmo \ - middle_end/flambda/flambda_middle_end.cmo -MIDDLE_END_FLAMBDA_CMI = \ - middle_end/flambda/inlining_decision_intf.cmi \ - middle_end/flambda/simplify_boxed_integer_ops_intf.cmi - -MIDDLE_END = \ - middle_end/internal_variable_names.cmo \ - middle_end/linkage_name.cmo \ - middle_end/compilation_unit.cmo \ - middle_end/variable.cmo \ - middle_end/flambda/base_types/closure_element.cmo \ - middle_end/flambda/base_types/closure_id.cmo \ - middle_end/symbol.cmo \ - middle_end/backend_var.cmo \ - middle_end/clambda_primitives.cmo \ - middle_end/printclambda_primitives.cmo \ - middle_end/clambda.cmo \ - middle_end/printclambda.cmo \ - middle_end/semantics_of_primitives.cmo \ - middle_end/convert_primitives.cmo \ - middle_end/flambda/base_types/id_types.cmo \ - middle_end/flambda/base_types/export_id.cmo \ - middle_end/flambda/base_types/tag.cmo \ - middle_end/flambda/base_types/mutable_variable.cmo \ - middle_end/flambda/base_types/set_of_closures_id.cmo \ - middle_end/flambda/base_types/set_of_closures_origin.cmo \ - middle_end/flambda/base_types/closure_origin.cmo \ - middle_end/flambda/base_types/var_within_closure.cmo \ - middle_end/flambda/base_types/static_exception.cmo \ - middle_end/flambda/pass_wrapper.cmo \ - middle_end/flambda/allocated_const.cmo \ - middle_end/flambda/parameter.cmo \ - middle_end/flambda/projection.cmo \ - middle_end/flambda/flambda.cmo \ - middle_end/flambda/flambda_iterators.cmo \ - middle_end/flambda/flambda_utils.cmo \ - middle_end/flambda/freshening.cmo \ - middle_end/flambda/effect_analysis.cmo \ - middle_end/flambda/inlining_cost.cmo \ - middle_end/flambda/simple_value_approx.cmo \ - middle_end/flambda/export_info.cmo \ - middle_end/flambda/export_info_for_pack.cmo \ - middle_end/compilenv.cmo \ - $(MIDDLE_END_CLOSURE) \ - $(MIDDLE_END_FLAMBDA) -MIDDLE_END_CMI = \ - middle_end/backend_intf.cmi \ - $(MIDDLE_END_CLOSURE_CMI) \ - $(MIDDLE_END_FLAMBDA_CMI) - -OPTCOMP = $(MIDDLE_END) $(ASMCOMP) -OPTCOMP_CMI = $(MIDDLE_END_CMI) $(ASMCOMP_CMI) - -TOPLEVEL = \ - toplevel/genprintval.cmo \ - toplevel/topcommon.cmo \ - toplevel/byte/topeval.cmo \ - toplevel/byte/trace.cmo \ - toplevel/toploop.cmo \ - toplevel/topdirs.cmo \ - toplevel/byte/topmain.cmo -TOPLEVEL_CMI = \ - toplevel/topcommon.cmi \ - toplevel/byte/topeval.cmi \ - toplevel/byte/trace.cmi \ - toplevel/toploop.cmi \ - toplevel/topdirs.cmi \ - toplevel/byte/topmain.cmi - -OPTTOPLEVEL = \ - toplevel/genprintval.cmo \ - toplevel/topcommon.cmo \ - toplevel/native/tophooks.cmo \ - toplevel/native/topeval.cmo \ - toplevel/native/trace.cmo \ - toplevel/toploop.cmo \ - toplevel/topdirs.cmo \ - toplevel/native/topmain.cmo -OPTTOPLEVEL_CMI = \ - toplevel/topcommon.cmi \ - toplevel/native/tophooks.cmi \ - toplevel/native/topeval.cmi \ - toplevel/native/trace.cmi \ - toplevel/toploop.cmi \ - toplevel/topdirs.cmi \ - toplevel/native/topmain.cmi - -TOPLEVEL_SHARED_MLIS = topeval.mli trace.mli topmain.mli -TOPLEVEL_SHARED_CMIS = $(TOPLEVEL_SHARED_MLIS:%.mli=%.cmi) -TOPLEVEL_SHARED_ARTEFACTS = $(TOPLEVEL_SHARED_MLIS) $(TOPLEVEL_SHARED_CMIS) - -$(addprefix toplevel/byte/, $(TOPLEVEL_SHARED_CMIS)):\ -toplevel/byte/%.cmi: toplevel/%.cmi - cp $< toplevel/$*.mli $(@D) - -$(addprefix toplevel/native/, $(TOPLEVEL_SHARED_CMIS)):\ -toplevel/native/%.cmi: toplevel/%.cmi - cp $< toplevel/$*.mli $(@D) - -beforedepend:: - cd toplevel ; cp $(TOPLEVEL_SHARED_MLIS) byte/ - cd toplevel ; cp $(TOPLEVEL_SHARED_MLIS) native/ - -partialclean:: - cd toplevel/byte ; rm -f $(TOPLEVEL_SHARED_ARTEFACTS) - cd toplevel/native ; rm -f $(TOPLEVEL_SHARED_ARTEFACTS) - -$(COMMON:.cmo=.cmx) $(BYTECOMP:.cmo=.cmx) $(OPTCOMP:.cmo=.cmx): ocamlopt$(EXE) -$(OPTTOPLEVEL:.cmo=.cmx): ocamlopt$(EXE) - - -compilerlibs/ocamlcommon.cma: $(COMMON_CMI) $(COMMON) - $(CAMLC) -a -linkall -o $@ $(COMMON) -partialclean:: - rm -f compilerlibs/ocamlcommon.cma - -compilerlibs/ocamlcommon.cmxa: $(COMMON_CMI) $(COMMON:.cmo=.cmx) - $(CAMLOPT) -a -linkall -o $@ $(COMMON:.cmo=.cmx) -partialclean:: - rm -f compilerlibs/ocamlcommon.cmxa \ - compilerlibs/ocamlcommon.a compilerlibs/ocamlcommon.lib - - -compilerlibs/ocamlbytecomp.cma: $(BYTECOMP_CMI) $(BYTECOMP) - $(CAMLC) -a -o $@ $(BYTECOMP) -partialclean:: - rm -f compilerlibs/ocamlbytecomp.cma - -compilerlibs/ocamlbytecomp.cmxa: $(BYTECOMP_CMI) $(BYTECOMP:.cmo=.cmx) - $(CAMLOPT) -a $(OCAML_NATDYNLINKOPTS) -o $@ $(BYTECOMP:.cmo=.cmx) -partialclean:: - rm -f compilerlibs/ocamlbytecomp.cmxa \ - compilerlibs/ocamlbytecomp.a compilerlibs/ocamlbytecomp.lib - - -compilerlibs/ocamlmiddleend.cma: $(MIDDLE_END_CMI) $(MIDDLE_END) - $(CAMLC) -a -o $@ $(MIDDLE_END) -compilerlibs/ocamlmiddleend.cmxa: $(MIDDLE_END_CMI) $(MIDDLE_END:%.cmo=%.cmx) - $(CAMLOPT) -a -o $@ $(MIDDLE_END:%.cmo=%.cmx) -partialclean:: - rm -f compilerlibs/ocamlmiddleend.cma \ - compilerlibs/ocamlmiddleend.cmxa \ - compilerlibs/ocamlmiddleend.a \ - compilerlibs/ocamlmiddleend.lib - - -compilerlibs/ocamloptcomp.cma: $(OPTCOMP_CMI) $(OPTCOMP) - $(CAMLC) -a -o $@ $(OPTCOMP) -partialclean:: - rm -f compilerlibs/ocamloptcomp.cma - -compilerlibs/ocamloptcomp.cmxa: $(OPTCOMP_CMI) $(OPTCOMP:.cmo=.cmx) - $(CAMLOPT) -a -o $@ $(OPTCOMP:.cmo=.cmx) -partialclean:: - rm -f compilerlibs/ocamloptcomp.cmxa \ - compilerlibs/ocamloptcomp.a compilerlibs/ocamloptcomp.lib - - -compilerlibs/ocamltoplevel.cma: $(TOPLEVEL_CMI) $(TOPLEVEL) - $(CAMLC) -a -o $@ -I toplevel/byte $(TOPLEVEL) -partialclean:: - rm -f compilerlibs/ocamltoplevel.cma - -compilerlibs/ocamltoplevel.cmxa: $(OPTTOPLEVEL_CMI) $(OPTTOPLEVEL:.cmo=.cmx) - $(CAMLOPT) -a -o $@ -I toplevel/native $(OPTTOPLEVEL:.cmo=.cmx) -partialclean:: - rm -f compilerlibs/ocamltoplevel.cmxa \ - compilerlibs/ocamltoplevel.a compilerlibs/ocamltoplevel.lib diff --git a/configure b/configure index 2c956eff..6dc7cc75 100755 --- a/configure +++ b/configure @@ -56,12 +56,13 @@ if test -e '.git' ; then : fi fi # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for OCaml 4.14.1. +# Generated by GNU Autoconf 2.71 for OCaml 5.2.0. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -72,14 +73,16 @@ fi # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -89,46 +92,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -137,13 +140,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -152,8 +148,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -165,30 +165,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -210,20 +190,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -243,12 +225,15 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -263,30 +248,38 @@ test -x / || exit 1" test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -294,14 +287,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -319,18 +319,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and caml-list@inria.fr + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and caml-list@inria.fr $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do @@ -358,6 +359,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -375,6 +377,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -389,7 +399,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -398,7 +408,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -437,12 +447,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -454,18 +465,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -477,9 +497,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -506,7 +526,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -550,7 +570,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -564,6 +584,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -577,6 +601,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -646,63 +677,62 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='OCaml' PACKAGE_TARNAME='ocaml' -PACKAGE_VERSION='4.14.1' -PACKAGE_STRING='OCaml 4.14.1' +PACKAGE_VERSION='5.2.0' +PACKAGE_STRING='OCaml 5.2.0' PACKAGE_BUGREPORT='caml-list@inria.fr' PACKAGE_URL='http://www.ocaml.org' ac_unique_file="runtime/interp.c" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS +DIFF PTHREAD_CFLAGS PTHREAD_LIBS +PTHREAD_CXX PTHREAD_CC ax_pthread_config +PKG_CONFIG rlwrap DIRECT_LD INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM flexlink +CPP ac_ct_DEP_CC DEP_CC -CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -734,8 +764,11 @@ ac_ct_LD LD DEFAULT_STRING WINDOWS_UNICODE_MODE +LIBUNWIND_LDFLAGS +LIBUNWIND_CPPFLAGS DLLIBS PARTIALLD +csc target_os target_vendor target_cpu @@ -748,16 +781,19 @@ build_os build_vendor build_cpu build -naked_pointers_checker -naked_pointers +target_bindir +ar_supports_response_files +QS +ocaml_libdir +ocaml_bindir compute_deps -stdlib_manpages +build_libraries_manpages PACKLD -flexlink_flags +mkexe_ldflags_exp +mkdll_ldflags_exp flexdll_chain -default_safe_string -force_safe_string afl +oc_native_compflags function_sections flat_float_array windows_unicode @@ -765,75 +801,123 @@ cmm_invariants flambda_invariants flambda frame_pointers -profinfo_width -profinfo +reserved_header_bits install_ocamlnat install_source_artifacts install_bytecode_programs mksharedlibrpath +mkmaindll_exp mkmaindll -mksharedlib +mkdll_exp +mkdll rpath sharedlib_cflags asm_cfi_supported AS endianness ASPP +ocamltest_opt_target +ocamltest_target ocamltest +build_ocamltest documentation_tool_cmd documentation_tool -ocamldoc -with_camltex +with_ocamldoc +ocamldoc_opt_target +ocamldoc_target +build_ocamldoc +build_ocamltex +build_ocamldebug with_debugger as_has_debug_prefix_map cc_has_debug_prefix_map +unix_directory +unix_library +ocamltest_libunix +ocamltest_CPP +optional_native_tools +optional_bytecode_tools +optional_libraries +lib_unix +lib_systhreads +lib_str +lib_runtime_events +lib_dynlink otherlibraries has_monotonic_clock instrumented_runtime_libs instrumented_runtime debug_runtime cmxs +natdynlink_archive natdynlinkopts natdynlink supports_shared_libraries mklib AR shebangscripts -long_shebang +flexlink_flags +flexdll_dir bootstrapping_flexdll -flexdir +flexdll_source_dir ocamlc_cppflags ocamlc_cflags -nativecclibs -bytecclibs +zstd_libs +native_ldflags +cclibs +oc_exe_ldflags oc_dll_ldflags oc_ldflags oc_cppflags +tsan_native_runtime_c_sources +tsan oc_cflags toolchain ccomptype +mkexe_via_cc_ldflags +mkexe_extra_flags mkexedebugflag +mkexe_exp mkexe fpic -extralibs syslib outputobj outputexe -unixlib +ocamlyacc_wstr_module +ln unix_or_win32 +ocamlsrcdir systhread_support +native_cppflags +native_cflags system model arch64 +arch_specific_SOURCES arch SO +runtime_asm_objects S libext OBJEXT exeext ac_tool_prefix -DIRECT_CPP +CSCFLAGS +CSC +DIFF_FLAGS CC +LINEAR_MAGIC_NUMBER +CMT_MAGIC_NUMBER +CMXS_MAGIC_NUMBER +AST_INTF_MAGIC_NUMBER +AST_IMPL_MAGIC_NUMBER +CMXA_MAGIC_NUMBER +CMX_MAGIC_NUMBER +CMA_MAGIC_NUMBER +CMO_MAGIC_NUMBER +CMI_MAGIC_NUMBER +EXEC_MAGIC_NUMBER +MAGIC_NUMBER_LENGTH OCAML_VERSION_SHORT OCAML_VERSION_EXTRA OCAML_VERSION_PATCHLEVEL @@ -842,6 +926,7 @@ OCAML_VERSION_MAJOR OCAML_RELEASE_EXTRA OCAML_DEVELOPMENT_VERSION VERSION +default_build_target native_compiler CONFIGURE_ARGS target_alias @@ -863,6 +948,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -886,11 +972,13 @@ ac_subst_files='' ac_user_opts=' enable_option_checking enable_debug_runtime +enable_ocamldebug enable_debugger enable_dependency_generation enable_instrumented_runtime enable_vmthreads enable_systhreads +enable_tsan enable_graph_lib enable_str_lib enable_unix_lib @@ -912,14 +1000,17 @@ enable_flambda enable_flambda_invariants enable_cmm_invariants with_target_bindir +with_target_sh enable_reserved_header_bits enable_stdlib_manpages enable_warn_error enable_force_safe_string enable_flat_float_array enable_function_sections +enable_mmap_map_stack with_afl with_flexdll +with_zstd enable_shared enable_static with_pic @@ -936,6 +1027,8 @@ AS ASPP PARTIALLD DLLIBS +LIBUNWIND_CPPFLAGS +LIBUNWIND_LDFLAGS WINDOWS_UNICODE_MODE DEFAULT_STRING CC @@ -983,6 +1076,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1012,8 +1106,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1054,9 +1146,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1080,9 +1172,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1235,6 +1327,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1284,9 +1385,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1300,9 +1401,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1346,9 +1447,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1364,7 +1465,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1372,7 +1473,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1428,7 +1529,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1485,7 +1586,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures OCaml 4.14.1 to adapt to many kinds of systems. +\`configure' configures OCaml 5.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1525,6 +1626,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1551,7 +1653,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of OCaml 4.14.1:";; + short | recursive ) echo "Configuration of OCaml 5.2.0:";; esac cat <<\_ACEOF @@ -1560,25 +1662,22 @@ Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-debug-runtime do not build runtime with debugging support - --enable-debugger build the debugger [default=auto] + --enable-ocamldebug build ocamldebug [default=auto] + --enable-debugger alias for --enable-ocamldebug --disable-dependency-generation do not compute dependency information for C sources --enable-instrumented-runtime build the instrumented runtime [default=auto] --disable-systhreads disable the Win32/POSIX threads library + --enable-tsan enable ThreadSanitizer support [default=no] --disable-str-lib do not build the str library --disable-unix-lib do not build the unix library - --disable-bigarray-lib do not build the legacy separate bigarray library --disable-ocamldoc do not build the ocamldoc documentation system - --disable-ocamltest do not build the ocamltest driver + --disable-ocamltest do not build ocamltest --enable-native-toplevel build the native toplevel --enable-frame-pointers use frame pointers in runtime and generated code - --disable-naked-pointers - do not allow naked pointers - --enable-naked-pointers-checker - enable the naked pointers checker --disable-cfi disable the CFI directives in assembly files --enable-imprecise-c99-float-ops enables potentially imprecise replacement @@ -1596,16 +1695,15 @@ Optional Features: --enable-cmm-invariants enable invariants checks in Cmm --enable-reserved-header-bits=BITS reserve BITS (between 0 and 31) bits in block - headers for profiling info + headers --disable-stdlib-manpages do not build or install the library man pages --enable-warn-error treat C compiler warnings as errors - --disable-force-safe-string - do not force strings to be safe --disable-flat-float-array do not use flat float arrays --disable-function-sections do not emit each function in a separate section + --enable-mmap-map-stack use mmap to allocate stacks instead of malloc --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] @@ -1616,9 +1714,12 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-odoc build documentation with odoc - --with-target-bindir location of binary programs on target system + --with-target-bindir location of the runtime binaries on the target + system + --with-target-sh location of Posix sh on the target system --with-afl use the AFL fuzzer --with-flexdll bootstrap FlexDLL from the given sources + --without-zstd disable compression of compilation artefacts --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both @@ -1635,10 +1736,15 @@ Some influential environment variables: PARTIALLD how to build partial (relocatable) object files DLLIBS which libraries to use (in addition to -ldl) to load dynamic libs + LIBUNWIND_CPPFLAGS + C preprocessor flags for libunwind (e.g. -I) + LIBUNWIND_LDFLAGS + linker flags for libunwind (e.g. -L WINDOWS_UNICODE_MODE how to handle Unicode under Windows: ansi, compatible DEFAULT_STRING - whether strings should be safe (default) or unsafe + CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a @@ -1670,9 +1776,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1700,7 +1806,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1708,7 +1815,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1717,10 +1824,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -OCaml configure 4.14.1 -generated by GNU Autoconf 2.69 +OCaml configure 5.2.0 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1737,14 +1844,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1752,14 +1859,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1775,14 +1883,14 @@ fi ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1790,17 +1898,18 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1822,30 +1931,94 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. */ + +#include +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main (void) +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1858,7 +2031,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1866,14 +2039,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1885,8 +2059,8 @@ fi # ac_fn_c_try_run LINENO # ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -1896,25 +2070,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -1925,164 +2100,6 @@ fi } # ac_fn_c_try_run -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## --------------------------------- ## -## Report this to caml-list@inria.fr ## -## --------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2090,17 +2107,18 @@ fi ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2108,12 +2126,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2121,18 +2140,19 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -2151,7 +2171,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2161,14 +2181,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2178,9 +2199,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid; break -else +else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2188,14 +2210,14 @@ else fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2205,14 +2227,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2222,9 +2245,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=$ac_mid; break -else +else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2232,14 +2256,14 @@ else fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -2247,7 +2271,7 @@ while test "x$ac_lo" != "x$ac_hi"; do /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2257,12 +2281,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid -else +else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2272,12 +2297,12 @@ esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } +static long int longval (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } #include #include int -main () +main (void) { FILE *f = fopen ("conftest.val", "w"); @@ -2305,9 +2330,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : echo >>conftest.val; read $3 &5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { #ifndef $as_decl_name #ifdef __cplusplus @@ -2352,19 +2381,22 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_decl +} # ac_fn_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- @@ -2373,16 +2405,17 @@ $as_echo "$ac_res" >&6; } ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -$as_echo_n "checking for $2.$3... " >&6; } -if eval \${$4+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +printf %s "checking for $2.$3... " >&6; } +if eval test \${$4+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (ac_aggr.$3) @@ -2391,14 +2424,15 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main () +main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -2407,29 +2441,50 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$4=yes" -else +else $as_nop eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$4 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by OCaml $as_me 4.14.1, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by OCaml $as_me 5.2.0, which was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2462,8 +2517,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2498,7 +2557,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2533,11 +2592,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2548,8 +2609,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2573,7 +2634,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2581,14 +2642,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2596,15 +2657,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2612,8 +2673,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2627,63 +2688,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2693,19 +2739,434 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh ltmain.sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/build-aux" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2716,12 +3177,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2730,24 +3191,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2757,11 +3218,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2775,22 +3237,25 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring OCaml version 4.14.1" >&5 -$as_echo "$as_me: Configuring OCaml version 4.14.1" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring OCaml version 5.2.0" >&5 +printf "%s\n" "$as_me: Configuring OCaml version 5.2.0" >&6;} # Configuration variables ## Command-line arguments passed to configure CONFIGURE_ARGS="$*" -# Command to build executalbes -# In general this command is supposed to use the CFLAGs- and LDFLAGS- -# related variables (OC_CFLAGS and OC_LDFLAGS for ocaml-specific -# flags, CFLAGS and LDFLAGS for generic flags chosen by the user), but -# at the moment they are not taken into account on Windows, because -# flexlink, which is used to build executables on this platform, can -# not handle them. -mkexe="\$(CC) \$(OC_CFLAGS) \$(CFLAGS) \$(OC_LDFLAGS) \$(LDFLAGS)" +# Command to build executables +# Ultimately, MKEXE may build an executable using the C compiler or it may use +# a wrapper for a linker (i.e. flexlink). The build system must therefore not +# rely on $CFLAGS because these cannot be processed by flexlink (and are not +# passed) +mkexe_cmd='$(CC)' +mkexe_cflags='$(OC_CFLAGS) $(CFLAGS)' +mkexe_extra_flags='' +mkexe_via_cc_extra_cmd='' +mkexe_ldflags_prefix='' +mkexe_via_cc_ldflags_prefix='' # Flags for building executable files with debugging symbols mkexedebugflag="-g" @@ -2802,15 +3267,37 @@ ocamlc_cflags="" ocamlc_cppflags="" oc_ldflags="" oc_dll_ldflags="" +oc_exe_ldflags="" + +tsan=false +# Passed to the linker by ocamlopt when tsan is enabled +oc_tsan_cflags="-fsanitize=thread" +oc_tsan_cppflags="-DWITH_THREAD_SANITIZER" +tsan_distinguish_volatile_cflags="" + +# The C# compiler and its flags +CSC="" +CSCFLAGS="" + ostype="Unix" SO="so" toolchain="cc" -profinfo=false -profinfo_width=0 -extralibs= +reserved_header_bits=0 instrumented_runtime=false instrumented_runtime_libs="" bootstrapping_flexdll=false +flexdll_dir= +lib_dynlink=false +lib_str=false +lib_systhreads=false +lib_unix=false +optional_libraries='' +optional_bytecode_tools='' +optional_native_tools='' +ocamltest_libunix=None +ocamltest_unix_impl="dummy" +unix_library="" +unix_directory="" # Information about the package @@ -2818,55 +3305,61 @@ bootstrapping_flexdll=false ## Directory containing auxiliary scripts used during build -ac_aux_dir= -for ac_dir in build-aux "$srcdir"/build-aux; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - ## Output variables -VERSION=4.14.1 + +VERSION=5.2.0 OCAML_DEVELOPMENT_VERSION=false OCAML_RELEASE_EXTRA=None -OCAML_VERSION_MAJOR=4 +OCAML_VERSION_MAJOR=5 -OCAML_VERSION_MINOR=14 +OCAML_VERSION_MINOR=2 -OCAML_VERSION_PATCHLEVEL=1 +OCAML_VERSION_PATCHLEVEL=0 OCAML_VERSION_EXTRA= -OCAML_VERSION_SHORT=4.14 +OCAML_VERSION_SHORT=5.2 + +printf "%s\n" "#define MAGIC_NUMBER_PREFIX \"Caml1999\"" >>confdefs.h + +printf "%s\n" "#define MAGIC_NUMBER_VERSION \"034\"" >>confdefs.h + +MAGIC_NUMBER_LENGTH=12 + +printf "%s\n" "#define EXEC_MAGIC_LENGTH 12" >>confdefs.h + +printf "%s\n" "#define EXEC_FORMAT \"X\"" >>confdefs.h + +EXEC_MAGIC_NUMBER=Caml1999X034 + +CMI_MAGIC_NUMBER=Caml1999I034 + +CMO_MAGIC_NUMBER=Caml1999O034 + +CMA_MAGIC_NUMBER=Caml1999A034 + + + +AST_IMPL_MAGIC_NUMBER=Caml1999M034 + +AST_INTF_MAGIC_NUMBER=Caml1999N034 + +CMXS_MAGIC_NUMBER=Caml1999D034 + +CMT_MAGIC_NUMBER=Caml1999T034 + +LINEAR_MAGIC_NUMBER=Caml1999L034 + + + # Note: This is present for the flexdll bootstrap where it exposed as the old @@ -2899,6 +3392,31 @@ OCAML_VERSION_SHORT=4.14 + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2946,6 +3464,17 @@ OCAML_VERSION_SHORT=4.14 + + + + + + + + + + + @@ -2970,7 +3499,13 @@ ac_config_files="$ac_config_files manual/src/version.tex" ac_config_files="$ac_config_files manual/src/html_processing/src/common.ml" -ac_config_files="$ac_config_files tools/eventlog_metadata" +ac_config_files="$ac_config_files ocamltest/ocamltest_config.ml" + +ac_config_files="$ac_config_files utils/config.common.ml" + +ac_config_files="$ac_config_files utils/config.generated.ml" + +ac_config_headers="$ac_config_headers runtime/caml/exec.h" ac_config_headers="$ac_config_headers runtime/caml/m.h" @@ -2978,45 +3513,60 @@ ac_config_headers="$ac_config_headers runtime/caml/s.h" ac_config_headers="$ac_config_headers runtime/caml/version.h" +ac_config_files="$ac_config_files compilerlibs/META" + +ac_config_files="$ac_config_files otherlibs/dynlink/META" + +ac_config_files="$ac_config_files otherlibs/runtime_events/META" + +ac_config_files="$ac_config_files stdlib/META" + # Definitions related to the version of OCaml -$as_echo "#define OCAML_VERSION_MAJOR 4" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_MAJOR 5" >>confdefs.h -$as_echo "#define OCAML_VERSION_MINOR 14" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_MINOR 2" >>confdefs.h -$as_echo "#define OCAML_VERSION_PATCHLEVEL 1" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_PATCHLEVEL 0" >>confdefs.h -$as_echo "#define OCAML_VERSION_ADDITIONAL \"\"" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_ADDITIONAL \"\"" >>confdefs.h - $as_echo "#define OCAML_VERSION_EXTRA \"\"" >>confdefs.h + printf "%s\n" "#define OCAML_VERSION_EXTRA \"\"" >>confdefs.h -$as_echo "#define OCAML_VERSION 41401" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION 50200" >>confdefs.h -$as_echo "#define OCAML_VERSION_STRING \"4.14.1\"" >>confdefs.h +printf "%s\n" "#define OCAML_VERSION_STRING \"5.2.0\"" >>confdefs.h + + +# Works out how many "o"s are needed in quoted strings # Checks for system types -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -3035,21 +3585,22 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -3068,21 +3619,22 @@ IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +printf %s "checking target system type... " >&6; } +if test ${ac_cv_target+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 + ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +printf "%s\n" "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; @@ -3108,6 +3660,33 @@ test -n "$target_alias" && NONENONEs,x,x, && program_prefix=${target_alias}- +# Ensure that AC_CONFIG_LINKS will either create symlinks which are compatible +# with native Windows (i.e. NTFS symlinks, not WSL or Cygwin-emulated ones) or +# use its fallback mechanisms. Native Windows versions of ocamlc/ocamlopt cannot +# interpret either WSL or Cygwin-emulated symlinks. +case $host in #( + *-pc-windows|*-w64-mingw32*) : + ac_config_commands="$ac_config_commands native-symlinks" + ;; #( + *) : + ;; +esac + +# Systems that are known not to work, even in bytecode only. + +case $host in #( + *-pc-windows) : + as_fn_error 69 "the MSVC compiler is not supported currently" "$LINENO" 5 ;; #( + i386-*-solaris*) : + as_fn_error $? "Building for 32 bits target is not supported. \ +If your host is 64 bits, you can try with './configure CC=\"gcc -m64\"' \ +(or \"cc -m64\" if you don't have GCC)." "$LINENO" 5 ;; #( + *) : + ;; +esac + +# MSVC special case + case $host in #( *-pc-windows) : CC=cl @@ -3116,18 +3695,74 @@ case $host in #( SO=dll outputexe=-Fe syslib='$(1).lib' ;; #( - i386-*-solaris*) : - as_fn_error $? "Building for 32 bits target is not supported. \ -If your host is 64 bits, you can try with './configure CC=\"gcc -m64\"' \ -(or \"cc -m64\" if you don't have GCC)." "$LINENO" 5 ;; #( *) : ccomptype=cc S=s SO=so - outputexe='-o $(EMPTY)' + outputexe='-o ' syslib='-l$(1)' ;; esac +# Extract the first word of "csc", so it can be a program name with args. +set dummy csc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_csc+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$csc"; then + ac_cv_prog_csc="$csc" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_csc="csc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +csc=$ac_cv_prog_csc +if test -n "$csc"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $csc" >&5 +printf "%s\n" "$csc" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +if test -n "$csc" +then : + case $host in #( + *-*-mingw32*|*-pc-windows) : + CSC=csc + CSCFLAGS="/nologo /nowarn:1668" + case $host_cpu in #( + i*86) : + CSCFLAGS="$CSCFLAGS /platform:x86" ;; #( + *) : + ;; +esac ;; #( + *) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Mono is not yet supported - C sharp tests disabled" >&5 +printf "%s\n" "$as_me: WARNING: Mono is not yet supported - C sharp tests disabled" >&2;} ;; +esac +fi + # Environment variables that are taken into account @@ -3137,23 +3772,33 @@ esac # Command-line arguments to configure # Check whether --enable-debug-runtime was given. -if test "${enable_debug_runtime+set}" = set; then : +if test ${enable_debug_runtime+y} +then : enableval=$enable_debug_runtime; fi +# Check whether --enable-ocamldebug was given. +if test ${enable_ocamldebug+y} +then : + enableval=$enable_ocamldebug; +else $as_nop + enable_ocamldebug=auto +fi + + # Check whether --enable-debugger was given. -if test "${enable_debugger+set}" = set; then : - enableval=$enable_debugger; -else - enable_debugger=auto +if test ${enable_debugger+y} +then : + enableval=$enable_debugger; enable_ocamldebug=$enableval fi # Check whether --enable-dependency-generation was given. -if test "${enable_dependency_generation+set}" = set; then : +if test ${enable_dependency_generation+y} +then : enableval=$enable_dependency_generation; -else +else $as_nop enable_dependency_generation=auto fi @@ -3161,167 +3806,236 @@ fi # Check whether --enable-instrumented-runtime was given. -if test "${enable_instrumented_runtime+set}" = set; then : +if test ${enable_instrumented_runtime+y} +then : enableval=$enable_instrumented_runtime; -else +else $as_nop enable_instrumented_runtime=auto fi # Check whether --enable-vmthreads was given. -if test "${enable_vmthreads+set}" = set; then : - enableval=$enable_vmthreads; as_fn_error $? "The vmthreads library is no longer available. \ -It was deleted in OCaml 4.09." "$LINENO" 5 +if test ${enable_vmthreads+y} +then : + enableval=$enable_vmthreads; if test "x$enableval" != 'xno' +then : + as_fn_error $? "The vmthreads library is no longer available. It was deleted in OCaml 4.09." "$LINENO" 5 +fi fi # Check whether --enable-systhreads was given. -if test "${enable_systhreads+set}" = set; then : +if test ${enable_systhreads+y} +then : enableval=$enable_systhreads; fi +# Check whether --enable-tsan was given. +if test ${enable_tsan+y} +then : + enableval=$enable_tsan; +else $as_nop + enable_tsan=no +fi + + +# Preprocessor and linker flags for libunwind (currently only used when TSan is +# enabled) + + + + + # Check whether --enable-graph-lib was given. -if test "${enable_graph_lib+set}" = set; then : - enableval=$enable_graph_lib; as_fn_error $? "The graphics library is no longer distributed with OCaml \ -since version 4.09. It is now distributed as a separate \"graphics\" package: \ -https://github.com/ocaml/graphics" "$LINENO" 5 +if test ${enable_graph_lib+y} +then : + enableval=$enable_graph_lib; if test "x$enableval" != 'xno' +then : + as_fn_error $? "The graphics library is no longer distributed with OCaml since version 4.09. It is now distributed as a separate \"graphics\" package: https://github.com/ocaml/graphics" "$LINENO" 5 +fi fi # Check whether --enable-str-lib was given. -if test "${enable_str_lib+set}" = set; then : +if test ${enable_str_lib+y} +then : enableval=$enable_str_lib; fi # Check whether --enable-unix-lib was given. -if test "${enable_unix_lib+set}" = set; then : +if test ${enable_unix_lib+y} +then : enableval=$enable_unix_lib; fi # Check whether --enable-bigarray-lib was given. -if test "${enable_bigarray_lib+set}" = set; then : - enableval=$enable_bigarray_lib; +if test ${enable_bigarray_lib+y} +then : + enableval=$enable_bigarray_lib; if test "x$enableval" != 'xno' +then : + as_fn_error $? "The bigarray-lib option was deleted in OCaml 5.0, as the Bigarray module is now part of the standard library." "$LINENO" 5 +fi fi # Check whether --enable-ocamldoc was given. -if test "${enable_ocamldoc+set}" = set; then : +if test ${enable_ocamldoc+y} +then : enableval=$enable_ocamldoc; -else - ocamldoc=auto +else $as_nop + enable_ocamldoc='auto' fi # Check whether --with-odoc was given. -if test "${with_odoc+set}" = set; then : +if test ${with_odoc+y} +then : withval=$with_odoc; fi # Check whether --enable-ocamltest was given. -if test "${enable_ocamltest+set}" = set; then : +if test ${enable_ocamltest+y} +then : enableval=$enable_ocamltest; fi # Check whether --enable-native-toplevel was given. -if test "${enable_native_toplevel+set}" = set; then : +if test ${enable_native_toplevel+y} +then : enableval=$enable_native_toplevel; fi # Check whether --enable-frame-pointers was given. -if test "${enable_frame_pointers+set}" = set; then : +if test ${enable_frame_pointers+y} +then : enableval=$enable_frame_pointers; fi # Check whether --enable-naked-pointers was given. -if test "${enable_naked_pointers+set}" = set; then : - enableval=$enable_naked_pointers; +if test ${enable_naked_pointers+y} +then : + enableval=$enable_naked_pointers; if test "x$enableval" != 'xno' +then : + as_fn_error $? "Naked pointers were prohibited in OCaml 5.0." "$LINENO" 5 +fi fi # Check whether --enable-naked-pointers-checker was given. -if test "${enable_naked_pointers_checker+set}" = set; then : - enableval=$enable_naked_pointers_checker; +if test ${enable_naked_pointers_checker+y} +then : + enableval=$enable_naked_pointers_checker; if test "x$enableval" != 'xno' +then : + as_fn_error $? "The naked pointers checker was removed in OCaml 5.0." "$LINENO" 5 +fi fi # Check whether --enable-spacetime was given. -if test "${enable_spacetime+set}" = set; then : - enableval=$enable_spacetime; as_fn_error $? "spacetime profiling was deleted in OCaml 4.12." "$LINENO" 5 +if test ${enable_spacetime+y} +then : + enableval=$enable_spacetime; if test "x$enableval" != 'xno' +then : + as_fn_error $? "spacetime profiling was deleted in OCaml 4.12." "$LINENO" 5 +fi fi # Check whether --enable-cfi was given. -if test "${enable_cfi+set}" = set; then : +if test ${enable_cfi+y} +then : enableval=$enable_cfi; fi # Check whether --enable-imprecise-c99-float-ops was given. -if test "${enable_imprecise_c99_float_ops+set}" = set; then : +if test ${enable_imprecise_c99_float_ops+y} +then : enableval=$enable_imprecise_c99_float_ops; fi # Check whether --enable-installing-source-artifacts was given. -if test "${enable_installing_source_artifacts+set}" = set; then : +if test ${enable_installing_source_artifacts+y} +then : enableval=$enable_installing_source_artifacts; fi # Check whether --enable-installing-bytecode-programs was given. -if test "${enable_installing_bytecode_programs+set}" = set; then : +if test ${enable_installing_bytecode_programs+y} +then : enableval=$enable_installing_bytecode_programs; fi # Check whether --enable-native-compiler was given. -if test "${enable_native_compiler+set}" = set; then : +if test ${enable_native_compiler+y} +then : enableval=$enable_native_compiler; fi # Check whether --enable-flambda was given. -if test "${enable_flambda+set}" = set; then : +if test ${enable_flambda+y} +then : enableval=$enable_flambda; fi # Check whether --enable-flambda-invariants was given. -if test "${enable_flambda_invariants+set}" = set; then : +if test ${enable_flambda_invariants+y} +then : enableval=$enable_flambda_invariants; fi # Check whether --enable-cmm-invariants was given. -if test "${enable_cmm_invariants+set}" = set; then : +if test ${enable_cmm_invariants+y} +then : enableval=$enable_cmm_invariants; fi # Check whether --with-target-bindir was given. -if test "${with_target_bindir+set}" = set; then : - withval=$with_target_bindir; +if test ${with_target_bindir+y} +then : + withval=$with_target_bindir; target_bindir=$withval +else $as_nop + target_bindir='' +fi + + + +# Check whether --with-target-sh was given. +if test ${with_target_sh+y} +then : + withval=$with_target_sh; if test x"$withval" = 'xno' +then : + target_launch_method='exe' +else $as_nop + target_launch_method="$withval" +fi +else $as_nop + target_launch_method='' fi # Check whether --enable-reserved-header-bits was given. -if test "${enable_reserved_header_bits+set}" = set; then : +if test ${enable_reserved_header_bits+y} +then : enableval=$enable_reserved_header_bits; case $enable_reserved_header_bits in #( - 0) : - with_profinfo=false - profinfo_width=0 ;; #( - [1-9]|[1-2][0-9]|3[0-1]) : - with_profinfo=true - profinfo_width="$enable_reserved_header_bits" ;; #( + [0-9]|[1-2][0-9]|3[0-1]) : + reserved_header_bits=$enable_reserved_header_bits ;; #( *) : as_fn_error $? "invalid argument to --enable-reserved-header-bits" "$LINENO" 5 ;; esac @@ -3329,102 +4043,131 @@ fi # Check whether --enable-stdlib-manpages was given. -if test "${enable_stdlib_manpages+set}" = set; then : +if test ${enable_stdlib_manpages+y} +then : enableval=$enable_stdlib_manpages; +else $as_nop + enable_stdlib_manpages='auto' fi # Check whether --enable-warn-error was given. -if test "${enable_warn_error+set}" = set; then : +if test ${enable_warn_error+y} +then : enableval=$enable_warn_error; fi -# There are two configure-time string safety options, -# --(enable|disable)-force-safe-string and -# DEFAULT_STRING=safe|unsafe that -# interact with a compile-time (un)safe-string option. -# -# If --enable-force-safe-string is set at configure time, then the compiler -# will always enforce that string and bytes are distinct: the -# compile-time -unsafe-string option is disabled. This lets us -# assume pervasive string immutability, for code optimizations and -# in the C layer. -# -# If --disable-force-safe-string is set at configure-time, the compiler -# will use the compile-time (un)safe-string option to decide whether -# string and bytes are compatible on a per-file basis. The -# configuration variable DEFAULT_STRING=safe|unsafe decides which -# setting will be chosen by default, if no compile-time option is -# explicitly passed. -# -# The configure-time behavior of OCaml 4.05 and older was equivalent -# to --disable-force-safe-string DEFAULT_STRING=unsafe. With OCaml 4.06 -# and older was equivalent to --disable-force-safe-string DEFAULT_STRING=safe. -# With OCaml 4.10 and later use --enable-force-safe-string DEFAULT_STRING=safe. -# We expect the --disable-force-safe-string and DEFAULT_STRING=unsafe options -# to be removed in the future. - # Check whether --enable-force-safe-string was given. -if test "${enable_force_safe_string+set}" = set; then : - enableval=$enable_force_safe_string; +if test ${enable_force_safe_string+y} +then : + enableval=$enable_force_safe_string; if test "x$enableval" = 'xno' +then : + as_fn_error $? "Support for mutable strings was removed in OCaml 5.0." "$LINENO" 5 +fi fi +if test x"$DEFAULT_STRING" = "xunsafe" +then : + as_fn_error $? "Support for mutable strings was removed in OCaml 5.0." "$LINENO" 5 +fi # Check whether --enable-flat-float-array was given. -if test "${enable_flat_float_array+set}" = set; then : +if test ${enable_flat_float_array+y} +then : enableval=$enable_flat_float_array; fi # Check whether --enable-function-sections was given. -if test "${enable_function_sections+set}" = set; then : +if test ${enable_function_sections+y} +then : enableval=$enable_function_sections; -else +else $as_nop enable_function_sections=auto fi +# Check whether --enable-mmap-map-stack was given. +if test ${enable_mmap_map_stack+y} +then : + enableval=$enable_mmap_map_stack; +fi + + # Check whether --with-afl was given. -if test "${with_afl+set}" = set; then : +if test ${with_afl+y} +then : withval=$with_afl; fi # Check whether --with-flexdll was given. -if test "${with_flexdll+set}" = set; then : - withval=$with_flexdll; if test x"$withval" = 'xyes'; then : +if test ${with_flexdll+y} +then : + withval=$with_flexdll; if test x"$withval" = 'xyes' +then : with_flexdll=flexdll fi fi -if test x"$enable_unix_lib" = "xno"; then : - if test x"$enable_debugger" = "xyes"; then : - as_fn_error $? "replay debugger requires the unix library" "$LINENO" 5 -else - enable_debugger="no" + +# Check whether --with-zstd was given. +if test ${with_zstd+y} +then : + withval=$with_zstd; fi - if test x"$enable_bigarray_lib" = "xyes"; then : - as_fn_error $? "legacy bigarray library requires the unix library" "$LINENO" 5 + + +if test x"$enable_unix_lib" = "xno" +then : + if test x"$enable_ocamldebug" = "xyes" +then : + as_fn_error $? "ocamldebug requires the unix library" "$LINENO" 5 +else $as_nop + enable_ocamldebug="no" fi fi -if test x"$enable_unix_lib" = "xno" -o x"$enable_str_lib" = "xno"; then : - if test x"$enable_ocamldoc" = "xyes"; then : +if test x"$enable_unix_lib" = "xno" || test x"$enable_str_lib" = "xno" +then : + if test x"$enable_ocamldoc" = "xyes" +then : as_fn_error $? "ocamldoc requires the unix and str libraries" "$LINENO" 5 -else +else $as_nop enable_ocamldoc="no" - with_camltex="" + build_ocamltex=false fi -else - with_camltex="true" +else $as_nop + build_ocamltex=true +fi + +if test x"$enable_ocamldoc" = "xno" +then : + if test x"$enable_stdlib_manpages" = "xyes" +then : + as_fn_error $? "--enable-stdlib-manpages requires ocamldoc" "$LINENO" 5 +fi + ocamldoc_target="" + ocamldoc_opt_target="" + with_ocamldoc="" + enable_stdlib_manpages=no + build_ocamldoc=false +else $as_nop + ocamldoc_target=ocamldoc + ocamldoc_opt_target=ocamldoc.opt + with_ocamldoc=ocamldoc + build_ocamldoc=true + optional_libraries="$optional_libraries ocamldoc/odoc_info" + ac_config_files="$ac_config_files ocamldoc/META" + fi # Initialization of libtool @@ -3435,11 +4178,12 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else @@ -3447,11 +4191,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LD="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3462,11 +4210,11 @@ fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3479,11 +4227,12 @@ if test -z "$LD"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else @@ -3491,11 +4240,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LD="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3506,11 +4259,11 @@ fi fi ac_ct_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 -$as_echo "$ac_ct_LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 +printf "%s\n" "$ac_ct_LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3522,8 +4275,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LD=$ac_ct_LD @@ -3535,14 +4288,16 @@ fi # alters the CFLAGS variable, so we save its value before calling the macro # and restore it after the call old_host_os=$host_os -if test x"$host_os" = "xwindows"; then : +if test x"$host_os" = "xwindows" +then : host_os=mingw fi saved_CFLAGS="$CFLAGS" + case `pwd` in *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac @@ -3562,6 +4317,7 @@ macro_revision='2.4.6' + ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within @@ -3585,8 +4341,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -3612,12 +4368,12 @@ func_echo_all () } case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; esac @@ -3630,6 +4386,15 @@ esac + + + + + + + + + @@ -3641,11 +4406,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3653,11 +4419,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3668,11 +4438,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3681,11 +4451,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3693,11 +4464,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3708,11 +4483,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3720,8 +4495,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3734,11 +4509,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3746,11 +4522,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3761,11 +4541,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3774,11 +4554,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3787,15 +4568,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3811,18 +4596,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3833,11 +4618,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3845,11 +4631,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3860,11 +4650,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3877,11 +4667,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3889,11 +4680,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3904,11 +4699,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3920,8 +4715,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3929,25 +4724,129 @@ esac fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3957,7 +4856,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3965,7 +4864,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3977,9 +4876,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -4000,11 +4899,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -4021,7 +4921,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -4037,44 +4937,46 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -4088,15 +4990,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -4105,7 +5007,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -4117,8 +5019,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -4126,10 +5028,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -4137,39 +5039,40 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -4183,11 +5086,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -4196,31 +5100,32 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -4230,29 +5135,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -4261,57 +5170,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -4326,94 +5238,144 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=c @@ -4422,11 +5384,12 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -4440,10 +5403,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -4452,13 +5420,13 @@ case `"$ac_path_SED" --version 2>&1` in ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4486,8 +5454,8 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -4504,11 +5472,12 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -4516,10 +5485,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -4528,13 +5502,13 @@ case `"$ac_path_GREP" --version 2>&1` in ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4562,16 +5536,17 @@ else fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else @@ -4582,10 +5557,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -4594,13 +5574,13 @@ case `"$ac_path_EGREP" --version 2>&1` in ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4629,16 +5609,17 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else @@ -4649,10 +5630,15 @@ else for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -4661,13 +5647,13 @@ case `"$ac_path_FGREP" --version 2>&1` in ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4696,8 +5682,8 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" @@ -4722,17 +5708,18 @@ test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -4761,15 +5748,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; } ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -4798,18 +5786,19 @@ fi LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4832,11 +5821,12 @@ with_gnu_ld=$lt_cv_prog_gnu_ld -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM @@ -4886,8 +5876,8 @@ else : ${lt_cv_path_NM=no} fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -4900,11 +5890,12 @@ else do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else @@ -4912,11 +5903,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4927,11 +5922,11 @@ fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4944,11 +5939,12 @@ if test -z "$DUMPBIN"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else @@ -4956,11 +5952,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4971,11 +5971,11 @@ fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4987,8 +5987,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN @@ -5016,11 +6016,12 @@ test -z "$NM" && NM=nm -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) @@ -5036,26 +6037,27 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop i=0 teststring=ABCD @@ -5182,11 +6184,11 @@ else fi if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -5230,11 +6232,12 @@ esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $host in *-*-mingw* ) case $build in @@ -5270,18 +6273,19 @@ esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in @@ -5297,22 +6301,23 @@ esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_reload_flag='-r' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -5345,11 +6350,12 @@ esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -5357,11 +6363,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5372,11 +6382,11 @@ fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5385,11 +6395,12 @@ if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else @@ -5397,11 +6408,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5412,11 +6427,11 @@ fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -5424,8 +6439,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -5444,11 +6459,12 @@ test -z "$OBJDUMP" && OBJDUMP=objdump -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' @@ -5644,8 +6660,8 @@ os2*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no @@ -5689,11 +6705,12 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -5701,11 +6718,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5716,11 +6737,11 @@ fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5729,11 +6750,12 @@ if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -5741,11 +6763,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5756,11 +6782,11 @@ fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -5768,8 +6794,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -5789,11 +6815,12 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in @@ -5816,8 +6843,8 @@ cygwin* | mingw* | pw32* | cegcc*) esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -5833,11 +6860,12 @@ if test -n "$ac_tool_prefix"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -5845,11 +6873,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5860,11 +6892,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5877,11 +6909,12 @@ if test -z "$AR"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -5889,11 +6922,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5904,11 +6941,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5920,8 +6957,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -5941,30 +6978,32 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -5972,7 +7011,7 @@ if ac_fn_c_try_compile "$LINENO"; then : { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -5981,11 +7020,11 @@ if ac_fn_c_try_compile "$LINENO"; then : rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -6002,11 +7041,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -6014,11 +7054,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6029,11 +7073,11 @@ fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6042,11 +7086,12 @@ if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -6054,11 +7099,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6069,11 +7118,11 @@ fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -6081,8 +7130,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -6101,11 +7150,12 @@ test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6113,11 +7163,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6128,11 +7182,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6141,11 +7195,12 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -6153,11 +7208,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6168,11 +7227,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6180,8 +7239,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -6245,11 +7304,12 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -6257,11 +7317,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6272,11 +7336,11 @@ fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6312,11 +7376,12 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -6468,14 +7533,14 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then @@ -6544,7 +7609,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -6579,11 +7644,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi # Response file support. @@ -6629,13 +7694,14 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : +if test ${with_sysroot+y} +then : withval=$with_sysroot; -else +else $as_nop with_sysroot=no fi @@ -6653,24 +7719,25 @@ case $with_sysroot in #( no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -6681,10 +7748,15 @@ if test -z "$lt_DD"; then for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -6704,15 +7776,16 @@ fi rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -6723,8 +7796,8 @@ fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -6747,7 +7820,8 @@ func_cc_basename () } # Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : +if test ${enable_libtool_lock+y} +then : enableval=$enable_libtool_lock; fi @@ -6763,7 +7837,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -6783,7 +7857,7 @@ ia64-*-hpux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -6821,7 +7895,7 @@ mips64*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -6862,7 +7936,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -6925,11 +7999,12 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -6940,19 +8015,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_cc_needs_belf=yes -else +else $as_nop lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -6961,8 +8037,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -6975,7 +8051,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -7012,11 +8088,12 @@ need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -7024,11 +8101,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7039,11 +8120,11 @@ fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7052,11 +8133,12 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -7064,11 +8146,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7079,11 +8165,11 @@ fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -7091,8 +8177,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -7102,11 +8188,12 @@ else fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -7116,8 +8203,8 @@ else fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -7132,11 +8219,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -7144,11 +8232,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7159,11 +8251,11 @@ fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7172,11 +8264,12 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -7184,11 +8277,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7199,11 +8296,11 @@ fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -7211,8 +8308,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -7224,11 +8321,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -7236,11 +8334,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7251,11 +8353,11 @@ fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7264,11 +8366,12 @@ if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -7276,11 +8379,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7291,11 +8398,11 @@ fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -7303,8 +8410,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -7316,11 +8423,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -7328,11 +8436,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7343,11 +8455,11 @@ fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7356,11 +8468,12 @@ if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -7368,11 +8481,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7383,11 +8500,11 @@ fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -7395,8 +8512,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -7408,11 +8525,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -7420,11 +8538,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7435,11 +8557,11 @@ fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7448,11 +8570,12 @@ if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -7460,11 +8583,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7475,11 +8602,11 @@ fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -7487,8 +8614,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -7500,11 +8627,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -7512,11 +8640,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7527,11 +8659,11 @@ fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7540,11 +8672,12 @@ if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -7552,11 +8685,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7567,11 +8704,11 @@ fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -7579,8 +8716,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -7615,11 +8752,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -7648,14 +8786,15 @@ else rm -f conftest.* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -7664,31 +8803,33 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_ld_exported_symbols_list=yes -else +else $as_nop lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -7716,8 +8857,8 @@ _LT_EOF rm -rf conftest.dSYM fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -7768,306 +8909,63 @@ $as_echo "$lt_cv_ld_force_load" >&6; } # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () -{ - case x$2 in - x) - ;; - *:) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" - ;; - x:*) - eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" - ;; - *::*) - eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" - eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" - ;; - *) - eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" - ;; - esac -} - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi -done - @@ -8083,7 +8981,8 @@ done # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -8101,7 +9000,7 @@ if test "${enable_shared+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_shared=yes fi @@ -8114,7 +9013,8 @@ fi # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : +if test ${enable_static+y} +then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -8132,7 +9032,7 @@ if test "${enable_static+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_static=yes fi @@ -8146,7 +9046,8 @@ fi # Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : +if test ${with_pic+y} +then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -8163,7 +9064,7 @@ if test "${with_pic+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop pic_mode=default fi @@ -8175,7 +9076,8 @@ fi # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : +if test ${enable_fast_install+y} +then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -8193,7 +9095,7 @@ if test "${enable_fast_install+set}" = set; then : IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_fast_install=yes fi @@ -8207,11 +9109,12 @@ fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : +if test ${with_aix_soname+y} +then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -8220,18 +9123,19 @@ if test "${with_aix_soname+set}" = set; then : ;; esac lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -8313,11 +9217,12 @@ if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -8328,17 +9233,15 @@ else fi rmdir .libs 2>/dev/null fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h @@ -8384,11 +9287,12 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8437,11 +9341,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8450,11 +9354,12 @@ fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -8503,11 +9408,11 @@ fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8592,11 +9497,12 @@ if test yes = "$GCC"; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -8627,8 +9533,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -8985,26 +9891,28 @@ case $host_os in ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -9035,8 +9943,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -9064,11 +9972,12 @@ fi # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -9092,8 +10001,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -9107,11 +10016,12 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9154,19 +10064,20 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -9209,8 +10120,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -9218,19 +10129,19 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -9242,8 +10153,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -9801,21 +10712,23 @@ _LT_EOF if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -9830,7 +10743,7 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -9854,21 +10767,23 @@ fi if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -9883,7 +10798,7 @@ if ac_fn_c_try_link "$LINENO"; then : lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10134,11 +11049,12 @@ fi # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -10162,8 +11078,8 @@ else LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -10203,28 +11119,30 @@ fi # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_irix_exported_symbol=yes -else +else $as_nop lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -10505,8 +11423,8 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -10542,18 +11460,19 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -10571,7 +11490,7 @@ else if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -10585,8 +11504,8 @@ else $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -10745,8 +11664,8 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -11307,9 +12226,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -11319,19 +12239,21 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -11575,8 +12497,8 @@ uts4*) dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -11697,8 +12619,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -11722,8 +12644,8 @@ else # directories. hardcode_action=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -11767,11 +12689,12 @@ else darwin*) # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11780,32 +12703,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else +else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -11825,14 +12747,16 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : +if test "x$ac_cv_func_shl_load" = xyes +then : lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11841,41 +12765,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shl_load (); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else +else $as_nop ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else +else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +if test "x$ac_cv_func_dlopen" = xyes +then : lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11884,37 +12809,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11923,37 +12848,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_svld_dlopen=yes -else +else $as_nop ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11962,30 +12887,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dld_link (); int -main () +main (void) { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_dld_link=yes -else +else $as_nop ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -12024,11 +12948,12 @@ fi save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -12107,7 +13032,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12125,16 +13050,17 @@ rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -12213,7 +13139,7 @@ _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -12231,8 +13157,8 @@ rm -fr conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -12270,13 +13196,13 @@ fi striplib= old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -12284,16 +13210,16 @@ else if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac fi @@ -12310,13 +13236,13 @@ fi # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -12340,15 +13266,15 @@ $as_echo_n "checking whether to build shared libraries... " >&6; } fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } @@ -12396,11 +13322,12 @@ case $host in #( do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DEP_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DEP_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DEP_CC"; then ac_cv_prog_DEP_CC="$DEP_CC" # Let the user override the test. else @@ -12408,11 +13335,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DEP_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -12423,11 +13354,11 @@ fi fi DEP_CC=$ac_cv_prog_DEP_CC if test -n "$DEP_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEP_CC" >&5 -$as_echo "$DEP_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DEP_CC" >&5 +printf "%s\n" "$DEP_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -12440,11 +13371,12 @@ if test -z "$DEP_CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DEP_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DEP_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DEP_CC"; then ac_cv_prog_ac_ct_DEP_CC="$ac_ct_DEP_CC" # Let the user override the test. else @@ -12452,11 +13384,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DEP_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -12467,11 +13403,11 @@ fi fi ac_ct_DEP_CC=$ac_cv_prog_ac_ct_DEP_CC if test -n "$ac_ct_DEP_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DEP_CC" >&5 -$as_echo "$ac_ct_DEP_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DEP_CC" >&5 +printf "%s\n" "$ac_ct_DEP_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -12483,8 +13419,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DEP_CC=$ac_ct_DEP_CC @@ -12497,21 +13433,24 @@ esac case $enable_dependency_generation in #( yes) : - if test "$DEP_CC" = "false"; then : + if test "$DEP_CC" = "false" +then : as_fn_error $? "The MSVC ports cannot generate dependency information. Install gcc (or another CC-like compiler)" "$LINENO" 5 -else +else $as_nop compute_deps=true fi ;; #( no) : compute_deps=false ;; #( *) : - if test -e .git; then : - if test "$DEP_CC" = "false"; then : + if test -e .git +then : + if test "$DEP_CC" = "false" +then : compute_deps=false -else +else $as_nop compute_deps=true fi -else +else $as_nop compute_deps=false fi ;; esac @@ -12525,11 +13464,13 @@ case $host in #( # So we let them do, at the moment *-pc-windows) : + mkexe_via_cc_extra_cmd=' && $(call MERGEMANIFESTEXE,$(1))' libext=lib AR="" - if test "$host_cpu" = "x86_64" ; then : + if test "$host_cpu" = "x86_64" +then : machine="-machine:AMD64 " -else +else $as_nop machine="" fi mklib="link -lib -nologo $machine /out:\$(1) \$(2)" @@ -12541,18 +13482,162 @@ fi esac ## Find vendor of the C compiler +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + - { $as_echo "$as_me:${as_lineno-$LINENO}: checking C compiler vendor" >&5 -$as_echo_n "checking C compiler vendor... " >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking C compiler vendor" >&5 +printf %s "checking C compiler vendor... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(_MSC_VER) msvc _MSC_VER +# if defined(__clang_major__) && defined(__clang_minor__) + clang __clang_major__ __clang_minor__ +# endif #elif defined(__INTEL_COMPILER) icc __INTEL_COMPILER +#elif defined(__MINGW32__) +#include <_mingw_mac.h> +mingw __MINGW64_VERSION_MAJOR __MINGW64_VERSION_MINOR +# if defined(__clang_major__) && defined(__clang_minor__) + clang __clang_major__ __clang_minor__ +# elif defined(__GNUC__) && defined(__GNUC_MINOR__) + gcc __GNUC__ __GNUC_MINOR__ +# endif #elif defined(__clang_major__) && defined(__clang_minor__) clang __clang_major__ __clang_minor__ #elif defined(__GNUC__) && defined(__GNUC_MINOR__) @@ -12566,48 +13651,55 @@ unknown #endif _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - if ${ocaml_cv_cc_vendor+:} false; then : - $as_echo_n "(cached) " >&6 -else - ocaml_cv_cc_vendor=`grep '^[a-z]' conftest.i | tr -s ' ' '-' \ - | tr -d '\r'` -fi - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +if ac_fn_c_try_cpp "$LINENO" +then : + if test ${ocaml_cv_cc_vendor2+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ocaml_cv_cc_vendor2=`sed -e '/^#/d' conftest.i | tr -s '[:space:]' '-' \ + | sed -e 's/^-//' -e 's/-$//'` +fi + + # Domain of values was changed in #12768, so the cache key became different + # from the variable + ocaml_cc_vendor="$ocaml_cv_cc_vendor2" +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "unexpected preprocessor failure See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.err conftest.i conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ocaml_cv_cc_vendor" >&5 -$as_echo "$ocaml_cv_cc_vendor" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ocaml_cc_vendor" >&5 +printf "%s\n" "$ocaml_cc_vendor" >&6; } ## In cross-compilation mode, can we run executables produced? # At the moment, it's required, but the fact is used in C99 function detection - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host executables can be run in the build" >&5 -$as_echo_n "checking whether host executables can be run in the build... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether host executables can be run in the build" >&5 +printf %s "checking whether host executables can be run in the build... " >&6; } old_cross_compiling="$cross_compiling" cross_compiling='no' - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : # autoconf displays a warning if this parameter is missing, but # cross-compilation mode was disabled above. assert=false -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) {return 0;} _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +if ac_fn_c_try_run "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } host_runnable=true -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } host_runnable=false fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -12628,59 +13720,105 @@ fi # We thus figure out how to invoke the C preprocessor directly but # let the CPP variable untouched, except for the MSVC port where we set it # manually to make sure the backward compatibility is preserved -case $ocaml_cv_cc_vendor in #( +case $ocaml_cc_vendor in #( xlc-*) : - CPP="$CC -E -qnoppline" ;; #( - # suppress incompatible XLC line directives + CPP="$CC -E -qnoppline" # suppress incompatible XLC line directives + ocamltest_CPP="$CPP" ;; #( sunc-*) : - CPP="$CC -E -Qn" ;; #( - # suppress generation of Sun PRO ident string + CPP="$CC -E -Qn" # suppress generation of Sun PRO ident string + ocamltest_CPP="$CPP" ;; #( msvc-*) : - CPP="$CC -nologo -EP" ;; #( + CPP="$CC -nologo -EP" + ocamltest_CPP="$CPP 2> nul" ;; #( + *) : + CPP="$CC -E -P" + ocamltest_CPP="$CPP" ;; +esac + +# Absolute path to the toplevel source directory + +# A sentinel character (X) is added at the end of the directory name +# and then removed, in case the directory name finishes with an odd character. +# (The $(...) construct strips trailing \n characters.) +# Also, it is important to use `printf` rather than `echo` because the +# behaviour of `echo` is indeterminate and uncontrollable if the +# absolute path contains backslashes, which will definitely be the case +# on Windows +# See https://lists.gnu.org/archive/html/autoconf/2019-07/msg00002.html +# for the detailed explanation. + +ocamlsrcdir=$(unset CDPATH; cd -- "$srcdir" && printf %sX "$PWD") || fail +ocamlsrcdir=${ocamlsrcdir%X} + +# Whether ar supports @FILE arguments + +case lt_cv_ar_at_file in #( + no) : + ar_supports_response_files=false ;; #( *) : - ;; + ar_supports_response_files=true ;; esac # Libraries to build depending on the host case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*|*-pc-windows) : unix_or_win32="win32" - unixlib="win32unix" - ;; #( + ln='cp -pf' + ocamltest_libunix="Some false" + ocamlsrcdir="$(LC_ALL=C.UTF-8 cygpath -w -- "$ocamlsrcdir")" + ocamlyacc_wstr_module="yacc/wstr" ;; #( *) : unix_or_win32="unix" - unixlib="unix" ;; + ln='ln -sf' + ocamltest_libunix="Some true" + ocamlyacc_wstr_module="" ;; esac + case $host in #( - *-*-cygwin*|*-*-mingw32|*-pc-windows) : + *-*-cygwin*|*-*-mingw32*|*-pc-windows) : exeext=".exe" ;; #( *) : exeext='' ;; esac -otherlibraries="dynlink" -if test x"$enable_unix_lib" != "xno"; then : +otherlibraries="dynlink runtime_events" +lib_dynlink=true +lib_runtime_events=true +if test x"$enable_unix_lib" != "xno" +then : enable_unix_lib=yes - if test x"$enable_bigarray_lib" != "xno"; then : - otherlibraries="$otherlibraries $unixlib bigarray" -else - otherlibraries="$otherlibraries $unixlib" -fi + ac_config_files="$ac_config_files otherlibs/unix/META" + + otherlibraries="$otherlibraries unix" + lib_unix=true + ac_config_links="$ac_config_links otherlibs/unix/unix.ml:otherlibs/unix/unix_${unix_or_win32}.ml" + + ocamltest_unix_impl="real" + unix_directory="otherlibs/unix" + unix_library="${unix_directory}/unix" +else $as_nop + ocamltest_libunix="None" fi -if test x"$enable_str_lib" != "xno"; then : + +if test x"$enable_str_lib" != "xno" +then : otherlibraries="$otherlibraries str" + lib_str=true + ac_config_files="$ac_config_files otherlibs/str/META" + fi # Checks for system services ## Test whether #! scripts are supported ## TODO: have two values, one for host and one for target -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5 -$as_echo_n "checking whether #! works in shell scripts... " >&6; } -if ${ac_cv_sys_interpreter+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5 +printf %s "checking whether #! works in shell scripts... " >&6; } +if test ${ac_cv_sys_interpreter+y} +then : + printf %s "(cached) " >&6 +else $as_nop echo '#! /bin/cat exit 69 ' >conftest @@ -12693,42 +13831,49 @@ else fi rm -f conftest fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 -$as_echo "$ac_cv_sys_interpreter" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5 +printf "%s\n" "$ac_cv_sys_interpreter" >&6; } interpval=$ac_cv_sys_interpreter -long_shebang=false -if test "x$interpval" = "xyes"; then : +shebangscripts=false +launch_method='exe' +if test "x$interpval" = "xyes" +then : case $host in #( - *-cygwin|*-*-mingw32|*-pc-windows) : - shebangscripts=false ;; #( + *-cygwin) : + # Cygwin supports shebangs, which we use for the compiler itself, but + # partially for legacy, and partially so that executables can be easily + # run from outside Cygwin, the executables ocamlc and ocamlopt produce do + # not use shebang scripts + shebangscripts=true + launch_method='sh' + if test x"$target_launch_method" = 'x' +then : + target_launch_method='exe' +fi ;; #( + *-*-mingw32*|*-pc-windows) : + ;; #( *) : shebangscripts=true - prev_exec_prefix="$exec_prefix" - if test "x$exec_prefix" = "xNONE"; then : - exec_prefix="$prefix" -fi - eval "expanded_bindir=\"$bindir\"" - exec_prefix="$prev_exec_prefix" - # Assume maximum shebang is 128 chars; less #!, /ocamlrun, an optional - # 1 char suffix and the \0 leaving 115 characters - if test "${#expanded_bindir}" -gt 115; then : - long_shebang=true -fi - - ;; + launch_method='sh' + ;; esac -else - shebangscripts=false fi +# stdlib/runtime.info and stdlib/target_runtime.info are generated by commands +# in config.status, rather than by the .in mechanism, since the latter cannot +# reliably process binary files. +ac_config_commands="$ac_config_commands shebang" + + # Are we building a cross-compiler -if test x"$host" = x"$target"; then : +if test x"$host" = x"$target" +then : cross_compiler=false -else +else $as_nop cross_compiler=true fi @@ -12742,24 +13887,67 @@ fi ## Determine which flags to use for the C compiler -case $ocaml_cv_cc_vendor in #( +case $ocaml_cc_vendor in #( xlc-*) : - outputobj='-o $(EMPTY)' + outputobj='-o ' warn_error_flag='' cc_warnings='-qflag=i:i' ;; #( # all warnings enabled sunc-*) : - outputobj='-o $(EMPTY)'; cc_warnings="" ;; #( + outputobj='-o '; cc_warnings="" ;; #( msvc-*) : outputobj='-Fo' warn_error_flag='-WX' cc_warnings='' ;; #( *) : - outputobj='-o $(EMPTY)' + outputobj='-o ' warn_error_flag='-Werror' - cc_warnings='-Wall -Wdeclaration-after-statement' ;; + cc_warnings="-Wall -Wint-conversion -Wstrict-prototypes \ +-Wold-style-definition -Wundef" ;; esac +# Use -Wold-style-declaration if supported +as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$warn_error_flag_-Wold-style-declaration" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wold-style-declaration" >&5 +printf %s "checking whether C compiler accepts -Wold-style-declaration... " >&6; } +if eval test \${$as_CACHEVAR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + ax_check_save_flags=$CFLAGS + CFLAGS="$CFLAGS $warn_error_flag -Wold-style-declaration" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$as_CACHEVAR=yes" +else $as_nop + eval "$as_CACHEVAR=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CFLAGS=$ax_check_save_flags +fi +eval ac_res=\$$as_CACHEVAR + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_CACHEVAR"\" = x"yes" +then : + cc_warnings="$cc_warnings -Wold-style-declaration" +else $as_nop + : +fi + + case $enable_warn_error,false in #( yes,*|,true) : cc_warnings="$cc_warnings $warn_error_flag" ;; #( @@ -12772,111 +13960,76 @@ esac # - strict no-overflow conditions on signed integer arithmetic # (the OCaml runtime assumes Java-style behavior of signed integer arith.) # Concerning optimization level, -O3 is somewhat risky, so take -O2. -# Concerning language version, gnu99 is ISO C99 plus GNU extensions -# that are often used in standard headers. Older GCC versions -# defaults to gnu89, which is not C99. Clang defaults to gnu99 or -# gnu11, which is fine. - -# Note: the vendor macro can not recognize MinGW because it calls the -# C preprocessor directly so no compiler specific macro like __MING32__ -# is defined. We thus catch MinGW first by looking at host and examine -# the vendor only as a fall-back. We could put tis part of the logic -# in the macro itself, too -case $host in #( - *-*-mingw32) : - case $ocaml_cv_cc_vendor in #( - gcc-[01234]-*) : - as_fn_error $? "This version of Mingw GCC is too old. Please use GCC version 5 or above." "$LINENO" 5 ;; #( - gcc-*) : - internal_cflags="-Wno-unused $cc_warnings \ --fexcess-precision=standard" - # TODO: see whether the code can be fixed to avoid -Wno-unused - common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" - internal_cppflags='-D__USE_MINGW_ANSI_STDIO=0 -DUNICODE -D_UNICODE' - internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" - internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)" ;; #( - *) : - as_fn_error $? "Unsupported C compiler for a Mingw build" "$LINENO" 5 ;; -esac ;; #( - *) : - case $ocaml_cv_cc_vendor in #( +# Concerning language version, recent enough versions of GCC and Clang +# default to gnu11 (C11 + GNU extensions) or gnu17, which is fine. +case $ocaml_cc_vendor in #( clang-*) : common_cflags="-O2 -fno-strict-aliasing -fwrapv"; - internal_cflags="$cc_warnings -fno-common" ;; #( - gcc-[012]-*) : - # Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96. - # Plus: C99 support unknown. - as_fn_error $? "This version of GCC is too old. Please use GCC version 4.2 or above." "$LINENO" 5 ;; #( - gcc-3-*|gcc-4-[01]) : - # No -fwrapv option before GCC 3.4. - # Known problems with -fwrapv fixed in 4.2 only. - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This version of GCC is rather old. Reducing optimization level.\"" >&5 -$as_echo "$as_me: WARNING: This version of GCC is rather old. Reducing optimization level.\"" >&2;}; - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Consider using GCC version 4.2 or above." >&5 -$as_echo "$as_me: WARNING: Consider using GCC version 4.2 or above." >&2;}; - common_cflags="-std=gnu99 -O"; - internal_cflags="$cc_warnings" ;; #( - gcc-4-[234]) : - # No -fexcess-precision option before GCC 4.5 - common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ --fno-builtin-memcmp"; - internal_cflags="$cc_warnings" ;; #( - gcc-4-*) : - common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ --fno-builtin-memcmp"; - internal_cflags="$cc_warnings -fexcess-precision=standard" ;; #( + internal_cflags="$cc_warnings -fno-common" ;; #( + *gcc-[0123]-*|*gcc-4-[0-8]) : + # No C11 support + as_fn_error 69 "This version of GCC is too old. Please use GCC version 4.9 or above." "$LINENO" 5 ;; #( gcc-*) : common_cflags="-O2 -fno-strict-aliasing -fwrapv"; - internal_cflags="$cc_warnings -fno-common \ --fexcess-precision=standard" ;; #( + internal_cflags="$cc_warnings -fno-common -fexcess-precision=standard \ +-Wvla" ;; #( + mingw-*-*-gcc-*) : + internal_cflags="-Wno-unused $cc_warnings \ +-fexcess-precision=standard" + # TODO: see whether the code can be fixed to avoid -Wno-unused + common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" + internal_cppflags='-D__USE_MINGW_ANSI_STDIO=0 -DUNICODE -D_UNICODE' + internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" + internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)" ;; #( + mingw-*) : + as_fn_error $? "Unsupported C compiler for a MinGW-w64 build" "$LINENO" 5 ;; #( msvc-*) : common_cflags="-nologo -O2 -Gy- -MD $cc_warnings" - common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" - internal_cppflags='-DUNICODE -D_UNICODE' + common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" + internal_cppflags='-DUNICODE -D_UNICODE' - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -d2VolatileMetadata-" >&5 -$as_echo_n "checking whether the C compiler supports -d2VolatileMetadata-... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -d2VolatileMetadata-" >&5 +printf %s "checking whether the C compiler supports -d2VolatileMetadata-... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-d2VolatileMetadata- $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cl_has_volatile_metadata=true - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop cl_has_volatile_metadata=false - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$saved_CFLAGS" - if test "x$cl_has_volatile_metadata" = "xtrue"; then : + if test "x$cl_has_volatile_metadata" = "xtrue" +then : internal_cflags='-d2VolatileMetadata-' fi - internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" - internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)" ;; #( + internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" + internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)" ;; #( xlc-*) : common_cflags="-O5 -qtune=balanced -qnoipa -qinline"; - internal_cflags="$cc_warnings" ;; #( + internal_cflags="$cc_warnings" ;; #( sunc-*) : # Optimization should be >= O4 to inline functions - # and prevent unresolved externals - common_cflags="-O4 -xc99=all -D_XPG6 $CFLAGS"; - internal_cflags="$cc_warnings" ;; #( + # and prevent unresolved externals + common_cflags="-O4 -xc99=all -D_XPG6 $CFLAGS"; + internal_cflags="$cc_warnings" ;; #( *) : common_cflags="-O" ;; -esac ;; esac -internal_cppflags="-DCAML_NAME_SPACE $internal_cppflags" - # Enable SSE2 on x86 mingw to avoid using 80-bit registers. case $host in #( - i686-*-mingw32) : + i686-*-mingw32*) : internal_cflags="$internal_cflags -mfpmath=sse -msse2" ;; #( *) : ;; @@ -12886,7 +14039,7 @@ esac # See also AC_SYS_LARGEFILE # Problem: flags are added to CC rather than CPPFLAGS case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*|*-pc-windows) : ;; #( *) : common_cppflags="$common_cppflags -D_FILE_OFFSET_BITS=64" ;; @@ -12900,96 +14053,107 @@ esac # [*-pc-windows], # [enable_shared=yes]) -if test x"$enable_shared" = "xno"; then : +if test x"$enable_shared" = "xno" +then : supports_shared_libraries=false case $host in #( - *-pc-windows|*-w64-mingw32) : + *-pc-windows|*-w64-mingw32*) : as_fn_error $? "Cannot build native Win32 with --disable-shared" "$LINENO" 5 ;; #( *) : ;; esac -else +else $as_nop supports_shared_libraries=true fi # Define flexlink chain and flags correctly for the different Windows ports +flexlink_flags='' case $host in #( i686-*-cygwin) : flexdll_chain='cygwin' - flexlink_flags="-chain $flexdll_chain -merge-manifest -stack 16777216" ;; #( + flexlink_flags='-merge-manifest -stack 16777216' ;; #( x86_64-*-cygwin) : flexdll_chain='cygwin64' - flexlink_flags="-chain $flexdll_chain -merge-manifest -stack 16777216" ;; #( + flexlink_flags='-merge-manifest -stack 16777216' ;; #( *-*-cygwin*) : as_fn_error $? "unknown cygwin variant" "$LINENO" 5 ;; #( - i686-w64-mingw32) : + i686-w64-mingw32*) : flexdll_chain='mingw' - flexlink_flags="-chain $flexdll_chain -stack 16777216" ;; #( - x86_64-w64-mingw32) : + flexlink_flags='-stack 16777216' ;; #( + x86_64-w64-mingw32*) : flexdll_chain='mingw64' - flexlink_flags="-chain $flexdll_chain -stack 33554432" ;; #( + flexlink_flags='-stack 33554432' ;; #( i686-pc-windows) : flexdll_chain='msvc' - flexlink_flags="-merge-manifest -stack 16777216" ;; #( + flexlink_flags='-merge-manifest -stack 16777216' ;; #( x86_64-pc-windows) : flexdll_chain='msvc64' - flexlink_flags="-x64 -merge-manifest -stack 33554432" ;; #( + flexlink_flags='-merge-manifest -stack 33554432' ;; #( *) : - ;; + flexdll_chain='' ;; esac -if test x"$supports_shared_libraries" != 'xfalse'; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexdll sources" >&5 -$as_echo_n "checking for flexdll sources... " >&6; } - if test x"$with_flexdll" = "xno"; then : - flexdir='' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 -$as_echo "disabled" >&6; } -else +if test x"$supports_shared_libraries" != 'xfalse' +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexdll sources" >&5 +printf %s "checking for flexdll sources... " >&6; } + if test x"$with_flexdll" = "xno" +then : + flexdll_source_dir='' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +printf "%s\n" "disabled" >&6; } +else $as_nop flexmsg='' case $target in #( - *-*-cygwin*|*-w64-mingw32|*-pc-windows) : - if test x"$with_flexdll" = 'x' -o x"$with_flexdll" = 'xflexdll'; then : - if test -f 'flexdll/flexdll.h'; then : - flexdir=flexdll + *-*-cygwin*|*-w64-mingw32*|*-pc-windows) : + if test x"$with_flexdll" = 'x' || test x"$with_flexdll" = 'xflexdll' +then : + if test -f 'flexdll/flexdll.h' +then : + flexdll_source_dir=flexdll iflexdir='$(ROOTDIR)/flexdll' with_flexdll="$iflexdir" -else - if test x"$with_flexdll" != 'x'; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 -$as_echo "requested but not available" >&6; } +else $as_nop + if test x"$with_flexdll" != 'x' +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 +printf "%s\n" "requested but not available" >&6; } as_fn_error $? "exiting" "$LINENO" 5 fi fi -else +else $as_nop rm -rf flexdll-sources - if test -f "$with_flexdll/flexdll.h"; then : + if test -f "$with_flexdll/flexdll.h" +then : mkdir -p flexdll-sources cp -r "$with_flexdll"/* flexdll-sources/ - flexdir='flexdll-sources' + flexdll_source_dir='flexdll-sources' iflexdir='$(ROOTDIR)/flexdll-sources' flexmsg=" (from $with_flexdll)" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 -$as_echo "requested but not available" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not available" >&5 +printf "%s\n" "requested but not available" >&6; } as_fn_error $? "exiting" "$LINENO" 5 fi fi - if test x"$flexdir" = 'x'; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $iflexdir$flexmsg" >&5 -$as_echo "$iflexdir$flexmsg" >&6; } + if test x"$flexdll_source_dir" = 'x' +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $iflexdir$flexmsg" >&5 +printf "%s\n" "$iflexdir$flexmsg" >&6; } bootstrapping_flexdll=true + flexdll_dir=\"+flexdll\" # The submodule should be searched *before* any other -I paths internal_cppflags="-I $iflexdir $internal_cppflags" fi ;; #( *) : - if test x"$with_flexdll" != 'x'; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not supported" >&5 -$as_echo "requested but not supported" >&6; } + if test x"$with_flexdll" != 'x' +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not supported" >&5 +printf "%s\n" "requested but not supported" >&6; } as_fn_error $? "exiting" "$LINENO" 5 fi ;; esac @@ -12997,11 +14161,12 @@ fi # Extract the first word of "flexlink", so it can be a program name with args. set dummy flexlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_flexlink+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_flexlink+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$flexlink"; then ac_cv_prog_flexlink="$flexlink" # Let the user override the test. else @@ -13009,11 +14174,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_flexlink="flexlink" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13024,16 +14193,17 @@ fi fi flexlink=$ac_cv_prog_flexlink if test -n "$flexlink"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flexlink" >&5 -$as_echo "$flexlink" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $flexlink" >&5 +printf "%s\n" "$flexlink" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test -n "$flexlink" -a -z "$flexdir"; then : + if test -n "$flexlink" && test -z "$flexdll_source_dir" +then : @@ -13049,14 +14219,15 @@ fi touch confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $flexlink works" >&5 -$as_echo_n "checking whether $flexlink works... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $flexlink works" >&5 +printf %s "checking whether $flexlink works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int answer = 42; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # Create conftest1.$ac_objext as a symlink on Cygwin to ensure that native # flexlink can cope. The reverse test is unnecessary (a Cygwin-compiled # flexlink can read anything). @@ -13076,22 +14247,23 @@ esac /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } as_fn_error $? "$flexlink does not work" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unexpected compile error" >&5 -$as_echo "unexpected compile error" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unexpected compile error" >&5 +printf "%s\n" "unexpected compile error" >&6; } as_fn_error $? "error calling the C compiler" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Restore the content of confdefs.h @@ -13106,11 +14278,11 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext case $host in #( - *-w64-mingw32|*-pc-windows) : + *-w64-mingw32*|*-pc-windows) : flexlink_where="$(cmd /c "$flexlink" -where 2>/dev/null)" - if test -z "$flexlink_where"; then : + if test -z "$flexlink_where" +then : as_fn_error $? "$flexlink is not executable from a native Win32 process" "$LINENO" 5 - fi ;; #( *) : ;; @@ -13132,21 +14304,24 @@ fi touch confdefs.h - if test -n "$flexdir"; then : - CPPFLAGS="-I $flexdir $CPPFLAGS" + if test -n "$flexdll_source_dir" +then : + CPPFLAGS="-I $flexdll_source_dir $CPPFLAGS" fi have_flexdll_h=no - ac_fn_c_check_header_mongrel "$LINENO" "flexdll.h" "ac_cv_header_flexdll_h" "$ac_includes_default" -if test "x$ac_cv_header_flexdll_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "flexdll.h" "ac_cv_header_flexdll_h" "$ac_includes_default" +if test "x$ac_cv_header_flexdll_h" = xyes +then : have_flexdll_h=yes -else +else $as_nop have_flexdll_h=no fi - - if test x"$have_flexdll_h" = 'xno'; then : - if test -n "$flexdir"; then : - as_fn_error $? "$flexdir/flexdll.h appears unusable" "$LINENO" 5 + if test x"$have_flexdll_h" = 'xno' +then : + if test -n "$flexdll_source_dir" +then : + as_fn_error $? "$flexdll_source_dir/flexdll.h appears unusable" "$LINENO" 5 fi fi @@ -13162,7 +14337,8 @@ fi - if test -n "$flexlink" -a x"$have_flexdll_h" = 'xno'; then : + if test -n "$flexlink" && test x"$have_flexdll_h" = 'xno' +then : saved_CC="$CC" @@ -13177,8 +14353,8 @@ fi touch confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if \"$flexlink -where\" includes flexdll.h" >&5 -$as_echo_n "checking if \"$flexlink -where\" includes flexdll.h... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if \"$flexlink -where\" includes flexdll.h" >&5 +printf %s "checking if \"$flexlink -where\" includes flexdll.h... " >&6; } flexlink_where="$($flexlink -where | tr -d '\r')" CPPFLAGS="$CPPFLAGS -I \"$flexlink_where\"" cat > conftest.c <<"EOF" @@ -13189,13 +14365,14 @@ EOF all: $CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS EOF - if make -f conftest.Makefile >/dev/null 2>/dev/null; then : + if make -f conftest.Makefile >/dev/null 2>/dev/null +then : have_flexdll_h=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -13209,7 +14386,8 @@ fi LIBS="$saved_LIBS" - if test "x$have_flexdll_h" = 'xyes'; then : + if test "x$have_flexdll_h" = 'xyes' +then : internal_cppflags="$internal_cppflags -I \"$flexlink_where\"" fi @@ -13220,79 +14398,92 @@ fi case $have_flexdll_h,$supports_shared_libraries,$host in #( no,true,*-*-cygwin*) : supports_shared_libraries=false - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: flexdll.h not found: shared library support disabled." >&5 -$as_echo "$as_me: WARNING: flexdll.h not found: shared library support disabled." >&2;} ;; #( - no,*,*-w64-mingw32|no,*,*-pc-windows) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: flexdll.h not found: shared library support disabled." >&5 +printf "%s\n" "$as_me: WARNING: flexdll.h not found: shared library support disabled." >&2;} ;; #( + no,*,*-w64-mingw32*|no,*,*-pc-windows) : as_fn_error $? "flexdll.h is required for native Win32" "$LINENO" 5 ;; #( *) : ;; esac -case $flexdir,$supports_shared_libraries,$flexlink,$host in #( +case $flexdll_source_dir,$supports_shared_libraries,$flexlink,$host in #( ,true,,*-*-cygwin*) : supports_shared_libraries=false - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: flexlink not found: shared library support disabled." >&5 -$as_echo "$as_me: WARNING: flexlink not found: shared library support disabled." >&2;} ;; #( - ,*,,*-w64-mingw32|,*,,*-pc-windows) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: flexlink not found: shared library support disabled." >&5 +printf "%s\n" "$as_me: WARNING: flexlink not found: shared library support disabled." >&2;} ;; #( + ,*,,*-w64-mingw32*|,*,,*-pc-windows) : as_fn_error $? "flexlink is required for native Win32" "$LINENO" 5 ;; #( *) : ;; esac -case $cc_basename,$host in #( - *,*-*-darwin*) : - mkexe="$mkexe -Wl,-no_compact_unwind"; - $as_echo "#define HAS_ARCH_CODE32 1" >>confdefs.h +mkexe_cmd_exp="$CC" + +case $ocaml_cc_vendor,$host in #( + *,x86_64-*-darwin*) : + oc_ldflags='-Wl,-no_compact_unwind'; + printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h + ;; #( + *,aarch64-*-darwin*|arm64-*-darwin*) : + printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h ;; #( - *,*-*-haiku*) : - mathlib="" ;; #( *,*-*-cygwin*) : common_cppflags="$common_cppflags -U_WIN32" - if $supports_shared_libraries; then : - mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' - mkexedebugflag="-link -g" -else - mkexe="$mkexe -Wl,--stack,16777216" - oc_ldflags="-Wl,--stack,16777216" + if $supports_shared_libraries +then : + mkexe_cmd_exp="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cmd="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cflags='' + mkexe_ldflags_prefix='-link ' +else $as_nop + mkexe_extra_flags='' + oc_ldflags='-Wl,--stack,16777216' fi ostype="Cygwin" ;; #( - *,*-*-mingw32) : + *,*-*-mingw32*) : case $host in #( i686-*-*) : oc_dll_ldflags="-static-libgcc" ;; #( *) : ;; esac - mkexedebugflag="-link -g" ostype="Win32" toolchain="mingw" - mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' - oc_ldflags='-municode' + mkexe_cmd_exp="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cmd="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cflags='' + mkexe_ldflags_prefix='-link ' + oc_exe_ldflags='-municode' + mkexe_extra_flags="$mkexe_ldflags_prefix$oc_exe_ldflags" SO="dll" ;; #( *,*-pc-windows) : toolchain=msvc ostype="Win32" - mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' - oc_ldflags='/ENTRY:wmainCRTStartup' + mkexe_cmd_exp="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cmd="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cflags='' + mkexe_ldflags_prefix='-link ' + mkexe_via_cc_ldflags_prefix='/link ' + oc_exe_ldflags='/ENTRY:wmainCRTStartup' + mkexe_extra_flags="$mkexe_ldflags_prefix$oc_exe_ldflags" mkexedebugflag='' ;; #( *,x86_64-*-linux*) : - $as_echo "#define HAS_ARCH_CODE32 1" >>confdefs.h + printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h ;; #( - xlc*,powerpc-ibm-aix*) : - mkexe="$mkexe " - oc_ldflags="-brtl -bexpfull" - $as_echo "#define HAS_ARCH_CODE32 1" >>confdefs.h + xlc-*,powerpc-ibm-aix*) : + oc_ldflags='-brtl -bexpfull' + printf "%s\n" "#define HAS_ARCH_CODE32 1" >>confdefs.h ;; #( - gcc*,powerpc-*-linux*) : + gcc-*,powerpc-*-linux*) : oc_ldflags="-mbss-plt" ;; #( *) : ;; esac - ## Program to use to install files -# Find a good install program. We prefer a C program (faster), + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -13306,20 +14497,25 @@ esac # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -13329,13 +14525,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -13343,12 +14539,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -13364,7 +14560,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -13374,8 +14570,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -13389,115 +14585,157 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Checks for libraries ## Mathematical library -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 -$as_echo_n "checking for cos in -lm... " >&6; } -if ${ac_cv_lib_m_cos+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing cos" >&5 +printf %s "checking for library containing cos... " >&6; } +if test ${ac_cv_search_cos+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char cos (); int -main () +main (void) { return cos (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_m_cos=yes -else - ac_cv_lib_m_cos=no +for ac_lib in '' m +do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO" +then : + ac_cv_search_cos=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext + if test ${ac_cv_search_cos+y} +then : + break fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 -$as_echo "$ac_cv_lib_m_cos" >&6; } -if test "x$ac_cv_lib_m_cos" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" +done +if test ${ac_cv_search_cos+y} +then : +else $as_nop + ac_cv_search_cos=no fi - - -if test "x$ac_cv_lib_m_cos" = xyes ; then : - mathlib="-lm" -else - mathlib="" +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cos" >&5 +printf "%s\n" "$ac_cv_search_cos" >&6; } +ac_res=$ac_cv_search_cos +if test "$ac_res" != no +then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + case $ac_cv_search_cos in #( + no) : + as_fn_error $? "Could not locate C math functions" "$LINENO" 5 ;; #( + 'none required') : + mathlib="" ;; #( + *) : + mathlib="$ac_cv_search_cos" ;; +esac fi + # Checks for header files -ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" -if test "x$ac_cv_header_math_h" = xyes; then : +# Don't check for unistd.h on Windows +case $host in #( + *-*-mingw32*|*-pc-windows) : + ;; #( + *) : + for ac_header in unistd.h +do : + ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + printf "%s\n" "#define HAS_UNISTD 1" >>confdefs.h fi +done ;; +esac -for ac_header in unistd.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" -if test "x$ac_cv_header_unistd_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_UNISTD_H 1 -_ACEOF - $as_echo "#define HAS_UNISTD 1" >>confdefs.h +ac_fn_c_check_header_compile "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" +if test "x$ac_cv_header_math_h" = xyes +then : fi -done - -ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = xyes; then : - $as_echo "#define HAS_STDINT_H 1" >>confdefs.h +ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes +then : + printf "%s\n" "#define HAS_STDINT_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "pthread_np.h" "ac_cv_header_pthread_np_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_np_h" = xyes +then : + printf "%s\n" "#define HAS_PTHREAD_NP_H 1" >>confdefs.h + +fi ac_fn_c_check_header_compile "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "#include " -if test "x$ac_cv_header_dirent_h" = xyes; then : - $as_echo "#define HAS_DIRENT 1" >>confdefs.h +if test "x$ac_cv_header_dirent_h" = xyes +then : + printf "%s\n" "#define HAS_DIRENT 1" >>confdefs.h fi - ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "#include " -if test "x$ac_cv_header_sys_select_h" = xyes; then : - $as_echo "#define HAS_SYS_SELECT_H 1" >>confdefs.h +if test "x$ac_cv_header_sys_select_h" = xyes +then : + printf "%s\n" "#define HAS_SYS_SELECT_H 1" >>confdefs.h + +fi + + +ac_fn_c_check_header_compile "$LINENO" "stdatomic.h" "ac_cv_header_stdatomic_h" "$ac_includes_default" +if test "x$ac_cv_header_stdatomic_h" = xyes +then : + printf "%s\n" "#define HAS_STDATOMIC_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes +then : + printf "%s\n" "#define HAS_SYS_MMAN_H 1" >>confdefs.h + +fi + # Checks for types ## off_t ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" -if test "x$ac_cv_type_off_t" = xyes; then : +if test "x$ac_cv_type_off_t" = xyes +then : -else +else $as_nop -cat >>confdefs.h <<_ACEOF -#define off_t long int -_ACEOF +printf "%s\n" "#define off_t long int" >>confdefs.h fi @@ -13510,17 +14748,19 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if ${ac_cv_sizeof_int+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +printf %s "checking size of int... " >&6; } +if test ${ac_cv_sizeof_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else @@ -13529,31 +14769,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +printf "%s\n" "$ac_cv_sizeof_int" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF +printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if ${ac_cv_sizeof_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +printf %s "checking size of long... " >&6; } +if test ${ac_cv_sizeof_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else @@ -13562,31 +14802,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +printf "%s\n" "$ac_cv_sizeof_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long *" >&5 -$as_echo_n "checking size of long *... " >&6; } -if ${ac_cv_sizeof_long_p+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long *))" "ac_cv_sizeof_long_p" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long *" >&5 +printf %s "checking size of long *... " >&6; } +if test ${ac_cv_sizeof_long_p+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long *))" "ac_cv_sizeof_long_p" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_long_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long *) See \`config.log' for more details" "$LINENO" 5; } else @@ -13595,31 +14835,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_p" >&5 -$as_echo "$ac_cv_sizeof_long_p" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_p" >&5 +printf "%s\n" "$ac_cv_sizeof_long_p" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_P $ac_cv_sizeof_long_p -_ACEOF +printf "%s\n" "#define SIZEOF_LONG_P $ac_cv_sizeof_long_p" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 -$as_echo_n "checking size of short... " >&6; } -if ${ac_cv_sizeof_short+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +printf %s "checking size of short... " >&6; } +if test ${ac_cv_sizeof_short+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_short" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else @@ -13628,31 +14868,31 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 -$as_echo "$ac_cv_sizeof_short" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +printf "%s\n" "$ac_cv_sizeof_short" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short -_ACEOF +printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if ${ac_cv_sizeof_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +printf %s "checking size of long long... " >&6; } +if test ${ac_cv_sizeof_long_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else @@ -13661,57 +14901,56 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +printf "%s\n" "$ac_cv_sizeof_long_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h -if test "x$ac_cv_sizeof_long_p" = "x4" ; then : +if test "x$ac_cv_sizeof_long_p" = "x4" +then : bits=32; arch64=false -elif test "x$ac_cv_sizeof_long_p" = "x8" ; then : +elif test "x$ac_cv_sizeof_long_p" = "x8" +then : bits=64; arch64=true - $as_echo "#define ARCH_SIXTYFOUR 1" >>confdefs.h + printf "%s\n" "#define ARCH_SIXTYFOUR 1" >>confdefs.h -else +else $as_nop as_fn_error $? "Neither 32 nor 64 bits architecture." "$LINENO" 5 fi if test "x$ac_cv_sizeof_int" != "x4" && test "x$ac_cv_sizeof_long" != "x4" \ - && test "x$ac_cv_sizeof_short" != "x4"; then : + && test "x$ac_cv_sizeof_short" != "x4" +then : as_fn_error $? "Sorry, we can't find a 32-bit integer type." "$LINENO" 5 fi if test "x$ac_cv_sizeof_long" != "x8" && - test "x$ac_cv_sizeof_long_long" != "x8"; then : + test "x$ac_cv_sizeof_long_long" != "x8" +then : as_fn_error $? "Sorry, we can't find a 64-bit integer type." "$LINENO" 5 fi -cat >>confdefs.h <<_ACEOF -#define SIZEOF_PTR $ac_cv_sizeof_long_p -_ACEOF +printf "%s\n" "#define SIZEOF_PTR $ac_cv_sizeof_long_p" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONGLONG $ac_cv_sizeof_long_long -_ACEOF +printf "%s\n" "#define SIZEOF_LONGLONG $ac_cv_sizeof_long_long" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: Target is a $bits bits architecture" >&5 -$as_echo "$as_me: Target is a $bits bits architecture" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Target is a $bits bits architecture" >&5 +printf "%s\n" "$as_me: Target is a $bits bits architecture" >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -$as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if ${ac_cv_c_bigendian+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +printf %s "checking whether byte ordering is bigendian... " >&6; } +if test ${ac_cv_c_bigendian+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13722,7 +14961,8 @@ else typedef int dummy; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. @@ -13746,7 +14986,7 @@ if ac_fn_c_try_compile "$LINENO"; then : fi done fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13755,7 +14995,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ @@ -13767,7 +15007,8 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -13775,7 +15016,7 @@ if ac_fn_c_try_compile "$LINENO"; then : #include int -main () +main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -13785,14 +15026,15 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). @@ -13801,7 +15043,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #include int -main () +main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros @@ -13811,14 +15053,15 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #ifndef _BIG_ENDIAN not big endian @@ -13828,31 +15071,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_bigendian=yes -else +else $as_nop ac_cv_c_bigendian=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = +unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - short int ascii_ii[] = + unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } - short int ebcdic_ii[] = + unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - short int ebcdic_mm[] = + unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; @@ -13860,14 +15105,15 @@ short int ascii_mm[] = extern int foo; int -main () +main (void) { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi @@ -13880,13 +15126,13 @@ if ac_fn_c_try_compile "$LINENO"; then : fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { /* Are we little or big endian? From Harbison&Steele. */ @@ -13902,9 +15148,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_c_bigendian=no -else +else $as_nop ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -13913,12 +15160,12 @@ fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -$as_echo "$ac_cv_c_bigendian" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) - $as_echo "#define ARCH_BIG_ENDIAN 1" >>confdefs.h + printf "%s\n" "#define ARCH_BIG_ENDIAN 1" >>confdefs.h endianness="be" ;; #( @@ -13935,21 +15182,20 @@ $as_echo "$ac_cv_c_bigendian" >&6; } # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of double" >&5 -$as_echo_n "checking alignment of double... " >&6; } -if ${ac_cv_alignof_double+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of double" >&5 +printf %s "checking alignment of double... " >&6; } +if test ${ac_cv_alignof_double+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_double" "$ac_includes_default -#ifndef offsetof -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) -#endif -typedef struct { char x; double y; } ac__type_alignof_;"; then : +typedef struct { char x; double y; } ac__type_alignof_;" +then : -else +else $as_nop if test "$ac_cv_type_double" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of double See \`config.log' for more details" "$LINENO" 5; } else @@ -13958,33 +15204,30 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_double" >&5 -$as_echo "$ac_cv_alignof_double" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_double" >&5 +printf "%s\n" "$ac_cv_alignof_double" >&6; } -cat >>confdefs.h <<_ACEOF -#define ALIGNOF_DOUBLE $ac_cv_alignof_double -_ACEOF +printf "%s\n" "#define ALIGNOF_DOUBLE $ac_cv_alignof_double" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 -$as_echo_n "checking alignment of long... " >&6; } -if ${ac_cv_alignof_long+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of long" >&5 +printf %s "checking alignment of long... " >&6; } +if test ${ac_cv_alignof_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_long" "$ac_includes_default -#ifndef offsetof -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) -#endif -typedef struct { char x; long y; } ac__type_alignof_;"; then : +typedef struct { char x; long y; } ac__type_alignof_;" +then : -else +else $as_nop if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of long See \`config.log' for more details" "$LINENO" 5; } else @@ -13993,33 +15236,30 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 -$as_echo "$ac_cv_alignof_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long" >&5 +printf "%s\n" "$ac_cv_alignof_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define ALIGNOF_LONG $ac_cv_alignof_long -_ACEOF +printf "%s\n" "#define ALIGNOF_LONG $ac_cv_alignof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of long long" >&5 -$as_echo_n "checking alignment of long long... " >&6; } -if ${ac_cv_alignof_long_long+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of long long" >&5 +printf %s "checking alignment of long long... " >&6; } +if test ${ac_cv_alignof_long_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_long_long" "$ac_includes_default -#ifndef offsetof -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) -#endif -typedef struct { char x; long long y; } ac__type_alignof_;"; then : +typedef struct { char x; long long y; } ac__type_alignof_;" +then : -else +else $as_nop if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of long long See \`config.log' for more details" "$LINENO" 5; } else @@ -14028,34 +15268,36 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long_long" >&5 -$as_echo "$ac_cv_alignof_long_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_long_long" >&5 +printf "%s\n" "$ac_cv_alignof_long_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define ALIGNOF_LONG_LONG $ac_cv_alignof_long_long -_ACEOF +printf "%s\n" "#define ALIGNOF_LONG_LONG $ac_cv_alignof_long_long" >>confdefs.h -if ! $arch64; then : +if ! $arch64 +then : case $target_cpu in #( i686) : ;; #( *) : - if test "$ac_cv_alignof_double" -gt 4; then : - $as_echo "#define ARCH_ALIGN_DOUBLE 1" >>confdefs.h + if test "$ac_cv_alignof_double" -gt 4 +then : + printf "%s\n" "#define ARCH_ALIGN_DOUBLE 1" >>confdefs.h fi if test "x$ac_cv_sizeof_long" = "x8" && - test "$ac_cv_alignof_long" -gt 4; then : - $as_echo "#define ARCH_ALIGN_INT64 1" >>confdefs.h + test "$ac_cv_alignof_long" -gt 4 +then : + printf "%s\n" "#define ARCH_ALIGN_INT64 1" >>confdefs.h -else +else $as_nop if test "x$ac_cv_sizeof_long_long" = "x8" && - test "$ac_cv_alignof_long_long" -gt 4; then : - $as_echo "#define ARCH_ALIGN_INT64 1" >>confdefs.h + test "$ac_cv_alignof_long_long" -gt 4 +then : + printf "%s\n" "#define ARCH_ALIGN_INT64 1" >>confdefs.h fi fi @@ -14063,61 +15305,133 @@ fi esac fi +# Atomics library + +if ! $arch64 +then : + case $ocaml_cc_vendor in #( + gcc-*) : + cclibs="$cclibs -latomic" ;; #( + *) : + ;; +esac +fi + +# Support for C11 atomic types + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports _Atomic types" >&5 +printf %s "checking whether the C compiler supports _Atomic types... " >&6; } + saved_LIBS="$LIBS" + LIBS="$LIBS $cclibs" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + int main(void) + { + _Atomic int64_t n; + int m; + int * _Atomic p = &m; + atomic_store_explicit(&n, 123, memory_order_release); + * atomic_exchange(&p, 0) = 45; + return atomic_load_explicit(&n, memory_order_acquire); + } + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + cc_supports_atomic=true + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + cc_supports_atomic=false + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$saved_LIBS" + +if ! $cc_supports_atomic +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C11 atomic support is required, use another C compiler +See \`config.log' for more details" "$LINENO" 5; } +fi + +# Full support for thread local storage +# macOS and MinGW-w64 have problems with thread local storage accessed from DLLs + +case $host in #( + *-apple-darwin*|*-mingw32*) : + ;; #( + *) : + printf "%s\n" "#define HAS_FULL_THREAD_VARIABLES 1" >>confdefs.h + + ;; +esac + # Shared library support sharedlib_cflags='' -mksharedlib='shared-libs-not-available' +mkdll='shared-libs-not-available' +mkdll_exp='shared-libs-not-available' rpath='' mksharedlibrpath='' natdynlinkopts="" -if test x"$enable_shared" != "xno"; then : +if test x"$enable_shared" != "xno" +then : + mkdll='' case $host in #( - *-apple-darwin*) : - mksharedlib="$CC -shared \ - -flat_namespace -undefined suppress -Wl,-no_compact_unwind \ - \$(LDFLAGS)" + x86_64-apple-darwin*) : + mkdll_flags=\ +'-shared -undefined dynamic_lookup -Wl,-no_compact_unwind -Wl,-w' supports_shared_libraries=true ;; #( - *-*-mingw32) : - mksharedlib='$(FLEXLINK)' - mkmaindll='$(FLEXLINK) -maindll' - if test -n "$oc_dll_ldflags"; then : - - mksharedlib="$mksharedlib -link \"$oc_dll_ldflags\"" - mkmaindll="$mkmaindll -link \"$oc_dll_ldflags\"" -fi ;; #( - *-pc-windows) : - mksharedlib='$(FLEXLINK)' - mkmaindll='$(FLEXLINK) -maindll' ;; #( - *-*-cygwin*) : - mksharedlib='$(FLEXLINK)' - mkmaindll='$(FLEXLINK) -maindll' ;; #( + aarch64-apple-darwin*|arm64-apple-darwin*) : + mkdll_flags='-shared -undefined dynamic_lookup -Wl,-w' + supports_shared_libraries=true ;; #( + *-*-mingw32*|*-pc-windows|*-*-cygwin*) : + mkdll_flags="-chain ${flexdll_chain} ${flexlink_flags}" + mkdll_exp="flexlink ${mkdll_flags}" + mkdll="flexlink ${mkdll_flags}" + mkmaindll_exp="flexlink -maindll ${mkdll_flags}" + mkmaindll="flexlink -maindll ${mkdll_flags}" ;; #( powerpc-ibm-aix*) : - case $ocaml_cv_cc_vendor in #( + case $ocaml_cc_vendor in #( xlc*) : - mksharedlib="$CC -qmkshrobj -G \$(LDFLAGS)" - supports_shared_libraries=true ;; #( + mkdll_flags='-qmkshrobj -G' + supports_shared_libraries=true ;; #( *) : ;; esac ;; #( *-*-solaris*) : sharedlib_cflags="-fPIC" - mksharedlib="$CC -shared" + mkdll_flags='-shared' rpath="-Wl,-rpath," mksharedlibrpath="-Wl,-rpath," supports_shared_libraries=true ;; #( *-*-linux*|*-*-freebsd[3-9]*|*-*-freebsd[1-9][0-9]*\ |*-*-openbsd*|*-*-netbsd*|*-*-dragonfly*|*-*-gnu*|*-*-haiku*) : sharedlib_cflags="-fPIC" - case $cc_basename,$host in #( - *gcc*,powerpc-*-linux*) : - mksharedlib="$CC -shared -mbss-plt \$(LDFLAGS)" ;; #( + case $ocaml_cc_vendor,$host in #( + gcc-*,powerpc-*-linux*) : + mkdll_flags='-shared -mbss-plt' ;; #( *,i[3456]86-*) : # Disable DT_TEXTREL warnings on Linux and BSD i386 # See https://github.com/ocaml/ocaml/issues/9800 - mksharedlib="$CC -shared \$(LDFLAGS) -Wl,-z,notext" ;; #( + mkdll_flags='-shared -Wl,-z,notext' ;; #( + *) : + mkdll_flags='-shared' ;; +esac + case $host in #( + *-*-openbsd7.[3-9]|*-*-openbsd[89].*) : + mkdll_flags="${mkdll_flags} -Wl,--no-execute-only" ;; #( *) : - mksharedlib="$CC -shared \$(LDFLAGS)" ;; + ;; esac oc_ldflags="$oc_ldflags -Wl,-E" rpath="-Wl,-rpath," @@ -14125,23 +15439,53 @@ esac natdynlinkopts="-Wl,-E" supports_shared_libraries=true ;; #( *) : - ;; + mkdll='shared-libs-not-available' ;; esac + if test -z "$mkdll" +then : + mkdll="\$(CC) $mkdll_flags" + mkdll_exp="$CC $mkdll_flags" +fi fi -if test -z "$mkmaindll"; then : - mkmaindll=$mksharedlib +if test -z "$mkmaindll" +then : + mkmaindll_exp="$mkdll_exp" + mkmaindll="$mkdll" fi +# Make sure code sections in OCaml-generated executables are readable +# (required for marshaling of function closures) + +case $host in #( + *-*-openbsd7.[3-9]|*-*-openbsd[89].*) : + oc_ldflags="$oc_ldflags -Wl,--no-execute-only" + natdynlinkopts="$natdynlinkopts -Wl,--no-execute-only" ;; #( + *) : + ;; +esac + +# Disable control flow integrity + +case $host in #( + *-*-openbsd7.[4-9]|*-*-openbsd[89].*) : + oc_ldflags="$oc_ldflags -Wl,-z,nobtcfi" + natdynlinkopts="$natdynlinkopts -Wl,-z,nobtcfi" ;; #( + *) : + ;; +esac + + # Configure native dynlink natdynlink=false -if test x"$supports_shared_libraries" = 'xtrue'; then : +if test x"$supports_shared_libraries" = 'xtrue' +then : case "$host" in #( *-*-cygwin*) : natdynlink=true ;; #( - *-*-mingw32) : + *-*-mingw32*) : natdynlink=true ;; #( *-pc-windows) : natdynlink=true ;; #( @@ -14197,6 +15541,8 @@ if test x"$supports_shared_libraries" = 'xtrue'; then : natdynlink=true ;; #( aarch64-*-openbsd*) : natdynlink=true ;; #( + aarch64-*-netbsd*) : + natdynlink=true ;; #( riscv*-*-linux*) : natdynlink=true ;; #( *) : @@ -14214,30 +15560,32 @@ case $enable_native_toplevel,$natdynlink in #( esac # Try to work around the Skylake/Kaby Lake processor bug. -case "$cc_basename,$host" in #( +case "$ocaml_cc_vendor,$host" in #( *gcc*,x86_64-*|*gcc*,i686-*) : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fno-tree-vrp" >&5 -$as_echo_n "checking whether the C compiler supports -fno-tree-vrp... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fno-tree-vrp" >&5 +printf %s "checking whether the C compiler supports -fno-tree-vrp... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-Werror -fno-tree-vrp $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cc_has_fno_tree_vrp=true - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop cc_has_fno_tree_vrp=false - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$saved_CFLAGS" - if $cc_has_fno_tree_vrp; then : + if $cc_has_fno_tree_vrp +then : internal_cflags="$internal_cflags -fno-tree-vrp" fi ;; #( *) : @@ -14245,27 +15593,28 @@ fi ;; #( esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((aligned(n)))" >&5 -$as_echo_n "checking whether the C compiler supports __attribute__((aligned(n)))... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((aligned(n)))" >&5 +printf %s "checking whether the C compiler supports __attribute__((aligned(n)))... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef struct {__attribute__((aligned(8))) int t;} t; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - $as_echo "#define SUPPORTS_ALIGNED_ATTRIBUTE 1" >>confdefs.h +if ac_fn_c_try_compile "$LINENO" +then : + printf "%s\n" "#define SUPPORTS_ALIGNED_ATTRIBUTE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ## Check whether __attribute__((optimize("tree-vectorize")))) is supported - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))" >&5 -$as_echo_n "checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))" >&5 +printf %s "checking whether the C compiler supports __attribute__((optimize(\"tree-vectorize\")))... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-Werror $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14275,16 +15624,17 @@ $as_echo_n "checking whether the C compiler supports __attribute__((optimize(\"t int main() { f(); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - $as_echo "#define SUPPORTS_TREE_VECTORIZE 1" >>confdefs.h +if ac_fn_c_try_compile "$LINENO" +then : + printf "%s\n" "#define SUPPORTS_TREE_VECTORIZE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$saved_CFLAGS" @@ -14294,48 +15644,52 @@ arch=none model=default system=unknown +# In all the cases below, if $arch is set so then so too must $system, +# preserving $arch = 'none' <=> $system = 'unknown' +has_native_backend=no +native_ldflags="" case $host in #( i[3456]86-*-linux*) : - arch=i386; system=linux_elf ;; #( - i[3456]86-*-*bsd*) : - arch=i386; system=bsd_elf ;; #( + arch=i386; system=linux ;; #( + i[3456]86-*-freebsd*) : + arch=i386; system=freebsd ;; #( + i[3456]86-*-netbsd*) : + arch=i386; system=netbsd ;; #( + i[3456]86-*-openbsd*) : + arch=i386; system=openbsd ;; #( i[3456]86-*-haiku*) : arch=i386; system=beos ;; #( i[3456]86-*-cygwin) : arch=i386; system=cygwin ;; #( i[3456]86-*-gnu*) : arch=i386; system=gnu ;; #( - i[3456]86-*-mingw32) : + i[3456]86-*-mingw32*) : arch=i386; system=mingw ;; #( i686-pc-windows) : arch=i386; system=win32 ;; #( x86_64-pc-windows) : arch=amd64; system=win64 ;; #( powerpc64le*-*-linux*) : - arch=power; model=ppc64le; system=elf ;; #( - powerpc*-*-linux*) : - arch=power; if $arch64; then : - model=ppc64 -else - model=ppc -fi; system=elf ;; #( + has_native_backend=yes; arch=power; model=ppc64le; system=linux ;; #( + powerpc64*-*-linux-musl*) : + has_native_backend=yes; arch=power; model=ppc64; system=linux ;; #( s390x*-*-linux*) : - arch=s390x; model=z10; system=elf ;; #( + has_native_backend=yes; arch=s390x; model=z10; system=linux ;; #( # expected to match "gnueabihf" as well as "musleabihf" armv6*-*-linux-*eabihf) : - arch=arm; model=armv6; system=linux_eabihf ;; #( + arch=arm; model=armv6; system=linux ;; #( armv7*-*-linux-*eabihf) : - arch=arm; model=armv7; system=linux_eabihf ;; #( + arch=arm; model=armv7; system=linux ;; #( armv8*-*-linux-*eabihf) : - arch=arm; model=armv8; system=linux_eabihf ;; #( + arch=arm; model=armv8; system=linux ;; #( armv8*-*-linux-*eabi) : - arch=arm; model=armv8; system=linux_eabi ;; #( + arch=arm; model=armv8; system=linux ;; #( armv7*-*-linux-*eabi) : - arch=arm; model=armv7; system=linux_eabi ;; #( + arch=arm; model=armv7; system=linux ;; #( armv6t2*-*-linux-*eabi) : - arch=arm; model=armv6t2; system=linux_eabi ;; #( + arch=arm; model=armv6t2; system=linux ;; #( armv6*-*-linux-*eabi) : - arch=arm; model=armv6; system=linux_eabi ;; #( + arch=arm; model=armv6; system=linux ;; #( armv6*-*-freebsd*) : arch=arm; model=armv6; system=freebsd ;; #( earmv6*-*-netbsd*) : @@ -14343,87 +15697,132 @@ fi; system=elf ;; #( earmv7*-*-netbsd*) : arch=arm; model=armv7; system=netbsd ;; #( armv5te*-*-linux-*eabi) : - arch=arm; model=armv5te; system=linux_eabi ;; #( + arch=arm; model=armv5te; system=linux ;; #( armv5*-*-linux-*eabi) : - arch=arm; model=armv5; system=linux_eabi ;; #( + arch=arm; model=armv5; system=linux ;; #( arm*-*-linux-*eabihf) : - arch=arm; system=linux_eabihf ;; #( + arch=arm; system=linux ;; #( arm*-*-linux-*eabi) : - arch=arm; system=linux_eabi ;; #( + arch=arm; system=linux ;; #( arm*-*-openbsd*) : - arch=arm; system=bsd ;; #( + arch=arm; system=openbsd ;; #( zaurus*-*-openbsd*) : - arch=arm; system=bsd ;; #( + arch=arm; system=openbsd ;; #( x86_64-*-linux*) : - arch=amd64; system=linux ;; #( + has_native_backend=yes; arch=amd64; system=linux ;; #( x86_64-*-gnu*) : arch=amd64; system=gnu ;; #( x86_64-*-dragonfly*) : arch=amd64; system=dragonfly ;; #( x86_64-*-solaris*) : - arch=amd64; system=solaris ;; #( + has_native_backend=yes; arch=amd64; system=solaris ;; #( x86_64-*-freebsd*) : - arch=amd64; system=freebsd ;; #( + has_native_backend=yes; arch=amd64; system=freebsd ;; #( x86_64-*-netbsd*) : - arch=amd64; system=netbsd ;; #( + has_native_backend=yes; arch=amd64; system=netbsd ;; #( x86_64-*-openbsd*) : - arch=amd64; system=openbsd ;; #( + has_native_backend=yes; arch=amd64; system=openbsd ;; #( x86_64-*-haiku*) : arch=amd64; system=beos ;; #( arm64-*-darwin*) : - arch=arm64; system=macosx ;; #( + has_native_backend=yes; arch=arm64; system=macosx ;; #( aarch64-*-darwin*) : - arch=arm64; system=macosx ;; #( + has_native_backend=yes; arch=arm64; system=macosx ;; #( x86_64-*-darwin*) : - arch=amd64; system=macosx ;; #( - x86_64-*-mingw32) : - arch=amd64; system=mingw64 ;; #( + has_native_backend=yes; arch=amd64; system=macosx ;; #( + x86_64-*-mingw32*) : + has_native_backend=yes; arch=amd64; system=mingw64 ;; #( aarch64-*-linux*) : - arch=arm64; system=linux ;; #( + if $arch64 +then : + has_native_backend=yes; arch=arm64; system=linux +else $as_nop + arch=arm; model=armv8; system=linux +fi ;; #( aarch64-*-freebsd*) : - arch=arm64; system=freebsd ;; #( + has_native_backend=yes; arch=arm64; system=freebsd ;; #( aarch64-*-openbsd*) : - arch=arm64; system=openbsd ;; #( + has_native_backend=yes; arch=arm64; system=openbsd ;; #( + aarch64-*-netbsd*) : + has_native_backend=yes; arch=arm64; system=netbsd ;; #( x86_64-*-cygwin*) : - arch=amd64; system=cygwin ;; #( + has_native_backend=yes; arch=amd64; system=cygwin ;; #( riscv64-*-linux*) : - arch=riscv; model=riscv64; system=linux + has_native_backend=yes; arch=riscv; model=riscv64; system=linux ;; #( *) : - ;; + ;; +esac + +case $arch in #( + amd64) : + arch_specific_SOURCES='$(intel_SOURCES)' ;; #( + *) : + arch_specific_SOURCES='' ;; +esac + +native_cflags='' +native_cppflags="-DTARGET_${arch} -DMODEL_${model} -DSYS_${system}" + +case $ccomptype in #( + msvc) : + runtime_asm_objects=${arch}nt.${OBJEXT} ;; #( + *) : + runtime_asm_objects=${arch}.${OBJEXT} ;; +esac + +case $enable_native_compiler,$has_native_backend in #( + no,*) : + native_compiler=false + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the native compiler is disabled" >&5 +printf "%s\n" "$as_me: the native compiler is disabled" >&6;} ;; #( + yes,no) : + as_fn_error 69 "the native compiler is not supported on this platform" "$LINENO" 5 ;; #( + *,no) : + native_compiler=false + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the native compiler is not supported on this platform" >&5 +printf "%s\n" "$as_me: the native compiler is not supported on this platform" >&6;} ;; #( + *) : + native_compiler=true ;; esac -if test x"$enable_native_compiler" = "xno"; then : - native_compiler=false - { $as_echo "$as_me:${as_lineno-$LINENO}: the native compiler is disabled" >&5 -$as_echo "$as_me: the native compiler is disabled" >&6;} -else - native_compiler=true +if $native_compiler +then : + default_build_target=world.opt +else $as_nop + default_build_target=world fi -if ! $native_compiler; then : +if ! $native_compiler +then : natdynlink=false fi -if $natdynlink; then : +if $natdynlink +then : cmxs="cmxs" -else +else $as_nop cmxs="cmx" fi +if $natdynlink +then : + natdynlink_archive="dynlink.cmxa" +else $as_nop + natdynlink_archive="" +fi -cat >>confdefs.h <<_ACEOF -#define OCAML_OS_TYPE "$ostype" -_ACEOF +printf "%s\n" "#define OCAML_OS_TYPE \"$ostype\"" >>confdefs.h if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. set dummy ${ac_tool_prefix}ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DIRECT_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DIRECT_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DIRECT_LD"; then ac_cv_prog_DIRECT_LD="$DIRECT_LD" # Let the user override the test. else @@ -14431,11 +15830,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DIRECT_LD="${ac_tool_prefix}ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14446,11 +15849,11 @@ fi fi DIRECT_LD=$ac_cv_prog_DIRECT_LD if test -n "$DIRECT_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRECT_LD" >&5 -$as_echo "$DIRECT_LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DIRECT_LD" >&5 +printf "%s\n" "$DIRECT_LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -14459,11 +15862,12 @@ if test -z "$ac_cv_prog_DIRECT_LD"; then ac_ct_DIRECT_LD=$DIRECT_LD # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DIRECT_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DIRECT_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DIRECT_LD"; then ac_cv_prog_ac_ct_DIRECT_LD="$ac_ct_DIRECT_LD" # Let the user override the test. else @@ -14471,11 +15875,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DIRECT_LD="ld" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14486,11 +15894,11 @@ fi fi ac_ct_DIRECT_LD=$ac_cv_prog_ac_ct_DIRECT_LD if test -n "$ac_ct_DIRECT_LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DIRECT_LD" >&5 -$as_echo "$ac_ct_DIRECT_LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DIRECT_LD" >&5 +printf "%s\n" "$ac_ct_DIRECT_LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DIRECT_LD" = x; then @@ -14498,8 +15906,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DIRECT_LD=$ac_ct_DIRECT_LD @@ -14508,42 +15916,47 @@ else DIRECT_LD="$ac_cv_prog_DIRECT_LD" fi -if test -z "$PARTIALLD"; then : - case "$arch,$cc_basename,$system,$model" in #( - amd64,*gcc*,macosx,*) : +if test -z "$PARTIALLD" +then : + case "$host,$ocaml_cc_vendor" in #( + x86_64-*-darwin*,gcc-*) : PACKLD_FLAGS=' -arch x86_64' ;; #( - power,*gcc*,elf,ppc) : - PACKLD_FLAGS=' -m elf32ppclinux' ;; #( - power,*gcc*,elf,ppc64) : - PACKLD_FLAGS=' -m elf64ppc' ;; #( - power,*gcc*,elf,ppc64le) : + powerpc64le*-*-linux*,gcc-*) : PACKLD_FLAGS=' -m elf64lppc' ;; #( + powerpc*-*-linux*,gcc-*) : + if $arch64 +then : + PACKLD_FLAGS=' -m elf64ppc' +else $as_nop + PACKLD_FLAGS=' -m elf32ppclinux' +fi ;; #( *) : PACKLD_FLAGS='' ;; esac # The string for PACKLD must be capable of being concatenated with the # output filename. Don't assume that all C compilers understand GNU -ofoo # form, so ensure that the definition includes a space at the end (which is - # achieved using the $(EMPTY) expansion trick). - if test x"$cc_basename" = "xcl"; then : - # For the Microsoft C compiler there must be no space at the end of the - # string. - PACKLD="link -lib -nologo $machine -out:" -else - PACKLD="$DIRECT_LD -r$PACKLD_FLAGS -o \$(EMPTY)" -fi -else - PACKLD="$PARTIALLD -o \$(EMPTY)" + # achieved using the $(EMPTY) expansion trick in Makefile.config.in). + case "$ocaml_cc_vendor" in #( + msvc-*) : + # For the Microsoft C compiler there must be no space at the end of the + # string. + PACKLD="link -lib -nologo $machine -out:" ;; #( + *) : + PACKLD="$DIRECT_LD -r$PACKLD_FLAGS -o " ;; +esac +else $as_nop + PACKLD="$PARTIALLD -o " fi # Disable PIE at link time when ocamlopt does not produce position-independent # code and the system produces PIE executables by default and demands PIC # object files to do so. -# This issue does not affect amd64 (x86_64) and s390x (Z systems), -# since ocamlopt produces PIC object files by default. -# Currently the problem is known for Alpine Linux on platforms other -# than amd64 and s390x (issue #7562), and probably affects all Linux -# distributions that use the musl standard library and dynamic loader. +# This issue does not affect amd64 (x86_64), aarch64 (arm64) +# and s390x (Z systems), since ocamlopt produces PIC object files by default. +# Currently the problem is known for Alpine Linux on other platforms +# (issue #7562), and probably affects all Linux distributions that use +# the musl standard library and dynamic loader. # Other systems have PIE by default but can cope with non-PIC object files, # e.g. Ubuntu >= 17.10 for i386, which uses the glibc dynamic loader. @@ -14556,7 +15969,7 @@ case $arch in #( # expected to match "*-linux-musl" as well as "*-linux-musleabi*" *-linux-musl*) : # Alpine and other musl-based Linux distributions - common_cflags="-no-pie $common_cflags" ;; #( + common_cflags="-no-pie $common_cflags" ;; #( *) : ;; esac ;; @@ -14564,16 +15977,18 @@ esac # Assembler -if test -n "$target_alias"; then : +if test -n "$target_alias" +then : toolpref="${target_alias}-" as_target="$target" as_cpu="$target_cpu" -else - if test -n "$host_alias"; then : +else $as_nop + if test -n "$host_alias" +then : toolpref="${host_alias}-" as_target="$host" as_cpu="$host_cpu" -else +else $as_nop toolpref="" as_target="$build" as_cpu="$build_cpu" @@ -14593,7 +16008,7 @@ fi default_as="$CC -c" default_aspp="$CC -c" -case $as_target,$ocaml_cv_cc_vendor in #( +case $as_target,$ocaml_cc_vendor in #( *-*-linux*,gcc-*) : case $as_cpu in #( x86_64|arm*|aarch64*|i[3-6]86|riscv*) : @@ -14614,32 +16029,36 @@ esac ;; #( ;; esac -if test "$with_pic"; then : +if test "$with_pic" +then : fpic=true - $as_echo "#define CAML_WITH_FPIC 1" >>confdefs.h + printf "%s\n" "#define CAML_WITH_FPIC 1" >>confdefs.h internal_cflags="$internal_cflags $sharedlib_cflags" default_aspp="$default_aspp $sharedlib_cflags" -else +else $as_nop fpic=false fi -if test -z "$AS"; then : +if test -z "$AS" +then : AS="$default_as" fi -if test -z "$ASPP"; then : +if test -z "$ASPP" +then : ASPP="$default_aspp" fi # Utilities # Extract the first word of "rlwrap", so it can be a program name with args. set dummy rlwrap; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_rlwrap+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_rlwrap+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$rlwrap"; then ac_cv_prog_rlwrap="$rlwrap" # Let the user override the test. else @@ -14647,11 +16066,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_rlwrap="rlwrap" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14662,18 +16085,18 @@ fi fi rlwrap=$ac_cv_prog_rlwrap if test -n "$rlwrap"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rlwrap" >&5 -$as_echo "$rlwrap" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $rlwrap" >&5 +printf "%s\n" "$rlwrap" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi case $rlwrap,$system in #( rlwrap,win*|rlwrap,mingw*) : - { $as_echo "$as_me:${as_lineno-$LINENO}: rlwrap doesn't work with native win32 - disabling" >&5 -$as_echo "$as_me: rlwrap doesn't work with native win32 - disabling" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: rlwrap doesn't work with native win32 - disabling" >&5 +printf "%s\n" "$as_me: rlwrap doesn't work with native win32 - disabling" >&6;} rlwrap='' ;; #( *) : ;; @@ -14683,30 +16106,33 @@ esac ## Check the semantics of signal handlers - { $as_echo "$as_me:${as_lineno-$LINENO}: checking semantics of signal handlers" >&5 -$as_echo "$as_me: checking semantics of signal handlers" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking semantics of signal handlers" >&5 +printf "%s\n" "$as_me: checking semantics of signal handlers" >&6;} ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" -if test "x$ac_cv_func_sigaction" = xyes; then : +if test "x$ac_cv_func_sigaction" = xyes +then : has_sigaction=true -else +else $as_nop has_sigaction=false fi ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" -if test "x$ac_cv_func_sigprocmask" = xyes; then : +if test "x$ac_cv_func_sigprocmask" = xyes +then : has_sigprocmask=true -else +else $as_nop has_sigprocmask=false fi - if $has_sigaction && $has_sigprocmask; then : - $as_echo "#define POSIX_SIGNALS 1" >>confdefs.h + if $has_sigaction && $has_sigprocmask +then : + printf "%s\n" "#define POSIX_SIGNALS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: POSIX signal handling found." >&5 -$as_echo "$as_me: POSIX signal handling found." >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: assuming signals have the System V semantics." >&5 -$as_echo "$as_me: assuming signals have the System V semantics." >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: POSIX signal handling found." >&5 +printf "%s\n" "$as_me: POSIX signal handling found." >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: assuming signals have the System V semantics." >&5 +printf "%s\n" "$as_me: assuming signals have the System V semantics." >&6;} fi @@ -14715,45 +16141,50 @@ fi ## Check for C99 float ops has_c99_float_ops=true -for ac_func in expm1 log1p hypot fma exp2 log2 cbrt acosh asinh atanh erf erfc trunc round copysign + + for ac_func in expm1 log1p hypot fma exp2 log2 cbrt acosh asinh atanh erf erfc trunc round copysign do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else +else $as_nop has_c99_float_ops=false fi -done +done -if $has_c99_float_ops; then : - $as_echo "#define HAS_C99_FLOAT_OPS 1" >>confdefs.h +if $has_c99_float_ops +then : + printf "%s\n" "#define HAS_C99_FLOAT_OPS 1" >>confdefs.h # Check whether round works (known bug in mingw-w64) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether round works" >&5 -$as_echo_n "checking whether round works... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether round works" >&5 +printf %s "checking whether round works... " >&6; } old_cross_compiling="$cross_compiling" - if test "x$host_runnable" = 'xtrue'; then : + if test "x$host_runnable" = 'xtrue' +then : cross_compiling='no' fi - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : case $target in #( - x86_64-w64-mingw32) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 -$as_echo "cross-compiling; assume not" >&6; } ;; #( + x86_64-w64-mingw32*) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 +printf "%s\n" "cross-compiling; assume not" >&6; } ;; #( *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 -$as_echo "cross-compiling; assume yes" >&6; } - $as_echo "#define HAS_WORKING_ROUND 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 +printf "%s\n" "cross-compiling; assume yes" >&6; } + printf "%s\n" "#define HAS_WORKING_ROUND 1" >>confdefs.h ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14764,29 +16195,31 @@ int main (void) { } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define HAS_WORKING_ROUND 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_c_try_run "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + printf "%s\n" "#define HAS_WORKING_ROUND 1" >>confdefs.h + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } case $enable_imprecise_c99_float_ops,$target in #( no,*) : hard_error=true ;; #( yes,*) : hard_error=false ;; #( - *,x86_64-w64-mingw32) : + *,x86_64-w64-mingw32*) : hard_error=false ;; #( *) : hard_error=true ;; esac - if test x"$hard_error" = "xtrue"; then : + if test x"$hard_error" = "xtrue" +then : as_fn_error $? "round does not work, enable emulation with --enable-imprecise-c99-float-ops" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: round does not work; emulation enabled" >&5 -$as_echo "$as_me: WARNING: round does not work; emulation enabled" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: round does not work; emulation enabled" >&5 +printf "%s\n" "$as_me: WARNING: round does not work; emulation enabled" >&2;} fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14799,25 +16232,27 @@ fi # Check whether fma works (regressed in mingw-w64 8.0.0; present, but broken, # in VS2013-2017 and present but unimplemented in Cygwin64) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fma works" >&5 -$as_echo_n "checking whether fma works... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fma works" >&5 +printf %s "checking whether fma works... " >&6; } old_cross_compiling="$cross_compiling" - if test "x$host_runnable" = 'xtrue'; then : + if test "x$host_runnable" = 'xtrue' +then : cross_compiling='no' fi - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : case $target in #( - x86_64-w64-mingw32|x86_64-*-cygwin*) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 -$as_echo "cross-compiling; assume not" >&6; } ;; #( + x86_64-w64-mingw32*|x86_64-*-cygwin*) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume not" >&5 +printf "%s\n" "cross-compiling; assume not" >&6; } ;; #( *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 -$as_echo "cross-compiling; assume yes" >&6; } - $as_echo "#define HAS_WORKING_FMA 1" >>confdefs.h + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cross-compiling; assume yes" >&5 +printf "%s\n" "cross-compiling; assume yes" >&6; } + printf "%s\n" "#define HAS_WORKING_FMA 1" >>confdefs.h ;; esac -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14850,38 +16285,41 @@ int main (void) { } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define HAS_WORKING_FMA 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +if ac_fn_c_try_run "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + printf "%s\n" "#define HAS_WORKING_FMA 1" >>confdefs.h + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } case $enable_imprecise_c99_float_ops,$target in #( no,*) : hard_error=true ;; #( yes,*) : hard_error=false ;; #( - *,x86_64-w64-mingw32|*,x86_64-*-cygwin*) : + *,x86_64-w64-mingw32*|*,x86_64-*-cygwin*) : hard_error=false ;; #( *) : - case $ocaml_cv_cc_vendor in #( + case $ocaml_cc_vendor in #( msvc-*) : - if test "${ocaml_cv_cc_vendor#msvc-}" -lt 1920 ; then : + if test "${ocaml_cc_vendor#msvc-}" -lt 1920 +then : hard_error=false -else +else $as_nop hard_error=true fi ;; #( *) : hard_error=true ;; esac ;; esac - if test x"$hard_error" = "xtrue"; then : + if test x"$hard_error" = "xtrue" +then : as_fn_error $? "fma does not work, enable emulation with --enable-imprecise-c99-float-ops" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fma does not work; emulation enabled" >&5 -$as_echo "$as_me: WARNING: fma does not work; emulation enabled" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: fma does not work; emulation enabled" >&5 +printf "%s\n" "$as_me: WARNING: fma does not work; emulation enabled" >&2;} fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -14891,41 +16329,140 @@ fi cross_compiling="$old_cross_compiling" -else - if test x"$enable_imprecise_c99_float_ops" != "xyes" ; then : - case $enable_imprecise_c99_float_ops,$ocaml_cv_cc_vendor in #( +else $as_nop + if test x"$enable_imprecise_c99_float_ops" != "xyes" +then : + case $enable_imprecise_c99_float_ops,$ocaml_cc_vendor in #( no,*) : hard_error=true ;; #( ,msvc-*) : - if test "${ocaml_cv_cc_vendor#msvc-}" -lt 1800 ; then : + if test "${ocaml_cc_vendor#msvc-}" -lt 1800 +then : hard_error=false -else +else $as_nop hard_error=true fi ;; #( *) : hard_error=true ;; esac - if test x"$hard_error" = 'xtrue'; then : + if test x"$hard_error" = 'xtrue' +then : as_fn_error $? "C99 float ops unavailable, enable replacements with --enable-imprecise-c99-float-ops" "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&5 -$as_echo "$as_me: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&2;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&5 +printf "%s\n" "$as_me: WARNING: C99 float ops unavailable, replacements enabled (ancient Visual Studio)" >&2;} +fi +fi +fi + +## getentropy +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +extern void ac_decl (int, char *); + +int +main (void) +{ +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg +fi + break fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + ac_fn_check_decl "$LINENO" "getentropy" "ac_cv_have_decl_getentropy" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_getentropy" = xyes +then : + printf "%s\n" "#define HAS_GETENTROPY 1" >>confdefs.h + fi fi + ## getrusage ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" -if test "x$ac_cv_func_getrusage" = xyes; then : - $as_echo "#define HAS_GETRUSAGE 1" >>confdefs.h +if test "x$ac_cv_func_getrusage" = xyes +then : + printf "%s\n" "#define HAS_GETRUSAGE 1" >>confdefs.h fi ## times ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = xyes; then : - $as_echo "#define HAS_TIMES 1" >>confdefs.h +if test "x$ac_cv_func_times" = xyes +then : + printf "%s\n" "#define HAS_TIMES 1" >>confdefs.h fi @@ -14936,13 +16473,15 @@ saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS" ac_fn_c_check_func "$LINENO" "secure_getenv" "ac_cv_func_secure_getenv" -if test "x$ac_cv_func_secure_getenv" = xyes; then : - $as_echo "#define HAS_SECURE_GETENV 1" >>confdefs.h +if test "x$ac_cv_func_secure_getenv" = xyes +then : + printf "%s\n" "#define HAS_SECURE_GETENV 1" >>confdefs.h -else +else $as_nop ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" -if test "x$ac_cv_func___secure_getenv" = xyes; then : - $as_echo "#define HAS___SECURE_GETENV 1" >>confdefs.h +if test "x$ac_cv_func___secure_getenv" = xyes +then : + printf "%s\n" "#define HAS___SECURE_GETENV 1" >>confdefs.h fi @@ -14954,8 +16493,9 @@ CPPFLAGS="$saved_CPPFLAGS" ## issetugid ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" -if test "x$ac_cv_func_issetugid" = xyes; then : - $as_echo "#define HAS_ISSETUGID 1" >>confdefs.h +if test "x$ac_cv_func_issetugid" = xyes +then : + printf "%s\n" "#define HAS_ISSETUGID 1" >>confdefs.h fi @@ -14972,24 +16512,23 @@ case $host in #( has_monotonic_clock=true ;; #( *-apple-darwin*) : - for ac_func in mach_timebase_info mach_absolute_time + + for ac_func in clock_gettime_nsec_np do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "clock_gettime_nsec_np" "ac_cv_func_clock_gettime_nsec_np" +if test "x$ac_cv_func_clock_gettime_nsec_np" = xyes +then : + printf "%s\n" "#define HAVE_CLOCK_GETTIME_NSEC_NP 1" >>confdefs.h has_monotonic_clock=true - $as_echo "#define HAS_MACH_ABSOLUTE_TIME 1" >>confdefs.h + printf "%s\n" "#define HAS_CLOCK_GETTIME_NSEC_NP 1" >>confdefs.h -else +else $as_nop has_monotonic_clock=false fi -done - ;; #( + +done ;; #( *) : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15006,16 +16545,17 @@ done } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : has_monotonic_clock=true - $as_echo "#define HAS_POSIX_MONOTONIC_CLOCK 1" >>confdefs.h + printf "%s\n" "#define HAS_POSIX_MONOTONIC_CLOCK 1" >>confdefs.h -else +else $as_nop has_monotonic_clock=false fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac @@ -15024,7 +16564,8 @@ esac # if the proper clock source is found. # If asked via --enable-instrumented-runtime, configuration fails if the proper # clock source is missing. -if test "x$enable_instrumented_runtime" != "xno" ; then : +if test "x$enable_instrumented_runtime" != "xno" +then : case $host in #( sparc-sun-solaris*) : @@ -15037,10 +16578,7 @@ if test "x$enable_instrumented_runtime" != "xno" ; then : *,true) : instrumented_runtime=true ;; #( yes,false) : - - as_fn_error $? "Instrumented runtime support requested \ -but no proper monotonic clock source was found." "$LINENO" 5 - ;; #( + as_fn_error $? "Instrumented runtime support requested but no proper monotonic clock source was found." "$LINENO" 5 ;; #( auto,false) : instrumented_runtime=false ;; #( @@ -15048,11 +16586,12 @@ but no proper monotonic clock source was found." "$LINENO" 5 ;; esac ;; #( *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 -$as_echo_n "checking for library containing clock_gettime... " >&6; } -if ${ac_cv_search_clock_gettime+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +printf %s "checking for library containing clock_gettime... " >&6; } +if test ${ac_cv_search_clock_gettime+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15060,49 +16599,51 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char clock_gettime (); int -main () +main (void) { return clock_gettime (); ; return 0; } _ACEOF -for ac_lib in '' rt; do +for ac_lib in '' rt +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_clock_gettime=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_clock_gettime+:} false; then : + if test ${ac_cv_search_clock_gettime+y} +then : break fi done -if ${ac_cv_search_clock_gettime+:} false; then : +if test ${ac_cv_search_clock_gettime+y} +then : -else +else $as_nop ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 -$as_echo "$ac_cv_search_clock_gettime" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" has_clock_gettime=true -else +else $as_nop has_clock_gettime=false fi @@ -15114,30 +16655,295 @@ fi *,true,true) : instrumented_runtime=true - if test "x$ac_cv_search_clock_gettime" = "xnone required"; then : + if test "x$ac_cv_search_clock_gettime" = "xnone required" +then : instrumented_runtime_libs="" -else +else $as_nop instrumented_runtime_libs=$ac_cv_search_clock_gettime fi ;; #( yes,false,*) : - - as_fn_error $? "Instrumented runtime support requested \ -but clock_gettime is missing." "$LINENO" 5 - ;; #( + as_fn_error $? "Instrumented runtime support requested but clock_gettime is missing." "$LINENO" 5 ;; #( yes,*,false) : + as_fn_error $? "Instrumented runtime support requested but no proper monotonic clock source was found." "$LINENO" 5 + ;; #( + *) : + ;; +esac + ;; +esac - as_fn_error $? "Instrumented runtime support requested \ -but no proper monotonic clock source was found." "$LINENO" 5 +fi - ;; #( +# ThreadSanitizer support is currently only available for Linux/FreeBSD/macOS +# on amd64, Linux/macOS on arm64 and Linux on POWER, riscv64 and s390x. +if test "x$enable_tsan" = "xyes" +then : + case "$arch" in #( + amd64) : + case "$system" in #( + freebsd|linux|macosx) : + case "$ocaml_cc_vendor" in #( + gcc-*|clang-*) : + tsan=true ;; #( + *) : + as_fn_error $? "thread sanitizer not supported with vendor=$ocaml_cc_vendor\"" "$LINENO" 5 + ;; +esac ;; #( + *) : + as_fn_error $? "thread sanitizer not supported on system $system" "$LINENO" 5 + ;; +esac ;; #( + arm64) : + case "$system" in #( + linux|macosx) : + case "$ocaml_cc_vendor" in #( + gcc-*|clang-*) : + tsan=true ;; #( + *) : + as_fn_error $? "thread sanitizer not supported with vendor=$ocaml_cc_vendor\"" "$LINENO" 5 + ;; +esac ;; #( + *) : + as_fn_error $? "thread sanitizer not supported on system $system" "$LINENO" 5 + ;; +esac ;; #( + power) : + case "$system" in #( + linux) : + case "$ocaml_cc_vendor" in #( + gcc-*|clang-*) : + tsan=true ;; #( + *) : + as_fn_error $? "thread sanitizer not supported with vendor=$ocaml_cc_vendor\"" "$LINENO" 5 + ;; +esac ;; #( + *) : + as_fn_error $? "thread sanitizer not supported on system $system" "$LINENO" 5 + ;; +esac ;; #( + riscv) : + case "$system" in #( + linux) : + case "$ocaml_cc_vendor" in #( + gcc-*|clang-*) : + tsan=true ;; #( + *) : + as_fn_error $? "thread sanitizer not supported with vendor=$ocaml_cc_vendor\"" "$LINENO" 5 + ;; +esac ;; #( + *) : + as_fn_error $? "thread sanitizer not supported on system $system" "$LINENO" 5 + ;; +esac ;; #( + s390x) : + case "$system" in #( + linux) : + case "$ocaml_cc_vendor" in #( + gcc-*|clang-*) : + tsan=true ;; #( + *) : + as_fn_error $? "thread sanitizer not supported with vendor=$ocaml_cc_vendor\"" "$LINENO" 5 + ;; +esac ;; #( + *) : + as_fn_error $? "thread sanitizer not supported on system $system" "$LINENO" 5 + ;; +esac ;; #( + *) : + as_fn_error $? "thread sanitizer not supported on arch $arch" "$LINENO" 5 + ;; +esac +else $as_nop + tsan=false +fi + +if $tsan +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using thread sanitizer with vendor=$ocaml_cc_vendor" >&5 +printf "%s\n" "$as_me: using thread sanitizer with vendor=$ocaml_cc_vendor" >&6;} + + # Check for libtsan library files (necessary on some Linux distributions) + SAVED_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -fsanitize=thread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +void __tsan_func_entry(void *retaddr); +int +main (void) +{ +__tsan_func_entry((void *)0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + +else $as_nop + as_fn_error $? "libtsan is necessary for TSan but cannot be found. + Try installing it on your system." "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$SAVED_LDFLAGS" + + case $ocaml_cc_vendor in #( + gcc-[0123456789]-*|gcc-10-*|clang-*) : + ;; #( + *) : + oc_tsan_cflags="$oc_tsan_cflags -Wno-tsan" ;; +esac + case $ocaml_cc_vendor in #( + gcc*) : + tsan_distinguish_volatile_cflags="--param=tsan-distinguish-volatile=1" ;; #( + clang*) : + tsan_distinguish_volatile_cflags="-mllvm -tsan-distinguish-volatile" ;; #( *) : ;; esac + as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$warn_error_flag_-fsanitize=thread $tsan_distinguish_volatile_cflags" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fsanitize=thread $tsan_distinguish_volatile_cflags" >&5 +printf %s "checking whether C compiler accepts -fsanitize=thread $tsan_distinguish_volatile_cflags... " >&6; } +if eval test \${$as_CACHEVAR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + ax_check_save_flags=$CFLAGS + CFLAGS="$CFLAGS $warn_error_flag -fsanitize=thread $tsan_distinguish_volatile_cflags" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$as_CACHEVAR=yes" +else $as_nop + eval "$as_CACHEVAR=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CFLAGS=$ax_check_save_flags +fi +eval ac_res=\$$as_CACHEVAR + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_CACHEVAR"\" = x"yes" +then : + : +else $as_nop + as_fn_error $? "The C compiler does not support the \`$tsan_distinguish_volatile_cflags' flag. Try upgrading to GCC >= 11, or to Clang >= 11." "$LINENO" 5 +fi + + oc_tsan_cflags="$oc_tsan_cflags $tsan_distinguish_volatile_cflags" + common_cppflags="$common_cppflags $oc_tsan_cppflags" + native_cflags="$native_cflags $oc_tsan_cflags" + ocamlc_cflags="$ocamlc_cflags $oc_tsan_cflags" + tsan_native_runtime_c_sources="tsan" +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not using thread sanitizer" >&5 +printf "%s\n" "$as_me: not using thread sanitizer" >&6;} + tsan_native_runtime_c_sources="" + +fi + +# libunwind detection when TSan is enabled +libunwind_cppflags="" +libunwind_ldflags="" + +if $tsan +then : + if test "$system" = "macosx" +then : + if test x"$LIBUNWIND_CPPFLAGS" != x -o \ + x"$LIBUNWIND_LDFLAGS" != x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: On MacOSX, specifying paths for libunwind headers or libraries is strongly discouraged. It is recommended to rely on the defaults provided by the configure script" >&5 +printf "%s\n" "$as_me: WARNING: On MacOSX, specifying paths for libunwind headers or libraries is strongly discouraged. It is recommended to rely on the defaults provided by the configure script" >&2;} +fi +fi + + if test x"$LIBUNWIND_CPPFLAGS" != x +then : + libunwind_cppflags="$LIBUNWIND_CPPFLAGS" +else $as_nop + libunwind_cppflags="" +fi + + case "$system" in #( + "freebsd") : + libunwind_ldflags="-lgcc_eh" ;; #( + "macosx") : + libunwind_ldflags="-framework System" ;; #( + *) : + case "$arch" in #( + "amd64") : + libunwind_ldflags="-lunwind -lunwind-x86_64" ;; #( + "arm64") : + libunwind_ldflags="-lunwind -lunwind-aarch64" ;; #( + "power") : + libunwind_ldflags="-lunwind -lunwind-ppc64" ;; #( + "riscv") : + libunwind_ldflags="-lunwind -lunwind-riscv" ;; #( + "s390x") : + libunwind_ldflags="-lunwind -lunwind-s390x" ;; #( + *) : ;; +esac ;; esac + if test x"$LIBUNWIND_LDFLAGS" != x +then : + libunwind_ldflags="$LIBUNWIND_LDFLAGS $libunwind_ldflags" +fi + + native_cppflags="$native_cppflags $libunwind_cppflags" + native_ldflags="$native_ldflags -fsanitize=thread $libunwind_ldflags" + + + SAVED_CPPFLAGS="$CPPFLAGS" + SAVED_LDFLAGS="$LDFLAGS" + CPPFLAGS="$CPPFLAGS $libunwind_cppflags" + LDFLAGS="$LDFLAGS $libunwind_ldflags" + ac_fn_c_check_header_compile "$LINENO" "libunwind.h" "ac_cv_header_libunwind_h" "$ac_includes_default" +if test "x$ac_cv_header_libunwind_h" = xyes +then : + printf "%s\n" "#define HAS_LIBUNWIND 1" >>confdefs.h + + libunwind_available=true +else $as_nop + libunwind_available=false +fi + + LDFLAGS="$SAVED_LDFLAGS" + CPPFLAGS="$SAVED_CPPFLAGS" + + + if ! $libunwind_available +then : + as_fn_error $? "libunwind is necessary for TSan but cannot be found" "$LINENO" 5 +fi + + # We need unwinding information at runtime, but since we use + # -no_compact_unwind, we also need -keep_dwarf_unwind otherwise + # the OS X linker will chuck away the DWARF-like (.eh_frame) + # information. (Older versions of OS X don't provide this.) + + if $libunwind_available && test x"$system" = "xmacosx" +then : + extra_flags="-Wl,-keep_dwarf_unwind" + mkexe="$mkexe $extra_flags" + mksharedlib="$mksharedlib $extra_flags" +fi + fi ## Sockets @@ -15147,13 +16953,14 @@ fi sockets=true case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*) : cclibs="$cclibs -lws2_32" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -$as_echo_n "checking for library containing socket... " >&6; } -if ${ac_cv_search_socket+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +printf %s "checking for library containing socket... " >&6; } +if test ${ac_cv_search_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15161,63 +16968,135 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char socket (); int -main () +main (void) { return socket (); ; return 0; } _ACEOF -for ac_lib in '' ws2_32; do +for ac_lib in '' ws2_32 +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_socket+:} false; then : + if test ${ac_cv_search_socket+y} +then : break fi done -if ${ac_cv_search_socket+:} false; then : +if test ${ac_cv_search_socket+y} +then : -else +else $as_nop + ac_cv_search_socket=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +printf "%s\n" "$ac_cv_search_socket" >&6; } +ac_res=$ac_cv_search_socket +if test "$ac_res" != no +then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + ac_fn_c_check_func "$LINENO" "socketpair" "ac_cv_func_socketpair" +if test "x$ac_cv_func_socketpair" = xyes +then : + printf "%s\n" "#define HAS_SOCKETPAIR 1" >>confdefs.h + +fi + ;; #( + *-pc-windows) : + cclibs="$cclibs ws2_32.lib" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +printf %s "checking for library containing socket... " >&6; } +if test ${ac_cv_search_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char socket (); +int +main (void) +{ +return socket (); + ; + return 0; +} +_ACEOF +for ac_lib in '' ws2_32 +do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO" +then : + ac_cv_search_socket=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext + if test ${ac_cv_search_socket+y} +then : + break +fi +done +if test ${ac_cv_search_socket+y} +then : + +else $as_nop ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -$as_echo "$ac_cv_search_socket" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +printf "%s\n" "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_fn_c_check_func "$LINENO" "socketpair" "ac_cv_func_socketpair" -if test "x$ac_cv_func_socketpair" = xyes; then : - $as_echo "#define HAS_SOCKETPAIR 1" >>confdefs.h +if test "x$ac_cv_func_socketpair" = xyes +then : + printf "%s\n" "#define HAS_SOCKETPAIR 1" >>confdefs.h fi ;; #( *-*-haiku) : cclibs="$cclibs -lnetwork" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -$as_echo_n "checking for library containing socket... " >&6; } -if ${ac_cv_search_socket+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +printf %s "checking for library containing socket... " >&6; } +if test ${ac_cv_search_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15225,57 +17104,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char socket (); int -main () +main (void) { return socket (); ; return 0; } _ACEOF -for ac_lib in '' network; do +for ac_lib in '' network +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_socket+:} false; then : + if test ${ac_cv_search_socket+y} +then : break fi done -if ${ac_cv_search_socket+:} false; then : +if test ${ac_cv_search_socket+y} +then : -else +else $as_nop ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -$as_echo "$ac_cv_search_socket" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +printf "%s\n" "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ;; #( *-*-solaris*) : cclibs="$cclibs -lsocket -lnsl" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -$as_echo_n "checking for library containing socket... " >&6; } -if ${ac_cv_search_socket+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +printf %s "checking for library containing socket... " >&6; } +if test ${ac_cv_search_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15283,55 +17165,58 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char socket (); int -main () +main (void) { return socket (); ; return 0; } _ACEOF -for ac_lib in '' socket; do +for ac_lib in '' socket +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_socket+:} false; then : + if test ${ac_cv_search_socket+y} +then : break fi done -if ${ac_cv_search_socket+:} false; then : +if test ${ac_cv_search_socket+y} +then : -else +else $as_nop ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -$as_echo "$ac_cv_search_socket" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +printf "%s\n" "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5 -$as_echo_n "checking for library containing inet_ntop... " >&6; } -if ${ac_cv_search_inet_ntop+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop" >&5 +printf %s "checking for library containing inet_ntop... " >&6; } +if test ${ac_cv_search_inet_ntop+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15339,99 +17224,107 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char inet_ntop (); int -main () +main (void) { return inet_ntop (); ; return 0; } _ACEOF -for ac_lib in '' nsl; do +for ac_lib in '' nsl +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_inet_ntop=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_inet_ntop+:} false; then : + if test ${ac_cv_search_inet_ntop+y} +then : break fi done -if ${ac_cv_search_inet_ntop+:} false; then : +if test ${ac_cv_search_inet_ntop+y} +then : -else +else $as_nop ac_cv_search_inet_ntop=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5 -$as_echo "$ac_cv_search_inet_ntop" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_ntop" >&5 +printf "%s\n" "$ac_cv_search_inet_ntop" >&6; } ac_res=$ac_cv_search_inet_ntop -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ;; #( *) : - for ac_func in socket socketpair bind listen accept connect + + for ac_func in socket socketpair bind listen accept connect do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else +else $as_nop sockets=false fi -done +done ;; esac -if $sockets; then : - $as_echo "#define HAS_SOCKETS 1" >>confdefs.h +if $sockets +then : + printf "%s\n" "#define HAS_SOCKETS 1" >>confdefs.h fi ## socklen_t case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*|*-pc-windows) : ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include " -if test "x$ac_cv_type_socklen_t" = xyes; then : - $as_echo "#define HAS_SOCKLEN_T 1" >>confdefs.h +if test "x$ac_cv_type_socklen_t" = xyes +then : + printf "%s\n" "#define HAS_SOCKLEN_T 1" >>confdefs.h fi ;; #( *) : ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include " -if test "x$ac_cv_type_socklen_t" = xyes; then : - $as_echo "#define HAS_SOCKLEN_T 1" >>confdefs.h +if test "x$ac_cv_type_socklen_t" = xyes +then : + printf "%s\n" "#define HAS_SOCKLEN_T 1" >>confdefs.h fi ;; esac ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" -if test "x$ac_cv_func_inet_aton" = xyes; then : - $as_echo "#define HAS_INET_ATON 1" >>confdefs.h +if test "x$ac_cv_func_inet_aton" = xyes +then : + printf "%s\n" "#define HAS_INET_ATON 1" >>confdefs.h fi @@ -15439,21 +17332,19 @@ fi ## Unix domain sockets support on Windows case $host in #( - *-*-mingw32|*-pc-windows) : - for ac_header in afunix.h + *-*-mingw32*|*-pc-windows) : + for ac_header in afunix.h do : ac_fn_c_check_header_compile "$LINENO" "afunix.h" "ac_cv_header_afunix_h" "#include " -if test "x$ac_cv_header_afunix_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_AFUNIX_H 1 -_ACEOF - $as_echo "#define HAS_AFUNIX_H 1" >>confdefs.h +if test "x$ac_cv_header_afunix_h" = xyes +then : + printf "%s\n" "#define HAVE_AFUNIX_H 1" >>confdefs.h + printf "%s\n" "#define HAS_AFUNIX_H 1" >>confdefs.h fi -done - ;; #( +done ;; #( *) : ;; esac @@ -15463,12 +17354,13 @@ esac ipv6=true case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*|*-pc-windows) : ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "#include " -if test "x$ac_cv_type_struct_sockaddr_in6" = xyes; then : +if test "x$ac_cv_type_struct_sockaddr_in6" = xyes +then : -else +else $as_nop ipv6=false fi ;; #( @@ -15480,129 +17372,146 @@ fi " -if test "x$ac_cv_type_struct_sockaddr_in6" = xyes; then : +if test "x$ac_cv_type_struct_sockaddr_in6" = xyes +then : -else +else $as_nop ipv6=false fi ;; esac -if $ipv6; then : +if $ipv6 +then : ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" -if test "x$ac_cv_func_getaddrinfo" = xyes; then : +if test "x$ac_cv_func_getaddrinfo" = xyes +then : -else +else $as_nop ipv6=false fi fi -if $ipv6; then : +if $ipv6 +then : ac_fn_c_check_func "$LINENO" "getnameinfo" "ac_cv_func_getnameinfo" -if test "x$ac_cv_func_getnameinfo" = xyes; then : +if test "x$ac_cv_func_getnameinfo" = xyes +then : -else +else $as_nop ipv6=false fi fi -if $ipv6; then : +if $ipv6 +then : ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" -if test "x$ac_cv_func_inet_pton" = xyes; then : +if test "x$ac_cv_func_inet_pton" = xyes +then : -else +else $as_nop ipv6=false fi fi -if $ipv6; then : +if $ipv6 +then : ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" -if test "x$ac_cv_func_inet_ntop" = xyes; then : - $as_echo "#define HAS_IPV6 1" >>confdefs.h +if test "x$ac_cv_func_inet_ntop" = xyes +then : + printf "%s\n" "#define HAS_IPV6 1" >>confdefs.h fi fi ac_fn_c_check_func "$LINENO" "rewinddir" "ac_cv_func_rewinddir" -if test "x$ac_cv_func_rewinddir" = xyes; then : - $as_echo "#define HAS_REWINDDIR 1" >>confdefs.h +if test "x$ac_cv_func_rewinddir" = xyes +then : + printf "%s\n" "#define HAS_REWINDDIR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "lockf" "ac_cv_func_lockf" -if test "x$ac_cv_func_lockf" = xyes; then : - $as_echo "#define HAS_LOCKF 1" >>confdefs.h +if test "x$ac_cv_func_lockf" = xyes +then : + printf "%s\n" "#define HAS_LOCKF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo" -if test "x$ac_cv_func_mkfifo" = xyes; then : - $as_echo "#define HAS_MKFIFO 1" >>confdefs.h +if test "x$ac_cv_func_mkfifo" = xyes +then : + printf "%s\n" "#define HAS_MKFIFO 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" -if test "x$ac_cv_func_getcwd" = xyes; then : - $as_echo "#define HAS_GETCWD 1" >>confdefs.h +if test "x$ac_cv_func_getcwd" = xyes +then : + printf "%s\n" "#define HAS_GETCWD 1" >>confdefs.h fi -ac_fn_c_check_decl "$LINENO" "system" "ac_cv_have_decl_system" "#include -" -if test "x$ac_cv_have_decl_system" = xyes; then : - $as_echo "#define HAS_SYSTEM 1" >>confdefs.h +ac_fn_check_decl "$LINENO" "system" "ac_cv_have_decl_system" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_system" = xyes +then : + printf "%s\n" "#define HAS_SYSTEM 1" >>confdefs.h fi - ## utime ## Note: this was defined in config/s-nt.h but the autoconf macros do not # seem to detect it properly on Windows so we hardcode the definition # of HAS_UTIME on Windows but this will probably need to be clarified case $host in #( - *-*-mingw32|*-pc-windows) : - $as_echo "#define HAS_UTIME 1" >>confdefs.h + *-*-mingw32*|*-pc-windows) : + printf "%s\n" "#define HAS_UTIME 1" >>confdefs.h ;; #( *) : - ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_types_h" = xyes; then : - ac_fn_c_check_header_mongrel "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" -if test "x$ac_cv_header_utime_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" +if test "x$ac_cv_header_utime_h" = xyes +then : ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime" -if test "x$ac_cv_func_utime" = xyes; then : - $as_echo "#define HAS_UTIME 1" >>confdefs.h +if test "x$ac_cv_func_utime" = xyes +then : + printf "%s\n" "#define HAS_UTIME 1" >>confdefs.h fi fi - fi - ;; esac ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" -if test "x$ac_cv_func_utimes" = xyes; then : - $as_echo "#define HAS_UTIMES 1" >>confdefs.h +if test "x$ac_cv_func_utimes" = xyes +then : + printf "%s\n" "#define HAS_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod" -if test "x$ac_cv_func_fchmod" = xyes; then : +if test "x$ac_cv_func_fchmod" = xyes +then : ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown" -if test "x$ac_cv_func_fchown" = xyes; then : - $as_echo "#define HAS_FCHMOD 1" >>confdefs.h +if test "x$ac_cv_func_fchown" = xyes +then : + printf "%s\n" "#define HAS_FCHMOD 1" >>confdefs.h fi @@ -15610,10 +17519,12 @@ fi ac_fn_c_check_func "$LINENO" "truncate" "ac_cv_func_truncate" -if test "x$ac_cv_func_truncate" = xyes; then : +if test "x$ac_cv_func_truncate" = xyes +then : ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" -if test "x$ac_cv_func_ftruncate" = xyes; then : - $as_echo "#define HAS_TRUNCATE 1" >>confdefs.h +if test "x$ac_cv_func_ftruncate" = xyes +then : + printf "%s\n" "#define HAS_TRUNCATE 1" >>confdefs.h fi @@ -15622,17 +17533,19 @@ fi ## select ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" -if test "x$ac_cv_func_select" = xyes; then : +if test "x$ac_cv_func_select" = xyes +then : ac_fn_c_check_type "$LINENO" "fd_set" "ac_cv_type_fd_set" " #include #include " -if test "x$ac_cv_type_fd_set" = xyes; then : - $as_echo "#define HAS_SELECT 1" >>confdefs.h +if test "x$ac_cv_type_fd_set" = xyes +then : + printf "%s\n" "#define HAS_SELECT 1" >>confdefs.h select=true -else +else $as_nop select=false fi @@ -15640,19 +17553,23 @@ fi ac_fn_c_check_func "$LINENO" "nanosleep" "ac_cv_func_nanosleep" -if test "x$ac_cv_func_nanosleep" = xyes; then : - $as_echo "#define HAS_NANOSLEEP 1" >>confdefs.h +if test "x$ac_cv_func_nanosleep" = xyes +then : + printf "%s\n" "#define HAS_NANOSLEEP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "symlink" "ac_cv_func_symlink" -if test "x$ac_cv_func_symlink" = xyes; then : +if test "x$ac_cv_func_symlink" = xyes +then : ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink" -if test "x$ac_cv_func_readlink" = xyes; then : +if test "x$ac_cv_func_readlink" = xyes +then : ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat" -if test "x$ac_cv_func_lstat" = xyes; then : - $as_echo "#define HAS_SYMLINK 1" >>confdefs.h +if test "x$ac_cv_func_lstat" = xyes +then : + printf "%s\n" "#define HAS_SYMLINK 1" >>confdefs.h fi @@ -15662,30 +17579,33 @@ fi ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" -if test "x$ac_cv_func_realpath" = xyes; then : - $as_echo "#define HAS_REALPATH 1" >>confdefs.h +if test "x$ac_cv_func_realpath" = xyes +then : + printf "%s\n" "#define HAS_REALPATH 1" >>confdefs.h fi # wait ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" -if test "x$ac_cv_func_waitpid" = xyes; then : +if test "x$ac_cv_func_waitpid" = xyes +then : wait=true - $as_echo "#define HAS_WAITPID 1" >>confdefs.h + printf "%s\n" "#define HAS_WAITPID 1" >>confdefs.h -else +else $as_nop wait=false fi ac_fn_c_check_func "$LINENO" "wait4" "ac_cv_func_wait4" -if test "x$ac_cv_func_wait4" = xyes; then : +if test "x$ac_cv_func_wait4" = xyes +then : has_wait=true - $as_echo "#define HAS_WAIT4 1" >>confdefs.h + printf "%s\n" "#define HAS_WAIT4 1" >>confdefs.h fi @@ -15693,43 +17613,52 @@ fi ## getgroups ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" -if test "x$ac_cv_func_getgroups" = xyes; then : - $as_echo "#define HAS_GETGROUPS 1" >>confdefs.h +if test "x$ac_cv_func_getgroups" = xyes +then : + printf "%s\n" "#define HAS_GETGROUPS 1" >>confdefs.h fi ## setgroups ac_fn_c_check_func "$LINENO" "setgroups" "ac_cv_func_setgroups" -if test "x$ac_cv_func_setgroups" = xyes; then : - $as_echo "#define HAS_SETGROUPS 1" >>confdefs.h +if test "x$ac_cv_func_setgroups" = xyes +then : + printf "%s\n" "#define HAS_SETGROUPS 1" >>confdefs.h fi ## initgroups ac_fn_c_check_func "$LINENO" "initgroups" "ac_cv_func_initgroups" -if test "x$ac_cv_func_initgroups" = xyes; then : - $as_echo "#define HAS_INITGROUPS 1" >>confdefs.h +if test "x$ac_cv_func_initgroups" = xyes +then : + printf "%s\n" "#define HAS_INITGROUPS 1" >>confdefs.h fi ## termios -ac_fn_c_check_header_mongrel "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" -if test "x$ac_cv_header_termios_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" +if test "x$ac_cv_header_termios_h" = xyes +then : ac_fn_c_check_func "$LINENO" "tcgetattr" "ac_cv_func_tcgetattr" -if test "x$ac_cv_func_tcgetattr" = xyes; then : +if test "x$ac_cv_func_tcgetattr" = xyes +then : ac_fn_c_check_func "$LINENO" "tcsetattr" "ac_cv_func_tcsetattr" -if test "x$ac_cv_func_tcsetattr" = xyes; then : +if test "x$ac_cv_func_tcsetattr" = xyes +then : ac_fn_c_check_func "$LINENO" "tcsendbreak" "ac_cv_func_tcsendbreak" -if test "x$ac_cv_func_tcsendbreak" = xyes; then : +if test "x$ac_cv_func_tcsendbreak" = xyes +then : ac_fn_c_check_func "$LINENO" "tcflush" "ac_cv_func_tcflush" -if test "x$ac_cv_func_tcflush" = xyes; then : +if test "x$ac_cv_func_tcflush" = xyes +then : ac_fn_c_check_func "$LINENO" "tcflow" "ac_cv_func_tcflow" -if test "x$ac_cv_func_tcflow" = xyes; then : - $as_echo "#define HAS_TERMIOS 1" >>confdefs.h +if test "x$ac_cv_func_tcflow" = xyes +then : + printf "%s\n" "#define HAS_TERMIOS 1" >>confdefs.h fi @@ -15744,17 +17673,17 @@ fi fi - ## setitimer ac_fn_c_check_func "$LINENO" "setitimer" "ac_cv_func_setitimer" -if test "x$ac_cv_func_setitimer" = xyes; then : +if test "x$ac_cv_func_setitimer" = xyes +then : setitimer=true - $as_echo "#define HAS_SETITIMER 1" >>confdefs.h + printf "%s\n" "#define HAS_SETITIMER 1" >>confdefs.h -else +else $as_nop setitimer=false fi @@ -15763,13 +17692,14 @@ fi # Note: detection fails on Windows so hardcoding the result # (should be debugged later) case $host in #( - *-*-mingw32|*-pc-windows) : - $as_echo "#define HAS_GETHOSTNAME 1" >>confdefs.h + *-*-mingw32*|*-pc-windows) : + printf "%s\n" "#define HAS_GETHOSTNAME 1" >>confdefs.h ;; #( *) : ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname" -if test "x$ac_cv_func_gethostname" = xyes; then : - $as_echo "#define HAS_GETHOSTNAME 1" >>confdefs.h +if test "x$ac_cv_func_gethostname" = xyes +then : + printf "%s\n" "#define HAS_GETHOSTNAME 1" >>confdefs.h fi ;; @@ -15777,28 +17707,30 @@ esac ## uname -ac_fn_c_check_header_mongrel "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_utsname_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_utsname_h" = xyes +then : ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" -if test "x$ac_cv_func_uname" = xyes; then : - $as_echo "#define HAS_UNAME 1" >>confdefs.h +if test "x$ac_cv_func_uname" = xyes +then : + printf "%s\n" "#define HAS_UNAME 1" >>confdefs.h fi fi - ## gettimeofday ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" -if test "x$ac_cv_func_gettimeofday" = xyes; then : +if test "x$ac_cv_func_gettimeofday" = xyes +then : gettimeofday=true - $as_echo "#define HAS_GETTIMEOFDAY 1" >>confdefs.h + printf "%s\n" "#define HAS_GETTIMEOFDAY 1" >>confdefs.h -else +else $as_nop gettimeofday=false fi @@ -15806,8 +17738,9 @@ fi ## mktime ac_fn_c_check_func "$LINENO" "mktime" "ac_cv_func_mktime" -if test "x$ac_cv_func_mktime" = xyes; then : - $as_echo "#define HAS_MKTIME 1" >>confdefs.h +if test "x$ac_cv_func_mktime" = xyes +then : + printf "%s\n" "#define HAS_MKTIME 1" >>confdefs.h fi @@ -15815,12 +17748,13 @@ fi ## setsid case $host in #( - *-cygwin|*-*-mingw32|*-pc-windows) : + *-cygwin|*-*-mingw32*|*-pc-windows) : ;; #( *) : ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid" -if test "x$ac_cv_func_setsid" = xyes; then : - $as_echo "#define HAS_SETSID 1" >>confdefs.h +if test "x$ac_cv_func_setsid" = xyes +then : + printf "%s\n" "#define HAS_SETSID 1" >>confdefs.h fi ;; @@ -15829,8 +17763,9 @@ esac ## putenv ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" -if test "x$ac_cv_func_putenv" = xyes; then : - $as_echo "#define HAS_PUTENV 1" >>confdefs.h +if test "x$ac_cv_func_putenv" = xyes +then : + printf "%s\n" "#define HAS_PUTENV 1" >>confdefs.h fi @@ -15838,10 +17773,12 @@ fi ## setenv and unsetenv ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" -if test "x$ac_cv_func_setenv" = xyes; then : +if test "x$ac_cv_func_setenv" = xyes +then : ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" -if test "x$ac_cv_func_unsetenv" = xyes; then : - $as_echo "#define HAS_SETENV_UNSETENV 1" >>confdefs.h +if test "x$ac_cv_func_unsetenv" = xyes +then : + printf "%s\n" "#define HAS_SETENV_UNSETENV 1" >>confdefs.h fi @@ -15853,18 +17790,22 @@ fi # (should be debugged later) case $host in #( *-pc-windows) : - $as_echo "#define HAS_LOCALE_H 1" >>confdefs.h + printf "%s\n" "#define HAS_LOCALE_H 1" >>confdefs.h ;; #( *) : - ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" -if test "x$ac_cv_header_locale_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" +if test "x$ac_cv_header_locale_h" = xyes +then : ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" -if test "x$ac_cv_func_newlocale" = xyes; then : +if test "x$ac_cv_func_newlocale" = xyes +then : ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" -if test "x$ac_cv_func_freelocale" = xyes; then : +if test "x$ac_cv_func_freelocale" = xyes +then : ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" -if test "x$ac_cv_func_uselocale" = xyes; then : - $as_echo "#define HAS_LOCALE_H 1" >>confdefs.h +if test "x$ac_cv_func_uselocale" = xyes +then : + printf "%s\n" "#define HAS_LOCALE_H 1" >>confdefs.h fi @@ -15873,19 +17814,22 @@ fi fi fi - ;; esac -ac_fn_c_check_header_mongrel "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" -if test "x$ac_cv_header_xlocale_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" +if test "x$ac_cv_header_xlocale_h" = xyes +then : ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" -if test "x$ac_cv_func_newlocale" = xyes; then : +if test "x$ac_cv_func_newlocale" = xyes +then : ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" -if test "x$ac_cv_func_freelocale" = xyes; then : +if test "x$ac_cv_func_freelocale" = xyes +then : ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" -if test "x$ac_cv_func_uselocale" = xyes; then : - $as_echo "#define HAS_XLOCALE_H 1" >>confdefs.h +if test "x$ac_cv_func_uselocale" = xyes +then : + printf "%s\n" "#define HAS_XLOCALE_H 1" >>confdefs.h fi @@ -15896,38 +17840,41 @@ fi fi - ## strtod_l # Note: not detected on MSVC so hardcoding the result # (should be debugged later) case $host in #( *-pc-windows) : - $as_echo "#define HAS_STRTOD_L 1" >>confdefs.h + printf "%s\n" "#define HAS_STRTOD_L 1" >>confdefs.h ;; #( *) : ac_fn_c_check_func "$LINENO" "strtod_l" "ac_cv_func_strtod_l" -if test "x$ac_cv_func_strtod_l" = xyes; then : - $as_echo "#define HAS_STRTOD_L 1" >>confdefs.h +if test "x$ac_cv_func_strtod_l" = xyes +then : + printf "%s\n" "#define HAS_STRTOD_L 1" >>confdefs.h fi ;; esac ## shared library support -if $supports_shared_libraries; then : +if $supports_shared_libraries +then : case $host in #( - *-*-mingw32|*-pc-windows|*-*-cygwin*) : + *-*-mingw32*|*-pc-windows|*-*-cygwin*) : DLLIBS="" ;; #( *) : ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +if test "x$ac_cv_func_dlopen" = xyes +then : supports_shared_libraries=true DLLIBS="" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15936,61 +17883,64 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : supports_shared_libraries=true DLLIBS="-ldl $DLLIBS" -else +else $as_nop supports_shared_libraries=false fi fi ;; esac -else +else $as_nop supports_shared_libraries=false fi -if $supports_shared_libraries; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is supported." >&5 -$as_echo "$as_me: Dynamic loading of shared libraries is supported." >&6;} - $as_echo "#define SUPPORT_DYNAMIC_LINKING 1" >>confdefs.h +if $supports_shared_libraries +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is supported." >&5 +printf "%s\n" "$as_me: Dynamic loading of shared libraries is supported." >&6;} + printf "%s\n" "#define SUPPORT_DYNAMIC_LINKING 1" >>confdefs.h -else - { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is not supported." >&5 -$as_echo "$as_me: Dynamic loading of shared libraries is not supported." >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Dynamic loading of shared libraries is not supported." >&5 +printf "%s\n" "$as_me: Dynamic loading of shared libraries is not supported." >&6;} fi ## mmap -ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes +then : ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes; then : +if test "x$ac_cv_func_mmap" = xyes +then : ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" -if test "x$ac_cv_func_munmap" = xyes; then : - $as_echo "#define HAS_MMAP 1" >>confdefs.h +if test "x$ac_cv_func_munmap" = xyes +then : + printf "%s\n" "#define HAS_MMAP 1" >>confdefs.h fi @@ -15999,19 +17949,19 @@ fi fi - ## pwrite ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" -if test "x$ac_cv_func_pwrite" = xyes; then : - $as_echo "#define HAS_PWRITE 1" >>confdefs.h +if test "x$ac_cv_func_pwrite" = xyes +then : + printf "%s\n" "#define HAS_PWRITE 1" >>confdefs.h fi ## -fdebug-prefix-map support by the C compiler -case $ocaml_cv_cc_vendor,$host in #( - *,*-*-mingw32) : +case $ocaml_cc_vendor,$host in #( + *,*-*-mingw32*) : cc_has_debug_prefix_map=false ;; #( *,*-pc-windows) : cc_has_debug_prefix_map=false ;; #( @@ -16021,77 +17971,86 @@ case $ocaml_cv_cc_vendor,$host in #( cc_has_debug_prefix_map=false ;; #( *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fdebug-prefix-map" >&5 -$as_echo_n "checking whether the C compiler supports -fdebug-prefix-map... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports -fdebug-prefix-map" >&5 +printf %s "checking whether the C compiler supports -fdebug-prefix-map... " >&6; } saved_CFLAGS="$CFLAGS" CFLAGS="-fdebug-prefix-map=old=new $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cc_has_debug_prefix_map=true - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop cc_has_debug_prefix_map=false - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$saved_CFLAGS" ;; esac ## Does stat support nanosecond precision +stat_has_ns_precision=false + ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" " $ac_includes_default #include " -if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes +then : stat_has_ns_precision=true - $as_echo "#define HAS_NANOSECOND_STAT 1" >>confdefs.h + printf "%s\n" "#define HAS_NANOSECOND_STAT 1" >>confdefs.h fi -if ! $stat_has_ns_precision; then : +if ! $stat_has_ns_precision +then : ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" " $ac_includes_default #include " -if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes +then : stat_has_ns_precision=true - $as_echo "#define HAS_NANOSECOND_STAT 2" >>confdefs.h + printf "%s\n" "#define HAS_NANOSECOND_STAT 2" >>confdefs.h fi fi -if ! $stat_has_ns_precision; then : +if ! $stat_has_ns_precision +then : ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" " $ac_includes_default #include " -if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : +if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes +then : stat_has_ns_precision=true - $as_echo "#define HAS_NANOSECOND_STAT 3" >>confdefs.h + printf "%s\n" "#define HAS_NANOSECOND_STAT 3" >>confdefs.h fi fi -if $stat_has_ns_precision; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: stat supports nanosecond precision" >&5 -$as_echo "$as_me: stat supports nanosecond precision" >&6;} -else - { $as_echo "$as_me:${as_lineno-$LINENO}: stat does not support nanosecond precision" >&5 -$as_echo "$as_me: stat does not support nanosecond precision" >&6;} +if $stat_has_ns_precision +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: stat supports nanosecond precision" >&5 +printf "%s\n" "$as_me: stat supports nanosecond precision" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: stat does not support nanosecond precision" >&5 +printf "%s\n" "$as_me: stat does not support nanosecond precision" >&6;} fi # Number of arguments of gethostbyname_r @@ -16104,12 +18063,13 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyname_r() takes" >&5 -$as_echo_n "checking how many arguments gethostbyname_r() takes... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyname_r() takes" >&5 +printf %s "checking how many arguments gethostbyname_r() takes... " >&6; } - if ${ac_cv_func_which_gethostbyname_r+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_func_which_gethostbyname_r+y} +then : + printf %s "(cached) " >&6 +else $as_nop ################################################################ @@ -16129,7 +18089,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *name = "www.gnu.org"; @@ -16139,10 +18099,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyname_r=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # # SIX ARGUMENTS @@ -16155,7 +18116,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *name = "www.gnu.org"; @@ -16169,10 +18130,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyname_r=six fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -16187,7 +18149,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *name = "www.gnu.org"; @@ -16201,10 +18163,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyname_r=five fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -16219,7 +18182,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *name = "www.gnu.org"; @@ -16231,10 +18194,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyname_r=three fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -16246,44 +18210,44 @@ fi case "$ac_cv_func_which_gethostbyname_r" in three|five|six) -$as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h ;; esac case "$ac_cv_func_which_gethostbyname_r" in three) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: three" >&5 -$as_echo "three" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: three" >&5 +printf "%s\n" "three" >&6; } -$as_echo "#define HAVE_FUNC_GETHOSTBYNAME_R_3 1" >>confdefs.h +printf "%s\n" "#define HAVE_FUNC_GETHOSTBYNAME_R_3 1" >>confdefs.h ;; five) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: five" >&5 -$as_echo "five" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: five" >&5 +printf "%s\n" "five" >&6; } -$as_echo "#define HAVE_FUNC_GETHOSTBYNAME_R_5 1" >>confdefs.h +printf "%s\n" "#define HAVE_FUNC_GETHOSTBYNAME_R_5 1" >>confdefs.h ;; six) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: six" >&5 -$as_echo "six" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: six" >&5 +printf "%s\n" "six" >&6; } -$as_echo "#define HAVE_FUNC_GETHOSTBYNAME_R_6 1" >>confdefs.h +printf "%s\n" "#define HAVE_FUNC_GETHOSTBYNAME_R_6 1" >>confdefs.h ;; no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 -$as_echo "cannot find function declaration in netdb.h" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 +printf "%s\n" "cannot find function declaration in netdb.h" >&6; } ;; unknown) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 -$as_echo "can't tell" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 +printf "%s\n" "can't tell" >&6; } ;; *) @@ -16302,14 +18266,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ac_cv_func_which_gethostbyname_r in #( six) : - $as_echo "#define HAS_GETHOSTBYNAME_R 6" >>confdefs.h + printf "%s\n" "#define HAS_GETHOSTBYNAME_R 6" >>confdefs.h ;; #( five) : - $as_echo "#define HAS_GETHOSTBYNAME_R 5" >>confdefs.h + printf "%s\n" "#define HAS_GETHOSTBYNAME_R 5" >>confdefs.h ;; #( three) : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OCaml does not support this variant" >&5 -$as_echo "$as_me: WARNING: OCaml does not support this variant" >&2;} ;; #( + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OCaml does not support this variant" >&5 +printf "%s\n" "$as_me: WARNING: OCaml does not support this variant" >&2;} ;; #( *) : ;; esac @@ -16324,12 +18288,13 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyaddr_r() takes" >&5 -$as_echo_n "checking how many arguments gethostbyaddr_r() takes... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyaddr_r() takes" >&5 +printf %s "checking how many arguments gethostbyaddr_r() takes... " >&6; } - if ${ac_cv_func_which_gethostbyaddr_r+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_func_which_gethostbyaddr_r+y} +then : + printf %s "(cached) " >&6 +else $as_nop ################################################################ @@ -16349,7 +18314,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *addr = "192.168.1.1"; @@ -16359,10 +18324,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyaddr_r=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # # EIGHT ARGUMENTS @@ -16375,7 +18341,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *addr = "192.168.1.1"; @@ -16390,10 +18356,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyaddr_r=eight fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -16408,7 +18375,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { char *addr = "192.168.1.1"; @@ -16423,10 +18390,11 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_func_which_gethostbyaddr_r=seven fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -16438,36 +18406,36 @@ fi case "$ac_cv_func_which_gethostbyaddr_r" in seven|eight) -$as_echo "#define HAVE_GETHOSTBYADDR_R 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETHOSTBYADDR_R 1" >>confdefs.h ;; esac case "$ac_cv_func_which_gethostbyaddr_r" in eight) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: eight" >&5 -$as_echo "eight" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: eight" >&5 +printf "%s\n" "eight" >&6; } -$as_echo "#define HAVE_FUNC_GETHOSTBYADDR_R_8 1" >>confdefs.h +printf "%s\n" "#define HAVE_FUNC_GETHOSTBYADDR_R_8 1" >>confdefs.h ;; seven) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: seven" >&5 -$as_echo "seven" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: seven" >&5 +printf "%s\n" "seven" >&6; } -$as_echo "#define HAVE_FUNC_GETHOSTBYADDR_R_7 1" >>confdefs.h +printf "%s\n" "#define HAVE_FUNC_GETHOSTBYADDR_R_7 1" >>confdefs.h ;; no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 -$as_echo "cannot find function declaration in netdb.h" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot find function declaration in netdb.h" >&5 +printf "%s\n" "cannot find function declaration in netdb.h" >&6; } ;; unknown) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 -$as_echo "can't tell" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: can't tell" >&5 +printf "%s\n" "can't tell" >&6; } ;; *) @@ -16486,10 +18454,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu case $ac_cv_func_which_gethostbyaddr_r in #( eight) : - $as_echo "#define HAS_GETHOSTBYADDR_R 8" >>confdefs.h + printf "%s\n" "#define HAS_GETHOSTBYADDR_R 8" >>confdefs.h ;; #( seven) : - $as_echo "#define HAS_GETHOSTBYADDR_R 7" >>confdefs.h + printf "%s\n" "#define HAS_GETHOSTBYADDR_R 7" >>confdefs.h ;; #( *) : ;; @@ -16498,8 +18466,9 @@ esac ## mkstemp ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" -if test "x$ac_cv_func_mkstemp" = xyes; then : - $as_echo "#define HAS_MKSTEMP 1" >>confdefs.h +if test "x$ac_cv_func_mkstemp" = xyes +then : + printf "%s\n" "#define HAS_MKSTEMP 1" >>confdefs.h fi @@ -16507,8 +18476,9 @@ fi ## nice ac_fn_c_check_func "$LINENO" "nice" "ac_cv_func_nice" -if test "x$ac_cv_func_nice" = xyes; then : - $as_echo "#define HAS_NICE 1" >>confdefs.h +if test "x$ac_cv_func_nice" = xyes +then : + printf "%s\n" "#define HAS_NICE 1" >>confdefs.h fi @@ -16516,8 +18486,9 @@ fi ## dup3 ac_fn_c_check_func "$LINENO" "dup3" "ac_cv_func_dup3" -if test "x$ac_cv_func_dup3" = xyes; then : - $as_echo "#define HAS_DUP3 1" >>confdefs.h +if test "x$ac_cv_func_dup3" = xyes +then : + printf "%s\n" "#define HAS_DUP3 1" >>confdefs.h fi @@ -16525,8 +18496,9 @@ fi ## pipe2 ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" -if test "x$ac_cv_func_pipe2" = xyes; then : - $as_echo "#define HAS_PIPE2 1" >>confdefs.h +if test "x$ac_cv_func_pipe2" = xyes +then : + printf "%s\n" "#define HAS_PIPE2 1" >>confdefs.h fi @@ -16534,8 +18506,9 @@ fi ## accept4 ac_fn_c_check_func "$LINENO" "accept4" "ac_cv_func_accept4" -if test "x$ac_cv_func_accept4" = xyes; then : - $as_echo "#define HAS_ACCEPT4 1" >>confdefs.h +if test "x$ac_cv_func_accept4" = xyes +then : + printf "%s\n" "#define HAS_ACCEPT4 1" >>confdefs.h fi @@ -16543,21 +18516,24 @@ fi ## getauxval ac_fn_c_check_func "$LINENO" "getauxval" "ac_cv_func_getauxval" -if test "x$ac_cv_func_getauxval" = xyes; then : - $as_echo "#define HAS_GETAUXVAL 1" >>confdefs.h +if test "x$ac_cv_func_getauxval" = xyes +then : + printf "%s\n" "#define HAS_GETAUXVAL 1" >>confdefs.h fi ## shmat -ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_shm_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_shm_h" = xyes +then : - $as_echo "#define HAS_SYS_SHM_H 1" >>confdefs.h + printf "%s\n" "#define HAS_SYS_SHM_H 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = xyes; then : - $as_echo "#define HAS_SHMAT 1" >>confdefs.h +if test "x$ac_cv_func_shmat" = xyes +then : + printf "%s\n" "#define HAS_SHMAT 1" >>confdefs.h fi @@ -16565,25 +18541,28 @@ fi fi - ## execvpe ac_fn_c_check_func "$LINENO" "execvpe" "ac_cv_func_execvpe" -if test "x$ac_cv_func_execvpe" = xyes; then : - $as_echo "#define HAS_EXECVPE 1" >>confdefs.h +if test "x$ac_cv_func_execvpe" = xyes +then : + printf "%s\n" "#define HAS_EXECVPE 1" >>confdefs.h fi ## posix_spawn -ac_fn_c_check_header_mongrel "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" -if test "x$ac_cv_header_spawn_h" = xyes; then : +ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" +if test "x$ac_cv_header_spawn_h" = xyes +then : ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" -if test "x$ac_cv_func_posix_spawn" = xyes; then : +if test "x$ac_cv_func_posix_spawn" = xyes +then : ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" -if test "x$ac_cv_func_posix_spawnp" = xyes; then : - $as_echo "#define HAS_POSIX_SPAWN 1" >>confdefs.h +if test "x$ac_cv_func_posix_spawnp" = xyes +then : + printf "%s\n" "#define HAS_POSIX_SPAWN 1" >>confdefs.h fi @@ -16592,38 +18571,317 @@ fi fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +printf "%s\n" "$PKG_CONFIG" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -## ffs or _BitScanForward + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + + +## ZSTD compression library + +zstd_status="" +zstd_libs="" + +if test x"$with_zstd" != "xno" +then : + # Try pkg-config first, as it gives the most reliable results + if ${PKG_CONFIG} libzstd 2>/dev/null +then : + # Now check the version + if ${PKG_CONFIG} --atleast-version 1.4 libzstd +then : + zstd_libs=`${PKG_CONFIG} --libs libzstd` + zstd_flags=`${PKG_CONFIG} --cflags libzstd` + zstd_status="ok" +else $as_nop + zstd_status="zstd library too old: version 1.4 or later is needed" +fi +else $as_nop + # Otherwise, try to find zstd the old way, + # assuming it is installed in default places + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ZSTD_createCCtx in -lzstd" >&5 +printf %s "checking for ZSTD_createCCtx in -lzstd... " >&6; } +if test ${ac_cv_lib_zstd_ZSTD_createCCtx+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lzstd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -ac_fn_c_check_func "$LINENO" "ffs" "ac_cv_func_ffs" -if test "x$ac_cv_func_ffs" = xyes; then : - $as_echo "#define HAS_FFS 1" >>confdefs.h +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char ZSTD_createCCtx (); +int +main (void) +{ +return ZSTD_createCCtx (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_zstd_ZSTD_createCCtx=yes +else $as_nop + ac_cv_lib_zstd_ZSTD_createCCtx=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_createCCtx" >&5 +printf "%s\n" "$ac_cv_lib_zstd_ZSTD_createCCtx" >&6; } +if test "x$ac_cv_lib_zstd_ZSTD_createCCtx" = xyes +then : + ac_fn_check_decl "$LINENO" "ZSTD_compressStream2" "ac_cv_have_decl_ZSTD_compressStream2" "#include +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ZSTD_compressStream2" = xyes +then : + zstd_libs="-lzstd" + zstd_flags="" + zstd_status="ok" +else $as_nop + zstd_status="zstd library too old: version 1.4 or later is needed" +fi +else $as_nop + zstd_status="zstd library not found" +fi fi +fi + +# When building the mingw-w64 port in Cygwin, it is very easy to have the +# library available, but not have the DLL in PATH. This then causes the build to +# fail as soon as ocamlrun is first executed. This check avoids automatically +# enabling zstd when the resulting executable doesn't actually work. +case $host in #( + *-w64-mingw32*|*-pc-windows) : + check_zstd_runs=$host_runnable ;; #( + *) : + check_zstd_runs=false ;; +esac + +if test x"$zstd_status" = "xok" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether programs can be linked with zstd" >&5 +printf %s "checking whether programs can be linked with zstd... " >&6; } + + saved_CC="$CC" + saved_CFLAGS="$CFLAGS" + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + saved_ac_ext="$ac_ext" + saved_ac_compile="$ac_compile" + # Move the content of confdefs.h to another file so it does not + # get included + mv confdefs.h confdefs.h.bak + touch confdefs.h + + LIBS="$LIBS $zstd_libs" + CFLAGS="$CFLAGS $zstd_flags" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +int main(void) { + return (ZSTD_versionNumber() == 0); +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether programs linked with zstd can execute" >&5 +printf %s "checking whether programs linked with zstd can execute... " >&6; } + if $check_zstd_runs +then : + if ac_fn_c_try_run LINENO +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + zstd_libs='' + zstd_flags='' + zstd_status=\ +"programs linked with zstd do not appear to be executable." +fi +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: skipped" >&5 +printf "%s\n" "skipped" >&6; } +fi +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + zstd_libs='' + zstd_flags='' + zstd_status="zstd found, but programs cannot be linked with it." +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext -ac_fn_c_check_func "$LINENO" "_BitScanForward" "ac_cv_func__BitScanForward" -if test "x$ac_cv_func__BitScanForward" = xyes; then : - $as_echo "#define HAS_BITSCANFORWARD 1" >>confdefs.h + # Restore the content of confdefs.h + mv confdefs.h.bak confdefs.h + ac_compile="$saved_ac_compile" + ac_ext="$saved_ac_ext" + CPPFLAGS="$saved_CPPFLAGS" + CFLAGS="$saved_CFLAGS" + CC="$saved_CC" + LIBS="$saved_LIBS" fi +if test x"$zstd_status" = "xok" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: compressed compilation artefacts supported" >&5 +printf "%s\n" "$as_me: compressed compilation artefacts supported" >&6;} + internal_cppflags="$internal_cppflags $zstd_flags" + printf "%s\n" "#define HAS_ZSTD 1" >>confdefs.h + +else $as_nop + case "$with_zstd" in #( + no) : + ;; #( + yes) : + as_fn_error $? "$zstd_status" "$LINENO" 5 ;; #( + *) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $zstd_status" >&5 +printf "%s\n" "$as_me: WARNING: $zstd_status" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compressed compilation artefacts not supported" >&5 +printf "%s\n" "$as_me: WARNING: compressed compilation artefacts not supported" >&2;} ;; +esac +fi ## Determine whether the debugger should/can be built -case $enable_debugger in #( +case $enable_ocamldebug in #( no) : with_debugger="" - { $as_echo "$as_me:${as_lineno-$LINENO}: replay debugger disabled" >&5 -$as_echo "$as_me: replay debugger disabled" >&6;} ;; #( + build_ocamldebug=false + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: ocamldebug disabled" >&5 +printf "%s\n" "$as_me: ocamldebug disabled" >&6;} ;; #( *) : - if $sockets; then : - with_debugger="ocamldebugger" - { $as_echo "$as_me:${as_lineno-$LINENO}: replay debugger supported" >&5 -$as_echo "$as_me: replay debugger supported" >&6;} -else + if $sockets +then : + with_debugger="ocamldebug" + build_ocamldebug=true + optional_bytecode_tools="$optional_bytecode_tools debugger/ocamldebug" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: ocamldebug supported" >&5 +printf "%s\n" "$as_me: ocamldebug supported" >&6;} +else $as_nop with_debugger="" - { $as_echo "$as_me:${as_lineno-$LINENO}: replay debugger not supported" >&5 -$as_echo "$as_me: replay debugger not supported" >&6;} + build_ocamldebug=false + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: ocamldebug not supported" >&5 +printf "%s\n" "$as_me: ocamldebug not supported" >&6;} fi ;; esac @@ -16636,40 +18894,13 @@ case $enable_debug_runtime in #( debug_runtime=true ;; esac -## Determine if system stack overflows can be detected - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stack overflows can be detected" >&5 -$as_echo_n "checking whether stack overflows can be detected... " >&6; } - -case $arch,$system in #( - i386,linux_elf|amd64,linux|amd64,macosx \ - |amd64,openbsd|i386,bsd_elf|arm64,linux|arm64,macosx) : - $as_echo "#define HAS_STACK_OVERFLOW_DETECTION 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } ;; #( - *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } ;; -esac - -## Determine if the POSIX threads library is supported +## Determine how to link with the POSIX threads library -case $enable_systhreads,$enable_unix_lib in #( - yes,no) : - systhread_support=false - as_fn_error $? "the Win32/POSIX threads library requires the unix library" "$LINENO" 5 ;; #( - no,*|*,no) : - systhread_support=false - { $as_echo "$as_me:${as_lineno-$LINENO}: the Win32/POSIX threads library is disabled" >&5 -$as_echo "$as_me: the Win32/POSIX threads library is disabled" >&6;} ;; #( - *) : - case $host in #( - *-*-mingw32|*-pc-windows) : - systhread_support=true - otherlibraries="$otherlibraries systhreads" - { $as_echo "$as_me:${as_lineno-$LINENO}: the Win32 threads library is supported" >&5 -$as_echo "$as_me: the Win32 threads library is supported" >&6;} ;; #( +case $host in #( + *-*-mingw32*) : + PTHREAD_LIBS="-l:libpthread.a -lgcc_eh" ;; #( + *-pc-windows) : + PTHREAD_LIBS="-l:libpthread.lib" ;; #( *) : @@ -16694,38 +18925,41 @@ if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" - if test "x$PTHREAD_CC" != "x"; then : + if test "x$PTHREAD_CC" != "x" +then : CC="$PTHREAD_CC" +fi + if test "x$PTHREAD_CXX" != "x" +then : + CXX="$PTHREAD_CXX" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 -$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_join (); int -main () +main (void) { return pthread_join (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" @@ -16803,11 +19037,12 @@ case $host_os in _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 -$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi -rm -f conftest* +rm -rf conftest* ;; @@ -16827,11 +19062,12 @@ esac # Are we compiling with Clang? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 -$as_echo_n "checking whether $CC is Clang... " >&6; } -if ${ax_cv_PTHREAD_CLANG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +printf %s "checking whether $CC is Clang... " >&6; } +if test ${ax_cv_PTHREAD_CLANG+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then @@ -16844,16 +19080,17 @@ else _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 +then : ax_cv_PTHREAD_CLANG=yes fi -rm -f conftest* +rm -rf conftest* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" @@ -16867,13 +19104,15 @@ ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC -if test "x$GCC" = "xyes"; then : +if test "x$GCC" = "xyes" +then : ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags" fi # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first -if test "x$ax_pthread_clang" = "xyes"; then : +if test "x$ax_pthread_clang" = "xyes" +then : ax_pthread_flags="-pthread,-lpthread -pthread" fi @@ -16895,9 +19134,10 @@ case $host_os in ax_pthread_check_macro="--" ;; esac -if test "x$ax_pthread_check_macro" = "x--"; then : +if test "x$ax_pthread_check_macro" = "x--" +then : ax_pthread_check_cond=0 -else +else $as_nop ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi @@ -16907,31 +19147,32 @@ for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +printf %s "checking whether pthreads work without any flags... " >&6; } ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 -$as_echo_n "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 +printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 -$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ax_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ax_pthread_config+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else @@ -16939,11 +19180,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -16955,15 +19200,16 @@ fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -$as_echo "$ax_pthread_config" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +printf "%s\n" "$ax_pthread_config" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test "x$ax_pthread_config" = "xno"; then : + if test "x$ax_pthread_config" = "xno" +then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" @@ -16971,8 +19217,8 @@ fi ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 -$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac @@ -17007,7 +19253,7 @@ $as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } } static void *start_routine(void *a) { return a; } int -main () +main (void) { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); @@ -17019,18 +19265,20 @@ pthread_t th; pthread_attr_t attr; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xyes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +printf "%s\n" "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes" +then : break fi @@ -17076,11 +19324,12 @@ if test "x$ax_pthread_clang" = "xyes"; then # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 -$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } -if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one @@ -17088,11 +19337,12 @@ else # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_link_step=`printf "%s\n" "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - if test "x$ax_pthread_try" = "xunknown"; then : + if test "x$ax_pthread_try" = "xunknown" +then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" @@ -17101,32 +19351,35 @@ fi /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" - if test "x$ax_pthread_try" = "x"; then : + if test "x$ax_pthread_try" = "x" +then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; @@ -17145,51 +19398,53 @@ if test "x$ax_pthread_ok" = "xyes"; then LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } -if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +printf %s "checking for joinable pthread attribute... " >&6; } +if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 -$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : + test "x$ax_pthread_joinable_attr_defined" != "xyes" +then : -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR -_ACEOF +printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h ax_pthread_joinable_attr_defined=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 -$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } -if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +printf %s "checking whether more special flags are required for pthreads... " >&6; } +if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) @@ -17198,24 +19453,26 @@ else esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 -$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes"; then : + test "x$ax_pthread_special_flags_added" != "xyes" +then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int i = PTHREAD_PRIO_INHERIT; return i; @@ -17223,21 +19480,23 @@ int i = PTHREAD_PRIO_INHERIT; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else +else $as_nop ax_cv_PTHREAD_PRIO_INHERIT=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : + test "x$ax_pthread_prio_inherit_defined" != "xyes" +then : -$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes @@ -17255,19 +19514,31 @@ fi #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : - if as_fn_executable_p ${CC}_r; then : + + if as_fn_executable_p ${CC}_r +then : PTHREAD_CC="${CC}_r" -fi ;; #( +fi + if test "x${CXX}" != "x" +then : + if as_fn_executable_p ${CXX}_r +then : + PTHREAD_CXX="${CXX}_r" +fi +fi + ;; #( *) : - for ac_prog in ${CC}_r + + for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PTHREAD_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else @@ -17275,11 +19546,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -17290,19 +19565,73 @@ fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +printf "%s\n" "$PTHREAD_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - ;; -esac ;; #( + + if test "x${CXX}" != "x" +then : + for ac_prog in ${CXX}_r +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PTHREAD_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$PTHREAD_CXX"; then + ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_PTHREAD_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX +if test -n "$PTHREAD_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 +printf "%s\n" "$PTHREAD_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$PTHREAD_CXX" && break +done +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" + +fi + + ;; +esac + ;; #( *) : ;; esac @@ -17312,62 +19641,136 @@ esac fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test "x$ax_pthread_ok" = "xyes"; then + common_cflags="$common_cflags $PTHREAD_CFLAGS" + # The two following lines add flags and libraries for pthread to the + # global CFLAGS and LIBS variables. This means that all the subsequent + # tests can rely on the assumption that pthread is enabled. + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$LIBS $PTHREAD_LIBS" + ac_fn_c_check_func "$LINENO" "sigwait" "ac_cv_func_sigwait" +if test "x$ac_cv_func_sigwait" = xyes +then : + printf "%s\n" "#define HAS_SIGWAIT 1" >>confdefs.h + +fi + + : +else + ax_pthread_ok=no + as_fn_error $? "POSIX threads are required but not supported on this platform" "$LINENO" 5 +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + ;; +esac + +## pthread_getaffinity_np, args differ from GNU and BSD +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking arguments for pthread_getaffinity_np" >&5 +printf %s "checking arguments for pthread_getaffinity_np... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _GNU_SOURCE + #include + #ifdef HAS_PTHREAD_NP_H + #include + #endif + #include +int +main (void) +{ +cpu_set_t cs; + CPU_ZERO(&cs); + CPU_COUNT(&cs); + pthread_getaffinity_np(pthread_self(), sizeof(cs), &cs); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: GNU" >&5 +printf "%s\n" "GNU" >&6; } + printf "%s\n" "#define HAS_GNU_GETAFFINITY_NP 1" >>confdefs.h +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + #include +int +main (void) +{ +cpuset_t cs; + /* Not every BSD has CPU_ZERO and CPU_COUNT (NetBSD) */ + CPU_ZERO(&cs); + CPU_COUNT(&cs); + pthread_getaffinity_np(pthread_self(), sizeof(cs), &cs); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: BSD" >&5 +printf "%s\n" "BSD" >&6; } + printf "%s\n" "#define HAS_BSD_GETAFFINITY_NP 1" >>confdefs.h -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test "x$ax_pthread_ok" = "xyes"; then - systhread_support=true - otherlibraries="$otherlibraries systhreads" - common_cflags="$common_cflags $PTHREAD_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: the POSIX threads library is supported" >&5 -$as_echo "$as_me: the POSIX threads library is supported" >&6;} - saved_CFLAGS="$CFLAGS" - saved_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$LIBS $PTHREAD_LIBS" - ac_fn_c_check_func "$LINENO" "sigwait" "ac_cv_func_sigwait" -if test "x$ac_cv_func_sigwait" = xyes; then : - $as_echo "#define HAS_SIGWAIT 1" >>confdefs.h - -fi - - LIBS="$saved_LIBS" - CFLAGS="$saved_CFLAGS" - : -else - ax_pthread_ok=no - if test x"$enable_systhreads" = "xyes"; then : - as_fn_error $? "the POSIX thread library is not available" "$LINENO" 5 -else - systhread_support=false - { $as_echo "$as_me:${as_lineno-$LINENO}: the POSIX threads library is not supported" >&5 -$as_echo "$as_me: the POSIX threads library is not supported" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: pthread_getaffinity_np not found" >&5 +printf "%s\n" "pthread_getaffinity_np not found" >&6; } fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext - ;; -esac ;; +## Activate the systhread library + +case $enable_systhreads,$enable_unix_lib in #( + yes,no) : + systhread_support=false + as_fn_error $? "the threads library requires the unix library" "$LINENO" 5 ;; #( + no,*|*,no) : + systhread_support=false + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the threads library is disabled" >&5 +printf "%s\n" "$as_me: the threads library is disabled" >&6;} ;; #( + *) : + systhread_support=true + ac_config_files="$ac_config_files otherlibs/systhreads/META" + + otherlibraries="$otherlibraries systhreads" + lib_systhreads=true + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: the threads library is supported" >&5 +printf "%s\n" "$as_me: the threads library is supported" >&6;} ;; esac ## Does the assembler support debug prefix map and CFI directives as_has_debug_prefix_map=false asm_cfi_supported=false -if $native_compiler; then : +if $native_compiler +then : case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*|*-pc-windows) : ;; #( *) : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports --debug-prefix-map" >&5 -$as_echo_n "checking whether the assembler supports --debug-prefix-map... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports --debug-prefix-map" >&5 +printf %s "checking whether the assembler supports --debug-prefix-map... " >&6; } saved_CC="$CC" @@ -17397,16 +19800,17 @@ camlPervasives__loop_1128: .loc 1 193 _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : as_has_debug_prefix_map=true - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop ashas_debug_prefix_map=false - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Restore the content of confdefs.h @@ -17420,13 +19824,14 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports CFI directives" >&5 -$as_echo_n "checking whether the assembler supports CFI directives... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the assembler supports CFI directives" >&5 +printf %s "checking whether the assembler supports CFI directives... " >&6; } - if test x"$enable_cfi" = "xno"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 -$as_echo "disabled" >&6; } -else + if test x"$enable_cfi" = "xno" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +printf "%s\n" "disabled" >&6; } +else $as_nop saved_CC="$CC" saved_CFLAGS="$CFLAGS" @@ -17458,16 +19863,18 @@ camlPervasives__loop_1128: .cfi_endproc _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : aspp_ok=true -else +else $as_nop aspp_ok=false fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if test "$AS" = "$ASPP"; then : + if test "$AS" = "$ASPP" +then : as_ok="$aspp_ok" -else +else $as_nop CC="$AS" ac_compile='$CC $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17481,12 +19888,13 @@ camlPervasives__loop_1128: .cfi_endproc _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : as_ok=true -else +else $as_nop as_ok=false fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi @@ -17500,22 +19908,24 @@ fi LIBS="$saved_LIBS" - if $aspp_ok && $as_ok; then : + if $aspp_ok && $as_ok +then : asm_cfi_supported=true - $as_echo "#define ASM_CFI_SUPPORTED 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - if test x"$enable_cfi" = "xyes"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: requested but not available + printf "%s\n" "#define ASM_CFI_SUPPORTED 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + if test x"$enable_cfi" = "xyes" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: requested but not available as_fn_error $? "exiting" "$LINENO" 5" >&5 -$as_echo "requested but not available +printf "%s\n" "requested but not available as_fn_error $? "exiting" "$LINENO" 5" >&6; } -else +else $as_nop asm_cfi_supported=false - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi @@ -17525,65 +19935,35 @@ fi ## Frame pointers -if test x"$enable_frame_pointers" = "xyes"; then : - case "$host,$cc_basename" in #( - x86_64-*-linux*,gcc*|x86_64-*-linux*,clang*) : +if test x"$enable_frame_pointers" = "xyes" +then : + case "$host,$ocaml_cc_vendor" in #( + x86_64-*-linux*,gcc-*|x86_64-*-linux*,clang-*) : common_cflags="$common_cflags -g -fno-omit-frame-pointer" frame_pointers=true - $as_echo "#define WITH_FRAME_POINTERS 1" >>confdefs.h + printf "%s\n" "#define WITH_FRAME_POINTERS 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: using frame pointers" >&5 -$as_echo "$as_me: using frame pointers" >&6;} ;; #( + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using frame pointers" >&5 +printf "%s\n" "$as_me: using frame pointers" >&6;} ;; #( *) : as_fn_error $? "frame pointers not supported on this platform" "$LINENO" 5 ;; esac -else - { $as_echo "$as_me:${as_lineno-$LINENO}: not using frame pointers" >&5 -$as_echo "$as_me: not using frame pointers" >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not using frame pointers" >&5 +printf "%s\n" "$as_me: not using frame pointers" >&6;} frame_pointers=false fi -## No naked pointers - -if test x"$enable_naked_pointers" = "xno" ; then : - naked_pointers=false - $as_echo "#define NO_NAKED_POINTERS 1" >>confdefs.h - -else - naked_pointers=true -fi - -if test x"$enable_naked_pointers_checker" = "xyes" ; then : - if test x"$enable_naked_pointers" = "xno" ; then : - as_fn_error $? "--enable-naked-pointers-checker and --disable-naked-pointers are incompatible" "$LINENO" 5 -fi - case "$arch","$system" in #( - amd64,linux|amd64,macosx \ - |amd64,openbsd|amd64,win64 \ - |amd64,freebsd|amd64,solaris \ - |arm64,linux|arm64,macosx) : - naked_pointers_checker=true - $as_echo "#define NAKED_POINTERS_CHECKER 1" >>confdefs.h - ;; #( - *) : - as_fn_error $? "naked pointers checker not supported on this platform" "$LINENO" 5 - ;; #( - *) : - ;; -esac -else - naked_pointers_checker=false -fi - ## Check for mmap support for huge pages and contiguous heap - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap supports huge pages" >&5 -$as_echo_n "checking whether mmap supports huge pages... " >&6; } - if test "$cross_compiling" = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no assumed" >&5 -$as_echo "no assumed" >&6; } -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mmap supports huge pages" >&5 +printf %s "checking whether mmap supports huge pages... " >&6; } + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no assumed" >&5 +printf "%s\n" "no assumed" >&6; } +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -17625,18 +20005,17 @@ int main (int argc, char *argv[]){ } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - $as_echo "#define HAS_HUGE_PAGES 1" >>confdefs.h +if ac_fn_c_try_run "$LINENO" +then : + printf "%s\n" "#define HAS_HUGE_PAGES 1" >>confdefs.h - cat >>confdefs.h <<_ACEOF -#define HUGE_PAGE_SIZE (4 * 1024 * 1024) -_ACEOF + printf "%s\n" "#define HUGE_PAGE_SIZE (4 * 1024 * 1024)" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext @@ -17644,37 +20023,35 @@ fi -cat >>confdefs.h <<_ACEOF -#define PROFINFO_WIDTH $profinfo_width -_ACEOF - -if $profinfo; then : - $as_echo "#define WITH_PROFINFO 1" >>confdefs.h +printf "%s\n" "#define HEADER_RESERVED_BITS $reserved_header_bits" >>confdefs.h -fi -if test x"$enable_installing_bytecode_programs" = "xno"; then : +if test x"$enable_installing_bytecode_programs" = "xno" +then : install_bytecode_programs=false -else +else $as_nop install_bytecode_programs=true fi -if test x"$enable_installing_source_artifacts" = "xno"; then : +if test x"$enable_installing_source_artifacts" = "xno" +then : install_source_artifacts=false -else +else $as_nop install_source_artifacts=true fi -if test x"$enable_ocamldoc" = "xno"; then : - ocamldoc="" -else - ocamldoc=ocamldoc +if test x"$enable_stdlib_manpages" != "xno" +then : + build_libraries_manpages=true +else $as_nop + build_libraries_manpages=false fi documentation_tool_cmd='' # Check whether --with-odoc was given. -if test "${with_odoc+set}" = set; then : +if test ${with_odoc+y} +then : withval=$with_odoc; case $withval in #( yes) : documentation_tool='odoc' ;; #( @@ -17684,12 +20061,13 @@ if test "${with_odoc+set}" = set; then : documentation_tool_cmd="$withval" documentation_tool='odoc' ;; esac -else +else $as_nop documentation_tool='ocamldoc' fi if test "x$documentation_tool_cmd" = 'x' - documentation_tool_cmd="$documentation_tool"; then : + documentation_tool_cmd="$documentation_tool" +then : fi @@ -17697,140 +20075,312 @@ fi case $enable_ocamltest,false in #( yes,*|,true) : - ocamltest='ocamltest' ;; #( + build_ocamltest=true + ocamltest_target=ocamltest + ocamltest_opt_target=ocamltest.opt + ocamltest='ocamltest' + testsuite_tools='testsuite/tools/codegen testsuite/tools/expect' + optional_bytecode_tools="$optional_bytecode_tools $testsuite_tools" ;; #( + *) : + build_ocamltest=false + ocamltest='' ;; +esac + +if $build_ocamltest +then : + optional_libraries="$optional_libraries testsuite/lib/testing" + ocamltest_unix_mod="ocamltest/ocamltest_unix_${ocamltest_unix_impl}.ml" + ac_config_links="$ac_config_links ocamltest/ocamltest_unix.ml:${ocamltest_unix_mod}" + + for ac_prog in patdiff diff +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DIFF+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DIFF"; then + ac_cv_prog_DIFF="$DIFF" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DIFF="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DIFF=$ac_cv_prog_DIFF +if test -n "$DIFF"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5 +printf "%s\n" "$DIFF" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$DIFF" && break +done +test -n "$DIFF" || DIFF="none" + + DIFF_FLAGS="" + flags="" + case $DIFF in #( + diff) : + flags="--strip-trailing-cr -u" ;; #( + none) : + as_fn_error $? "ocamltest requires a diff tool" "$LINENO" 5 ;; #( *) : - ocamltest='' ;; + ;; esac + for flag in ${flags}; do + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $DIFF supports $flag" >&5 +printf %s "checking whether $DIFF supports $flag... " >&6; }; + if $DIFF $DIFF_FLAGS $flag $0 $0 > /dev/null 2>&1 +then : + DIFF_FLAGS="$DIFF_FLAGS $flag" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + done +fi -if test x"$enable_flambda" = "xyes"; then : +if test x"$enable_flambda" = "xyes" +then : flambda=true - if test x"$enable_flambda_invariants" = "xyes"; then : + if test x"$enable_flambda_invariants" = "xyes" +then : flambda_invariants=true -else +else $as_nop flambda_invariants=false fi -else +else $as_nop flambda=false flambda_invariants=false fi -if test x"$enable_cmm_invariants" = "xyes"; then : +if $flambda +then : + CMX_MAGIC_NUMBER=Caml1999y034 + CMXA_MAGIC_NUMBER=Caml1999z034 +else $as_nop + CMX_MAGIC_NUMBER=Caml1999Y034 + CMXA_MAGIC_NUMBER=Caml1999Z034 +fi + +if test x"$enable_cmm_invariants" = "xyes" +then : cmm_invariants=true -else +else $as_nop cmm_invariants=false fi -if test x"$enable_flat_float_array" = "xno"; then : +if test x"$enable_flat_float_array" = "xno" +then : flat_float_array=false -else - $as_echo "#define FLAT_FLOAT_ARRAY 1" >>confdefs.h +else $as_nop + printf "%s\n" "#define FLAT_FLOAT_ARRAY 1" >>confdefs.h flat_float_array=true fi -if test x"$enable_function_sections" = "xno"; then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mmap supports MAP_STACK" >&5 +printf %s "checking whether mmap supports MAP_STACK... " >&6; } + if test "$cross_compiling" = yes +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no assumed" >&5 +printf "%s\n" "no assumed" >&6; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include + +int main (int argc, char *argv[]){ + void *block; + block = mmap (NULL, 4096, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_STACK, + -1, 0); + if (block == MAP_FAILED) + return 1; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + has_mmap_map_stack=true + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +if test x"$enable_mmap_map_stack" = "xyes" +then : + if test x"$has_mmap_map_stack" = "xtrue" +then : + case $target in #( + *-freebsd*) : + as_fn_error $? "mmap MAP_STACK not supported on FreeBSD" "$LINENO" 5 ;; #( + *) : + with_mmap_map_stack=true; + printf "%s\n" "#define USE_MMAP_MAP_STACK 1" >>confdefs.h + ;; +esac +else $as_nop + as_fn_error $? "mmap MAP_STACK requested but not found on $target" "$LINENO" 5 +fi + +else $as_nop + case $target in #( + *-openbsd*) : + with_mmap_map_stack=true; + printf "%s\n" "#define USE_MMAP_MAP_STACK 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using MAP_STACK on OpenBSD due to stack checking" >&5 +printf "%s\n" "$as_me: using MAP_STACK on OpenBSD due to stack checking" >&6;} ;; #( + *) : + with_mmap_map_stack=false ;; +esac + +fi + +oc_native_compflags='' + +if test x"$enable_function_sections" = "xno" +then : function_sections=false -else +else $as_nop case $arch in #( - amd64|i386|arm64) : + amd64|arm64) : # not supported on arm32, see issue #9124. case $target in #( *-cygwin*|*-mingw*|*-windows|*-apple-darwin*) : function_sections=false; - { $as_echo "$as_me:${as_lineno-$LINENO}: No support for function sections on $target." >&5 -$as_echo "$as_me: No support for function sections on $target." >&6;} ;; #( + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No support for function sections on $target." >&5 +printf "%s\n" "$as_me: No support for function sections on $target." >&6;} ;; #( *) : - case $ocaml_cv_cc_vendor in #( + case $ocaml_cc_vendor in #( gcc-0123-*|gcc-4-01234567) : function_sections=false; - { $as_echo "$as_me:${as_lineno-$LINENO}: Function sections are not - supported in GCC prior to version 4.8." >&5 -$as_echo "$as_me: Function sections are not - supported in GCC prior to version 4.8." >&6;} ;; #( + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Function sections are not + supported in GCC prior to version 4.8." >&5 +printf "%s\n" "$as_me: Function sections are not + supported in GCC prior to version 4.8." >&6;} ;; #( clang-012-*|clang-3-01234) : function_sections=false; - { $as_echo "$as_me:${as_lineno-$LINENO}: Function sections are not supported - in Clang prior to version 3.5." >&5 -$as_echo "$as_me: Function sections are not supported - in Clang prior to version 3.5." >&6;} ;; #( + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Function sections are not supported + in Clang prior to version 3.5." >&5 +printf "%s\n" "$as_me: Function sections are not supported + in Clang prior to version 3.5." >&6;} ;; #( gcc-*|clang-*) : function_sections=true; - internal_cflags="$internal_cflags -ffunction-sections"; - $as_echo "#define FUNCTION_SECTIONS 1" >>confdefs.h + oc_native_compflags='-function-sections' + internal_cflags="$internal_cflags -ffunction-sections"; + printf "%s\n" "#define FUNCTION_SECTIONS 1" >>confdefs.h ;; #( *) : function_sections=false; - { $as_echo "$as_me:${as_lineno-$LINENO}: Function sections are not supported by - $ocaml_cv_cc_vendor." >&5 -$as_echo "$as_me: Function sections are not supported by - $ocaml_cv_cc_vendor." >&6;} ;; #( - *) : - ;; -esac ;; #( - *) : - ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Function sections are not supported by + $ocaml_cc_vendor." >&5 +printf "%s\n" "$as_me: Function sections are not supported by + $ocaml_cc_vendor." >&6;} ;; +esac ;; esac ;; #( *) : function_sections=false ;; esac; - if test x"$function_sections" = "xfalse"; then : - if test x"$enable_function_sections" = "xyes"; then : + if test x"$function_sections" = "xfalse" +then : + if test x"$enable_function_sections" = "xyes" +then : as_fn_error $? "Function sections are not supported." "$LINENO" 5 -else - { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling function sections." >&5 -$as_echo "$as_me: Disabling function sections." >&6;} +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Disabling function sections." >&5 +printf "%s\n" "$as_me: Disabling function sections." >&6;} fi fi fi -if test x"$with_afl" = "xyes"; then : +if test x"$with_afl" = "xyes" +then : afl=true -else +else $as_nop afl=false fi -if test x"$enable_force_safe_string" = "xno"; then : - force_safe_string=false -else - $as_echo "#define CAML_SAFE_STRING 1" >>confdefs.h - - force_safe_string=true -fi - -if test x"$DEFAULT_STRING" = "xunsafe"; then : - default_safe_string=false -else - default_safe_string=true +# Enable debugging support +# TODO: add a --disable-debug-info configure option that disables debugging +# info for both C and OCaml +if test "$ccomptype" != "msvc" +then : + internal_cflags="-g $internal_cflags" fi oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" -ocamlc_cflags="$common_cflags $sharedlib_cflags \$(CFLAGS)" -ocamlc_cppflags="$common_cppflags \$(CPPFLAGS)" -cclibs="$cclibs $mathlib" +ocamlc_cflags="$ocamlc_cflags $common_cflags $sharedlib_cflags $CFLAGS" +ocamlc_cppflags="$common_cppflags $CPPFLAGS" case $host in #( - *-*-mingw32) : - bytecclibs="-lws2_32 -lversion" - nativecclibs="-lws2_32 -lversion" ;; #( + *-*-mingw32*) : + cclibs="$cclibs -lole32 -luuid -lversion" ;; #( *-pc-windows) : - bytecclibs="advapi32.lib ws2_32.lib version.lib" - nativecclibs="advapi32.lib ws2_32.lib version.lib" ;; #( + # For whatever reason, flexlink includes -ladvapi32 for mingw-w64, but + # doesn't include advapi32.lib for MSVC + cclibs="$cclibs ole32.lib uuid.lib advapi32.lib version.lib" ;; #( *) : - bytecclibs="$cclibs $DLLIBS $PTHREAD_LIBS" - nativecclibs="$cclibs $DLLIBS" ;; + ;; esac -if test x"$libdir" = x'${exec_prefix}/lib'; then : + + +if $tsan +then : + cclibs="$cclibs -fsanitize=thread" +fi + +if test x"$libdir" = x'${exec_prefix}/lib' +then : libdir="$libdir"/ocaml fi -if test x"$mandir" = x'${datarootdir}/man'; then : +if test x"$mandir" = x'${datarootdir}/man' +then : mandir='${prefix}/man' fi case $host in #( - *-*-mingw32|*-pc-windows) : + *-*-mingw32*|*-pc-windows) : case $WINDOWS_UNICODE_MODE in #( ansi) : windows_unicode=0 ;; #( @@ -17844,11 +20394,12 @@ esac ;; #( esac # Define default prefix correctly for the different Windows ports -if test x"$prefix" = "xNONE"; then : +if test x"$prefix" = "xNONE" +then : case $host in #( - i686-w64-mingw32) : + i686-w64-mingw32*) : prefix='C:/ocamlmgw' ;; #( - x86_64-w64-mingw32) : + x86_64-w64-mingw32*) : prefix='C:/ocamlmgw64' ;; #( i686-pc-windows) : prefix='C:/ocamlms' ;; #( @@ -17857,9 +20408,10 @@ if test x"$prefix" = "xNONE"; then : *) : ;; esac -else +else $as_nop if test x"$unix_or_win32" = "xwin32" \ - && test "$host_vendor-$host_os" != "$build_vendor-$build_os" ; then : + && test "$host_vendor-$host_os" != "$build_vendor-$build_os" +then : case $build in #( *-pc-cygwin) : prefix="$(LC_ALL=C.UTF-8 cygpath -m "$prefix")" ;; #( @@ -17873,42 +20425,51 @@ fi # but whose value is not guessed properly by configure # (all this should be understood and fixed) case $host in #( - *-*-mingw32) : - $as_echo "#define HAS_BROKEN_PRINTF 1" >>confdefs.h + *-*-mingw32*) : + printf "%s\n" "#define HAS_BROKEN_PRINTF 1" >>confdefs.h - $as_echo "#define HAS_STRERROR 1" >>confdefs.h + printf "%s\n" "#define HAS_STRERROR 1" >>confdefs.h - $as_echo "#define HAS_IPV6 1" >>confdefs.h + printf "%s\n" "#define HAS_IPV6 1" >>confdefs.h - $as_echo "#define HAS_NICE 1" >>confdefs.h + printf "%s\n" "#define HAS_NICE 1" >>confdefs.h ;; #( *-pc-windows) : - $as_echo "#define HAS_BROKEN_PRINTF 1" >>confdefs.h + printf "%s\n" "#define HAS_BROKEN_PRINTF 1" >>confdefs.h - $as_echo "#define HAS_STRERROR 1" >>confdefs.h + printf "%s\n" "#define HAS_STRERROR 1" >>confdefs.h - $as_echo "#define HAS_IPV6 1" >>confdefs.h + printf "%s\n" "#define HAS_IPV6 1" >>confdefs.h - $as_echo "#define HAS_NICE 1" >>confdefs.h + printf "%s\n" "#define HAS_NICE 1" >>confdefs.h ;; #( *-*-solaris*) : # This is required as otherwise floats are printed # as "Infinity" and "Inf" instead of the expected "inf" - $as_echo "#define HAS_BROKEN_PRINTF 1" >>confdefs.h + printf "%s\n" "#define HAS_BROKEN_PRINTF 1" >>confdefs.h ;; #( *) : ;; esac -if test x"$enable_stdlib_manpages" != "xno"; then : - stdlib_manpages=true -else - stdlib_manpages=false -fi - # Do not permanently cache the result of flexdll.h unset ac_cv_header_flexdll_h +# Evaluate install directories +# (this is needed for the OCaml configuration module) + + +# Just before config.status is generated, determine the final values for MKEXE, +# MKDLL, MKMAINDLL and MKEXE_VIA_CC. The final variables controlling these are: +# $mkexe - the linking command and munged CFLAGS + any extra flexlink flags +# $mkexe_exp: same as above but expanded +# $mkdll - the full linking command for DLLs +# $mkdll_exp: same as above but expanded +# $mkmaindll - the full linking command for main program in DLL +# $oc_ldflags $oc_dll_ldflags are handled as $(OC_LDFLAGS) and +# $(OC_DLL_LDFLAGS) and can be overridden in the build. + + cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -17936,8 +20497,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -17967,15 +20528,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -17989,8 +20550,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -18007,7 +20568,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -18019,12 +20580,158 @@ LTLIBOBJS=$ac_ltlibobjs + # Go through ac_subst_vars and put all the values to be substituted in + # $all_values. + QS='' + all_values='' + for name in $ac_subst_vars; do + eval "value=\$${name}" + all_values="$all_values $value" + done + + # Keep adding 'o' to $QS until |$QS} doesn't appear in any substitution. + test_string='' + while test "x${test_string}" != "x${all_values}"; do + test_string="$all_values" + eval "test_string=\"\${test_string##*\|${QS}\}}\"" + if test "x${test_string}" != "x${all_values}"; then + QS="o${QS}" + fi + done + +cclibs="$cclibs $mathlib $DLLIBS $PTHREAD_LIBS" + + saved_exec_prefix="$exec_prefix" + saved_prefix="$prefix" + if test "x$prefix" = "xNONE" +then : + prefix="$ac_default_prefix" +fi + if test "x$exec_prefix" = "xNONE" +then : + exec_prefix="$prefix" +fi + eval "exec_prefix=\"$exec_prefix\"" + eval "ocaml_bindir=\"$bindir\"" + eval "ocaml_libdir=\"$libdir\"" + if test x"$target_bindir" = 'x' +then : + target_bindir="$ocaml_bindir" +fi + if test x"$target_launch_method" = 'x' +then : + target_launch_method="$launch_method" +fi + prefix="$saved_prefix" + exec_prefix="$saved_exec_prefix" + + # Construct $mkexe + mkexe="$mkexe_cmd" + mkexe_exp="$mkexe_cmd_exp" + if test -n "$mkexe_cflags" +then : + mkexe="$mkexe $mkexe_cflags" + mkexe_exp="$mkexe_exp $common_cflags $CFLAGS" +fi + if test -n "$mkexe_extra_flags" +then : + mkexe="$mkexe $mkexe_extra_flags" + mkexe_exp="$mkexe_exp $mkexe_extra_flags" +fi + # If $mkexe_ldflags_prefix is given, apply it to $oc_ldflags and $oc_dllflags + # and ensure that LDFLAGS is passed using it. This is used for flexlink. where + # linker flags need to be prefixed with -link. + if test -n "$mkexe_ldflags_prefix" +then : + + if test -n "$mkexedebugflag" +then : + mkexedebugflag="${mkexe_ldflags_prefix}${mkexedebugflag}" +fi + mkdll_ldflags="" + if test -n "${LDFLAGS}" +then : + for flag in ${LDFLAGS}; do + mkdll_ldflags="${mkdll_ldflags} ${mkexe_ldflags_prefix}${flag}" + done + mkdll_ldflags_exp="$mkdll_ldflags" +fi + tmp_oc_ldflags="" + if test -n "${oc_ldflags}" +then : + for flag in ${oc_ldflags}; do + tmp_oc_ldflags="$tmp_oc_ldflags ${mkexe_ldflags_prefix}${flag}" + done + mkdll_ldflags_exp="$mkdll_ldflags_exp $tmp_oc_ldflags" +fi + tmp_oc_dll_ldflags="" + if test -n "${oc_dll_ldflags}" +then : + for flag in ${oc_dll_ldflags}; do + tmp_oc_dll_ldflags="$tmp_oc_dll_ldflags ${mkexe_ldflags_prefix}${flag}" + done + mkdll_ldflags_exp="$mkdll_ldflags_exp $tmp_oc_dll_ldflags" +fi + mkexe_ldflags=\ +"\$(addprefix ${mkexe_ldflags_prefix},\$(OC_LDFLAGS))${mkdll_ldflags}" + mkexe_ldflags_exp=\ +"${tmp_oc_ldflags} ${mkdll_ldflags}" + + mkdll_ldflags="\$(addprefix ${mkexe_ldflags_prefix},\$(OC_DLL_LDFLAGS)) \ +${mkdll_ldflags}" + +else $as_nop + + mkdll_ldflags='$(OC_DLL_LDFLAGS) $(LDFLAGS)' + mkdll_ldflags_exp="${oc_dll_ldflags}" + if test -n ${LDFLAGS} +then : + mkdll_ldflags_exp="$mkdll_ldflags_exp $LDFLAGS" +fi + mkexe_ldflags="\$(OC_LDFLAGS) \$(LDFLAGS)" + mkexe_ldflags_exp="${oc_ldflags} ${LDFLAGS}" + +fi + mkexe="$mkexe $mkexe_ldflags" + mkexe_exp="$mkexe_exp $mkexe_ldflags_exp" + mkdll="$mkdll $mkdll_ldflags" + mkdll_exp="$mkdll_exp $mkdll_ldflags_exp" + mkmaindll="$mkmaindll $mkdll_ldflags_exp" + mkmaindll_exp="$mkmaindll_exp $mkdll_ldflags_exp" + # Do similarly with $mkexe_via_cc_ldflags_prefix, but this is only needed for + # the msvc ports. + if test -n "$mkexe_via_cc_ldflags_prefix" +then : + + mkexe_via_cc_ldflags=\ +"\$(addprefix ${mkexe_via_cc_ldflags_prefix},\$(OC_LDFLAGS) \$(LDFLAGS))" + +else $as_nop + + mkexe_via_cc_ldflags='$(OC_LDFLAGS) $(LDFLAGS)' + +fi + # cl requires linker flags after the objects. + if test "$ccomptype" = 'msvc' +then : + mkexe_via_cc_ldflags=\ +"\$(OUTPUTEXE)\$(1) \$(2) $mkexe_via_cc_ldflags" +else $as_nop + mkexe_via_cc_ldflags=\ +"$mkexe_via_cc_ldflags \$(OUTPUTEXE)\$(1) \$(2)" +fi + if test -n "$mkexe_via_cc_extra_cmd" +then : + mkexe_via_cc_ldflags="$mkexe_via_cc_ldflags $mkexe_via_cc_extra_cmd" +fi + + : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -18047,14 +20754,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -18064,46 +20773,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -18112,13 +20821,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -18127,8 +20829,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -18140,30 +20846,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -18176,13 +20862,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -18209,18 +20896,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -18232,12 +20921,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -18268,7 +20958,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -18290,6 +20980,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -18303,6 +20997,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -18344,7 +21044,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -18353,7 +21053,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -18415,8 +21115,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by OCaml $as_me 4.14.1, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by OCaml $as_me 5.2.0, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -18442,6 +21142,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" +config_links="$ac_config_links" config_commands="$ac_config_commands" _ACEOF @@ -18472,6 +21173,9 @@ $config_files Configuration headers: $config_headers +Configuration links: +$config_links + Configuration commands: $config_commands @@ -18479,14 +21183,16 @@ Report bugs to . OCaml home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -OCaml config.status 4.14.1 -configured by $0, generated by GNU Autoconf 2.69, +OCaml config.status 5.2.0 +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -18525,15 +21231,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -18541,7 +21247,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -18550,7 +21256,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -18578,7 +21284,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -18592,7 +21298,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -18600,6 +21306,8 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # +export CYGWIN="\$CYGWIN\${CYGWIN:+ }winsymlinks:nativestrict" + export MSYS="\$MSYS\${MSYS:+ }winsymlinks:nativestrict" # The HP-UX ksh and POSIX shell print the target directory to stdout @@ -18883,6 +21591,11 @@ fi + launch_method='$(echo "$launch_method" | sed -e "s/'/'\"'\"'/g")' + target_launch_method=\ +'$(echo "$target_launch_method" | sed -e "s/'/'\"'\"'/g")' + ocaml_bindir='$(echo "$ocaml_bindir" | sed -e "s/'/'\"'\"'/g")' + target_bindir='$(echo "$target_bindir" | sed -e "s/'/'\"'\"'/g")' _ACEOF @@ -18897,11 +21610,26 @@ do "stdlib/sys.ml") CONFIG_FILES="$CONFIG_FILES stdlib/sys.ml" ;; "manual/src/version.tex") CONFIG_FILES="$CONFIG_FILES manual/src/version.tex" ;; "manual/src/html_processing/src/common.ml") CONFIG_FILES="$CONFIG_FILES manual/src/html_processing/src/common.ml" ;; - "tools/eventlog_metadata") CONFIG_FILES="$CONFIG_FILES tools/eventlog_metadata" ;; + "ocamltest/ocamltest_config.ml") CONFIG_FILES="$CONFIG_FILES ocamltest/ocamltest_config.ml" ;; + "utils/config.common.ml") CONFIG_FILES="$CONFIG_FILES utils/config.common.ml" ;; + "utils/config.generated.ml") CONFIG_FILES="$CONFIG_FILES utils/config.generated.ml" ;; + "runtime/caml/exec.h") CONFIG_HEADERS="$CONFIG_HEADERS runtime/caml/exec.h" ;; "runtime/caml/m.h") CONFIG_HEADERS="$CONFIG_HEADERS runtime/caml/m.h" ;; "runtime/caml/s.h") CONFIG_HEADERS="$CONFIG_HEADERS runtime/caml/s.h" ;; "runtime/caml/version.h") CONFIG_HEADERS="$CONFIG_HEADERS runtime/caml/version.h" ;; + "compilerlibs/META") CONFIG_FILES="$CONFIG_FILES compilerlibs/META" ;; + "otherlibs/dynlink/META") CONFIG_FILES="$CONFIG_FILES otherlibs/dynlink/META" ;; + "otherlibs/runtime_events/META") CONFIG_FILES="$CONFIG_FILES otherlibs/runtime_events/META" ;; + "stdlib/META") CONFIG_FILES="$CONFIG_FILES stdlib/META" ;; + "native-symlinks") CONFIG_COMMANDS="$CONFIG_COMMANDS native-symlinks" ;; + "ocamldoc/META") CONFIG_FILES="$CONFIG_FILES ocamldoc/META" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "otherlibs/unix/META") CONFIG_FILES="$CONFIG_FILES otherlibs/unix/META" ;; + "otherlibs/unix/unix.ml") CONFIG_LINKS="$CONFIG_LINKS otherlibs/unix/unix.ml:otherlibs/unix/unix_${unix_or_win32}.ml" ;; + "otherlibs/str/META") CONFIG_FILES="$CONFIG_FILES otherlibs/str/META" ;; + "shebang") CONFIG_COMMANDS="$CONFIG_COMMANDS shebang" ;; + "otherlibs/systhreads/META") CONFIG_FILES="$CONFIG_FILES otherlibs/systhreads/META" ;; + "ocamltest/ocamltest_unix.ml") CONFIG_LINKS="$CONFIG_LINKS ocamltest/ocamltest_unix.ml:${ocamltest_unix_mod}" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -18913,9 +21641,10 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_LINKS+y} || CONFIG_LINKS=$config_links + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -19212,7 +21941,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_HEADERS" -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" shift for ac_tag do @@ -19251,7 +21980,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -19259,17 +21988,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -19286,7 +22015,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -19310,9 +22039,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -19369,8 +22098,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -19413,9 +22142,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -19431,27 +22160,58 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +printf "%s\n" "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error $? "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $ac_source in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -19984,6 +22744,7 @@ _LT_EOF esac + ltmain=$ac_aux_dir/ltmain.sh @@ -19999,6 +22760,10 @@ ltmain=$ac_aux_dir/ltmain.sh chmod +x "$ofile" ;; + "shebang":C) printf '%s\n%s\000\n' "$launch_method" "$ocaml_bindir" \ + > stdlib/runtime.info + printf '%s\n%s\000\n' "$target_launch_method" "$target_bindir" \ + > stdlib/target_runtime.info ;; esac done # for ac_tag @@ -20033,7 +22798,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + diff --git a/configure.ac b/configure.ac index ebb8bbdb..0c9d6385 100644 --- a/configure.ac +++ b/configure.ac @@ -15,8 +15,8 @@ # Process this file with autoconf to produce a configure script. -# Require Autoconf 2.69 for repeatability in CI -AC_PREREQ([2.69]) +# Require Autoconf 2.71 for repeatability in CI +AC_PREREQ([2.71]) AC_INIT([OCaml], [OCAML__VERSION], [caml-list@inria.fr], @@ -30,14 +30,17 @@ AC_MSG_NOTICE([Configuring OCaml version AC_PACKAGE_VERSION]) ## Command-line arguments passed to configure CONFIGURE_ARGS="$*" -# Command to build executalbes -# In general this command is supposed to use the CFLAGs- and LDFLAGS- -# related variables (OC_CFLAGS and OC_LDFLAGS for ocaml-specific -# flags, CFLAGS and LDFLAGS for generic flags chosen by the user), but -# at the moment they are not taken into account on Windows, because -# flexlink, which is used to build executables on this platform, can -# not handle them. -mkexe="\$(CC) \$(OC_CFLAGS) \$(CFLAGS) \$(OC_LDFLAGS) \$(LDFLAGS)" +# Command to build executables +# Ultimately, MKEXE may build an executable using the C compiler or it may use +# a wrapper for a linker (i.e. flexlink). The build system must therefore not +# rely on $CFLAGS because these cannot be processed by flexlink (and are not +# passed) +mkexe_cmd='$(CC)' +mkexe_cflags='$(OC_CFLAGS) $(CFLAGS)' +mkexe_extra_flags='' +mkexe_via_cc_extra_cmd='' +mkexe_ldflags_prefix='' +mkexe_via_cc_ldflags_prefix='' # Flags for building executable files with debugging symbols mkexedebugflag="-g" @@ -49,15 +52,37 @@ ocamlc_cflags="" ocamlc_cppflags="" oc_ldflags="" oc_dll_ldflags="" +oc_exe_ldflags="" + +tsan=false +# Passed to the linker by ocamlopt when tsan is enabled +oc_tsan_cflags="-fsanitize=thread" +oc_tsan_cppflags="-DWITH_THREAD_SANITIZER" +tsan_distinguish_volatile_cflags="" + +# The C# compiler and its flags +CSC="" +CSCFLAGS="" + ostype="Unix" SO="so" toolchain="cc" -profinfo=false -profinfo_width=0 -extralibs= +reserved_header_bits=0 instrumented_runtime=false instrumented_runtime_libs="" bootstrapping_flexdll=false +flexdll_dir= +lib_dynlink=false +lib_str=false +lib_systhreads=false +lib_unix=false +optional_libraries='' +optional_bytecode_tools='' +optional_native_tools='' +ocamltest_libunix=None +ocamltest_unix_impl="dummy" +unix_library="" +unix_directory="" # Information about the package @@ -71,6 +96,7 @@ AC_CONFIG_AUX_DIR([build-aux]) AC_SUBST([CONFIGURE_ARGS]) AC_SUBST([native_compiler]) +AC_SUBST([default_build_target]) AC_SUBST([VERSION], [AC_PACKAGE_VERSION]) AC_SUBST([OCAML_DEVELOPMENT_VERSION], [OCAML__DEVELOPMENT_VERSION]) AC_SUBST([OCAML_RELEASE_EXTRA], [OCAML__RELEASE_EXTRA]) @@ -79,78 +105,130 @@ AC_SUBST([OCAML_VERSION_MINOR], [OCAML__VERSION_MINOR]) AC_SUBST([OCAML_VERSION_PATCHLEVEL], [OCAML__VERSION_PATCHLEVEL]) AC_SUBST([OCAML_VERSION_EXTRA], [OCAML__VERSION_EXTRA]) AC_SUBST([OCAML_VERSION_SHORT], [OCAML__VERSION_SHORT]) +AC_DEFINE([MAGIC_NUMBER_PREFIX], ["][MAGIC_NUMBER__PREFIX]["]) +AC_DEFINE([MAGIC_NUMBER_VERSION], ["][MAGIC_NUMBER__VERSION]["]) +AC_SUBST([MAGIC_NUMBER_LENGTH], [MAGIC_NUMBER__LENGTH]) +AC_DEFINE([EXEC_MAGIC_LENGTH], [MAGIC_NUMBER__LENGTH]) +AC_DEFINE([EXEC_FORMAT], ["][EXEC__FORMAT]["]) +AC_SUBST([EXEC_MAGIC_NUMBER], [EXEC__MAGIC_NUMBER]) +AC_SUBST([CMI_MAGIC_NUMBER], [CMI__MAGIC_NUMBER]) +AC_SUBST([CMO_MAGIC_NUMBER], [CMO__MAGIC_NUMBER]) +AC_SUBST([CMA_MAGIC_NUMBER], [CMA__MAGIC_NUMBER]) +AC_SUBST([CMX_MAGIC_NUMBER]) +AC_SUBST([CMXA_MAGIC_NUMBER]) +AC_SUBST([AST_IMPL_MAGIC_NUMBER], [AST_IMPL__MAGIC_NUMBER]) +AC_SUBST([AST_INTF_MAGIC_NUMBER], [AST_INTF__MAGIC_NUMBER]) +AC_SUBST([CMXS_MAGIC_NUMBER], [CMXS__MAGIC_NUMBER]) +AC_SUBST([CMT_MAGIC_NUMBER], [CMT__MAGIC_NUMBER]) +AC_SUBST([LINEAR_MAGIC_NUMBER], [LINEAR__MAGIC_NUMBER]) AC_SUBST([CC]) +AC_SUBST([DIFF_FLAGS]) +AC_SUBST([CSC]) +AC_SUBST([CSCFLAGS]) # Note: This is present for the flexdll bootstrap where it exposed as the old # TOOLPREF variable. It would be better if flexdll where updated to require # WINDRES instead. -AC_SUBST([DIRECT_CPP]) AC_SUBST([ac_tool_prefix]) AC_SUBST([exeext]) AC_SUBST([OBJEXT]) AC_SUBST([libext]) AC_SUBST([S]) +AC_SUBST([runtime_asm_objects]) AC_SUBST([SO]) AC_SUBST([arch]) +AC_SUBST([arch_specific_SOURCES]) AC_SUBST([arch64]) AC_SUBST([model]) AC_SUBST([system]) +AC_SUBST([native_cflags]) +AC_SUBST([native_cppflags]) AC_SUBST([systhread_support]) +AC_SUBST([ocamlsrcdir]) AC_SUBST([unix_or_win32]) -AC_SUBST([unixlib]) +AC_SUBST([ln]) +AC_SUBST([ocamlyacc_wstr_module]) AC_SUBST([outputexe]) AC_SUBST([outputobj]) AC_SUBST([syslib]) -AC_SUBST([extralibs]) AC_SUBST([fpic]) AC_SUBST([mkexe]) +AC_SUBST([mkexe_exp]) AC_SUBST([mkexedebugflag]) +AC_SUBST([mkexe_extra_flags]) +AC_SUBST([mkexe_via_cc_ldflags]) AC_SUBST([ccomptype]) AC_SUBST([toolchain]) AC_SUBST([oc_cflags]) +AC_SUBST([tsan]) +AC_SUBST([tsan_native_runtime_c_sources]) AC_SUBST([oc_cppflags]) AC_SUBST([oc_ldflags]) AC_SUBST([oc_dll_ldflags]) -AC_SUBST([bytecclibs]) -AC_SUBST([nativecclibs]) +AC_SUBST([oc_exe_ldflags]) +AC_SUBST([cclibs]) +AC_SUBST([native_ldflags]) +AC_SUBST([zstd_libs]) AC_SUBST([ocamlc_cflags]) AC_SUBST([ocamlc_cppflags]) -AC_SUBST([flexdir]) +AC_SUBST([flexdll_source_dir]) AC_SUBST([bootstrapping_flexdll]) -AC_SUBST([long_shebang]) +AC_SUBST([flexdll_dir]) +AC_SUBST([flexlink_flags]) AC_SUBST([shebangscripts]) AC_SUBST([AR]) AC_SUBST([mklib]) AC_SUBST([supports_shared_libraries]) AC_SUBST([natdynlink]) AC_SUBST([natdynlinkopts]) +AC_SUBST([natdynlink_archive]) AC_SUBST([cmxs]) AC_SUBST([debug_runtime]) AC_SUBST([instrumented_runtime]) AC_SUBST([instrumented_runtime_libs]) AC_SUBST([has_monotonic_clock]) AC_SUBST([otherlibraries]) +AC_SUBST([lib_dynlink]) +AC_SUBST([lib_runtime_events]) +AC_SUBST([lib_str]) +AC_SUBST([lib_systhreads]) +AC_SUBST([lib_unix]) +AC_SUBST([optional_libraries]) +AC_SUBST([optional_bytecode_tools]) +AC_SUBST([optional_native_tools]) +AC_SUBST([ocamltest_CPP]) +AC_SUBST([ocamltest_libunix]) +AC_SUBST([unix_library]) +AC_SUBST([unix_directory]) AC_SUBST([cc_has_debug_prefix_map]) AC_SUBST([as_has_debug_prefix_map]) AC_SUBST([with_debugger]) # TODO: rename this variable -AC_SUBST([with_camltex]) -AC_SUBST([ocamldoc]) +AC_SUBST([build_ocamldebug]) +AC_SUBST([build_ocamltex]) +AC_SUBST([build_ocamldoc]) +AC_SUBST([ocamldoc_target]) +AC_SUBST([ocamldoc_opt_target]) +AC_SUBST([with_ocamldoc]) AC_SUBST([documentation_tool]) AC_SUBST([documentation_tool_cmd]) +AC_SUBST([build_ocamltest]) AC_SUBST([ocamltest]) +AC_SUBST([ocamltest_target]) +AC_SUBST([ocamltest_opt_target]) AC_SUBST([ASPP]) AC_SUBST([endianness]) AC_SUBST([AS]) AC_SUBST([asm_cfi_supported]) AC_SUBST([sharedlib_cflags]) AC_SUBST([rpath]) -AC_SUBST([mksharedlib]) +AC_SUBST([mkdll]) +AC_SUBST([mkdll_exp]) AC_SUBST([mkmaindll]) +AC_SUBST([mkmaindll_exp]) AC_SUBST([mksharedlibrpath]) AC_SUBST([install_bytecode_programs]) AC_SUBST([install_source_artifacts]) AC_SUBST([install_ocamlnat]) -AC_SUBST([profinfo]) -AC_SUBST([profinfo_width]) +AC_SUBST([reserved_header_bits]) AC_SUBST([frame_pointers]) AC_SUBST([flambda]) AC_SUBST([flambda_invariants]) @@ -158,16 +236,19 @@ AC_SUBST([cmm_invariants]) AC_SUBST([windows_unicode]) AC_SUBST([flat_float_array]) AC_SUBST([function_sections]) +AC_SUBST([oc_native_compflags]) AC_SUBST([afl]) -AC_SUBST([force_safe_string]) -AC_SUBST([default_safe_string]) AC_SUBST([flexdll_chain]) -AC_SUBST([flexlink_flags]) +AC_SUBST([mkdll_ldflags_exp]) +AC_SUBST([mkexe_ldflags_exp]) AC_SUBST([PACKLD]) -AC_SUBST([stdlib_manpages]) +AC_SUBST([build_libraries_manpages]) AC_SUBST([compute_deps]) -AC_SUBST([naked_pointers]) -AC_SUBST([naked_pointers_checker]) +AC_SUBST([ocaml_bindir]) +AC_SUBST([ocaml_libdir]) +AC_SUBST([QS]) +AC_SUBST([ar_supports_response_files]) +AC_SUBST([target_bindir]) ## Generated files @@ -176,10 +257,17 @@ AC_CONFIG_FILES([Makefile.config]) AC_CONFIG_FILES([stdlib/sys.ml]) AC_CONFIG_FILES([manual/src/version.tex]) AC_CONFIG_FILES([manual/src/html_processing/src/common.ml]) -AC_CONFIG_FILES([tools/eventlog_metadata]) +AC_CONFIG_FILES([ocamltest/ocamltest_config.ml]) +AC_CONFIG_FILES([utils/config.common.ml]) +AC_CONFIG_FILES([utils/config.generated.ml]) +AC_CONFIG_HEADERS([runtime/caml/exec.h]) AC_CONFIG_HEADERS([runtime/caml/m.h]) AC_CONFIG_HEADERS([runtime/caml/s.h]) AC_CONFIG_HEADERS([runtime/caml/version.h]) +AC_CONFIG_FILES([compilerlibs/META]) +AC_CONFIG_FILES([otherlibs/dynlink/META]) +AC_CONFIG_FILES([otherlibs/runtime_events/META]) +AC_CONFIG_FILES([stdlib/META]) # Definitions related to the version of OCaml AC_DEFINE([OCAML_VERSION_MAJOR], [OCAML__VERSION_MAJOR]) @@ -191,12 +279,37 @@ m4_if([OCAML__VERSION_EXTRA],[], [], AC_DEFINE([OCAML_VERSION], [OCAML__VERSION_NUMBER]) AC_DEFINE([OCAML_VERSION_STRING], ["][OCAML__VERSION]["]) +# Works out how many "o"s are needed in quoted strings +AC_CONFIG_COMMANDS_PRE(OCAML_QUOTED_STRING_ID) + # Checks for system types AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CANONICAL_TARGET +# Ensure that AC_CONFIG_LINKS will either create symlinks which are compatible +# with native Windows (i.e. NTFS symlinks, not WSL or Cygwin-emulated ones) or +# use its fallback mechanisms. Native Windows versions of ocamlc/ocamlopt cannot +# interpret either WSL or Cygwin-emulated symlinks. +AS_CASE([$host], + [*-pc-windows|*-w64-mingw32*], + [AC_CONFIG_COMMANDS([native-symlinks], [], + [export CYGWIN="\$CYGWIN\${CYGWIN:+ }winsymlinks:nativestrict" + export MSYS="\$MSYS\${MSYS:+ }winsymlinks:nativestrict"])]) + +# Systems that are known not to work, even in bytecode only. + +AS_CASE([$host], + [*-pc-windows], + [AC_MSG_ERROR([the MSVC compiler is not supported currently], 69)], + [i386-*-solaris*], + [AC_MSG_ERROR([Building for 32 bits target is not supported. \ +If your host is 64 bits, you can try with './configure CC="gcc -m64"' \ +(or "cc -m64" if you don't have GCC).])]) + +# MSVC special case + AS_CASE([$host], [*-pc-windows], [CC=cl @@ -205,16 +318,21 @@ AS_CASE([$host], SO=dll outputexe=-Fe syslib='$(1).lib'], - [i386-*-solaris*], - [AC_MSG_ERROR([Building for 32 bits target is not supported. \ -If your host is 64 bits, you can try with './configure CC="gcc -m64"' \ -(or "cc -m64" if you don't have GCC).])], [ccomptype=cc S=s SO=so - outputexe='-o $(EMPTY)' + outputexe='-o ' syslib='-l$(1)']) +AC_CHECK_PROG([csc],[csc],[csc]) +AS_IF([test -n "$csc"], + [AS_CASE([$host], + [*-*-mingw32*|*-pc-windows], + [CSC=csc + CSCFLAGS="/nologo /nowarn:1668" + AS_CASE([$host_cpu], [i*86], [CSCFLAGS="$CSCFLAGS /platform:x86"])], + [AC_MSG_WARN([Mono is not yet supported - C sharp tests disabled])])]) + # Environment variables that are taken into account AC_ARG_VAR([AS], [which assembler to use]) @@ -227,11 +345,17 @@ AC_ARG_ENABLE([debug-runtime], [AS_HELP_STRING([--disable-debug-runtime], [do not build runtime with debugging support])]) +AC_ARG_ENABLE([ocamldebug], + [AS_HELP_STRING([--enable-ocamldebug], + [build ocamldebug @<:@default=auto@:>@])], + [], + [enable_ocamldebug=auto]) + AC_ARG_ENABLE([debugger], [AS_HELP_STRING([--enable-debugger], - [build the debugger @<:@default=auto@:>@])], - [], - [enable_debugger=auto]) + [alias for --enable-ocamldebug])], + [enable_ocamldebug=$enableval], + []) AC_ARG_ENABLE([dependency-generation], [AS_HELP_STRING([--disable-dependency-generation], @@ -249,18 +373,35 @@ AC_ARG_ENABLE([instrumented-runtime], [enable_instrumented_runtime=auto]) AC_ARG_ENABLE([vmthreads], [], - [AC_MSG_ERROR([The vmthreads library is no longer available. \ -It was deleted in OCaml 4.09.])], + [AS_IF([test "x$enableval" != 'xno'], + [AC_MSG_ERROR(m4_normalize([The vmthreads library is no longer available. + It was deleted in OCaml 4.09.]))])], []) AC_ARG_ENABLE([systhreads], [AS_HELP_STRING([--disable-systhreads], [disable the Win32/POSIX threads library])]) +AC_ARG_ENABLE([tsan], + [AS_HELP_STRING([--enable-tsan], + [enable ThreadSanitizer support @<:@default=no@:>@])], + [], + [enable_tsan=no]) + +# Preprocessor and linker flags for libunwind (currently only used when TSan is +# enabled) + +AC_ARG_VAR([LIBUNWIND_CPPFLAGS], + [C preprocessor flags for libunwind (e.g. -I)]) + +AC_ARG_VAR([LIBUNWIND_LDFLAGS], + [linker flags for libunwind (e.g. -L]) + AC_ARG_ENABLE([graph-lib], [], - [AC_MSG_ERROR([The graphics library is no longer distributed with OCaml \ -since version 4.09. It is now distributed as a separate "graphics" package: \ -https://github.com/ocaml/graphics])], + [AS_IF([test "x$enableval" != 'xno'], + [AC_MSG_ERROR(m4_normalize([The graphics library is no longer distributed + with OCaml since version 4.09. It is now distributed as a separate + "graphics" package: https://github.com/ocaml/graphics]))])], []) AC_ARG_ENABLE([str-lib], @@ -271,15 +412,17 @@ AC_ARG_ENABLE([unix-lib], [AS_HELP_STRING([--disable-unix-lib], [do not build the unix library])]) -AC_ARG_ENABLE([bigarray-lib], - [AS_HELP_STRING([--disable-bigarray-lib], - [do not build the legacy separate bigarray library])]) +AC_ARG_ENABLE([bigarray-lib], [], + [AS_IF([test "x$enableval" != 'xno'], + [AC_MSG_ERROR(m4_normalize([The bigarray-lib option was deleted in OCaml + 5.0, as the Bigarray module is now part of the standard library.]))])], + []) AC_ARG_ENABLE([ocamldoc], [AS_HELP_STRING([--disable-ocamldoc], [do not build the ocamldoc documentation system])], [], - [ocamldoc=auto]) + [enable_ocamldoc='auto']) AC_ARG_WITH([odoc], [AS_HELP_STRING([--with-odoc], @@ -288,7 +431,7 @@ AC_ARG_WITH([odoc], AC_ARG_ENABLE([ocamltest], [AS_HELP_STRING([--disable-ocamltest], - [do not build the ocamltest driver])]) + [do not build ocamltest])]) AC_ARG_ENABLE([native-toplevel], [AS_HELP_STRING([--enable-native-toplevel], @@ -298,16 +441,19 @@ AC_ARG_ENABLE([frame-pointers], [AS_HELP_STRING([--enable-frame-pointers], [use frame pointers in runtime and generated code])]) -AC_ARG_ENABLE([naked-pointers], - [AS_HELP_STRING([--disable-naked-pointers], - [do not allow naked pointers])]) +AC_ARG_ENABLE([naked-pointers], [], + [AS_IF([test "x$enableval" != 'xno'], + [AC_MSG_ERROR([Naked pointers were prohibited in OCaml 5.0.])])], + []) -AC_ARG_ENABLE([naked-pointers-checker], - [AS_HELP_STRING([--enable-naked-pointers-checker], - [enable the naked pointers checker])]) +AC_ARG_ENABLE([naked-pointers-checker], [], + [AS_IF([test "x$enableval" != 'xno'], + [AC_MSG_ERROR([The naked pointers checker was removed in OCaml 5.0.])])], + []) AC_ARG_ENABLE([spacetime], [], - [AC_MSG_ERROR([spacetime profiling was deleted in OCaml 4.12.])], + [AS_IF([test "x$enableval" != 'xno'], + [AC_MSG_ERROR([spacetime profiling was deleted in OCaml 4.12.])])], []) AC_ARG_ENABLE([cfi], @@ -344,23 +490,31 @@ AC_ARG_ENABLE([cmm-invariants], AC_ARG_WITH([target-bindir], [AS_HELP_STRING([--with-target-bindir], - [location of binary programs on target system])]) + [location of the runtime binaries on the target system])], + [target_bindir=$withval], + [target_bindir='']) + +AC_ARG_WITH([target-sh], + [AS_HELP_STRING([--with-target-sh], + [location of Posix sh on the target system])], + [AS_IF([test x"$withval" = 'xno'], + [target_launch_method='exe'], + [target_launch_method="$withval"])], + [target_launch_method='']) AC_ARG_ENABLE([reserved-header-bits], [AS_HELP_STRING([--enable-reserved-header-bits=BITS], - [reserve BITS (between 0 and 31) bits in block headers for profiling info])], + [reserve BITS (between 0 and 31) bits in block headers])], [AS_CASE([$enable_reserved_header_bits], - [0], - [with_profinfo=false - profinfo_width=0], - [[[1-9]]|[[1-2]][[0-9]]|3[[0-1]]], - [with_profinfo=true - profinfo_width="$enable_reserved_header_bits"], - [AC_MSG_ERROR([invalid argument to --enable-reserved-header-bits])])]) + [[[0-9]]|[[1-2]][[0-9]]|3[[0-1]]], + [reserved_header_bits=$enable_reserved_header_bits], + [AC_MSG_ERROR([invalid argument to --enable-reserved-header-bits])])]) AC_ARG_ENABLE([stdlib-manpages], [AS_HELP_STRING([--disable-stdlib-manpages], - [do not build or install the library man pages])]) + [do not build or install the library man pages])], + [], + [enable_stdlib_manpages='auto']) AC_ARG_ENABLE([warn-error], [AS_HELP_STRING([--enable-warn-error], @@ -369,37 +523,14 @@ AC_ARG_ENABLE([warn-error], AC_ARG_VAR([WINDOWS_UNICODE_MODE], [how to handle Unicode under Windows: ansi, compatible]) -# There are two configure-time string safety options, -# --(enable|disable)-force-safe-string and -# DEFAULT_STRING=safe|unsafe that -# interact with a compile-time (un)safe-string option. -# -# If --enable-force-safe-string is set at configure time, then the compiler -# will always enforce that string and bytes are distinct: the -# compile-time -unsafe-string option is disabled. This lets us -# assume pervasive string immutability, for code optimizations and -# in the C layer. -# -# If --disable-force-safe-string is set at configure-time, the compiler -# will use the compile-time (un)safe-string option to decide whether -# string and bytes are compatible on a per-file basis. The -# configuration variable DEFAULT_STRING=safe|unsafe decides which -# setting will be chosen by default, if no compile-time option is -# explicitly passed. -# -# The configure-time behavior of OCaml 4.05 and older was equivalent -# to --disable-force-safe-string DEFAULT_STRING=unsafe. With OCaml 4.06 -# and older was equivalent to --disable-force-safe-string DEFAULT_STRING=safe. -# With OCaml 4.10 and later use --enable-force-safe-string DEFAULT_STRING=safe. -# We expect the --disable-force-safe-string and DEFAULT_STRING=unsafe options -# to be removed in the future. - -AC_ARG_ENABLE([force-safe-string], - [AS_HELP_STRING([--disable-force-safe-string], - [do not force strings to be safe])]) - -AC_ARG_VAR([DEFAULT_STRING], - [whether strings should be safe (default) or unsafe]) +AC_ARG_ENABLE([force-safe-string], [], + [AS_IF([test "x$enableval" = 'xno'], + [AC_MSG_ERROR([Support for mutable strings was removed in OCaml 5.0.])])], + []) + +AC_ARG_VAR([DEFAULT_STRING], []) +AS_IF([test x"$DEFAULT_STRING" = "xunsafe"], + [AC_MSG_ERROR([Support for mutable strings was removed in OCaml 5.0.])]) AC_ARG_ENABLE([flat-float-array], [AS_HELP_STRING([--disable-flat-float-array], @@ -411,6 +542,10 @@ AC_ARG_ENABLE([function-sections], [], [enable_function_sections=auto]) +AC_ARG_ENABLE([mmap-map-stack], + [AS_HELP_STRING([--enable-mmap-map-stack], + [use mmap to allocate stacks instead of malloc])]) + AC_ARG_WITH([afl], [AS_HELP_STRING([--with-afl], [use the AFL fuzzer])]) @@ -420,19 +555,36 @@ AC_ARG_WITH([flexdll], [bootstrap FlexDLL from the given sources])], [AS_IF([test x"$withval" = 'xyes'],[with_flexdll=flexdll])]) +AC_ARG_WITH([zstd], + [AS_HELP_STRING([--without-zstd], + [disable compression of compilation artefacts])]) + AS_IF([test x"$enable_unix_lib" = "xno"], - [AS_IF([test x"$enable_debugger" = "xyes"], - [AC_MSG_ERROR([replay debugger requires the unix library])], - [enable_debugger="no"]) - AS_IF([test x"$enable_bigarray_lib" = "xyes"], - [AC_MSG_ERROR([legacy bigarray library requires the unix library])])]) + [AS_IF([test x"$enable_ocamldebug" = "xyes"], + [AC_MSG_ERROR([ocamldebug requires the unix library])], + [enable_ocamldebug="no"])]) -AS_IF([test x"$enable_unix_lib" = "xno" -o x"$enable_str_lib" = "xno"], +AS_IF([test x"$enable_unix_lib" = "xno" || test x"$enable_str_lib" = "xno"], [AS_IF([test x"$enable_ocamldoc" = "xyes"], [AC_MSG_ERROR([ocamldoc requires the unix and str libraries])], [enable_ocamldoc="no" - with_camltex=""])], - [with_camltex="true"]) + build_ocamltex=false])], + [build_ocamltex=true]) + +AS_IF([test x"$enable_ocamldoc" = "xno"], + [AS_IF([test x"$enable_stdlib_manpages" = "xyes"], + [AC_MSG_ERROR([--enable-stdlib-manpages requires ocamldoc])]) + ocamldoc_target="" + ocamldoc_opt_target="" + with_ocamldoc="" + enable_stdlib_manpages=no + build_ocamldoc=false], + [ocamldoc_target=ocamldoc + ocamldoc_opt_target=ocamldoc.opt + with_ocamldoc=ocamldoc + build_ocamldoc=true + optional_libraries="$optional_libraries ocamldoc/odoc_info" + AC_CONFIG_FILES([ocamldoc/META])]) # Initialization of libtool # Allow the MSVC linker to be found even if ld isn't installed. @@ -481,6 +633,7 @@ AS_CASE([$host], # So we let them do, at the moment [*-pc-windows], [ + mkexe_via_cc_extra_cmd=' && $(call MERGEMANIFESTEXE,$(1))' libext=lib AR="" AS_IF([test "$host_cpu" = "x86_64" ], @@ -510,36 +663,79 @@ OCAML_HOST_IS_EXECUTABLE # We thus figure out how to invoke the C preprocessor directly but # let the CPP variable untouched, except for the MSVC port where we set it # manually to make sure the backward compatibility is preserved -AS_CASE([$ocaml_cv_cc_vendor], +AS_CASE([$ocaml_cc_vendor], [xlc-*], - [CPP="$CC -E -qnoppline"], # suppress incompatible XLC line directives + [CPP="$CC -E -qnoppline" # suppress incompatible XLC line directives + ocamltest_CPP="$CPP"], [sunc-*], - [CPP="$CC -E -Qn"], # suppress generation of Sun PRO ident string + [CPP="$CC -E -Qn" # suppress generation of Sun PRO ident string + ocamltest_CPP="$CPP"], [msvc-*], - [CPP="$CC -nologo -EP"]) + [CPP="$CC -nologo -EP" + ocamltest_CPP="$CPP 2> nul"], + [CPP="$CC -E -P" + ocamltest_CPP="$CPP"]) + +# Absolute path to the toplevel source directory + +# A sentinel character (X) is added at the end of the directory name +# and then removed, in case the directory name finishes with an odd character. +# (The $(...) construct strips trailing \n characters.) +# Also, it is important to use `printf` rather than `echo` because the +# behaviour of `echo` is indeterminate and uncontrollable if the +# absolute path contains backslashes, which will definitely be the case +# on Windows +# See https://lists.gnu.org/archive/html/autoconf/2019-07/msg00002.html +# for the detailed explanation. + +ocamlsrcdir=$(unset CDPATH; cd -- "$srcdir" && printf %sX "$PWD") || fail +ocamlsrcdir=${ocamlsrcdir%X} + +# Whether ar supports @FILE arguments + +AS_CASE([lt_cv_ar_at_file], + [no], [ar_supports_response_files=false], + [ar_supports_response_files=true]) # Libraries to build depending on the host AS_CASE([$host], - [*-*-mingw32|*-pc-windows], + [*-*-mingw32*|*-pc-windows], [unix_or_win32="win32" - unixlib="win32unix" - ], + ln='cp -pf' + ocamltest_libunix="Some false" + ocamlsrcdir="$(LC_ALL=C.UTF-8 cygpath -w -- "$ocamlsrcdir")" + ocamlyacc_wstr_module="yacc/wstr"], [unix_or_win32="unix" - unixlib="unix"]) + ln='ln -sf' + ocamltest_libunix="Some true" + ocamlyacc_wstr_module=""]) + AS_CASE([$host], - [*-*-cygwin*|*-*-mingw32|*-pc-windows], + [*-*-cygwin*|*-*-mingw32*|*-pc-windows], [exeext=".exe"], [exeext='']) -otherlibraries="dynlink" +otherlibraries="dynlink runtime_events" +lib_dynlink=true +lib_runtime_events=true AS_IF([test x"$enable_unix_lib" != "xno"], [enable_unix_lib=yes - AS_IF([test x"$enable_bigarray_lib" != "xno"], - [otherlibraries="$otherlibraries $unixlib bigarray"], - [otherlibraries="$otherlibraries $unixlib"])]) + AC_CONFIG_FILES([otherlibs/unix/META]) + otherlibraries="$otherlibraries unix" + lib_unix=true + AC_CONFIG_LINKS([ + otherlibs/unix/unix.ml:otherlibs/unix/unix_${unix_or_win32}.ml + ]) + ocamltest_unix_impl="real" + unix_directory="otherlibs/unix" + unix_library="${unix_directory}/unix"], + [ocamltest_libunix="None"]) + AS_IF([test x"$enable_str_lib" != "xno"], - [otherlibraries="$otherlibraries str"]) + [otherlibraries="$otherlibraries str" + lib_str=true + AC_CONFIG_FILES([otherlibs/str/META])]) # Checks for system services @@ -547,25 +743,43 @@ AS_IF([test x"$enable_str_lib" != "xno"], ## TODO: have two values, one for host and one for target AC_SYS_INTERPRETER -long_shebang=false -AS_IF( - [test "x$interpval" = "xyes"], - [AS_CASE([$host], - [*-cygwin|*-*-mingw32|*-pc-windows], - [shebangscripts=false], - [shebangscripts=true - prev_exec_prefix="$exec_prefix" - AS_IF([test "x$exec_prefix" = "xNONE"],[exec_prefix="$prefix"]) - eval "expanded_bindir=\"$bindir\"" - exec_prefix="$prev_exec_prefix" - # Assume maximum shebang is 128 chars; less #!, /ocamlrun, an optional - # 1 char suffix and the \0 leaving 115 characters - AS_IF([test "${#expanded_bindir}" -gt 115],[long_shebang=true]) - ] - )], - [shebangscripts=false] +shebangscripts=false +launch_method='exe' +AS_IF([test "x$interpval" = "xyes"], + [AS_CASE([$host], + [*-cygwin], + [# Cygwin supports shebangs, which we use for the compiler itself, but + # partially for legacy, and partially so that executables can be easily + # run from outside Cygwin, the executables ocamlc and ocamlopt produce do + # not use shebang scripts + shebangscripts=true + launch_method='sh' + AS_IF([test x"$target_launch_method" = 'x'], + [target_launch_method='exe'])], + [*-*-mingw32*|*-pc-windows], [], + [shebangscripts=true + launch_method='sh'] + )] ) +# stdlib/runtime.info and stdlib/target_runtime.info are generated by commands +# in config.status, rather than by the .in mechanism, since the latter cannot +# reliably process binary files. +AC_CONFIG_COMMANDS([shebang], + [printf '%s\n%s\000\n' "$launch_method" "$ocaml_bindir" \ + > stdlib/runtime.info + printf '%s\n%s\000\n' "$target_launch_method" "$target_bindir" \ + > stdlib/target_runtime.info], +dnl These declarations are put in a here-document in configure, so the command +dnl in '$(...)' _is_ evaluated as the content is written to config.status (by +dnl standard interpretation of a here-document). The sed commands quote any +dnl nefarious single quotes which may appear in any of the strings. + [launch_method='$(echo "$launch_method" | sed -e "s/'/'\"'\"'/g")' + target_launch_method=\ +'$(echo "$target_launch_method" | sed -e "s/'/'\"'\"'/g")' + ocaml_bindir='$(echo "$ocaml_bindir" | sed -e "s/'/'\"'\"'/g")' + target_bindir='$(echo "$target_bindir" | sed -e "s/'/'\"'\"'/g")']) + # Are we building a cross-compiler AS_IF( @@ -583,20 +797,26 @@ AS_IF( ## Determine which flags to use for the C compiler -AS_CASE([$ocaml_cv_cc_vendor], +AS_CASE([$ocaml_cc_vendor], [xlc-*], - [outputobj='-o $(EMPTY)' + [outputobj='-o ' warn_error_flag='' cc_warnings='-qflag=i:i'], # all warnings enabled [sunc-*], - [outputobj='-o $(EMPTY)'; cc_warnings=""], + [outputobj='-o '; cc_warnings=""], [msvc-*], [outputobj='-Fo' warn_error_flag='-WX' cc_warnings=''], - [outputobj='-o $(EMPTY)' + [outputobj='-o ' warn_error_flag='-Werror' - cc_warnings='-Wall -Wdeclaration-after-statement']) + cc_warnings="-Wall -Wint-conversion -Wstrict-prototypes \ +-Wold-style-definition -Wundef"]) + +# Use -Wold-style-declaration if supported +AX_CHECK_COMPILE_FLAG([-Wold-style-declaration], + [cc_warnings="$cc_warnings -Wold-style-declaration"], [], + [$warn_error_flag]) AS_CASE([$enable_warn_error,OCAML__DEVELOPMENT_VERSION], [yes,*|,true], @@ -607,91 +827,58 @@ AS_CASE([$enable_warn_error,OCAML__DEVELOPMENT_VERSION], # - strict no-overflow conditions on signed integer arithmetic # (the OCaml runtime assumes Java-style behavior of signed integer arith.) # Concerning optimization level, -O3 is somewhat risky, so take -O2. -# Concerning language version, gnu99 is ISO C99 plus GNU extensions -# that are often used in standard headers. Older GCC versions -# defaults to gnu89, which is not C99. Clang defaults to gnu99 or -# gnu11, which is fine. - -# Note: the vendor macro can not recognize MinGW because it calls the -# C preprocessor directly so no compiler specific macro like __MING32__ -# is defined. We thus catch MinGW first by looking at host and examine -# the vendor only as a fall-back. We could put tis part of the logic -# in the macro itself, too -AS_CASE([$host], - [*-*-mingw32], - [AS_CASE([$ocaml_cv_cc_vendor], - [gcc-[[01234]]-*], - [AC_MSG_ERROR(m4_normalize([This version of Mingw GCC is too old. - Please use GCC version 5 or above.]))], - [gcc-*], - [internal_cflags="-Wno-unused $cc_warnings \ +# Concerning language version, recent enough versions of GCC and Clang +# default to gnu11 (C11 + GNU extensions) or gnu17, which is fine. +AS_CASE([$ocaml_cc_vendor], + [clang-*], + [common_cflags="-O2 -fno-strict-aliasing -fwrapv"; + internal_cflags="$cc_warnings -fno-common"], + [*gcc-[[0123]]-*|*gcc-4-[[0-8]]], + # No C11 support + [AC_MSG_ERROR(m4_normalize([This version of GCC is too old. + Please use GCC version 4.9 or above.]), 69)], + [gcc-*], + [common_cflags="-O2 -fno-strict-aliasing -fwrapv"; + internal_cflags="$cc_warnings -fno-common -fexcess-precision=standard \ +-Wvla"], + [mingw-*-*-gcc-*], + [internal_cflags="-Wno-unused $cc_warnings \ -fexcess-precision=standard" - # TODO: see whether the code can be fixed to avoid -Wno-unused - common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" - internal_cppflags='-D__USE_MINGW_ANSI_STDIO=0 -DUNICODE -D_UNICODE' - internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" - internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], - [AC_MSG_ERROR([Unsupported C compiler for a Mingw build])])], - [AS_CASE([$ocaml_cv_cc_vendor], - [clang-*], - [common_cflags="-O2 -fno-strict-aliasing -fwrapv"; - internal_cflags="$cc_warnings -fno-common"], - [gcc-[[012]]-*], - # Some versions known to miscompile OCaml, e,g, 2.7.2.1, some 2.96. - # Plus: C99 support unknown. - [AC_MSG_ERROR(m4_normalize([This version of GCC is too old. - Please use GCC version 4.2 or above.]))], - [gcc-3-*|gcc-4-[[01]]], - # No -fwrapv option before GCC 3.4. - # Known problems with -fwrapv fixed in 4.2 only. - [AC_MSG_WARN(m4_normalize([This version of GCC is rather old. - Reducing optimization level."])); - AC_MSG_WARN([Consider using GCC version 4.2 or above.]); - common_cflags="-std=gnu99 -O"; - internal_cflags="$cc_warnings"], - [gcc-4-[[234]]], - # No -fexcess-precision option before GCC 4.5 - [common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ --fno-builtin-memcmp"; - internal_cflags="$cc_warnings"], - [gcc-4-*], - [common_cflags="-std=gnu99 -O2 -fno-strict-aliasing -fwrapv \ --fno-builtin-memcmp"; - internal_cflags="$cc_warnings -fexcess-precision=standard"], - [gcc-*], - [common_cflags="-O2 -fno-strict-aliasing -fwrapv"; - internal_cflags="$cc_warnings -fno-common \ --fexcess-precision=standard"], - [msvc-*], - [common_cflags="-nologo -O2 -Gy- -MD $cc_warnings" - common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" - internal_cppflags='-DUNICODE -D_UNICODE' - OCAML_CL_HAS_VOLATILE_METADATA - AS_IF([test "x$cl_has_volatile_metadata" = "xtrue"], - [internal_cflags='-d2VolatileMetadata-']) - internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" - internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], - [xlc-*], - [common_cflags="-O5 -qtune=balanced -qnoipa -qinline"; - internal_cflags="$cc_warnings"], - [sunc-*], # Optimization should be >= O4 to inline functions - # and prevent unresolved externals - [common_cflags="-O4 -xc99=all -D_XPG6 $CFLAGS"; - internal_cflags="$cc_warnings"], - [common_cflags="-O"])]) - -internal_cppflags="-DCAML_NAME_SPACE $internal_cppflags" + # TODO: see whether the code can be fixed to avoid -Wno-unused + common_cflags="-O2 -fno-strict-aliasing -fwrapv -mms-bitfields" + internal_cppflags='-D__USE_MINGW_ANSI_STDIO=0 -DUNICODE -D_UNICODE' + internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" + internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], + [mingw-*], + [AC_MSG_ERROR([Unsupported C compiler for a MinGW-w64 build])], + [msvc-*], + [common_cflags="-nologo -O2 -Gy- -MD $cc_warnings" + common_cppflags="-D_CRT_SECURE_NO_DEPRECATE" + internal_cppflags='-DUNICODE -D_UNICODE' + OCAML_CL_HAS_VOLATILE_METADATA + AS_IF([test "x$cl_has_volatile_metadata" = "xtrue"], + [internal_cflags='-d2VolatileMetadata-']) + internal_cppflags="$internal_cppflags -DWINDOWS_UNICODE=" + internal_cppflags="${internal_cppflags}\$(WINDOWS_UNICODE)"], + [xlc-*], + [common_cflags="-O5 -qtune=balanced -qnoipa -qinline"; + internal_cflags="$cc_warnings"], + [sunc-*], # Optimization should be >= O4 to inline functions + # and prevent unresolved externals + [common_cflags="-O4 -xc99=all -D_XPG6 $CFLAGS"; + internal_cflags="$cc_warnings"], + [common_cflags="-O"]) # Enable SSE2 on x86 mingw to avoid using 80-bit registers. AS_CASE([$host], - [i686-*-mingw32], + [i686-*-mingw32*], [internal_cflags="$internal_cflags -mfpmath=sse -msse2"]) # Use 64-bit file offset if possible # See also AC_SYS_LARGEFILE # Problem: flags are added to CC rather than CPPFLAGS AS_CASE([$host], - [*-*-mingw32|*-pc-windows], [], + [*-*-mingw32*|*-pc-windows], [], [common_cppflags="$common_cppflags -D_FILE_OFFSET_BITS=64"]) # Adjust according to target @@ -705,44 +892,53 @@ AS_CASE([$host], AS_IF([test x"$enable_shared" = "xno"], [supports_shared_libraries=false AS_CASE([$host], - [*-pc-windows|*-w64-mingw32], + [*-pc-windows|*-w64-mingw32*], [AC_MSG_ERROR([Cannot build native Win32 with --disable-shared])])], [supports_shared_libraries=true]) # Define flexlink chain and flags correctly for the different Windows ports +flexlink_flags='' AS_CASE([$host], [i686-*-cygwin], [flexdll_chain='cygwin' - flexlink_flags="-chain $flexdll_chain -merge-manifest -stack 16777216"], + flexlink_flags='-merge-manifest -stack 16777216'], [x86_64-*-cygwin], [flexdll_chain='cygwin64' - flexlink_flags="-chain $flexdll_chain -merge-manifest -stack 16777216"], + flexlink_flags='-merge-manifest -stack 16777216'], [*-*-cygwin*], [AC_MSG_ERROR([unknown cygwin variant])], - [i686-w64-mingw32], + [i686-w64-mingw32*], [flexdll_chain='mingw' - flexlink_flags="-chain $flexdll_chain -stack 16777216"], - [x86_64-w64-mingw32], + flexlink_flags='-stack 16777216'], + [x86_64-w64-mingw32*], [flexdll_chain='mingw64' - flexlink_flags="-chain $flexdll_chain -stack 33554432"], + flexlink_flags='-stack 33554432'], [i686-pc-windows], [flexdll_chain='msvc' - flexlink_flags="-merge-manifest -stack 16777216"], + flexlink_flags='-merge-manifest -stack 16777216'], [x86_64-pc-windows], [flexdll_chain='msvc64' - flexlink_flags="-x64 -merge-manifest -stack 33554432"]) + flexlink_flags='-merge-manifest -stack 33554432'], + [flexdll_chain='']) AS_IF([test x"$supports_shared_libraries" != 'xfalse'], [ AC_MSG_CHECKING([for flexdll sources]) AS_IF([test x"$with_flexdll" = "xno"], - [flexdir='' + [flexdll_source_dir='' AC_MSG_RESULT([disabled])], [flexmsg='' AS_CASE([$target], - [*-*-cygwin*|*-w64-mingw32|*-pc-windows], - [AS_IF([test x"$with_flexdll" = 'x' -o x"$with_flexdll" = 'xflexdll'], + [*-*-cygwin*|*-w64-mingw32*|*-pc-windows], + [dnl When bootstrapping from the git submodule (flexdll directory), just + dnl use that, however if another directory has been specified with + dnl --with-flexdll= then copy the contents of to + dnl flexdll-sources. This allows us to guarantee that flexdll is always + dnl built at one directory level below the root, so we can specify + dnl ROOTDIR=.. + AS_IF([m4_normalize([test x"$with_flexdll" = 'x' + || test x"$with_flexdll" = 'xflexdll'])], [AS_IF([test -f 'flexdll/flexdll.h'], - [flexdir=flexdll + [flexdll_source_dir=flexdll iflexdir='$(ROOTDIR)/flexdll' with_flexdll="$iflexdir"], [AS_IF([test x"$with_flexdll" != 'x'], @@ -752,15 +948,16 @@ AS_IF([test x"$supports_shared_libraries" != 'xfalse'], [ AS_IF([test -f "$with_flexdll/flexdll.h"], [mkdir -p flexdll-sources cp -r "$with_flexdll"/* flexdll-sources/ - flexdir='flexdll-sources' + flexdll_source_dir='flexdll-sources' iflexdir='$(ROOTDIR)/flexdll-sources' flexmsg=" (from $with_flexdll)"], [AC_MSG_RESULT([requested but not available]) AC_MSG_ERROR([exiting])])]) - AS_IF([test x"$flexdir" = 'x'], + AS_IF([test x"$flexdll_source_dir" = 'x'], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([$iflexdir$flexmsg]) bootstrapping_flexdll=true + flexdll_dir=\"+flexdll\" # The submodule should be searched *before* any other -I paths internal_cppflags="-I $iflexdir $internal_cppflags"])], [AS_IF([test x"$with_flexdll" != 'x'], @@ -769,21 +966,21 @@ AS_IF([test x"$supports_shared_libraries" != 'xfalse'], [ AC_CHECK_PROG([flexlink],[flexlink],[flexlink]) - AS_IF([test -n "$flexlink" -a -z "$flexdir"],[ + AS_IF([test -n "$flexlink" && test -z "$flexdll_source_dir"],[ OCAML_TEST_FLEXLINK([$flexlink], [$flexdll_chain], [$internal_cppflags], [$host]) AS_CASE([$host], - [*-w64-mingw32|*-pc-windows], - [flexlink_where="$(cmd /c "$flexlink" -where 2>/dev/null)" - AS_IF([test -z "$flexlink_where"], - [AC_MSG_ERROR([$flexlink is not executable from a native Win32 process]) - ])]) + [*-w64-mingw32*|*-pc-windows], + [flexlink_where="$(cmd /c "$flexlink" -where 2>/dev/null)" + AS_IF([test -z "$flexlink_where"], + [AC_MSG_ERROR(m4_normalize([$flexlink is not executable from a native + Win32 process]))])]) ]) - OCAML_TEST_FLEXDLL_H([$flexdir]) + OCAML_TEST_FLEXDLL_H([$flexdll_source_dir]) - AS_IF([test -n "$flexlink" -a x"$have_flexdll_h" = 'xno'], + AS_IF([test -n "$flexlink" && test x"$have_flexdll_h" = 'xno'], [OCAML_TEST_FLEXLINK_WHERE([$flexlink]) AS_IF([test "x$have_flexdll_h" = 'xyes'], [internal_cppflags="$internal_cppflags -I \"$flexlink_where\""]) @@ -794,55 +991,65 @@ AS_CASE([$have_flexdll_h,$supports_shared_libraries,$host], [no,true,*-*-cygwin*], [supports_shared_libraries=false AC_MSG_WARN([flexdll.h not found: shared library support disabled.])], - [no,*,*-w64-mingw32|no,*,*-pc-windows], + [no,*,*-w64-mingw32*|no,*,*-pc-windows], [AC_MSG_ERROR([flexdll.h is required for native Win32])]) -AS_CASE([$flexdir,$supports_shared_libraries,$flexlink,$host], +AS_CASE([$flexdll_source_dir,$supports_shared_libraries,$flexlink,$host], [,true,,*-*-cygwin*], [supports_shared_libraries=false AC_MSG_WARN([flexlink not found: shared library support disabled.])], - [,*,,*-w64-mingw32|,*,,*-pc-windows], + [,*,,*-w64-mingw32*|,*,,*-pc-windows], [AC_MSG_ERROR([flexlink is required for native Win32])]) -AS_CASE([$cc_basename,$host], - [*,*-*-darwin*], - [mkexe="$mkexe -Wl,-no_compact_unwind"; +mkexe_cmd_exp="$CC" + +AS_CASE([$ocaml_cc_vendor,$host], + [*,x86_64-*-darwin*], + [oc_ldflags='-Wl,-no_compact_unwind'; AC_DEFINE([HAS_ARCH_CODE32], [1])], - [*,*-*-haiku*], [mathlib=""], + [*,aarch64-*-darwin*|arm64-*-darwin*], + AC_DEFINE([HAS_ARCH_CODE32], [1]), [*,*-*-cygwin*], [common_cppflags="$common_cppflags -U_WIN32" AS_IF([$supports_shared_libraries], - [mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' - mkexedebugflag="-link -g"], - [mkexe="$mkexe -Wl,--stack,16777216" - oc_ldflags="-Wl,--stack,16777216"] + [mkexe_cmd_exp="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cmd="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cflags='' + mkexe_ldflags_prefix='-link '], + [mkexe_extra_flags='' + oc_ldflags='-Wl,--stack,16777216'] ) ostype="Cygwin"], - [*,*-*-mingw32], + [*,*-*-mingw32*], [AS_CASE([$host], [i686-*-*], [oc_dll_ldflags="-static-libgcc"]) - mkexedebugflag="-link -g" ostype="Win32" toolchain="mingw" - mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' - oc_ldflags='-municode' + mkexe_cmd_exp="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cmd="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cflags='' + mkexe_ldflags_prefix='-link ' + oc_exe_ldflags='-municode' + mkexe_extra_flags="$mkexe_ldflags_prefix$oc_exe_ldflags" SO="dll"], [*,*-pc-windows], [toolchain=msvc ostype="Win32" - mkexe='$(FLEXLINK) -exe $(if $(OC_LDFLAGS),-link "$(OC_LDFLAGS)")' - oc_ldflags='/ENTRY:wmainCRTStartup' + mkexe_cmd_exp="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cmd="flexlink -exe -chain ${flexdll_chain} ${flexlink_flags}" + mkexe_cflags='' + mkexe_ldflags_prefix='-link ' + mkexe_via_cc_ldflags_prefix='/link ' + oc_exe_ldflags='/ENTRY:wmainCRTStartup' + mkexe_extra_flags="$mkexe_ldflags_prefix$oc_exe_ldflags" mkexedebugflag=''], [*,x86_64-*-linux*], AC_DEFINE([HAS_ARCH_CODE32], [1]), - [xlc*,powerpc-ibm-aix*], - [mkexe="$mkexe " - oc_ldflags="-brtl -bexpfull" + [xlc-*,powerpc-ibm-aix*], + [oc_ldflags='-brtl -bexpfull' AC_DEFINE([HAS_ARCH_CODE32], [1])], - [gcc*,powerpc-*-linux*], - [oc_ldflags="-mbss-plt"], -) - + [gcc-*,powerpc-*-linux*], + [oc_ldflags="-mbss-plt"]) ## Program to use to install files AC_PROG_INSTALL @@ -850,21 +1057,32 @@ AC_PROG_INSTALL # Checks for libraries ## Mathematical library -AC_CHECK_LIB([m],[cos]) - -AS_IF([test "x$ac_cv_lib_m_cos" = xyes ], [mathlib="-lm"], [mathlib=""]) +AC_SEARCH_LIBS([cos], [m], + [AS_CASE([$ac_cv_search_cos], + [no], [AC_MSG_ERROR([Could not locate C math functions])], + ['none required'], [mathlib=""], + [mathlib="$ac_cv_search_cos"])]) # Checks for header files +# Don't check for unistd.h on Windows +AS_CASE([$host], + [*-*-mingw32*|*-pc-windows], [], + [AC_CHECK_HEADERS([unistd.h],[AC_DEFINE([HAS_UNISTD])])]) + AC_CHECK_HEADER([math.h]) -AC_CHECK_HEADERS([unistd.h],[AC_DEFINE([HAS_UNISTD])]) AC_CHECK_HEADER([stdint.h],[AC_DEFINE([HAS_STDINT_H])]) +AC_CHECK_HEADER([pthread_np.h],[AC_DEFINE([HAS_PTHREAD_NP_H])]) AC_CHECK_HEADER([dirent.h], [AC_DEFINE([HAS_DIRENT])], [], [#include ]) AC_CHECK_HEADER([sys/select.h], [AC_DEFINE([HAS_SYS_SELECT_H])], [], [#include ]) +AC_CHECK_HEADER([stdatomic.h], [AC_DEFINE([HAS_STDATOMIC_H])]) + +AC_CHECK_HEADER([sys/mman.h], [AC_DEFINE([HAS_SYS_MMAN_H])]) + # Checks for types ## off_t @@ -932,62 +1150,105 @@ AS_IF([! $arch64], [AC_DEFINE([ARCH_ALIGN_INT64], [1])])]) ])]) +# Atomics library + +AS_IF([! $arch64], + [AS_CASE([$ocaml_cc_vendor], + [gcc-*], [cclibs="$cclibs -latomic"])]) + +# Support for C11 atomic types + +OCAML_CC_SUPPORTS_ATOMIC([$cclibs]) +AS_IF([! $cc_supports_atomic], + [AC_MSG_FAILURE([C11 atomic support is required, use another C compiler])]) + +# Full support for thread local storage +# macOS and MinGW-w64 have problems with thread local storage accessed from DLLs + +AS_CASE([$host], + [*-apple-darwin*|*-mingw32*], [], + [AC_DEFINE([HAS_FULL_THREAD_VARIABLES])] +) + # Shared library support sharedlib_cflags='' -mksharedlib='shared-libs-not-available' +mkdll='shared-libs-not-available' +mkdll_exp='shared-libs-not-available' rpath='' mksharedlibrpath='' natdynlinkopts="" AS_IF([test x"$enable_shared" != "xno"], - [AS_CASE([$host], - [*-apple-darwin*], - [mksharedlib="$CC -shared \ - -flat_namespace -undefined suppress -Wl,-no_compact_unwind \ - \$(LDFLAGS)" + [mkdll='' + AS_CASE([$host], + [x86_64-apple-darwin*], + [mkdll_flags=\ +'-shared -undefined dynamic_lookup -Wl,-no_compact_unwind -Wl,-w' + supports_shared_libraries=true], + [aarch64-apple-darwin*|arm64-apple-darwin*], + [mkdll_flags='-shared -undefined dynamic_lookup -Wl,-w' supports_shared_libraries=true], - [*-*-mingw32], - [mksharedlib='$(FLEXLINK)' - mkmaindll='$(FLEXLINK) -maindll' - AS_IF([test -n "$oc_dll_ldflags"],[ - mksharedlib="$mksharedlib -link \"$oc_dll_ldflags\"" - mkmaindll="$mkmaindll -link \"$oc_dll_ldflags\""])], - [*-pc-windows], - [mksharedlib='$(FLEXLINK)' - mkmaindll='$(FLEXLINK) -maindll'], - [*-*-cygwin*], - [mksharedlib='$(FLEXLINK)' - mkmaindll='$(FLEXLINK) -maindll'], + [*-*-mingw32*|*-pc-windows|*-*-cygwin*], + [mkdll_flags="-chain ${flexdll_chain} ${flexlink_flags}" + mkdll_exp="flexlink ${mkdll_flags}" + mkdll="flexlink ${mkdll_flags}" + mkmaindll_exp="flexlink -maindll ${mkdll_flags}" + mkmaindll="flexlink -maindll ${mkdll_flags}"], [powerpc-ibm-aix*], - [AS_CASE([$ocaml_cv_cc_vendor], - [xlc*], - [mksharedlib="$CC -qmkshrobj -G \$(LDFLAGS)" - supports_shared_libraries=true])], + [AS_CASE([$ocaml_cc_vendor], + [xlc*], + [mkdll_flags='-qmkshrobj -G' + supports_shared_libraries=true])], [*-*-solaris*], [sharedlib_cflags="-fPIC" - mksharedlib="$CC -shared" + mkdll_flags='-shared' rpath="-Wl,-rpath," mksharedlibrpath="-Wl,-rpath," supports_shared_libraries=true], [[*-*-linux*|*-*-freebsd[3-9]*|*-*-freebsd[1-9][0-9]*\ |*-*-openbsd*|*-*-netbsd*|*-*-dragonfly*|*-*-gnu*|*-*-haiku*]], [sharedlib_cflags="-fPIC" - AS_CASE([$cc_basename,$host], - [*gcc*,powerpc-*-linux*], - [mksharedlib="$CC -shared -mbss-plt \$(LDFLAGS)"], - [[*,i[3456]86-*]], + AS_CASE([$ocaml_cc_vendor,$host], + [gcc-*,powerpc-*-linux*], + [mkdll_flags='-shared -mbss-plt'], + [[*,i[3456]86-*]], # Disable DT_TEXTREL warnings on Linux and BSD i386 # See https://github.com/ocaml/ocaml/issues/9800 - [mksharedlib="$CC -shared \$(LDFLAGS) -Wl,-z,notext"], - [mksharedlib="$CC -shared \$(LDFLAGS)"]) + [mkdll_flags='-shared -Wl,-z,notext'], + [mkdll_flags='-shared']) + AS_CASE([$host], + [[*-*-openbsd7.[3-9]|*-*-openbsd[89].*]], + [mkdll_flags="${mkdll_flags} -Wl,--no-execute-only"]) oc_ldflags="$oc_ldflags -Wl,-E" rpath="-Wl,-rpath," mksharedlibrpath="-Wl,-rpath," natdynlinkopts="-Wl,-E" - supports_shared_libraries=true])]) + supports_shared_libraries=true], + [mkdll='shared-libs-not-available']) + AS_IF([test -z "$mkdll"], + [mkdll="\$(CC) $mkdll_flags" + mkdll_exp="$CC $mkdll_flags"])]) + +AS_IF([test -z "$mkmaindll"], + [mkmaindll_exp="$mkdll_exp" + mkmaindll="$mkdll"]) + +# Make sure code sections in OCaml-generated executables are readable +# (required for marshaling of function closures) + +AS_CASE([$host], + [[*-*-openbsd7.[3-9]|*-*-openbsd[89].*]], + [oc_ldflags="$oc_ldflags -Wl,--no-execute-only" + natdynlinkopts="$natdynlinkopts -Wl,--no-execute-only"]) + +# Disable control flow integrity + +AS_CASE([$host], + [[*-*-openbsd7.[4-9]|*-*-openbsd[89].*]], + [oc_ldflags="$oc_ldflags -Wl,-z,nobtcfi" + natdynlinkopts="$natdynlinkopts -Wl,-z,nobtcfi"]) -AS_IF([test -z "$mkmaindll"], [mkmaindll=$mksharedlib]) # Configure native dynlink @@ -996,7 +1257,7 @@ natdynlink=false AS_IF([test x"$supports_shared_libraries" = 'xtrue'], [AS_CASE(["$host"], [*-*-cygwin*], [natdynlink=true], - [*-*-mingw32], [natdynlink=true], + [*-*-mingw32*], [natdynlink=true], [*-pc-windows], [natdynlink=true], [[i[3456]86-*-linux*]], [natdynlink=true], [[i[3456]86-*-gnu*]], [natdynlink=true], @@ -1024,6 +1285,7 @@ AS_IF([test x"$supports_shared_libraries" = 'xtrue'], [aarch64-*-linux*], [natdynlink=true], [aarch64-*-freebsd*], [natdynlink=true], [aarch64-*-openbsd*], [natdynlink=true], + [aarch64-*-netbsd*], [natdynlink=true], [riscv*-*-linux*], [natdynlink=true])]) AS_CASE([$enable_native_toplevel,$natdynlink], @@ -1032,10 +1294,10 @@ AS_CASE([$enable_native_toplevel,$natdynlink], The native toplevel requires native dynlink support]))], [yes,*], [install_ocamlnat=true], - [install_ocamlnat=false]) + [install_ocamlnat=false]) # Try to work around the Skylake/Kaby Lake processor bug. -AS_CASE(["$cc_basename,$host"], +AS_CASE(["$ocaml_cc_vendor,$host"], [*gcc*,x86_64-*|*gcc*,i686-*], [OCAML_CC_HAS_FNO_TREE_VRP AS_IF([$cc_has_fno_tree_vrp], @@ -1052,44 +1314,52 @@ arch=none model=default system=unknown +# In all the cases below, if $arch is set so then so too must $system, +# preserving $arch = 'none' <=> $system = 'unknown' +has_native_backend=no +native_ldflags="" AS_CASE([$host], [[i[3456]86-*-linux*]], - [arch=i386; system=linux_elf], - [[i[3456]86-*-*bsd*]], - [arch=i386; system=bsd_elf], + [arch=i386; system=linux], + [[i[3456]86-*-freebsd*]], + [arch=i386; system=freebsd], + [[i[3456]86-*-netbsd*]], + [arch=i386; system=netbsd], + [[i[3456]86-*-openbsd*]], + [arch=i386; system=openbsd], [[i[3456]86-*-haiku*]], [arch=i386; system=beos], [[i[3456]86-*-cygwin]], [arch=i386; system=cygwin], [[i[3456]86-*-gnu*]], [arch=i386; system=gnu], - [[i[3456]86-*-mingw32]], + [[i[3456]86-*-mingw32*]], [arch=i386; system=mingw], [i686-pc-windows], [arch=i386; system=win32], [x86_64-pc-windows], [arch=amd64; system=win64], [[powerpc64le*-*-linux*]], - [arch=power; model=ppc64le; system=elf], - [[powerpc*-*-linux*]], - [arch=power; AS_IF([$arch64],[model=ppc64],[model=ppc]); system=elf], + [has_native_backend=yes; arch=power; model=ppc64le; system=linux], + [[powerpc64*-*-linux-musl*]], + [has_native_backend=yes; arch=power; model=ppc64; system=linux], [[s390x*-*-linux*]], - [arch=s390x; model=z10; system=elf], + [has_native_backend=yes; arch=s390x; model=z10; system=linux], # expected to match "gnueabihf" as well as "musleabihf" [armv6*-*-linux-*eabihf], - [arch=arm; model=armv6; system=linux_eabihf], + [arch=arm; model=armv6; system=linux], [armv7*-*-linux-*eabihf], - [arch=arm; model=armv7; system=linux_eabihf], + [arch=arm; model=armv7; system=linux], [armv8*-*-linux-*eabihf], - [arch=arm; model=armv8; system=linux_eabihf], + [arch=arm; model=armv8; system=linux], [armv8*-*-linux-*eabi], - [arch=arm; model=armv8; system=linux_eabi], + [arch=arm; model=armv8; system=linux], [armv7*-*-linux-*eabi], - [arch=arm; model=armv7; system=linux_eabi], + [arch=arm; model=armv7; system=linux], [armv6t2*-*-linux-*eabi], - [arch=arm; model=armv6t2; system=linux_eabi], + [arch=arm; model=armv6t2; system=linux], [armv6*-*-linux-*eabi], - [arch=arm; model=armv6; system=linux_eabi], + [arch=arm; model=armv6; system=linux], [armv6*-*-freebsd*], [arch=arm; model=armv6; system=freebsd], [earmv6*-*-netbsd*], @@ -1097,91 +1367,124 @@ AS_CASE([$host], [earmv7*-*-netbsd*], [arch=arm; model=armv7; system=netbsd], [armv5te*-*-linux-*eabi], - [arch=arm; model=armv5te; system=linux_eabi], + [arch=arm; model=armv5te; system=linux], [armv5*-*-linux-*eabi], - [arch=arm; model=armv5; system=linux_eabi], + [arch=arm; model=armv5; system=linux], [arm*-*-linux-*eabihf], - [arch=arm; system=linux_eabihf], + [arch=arm; system=linux], [arm*-*-linux-*eabi], - [arch=arm; system=linux_eabi], + [arch=arm; system=linux], [arm*-*-openbsd*], - [arch=arm; system=bsd], + [arch=arm; system=openbsd], [zaurus*-*-openbsd*], - [arch=arm; system=bsd], + [arch=arm; system=openbsd], [x86_64-*-linux*], - [arch=amd64; system=linux], + [has_native_backend=yes; arch=amd64; system=linux], [x86_64-*-gnu*], [arch=amd64; system=gnu], [x86_64-*-dragonfly*], [arch=amd64; system=dragonfly], [x86_64-*-solaris*], - [arch=amd64; system=solaris], + [has_native_backend=yes; arch=amd64; system=solaris], [x86_64-*-freebsd*], - [arch=amd64; system=freebsd], + [has_native_backend=yes; arch=amd64; system=freebsd], [x86_64-*-netbsd*], - [arch=amd64; system=netbsd], + [has_native_backend=yes; arch=amd64; system=netbsd], [x86_64-*-openbsd*], - [arch=amd64; system=openbsd], + [has_native_backend=yes; arch=amd64; system=openbsd], [x86_64-*-haiku*], [arch=amd64; system=beos], [arm64-*-darwin*], - [arch=arm64; system=macosx], + [has_native_backend=yes; arch=arm64; system=macosx], [aarch64-*-darwin*], - [arch=arm64; system=macosx], + [has_native_backend=yes; arch=arm64; system=macosx], [x86_64-*-darwin*], - [arch=amd64; system=macosx], - [x86_64-*-mingw32], - [arch=amd64; system=mingw64], + [has_native_backend=yes; arch=amd64; system=macosx], + [x86_64-*-mingw32*], + [has_native_backend=yes; arch=amd64; system=mingw64], [aarch64-*-linux*], - [arch=arm64; system=linux], + [AS_IF([$arch64], + [has_native_backend=yes; arch=arm64; system=linux], + [arch=arm; model=armv8; system=linux])], [aarch64-*-freebsd*], - [arch=arm64; system=freebsd], + [has_native_backend=yes; arch=arm64; system=freebsd], [aarch64-*-openbsd*], - [arch=arm64; system=openbsd], + [has_native_backend=yes; arch=arm64; system=openbsd], + [aarch64-*-netbsd*], + [has_native_backend=yes; arch=arm64; system=netbsd], [x86_64-*-cygwin*], - [arch=amd64; system=cygwin], + [has_native_backend=yes; arch=amd64; system=cygwin], [riscv64-*-linux*], - [arch=riscv; model=riscv64; system=linux] + [has_native_backend=yes; arch=riscv; model=riscv64; system=linux] ) -AS_IF([test x"$enable_native_compiler" = "xno"], - [native_compiler=false - AC_MSG_NOTICE([the native compiler is disabled])], +AS_CASE([$arch], + [amd64], + [arch_specific_SOURCES='$(intel_SOURCES)'], + [arch_specific_SOURCES='']) + +native_cflags='' +native_cppflags="-DTARGET_${arch} -DMODEL_${model} -DSYS_${system}" + +AS_CASE([$ccomptype], + [msvc], + [runtime_asm_objects=${arch}nt.${OBJEXT}], + [runtime_asm_objects=${arch}.${OBJEXT}]) + +AS_CASE([$enable_native_compiler,$has_native_backend], + [no,*], + [native_compiler=false + AC_MSG_NOTICE([the native compiler is disabled])], + [yes,no], + [AC_MSG_ERROR([the native compiler is not supported on this platform], 69)], + [*,no], + [native_compiler=false + AC_MSG_NOTICE([the native compiler is not supported on this platform])], [native_compiler=true]) +AS_IF([$native_compiler], + [default_build_target=world.opt], + [default_build_target=world]) + AS_IF([! $native_compiler], [natdynlink=false]) AS_IF([$natdynlink], [cmxs="cmxs"], [cmxs="cmx"]) +AS_IF([$natdynlink], + [natdynlink_archive="dynlink.cmxa"], + [natdynlink_archive=""]) AC_DEFINE_UNQUOTED([OCAML_OS_TYPE], ["$ostype"]) AC_CHECK_TOOL([DIRECT_LD],[ld]) AS_IF([test -z "$PARTIALLD"], - [AS_CASE(["$arch,$cc_basename,$system,$model"], - [amd64,*gcc*,macosx,*], [PACKLD_FLAGS=' -arch x86_64'], - [power,*gcc*,elf,ppc], [PACKLD_FLAGS=' -m elf32ppclinux'], - [power,*gcc*,elf,ppc64], [PACKLD_FLAGS=' -m elf64ppc'], - [power,*gcc*,elf,ppc64le], [PACKLD_FLAGS=' -m elf64lppc'], + [AS_CASE(["$host,$ocaml_cc_vendor"], + [x86_64-*-darwin*,gcc-*], [PACKLD_FLAGS=' -arch x86_64'], + [powerpc64le*-*-linux*,gcc-*], [PACKLD_FLAGS=' -m elf64lppc'], + [powerpc*-*-linux*,gcc-*], + [AS_IF([$arch64], + [PACKLD_FLAGS=' -m elf64ppc'], + [PACKLD_FLAGS=' -m elf32ppclinux'])], [PACKLD_FLAGS='']) # The string for PACKLD must be capable of being concatenated with the # output filename. Don't assume that all C compilers understand GNU -ofoo # form, so ensure that the definition includes a space at the end (which is - # achieved using the $(EMPTY) expansion trick). - AS_IF([test x"$cc_basename" = "xcl"], - # For the Microsoft C compiler there must be no space at the end of the - # string. - [PACKLD="link -lib -nologo $machine -out:"], - [PACKLD="$DIRECT_LD -r$PACKLD_FLAGS -o \$(EMPTY)"])], - [PACKLD="$PARTIALLD -o \$(EMPTY)"]) + # achieved using the $(EMPTY) expansion trick in Makefile.config.in). + AS_CASE(["$ocaml_cc_vendor"], + [msvc-*], + # For the Microsoft C compiler there must be no space at the end of the + # string. + [PACKLD="link -lib -nologo $machine -out:"], + [PACKLD="$DIRECT_LD -r$PACKLD_FLAGS -o "])], + [PACKLD="$PARTIALLD -o "]) # Disable PIE at link time when ocamlopt does not produce position-independent # code and the system produces PIE executables by default and demands PIC # object files to do so. -# This issue does not affect amd64 (x86_64) and s390x (Z systems), -# since ocamlopt produces PIC object files by default. -# Currently the problem is known for Alpine Linux on platforms other -# than amd64 and s390x (issue #7562), and probably affects all Linux -# distributions that use the musl standard library and dynamic loader. +# This issue does not affect amd64 (x86_64), aarch64 (arm64) +# and s390x (Z systems), since ocamlopt produces PIC object files by default. +# Currently the problem is known for Alpine Linux on other platforms +# (issue #7562), and probably affects all Linux distributions that use +# the musl standard library and dynamic loader. # Other systems have PIE by default but can cope with non-PIC object files, # e.g. Ubuntu >= 17.10 for i386, which uses the glibc dynamic loader. @@ -1192,9 +1495,8 @@ AS_CASE([$arch], [AS_CASE([$host], # expected to match "*-linux-musl" as well as "*-linux-musleabi*" [*-linux-musl*], - # Alpine and other musl-based Linux distributions - [common_cflags="-no-pie $common_cflags"], - [])]) + # Alpine and other musl-based Linux distributions + [common_cflags="-no-pie $common_cflags"])]) # Assembler @@ -1223,7 +1525,7 @@ AS_IF([test -n "$target_alias"], default_as="$CC -c" default_aspp="$CC -c" -AS_CASE([$as_target,$ocaml_cv_cc_vendor], +AS_CASE([$as_target,$ocaml_cc_vendor], [*-*-linux*,gcc-*], [AS_CASE([$as_cpu], [x86_64|arm*|aarch64*|i[[3-6]]86|riscv*], @@ -1236,8 +1538,7 @@ AS_CASE([$as_target,$ocaml_cv_cc_vendor], default_aspp="$default_as"], [*-*-darwin*,clang-*], [default_as="$default_as -Wno-trigraphs" - default_aspp="$default_as"], - []) + default_aspp="$default_as"]) AS_IF([test "$with_pic"], [fpic=true @@ -1276,9 +1577,9 @@ AS_IF([$has_c99_float_ops], # in VS2013-2017 and present but unimplemented in Cygwin64) OCAML_C99_CHECK_FMA], [AS_IF([test x"$enable_imprecise_c99_float_ops" != "xyes" ], - [AS_CASE([$enable_imprecise_c99_float_ops,$ocaml_cv_cc_vendor], + [AS_CASE([$enable_imprecise_c99_float_ops,$ocaml_cc_vendor], [no,*], [hard_error=true], - [,msvc-*], [AS_IF([test "${ocaml_cv_cc_vendor#msvc-}" -lt 1800 ], + [,msvc-*], [AS_IF([test "${ocaml_cc_vendor#msvc-}" -lt 1800 ], [hard_error=false], [hard_error=true])], [hard_error=true]) @@ -1290,6 +1591,13 @@ AS_IF([$has_c99_float_ops], C99 float ops unavailable, replacements enabled (ancient Visual Studio)]))])])]) +## getentropy +AC_CHECK_HEADER([unistd.h], + [AC_CHECK_DECL([getentropy], + [AC_DEFINE([HAS_GETENTROPY])], [], + [[#include ]])], + []) + ## getrusage AC_CHECK_FUNC([getrusage], [AC_DEFINE([HAS_GETRUSAGE])]) @@ -1322,10 +1630,10 @@ AS_CASE([$host], [*-*-windows], [has_monotonic_clock=true], [*-apple-darwin*], [ - AC_CHECK_FUNCS([mach_timebase_info mach_absolute_time], + AC_CHECK_FUNCS([clock_gettime_nsec_np], [ has_monotonic_clock=true - AC_DEFINE([HAS_MACH_ABSOLUTE_TIME]) + AC_DEFINE([HAS_CLOCK_GETTIME_NSEC_NP]) ], [has_monotonic_clock=false])], [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ @@ -1363,10 +1671,9 @@ AS_IF([test "x$enable_instrumented_runtime" != "xno" ], AS_CASE([$enable_instrumented_runtime,$has_monotonic_clock], [*,true], [instrumented_runtime=true], - [yes,false], [ - AC_MSG_ERROR([Instrumented runtime support requested \ -but no proper monotonic clock source was found.]) - ], + [yes,false], + [AC_MSG_ERROR(m4_normalize([Instrumented runtime support requested + but no proper monotonic clock source was found.]))], [auto,false], [instrumented_runtime=false] )], @@ -1386,19 +1693,159 @@ but no proper monotonic clock source was found.]) ) ], [yes,false,*], - [ - AC_MSG_ERROR([Instrumented runtime support requested \ -but clock_gettime is missing.]) - ], + [AC_MSG_ERROR(m4_normalize([Instrumented runtime support requested + but clock_gettime is missing.]))], [yes,*,false], - [ - AC_MSG_ERROR([Instrumented runtime support requested \ -but no proper monotonic clock source was found.]) - ] + [AC_MSG_ERROR(m4_normalize([Instrumented runtime support requested + but no proper monotonic clock source was found.]))] )] )] ) +# ThreadSanitizer support is currently only available for Linux/FreeBSD/macOS +# on amd64, Linux/macOS on arm64 and Linux on POWER, riscv64 and s390x. +AS_IF([test "x$enable_tsan" = "xyes" ], + [AS_CASE(["$arch"], + [amd64], + [AS_CASE(["$system"], + [freebsd|linux|macosx], + [AS_CASE(["$ocaml_cc_vendor"], + [gcc-*|clang-*], [tsan=true], + [AC_MSG_ERROR(m4_normalize([thread sanitizer not supported with + vendor=$ocaml_cc_vendor"]))] + )], + [AC_MSG_ERROR([thread sanitizer not supported on system $system])] + )], + [arm64], + [AS_CASE(["$system"], + [linux|macosx], + [AS_CASE(["$ocaml_cc_vendor"], + [gcc-*|clang-*], [tsan=true], + [AC_MSG_ERROR(m4_normalize([thread sanitizer not supported with + vendor=$ocaml_cc_vendor"]))] + )], + [AC_MSG_ERROR([thread sanitizer not supported on system $system])] + )], + [power], + [AS_CASE(["$system"], + [linux], + [AS_CASE(["$ocaml_cc_vendor"], + [gcc-*|clang-*], [tsan=true], + [AC_MSG_ERROR(m4_normalize([thread sanitizer not supported with + vendor=$ocaml_cc_vendor"]))] + )], + [AC_MSG_ERROR([thread sanitizer not supported on system $system])] + )], + [riscv], + [AS_CASE(["$system"], + [linux], + [AS_CASE(["$ocaml_cc_vendor"], + [gcc-*|clang-*], [tsan=true], + [AC_MSG_ERROR(m4_normalize([thread sanitizer not supported with + vendor=$ocaml_cc_vendor"]))] + )], + [AC_MSG_ERROR([thread sanitizer not supported on system $system])] + )], + [s390x], + [AS_CASE(["$system"], + [linux], + [AS_CASE(["$ocaml_cc_vendor"], + [gcc-*|clang-*], [tsan=true], + [AC_MSG_ERROR(m4_normalize([thread sanitizer not supported with + vendor=$ocaml_cc_vendor"]))] + )], + [AC_MSG_ERROR([thread sanitizer not supported on system $system])] + )], + [AC_MSG_ERROR([thread sanitizer not supported on arch $arch])] + )], + [tsan=false]) + +AS_IF([$tsan], + [AC_MSG_NOTICE([using thread sanitizer with vendor=$ocaml_cc_vendor]) + + # Check for libtsan library files (necessary on some Linux distributions) + SAVED_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -fsanitize=thread" + AC_LINK_IFELSE([AC_LANG_PROGRAM([void __tsan_func_entry(void *retaddr);], + [__tsan_func_entry((void *)0);])], + [], + [AC_MSG_ERROR([libtsan is necessary for TSan but cannot be found. + Try installing it on your system.])]) + LDFLAGS="$SAVED_LDFLAGS" + + AS_CASE([$ocaml_cc_vendor], + [gcc-[[0123456789]]-*|gcc-10-*|clang-*], + [], + [oc_tsan_cflags="$oc_tsan_cflags -Wno-tsan"]) + AS_CASE([$ocaml_cc_vendor], + [gcc*], + [tsan_distinguish_volatile_cflags="--param=tsan-distinguish-volatile=1"], + [clang*], + [tsan_distinguish_volatile_cflags="-mllvm -tsan-distinguish-volatile"]) + AX_CHECK_COMPILE_FLAG([-fsanitize=thread $tsan_distinguish_volatile_cflags], + [], + [AC_MSG_ERROR(m4_normalize([The C compiler does not support the + `$tsan_distinguish_volatile_cflags' flag. Try upgrading to GCC >= 11, or + to Clang >= 11.]))], [$warn_error_flag]) + oc_tsan_cflags="$oc_tsan_cflags $tsan_distinguish_volatile_cflags" + common_cppflags="$common_cppflags $oc_tsan_cppflags" + native_cflags="$native_cflags $oc_tsan_cflags" + ocamlc_cflags="$ocamlc_cflags $oc_tsan_cflags" + tsan_native_runtime_c_sources="tsan"], + [AC_MSG_NOTICE([not using thread sanitizer]) + tsan_native_runtime_c_sources=""] +) + +# libunwind detection when TSan is enabled +libunwind_cppflags="" +libunwind_ldflags="" + +AS_IF([$tsan], + [AS_IF([test "$system" = "macosx"], + [AS_IF([test x"$LIBUNWIND_CPPFLAGS" != x -o \ + x"$LIBUNWIND_LDFLAGS" != x], + [AC_MSG_WARN(m4_normalize([ + On MacOSX, specifying paths for libunwind headers or libraries is + strongly discouraged. It is recommended to rely on the defaults + provided by the configure script + ]))])]) + + AS_IF([test x"$LIBUNWIND_CPPFLAGS" != x], + [libunwind_cppflags="$LIBUNWIND_CPPFLAGS"], + [libunwind_cppflags=""]) + + AS_CASE(["$system"], + ["freebsd"], [libunwind_ldflags="-lgcc_eh"], + ["macosx"], [libunwind_ldflags="-framework System"], + [AS_CASE(["$arch"], + ["amd64"], [libunwind_ldflags="-lunwind -lunwind-x86_64"], + ["arm64"], [libunwind_ldflags="-lunwind -lunwind-aarch64"], + ["power"], [libunwind_ldflags="-lunwind -lunwind-ppc64"], + ["riscv"], [libunwind_ldflags="-lunwind -lunwind-riscv"], + ["s390x"], [libunwind_ldflags="-lunwind -lunwind-s390x"])]) + + AS_IF([test x"$LIBUNWIND_LDFLAGS" != x], + [libunwind_ldflags="$LIBUNWIND_LDFLAGS $libunwind_ldflags"]) + + native_cppflags="$native_cppflags $libunwind_cppflags" + native_ldflags="$native_ldflags -fsanitize=thread $libunwind_ldflags" + + OCAML_CHECK_LIBUNWIND + + AS_IF([! $libunwind_available], + [AC_MSG_ERROR([libunwind is necessary for TSan but cannot be found])]) + + # We need unwinding information at runtime, but since we use + # -no_compact_unwind, we also need -keep_dwarf_unwind otherwise + # the OS X linker will chuck away the DWARF-like (.eh_frame) + # information. (Older versions of OS X don't provide this.) + + AS_IF([$libunwind_available && test x"$system" = "xmacosx"], + [extra_flags="-Wl,-keep_dwarf_unwind" + mkexe="$mkexe $extra_flags" + mksharedlib="$mksharedlib $extra_flags"]) + ]) + ## Sockets ## TODO: check whether the different libraries are really useful @@ -1406,10 +1853,14 @@ but no proper monotonic clock source was found.]) sockets=true AS_CASE([$host], - [*-*-mingw32|*-pc-windows], + [*-*-mingw32*], [cclibs="$cclibs -lws2_32" AC_SEARCH_LIBS([socket], [ws2_32]) AC_CHECK_FUNC([socketpair], [AC_DEFINE([HAS_SOCKETPAIR])])], + [*-pc-windows], + [cclibs="$cclibs ws2_32.lib" + AC_SEARCH_LIBS([socket], [ws2_32]) + AC_CHECK_FUNC([socketpair], [AC_DEFINE([HAS_SOCKETPAIR])])], [*-*-haiku], [cclibs="$cclibs -lnetwork" AC_SEARCH_LIBS([socket], [network])], @@ -1430,7 +1881,7 @@ AS_IF([$sockets], [AC_DEFINE([HAS_SOCKETS])]) ## socklen_t AS_CASE([$host], - [*-*-mingw32|*-pc-windows], + [*-*-mingw32*|*-pc-windows], [AC_CHECK_TYPE([socklen_t], [AC_DEFINE([HAS_SOCKLEN_T])], [], [#include ])], [AC_CHECK_TYPE([socklen_t], [AC_DEFINE([HAS_SOCKLEN_T])], [], @@ -1441,7 +1892,7 @@ AC_CHECK_FUNC([inet_aton], [AC_DEFINE([HAS_INET_ATON])]) ## Unix domain sockets support on Windows AS_CASE([$host], - [*-*-mingw32|*-pc-windows], + [*-*-mingw32*|*-pc-windows], [AC_CHECK_HEADERS([afunix.h], [AC_DEFINE([HAS_AFUNIX_H])], [], [#include ])]) @@ -1450,7 +1901,7 @@ AS_CASE([$host], ipv6=true AS_CASE([$host], - [*-*-mingw32|*-pc-windows], + [*-*-mingw32*|*-pc-windows], [AC_CHECK_TYPE( [struct sockaddr_in6], [], [ipv6=false], [#include ])], [AC_CHECK_TYPE( @@ -1490,7 +1941,7 @@ AC_CHECK_DECL([system], [AC_DEFINE([HAS_SYSTEM])], [], [[#include ]]) # seem to detect it properly on Windows so we hardcode the definition # of HAS_UTIME on Windows but this will probably need to be clarified AS_CASE([$host], - [*-*-mingw32|*-pc-windows], [AC_DEFINE([HAS_UTIME])], + [*-*-mingw32*|*-pc-windows], [AC_DEFINE([HAS_UTIME])], [AC_CHECK_HEADER([sys/types.h], [AC_CHECK_HEADER([utime.h], [AC_CHECK_FUNC([utime], [AC_DEFINE([HAS_UTIME])])])])]) @@ -1567,7 +2018,7 @@ AC_CHECK_FUNC([setitimer], # Note: detection fails on Windows so hardcoding the result # (should be debugged later) AS_CASE([$host], - [*-*-mingw32|*-pc-windows], [AC_DEFINE([HAS_GETHOSTNAME])], + [*-*-mingw32*|*-pc-windows], [AC_DEFINE([HAS_GETHOSTNAME])], [AC_CHECK_FUNC([gethostname], [AC_DEFINE([HAS_GETHOSTNAME])])]) ## uname @@ -1591,7 +2042,7 @@ AC_CHECK_FUNC([mktime], [AC_DEFINE([HAS_MKTIME])]) ## setsid AS_CASE([$host], - [*-cygwin|*-*-mingw32|*-pc-windows], [], + [*-cygwin|*-*-mingw32*|*-pc-windows], [], [AC_CHECK_FUNC([setsid], [AC_DEFINE([HAS_SETSID])])]) ## putenv @@ -1628,7 +2079,7 @@ AS_CASE([$host], ## shared library support AS_IF([$supports_shared_libraries], [AS_CASE([$host], - [*-*-mingw32|*-pc-windows|*-*-cygwin*], + [*-*-mingw32*|*-pc-windows|*-*-cygwin*], [DLLIBS=""], [AC_CHECK_FUNC([dlopen], [supports_shared_libraries=true DLLIBS=""], @@ -1653,8 +2104,8 @@ AC_CHECK_HEADER([sys/mman.h], AC_CHECK_FUNC([pwrite], [AC_DEFINE([HAS_PWRITE])]) ## -fdebug-prefix-map support by the C compiler -AS_CASE([$ocaml_cv_cc_vendor,$host], - [*,*-*-mingw32], [cc_has_debug_prefix_map=false], +AS_CASE([$ocaml_cc_vendor,$host], + [*,*-*-mingw32*], [cc_has_debug_prefix_map=false], [*,*-pc-windows], [cc_has_debug_prefix_map=false], [xlc*,powerpc-ibm-aix*], [cc_has_debug_prefix_map=false], [sunc*,sparc-sun-*], [cc_has_debug_prefix_map=false], @@ -1662,6 +2113,8 @@ AS_CASE([$ocaml_cv_cc_vendor,$host], ## Does stat support nanosecond precision +stat_has_ns_precision=false + AC_CHECK_MEMBER([struct stat.st_atim.tv_nsec], [stat_has_ns_precision=true AC_DEFINE([HAS_NANOSECOND_STAT], [1])], @@ -1754,22 +2207,98 @@ AC_CHECK_HEADER([spawn.h], [AC_CHECK_FUNC([posix_spawn], [AC_CHECK_FUNC([posix_spawnp], [AC_DEFINE([HAS_POSIX_SPAWN])])])]) -## ffs or _BitScanForward - -AC_CHECK_FUNC([ffs], [AC_DEFINE([HAS_FFS])]) -AC_CHECK_FUNC([_BitScanForward], [AC_DEFINE([HAS_BITSCANFORWARD])]) +AC_PATH_TOOL([PKG_CONFIG], [pkg-config], [false]) + +## ZSTD compression library + +zstd_status="" +zstd_libs="" + +AS_IF([test x"$with_zstd" != "xno"], + # Try pkg-config first, as it gives the most reliable results + AS_IF([${PKG_CONFIG} libzstd 2>/dev/null], + # Now check the version + [AS_IF([${PKG_CONFIG} --atleast-version 1.4 libzstd], + [zstd_libs=`${PKG_CONFIG} --libs libzstd` + zstd_flags=`${PKG_CONFIG} --cflags libzstd` + zstd_status="ok"], + [zstd_status="zstd library too old: version 1.4 or later is needed"])], + # Otherwise, try to find zstd the old way, + # assuming it is installed in default places + [AC_CHECK_LIB([zstd], [ZSTD_createCCtx], + [AC_CHECK_DECL([ZSTD_compressStream2], + [zstd_libs="-lzstd" + zstd_flags="" + zstd_status="ok"], + [zstd_status="zstd library too old: version 1.4 or later is needed"], + [[#include ]])], + [zstd_status="zstd library not found"])])) + +# When building the mingw-w64 port in Cygwin, it is very easy to have the +# library available, but not have the DLL in PATH. This then causes the build to +# fail as soon as ocamlrun is first executed. This check avoids automatically +# enabling zstd when the resulting executable doesn't actually work. +AS_CASE([$host], + [*-w64-mingw32*|*-pc-windows], + [check_zstd_runs=$host_runnable], + [check_zstd_runs=false]) + +AS_IF([test x"$zstd_status" = "xok"],[ + AC_MSG_CHECKING([whether programs can be linked with zstd]) + OCAML_CC_SAVE_VARIABLES + LIBS="$LIBS $zstd_libs" + CFLAGS="$CFLAGS $zstd_flags" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ +#include +int main(void) { + return (ZSTD_versionNumber() == 0); +} + ]])], + [AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([whether programs linked with zstd can execute]) + AS_IF([$check_zstd_runs], + [AS_IF([ac_fn_c_try_run LINENO], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + zstd_libs='' + zstd_flags='' + zstd_status=\ +"programs linked with zstd do not appear to be executable."])], + [AC_MSG_RESULT([skipped])])], + [AC_MSG_RESULT([no]) + zstd_libs='' + zstd_flags='' + zstd_status="zstd found, but programs cannot be linked with it."]) + OCAML_CC_RESTORE_VARIABLES]) + +AS_IF([test x"$zstd_status" = "xok"], + [AC_MSG_NOTICE([compressed compilation artefacts supported]) + internal_cppflags="$internal_cppflags $zstd_flags" + AC_DEFINE([HAS_ZSTD])], + [AS_CASE(["$with_zstd"], + [no], + [], + [yes], + [AC_MSG_ERROR([$zstd_status])], + [AC_MSG_WARN([$zstd_status]) + AC_MSG_WARN([compressed compilation artefacts not supported])])]) ## Determine whether the debugger should/can be built -AS_CASE([$enable_debugger], +AS_CASE([$enable_ocamldebug], [no], [with_debugger="" - AC_MSG_NOTICE([replay debugger disabled])], + build_ocamldebug=false + AC_MSG_NOTICE([ocamldebug disabled])], [AS_IF([$sockets], - [with_debugger="ocamldebugger" - AC_MSG_NOTICE([replay debugger supported])], + [with_debugger="ocamldebug" + build_ocamldebug=true + optional_bytecode_tools="$optional_bytecode_tools debugger/ocamldebug" + AC_MSG_NOTICE([ocamldebug supported])], [with_debugger="" - AC_MSG_NOTICE([replay debugger not supported])]) + build_ocamldebug=false + AC_MSG_NOTICE([ocamldebug not supported])]) ]) ## Should the runtime with debugging support be built @@ -1777,62 +2306,83 @@ AS_CASE([$enable_debug_runtime], [no], [debug_runtime=false], [debug_runtime=true]) -## Determine if system stack overflows can be detected - -AC_MSG_CHECKING([whether stack overflows can be detected]) +## Determine how to link with the POSIX threads library -AS_CASE([$arch,$system], - [i386,linux_elf|amd64,linux|amd64,macosx \ - |amd64,openbsd|i386,bsd_elf|arm64,linux|arm64,macosx], - [AC_DEFINE([HAS_STACK_OVERFLOW_DETECTION]) - AC_MSG_RESULT([yes])], - [AC_MSG_RESULT([no])]) - -## Determine if the POSIX threads library is supported +AS_CASE([$host], + [*-*-mingw32*], + [PTHREAD_LIBS="-l:libpthread.a -lgcc_eh"], + [*-pc-windows], + [PTHREAD_LIBS="-l:libpthread.lib"], + [AX_PTHREAD( + [common_cflags="$common_cflags $PTHREAD_CFLAGS" + # The two following lines add flags and libraries for pthread to the + # global CFLAGS and LIBS variables. This means that all the subsequent + # tests can rely on the assumption that pthread is enabled. + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$LIBS $PTHREAD_LIBS" + AC_CHECK_FUNC([sigwait], [AC_DEFINE([HAS_SIGWAIT])])], + [AC_MSG_ERROR(m4_normalize([POSIX threads are required but not supported on + this platform]))])]) + +## pthread_getaffinity_np, args differ from GNU and BSD +AC_MSG_CHECKING([arguments for pthread_getaffinity_np]) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#define _GNU_SOURCE + #include + #ifdef HAS_PTHREAD_NP_H + #include + #endif + #include ]], + [[cpu_set_t cs; + CPU_ZERO(&cs); + CPU_COUNT(&cs); + pthread_getaffinity_np(pthread_self(), sizeof(cs), &cs);]])], + [AC_MSG_RESULT([GNU]) + AC_DEFINE([HAS_GNU_GETAFFINITY_NP])], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include ]], + [[cpuset_t cs; + /* Not every BSD has CPU_ZERO and CPU_COUNT (NetBSD) */ + CPU_ZERO(&cs); + CPU_COUNT(&cs); + pthread_getaffinity_np(pthread_self(), sizeof(cs), &cs);]])], + [AC_MSG_RESULT([BSD]) + AC_DEFINE([HAS_BSD_GETAFFINITY_NP])], + [AC_MSG_RESULT([pthread_getaffinity_np not found])])]) + +## Activate the systhread library AS_CASE([$enable_systhreads,$enable_unix_lib], [yes,no], [systhread_support=false - AC_MSG_ERROR([the Win32/POSIX threads library requires the unix library])], + AC_MSG_ERROR([the threads library requires the unix library])], [no,*|*,no], [systhread_support=false - AC_MSG_NOTICE([the Win32/POSIX threads library is disabled])], - [AS_CASE([$host], - [*-*-mingw32|*-pc-windows], - [systhread_support=true - otherlibraries="$otherlibraries systhreads" - AC_MSG_NOTICE([the Win32 threads library is supported])], - [AX_PTHREAD( - [systhread_support=true - otherlibraries="$otherlibraries systhreads" - common_cflags="$common_cflags $PTHREAD_CFLAGS" - AC_MSG_NOTICE([the POSIX threads library is supported]) - saved_CFLAGS="$CFLAGS" - saved_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$LIBS $PTHREAD_LIBS" - AC_CHECK_FUNC([sigwait], [AC_DEFINE([HAS_SIGWAIT])]) - LIBS="$saved_LIBS" - CFLAGS="$saved_CFLAGS"], - [AS_IF([test x"$enable_systhreads" = "xyes"], - [AC_MSG_ERROR([the POSIX thread library is not available])], - [systhread_support=false - AC_MSG_NOTICE([the POSIX threads library is not supported])])])])]) + AC_MSG_NOTICE([the threads library is disabled])], + [systhread_support=true + AC_CONFIG_FILES([otherlibs/systhreads/META]) + otherlibraries="$otherlibraries systhreads" + lib_systhreads=true + AC_MSG_NOTICE([the threads library is supported])]) ## Does the assembler support debug prefix map and CFI directives as_has_debug_prefix_map=false asm_cfi_supported=false AS_IF([$native_compiler], [AS_CASE([$host], - [*-*-mingw32|*-pc-windows], [], + [*-*-mingw32*|*-pc-windows], [], [OCAML_AS_HAS_DEBUG_PREFIX_MAP OCAML_AS_HAS_CFI_DIRECTIVES])]) ## Frame pointers AS_IF([test x"$enable_frame_pointers" = "xyes"], - [AS_CASE(["$host,$cc_basename"], - [x86_64-*-linux*,gcc*|x86_64-*-linux*,clang*], + [AS_CASE(["$host,$ocaml_cc_vendor"], + [x86_64-*-linux*,gcc-*|x86_64-*-linux*,clang-*], [common_cflags="$common_cflags -g -fno-omit-frame-pointer" frame_pointers=true AC_DEFINE([WITH_FRAME_POINTERS]) @@ -1842,35 +2392,10 @@ AS_IF([test x"$enable_frame_pointers" = "xyes"], [AC_MSG_NOTICE([not using frame pointers]) frame_pointers=false]) -## No naked pointers - -AS_IF([test x"$enable_naked_pointers" = "xno" ], - [naked_pointers=false - AC_DEFINE([NO_NAKED_POINTERS])], - [naked_pointers=true]) - -AS_IF([test x"$enable_naked_pointers_checker" = "xyes" ], - [AS_IF([test x"$enable_naked_pointers" = "xno" ], - [AC_MSG_ERROR(m4_normalize([ - --enable-naked-pointers-checker and --disable-naked-pointers - are incompatible]))]) - AS_CASE(["$arch","$system"], - [amd64,linux|amd64,macosx \ - |amd64,openbsd|amd64,win64 \ - |amd64,freebsd|amd64,solaris \ - |arm64,linux|arm64,macosx], - [naked_pointers_checker=true - AC_DEFINE([NAKED_POINTERS_CHECKER])], - [*], - [AC_MSG_ERROR([naked pointers checker not supported on this platform])] - )], - [naked_pointers_checker=false]) - ## Check for mmap support for huge pages and contiguous heap OCAML_MMAP_SUPPORTS_HUGE_PAGES -AC_DEFINE_UNQUOTED([PROFINFO_WIDTH], [$profinfo_width]) -AS_IF([$profinfo], [AC_DEFINE([WITH_PROFINFO])]) +AC_DEFINE_UNQUOTED([HEADER_RESERVED_BITS], [$reserved_header_bits]) AS_IF([test x"$enable_installing_bytecode_programs" = "xno"], [install_bytecode_programs=false], @@ -1880,9 +2405,8 @@ AS_IF([test x"$enable_installing_source_artifacts" = "xno"], [install_source_artifacts=false], [install_source_artifacts=true]) -AS_IF([test x"$enable_ocamldoc" = "xno"], - [ocamldoc=""], - [ocamldoc=ocamldoc]) +AS_IF([test x"$enable_stdlib_manpages" != "xno"], + [build_libraries_manpages=true],[build_libraries_manpages=false]) documentation_tool_cmd='' AC_ARG_WITH([odoc], @@ -1899,8 +2423,36 @@ AS_IF([test "x$documentation_tool_cmd" = 'x'] AS_CASE([$enable_ocamltest,OCAML__DEVELOPMENT_VERSION], - [yes,*|,true],[ocamltest='ocamltest'], - [ocamltest='']) + [yes,*|,true], + [build_ocamltest=true + ocamltest_target=ocamltest + ocamltest_opt_target=ocamltest.opt + ocamltest='ocamltest' + testsuite_tools='testsuite/tools/codegen testsuite/tools/expect' + optional_bytecode_tools="$optional_bytecode_tools $testsuite_tools"], + [build_ocamltest=false + ocamltest='']) + +AS_IF([$build_ocamltest], + [optional_libraries="$optional_libraries testsuite/lib/testing" + ocamltest_unix_mod="ocamltest/ocamltest_unix_${ocamltest_unix_impl}.ml" + AC_CONFIG_LINKS([ + ocamltest/ocamltest_unix.ml:${ocamltest_unix_mod} + ]) + AC_CHECK_PROGS([DIFF], [patdiff diff], [none]) + DIFF_FLAGS="" + flags="" + AS_CASE([$DIFF], + [diff], [flags="--strip-trailing-cr -u"], + [none], + [AC_MSG_ERROR([ocamltest requires a diff tool])]) + for flag in ${flags}; do + AC_MSG_CHECKING([whether $DIFF supports $flag]); + AS_IF([$DIFF $DIFF_FLAGS $flag $0 $0 > /dev/null 2>&1], + [DIFF_FLAGS="$DIFF_FLAGS $flag" + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + done]) AS_IF([test x"$enable_flambda" = "xyes"], [flambda=true @@ -1910,6 +2462,12 @@ AS_IF([test x"$enable_flambda" = "xyes"], [flambda=false flambda_invariants=false]) +AS_IF([$flambda], + [CMX_MAGIC_NUMBER=CMX_FLAMBDA__MAGIC_NUMBER + CMXA_MAGIC_NUMBER=CMXA_FLAMBDA__MAGIC_NUMBER], + [CMX_MAGIC_NUMBER=CMX_CLAMBDA__MAGIC_NUMBER + CMXA_MAGIC_NUMBER=CMXA_CLAMBDA__MAGIC_NUMBER]) + AS_IF([test x"$enable_cmm_invariants" = "xyes"], [cmm_invariants=true], [cmm_invariants=false]) @@ -1919,32 +2477,51 @@ AS_IF([test x"$enable_flat_float_array" = "xno"], [AC_DEFINE([FLAT_FLOAT_ARRAY]) flat_float_array=true]) +OCAML_MMAP_SUPPORTS_MAP_STACK +AS_IF([test x"$enable_mmap_map_stack" = "xyes"], + [AS_IF([test x"$has_mmap_map_stack" = "xtrue"], + [AS_CASE([$target], + [*-freebsd*], + [AC_MSG_ERROR([mmap MAP_STACK not supported on FreeBSD])], + [with_mmap_map_stack=true; + AC_DEFINE([USE_MMAP_MAP_STACK])])], + [AC_MSG_ERROR([mmap MAP_STACK requested but not found on $target])]) + ], + [AS_CASE([$target], + [*-openbsd*], + [with_mmap_map_stack=true; + AC_DEFINE([USE_MMAP_MAP_STACK]) + AC_MSG_NOTICE([using MAP_STACK on OpenBSD due to stack checking])], + [with_mmap_map_stack=false]) + ]) + +oc_native_compflags='' + AS_IF([test x"$enable_function_sections" = "xno"], [function_sections=false], [AS_CASE([$arch], - [amd64|i386|arm64], # not supported on arm32, see issue #9124. + [amd64|arm64], # not supported on arm32, see issue #9124. [AS_CASE([$target], [*-cygwin*|*-mingw*|*-windows|*-apple-darwin*], [function_sections=false; AC_MSG_NOTICE([No support for function sections on $target.])], - [*], - [AS_CASE([$ocaml_cv_cc_vendor], - [gcc-[0123]-*|gcc-4-[01234567]], - [function_sections=false; - AC_MSG_NOTICE([Function sections are not - supported in GCC prior to version 4.8.])], - [clang-[012]-*|clang-3-[01234]], - [function_sections=false; - AC_MSG_NOTICE([Function sections are not supported - in Clang prior to version 3.5.])], - [gcc-*|clang-*], - [function_sections=true; - internal_cflags="$internal_cflags -ffunction-sections"; - AC_DEFINE([FUNCTION_SECTIONS])], - [*], - [function_sections=false; - AC_MSG_NOTICE([Function sections are not supported by - $ocaml_cv_cc_vendor.])])])], + [AS_CASE([$ocaml_cc_vendor], + [gcc-[0123]-*|gcc-4-[01234567]], + [function_sections=false; + AC_MSG_NOTICE([Function sections are not + supported in GCC prior to version 4.8.])], + [clang-[012]-*|clang-3-[01234]], + [function_sections=false; + AC_MSG_NOTICE([Function sections are not supported + in Clang prior to version 3.5.])], + [gcc-*|clang-*], + [function_sections=true; + oc_native_compflags='-function-sections' + internal_cflags="$internal_cflags -ffunction-sections"; + AC_DEFINE([FUNCTION_SECTIONS])], + [function_sections=false; + AC_MSG_NOTICE([Function sections are not supported by + $ocaml_cc_vendor.])])])], [function_sections=false]); AS_IF([test x"$function_sections" = "xfalse"], [AS_IF([test x"$enable_function_sections" = "xyes"], @@ -1956,30 +2533,29 @@ AS_IF([test x"$with_afl" = "xyes"], [afl=true], [afl=false]) -AS_IF([test x"$enable_force_safe_string" = "xno"], - [force_safe_string=false], - [AC_DEFINE([CAML_SAFE_STRING]) - force_safe_string=true]) - -AS_IF([test x"$DEFAULT_STRING" = "xunsafe"], - [default_safe_string=false], - [default_safe_string=true]) +# Enable debugging support +# TODO: add a --disable-debug-info configure option that disables debugging +# info for both C and OCaml +AS_IF([test "$ccomptype" != "msvc"], + [internal_cflags="-g $internal_cflags"]) oc_cflags="$common_cflags $internal_cflags" oc_cppflags="$common_cppflags $internal_cppflags" -ocamlc_cflags="$common_cflags $sharedlib_cflags \$(CFLAGS)" -ocamlc_cppflags="$common_cppflags \$(CPPFLAGS)" -cclibs="$cclibs $mathlib" +ocamlc_cflags="$ocamlc_cflags $common_cflags $sharedlib_cflags $CFLAGS" +ocamlc_cppflags="$common_cppflags $CPPFLAGS" AS_CASE([$host], - [*-*-mingw32], - [bytecclibs="-lws2_32 -lversion" - nativecclibs="-lws2_32 -lversion"], + [*-*-mingw32*], + [cclibs="$cclibs -lole32 -luuid -lversion"], [*-pc-windows], - [bytecclibs="advapi32.lib ws2_32.lib version.lib" - nativecclibs="advapi32.lib ws2_32.lib version.lib"], - [bytecclibs="$cclibs $DLLIBS $PTHREAD_LIBS" - nativecclibs="$cclibs $DLLIBS"]) + [# For whatever reason, flexlink includes -ladvapi32 for mingw-w64, but + # doesn't include advapi32.lib for MSVC + cclibs="$cclibs ole32.lib uuid.lib advapi32.lib version.lib"]) + +AC_CONFIG_COMMANDS_PRE([cclibs="$cclibs $mathlib $DLLIBS $PTHREAD_LIBS"]) + +AS_IF([$tsan], + [cclibs="$cclibs -fsanitize=thread"]) AS_IF([test x"$libdir" = x'${exec_prefix}/lib'], [libdir="$libdir"/ocaml]) @@ -1988,7 +2564,7 @@ AS_IF([test x"$mandir" = x'${datarootdir}/man'], [mandir='${prefix}/man']) AS_CASE([$host], - [*-*-mingw32|*-pc-windows], + [*-*-mingw32*|*-pc-windows], [AS_CASE([$WINDOWS_UNICODE_MODE], [ansi], [windows_unicode=0], @@ -2000,8 +2576,8 @@ AS_CASE([$host], # Define default prefix correctly for the different Windows ports AS_IF([test x"$prefix" = "xNONE"], [AS_CASE([$host], - [i686-w64-mingw32], [prefix='C:/ocamlmgw'], - [x86_64-w64-mingw32], [prefix='C:/ocamlmgw64'], + [i686-w64-mingw32*], [prefix='C:/ocamlmgw'], + [x86_64-w64-mingw32*], [prefix='C:/ocamlmgw64'], [i686-pc-windows], [prefix='C:/ocamlms'], [x86_64-pc-windows], [prefix='C:/ocamlms64'])], [AS_IF([test x"$unix_or_win32" = "xwin32" \ @@ -2013,7 +2589,7 @@ AS_IF([test x"$prefix" = "xNONE"], # but whose value is not guessed properly by configure # (all this should be understood and fixed) AS_CASE([$host], - [*-*-mingw32], + [*-*-mingw32*], [AC_DEFINE([HAS_BROKEN_PRINTF]) AC_DEFINE([HAS_STRERROR]) AC_DEFINE([HAS_IPV6]) @@ -2028,10 +2604,105 @@ AS_CASE([$host], # as "Infinity" and "Inf" instead of the expected "inf" [AC_DEFINE([HAS_BROKEN_PRINTF])]) -AS_IF([test x"$enable_stdlib_manpages" != "xno"], - [stdlib_manpages=true],[stdlib_manpages=false]) - # Do not permanently cache the result of flexdll.h unset ac_cv_header_flexdll_h +# Evaluate install directories +# (this is needed for the OCaml configuration module) +AC_CONFIG_COMMANDS_PRE([ + saved_exec_prefix="$exec_prefix" + saved_prefix="$prefix" + AS_IF([test "x$prefix" = "xNONE"],[prefix="$ac_default_prefix"]) + AS_IF([test "x$exec_prefix" = "xNONE"],[exec_prefix="$prefix"]) + eval "exec_prefix=\"$exec_prefix\"" + eval "ocaml_bindir=\"$bindir\"" + eval "ocaml_libdir=\"$libdir\"" + AS_IF([test x"$target_bindir" = 'x'],[target_bindir="$ocaml_bindir"]) + AS_IF([test x"$target_launch_method" = 'x'], + [target_launch_method="$launch_method"]) + prefix="$saved_prefix" + exec_prefix="$saved_exec_prefix"]) + +# Just before config.status is generated, determine the final values for MKEXE, +# MKDLL, MKMAINDLL and MKEXE_VIA_CC. The final variables controlling these are: +# $mkexe - the linking command and munged CFLAGS + any extra flexlink flags +# $mkexe_exp: same as above but expanded +# $mkdll - the full linking command for DLLs +# $mkdll_exp: same as above but expanded +# $mkmaindll - the full linking command for main program in DLL +# $oc_ldflags $oc_dll_ldflags are handled as $(OC_LDFLAGS) and +# $(OC_DLL_LDFLAGS) and can be overridden in the build. +AC_CONFIG_COMMANDS_PRE([ + # Construct $mkexe + mkexe="$mkexe_cmd" + mkexe_exp="$mkexe_cmd_exp" + AS_IF([test -n "$mkexe_cflags"], + [mkexe="$mkexe $mkexe_cflags" + mkexe_exp="$mkexe_exp $common_cflags $CFLAGS"]) + AS_IF([test -n "$mkexe_extra_flags"], + [mkexe="$mkexe $mkexe_extra_flags" + mkexe_exp="$mkexe_exp $mkexe_extra_flags"]) + # If $mkexe_ldflags_prefix is given, apply it to $oc_ldflags and $oc_dllflags + # and ensure that LDFLAGS is passed using it. This is used for flexlink. where + # linker flags need to be prefixed with -link. + AS_IF([test -n "$mkexe_ldflags_prefix"],[ + AS_IF([test -n "$mkexedebugflag"], + [mkexedebugflag="${mkexe_ldflags_prefix}${mkexedebugflag}"]) + mkdll_ldflags="" + AS_IF([test -n "${LDFLAGS}"], + [for flag in ${LDFLAGS}; do + mkdll_ldflags="${mkdll_ldflags} ${mkexe_ldflags_prefix}${flag}" + done + mkdll_ldflags_exp="$mkdll_ldflags"]) + tmp_oc_ldflags="" + AS_IF([test -n "${oc_ldflags}"], + [for flag in ${oc_ldflags}; do + tmp_oc_ldflags="$tmp_oc_ldflags ${mkexe_ldflags_prefix}${flag}" + done + mkdll_ldflags_exp="$mkdll_ldflags_exp $tmp_oc_ldflags"]) + tmp_oc_dll_ldflags="" + AS_IF([test -n "${oc_dll_ldflags}"], + [for flag in ${oc_dll_ldflags}; do + tmp_oc_dll_ldflags="$tmp_oc_dll_ldflags ${mkexe_ldflags_prefix}${flag}" + done + mkdll_ldflags_exp="$mkdll_ldflags_exp $tmp_oc_dll_ldflags"]) + mkexe_ldflags=\ +"\$(addprefix ${mkexe_ldflags_prefix},\$(OC_LDFLAGS))${mkdll_ldflags}" + mkexe_ldflags_exp=\ +"${tmp_oc_ldflags} ${mkdll_ldflags}" + + mkdll_ldflags="\$(addprefix ${mkexe_ldflags_prefix},\$(OC_DLL_LDFLAGS)) \ +${mkdll_ldflags}" + ],[ + mkdll_ldflags='$(OC_DLL_LDFLAGS) $(LDFLAGS)' + mkdll_ldflags_exp="${oc_dll_ldflags}" + AS_IF([test -n ${LDFLAGS}], + [mkdll_ldflags_exp="$mkdll_ldflags_exp $LDFLAGS"]) + mkexe_ldflags="\$(OC_LDFLAGS) \$(LDFLAGS)" + mkexe_ldflags_exp="${oc_ldflags} ${LDFLAGS}" + ]) + mkexe="$mkexe $mkexe_ldflags" + mkexe_exp="$mkexe_exp $mkexe_ldflags_exp" + mkdll="$mkdll $mkdll_ldflags" + mkdll_exp="$mkdll_exp $mkdll_ldflags_exp" + mkmaindll="$mkmaindll $mkdll_ldflags_exp" + mkmaindll_exp="$mkmaindll_exp $mkdll_ldflags_exp" + # Do similarly with $mkexe_via_cc_ldflags_prefix, but this is only needed for + # the msvc ports. + AS_IF([test -n "$mkexe_via_cc_ldflags_prefix"],[ + mkexe_via_cc_ldflags=\ +"\$(addprefix ${mkexe_via_cc_ldflags_prefix},\$(OC_LDFLAGS) \$(LDFLAGS))" + ],[ + mkexe_via_cc_ldflags='$(OC_LDFLAGS) $(LDFLAGS)' + ]) + # cl requires linker flags after the objects. + AS_IF([test "$ccomptype" = 'msvc'], + [mkexe_via_cc_ldflags=\ +"\$(OUTPUTEXE)\$(1) \$(2) $mkexe_via_cc_ldflags"], + [mkexe_via_cc_ldflags=\ +"$mkexe_via_cc_ldflags \$(OUTPUTEXE)\$(1) \$(2)"]) + AS_IF([test -n "$mkexe_via_cc_extra_cmd"], + [mkexe_via_cc_ldflags="$mkexe_via_cc_ldflags $mkexe_via_cc_extra_cmd"]) +]) + AC_OUTPUT diff --git a/debugger/.depend b/debugger/.depend deleted file mode 100644 index ad8ba04e..00000000 --- a/debugger/.depend +++ /dev/null @@ -1,649 +0,0 @@ -breakpoints.cmo : \ - symbols.cmi \ - pos.cmi \ - parameters.cmi \ - ../utils/misc.cmi \ - ../bytecomp/instruct.cmi \ - exec.cmi \ - events.cmi \ - debugger_config.cmi \ - debugcom.cmi \ - checkpoints.cmi \ - breakpoints.cmi -breakpoints.cmx : \ - symbols.cmx \ - pos.cmx \ - parameters.cmx \ - ../utils/misc.cmx \ - ../bytecomp/instruct.cmx \ - exec.cmx \ - events.cmx \ - debugger_config.cmx \ - debugcom.cmx \ - checkpoints.cmx \ - breakpoints.cmi -breakpoints.cmi : \ - events.cmi \ - debugcom.cmi -checkpoints.cmo : \ - primitives.cmi \ - int64ops.cmi \ - debugcom.cmi \ - checkpoints.cmi -checkpoints.cmx : \ - primitives.cmx \ - int64ops.cmx \ - debugcom.cmx \ - checkpoints.cmi -checkpoints.cmi : \ - primitives.cmi \ - debugcom.cmi -command_line.cmo : \ - unix_tools.cmi \ - $(UNIXDIR)/unix.cmi \ - ../typing/types.cmi \ - time_travel.cmi \ - symbols.cmi \ - source.cmi \ - show_source.cmi \ - show_information.cmi \ - question.cmi \ - program_management.cmi \ - program_loading.cmi \ - printval.cmi \ - primitives.cmi \ - pos.cmi \ - parser_aux.cmi \ - parameters.cmi \ - ../parsing/longident.cmi \ - ../parsing/location.cmi \ - loadprinter.cmi \ - ../utils/load_path.cmi \ - int64ops.cmi \ - ../bytecomp/instruct.cmi \ - input_handling.cmi \ - history.cmi \ - frames.cmi \ - events.cmi \ - eval.cmi \ - ../typing/envaux.cmi \ - ../typing/env.cmi \ - debugger_parser.cmi \ - debugger_lexer.cmi \ - debugger_config.cmi \ - debugcom.cmi \ - checkpoints.cmi \ - breakpoints.cmi \ - command_line.cmi -command_line.cmx : \ - unix_tools.cmx \ - $(UNIXDIR)/unix.cmx \ - ../typing/types.cmx \ - time_travel.cmx \ - symbols.cmx \ - source.cmx \ - show_source.cmx \ - show_information.cmx \ - question.cmx \ - program_management.cmx \ - program_loading.cmx \ - printval.cmx \ - primitives.cmx \ - pos.cmx \ - parser_aux.cmi \ - parameters.cmx \ - ../parsing/longident.cmx \ - ../parsing/location.cmx \ - loadprinter.cmx \ - ../utils/load_path.cmx \ - int64ops.cmx \ - ../bytecomp/instruct.cmx \ - input_handling.cmx \ - history.cmx \ - frames.cmx \ - events.cmx \ - eval.cmx \ - ../typing/envaux.cmx \ - ../typing/env.cmx \ - debugger_parser.cmx \ - debugger_lexer.cmx \ - debugger_config.cmx \ - debugcom.cmx \ - checkpoints.cmx \ - breakpoints.cmx \ - command_line.cmi -command_line.cmi : -debugcom.cmo : \ - primitives.cmi \ - ../utils/misc.cmi \ - int64ops.cmi \ - ../bytecomp/instruct.cmi \ - input_handling.cmi \ - debugcom.cmi -debugcom.cmx : \ - primitives.cmx \ - ../utils/misc.cmx \ - int64ops.cmx \ - ../bytecomp/instruct.cmx \ - input_handling.cmx \ - debugcom.cmi -debugcom.cmi : \ - primitives.cmi \ - ../bytecomp/instruct.cmi -debugger_config.cmo : \ - int64ops.cmi \ - debugger_config.cmi -debugger_config.cmx : \ - int64ops.cmx \ - debugger_config.cmi -debugger_config.cmi : -debugger_lexer.cmo : \ - debugger_parser.cmi \ - debugger_lexer.cmi -debugger_lexer.cmx : \ - debugger_parser.cmx \ - debugger_lexer.cmi -debugger_lexer.cmi : \ - debugger_parser.cmi -debugger_parser.cmo : \ - parser_aux.cmi \ - ../parsing/longident.cmi \ - int64ops.cmi \ - input_handling.cmi \ - debugcom.cmi \ - debugger_parser.cmi -debugger_parser.cmx : \ - parser_aux.cmi \ - ../parsing/longident.cmx \ - int64ops.cmx \ - input_handling.cmx \ - debugcom.cmx \ - debugger_parser.cmi -debugger_parser.cmi : \ - parser_aux.cmi \ - ../parsing/longident.cmi -eval.cmo : \ - ../typing/types.cmi \ - ../bytecomp/symtable.cmi \ - ../typing/subst.cmi \ - printval.cmi \ - ../typing/printtyp.cmi \ - ../typing/predef.cmi \ - ../typing/path.cmi \ - parser_aux.cmi \ - ../utils/misc.cmi \ - ../parsing/longident.cmi \ - ../bytecomp/instruct.cmi \ - ../typing/ident.cmi \ - frames.cmi \ - events.cmi \ - ../typing/env.cmi \ - debugcom.cmi \ - ../typing/ctype.cmi \ - ../typing/btype.cmi \ - eval.cmi -eval.cmx : \ - ../typing/types.cmx \ - ../bytecomp/symtable.cmx \ - ../typing/subst.cmx \ - printval.cmx \ - ../typing/printtyp.cmx \ - ../typing/predef.cmx \ - ../typing/path.cmx \ - parser_aux.cmi \ - ../utils/misc.cmx \ - ../parsing/longident.cmx \ - ../bytecomp/instruct.cmx \ - ../typing/ident.cmx \ - frames.cmx \ - events.cmx \ - ../typing/env.cmx \ - debugcom.cmx \ - ../typing/ctype.cmx \ - ../typing/btype.cmx \ - eval.cmi -eval.cmi : \ - ../typing/types.cmi \ - ../typing/path.cmi \ - parser_aux.cmi \ - ../parsing/longident.cmi \ - ../typing/ident.cmi \ - events.cmi \ - ../typing/env.cmi \ - debugcom.cmi -events.cmo : \ - ../parsing/location.cmi \ - ../bytecomp/instruct.cmi \ - events.cmi -events.cmx : \ - ../parsing/location.cmx \ - ../bytecomp/instruct.cmx \ - events.cmi -events.cmi : \ - ../bytecomp/instruct.cmi -exec.cmo : \ - exec.cmi -exec.cmx : \ - exec.cmi -exec.cmi : -frames.cmo : \ - symbols.cmi \ - ../utils/misc.cmi \ - ../bytecomp/instruct.cmi \ - events.cmi \ - debugcom.cmi \ - frames.cmi -frames.cmx : \ - symbols.cmx \ - ../utils/misc.cmx \ - ../bytecomp/instruct.cmx \ - events.cmx \ - debugcom.cmx \ - frames.cmi -frames.cmi : \ - events.cmi -history.cmo : \ - primitives.cmi \ - int64ops.cmi \ - debugger_config.cmi \ - checkpoints.cmi \ - history.cmi -history.cmx : \ - primitives.cmx \ - int64ops.cmx \ - debugger_config.cmx \ - checkpoints.cmx \ - history.cmi -history.cmi : -input_handling.cmo : \ - $(UNIXDIR)/unix.cmi \ - primitives.cmi \ - parameters.cmi \ - input_handling.cmi -input_handling.cmx : \ - $(UNIXDIR)/unix.cmx \ - primitives.cmx \ - parameters.cmx \ - input_handling.cmi -input_handling.cmi : \ - primitives.cmi -int64ops.cmo : \ - int64ops.cmi -int64ops.cmx : \ - int64ops.cmi -int64ops.cmi : -loadprinter.cmo : \ - ../typing/types.cmi \ - ../bytecomp/symtable.cmi \ - printval.cmi \ - ../typing/printtyp.cmi \ - ../typing/path.cmi \ - parameters.cmi \ - ../utils/misc.cmi \ - ../parsing/longident.cmi \ - ../utils/load_path.cmi \ - ../typing/ident.cmi \ - ../typing/env.cmi \ - ../otherlibs/dynlink/dynlink.cmi \ - ../typing/ctype.cmi \ - loadprinter.cmi -loadprinter.cmx : \ - ../typing/types.cmx \ - ../bytecomp/symtable.cmx \ - printval.cmx \ - ../typing/printtyp.cmx \ - ../typing/path.cmx \ - parameters.cmx \ - ../utils/misc.cmx \ - ../parsing/longident.cmx \ - ../utils/load_path.cmx \ - ../typing/ident.cmx \ - ../typing/env.cmx \ - ../otherlibs/dynlink/dynlink.cmi \ - ../typing/ctype.cmx \ - loadprinter.cmi -loadprinter.cmi : \ - ../parsing/longident.cmi \ - ../otherlibs/dynlink/dynlink.cmi -main.cmo : \ - unix_tools.cmi \ - $(UNIXDIR)/unix.cmi \ - time_travel.cmi \ - show_information.cmi \ - question.cmi \ - program_management.cmi \ - primitives.cmi \ - ../typing/persistent_env.cmi \ - parameters.cmi \ - ../utils/misc.cmi \ - loadprinter.cmi \ - ../utils/load_path.cmi \ - input_handling.cmi \ - frames.cmi \ - exec.cmi \ - debugger_config.cmi \ - ../utils/config.cmi \ - command_line.cmi \ - ../file_formats/cmi_format.cmi \ - ../utils/clflags.cmi \ - checkpoints.cmi -main.cmx : \ - unix_tools.cmx \ - $(UNIXDIR)/unix.cmx \ - time_travel.cmx \ - show_information.cmx \ - question.cmx \ - program_management.cmx \ - primitives.cmx \ - ../typing/persistent_env.cmx \ - parameters.cmx \ - ../utils/misc.cmx \ - loadprinter.cmx \ - ../utils/load_path.cmx \ - input_handling.cmx \ - frames.cmx \ - exec.cmx \ - debugger_config.cmx \ - ../utils/config.cmx \ - command_line.cmx \ - ../file_formats/cmi_format.cmx \ - ../utils/clflags.cmx \ - checkpoints.cmx -ocamldebug_entry.cmo : \ - $(UNIXDIR)/unix.cmi -ocamldebug_entry.cmx : \ - $(UNIXDIR)/unix.cmx -parameters.cmo : \ - ../utils/load_path.cmi \ - ../typing/envaux.cmi \ - debugger_config.cmi \ - ../utils/config.cmi \ - parameters.cmi -parameters.cmx : \ - ../utils/load_path.cmx \ - ../typing/envaux.cmx \ - debugger_config.cmx \ - ../utils/config.cmx \ - parameters.cmi -parameters.cmi : -parser_aux.cmi : \ - ../parsing/longident.cmi \ - debugcom.cmi -pattern_matching.cmo : \ - ../typing/typedtree.cmi \ - parser_aux.cmi \ - ../utils/misc.cmi \ - debugger_config.cmi \ - debugcom.cmi \ - ../typing/ctype.cmi \ - pattern_matching.cmi -pattern_matching.cmx : \ - ../typing/typedtree.cmx \ - parser_aux.cmi \ - ../utils/misc.cmx \ - debugger_config.cmx \ - debugcom.cmx \ - ../typing/ctype.cmx \ - pattern_matching.cmi -pattern_matching.cmi : \ - ../typing/typedtree.cmi \ - parser_aux.cmi \ - debugcom.cmi -pos.cmo : \ - ../parsing/location.cmi \ - ../bytecomp/instruct.cmi \ - events.cmi \ - pos.cmi -pos.cmx : \ - ../parsing/location.cmx \ - ../bytecomp/instruct.cmx \ - events.cmx \ - pos.cmi -pos.cmi : \ - events.cmi -primitives.cmo : \ - $(UNIXDIR)/unix.cmi \ - primitives.cmi -primitives.cmx : \ - $(UNIXDIR)/unix.cmx \ - primitives.cmi -primitives.cmi : \ - $(UNIXDIR)/unix.cmi -printval.cmo : \ - ../typing/types.cmi \ - ../bytecomp/symtable.cmi \ - ../typing/printtyp.cmi \ - parser_aux.cmi \ - ../typing/outcometree.cmi \ - ../typing/oprint.cmi \ - ../toplevel/genprintval.cmi \ - ../typing/env.cmi \ - debugcom.cmi \ - printval.cmi -printval.cmx : \ - ../typing/types.cmx \ - ../bytecomp/symtable.cmx \ - ../typing/printtyp.cmx \ - parser_aux.cmi \ - ../typing/outcometree.cmi \ - ../typing/oprint.cmx \ - ../toplevel/genprintval.cmx \ - ../typing/env.cmx \ - debugcom.cmx \ - printval.cmi -printval.cmi : \ - ../typing/types.cmi \ - ../typing/path.cmi \ - parser_aux.cmi \ - ../typing/env.cmi \ - debugcom.cmi -program_loading.cmo : \ - unix_tools.cmi \ - $(UNIXDIR)/unix.cmi \ - primitives.cmi \ - parameters.cmi \ - input_handling.cmi \ - debugger_config.cmi \ - program_loading.cmi -program_loading.cmx : \ - unix_tools.cmx \ - $(UNIXDIR)/unix.cmx \ - primitives.cmx \ - parameters.cmx \ - input_handling.cmx \ - debugger_config.cmx \ - program_loading.cmi -program_loading.cmi : \ - primitives.cmi -program_management.cmo : \ - unix_tools.cmi \ - $(UNIXDIR)/unix.cmi \ - time_travel.cmi \ - symbols.cmi \ - question.cmi \ - program_loading.cmi \ - primitives.cmi \ - parameters.cmi \ - ../utils/load_path.cmi \ - int64ops.cmi \ - input_handling.cmi \ - history.cmi \ - ../typing/envaux.cmi \ - debugger_config.cmi \ - breakpoints.cmi \ - program_management.cmi -program_management.cmx : \ - unix_tools.cmx \ - $(UNIXDIR)/unix.cmx \ - time_travel.cmx \ - symbols.cmx \ - question.cmx \ - program_loading.cmx \ - primitives.cmx \ - parameters.cmx \ - ../utils/load_path.cmx \ - int64ops.cmx \ - input_handling.cmx \ - history.cmx \ - ../typing/envaux.cmx \ - debugger_config.cmx \ - breakpoints.cmx \ - program_management.cmi -program_management.cmi : -question.cmo : \ - primitives.cmi \ - input_handling.cmi \ - debugger_lexer.cmi \ - question.cmi -question.cmx : \ - primitives.cmx \ - input_handling.cmx \ - debugger_lexer.cmx \ - question.cmi -question.cmi : -show_information.cmo : \ - symbols.cmi \ - source.cmi \ - show_source.cmi \ - printval.cmi \ - parameters.cmi \ - ../utils/misc.cmi \ - ../bytecomp/instruct.cmi \ - frames.cmi \ - events.cmi \ - debugcom.cmi \ - checkpoints.cmi \ - breakpoints.cmi \ - show_information.cmi -show_information.cmx : \ - symbols.cmx \ - source.cmx \ - show_source.cmx \ - printval.cmx \ - parameters.cmx \ - ../utils/misc.cmx \ - ../bytecomp/instruct.cmx \ - frames.cmx \ - events.cmx \ - debugcom.cmx \ - checkpoints.cmx \ - breakpoints.cmx \ - show_information.cmi -show_information.cmi : \ - events.cmi -show_source.cmo : \ - source.cmi \ - primitives.cmi \ - parameters.cmi \ - ../parsing/location.cmi \ - ../bytecomp/instruct.cmi \ - events.cmi \ - debugger_config.cmi \ - show_source.cmi -show_source.cmx : \ - source.cmx \ - primitives.cmx \ - parameters.cmx \ - ../parsing/location.cmx \ - ../bytecomp/instruct.cmx \ - events.cmx \ - debugger_config.cmx \ - show_source.cmi -show_source.cmi : \ - ../bytecomp/instruct.cmi -source.cmo : \ - primitives.cmi \ - ../utils/misc.cmi \ - ../utils/load_path.cmi \ - debugger_config.cmi \ - source.cmi -source.cmx : \ - primitives.cmx \ - ../utils/misc.cmx \ - ../utils/load_path.cmx \ - debugger_config.cmx \ - source.cmi -source.cmi : -symbols.cmo : \ - ../bytecomp/symtable.cmi \ - program_loading.cmi \ - ../utils/misc.cmi \ - ../bytecomp/instruct.cmi \ - events.cmi \ - debugger_config.cmi \ - debugcom.cmi \ - checkpoints.cmi \ - ../bytecomp/bytesections.cmi \ - symbols.cmi -symbols.cmx : \ - ../bytecomp/symtable.cmx \ - program_loading.cmx \ - ../utils/misc.cmx \ - ../bytecomp/instruct.cmx \ - events.cmx \ - debugger_config.cmx \ - debugcom.cmx \ - checkpoints.cmx \ - ../bytecomp/bytesections.cmx \ - symbols.cmi -symbols.cmi : \ - ../bytecomp/instruct.cmi \ - events.cmi \ - debugcom.cmi -time_travel.cmo : \ - trap_barrier.cmi \ - symbols.cmi \ - question.cmi \ - program_loading.cmi \ - primitives.cmi \ - ../utils/misc.cmi \ - int64ops.cmi \ - ../bytecomp/instruct.cmi \ - input_handling.cmi \ - exec.cmi \ - events.cmi \ - debugger_config.cmi \ - debugcom.cmi \ - checkpoints.cmi \ - breakpoints.cmi \ - time_travel.cmi -time_travel.cmx : \ - trap_barrier.cmx \ - symbols.cmx \ - question.cmx \ - program_loading.cmx \ - primitives.cmx \ - ../utils/misc.cmx \ - int64ops.cmx \ - ../bytecomp/instruct.cmx \ - input_handling.cmx \ - exec.cmx \ - events.cmx \ - debugger_config.cmx \ - debugcom.cmx \ - checkpoints.cmx \ - breakpoints.cmx \ - time_travel.cmi -time_travel.cmi : \ - primitives.cmi -trap_barrier.cmo : \ - exec.cmi \ - debugcom.cmi \ - checkpoints.cmi \ - trap_barrier.cmi -trap_barrier.cmx : \ - exec.cmx \ - debugcom.cmx \ - checkpoints.cmx \ - trap_barrier.cmi -trap_barrier.cmi : -unix_tools.cmo : \ - $(UNIXDIR)/unix.cmi \ - ../utils/misc.cmi \ - unix_tools.cmi -unix_tools.cmx : \ - $(UNIXDIR)/unix.cmx \ - ../utils/misc.cmx \ - unix_tools.cmi -unix_tools.cmi : \ - $(UNIXDIR)/unix.cmi diff --git a/debugger/Makefile b/debugger/Makefile deleted file mode 100644 index 10085381..00000000 --- a/debugger/Makefile +++ /dev/null @@ -1,90 +0,0 @@ -#************************************************************************** -#* * -#* OCaml * -#* * -#* Xavier Leroy, projet Cristal, INRIA Rocquencourt * -#* * -#* Copyright 1999 Institut National de Recherche en Informatique et * -#* en Automatique. * -#* * -#* All rights reserved. This file is distributed under the terms of * -#* the GNU Lesser General Public License version 2.1, with the * -#* special exception on linking described in the file LICENSE. * -#* * -#************************************************************************** - -ROOTDIR = .. - -include $(ROOTDIR)/Makefile.common -include $(ROOTDIR)/Makefile.best_binaries - -DYNLINKDIR=$(ROOTDIR)/otherlibs/dynlink -UNIXDIR=$(ROOTDIR)/otherlibs/$(UNIXLIB) - -CAMLC=$(BEST_OCAMLC) -g -nostdlib -I $(ROOTDIR)/stdlib -COMPFLAGS=$(INCLUDES) -absname -w +a-4-9-41-42-44-45-48-70 -warn-error +A \ - -safe-string -strict-sequence -strict-formats -LINKFLAGS=-linkall -I $(UNIXDIR) -I $(DYNLINKDIR) -CAMLDEP=$(BEST_OCAMLDEP) -DEPFLAGS=-slash -DEPINCLUDES=$(INCLUDES) - -DIRECTORIES=$(UNIXDIR) $(DYNLINKDIR) $(addprefix $(ROOTDIR)/,\ - utils parsing typing bytecomp toplevel driver file_formats lambda) - -INCLUDES=$(addprefix -I ,$(DIRECTORIES)) - -compiler_modules := $(ROOTDIR)/toplevel/genprintval - -debugger_modules := \ - int64ops primitives unix_tools debugger_config parameters debugger_lexer \ - input_handling question debugcom exec source pos checkpoints events \ - program_loading symbols breakpoints trap_barrier history printval \ - show_source time_travel program_management frames eval \ - show_information loadprinter debugger_parser command_line main - -compiler_objects := $(addsuffix .cmo,$(compiler_modules)) - -debugger_objects := $(addsuffix .cmo,$(debugger_modules)) - -libraries = $(ROOTDIR)/compilerlibs/ocamlcommon.cma \ - $(UNIXDIR)/unix.cma $(DYNLINKDIR)/dynlink.cma - -all: ocamldebug$(EXE) - -ocamldebug.cmo: $(debugger_objects) - $(CAMLC) -pack $(COMPFLAGS) -o $@ $^ - -ocamldebug$(EXE): $(libraries) $(compiler_objects) ocamldebug.cmo \ - ocamldebug_entry.cmo - $(CAMLC) $(LINKFLAGS) -o $@ -linkall $^ - -install: - $(INSTALL_PROG) ocamldebug$(EXE) "$(INSTALL_BINDIR)" - -clean:: - rm -f ocamldebug ocamldebug.exe - rm -f *.cmo *.cmi - -ocamldebug_entry.cmo: ocamldebug_entry.ml ocamldebug.cmo - $(CAMLC) -c $(COMPFLAGS) $< - -%.cmo: %.ml - $(CAMLC) -c $(COMPFLAGS) -for-pack ocamldebug $< - -%.cmi: %.mli - $(CAMLC) -c $(COMPFLAGS) -for-pack ocamldebug $< - -depend: beforedepend - $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) *.mli *.ml \ - | sed -e 's,$(UNIXDIR)/,$$(UNIXDIR)/,' > .depend - -clean:: - rm -f debugger_lexer.ml -beforedepend:: debugger_lexer.ml - -clean:: - rm -f debugger_parser.ml debugger_parser.mli -beforedepend:: debugger_parser.ml debugger_parser.mli - -include .depend diff --git a/debugger/checkpoints.ml b/debugger/checkpoints.ml index b7896140..5b72d8c6 100644 --- a/debugger/checkpoints.ml +++ b/debugger/checkpoints.ml @@ -44,7 +44,7 @@ type checkpoint = { mutable c_parent : checkpoint; mutable c_breakpoint_version : int; mutable c_breakpoints : (pc * int ref) list; - mutable c_trap_barrier : int; + mutable c_trap_barrier : Sp.t; mutable c_code_fragments : int list } @@ -60,8 +60,8 @@ let rec root = { c_parent = root; c_breakpoint_version = 0; c_breakpoints = []; - c_trap_barrier = 0; - c_code_fragments = [0] + c_trap_barrier = Sp.null; + c_code_fragments = [main_frag] } (*** Current state ***) diff --git a/debugger/checkpoints.mli b/debugger/checkpoints.mli index d02240ee..81b0e055 100644 --- a/debugger/checkpoints.mli +++ b/debugger/checkpoints.mli @@ -43,7 +43,7 @@ type checkpoint = mutable c_parent : checkpoint; mutable c_breakpoint_version : int; mutable c_breakpoints : (pc * int ref) list; - mutable c_trap_barrier : int; + mutable c_trap_barrier : Sp.t; mutable c_code_fragments : int list} (*** Pseudo-checkpoint `root'. ***) @@ -57,4 +57,4 @@ val current_checkpoint : checkpoint ref val current_time : unit -> int64 val current_report : unit -> report option val current_pc : unit -> pc option -val current_pc_sp : unit -> (pc * int) option +val current_pc_sp : unit -> (pc * Sp.t) option diff --git a/debugger/command_line.ml b/debugger/command_line.ml index 3efc80f1..6e466956 100644 --- a/debugger/command_line.ml +++ b/debugger/command_line.ml @@ -154,10 +154,12 @@ let module_of_longident id = let convert_module mdle = match mdle with | Some m -> - (* Strip .ml extension if any, and capitalize *) - String.capitalize_ascii(if Filename.check_suffix m ".ml" - then Filename.chop_suffix m ".ml" - else m) + (* Strip .ml extension if any, beware that mdle might be a module path *) + let stripped = + if Filename.check_suffix m ".ml" then Filename.chop_suffix m ".ml" + else m + in + Unit_info.modulize stripped | None -> try (get_current_event ()).ev_ev.ev_module with Not_found -> error "Not in a module." @@ -205,7 +207,7 @@ let line_loop ppf line_buffer = !previous_line in previous_line := ""; - if interprete_line ppf line then + if interprete_line ppf line && !interactif then previous_line := line done with @@ -262,7 +264,8 @@ let instr_dir ppf lexbuf = let new_directory = argument_list_eol argument lexbuf in if new_directory = [] then begin if yes_or_no "Reinitialize directory list" then begin - Load_path.init !default_load_path; + Load_path.init ~auto_include:Compmisc.auto_include + ~visible:!default_load_path ~hidden:[]; Envaux.reset_cache (); Hashtbl.clear Debugger_config.load_path_for; flush_buffer_list () @@ -278,7 +281,8 @@ let instr_dir ppf lexbuf = List.iter (function x -> add_path (expand_path x)) new_directory' end; let print_dirs ppf l = List.iter (function x -> fprintf ppf "@ %s" x) l in - fprintf ppf "@[<2>Directories: %a@]@." print_dirs (Load_path.get_paths ()); + fprintf ppf "@[<2>Directories: %a@]@." print_dirs + (Load_path.get_path_list ()); Hashtbl.iter (fun mdl dirs -> fprintf ppf "@[<2>Source directories for %s: %a@]@." mdl print_dirs diff --git a/debugger/command_line.mli b/debugger/command_line.mli index dc3a8d51..adba6356 100644 --- a/debugger/command_line.mli +++ b/debugger/command_line.mli @@ -16,8 +16,8 @@ (************************ Reading and executing commands ***************) -open Lexing;; -open Format;; +open Lexing +open Format -val interprete_line : formatter -> string -> bool;; -val line_loop : formatter -> lexbuf -> unit;; +val interprete_line : formatter -> string -> bool +val line_loop : formatter -> lexbuf -> unit diff --git a/debugger/debugcom.ml b/debugger/debugcom.ml index f9f8164f..5705cd73 100644 --- a/debugger/debugcom.ml +++ b/debugger/debugcom.ml @@ -49,6 +49,31 @@ type pc = { frag : int; pos : int; } +module Sp = struct + + (* Position in the debuggee's stack. *) + type t = { + block : int; + offset : int; + } + + let null = { block = -1; offset = -1} + + let base sp n = {sp with offset = sp.offset - n} + + let compare sp1 sp2 = + match Stdlib.compare sp1.block sp2.block with + | 0 -> Stdlib.compare sp1.offset sp2.offset + | x -> x + +end + +(* Identifier of the code fragment for the main program. + Numbering starts at 1 and the runtime registers 2 fragments before + the main program: one for uncaught exceptions and one for callbacks. +*) +let main_frag = 3 + let set_event {frag; pos} = output_char !conn.io_out 'e'; output_binary_int !conn.io_out frag; @@ -79,7 +104,7 @@ type execution_summary = type report = { rep_type : execution_summary; rep_event_count : int64; - rep_stack_pointer : int; + rep_stack_pointer : Sp.t; rep_program_pointer : pc } @@ -112,12 +137,13 @@ let do_go_smallint n = | c -> Misc.fatal_error (Printf.sprintf "Debugcom.do_go %c" c) in let event_counter = input_binary_int !conn.io_in in - let stack_pos = input_binary_int !conn.io_in in + let block = input_binary_int !conn.io_in in + let offset = input_binary_int !conn.io_in in let frag = input_binary_int !conn.io_in in let pos = input_binary_int !conn.io_in in { rep_type = summary; rep_event_count = Int64.of_int event_counter; - rep_stack_pointer = stack_pos; + rep_stack_pointer = Sp.{block; offset}; rep_program_pointer = {frag; pos} }) let rec do_go n = @@ -166,10 +192,11 @@ let wait_child chan = let initial_frame () = output_char !conn.io_out '0'; flush !conn.io_out; - let stack_pos = input_binary_int !conn.io_in in + let block = input_binary_int !conn.io_in in + let offset = input_binary_int !conn.io_in in let frag = input_binary_int !conn.io_in in let pos = input_binary_int !conn.io_in in - (stack_pos, {frag; pos}) + (Sp.{block; offset}, {frag; pos}) let set_initial_frame () = ignore(initial_frame ()) @@ -182,35 +209,43 @@ let up_frame stacksize = output_char !conn.io_out 'U'; output_binary_int !conn.io_out stacksize; flush !conn.io_out; - let stack_pos = input_binary_int !conn.io_in in + let block = input_binary_int !conn.io_in in + let offset = input_binary_int !conn.io_in in let frag, pos = - if stack_pos = -1 - then 0, 0 - else let frag = input_binary_int !conn.io_in in - let pos = input_binary_int !conn.io_in in - frag, pos + if block = -1 then + begin + assert (offset = -1); + 0, 0 + end else begin + let frag = input_binary_int !conn.io_in in + let pos = input_binary_int !conn.io_in in + frag, pos + end in - (stack_pos, { frag; pos }) + (Sp.{block; offset}, { frag; pos }) (* Get and set the current frame position *) let get_frame () = output_char !conn.io_out 'f'; flush !conn.io_out; - let stack_pos = input_binary_int !conn.io_in in + let block = input_binary_int !conn.io_in in + let offset = input_binary_int !conn.io_in in let frag = input_binary_int !conn.io_in in let pos = input_binary_int !conn.io_in in - (stack_pos, {frag; pos}) + (Sp.{block; offset}, {frag; pos}) let set_frame stack_pos = output_char !conn.io_out 'S'; - output_binary_int !conn.io_out stack_pos + output_binary_int !conn.io_out stack_pos.Sp.block; + output_binary_int !conn.io_out stack_pos.Sp.offset (* Set the trap barrier to given stack position. *) let set_trap_barrier pos = output_char !conn.io_out 'b'; - output_binary_int !conn.io_out pos + output_binary_int !conn.io_out pos.Sp.block; + output_binary_int !conn.io_out pos.Sp.offset (* Handling of remote values *) diff --git a/debugger/debugcom.mli b/debugger/debugcom.mli index 0b6eb30f..4e022dbf 100644 --- a/debugger/debugcom.mli +++ b/debugger/debugcom.mli @@ -16,10 +16,19 @@ (* Low-level communication with the debuggee *) +module Sp : sig + type t + val null : t + val base : t -> int -> t + val compare : t -> t -> int +end + type pc = { frag : int; pos : int; } +val main_frag : int + type execution_summary = Event | Breakpoint @@ -33,7 +42,7 @@ type execution_summary = type report = { rep_type : execution_summary; rep_event_count : int64; - rep_stack_pointer : int; + rep_stack_pointer : Sp.t; rep_program_pointer : pc } type checkpoint_report = @@ -70,23 +79,25 @@ val wait_child : Primitives.io_channel -> unit (* Move to initial frame (that of current function). *) (* Return stack position and current pc *) -val initial_frame : unit -> int * pc +val initial_frame : unit -> Sp.t * pc val set_initial_frame : unit -> unit (* Get the current frame position *) (* Return stack position and current pc *) -val get_frame : unit -> int * pc +val get_frame : unit -> Sp.t * pc (* Set the current frame *) -val set_frame : int -> unit +val set_frame : Sp.t -> unit (* Move up one frame *) (* Return stack position and current pc. - If there's no frame above, return (-1, 0). *) -val up_frame : int -> int * pc + If there's no frame above, return (null_sp, _). + The argument is the size of the current frame. + *) +val up_frame : int -> Sp.t * pc (* Set the trap barrier to given stack position. *) -val set_trap_barrier : int -> unit +val set_trap_barrier : Sp.t -> unit (* Set whether the debugger follow the child or the parent process on fork *) val fork_mode : follow_fork_mode ref diff --git a/debugger/debugger_parser.mly b/debugger/debugger_parser.mly index b8789d94..973b7619 100644 --- a/debugger/debugger_parser.mly +++ b/debugger/debugger_parser.mly @@ -237,7 +237,8 @@ expression_list_eol : break_argument_eol : end_of_line { BA_none } - | integer_eol { BA_pc {frag = 0; pos = $1} } + | integer_eol { BA_pc {frag = main_frag; + pos = $1} } | INTEGER COLON integer_eol { BA_pc {frag = to_int $1; pos = $3} } | expression end_of_line { BA_function $1 } diff --git a/debugger/eval.ml b/debugger/eval.ml index a47f381d..190ff4f2 100644 --- a/debugger/eval.ml +++ b/debugger/eval.ml @@ -42,26 +42,39 @@ let abstract_type = let rec address path event = function | Env.Aident id -> - if Ident.global id then - try - Debugcom.Remote_value.global (Symtable.get_global_position id) - with Symtable.Error _ -> raise(Error(Unbound_identifier id)) - else + begin + match Symtable.Global.of_ident id with + | Some global -> + begin + try Debugcom.Remote_value.global (Symtable.get_global_position + global) + with Symtable.Error _ -> raise(Error(Unbound_identifier id)) + end + | None -> + let not_found () = + raise(Error(Unbound_identifier id)) + in begin match event with Some {ev_ev = ev} -> begin try let pos = Ident.find_same id ev.ev_compenv.ce_stack in Debugcom.Remote_value.local (ev.ev_stacksize - pos) with Not_found -> - try - let pos = Ident.find_same id ev.ev_compenv.ce_heap in - Debugcom.Remote_value.from_environment pos - with Not_found -> - raise(Error(Unbound_identifier id)) + match ev.ev_compenv.ce_closure with + | Not_in_closure -> not_found () + | In_closure { entries; env_pos } -> + match Ident.find_same id entries with + | Free_variable pos -> + Debugcom.Remote_value.from_environment (pos - env_pos) + | Function _pos -> + (* Recursive functions seem to be unhandled *) + not_found () + | exception Not_found -> not_found () end | None -> - raise(Error(Unbound_identifier id)) + not_found () end + end | Env.Adot(root, pos) -> let v = address path event root in if not (Debugcom.Remote_value.is_block v) then @@ -172,24 +185,27 @@ and find_label lbl env ty path tydesc pos = function (* Error report *) open Format +module Style = Misc.Style let report_error ppf = function | Unbound_identifier id -> - fprintf ppf "@[Unbound identifier %s@]@." (Ident.name id) + fprintf ppf "@[Unbound identifier %a@]@." + Style.inline_code (Ident.name id) | Not_initialized_yet path -> fprintf ppf "@[The module path %a is not yet initialized.@ \ Please run program forward@ \ until its initialization code is executed.@]@." - Printtyp.path path + (Style.as_inline_code Printtyp.path) path | Unbound_long_identifier lid -> - fprintf ppf "@[Unbound identifier %a@]@." Printtyp.longident lid + fprintf ppf "@[Unbound identifier %a@]@." + (Style.as_inline_code Printtyp.longident) lid | Unknown_name n -> fprintf ppf "@[Unknown value name $%i@]@." n | Tuple_index(ty, len, pos) -> fprintf ppf "@[Cannot extract field number %i from a %i-tuple of type@ %a@]@." - pos len Printtyp.type_expr ty + pos len (Style.as_inline_code Printtyp.type_expr) ty | Array_index(len, pos) -> fprintf ppf "@[Cannot extract element number %i from an array of length %i@]@." @@ -206,13 +222,15 @@ let report_error ppf = function | Wrong_item_type(ty, pos) -> fprintf ppf "@[Cannot extract item number %i from a value of type@ %a@]@." - pos Printtyp.type_expr ty + pos (Style.as_inline_code Printtyp.type_expr) ty | Wrong_label(ty, lbl) -> fprintf ppf - "@[The record type@ %a@ has no label named %s@]@." - Printtyp.type_expr ty lbl + "@[The record type@ %a@ has no label named %a@]@." + (Style.as_inline_code Printtyp.type_expr) ty + Style.inline_code lbl | Not_a_record ty -> fprintf ppf - "@[The type@ %a@ is not a record type@]@." Printtyp.type_expr ty + "@[The type@ %a@ is not a record type@]@." + (Style.as_inline_code Printtyp.type_expr) ty | No_result -> fprintf ppf "@[No result available at current program event@]@." diff --git a/debugger/events.ml b/debugger/events.ml index 3bad8b2f..411ae2e7 100644 --- a/debugger/events.ml +++ b/debugger/events.ml @@ -27,7 +27,6 @@ let get_pos ev = | Event_before -> ev.ev_loc.Location.loc_start | Event_after _ -> ev.ev_loc.Location.loc_end | _ -> ev.ev_loc.Location.loc_start -;; (*** Current events. ***) diff --git a/debugger/events.mli b/debugger/events.mli index b095e50a..3d3f190a 100644 --- a/debugger/events.mli +++ b/debugger/events.mli @@ -21,7 +21,7 @@ type code_event = { ev_frag : int; ev_ev : Instruct.debug_event } -val get_pos : debug_event -> Lexing.position;; +val get_pos : debug_event -> Lexing.position (** Current events. **) diff --git a/debugger/frames.ml b/debugger/frames.ml index e1edf231..d590367d 100644 --- a/debugger/frames.ml +++ b/debugger/frames.ml @@ -53,7 +53,7 @@ let selected_event_is_before () = let rec move_up frame_count event = if frame_count <= 0 then event else begin let (sp, pc) = up_frame event.ev_ev.ev_stacksize in - if sp < 0 then raise Not_found; + if sp = Sp.null then raise Not_found; move_up (frame_count - 1) (any_event_at_pc pc) end @@ -113,7 +113,7 @@ let do_backtrace action = begin try while action (Some !event) do let (sp, pc) = up_frame !event.ev_ev.ev_stacksize in - if sp < 0 then raise Exit; + if sp = Sp.null then raise Exit; event := any_event_at_pc pc done with Exit -> () diff --git a/debugger/int64ops.ml b/debugger/int64ops.ml index d6fb583e..64b6e843 100644 --- a/debugger/int64ops.ml +++ b/debugger/int64ops.ml @@ -15,13 +15,13 @@ (****************** arithmetic operators for Int64 *********************) -let ( ++ ) = Int64.add;; -let ( -- ) = Int64.sub;; -let suc64 = Int64.succ;; -let pre64 = Int64.pred;; -let _0 = Int64.zero;; -let _1 = Int64.one;; -let _minus1 = Int64.minus_one;; -let ( ~~ ) = Int64.of_string;; -let max_small_int = Int64.of_int max_int;; -let to_int = Int64.to_int;; +let ( ++ ) = Int64.add +let ( -- ) = Int64.sub +let suc64 = Int64.succ +let pre64 = Int64.pred +let _0 = Int64.zero +let _1 = Int64.one +let _minus1 = Int64.minus_one +let ( ~~ ) = Int64.of_string +let max_small_int = Int64.of_int max_int +let to_int = Int64.to_int diff --git a/debugger/int64ops.mli b/debugger/int64ops.mli index 7c7616c5..e085a295 100644 --- a/debugger/int64ops.mli +++ b/debugger/int64ops.mli @@ -15,13 +15,13 @@ (****************** arithmetic operators for Int64 *********************) -val ( ++ ) : int64 -> int64 -> int64;; -val ( -- ) : int64 -> int64 -> int64;; -val suc64 : int64 -> int64;; -val pre64 : int64 -> int64;; -val _0 : int64;; -val _1 : int64;; -val _minus1 : int64;; -val ( ~~ ) : string -> int64;; -val max_small_int : int64;; -val to_int : int64 -> int;; +val ( ++ ) : int64 -> int64 -> int64 +val ( -- ) : int64 -> int64 -> int64 +val suc64 : int64 -> int64 +val pre64 : int64 -> int64 +val _0 : int64 +val _1 : int64 +val _minus1 : int64 +val ( ~~ ) : string -> int64 +val max_small_int : int64 +val to_int : int64 -> int diff --git a/debugger/loadprinter.ml b/debugger/loadprinter.ml index 3cb66a09..15ac6c32 100644 --- a/debugger/loadprinter.ml +++ b/debugger/loadprinter.ml @@ -16,7 +16,6 @@ (* Loading and installation of user-defined printer functions *) open Misc -open Longident open Types (* Error report *) @@ -41,8 +40,8 @@ let rec loadfiles ppf name = Dynlink.loadfile filename; let d = Filename.dirname name in if d <> Filename.current_dir_name then begin - if not (List.mem d (Load_path.get_paths ())) then - Load_path.add_dir d; + if not (List.mem d (Load_path.get_path_list ())) then + Load_path.add_dir ~hidden:false d; end; fprintf ppf "File %s loaded@." (if d <> Filename.current_dir_name then @@ -52,7 +51,7 @@ let rec loadfiles ppf name = true with | Dynlink.Error (Dynlink.Unavailable_unit unit) -> - loadfiles ppf (String.uncapitalize_ascii unit ^ ".cmo") + loadfiles ppf (Unit_info.normalize unit ^ ".cmo") && loadfiles ppf name | Not_found -> @@ -77,7 +76,9 @@ let rec eval_address = function let bytecode_or_asm_symbol = Ident.name id in begin match Dynlink.unsafe_get_global_value ~bytecode_or_asm_symbol with | None -> - raise (Symtable.Error (Symtable.Undefined_global bytecode_or_asm_symbol)) + raise (Symtable.Error (Symtable.Undefined_global + (Symtable.Global.Glob_compunit (Cmo_format.Compunit + bytecode_or_asm_symbol)))) | Some obj -> obj end | Env.Adot(addr, pos) -> Obj.field (eval_address addr) pos @@ -90,39 +91,22 @@ let eval_value_path env path = (* Install, remove a printer (as in toplevel/topdirs) *) -(* since 4.00, "topdirs.cmi" is not in the same directory as the standard - library, so we load it beforehand as it cannot be found in the search path. *) -let init () = - let topdirs = - Filename.concat !Parameters.topdirs_path "topdirs.cmi" in - ignore (Env.read_signature "Topdirs" topdirs) - -let match_printer_type desc typename = - let printer_type = - match - Env.find_type_by_name - (Ldot(Lident "Topdirs", typename)) Env.empty - with - | path, _ -> path - | exception Not_found -> - raise (Error(Unbound_identifier(Ldot(Lident "Topdirs", typename)))) - in - Ctype.begin_def(); - let ty_arg = Ctype.newvar() in - Ctype.unify Env.empty - (Ctype.newconstr printer_type [ty_arg]) - (Ctype.instance desc.val_type); - Ctype.end_def(); - Ctype.generalize ty_arg; - ty_arg +let match_printer_type desc make_printer_type = + Ctype.with_local_level ~post:Ctype.generalize begin fun () -> + let ty_arg = Ctype.newvar() in + Ctype.unify Env.empty + (make_printer_type ty_arg) + (Ctype.instance desc.val_type); + ty_arg + end let find_printer_type lid = match Env.find_value_by_name lid Env.empty with | (path, desc) -> begin - match match_printer_type desc "printer_type_new" with + match match_printer_type desc Topprinters.printer_type_new with | ty_arg -> (ty_arg, path, false) | exception Ctype.Unify _ -> begin - match match_printer_type desc "printer_type_old" with + match match_printer_type desc Topprinters.printer_type_old with | ty_arg -> (ty_arg, path, true) | exception Ctype.Unify _ -> raise(Error(Wrong_type lid)) end @@ -135,7 +119,8 @@ let install_printer ppf lid = let v = try eval_value_path Env.empty path - with Symtable.Error(Symtable.Undefined_global s) -> + with Symtable.Error(Symtable.Undefined_global global) -> + let s = Symtable.Global.name global in raise(Error(Unavailable_module(s, lid))) in let print_function = if is_old_style then @@ -154,6 +139,7 @@ let remove_printer lid = (* Error report *) open Format +module Style = Misc.Style let report_error ppf = function | Load_failure e -> @@ -161,15 +147,15 @@ let report_error ppf = function (Dynlink.error_message e) | Unbound_identifier lid -> fprintf ppf "@[Unbound identifier %a@]@." - Printtyp.longident lid + (Style.as_inline_code Printtyp.longident) lid | Unavailable_module(md, lid) -> fprintf ppf "@[The debugger does not contain the code for@ %a.@ \ Please load an implementation of %s first.@]@." - Printtyp.longident lid md + (Style.as_inline_code Printtyp.longident) lid md | Wrong_type lid -> fprintf ppf "@[%a has the wrong type for a printing function.@]@." - Printtyp.longident lid + (Style.as_inline_code Printtyp.longident) lid | No_active_printer lid -> fprintf ppf "@[%a is not currently active as a printing function.@]@." - Printtyp.longident lid + (Style.as_inline_code Printtyp.longident) lid diff --git a/debugger/loadprinter.mli b/debugger/loadprinter.mli index f20345a4..8fc6f7a6 100644 --- a/debugger/loadprinter.mli +++ b/debugger/loadprinter.mli @@ -17,8 +17,6 @@ open Format -val init : unit -> unit - val loadfile : formatter -> string -> unit val install_printer : formatter -> Longident.t -> unit val remove_printer : Longident.t -> unit diff --git a/debugger/main.ml b/debugger/main.ml index f38c5569..006e8fd5 100644 --- a/debugger/main.ml +++ b/debugger/main.ml @@ -152,20 +152,17 @@ let add_include d = Misc.expand_directory Config.standard_library d :: !default_load_path let set_socket s = socket_name := s -let set_topdirs_path s = - topdirs_path := s let set_checkpoints n = checkpoint_max_count := n let set_directory dir = Sys.chdir dir let print_version () = printf "The OCaml debugger, version %s@." Sys.ocaml_version; - exit 0; -;; + exit 0 + let print_version_num () = printf "%s@." Sys.ocaml_version; - exit 0; -;; + exit 0 let speclist = [ "-c", Arg.Int set_checkpoints, @@ -192,8 +189,6 @@ let speclist = [ " Do not print times"; "-no-breakpoint-message", Arg.Clear Parameters.breakpoint, " Do not print message at breakpoint setup and removal"; - "-topdirs-path", Arg.String set_topdirs_path, - " Set path to the directory containing topdirs.cmi"; ] let function_placeholder () = @@ -229,8 +224,8 @@ let main () = end; if !Parameters.version then printf "\tOCaml Debugger version %s@.@." Config.version; - Loadprinter.init(); - Load_path.init !default_load_path; + Load_path.init ~auto_include:Compmisc.auto_include + ~visible:!default_load_path ~hidden:[]; Clflags.recursive_types := true; (* Allow recursive types. *) toplevel_loop (); (* Toplevel. *) kill_program (); diff --git a/debugger/main.mli b/debugger/main.mli new file mode 100644 index 00000000..b71d85c1 --- /dev/null +++ b/debugger/main.mli @@ -0,0 +1,16 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Sebastien Hinderer, Tarides, Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +val main : unit -> unit diff --git a/debugger/ocamldebug_entry.mli b/debugger/ocamldebug_entry.mli new file mode 100644 index 00000000..48a32eaf --- /dev/null +++ b/debugger/ocamldebug_entry.mli @@ -0,0 +1,17 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Sebastien Hinderer, Tarides, Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* This interface is empty because the corresponding module only contains + the entry point of the debugger *) diff --git a/debugger/parameters.ml b/debugger/parameters.ml index 6b5b6c48..cee4ad77 100644 --- a/debugger/parameters.ml +++ b/debugger/parameters.ml @@ -30,10 +30,8 @@ let prompt = ref true let time = ref true let version = ref true -let topdirs_path = ref (Filename.concat Config.standard_library "compiler-libs") - let add_path dir = - Load_path.add_dir dir; + Load_path.add_dir ~hidden:false dir; Envaux.reset_cache() let add_path_for mdl dir = diff --git a/debugger/parameters.mli b/debugger/parameters.mli index d680e7f1..a0b9d084 100644 --- a/debugger/parameters.mli +++ b/debugger/parameters.mli @@ -24,7 +24,6 @@ val breakpoint : bool ref val prompt : bool ref val time : bool ref val version : bool ref -val topdirs_path : string ref val add_path : string -> unit val add_path_for : string -> string -> unit diff --git a/debugger/pattern_matching.ml b/debugger/pattern_matching.ml deleted file mode 100644 index f44d16ee..00000000 --- a/debugger/pattern_matching.ml +++ /dev/null @@ -1,254 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Jerome Vouillon, projet Cristal, INRIA Rocquencourt *) -(* OCaml port by John Malecki and Xavier Leroy *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(************************ Simple pattern matching **********************) - -open Debugger_config -(*open Primitives*) -open Misc -(*open Const*) -(*open Globals*) -(*open Builtins*) -open Typedtree -(*open Modules*) -(*open Symtable*) -(*open Value*) -open Parser_aux - -(* -let rec find_constr tag = function - [] -> - fatal_error "find_constr: unknown constructor for this type" - | constr::rest -> - match constr.info.cs_tag with - ConstrRegular(t, _) -> - if t == tag then constr else find_constr tag rest - | ConstrExtensible _ -> - fatal_error "find_constr: extensible" - -let find_exception tag = - let (qualid, stamp) = get_exn_of_num tag in - let rec select_exn = function - [] -> - raise Not_found - | constr :: rest -> - match constr.info.cs_tag with - ConstrExtensible(_,st) -> - if st == stamp then constr else select_exn rest - | ConstrRegular(_,_) -> - fatal_error "find_exception: regular" in - select_exn(hashtbl__find_all (find_module qualid.qual).mod_constrs qualid.id) -*) - -let error_matching () = - prerr_endline "Pattern matching failed"; - raise Toplevel - -(* -let same_name {qualid = name1} = - function - GRname name2 -> - (name2 = "") || (name1.id = name2) - | GRmodname name2 -> - name1 = name2 - -let check_same_constr constr constr2 = - try - if not (same_name constr constr2) then - error_matching () - with - Desc_not_found -> - prerr_endline "Undefined constructor."; - raise Toplevel -*) - -let rec pattern_matching pattern obj ty = - match pattern with - P_dummy -> - [] - | P_variable var -> - [var, obj, ty] - | _ -> - match (Ctype.repr ty).desc with - Tvar | Tarrow _ -> - error_matching () - | Ttuple(ty_list) -> - (match pattern with - P_tuple pattern_list -> - pattern_matching_list pattern_list obj ty_list - | P_nth (n, patt) -> - if n >= List.length ty_list then - (prerr_endline "Out of range."; raise Toplevel); - pattern_matching patt (Debugcom.get_field obj n) - (List.nth ty_list n) - | _ -> - error_matching ()) - | Tconstr(cstr, [ty_arg],_) when same_type_constr cstr constr_type_list -> - (match pattern with - P_list pattern_list -> - let (last, list) = - it_list - (fun (current, list) pattern -> - if value_tag current = 0 then error_matching (); - (Debugcom.get_field current 1, - (pattern, Debugcom.get_field current 0)::list)) - (obj, []) - pattern_list - in - if value_tag last <> 0 then error_matching (); - flat_map - (function (x, y) -> pattern_matching x y ty_arg) - (rev list) - | P_nth (n, patt) -> - let rec find k current = - if value_tag current = 0 then - (prerr_endline "Out of range."; raise Toplevel); - if k = 0 then - pattern_matching patt (Debugcom.get_field current 0) ty_arg - else - find (k - 1) (Debugcom.get_field current 1) - in - find n obj - | P_concat (pattern1, pattern2) -> - if value_tag obj == 0 then error_matching (); - (pattern_matching pattern1 (Debugcom.get_field obj 0) ty_arg) - @ (pattern_matching pattern2 (Debugcom.get_field obj 1) ty) - | _ -> - error_matching ()) - | Tconstr(cstr, [ty_arg]) when same_type_constr cstr constr_type_vect -> - (match pattern with - P_nth (n, patt) -> - if n >= value_size obj then - (prerr_endline "Out of range."; raise Toplevel); - pattern_matching patt (Debugcom.get_field obj n) ty_arg - | _ -> - error_matching ()) - | Tconstr(cstr, ty_list) -> - (match cstr.info.ty_abbr with - Tabbrev(params, body) -> - pattern_matching pattern obj (expand_abbrev params body ty_list) - | _ -> - match_concrete_type pattern obj cstr ty ty_list) - -and match_concrete_type pattern obj cstr ty ty_list = - let typ_descr = - type_descr_of_type_constr cstr in - match typ_descr.info.ty_desc with - Abstract_type -> - error_matching () - | Variant_type constr_list -> - let tag = value_tag obj in - (try - let constr = - if same_type_constr cstr constr_type_exn then - find_exception tag - else - find_constr tag constr_list - in - let (ty_res, ty_arg) = - type_pair_instance (constr.info.cs_res, constr.info.cs_arg) - in - filter (ty_res, ty); - match constr.info.cs_kind with - Constr_constant -> - error_matching () - | Constr_regular -> - (match pattern with - P_constr (constr2, patt) -> - check_same_constr constr constr2; - pattern_matching patt (Debugcom.get_field obj 0) ty_arg - | _ -> - error_matching ()) - | Constr_superfluous n -> - (match pattern with - P_constr (constr2, patt) -> - check_same_constr constr constr2; - (match patt with - P_tuple pattern_list -> - pattern_matching_list - pattern_list - obj - (filter_product n ty_arg) - | P_nth (n2, patt) -> - let ty_list = filter_product n ty_arg in - if n2 >= n then - (prerr_endline "Out of range."; - raise Toplevel); - pattern_matching - patt - (Debugcom.get_field obj n2) - (List.nth ty_list n2) - | P_variable var -> - [var, - obj, - {typ_desc = Tproduct (filter_product n ty_arg); - typ_level = generic}] - | P_dummy -> - [] - | _ -> - error_matching ()) - | _ -> - error_matching ()) - with - Not_found -> - error_matching () - | Unify -> - fatal_error "pattern_matching: types should match") - | Record_type label_list -> - let match_field (label, patt) = - let lbl = - try - primitives__find - (function l -> same_name l label) - label_list - with Not_found -> - prerr_endline "Label not found."; - raise Toplevel - in - let (ty_res, ty_arg) = - type_pair_instance (lbl.info.lbl_res, lbl.info.lbl_arg) - in - (try - filter (ty_res, ty) - with Unify -> - fatal_error "pattern_matching: types should match"); - pattern_matching patt (Debugcom.get_field obj lbl.info.lbl_pos) - ty_arg - in - (match pattern with - P_record pattern_label_list -> - flat_map match_field pattern_label_list - | _ -> - error_matching ()) - | Abbrev_type(_,_) -> - fatal_error "pattern_matching: abbrev type" - -and pattern_matching_list pattern_list obj ty_list = - let val_list = - try - pair__combine (pattern_list, ty_list) - with - Invalid_argument _ -> error_matching () - in - flat_map - (function (x, y, z) -> pattern_matching x y z) - (rev - (snd - (it_list - (fun (num, list) (pattern, typ) -> - (num + 1, (pattern, Debugcom.get_field obj num, typ)::list)) - (0, []) - val_list))) diff --git a/debugger/pattern_matching.mli b/debugger/pattern_matching.mli deleted file mode 100644 index 35b541e6..00000000 --- a/debugger/pattern_matching.mli +++ /dev/null @@ -1,23 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Jerome Vouillon, projet Cristal, INRIA Rocquencourt *) -(* OCaml port by John Malecki and Xavier Leroy *) -(* *) -(* Copyright 1996 Institut National de Recherche en Informatique et *) -(* en Automatique. *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(************************ Simple pattern matching **********************) - -open Parser_aux - -val pattern_matching : - pattern -> Debugcom.remote_value -> Typedtree.type_expr -> - (string * Debugcom.remote_value * Typedtree.type_expr) list;; diff --git a/debugger/pos.mli b/debugger/pos.mli index 31bc341f..55999526 100644 --- a/debugger/pos.mli +++ b/debugger/pos.mli @@ -13,4 +13,4 @@ (* *) (**************************************************************************) -val get_desc : Events.code_event -> string;; +val get_desc : Events.code_event -> string diff --git a/debugger/primitives.ml b/debugger/primitives.ml index 4cf2fb8d..c6bb2338 100644 --- a/debugger/primitives.ml +++ b/debugger/primitives.ml @@ -117,8 +117,7 @@ let io_channel_of_descr fd = { let close_io io_channel = close_out_noerr io_channel.io_out; - close_in_noerr io_channel.io_in; -;; + close_in_noerr io_channel.io_in let std_io = { io_in = stdin; diff --git a/debugger/printval.ml b/debugger/printval.ml index 6e634ad1..3e712c92 100644 --- a/debugger/printval.ml +++ b/debugger/printval.ml @@ -51,11 +51,15 @@ module EvalPath = exception Error let rec eval_address = function | Env.Aident id -> - begin try - Debugcom.Remote_value.global (Symtable.get_global_position id) - with Symtable.Error _ -> - raise Error - end + begin match Symtable.Global.of_ident id with + | Some global -> + begin + try Debugcom.Remote_value.global (Symtable.get_global_position + global) + with Symtable.Error _ -> raise Error + end + | None -> raise Error + end | Env.Adot(root, pos) -> let v = eval_address root in if not (Debugcom.Remote_value.is_block v) diff --git a/debugger/program_loading.ml b/debugger/program_loading.ml index c03dcfdc..cd757dac 100644 --- a/debugger/program_loading.ml +++ b/debugger/program_loading.ml @@ -42,7 +42,6 @@ let get_unix_environment () = Printf.sprintf "%s=%s " vname (Filename.quote vvalue) in String.concat "" (List.map f !Debugger_config.environment) -;; (* Notes: 1. This quoting is not the same as [Filename.quote] because the "set" @@ -65,7 +64,6 @@ let quote_for_windows_shell s = Buffer.add_char b s.[i]; done; Buffer.contents b -;; (* Returns a command line prefix to set environment for the debuggee *) let get_win32_environment () = diff --git a/debugger/program_management.ml b/debugger/program_management.ml index 74cc3db3..ea315589 100644 --- a/debugger/program_management.ml +++ b/debugger/program_management.ml @@ -127,15 +127,17 @@ let initialize_loading () = raise Toplevel; end; Symbols.clear_symbols (); - Symbols.read_symbols 0 !program_name; - Load_path.init (Load_path.get_paths () @ !Symbols.program_source_dirs); + Symbols.read_symbols Debugcom.main_frag !program_name; + let Load_path.{visible; hidden} = Load_path.get_paths () in + let visible = visible @ !Symbols.program_source_dirs in + Load_path.init ~auto_include:Compmisc.auto_include ~visible ~hidden; Envaux.reset_cache (); if !debug_loading then prerr_endline "Opening a socket..."; open_connection !socket_name (function () -> go_to _0; - Symbols.set_all_events 0; + Symbols.set_all_events Debugcom.main_frag; exit_main_loop ()) (* Ensure the program is already loaded. *) diff --git a/debugger/show_source.mli b/debugger/show_source.mli index 2d77caa8..570a6d49 100644 --- a/debugger/show_source.mli +++ b/debugger/show_source.mli @@ -15,12 +15,11 @@ (**************************************************************************) (* Print the line containing the point *) -val show_point : Instruct.debug_event -> bool -> unit;; +val show_point : Instruct.debug_event -> bool -> unit (* Tell Emacs we are nowhere in the source. *) -val show_no_point : unit -> unit;; +val show_no_point : unit -> unit (* Display part of the source. *) val show_listing : Lexing.position -> string -> int -> int -> int -> bool -> unit -;; diff --git a/debugger/source.ml b/debugger/source.ml index b1f9b2ea..5f659d23 100644 --- a/debugger/source.ml +++ b/debugger/source.ml @@ -40,7 +40,7 @@ let source_of_module pos mdle = else acc) Debugger_config.load_path_for - (Load_path.get_paths ()) in + (Load_path.get_path_list ()) in let fname = pos.Lexing.pos_fname in if fname = "" then let innermost_module = @@ -52,7 +52,7 @@ let source_of_module pos mdle = function | [] -> raise Not_found | ext :: exts -> - try find_in_path_uncap path (innermost_module ^ ext) + try find_in_path_normalized path (innermost_module ^ ext) with Not_found -> loop exts in loop source_extensions else if Filename.is_relative fname then diff --git a/debugger/symbols.ml b/debugger/symbols.ml index 8ed9b9db..36f8f874 100644 --- a/debugger/symbols.ml +++ b/debugger/symbols.ml @@ -56,16 +56,18 @@ let relocate_event orig ev = let read_symbols' bytecode_file = let ic = open_in_bin bytecode_file in - begin try - Bytesections.read_toc ic; - ignore(Bytesections.seek_section ic "SYMB"); - with Bytesections.Bad_magic_number | Not_found -> - prerr_string bytecode_file; prerr_endline " is not a bytecode file."; - raise Toplevel - end; + let toc = + try + let toc = Bytesections.read_toc ic in + ignore(Bytesections.seek_section toc ic Bytesections.Name.SYMB); + toc + with Bytesections.Bad_magic_number | Not_found -> + prerr_string bytecode_file; prerr_endline " is not a bytecode file."; + raise Toplevel + in Symtable.restore_state (input_value ic); begin try - ignore (Bytesections.seek_section ic "DBUG") + ignore (Bytesections.seek_section toc ic Bytesections.Name.DBUG) with Not_found -> prerr_string bytecode_file; prerr_endline " has no debugging info."; raise Toplevel @@ -84,7 +86,7 @@ let read_symbols' bytecode_file = List.fold_left (fun s e -> String.Set.add e s) !dirs (input_value ic) done; begin try - ignore (Bytesections.seek_section ic "CODE") + ignore (Bytesections.seek_section toc ic Bytesections.Name.CODE) with Not_found -> (* The file contains only debugging info, loading mode is forced to "manual" *) diff --git a/debugger/time_travel.ml b/debugger/time_travel.ml index fe6e8190..b05d0576 100644 --- a/debugger/time_travel.ml +++ b/debugger/time_travel.ml @@ -380,8 +380,8 @@ let new_checkpoint pid fd = c_parent = root; c_breakpoint_version = 0; c_breakpoints = []; - c_trap_barrier = 0; - c_code_fragments = [0]} + c_trap_barrier = Sp.null; + c_code_fragments = [main_frag]} in insert_checkpoint new_checkpoint @@ -555,7 +555,7 @@ let finish () = | Some {ev_ev={ev_stacksize}} -> set_initial_frame(); let (frame, pc) = up_frame ev_stacksize in - if frame < 0 then begin + if frame = Sp.null then begin prerr_endline "`finish' not meaningful in outermost frame."; raise Toplevel end; @@ -598,8 +598,9 @@ let next_1 () = | Some {ev_ev={ev_stacksize=ev_stacksize2}} -> let (frame2, _pc2) = initial_frame() in (* Call `finish' if we've entered a function. *) - if frame1 >= 0 && frame2 >= 0 && - frame2 - ev_stacksize2 > frame1 - ev_stacksize1 + if frame1 <> Sp.null && frame2 <> Sp.null && + Sp.(compare (base frame2 ev_stacksize2) + (base frame1 ev_stacksize1)) > 0 then finish() end @@ -622,7 +623,7 @@ let start () = | Some {ev_ev={ev_stacksize}} -> let (frame, _) = initial_frame() in let (frame', pc) = up_frame ev_stacksize in - if frame' < 0 then begin + if frame' = Sp.null then begin prerr_endline "`start not meaningful in outermost frame."; raise Toplevel end; @@ -644,7 +645,7 @@ let start () = step _minus1; (not !interrupted) && - (frame' - nargs > frame - ev_stacksize) + Sp.(compare (base frame' nargs) (base frame ev_stacksize)) > 0 | _ -> false do @@ -666,8 +667,9 @@ let previous_1 () = | Some {ev_ev={ev_stacksize=ev_stacksize2}} -> let (frame2, _pc2) = initial_frame() in (* Call `start' if we've entered a function. *) - if frame1 >= 0 && frame2 >= 0 && - frame2 - ev_stacksize2 > frame1 - ev_stacksize1 + if frame1 <> Sp.null && frame2 <> Sp.null && + Sp.(compare (base frame2 ev_stacksize2) + (base frame1 ev_stacksize1)) > 0 then start() end diff --git a/debugger/trap_barrier.ml b/debugger/trap_barrier.ml index 0ae2b2c5..861b7f24 100644 --- a/debugger/trap_barrier.ml +++ b/debugger/trap_barrier.ml @@ -19,13 +19,13 @@ open Debugcom open Checkpoints -let current_trap_barrier = ref 0 +let current_trap_barrier = ref Sp.null let install_trap_barrier pos = current_trap_barrier := pos let remove_trap_barrier () = - current_trap_barrier := 0 + current_trap_barrier := Sp.null (* Ensure the trap barrier state is up to date in current checkpoint. *) let update_trap_barrier () = diff --git a/debugger/trap_barrier.mli b/debugger/trap_barrier.mli index 7ff28631..7d26c862 100644 --- a/debugger/trap_barrier.mli +++ b/debugger/trap_barrier.mli @@ -16,7 +16,7 @@ (************************* Trap barrier ********************************) -val install_trap_barrier : int -> unit +val install_trap_barrier : Debugcom.Sp.t -> unit val remove_trap_barrier : unit -> unit @@ -25,4 +25,4 @@ val update_trap_barrier : unit -> unit (* Execute `funct' with a trap barrier. *) (* --- Used by `finish'. *) -val exec_with_trap_barrier : int -> (unit -> unit) -> unit +val exec_with_trap_barrier : Debugcom.Sp.t -> (unit -> unit) -> unit diff --git a/debugger/unix_tools.ml b/debugger/unix_tools.ml index e9e3f85c..f61ac913 100644 --- a/debugger/unix_tools.ml +++ b/debugger/unix_tools.ml @@ -142,4 +142,3 @@ let make_absolute name = if Filename.is_relative name then Filename.concat (getcwd ()) name else name -;; diff --git a/driver/compenv.ml b/driver/compenv.ml index 8b1c4e55..921c0565 100644 --- a/driver/compenv.ml +++ b/driver/compenv.ml @@ -62,43 +62,6 @@ let first_objfiles = ref [] let last_objfiles = ref [] let stop_early = ref false -(* Check validity of module name *) -let is_unit_name name = - try - if name = "" then raise Exit; - begin match name.[0] with - | 'A'..'Z' -> () - | _ -> - raise Exit; - end; - for i = 1 to String.length name - 1 do - match name.[i] with - | 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' | '\'' -> () - | _ -> - raise Exit; - done; - true - with Exit -> false -;; - -let check_unit_name filename name = - if not (is_unit_name name) then - Location.prerr_warning (Location.in_file filename) - (Warnings.Bad_module_name name);; - -(* Compute name of module from output file name *) -let module_of_filename inputfile outputprefix = - let basename = Filename.basename outputprefix in - let name = - try - let pos = String.index basename '.' in - String.sub basename 0 pos - with Not_found -> basename - in - let name = String.capitalize_ascii name in - check_unit_name inputfile name; - name -;; type filename = string @@ -227,6 +190,16 @@ let parse_warnings error v = let read_one_param ppf position name v = let set name options s = setter ppf (fun b -> b) name options s in let clear name options s = setter ppf (fun b -> not b) name options s in + let compat name s = + let error_if_unset = function + | true -> true + | false -> + Printf.ksprintf (print_error ppf) + "Unsetting %s is not supported anymore" name; + true + in + setter ppf error_if_unset name [ ref true ] s + in match name with | "g" -> set "g" [ Clflags.debug ] v | "bin-annot" -> set "bin-annot" [ Clflags.binary_annotations ] v @@ -239,11 +212,12 @@ let read_one_param ppf position name v = | "noassert" -> set "noassert" [ noassert ] v | "noautolink" -> set "noautolink" [ no_auto_link ] v | "nostdlib" -> set "nostdlib" [ no_std_include ] v + | "nocwd" -> set "nocwd" [ no_cwd ] v | "linkall" -> set "linkall" [ link_everything ] v | "nolabels" -> set "nolabels" [ classic ] v | "principal" -> set "principal" [ principal ] v | "rectypes" -> set "rectypes" [ recursive_types ] v - | "safe-string" -> clear "safe-string" [ unsafe_string ] v + | "safe-string" -> compat "safe-string" v (* kept for compatibility *) | "strict-sequence" -> set "strict-sequence" [ strict_sequence ] v | "strict-formats" -> set "strict-formats" [ strict_formats ] v | "thread" -> set "thread" [ use_threads ] v @@ -252,6 +226,7 @@ let read_one_param ppf position name v = | "verbose" -> set "verbose" [ verbose ] v | "nopervasives" -> set "nopervasives" [ nopervasives ] v | "slash" -> set "slash" [ force_slash ] v (* for ocamldep *) + | "no-slash" -> clear "no-slash" [ force_slash ] v (* for ocamldep *) | "keep-docs" -> set "keep-docs" [ Clflags.keep_docs ] v | "keep-locs" -> set "keep-locs" [ Clflags.keep_locs ] v @@ -516,7 +491,7 @@ type file_option = { } let scan_line ic = - Scanf.bscanf ic "%[0-9a-zA-Z_.*] : %[a-zA-Z_-] = %s " + Scanf.bscanf ic "%[0-9a-zA-Z_.*/] : %[a-zA-Z_-] = %s " (fun pattern name value -> let pattern = match pattern with @@ -672,7 +647,7 @@ let process_action | Some start_from -> Location.input_name := name; impl ~start_from name - | None -> raise(Arg.Bad("don't know what to do with " ^ name)) + | None -> raise(Arg.Bad("Don't know what to do with " ^ name)) let action_of_file name = @@ -712,10 +687,14 @@ let process_deferred_actions env = fatal "Options -c -o are incompatible with compiling multiple files" end; end; - if !make_archive && List.exists (function - | ProcessOtherFile name -> Filename.check_suffix name ".cmxa" - | _ -> false) !deferred_actions then - fatal "Option -a cannot be used with .cmxa input files."; + if !make_archive then begin + if List.exists (function + | ProcessOtherFile name -> Filename.check_suffix name ".cmxa" + | _ -> false) !deferred_actions then + fatal "Option -a cannot be used with .cmxa input files." + end + else if !deferred_actions = [] then + fatal "No input files"; List.iter (process_action env) (List.rev !deferred_actions); output_name := final_output_name; stop_early := diff --git a/driver/compenv.mli b/driver/compenv.mli index f849a9ce..a5958554 100644 --- a/driver/compenv.mli +++ b/driver/compenv.mli @@ -15,8 +15,6 @@ exception Exit_with_status of int -val module_of_filename : string -> string -> string - val output_prefix : string -> string val extract_output : string option -> string val default_output : string option -> string @@ -46,13 +44,6 @@ type readenv_position = val readenv : Format.formatter -> readenv_position -> unit -(* [is_unit_name name] returns true only if [name] can be used as a - correct module name *) -val is_unit_name : string -> bool -(* [check_unit_name ppf filename name] prints a warning in [filename] - on [ppf] if [name] should not be used as a module name. *) -val check_unit_name : string -> string -> unit - (* Deferred actions of the compiler, while parsing arguments *) type deferred_action = diff --git a/driver/compile.ml b/driver/compile.ml index 7a88388c..3d581ea4 100644 --- a/driver/compile.ml +++ b/driver/compile.ml @@ -30,28 +30,30 @@ let interface ~source_file ~output_prefix = let to_bytecode i Typedtree.{structure; coercion; _} = (structure, coercion) |> Profile.(record transl) - (Translmod.transl_implementation i.module_name) + (Translmod.transl_implementation (Unit_info.modname i.target)) |> Profile.(record ~accumulate:true generate) (fun { Lambda.code = lambda; required_globals } -> lambda |> print_if i.ppf_dump Clflags.dump_rawlambda Printlambda.lambda |> Simplif.simplify_lambda |> print_if i.ppf_dump Clflags.dump_lambda Printlambda.lambda - |> Bytegen.compile_implementation i.module_name + |> Bytegen.compile_implementation (Unit_info.modname i.target) |> print_if i.ppf_dump Clflags.dump_instr Printinstr.instrlist |> fun bytecode -> bytecode, required_globals ) let emit_bytecode i (bytecode, required_globals) = - let cmofile = cmo i in - let oc = open_out_bin cmofile in + let cmo = Unit_info.cmo i.target in + let oc = open_out_bin (Unit_info.Artifact.filename cmo) in Misc.try_finally ~always:(fun () -> close_out oc) - ~exceptionally:(fun () -> Misc.remove_file cmofile) + ~exceptionally:(fun () -> + Misc.remove_file (Unit_info.Artifact.filename cmo) + ) (fun () -> bytecode |> Profile.(record ~accumulate:true generate) - (Emitcode.to_file oc i.module_name cmofile ~required_globals); + (Emitcode.to_file oc cmo ~required_globals); ) let implementation ~start_from ~source_file ~output_prefix = diff --git a/driver/compile_common.ml b/driver/compile_common.ml index 4bce0814..a57f8193 100644 --- a/driver/compile_common.ml +++ b/driver/compile_common.ml @@ -16,32 +16,23 @@ open Misc type info = { - source_file : string; - module_name : string; - output_prefix : string; + target: Unit_info.t; env : Env.t; ppf_dump : Format.formatter; tool_name : string; native : bool; } -let cmx i = i.output_prefix ^ ".cmx" -let obj i = i.output_prefix ^ Config.ext_obj -let cmo i = i.output_prefix ^ ".cmo" -let annot i = i.output_prefix ^ ".annot" - let with_info ~native ~tool_name ~source_file ~output_prefix ~dump_ext k = Compmisc.init_path (); - let module_name = Compenv.module_of_filename source_file output_prefix in - Env.set_unit_name module_name; + let target = Unit_info.make ~source_file output_prefix in + Env.set_unit_name (Unit_info.modname target); let env = Compmisc.initial_env() in let dump_file = String.concat "." [output_prefix; dump_ext] in Compmisc.with_ppf_dump ~file_prefix:dump_file @@ fun ppf_dump -> k { - module_name; - output_prefix; + target; env; - source_file; ppf_dump; tool_name; native; @@ -50,7 +41,7 @@ let with_info ~native ~tool_name ~source_file ~output_prefix ~dump_ext k = (** Compile a .mli file *) let parse_intf i = - Pparse.parse_interface ~tool_name:i.tool_name i.source_file + Pparse.parse_interface ~tool_name:i.tool_name (Unit_info.source_file i.target) |> print_if i.ppf_dump Clflags.dump_parsetree Printast.interface |> print_if i.ppf_dump Clflags.dump_source Pprintast.signature @@ -65,10 +56,11 @@ let typecheck_intf info ast = if !Clflags.print_types then Printtyp.wrap_printing_env ~error:false info.env (fun () -> Format.(fprintf std_formatter) "%a@." - (Printtyp.printed_signature info.source_file) + (Printtyp.printed_signature (Unit_info.source_file info.target)) sg); ignore (Includemod.signatures info.env ~mark:Mark_both sg sg); Typecore.force_delayed_checks (); + Builtin_attributes.warn_unused (); Warnings.check_fatal (); tsg @@ -76,13 +68,12 @@ let emit_signature info ast tsg = let sg = let alerts = Builtin_attributes.alerts_of_sig ast in Env.save_signature ~alerts tsg.Typedtree.sig_type - info.module_name (info.output_prefix ^ ".cmi") + (Unit_info.cmi info.target) in - Typemod.save_signature info.module_name tsg - info.output_prefix info.source_file info.env sg + Typemod.save_signature info.target tsg info.env sg let interface info = - Profile.record_call info.source_file @@ fun () -> + Profile.record_call (Unit_info.source_file info.target) @@ fun () -> let ast = parse_intf info in if Clflags.(should_stop_after Compiler_pass.Parsing) then () else begin let tsg = typecheck_intf info ast in @@ -95,25 +86,29 @@ let interface info = (** Frontend for a .ml file *) let parse_impl i = - Pparse.parse_implementation ~tool_name:i.tool_name i.source_file + let sourcefile = Unit_info.source_file i.target in + Pparse.parse_implementation ~tool_name:i.tool_name sourcefile |> print_if i.ppf_dump Clflags.dump_parsetree Printast.implementation |> print_if i.ppf_dump Clflags.dump_source Pprintast.structure let typecheck_impl i parsetree = parsetree |> Profile.(record typing) - (Typemod.type_implementation - i.source_file i.output_prefix i.module_name i.env) + (Typemod.type_implementation i.target i.env) |> print_if i.ppf_dump Clflags.dump_typedtree Printtyped.implementation_with_coercion |> print_if i.ppf_dump Clflags.dump_shape (fun fmt {Typedtree.shape; _} -> Shape.print fmt shape) let implementation info ~backend = - Profile.record_call info.source_file @@ fun () -> + Profile.record_call (Unit_info.source_file info.target) @@ fun () -> let exceptionally () = - let sufs = if info.native then [ cmx; obj ] else [ cmo ] in - List.iter (fun suf -> remove_file (suf info)) sufs; + let sufs = + if info.native then Unit_info.[ cmx; obj ] + else Unit_info.[ cmo ] in + List.iter + (fun suf -> remove_file (Unit_info.Artifact.filename @@ suf info.target)) + sufs; in Misc.try_finally ?always:None ~exceptionally (fun () -> let parsed = parse_impl info in @@ -123,5 +118,6 @@ let implementation info ~backend = backend info typed end; end; + Builtin_attributes.warn_unused (); Warnings.check_fatal (); ) diff --git a/driver/compile_common.mli b/driver/compile_common.mli index c2f29cbe..158b1f9c 100644 --- a/driver/compile_common.mli +++ b/driver/compile_common.mli @@ -17,9 +17,7 @@ (** {2 Initialization} *) type info = { - source_file : string; - module_name : string; - output_prefix : string; + target : Unit_info.t; env : Env.t; ppf_dump : Format.formatter; tool_name : string; @@ -77,13 +75,3 @@ val typecheck_impl : info -> Parsetree.structure -> Typedtree.implementation val implementation : info -> backend:(info -> Typedtree.implementation -> unit) -> unit (** The complete compilation pipeline for implementations. *) - -(** {2 Build artifacts} *) - -val cmo : info -> string -val cmx : info -> string -val obj : info -> string -val annot : info -> string -(** Return the filename of some compiler build artifacts associated - with the file being compiled. -*) diff --git a/driver/compmisc.ml b/driver/compmisc.ml index bc2d151b..dea87b47 100644 --- a/driver/compmisc.ml +++ b/driver/compmisc.ml @@ -13,25 +13,46 @@ (* *) (**************************************************************************) +let auto_include find_in_dir fn = + if !Clflags.no_std_include then + raise Not_found + else + let alert = Location.auto_include_alert in + Load_path.auto_include_otherlibs alert find_in_dir fn + (* Initialize the search path. - [dir] is always searched first (default: the current directory), - then the directories specified with the -I option (in command-line order), - then the standard library directory (unless the -nostdlib option is given). + [dir] (default: the current directory) + is always searched first unless -nocwd is specified, + then the directories specified with the -I option (in command line order), + then the standard library directory (unless the -nostdlib option is given), + then the directories specified with the -H option (in command line order). *) -let init_path ?(dir="") () = - let dirs = +let init_path ?(auto_include=auto_include) ?(dir="") () = + let visible = if !Clflags.use_threads then "+threads" :: !Clflags.include_dirs else !Clflags.include_dirs in - let dirs = - !Compenv.last_include_dirs @ dirs @ Config.flexdll_dirs @ - !Compenv.first_include_dirs + let visible = + List.concat + [!Compenv.last_include_dirs; + visible; + Config.flexdll_dirs; + !Compenv.first_include_dirs] + in + let visible = + List.map (Misc.expand_directory Config.standard_library) visible + in + let visible = + (if !Clflags.no_cwd then [] else [dir]) + @ List.rev_append visible (Clflags.std_include_dir ()) in - let exp_dirs = - List.map (Misc.expand_directory Config.standard_library) dirs in - Load_path.init (dir :: List.rev_append exp_dirs (Clflags.std_include_dir ())); + let hidden = + List.rev_map (Misc.expand_directory Config.standard_library) + !Clflags.hidden_include_dirs + in + Load_path.init ~auto_include ~visible ~hidden; Env.reset_cache () (* Return the initial environment in which compilation proceeds. *) @@ -50,7 +71,6 @@ let initial_env () = in Typemod.initial_env ~loc:(Location.in_file "command line") - ~safe_string:(Config.safe_string || not !Clflags.unsafe_string) ~initially_opened_module ~open_implicit_modules:(List.rev !Clflags.open_modules) @@ -68,10 +88,12 @@ let set_from_env flag Clflags.{ parse; usage; env_var } = let read_clflags_from_env () = set_from_env Clflags.color Clflags.color_reader; - if - Option.is_none !Clflags.color && - Option.is_some (Sys.getenv_opt "NO_COLOR") - then + let no_color () = (* See https://no-color.org/ *) + match Sys.getenv_opt "NO_COLOR" with + | None | Some "" -> false + | _ -> true + in + if Option.is_none !Clflags.color && no_color () then Clflags.color := Some Misc.Color.Never; set_from_env Clflags.error_style Clflags.error_style_reader; () diff --git a/driver/compmisc.mli b/driver/compmisc.mli index bb4c292b..7b5e1808 100644 --- a/driver/compmisc.mli +++ b/driver/compmisc.mli @@ -13,7 +13,8 @@ (* *) (**************************************************************************) -val init_path : ?dir:string -> unit -> unit +val init_path : + ?auto_include:Load_path.auto_include_callback -> ?dir:string -> unit -> unit val initial_env : unit -> Env.t (* Support for flags that can also be set from an environment variable *) @@ -21,3 +22,8 @@ val set_from_env : 'a option ref -> 'a Clflags.env_reader -> unit val read_clflags_from_env : unit -> unit val with_ppf_dump : file_prefix:string -> (Format.formatter -> 'a) -> 'a + +val auto_include : Load_path.auto_include_callback +(** [auto_include find_in_dir fn] is a callback function to be passed to + {!Load_path.init} and automatically adds [-I +lib] to the load path after + displaying an alert. *) diff --git a/driver/main.mli b/driver/main.mli new file mode 100644 index 00000000..eca96d6e --- /dev/null +++ b/driver/main.mli @@ -0,0 +1,19 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Sebastien Hinderer, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2022 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Interface to the compiler's main module *) + +(* This interface file is empty because the driver/main.ml only runs + code during initialisation and exports nothing *) diff --git a/driver/main_args.ml b/driver/main_args.ml index 60db017a..732dea3d 100644 --- a/driver/main_args.ml +++ b/driver/main_args.ml @@ -15,7 +15,6 @@ let mk_a f = "-a", Arg.Unit f, " Build a library" -;; let mk_alert f = "-alert", Arg.String f, @@ -30,74 +29,73 @@ let mk_alert f = let mk_absname f = "-absname", Arg.Unit f, " Show absolute filenames in error messages" -;; + +let mk_no_absname f = + "-no-absname", Arg.Unit f, + " Do not try to show absolute filenames in error messages (default)" let mk_annot f = "-annot", Arg.Unit f, " (deprecated) Save information in .annot" -;; let mk_binannot f = "-bin-annot", Arg.Unit f, " Save typedtree in .cmt" -;; + +let mk_binannot_occurrences f = + "-bin-annot-occurrences", Arg.Unit f, + " Store every occurrence of a bound name in the .cmt file.\n\ + This information can be used by external tools to provide\n\ + features such as project-wide occurrences. This flag has\n\ + no effect in the absence of '-bin-annot'." let mk_c f = "-c", Arg.Unit f, " Compile only (do not link)" -;; let mk_cc f = "-cc", Arg.String f, " Use as the C compiler and linker" -;; let mk_cclib f = "-cclib", Arg.String f, " Pass option to the C linker" -;; let mk_ccopt f = "-ccopt", Arg.String f, " Pass option to the C compiler and linker" -;; let mk_clambda_checks f = "-clambda-checks", Arg.Unit f, " Instrument clambda code with closure and \ field access checks (for debugging the compiler)" -;; + +let mk_cmi_file f = + "-cmi-file", Arg.String f, + " Use the interface file to type-check" let mk_compact f = "-compact", Arg.Unit f, " Optimize code size rather than speed" -;; let mk_compat_32 f = "-compat-32", Arg.Unit f, " Check that generated bytecode can run on 32-bit platforms" -;; let mk_config f = "-config", Arg.Unit f, " Print configuration values and exit" -;; let mk_config_var f = "-config-var", Arg.String f, " Print the value of a configuration variable, without a newline, and exit\n\ \ (print nothing and exit with error value if the variable does not exist)" -;; let mk_custom f = "-custom", Arg.Unit f, " Link in custom mode" -;; let mk_dllib f = "-dllib", Arg.String f, " Use the dynamically-loaded library " -;; let mk_dllpath f = "-dllpath", Arg.String f, "

Add to the run-time search path for shared libraries" -;; let mk_eval f = "-e", Arg.String f, "

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%0Dt-K)mSkBSqSYMwvtAo|&>?)!Sr^j@;$g*^1V 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 z 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