From 988e5eff1c09989d4caf4893fbb4548c36ceeef1 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Fri, 12 Aug 2022 17:59:49 +0200 Subject: [PATCH 01/31] Split the shared AST into a separate lib --- compiler/dcalc/ast.ml | 8 ++-- compiler/dcalc/ast.mli | 4 +- compiler/dcalc/dune | 2 +- compiler/dcalc/typing.ml | 44 +++++++++---------- compiler/lcalc/ast.ml | 4 +- compiler/lcalc/ast.mli | 2 +- compiler/lcalc/compile_with_exceptions.ml | 1 + compiler/lcalc/compile_without_exceptions.ml | 2 + compiler/scalc/compile_from_lambda.ml | 1 + compiler/scopelang/scope_to_dcalc.ml | 3 +- compiler/shared_ast/dune | 4 ++ .../astgen_utils.ml => shared_ast/expr.ml} | 15 ++++--- .../astgen_utils.mli => shared_ast/expr.mli} | 11 ++--- compiler/shared_ast/shared_ast.ml | 20 +++++++++ .../{utils/astgen.ml => shared_ast/types.ml} | 6 +++ compiler/{utils => shared_ast}/var.ml | 4 +- compiler/{utils => shared_ast}/var.mli | 6 +-- compiler/verification/conditions.mli | 5 ++- compiler/verification/io.ml | 6 +-- compiler/verification/io.mli | 9 ++-- 20 files changed, 97 insertions(+), 60 deletions(-) create mode 100644 compiler/shared_ast/dune rename compiler/{utils/astgen_utils.ml => shared_ast/expr.ml} (95%) rename compiler/{utils/astgen_utils.mli => shared_ast/expr.mli} (97%) create mode 100644 compiler/shared_ast/shared_ast.ml rename compiler/{utils/astgen.ml => shared_ast/types.ml} (98%) rename compiler/{utils => shared_ast}/var.ml (98%) rename compiler/{utils => shared_ast}/var.mli (96%) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 2fde5c1f..322b18a3 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -16,8 +16,8 @@ the License. *) open Utils -include Astgen -include Astgen_utils +include Shared_ast +include Shared_ast.Expr type lit = dcalc glit @@ -44,7 +44,7 @@ let with_ty (type m) (ty : marked_typ) (x : ('a, m) marked) : ('a, typed) marked | Typed m -> Typed { m with ty }) (Marked.unmark x) -let map_expr ctx ~f e = Astgen_utils.map_gexpr ctx ~f e +let map_expr ctx ~f e = Expr.map ctx ~f e let rec map_expr_top_down ~f e = map_expr () ~f:(fun () -> map_expr_top_down ~f) (f e) @@ -63,8 +63,6 @@ let box_expr : ('m expr, 'm) box_expr_sig = let rec id_t () e = map_expr () ~f:id_t e in id_t () e -open Astgen_utils - let untype_program prg = { prg with diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index b0808c58..86d07f9d 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -18,8 +18,8 @@ (** Abstract syntax tree of the default calculus intermediate representation *) open Utils -include module type of Astgen -include module type of Astgen_utils +include module type of Shared_ast +include module type of Shared_ast.Expr type lit = dcalc glit diff --git a/compiler/dcalc/dune b/compiler/dcalc/dune index 03046b15..9b105b24 100644 --- a/compiler/dcalc/dune +++ b/compiler/dcalc/dune @@ -1,7 +1,7 @@ (library (name dcalc) (public_name catala.dcalc) - (libraries bindlib unionFind utils re ubase catala.runtime_ocaml) + (libraries bindlib unionFind utils re ubase catala.runtime_ocaml shared_ast) (preprocess (pps visitors.ppx))) diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index fd56544a..0184c54c 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -18,7 +18,7 @@ inference using the classical W algorithm with union-find unification. *) open Utils -module A = Astgen +module A = Shared_ast module Any = Utils.Uid.Make @@ -261,7 +261,7 @@ let op_type (op : A.operator Marked.pos) : typ Marked.pos UnionFind.elem = (** {1 Double-directed typing} *) -type 'e env = ('e, typ Marked.pos UnionFind.elem) Var.Map.t +type 'e env = ('e, typ Marked.pos UnionFind.elem) A.Var.Map.t let add_pos e ty = Marked.mark (Ast.pos e) ty let ty (_, { uf; _ }) = uf @@ -303,9 +303,9 @@ let rec typecheck_expr_bottom_up let mark_with_uf e1 ?pos ty = mark e1 (unionfind_make ?pos ty) in match Marked.unmark e with | A.EVar v -> begin - match Var.Map.find_opt v env with + match A.Var.Map.find_opt v env with | Some t -> - let+ v' = Bindlib.box_var (Var.translate v) in + let+ v' = Bindlib.box_var (A.Var.translate v) in mark v' t | None -> Errors.raise_spanned_error (Ast.pos e) @@ -374,10 +374,10 @@ let rec typecheck_expr_bottom_up (List.length taus) else let xs, body = Bindlib.unmbind binder in - let xs' = Array.map Var.translate xs in + let xs' = Array.map A.Var.translate xs in let xstaus = List.mapi (fun i tau -> xs.(i), ast_to_typ tau) taus in let env = - List.fold_left (fun env (x, tau) -> Var.Map.add x tau env) env xstaus + List.fold_left (fun env (x, tau) -> A.Var.Map.add x tau env) env xstaus in let body' = typecheck_expr_bottom_up ctx env body in let t_func = @@ -465,9 +465,9 @@ and typecheck_expr_top_down let unionfind_make ?(pos = e) t = UnionFind.make (add_pos pos t) in match Marked.unmark e with | A.EVar v -> begin - match Var.Map.find_opt v env with + match A.Var.Map.find_opt v env with | Some tau' -> - let+ v' = Bindlib.box_var (Var.translate v) in + let+ v' = Bindlib.box_var (A.Var.translate v) in unify_and_mark v' tau' | None -> Errors.raise_spanned_error pos_e @@ -550,13 +550,13 @@ and typecheck_expr_top_down (List.length t_args) else let xs, body = Bindlib.unmbind binder in - let xs' = Array.map Var.translate xs in + let xs' = Array.map A.Var.translate xs in let xstaus = List.map2 (fun x t_arg -> x, ast_to_typ t_arg) (Array.to_list xs) t_args in let env = List.fold_left - (fun env (x, t_arg) -> Var.Map.add x t_arg env) + (fun env (x, t_arg) -> A.Var.Map.add x t_arg env) env xstaus in let body' = typecheck_expr_bottom_up ctx env body in @@ -630,9 +630,9 @@ let get_ty_mark { uf; pos } = A.Typed { ty = typ_to_ast uf; pos } (* Infer the type of an expression *) let infer_types (ctx : Ast.decl_ctx) (e : 'm Ast.marked_expr) : Ast.typed Ast.marked_expr Bindlib.box = - Astgen_utils.map_gexpr_marks ~f:get_ty_mark + A.Expr.map_marks ~f:get_ty_mark @@ Bindlib.unbox - @@ wrap ctx (typecheck_expr_bottom_up ctx Var.Map.empty) e + @@ wrap ctx (typecheck_expr_bottom_up ctx A.Var.Map.empty) e let infer_type (type m) ctx (e : m Ast.marked_expr) = match Marked.get_mark e with @@ -646,7 +646,7 @@ let check_type (tau : A.typ Marked.pos) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore - @@ wrap ctx (typecheck_expr_top_down ctx Var.Map.empty (ast_to_typ tau)) e + @@ wrap ctx (typecheck_expr_top_down ctx A.Var.Map.empty (ast_to_typ tau)) e let infer_types_program prg = let ctx = prg.A.decl_ctx in @@ -681,7 +681,7 @@ let infer_types_program prg = Bindlib.box_apply (fun e1 -> wrap ctx (unify ctx e (ty e1)) ty_out; - let e1 = Astgen_utils.map_gexpr_marks ~f:get_ty_mark e1 in + let e1 = A.Expr.map_marks ~f:get_ty_mark e1 in A.Result (Bindlib.unbox e1)) e' | A.ScopeLet @@ -695,13 +695,13 @@ let infer_types_program prg = let ty_e = ast_to_typ scope_let_typ in let e = wrap ctx (typecheck_expr_bottom_up ctx env) e0 in let var, next = Bindlib.unbind scope_let_next in - let env = Var.Map.add var ty_e env in + let env = A.Var.Map.add var ty_e env in let next = process_scope_body_expr env next in - let scope_let_next = Bindlib.bind_var (Var.translate var) next in + let scope_let_next = Bindlib.bind_var (A.Var.translate var) next in Bindlib.box_apply2 (fun e scope_let_next -> wrap ctx (unify ctx e0 (ty e)) ty_e; - let e = Astgen_utils.map_gexpr_marks ~f:get_ty_mark e in + let e = A.Expr.map_marks ~f:get_ty_mark e in A.ScopeLet { scope_let_kind; @@ -714,15 +714,15 @@ let infer_types_program prg = in let scope_body_expr = let var, e = Bindlib.unbind body in - let env = Var.Map.add var ty_in env in + let env = A.Var.Map.add var ty_in env in let e' = process_scope_body_expr env e in - Bindlib.bind_var (Var.translate var) e' + Bindlib.bind_var (A.Var.translate var) e' in let scope_next = let scope_var, next = Bindlib.unbind scope_next in - let env = Var.Map.add scope_var ty_scope env in + let env = A.Var.Map.add scope_var ty_scope env in let next' = process_scopes env next in - Bindlib.bind_var (Var.translate scope_var) next' + Bindlib.bind_var (A.Var.translate scope_var) next' in Bindlib.box_apply2 (fun scope_body_expr scope_next -> @@ -739,6 +739,6 @@ let infer_types_program prg = }) scope_body_expr scope_next in - let scopes = wrap ctx (process_scopes Var.Map.empty) prg.scopes in + let scopes = wrap ctx (process_scopes A.Var.Map.empty) prg.scopes in Bindlib.box_apply (fun scopes -> { A.decl_ctx = ctx; scopes }) scopes |> Bindlib.unbox diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 5dbada8d..04a09255 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -15,7 +15,7 @@ the License. *) open Utils -include Astgen +include Shared_ast module D = Dcalc.Ast type lit = lcalc glit @@ -71,7 +71,7 @@ let eraise e1 pos = Bindlib.box (ERaise e1, pos) let ecatch e1 exn e2 pos = Bindlib.box_apply2 (fun e1 e2 -> ECatch (e1, exn, e2), pos) e1 e2 -let map_expr ctx ~f e = Astgen_utils.map_gexpr ctx ~f e +let map_expr ctx ~f e = Expr.map ctx ~f e let rec map_expr_top_down ~f e = map_expr () ~f:(fun () -> map_expr_top_down ~f) (f e) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 9eb05674..51739da6 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -15,7 +15,7 @@ the License. *) open Utils -include module type of Astgen +include module type of Shared_ast (** Abstract syntax tree for the lambda calculus *) diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 30cc5242..4850891d 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast module D = Dcalc.Ast module A = Ast diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 89ed10a5..63ade836 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -40,6 +40,8 @@ module A = Ast hoisted and later handled by the [translate_expr] function. Every other cases is found in the translate_and_hoist function. *) +open Shared_ast + type 'm hoists = ('m A.expr, 'm D.marked_expr) Var.Map.t (** Hoists definition. It represent bindings between [A.Var.t] and [D.expr]. *) diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 9d12fee7..51c4d73a 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast module A = Ast module L = Lcalc.Ast module D = Dcalc.Ast diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index ce361562..dd336439 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast type scope_var_ctx = { scope_var_name : Ast.ScopeVar.t; @@ -751,7 +752,7 @@ let translate_scope_decl (sigma : Ast.scope_decl) : (Dcalc.Ast.untyped Dcalc.Ast.expr, Dcalc.Ast.untyped) Dcalc.Ast.scope_body Bindlib.box - * Astgen.struct_ctx = + * struct_ctx = let sigma_info = Ast.ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in diff --git a/compiler/shared_ast/dune b/compiler/shared_ast/dune new file mode 100644 index 00000000..0fffcc69 --- /dev/null +++ b/compiler/shared_ast/dune @@ -0,0 +1,4 @@ +(library + (name shared_ast) + (public_name catala.shared_ast) + (libraries bindlib unionFind utils catala.runtime_ocaml)) diff --git a/compiler/utils/astgen_utils.ml b/compiler/shared_ast/expr.ml similarity index 95% rename from compiler/utils/astgen_utils.ml rename to compiler/shared_ast/expr.ml index 2bce85d0..34cc1160 100644 --- a/compiler/utils/astgen_utils.ml +++ b/compiler/shared_ast/expr.ml @@ -15,9 +15,10 @@ License for the specific language governing permissions and limitations under the License. *) -open Astgen +open Utils +open Types -(** Functions handling the types in [Astgen] *) +(** Functions handling the types of [shared_ast] *) let evar v mark = Bindlib.box_apply (Marked.mark mark) (Bindlib.box_var v) @@ -69,7 +70,7 @@ let ecatch e1 exn e2 pos = let translate_var v = Bindlib.copy_var v (fun x -> EVar x) (Bindlib.name_of v) -let map_gexpr +let map (type a) (ctx : 'ctx) ~(f : 'ctx -> (a, 'm1) marked_gexpr -> (a, 'm2) marked_gexpr Bindlib.box) @@ -99,11 +100,11 @@ let map_gexpr | ECatch (e1, exn, e2) -> ecatch (f ctx e1) exn (f ctx e2) (Marked.get_mark e) | ERaise exn -> eraise exn (Marked.get_mark e) -let rec map_gexpr_top_down ~f e = - map_gexpr () ~f:(fun () -> map_gexpr_top_down ~f) (f e) +let rec map_top_down ~f e = + map () ~f:(fun () -> map_top_down ~f) (f e) -let map_gexpr_marks ~f e = - map_gexpr_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e +let map_marks ~f e = + map_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e let rec fold_left_scope_lets ~f ~init scope_body_expr = match scope_body_expr with diff --git a/compiler/utils/astgen_utils.mli b/compiler/shared_ast/expr.mli similarity index 97% rename from compiler/utils/astgen_utils.mli rename to compiler/shared_ast/expr.mli index f2b30201..21d2f973 100644 --- a/compiler/utils/astgen_utils.mli +++ b/compiler/shared_ast/expr.mli @@ -15,9 +15,10 @@ License for the specific language governing permissions and limitations under the License. *) -(** Functions handling the types in [Astgen] *) +(** Functions handling the types of [shared_ast] *) -open Astgen +open Utils +open Types (** {2 Boxed constructors} *) @@ -106,13 +107,13 @@ val eerroronempty : (** ---------- *) -val map_gexpr : +val map : 'ctx -> f:('ctx -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box) -> (('a, 't1) gexpr, 't2) Marked.t -> ('a, 't2) marked_gexpr Bindlib.box -val map_gexpr_top_down : +val map_top_down : f:(('a, 't1) marked_gexpr -> (('a, 't1) gexpr, 't2) Marked.t) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box @@ -120,7 +121,7 @@ val map_gexpr_top_down : returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) -val map_gexpr_marks : +val map_marks : f:('t1 -> 't2) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box val fold_left_scope_lets : diff --git a/compiler/shared_ast/shared_ast.ml b/compiler/shared_ast/shared_ast.ml new file mode 100644 index 00000000..8c91d8d3 --- /dev/null +++ b/compiler/shared_ast/shared_ast.ml @@ -0,0 +1,20 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +include Types + +module Expr = Expr +module Var = Var diff --git a/compiler/utils/astgen.ml b/compiler/shared_ast/types.ml similarity index 98% rename from compiler/utils/astgen.ml rename to compiler/shared_ast/types.ml index bd7dfbd6..7aa62665 100644 --- a/compiler/utils/astgen.ml +++ b/compiler/shared_ast/types.ml @@ -15,6 +15,12 @@ License for the specific language governing permissions and limitations under the License. *) +(** This module defines generic types for types, literals and expressions shared through several of the different ASTs. *) + +(* Doesn't define values, so OK to have without an mli *) + +open Utils + module Runtime = Runtime_ocaml.Runtime module ScopeName : Uid.Id with type info = Uid.MarkedString.info = diff --git a/compiler/utils/var.ml b/compiler/shared_ast/var.ml similarity index 98% rename from compiler/utils/var.ml rename to compiler/shared_ast/var.ml index 8126c717..da81f5ee 100644 --- a/compiler/utils/var.ml +++ b/compiler/shared_ast/var.ml @@ -14,12 +14,12 @@ License for the specific language governing permissions and limitations under the License. *) -open Astgen +open Types (** {1 Variables and their collections} *) (** This module provides types and helpers for Bindlib variables on the - [Astgen.gexpr] type *) + [gexpr] type *) (* The subtypes of the generic AST that hold vars *) type 'e expr = 'e diff --git a/compiler/utils/var.mli b/compiler/shared_ast/var.mli similarity index 96% rename from compiler/utils/var.mli rename to compiler/shared_ast/var.mli index 8cefa794..3227fcb8 100644 --- a/compiler/utils/var.mli +++ b/compiler/shared_ast/var.mli @@ -14,16 +14,16 @@ License for the specific language governing permissions and limitations under the License. *) -open Astgen +open Types (** {1 Variables and their collections} *) (** This module provides types and helpers for Bindlib variables on the - [Astgen.gexpr] type *) + [gexpr] type *) type 'e expr = 'e constraint 'e = ([< desugared | scopelang | dcalc | lcalc ], 't) gexpr -(** Subtype of Astgen.gexpr where variables are handled *) +(** Subtype of gexpr where variables are handled *) type 'e var = 'e expr Bindlib.var type 'e t = 'e var diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 4df0739b..924e0676 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -18,6 +18,7 @@ (** Generates verification conditions from scope definitions *) open Utils +open Shared_ast type verification_condition_kind = | NoEmptyError @@ -32,9 +33,9 @@ type verification_condition = { (** This expression should have type [bool]*) vc_kind : verification_condition_kind; vc_scope : Dcalc.Ast.ScopeName.t; - vc_variable : Astgen.typed Dcalc.Ast.var Marked.pos; + vc_variable : typed Dcalc.Ast.var Marked.pos; vc_free_vars_typ : - (Astgen.typed Dcalc.Ast.expr, Dcalc.Ast.typ Marked.pos) Var.Map.t; + (typed Dcalc.Ast.expr, Dcalc.Ast.typ Marked.pos) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 5c46323d..e94bd5d6 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -39,7 +39,7 @@ module type Backend = sig val translate_expr : backend_context -> - Astgen.typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.marked_expr -> backend_context * vc_encoding end @@ -49,13 +49,13 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> (Astgen.typed expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed expr, typ Marked.pos) Var.Map.t -> backend_context type vc_encoding val translate_expr : backend_context -> - Astgen.typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.marked_expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 37a55f77..6a37e07f 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -18,6 +18,7 @@ (** Common code for handling the IO of all proof backends supported *) open Utils +open Shared_ast module type Backend = sig val init_backend : unit -> unit @@ -26,7 +27,7 @@ module type Backend = sig val make_context : Dcalc.Ast.decl_ctx -> - (Astgen.typed Dcalc.Ast.expr, Dcalc.Ast.typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.expr, Dcalc.Ast.typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -42,7 +43,7 @@ module type Backend = sig val translate_expr : backend_context -> - Astgen.typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.marked_expr -> backend_context * vc_encoding end @@ -53,14 +54,14 @@ module type BackendIO = sig val make_context : Dcalc.Ast.decl_ctx -> - (Astgen.typed Dcalc.Ast.expr, Dcalc.Ast.typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.expr, Dcalc.Ast.typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding val translate_expr : backend_context -> - Astgen.typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.marked_expr -> backend_context * vc_encoding type model From 2b6ee8dd4bfafdcd2ef6a64fe06c796abf3924a5 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Fri, 12 Aug 2022 22:42:39 +0200 Subject: [PATCH 02/31] Leverage the shared AST: big cleanup (part I) --- compiler/dcalc/ast.ml | 102 +---- compiler/dcalc/ast.mli | 143 +----- compiler/dcalc/interpreter.ml | 439 ++++++++++--------- compiler/dcalc/interpreter.mli | 5 +- compiler/dcalc/optimizations.ml | 5 +- compiler/dcalc/optimizations.mli | 1 + compiler/dcalc/print.ml | 37 +- compiler/dcalc/print.mli | 23 +- compiler/dcalc/typing.ml | 40 +- compiler/dcalc/typing.mli | 14 +- compiler/desugared/ast.ml | 37 +- compiler/desugared/ast.mli | 17 +- compiler/desugared/dependency.ml | 3 +- compiler/desugared/desugared_to_scope.ml | 13 +- compiler/driver.ml | 16 +- compiler/lcalc/ast.ml | 106 +---- compiler/lcalc/ast.mli | 117 +---- compiler/lcalc/closure_conversion.ml | 31 +- compiler/lcalc/compile_with_exceptions.ml | 110 ++--- compiler/lcalc/compile_without_exceptions.ml | 170 +++---- compiler/lcalc/optimizations.ml | 17 +- compiler/lcalc/optimizations.mli | 2 +- compiler/lcalc/print.ml | 31 +- compiler/lcalc/print.mli | 9 +- compiler/lcalc/to_ocaml.ml | 165 +++---- compiler/lcalc/to_ocaml.mli | 25 +- compiler/plugin.ml | 2 +- compiler/plugin.mli | 4 +- compiler/plugins/api_web.ml | 95 ++-- compiler/plugins/json_schema.ml | 53 +-- compiler/scalc/ast.ml | 23 +- compiler/scalc/compile_from_lambda.ml | 124 +++--- compiler/scalc/print.ml | 29 +- compiler/scalc/print.mli | 2 +- compiler/scalc/to_python.ml | 81 ++-- compiler/scopelang/ast.ml | 18 +- compiler/scopelang/ast.mli | 13 +- compiler/scopelang/dependency.ml | 47 +- compiler/scopelang/dependency.mli | 9 +- compiler/scopelang/print.ml | 13 +- compiler/scopelang/print.mli | 2 +- compiler/scopelang/scope_to_dcalc.ml | 328 +++++++------- compiler/scopelang/scope_to_dcalc.mli | 2 +- compiler/shared_ast/expr.ml | 85 +++- compiler/shared_ast/expr.mli | 61 ++- compiler/surface/desugaring.ml | 257 +++++------ compiler/surface/name_resolution.ml | 73 +-- compiler/surface/name_resolution.mli | 27 +- compiler/verification/conditions.ml | 7 +- compiler/verification/conditions.mli | 10 +- compiler/verification/io.ml | 5 +- compiler/verification/io.mli | 10 +- compiler/verification/solver.ml | 2 +- compiler/verification/solver.mli | 2 +- compiler/verification/z3backend.real.ml | 7 +- dune-project | 2 +- french_law/ocaml/bench.ml | 2 +- french_law/ocaml/dune | 2 +- 58 files changed, 1420 insertions(+), 1655 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 322b18a3..99e8b233 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -16,8 +16,7 @@ the License. *) open Utils -include Shared_ast -include Shared_ast.Expr +open Shared_ast type lit = dcalc glit @@ -26,53 +25,9 @@ and 'm marked_expr = (dcalc, 'm mark) marked_gexpr type 'm program = ('m expr, 'm) program_generic -let no_mark (type m) : m mark -> m mark = function - | Untyped _ -> Untyped { pos = Pos.no_pos } - | Typed _ -> Typed { pos = Pos.no_pos; ty = Marked.mark Pos.no_pos TAny } - -let mark_pos (type m) (m : m mark) : Pos.t = - match m with Untyped { pos } | Typed { pos; _ } -> pos - -let pos (type m) (x : ('a, m) marked) : Pos.t = mark_pos (Marked.get_mark x) -let ty (_, m) : marked_typ = match m with Typed { ty; _ } -> ty - -let with_ty (type m) (ty : marked_typ) (x : ('a, m) marked) : ('a, typed) marked - = - Marked.mark - (match Marked.get_mark x with - | Untyped { pos } -> Typed { pos; ty } - | Typed m -> Typed { m with ty }) - (Marked.unmark x) - -let map_expr ctx ~f e = Expr.map ctx ~f e - -let rec map_expr_top_down ~f e = - map_expr () ~f:(fun () -> map_expr_top_down ~f) (f e) - -let map_expr_marks ~f e = - map_expr_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e - -let untype_expr e = map_expr_marks ~f:(fun m -> Untyped { pos = mark_pos m }) e - type ('expr, 'm) box_expr_sig = ('expr, 'm) marked -> ('expr, 'm) marked Bindlib.box -(** See [Bindlib.box_term] documentation for why we are doing that. *) -let box_expr : ('m expr, 'm) box_expr_sig = - fun e -> - let rec id_t () e = map_expr () ~f:id_t e in - id_t () e - -let untype_program prg = - { - prg with - scopes = - Bindlib.unbox - (map_exprs_in_scopes - ~f:(fun e -> untype_expr e) - ~varf:Var.translate prg.scopes); - } - type 'm var = 'm expr Var.t type 'm vars = 'm expr Var.vars @@ -158,49 +113,14 @@ type ('expr, 'm) make_let_in_sig = Pos.t -> ('expr, 'm) marked Bindlib.box -let map_mark - (type m) - (pos_f : Pos.t -> Pos.t) - (ty_f : marked_typ -> marked_typ) - (m : m mark) : m mark = - match m with - | Untyped { pos } -> Untyped { pos = pos_f pos } - | Typed { pos; ty } -> Typed { pos = pos_f pos; ty = ty_f ty } - -let map_mark2 - (type m) - (pos_f : Pos.t -> Pos.t -> Pos.t) - (ty_f : typed -> typed -> marked_typ) - (m1 : m mark) - (m2 : m mark) : m mark = - match m1, m2 with - | Untyped m1, Untyped m2 -> Untyped { pos = pos_f m1.pos m2.pos } - | Typed m1, Typed m2 -> Typed { pos = pos_f m1.pos m2.pos; ty = ty_f m1 m2 } - -let fold_marks - (type m) - (pos_f : Pos.t list -> Pos.t) - (ty_f : typed list -> marked_typ) - (ms : m mark list) : m mark = - match ms with - | [] -> invalid_arg "Dcalc.Ast.fold_mark" - | Untyped _ :: _ as ms -> - Untyped { pos = pos_f (List.map (function Untyped { pos } -> pos) ms) } - | Typed _ :: _ -> - Typed - { - pos = pos_f (List.map (function Typed { pos; _ } -> pos) ms); - ty = ty_f (List.map (function Typed m -> m) ms); - } - let empty_thunked_term mark : 'm marked_expr = let silent = Var.make "_" in - let pos = mark_pos mark in + let pos = Expr.mark_pos mark in Bindlib.unbox (make_abs [| silent |] (Bindlib.box (ELit LEmptyError, mark)) [TLit TUnit, pos] - (map_mark + (Expr.map_mark (fun pos -> pos) (fun ty -> Marked.mark pos (TArrow (Marked.mark pos (TLit TUnit), ty))) @@ -211,7 +131,7 @@ let (make_let_in : ('m expr, 'm) make_let_in_sig) = let m_e1 = Marked.get_mark (Bindlib.unbox e1) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in let m_abs = - map_mark2 + Expr.map_mark2 (fun _ _ -> pos) (fun m1 m2 -> Marked.mark pos (TArrow (m1.ty, m2.ty))) m_e1 m_e2 @@ -329,7 +249,7 @@ let build_whole_scope_expr ( List.map snd (StructMap.find body.scope_body_input_struct ctx.ctx_structs), Some body.scope_body_input_struct ), - mark_pos mark_scope ); + Expr.mark_pos mark_scope ); ] mark_scope @@ -354,10 +274,6 @@ type 'expr scope_name_or_var = | ScopeName of ScopeName.t | ScopeVar of 'expr Bindlib.var -let get_scope_body_mark scope_body = - match snd (Bindlib.unbind scope_body.scope_body_expr) with - | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e - let rec unfold_scopes ~(box_expr : ('expr, 'm) box_expr_sig) ~(make_abs : ('expr, 'm) make_abs_sig) @@ -374,7 +290,7 @@ let rec unfold_scopes | ScopeDef { scope_name; scope_body; scope_next } -> let scope_var, scope_next = Bindlib.unbind scope_next in let scope_pos = Marked.get_mark (ScopeName.get_info scope_name) in - let scope_body_mark = get_scope_body_mark scope_body in + let scope_body_mark = Expr.get_scope_body_mark scope_body in let main_scope = match main_scope with | ScopeVar v -> ScopeVar v @@ -407,7 +323,7 @@ let build_whole_program_expr (main_scope : ScopeName.t) : ('expr, 'm) marked Bindlib.box = let _, main_scope_body = find_scope main_scope [] p.scopes in unfold_scopes ~box_expr ~make_abs ~make_let_in p.decl_ctx p.scopes - (get_scope_body_mark main_scope_body) + (Expr.get_scope_body_mark main_scope_body) (ScopeName main_scope) let rec expr_size (e : 'm marked_expr) : int = @@ -435,7 +351,7 @@ let rec expr_size (e : 'm marked_expr) : int = let remove_logging_calls (e : 'm marked_expr) : 'm marked_expr Bindlib.box = let rec f () e = match Marked.unmark e with - | EApp ((EOp (Unop (Log _)), _), [arg]) -> map_expr () ~f arg - | _ -> map_expr () ~f e + | EApp ((EOp (Unop (Log _)), _), [arg]) -> Expr.map () ~f arg + | _ -> Expr.map () ~f e in f () e diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index 86d07f9d..04ff839e 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -18,8 +18,7 @@ (** Abstract syntax tree of the default calculus intermediate representation *) open Utils -include module type of Shared_ast -include module type of Shared_ast.Expr +open Shared_ast type lit = dcalc glit @@ -44,149 +43,9 @@ val free_vars_scope_body : ('m expr, 'm) scope_body -> 'm expr Var.Set.t val free_vars_scopes : ('m expr, 'm) scopes -> 'm expr Var.Set.t val make_var : ('m var, 'm) marked -> 'm marked_expr Bindlib.box -(** {2 Manipulation of marks} *) - -val no_mark : 'm mark -> 'm mark -val mark_pos : 'm mark -> Pos.t -val pos : ('a, 'm) marked -> Pos.t -val ty : ('a, typed) marked -> marked_typ -val with_ty : marked_typ -> ('a, 'm) marked -> ('a, typed) marked - -(** All the following functions will resolve the types if called on an - [Inferring] type *) - -val map_mark : - (Pos.t -> Pos.t) -> (marked_typ -> marked_typ) -> 'm mark -> 'm mark - -val map_mark2 : - (Pos.t -> Pos.t -> Pos.t) -> - (typed -> typed -> marked_typ) -> - 'm mark -> - 'm mark -> - 'm mark - -val fold_marks : - (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark - -val get_scope_body_mark : ('expr, 'm) scope_body -> 'm mark -val untype_expr : 'm marked_expr -> untyped marked_expr Bindlib.box -val untype_program : 'm program -> untyped program - -(** {2 Boxed constructors} *) - -val evar : 'm expr Bindlib.var -> 'm mark -> 'm marked_expr Bindlib.box - -val etuple : - 'm marked_expr Bindlib.box list -> - StructName.t option -> - 'm mark -> - 'm marked_expr Bindlib.box - -val etupleaccess : - 'm marked_expr Bindlib.box -> - int -> - StructName.t option -> - marked_typ list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val einj : - 'm marked_expr Bindlib.box -> - int -> - EnumName.t -> - marked_typ list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val ematch : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - EnumName.t -> - 'm mark -> - 'm marked_expr Bindlib.box - -val earray : - 'm marked_expr Bindlib.box list -> 'm mark -> 'm marked_expr Bindlib.box - -val elit : lit -> 'm mark -> 'm marked_expr Bindlib.box - -val eabs : - ('m expr, 'm marked_expr) Bindlib.mbinder Bindlib.box -> - marked_typ list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eapp : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eassert : - 'm marked_expr Bindlib.box -> 'm mark -> 'm marked_expr Bindlib.box - -val eop : operator -> 'm mark -> 'm marked_expr Bindlib.box - -val edefault : - 'm marked_expr Bindlib.box list -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eifthenelse : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eerroronempty : - 'm marked_expr Bindlib.box -> 'm mark -> 'm marked_expr Bindlib.box - type ('expr, 'm) box_expr_sig = ('expr, 'm) marked -> ('expr, 'm) marked Bindlib.box -val box_expr : ('m expr, 'm) box_expr_sig - -(**{2 Program traversal}*) - -(** Be careful when using these traversal functions, as the bound variables they - open will be different at each traversal. *) - -val map_expr : - 'a -> - f:('a -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box) -> - ('m1 expr, 'm2 mark) Marked.t -> - 'm2 marked_expr Bindlib.box -(** If you want to apply a map transform to an expression, you can save up - writing a painful match over all the cases of the AST. For instance, if you - want to remove all errors on empty, you can write - - {[ - let remove_error_empty = - let rec f () e = - match Marked.unmark e with - | ErrorOnEmpty e1 -> map_expr () f e1 - | _ -> map_expr () f e - in - f () e - ]} - - The first argument of map_expr is an optional context that you can carry - around during your map traversal. *) - -val map_expr_top_down : - f:('m1 marked_expr -> ('m1 expr, 'm2 mark) Marked.t) -> - 'm1 marked_expr -> - 'm2 marked_expr Bindlib.box -(** Recursively applies [f] to the nodes of the expression tree. The type - returned by [f] is hybrid since the mark at top-level has been rewritten, - but not yet the marks in the subtrees. *) - -val map_expr_marks : - f:('m1 mark -> 'm2 mark) -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box - (** {2 Boxed term constructors} *) type ('e, 'm) make_abs_sig = diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 7e6a5556..4aaafd0e 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -17,12 +17,13 @@ (** Reference interpreter for the default calculus *) open Utils +open Shared_ast module A = Ast module Runtime = Runtime_ocaml.Runtime (** {1 Helpers} *) -let is_empty_error (e : 'm A.marked_expr) : bool = +let is_empty_error (e : 'm Ast.marked_expr) : bool = match Marked.unmark e with ELit LEmptyError -> true | _ -> false let log_indent = ref 0 @@ -30,25 +31,25 @@ let log_indent = ref 0 (** {1 Evaluation} *) let rec evaluate_operator - (ctx : Ast.decl_ctx) - (op : A.operator) + (ctx : decl_ctx) + (op : operator) (pos : Pos.t) - (args : 'm A.marked_expr list) : 'm A.expr = + (args : 'm Ast.marked_expr list) : 'm Ast.expr = (* Try to apply [div] and if a [Division_by_zero] exceptions is catched, use [op] to raise multispanned errors. *) - let apply_div_or_raise_err (div : unit -> 'm A.expr) : 'm A.expr = + let apply_div_or_raise_err (div : unit -> 'm Ast.expr) : 'm Ast.expr = try div () with Division_by_zero -> Errors.raise_multispanned_error [ Some "The division operator:", pos; - Some "The null denominator:", Ast.pos (List.nth args 1); + Some "The null denominator:", Expr.pos (List.nth args 1); ] "division by zero at runtime" in let get_binop_args_pos = function | (arg0 :: arg1 :: _ : 'm A.marked_expr list) -> - [None, Ast.pos arg0; None, Ast.pos arg1] + [None, Expr.pos arg0; None, Expr.pos arg1] | _ -> assert false in (* Try to apply [cmp] and if a [UncomparableDurations] exceptions is catched, @@ -63,211 +64,211 @@ let rec evaluate_operator precise number of days" in match op, List.map Marked.unmark args with - | A.Ternop A.Fold, [_f; _init; EArray es] -> + | Ternop Fold, [_f; _init; EArray es] -> Marked.unmark (List.fold_left (fun acc e' -> evaluate_expr ctx - (Marked.same_mark_as (A.EApp (List.nth args 0, [acc; e'])) e')) + (Marked.same_mark_as (EApp (List.nth args 0, [acc; e'])) e')) (List.nth args 1) es) - | A.Binop A.And, [ELit (LBool b1); ELit (LBool b2)] -> - A.ELit (LBool (b1 && b2)) - | A.Binop A.Or, [ELit (LBool b1); ELit (LBool b2)] -> - A.ELit (LBool (b1 || b2)) - | A.Binop A.Xor, [ELit (LBool b1); ELit (LBool b2)] -> - A.ELit (LBool (b1 <> b2)) - | A.Binop (A.Add KInt), [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LInt Runtime.(i1 +! i2)) - | A.Binop (A.Sub KInt), [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LInt Runtime.(i1 -! i2)) - | A.Binop (A.Mult KInt), [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LInt Runtime.(i1 *! i2)) - | A.Binop (A.Div KInt), [ELit (LInt i1); ELit (LInt i2)] -> - apply_div_or_raise_err (fun _ -> A.ELit (LInt Runtime.(i1 /! i2))) - | A.Binop (A.Add KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LRat Runtime.(i1 +& i2)) - | A.Binop (A.Sub KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LRat Runtime.(i1 -& i2)) - | A.Binop (A.Mult KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LRat Runtime.(i1 *& i2)) - | A.Binop (A.Div KRat), [ELit (LRat i1); ELit (LRat i2)] -> - apply_div_or_raise_err (fun _ -> A.ELit (LRat Runtime.(i1 /& i2))) - | A.Binop (A.Add KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LMoney Runtime.(m1 +$ m2)) - | A.Binop (A.Sub KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LMoney Runtime.(m1 -$ m2)) - | A.Binop (A.Mult KMoney), [ELit (LMoney m1); ELit (LRat m2)] -> - A.ELit (LMoney Runtime.(m1 *$ m2)) - | A.Binop (A.Div KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - apply_div_or_raise_err (fun _ -> A.ELit (LRat Runtime.(m1 /$ m2))) - | A.Binop (A.Add KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - A.ELit (LDuration Runtime.(d1 +^ d2)) - | A.Binop (A.Sub KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - A.ELit (LDuration Runtime.(d1 -^ d2)) - | A.Binop (A.Sub KDate), [ELit (LDate d1); ELit (LDate d2)] -> - A.ELit (LDuration Runtime.(d1 -@ d2)) - | A.Binop (A.Add KDate), [ELit (LDate d1); ELit (LDuration d2)] -> - A.ELit (LDate Runtime.(d1 +@ d2)) - | A.Binop (A.Div KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + | Binop And, [ELit (LBool b1); ELit (LBool b2)] -> + ELit (LBool (b1 && b2)) + | Binop Or, [ELit (LBool b1); ELit (LBool b2)] -> + ELit (LBool (b1 || b2)) + | Binop Xor, [ELit (LBool b1); ELit (LBool b2)] -> + ELit (LBool (b1 <> b2)) + | Binop (Add KInt), [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LInt Runtime.(i1 +! i2)) + | Binop (Sub KInt), [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LInt Runtime.(i1 -! i2)) + | Binop (Mult KInt), [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LInt Runtime.(i1 *! i2)) + | Binop (Div KInt), [ELit (LInt i1); ELit (LInt i2)] -> + apply_div_or_raise_err (fun _ -> ELit (LInt Runtime.(i1 /! i2))) + | Binop (Add KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LRat Runtime.(i1 +& i2)) + | Binop (Sub KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LRat Runtime.(i1 -& i2)) + | Binop (Mult KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LRat Runtime.(i1 *& i2)) + | Binop (Div KRat), [ELit (LRat i1); ELit (LRat i2)] -> + apply_div_or_raise_err (fun _ -> ELit (LRat Runtime.(i1 /& i2))) + | Binop (Add KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LMoney Runtime.(m1 +$ m2)) + | Binop (Sub KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LMoney Runtime.(m1 -$ m2)) + | Binop (Mult KMoney), [ELit (LMoney m1); ELit (LRat m2)] -> + ELit (LMoney Runtime.(m1 *$ m2)) + | Binop (Div KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + apply_div_or_raise_err (fun _ -> ELit (LRat Runtime.(m1 /$ m2))) + | Binop (Add KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + ELit (LDuration Runtime.(d1 +^ d2)) + | Binop (Sub KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + ELit (LDuration Runtime.(d1 -^ d2)) + | Binop (Sub KDate), [ELit (LDate d1); ELit (LDate d2)] -> + ELit (LDuration Runtime.(d1 -@ d2)) + | Binop (Add KDate), [ELit (LDate d1); ELit (LDuration d2)] -> + ELit (LDate Runtime.(d1 +@ d2)) + | Binop (Div KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> apply_div_or_raise_err (fun _ -> - try A.ELit (LRat Runtime.(d1 /^ d2)) + try ELit (LRat Runtime.(d1 /^ d2)) with Runtime.IndivisableDurations -> Errors.raise_multispanned_error (get_binop_args_pos args) "Cannot divide durations that cannot be converted to a precise \ number of days") - | A.Binop (A.Mult KDuration), [ELit (LDuration d1); ELit (LInt i1)] -> - A.ELit (LDuration Runtime.(d1 *^ i1)) - | A.Binop (A.Lt KInt), [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LBool Runtime.(i1 - A.ELit (LBool Runtime.(i1 <=! i2)) - | A.Binop (A.Gt KInt), [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LBool Runtime.(i1 >! i2)) - | A.Binop (A.Gte KInt), [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LBool Runtime.(i1 >=! i2)) - | A.Binop (A.Lt KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LBool Runtime.(i1 <& i2)) - | A.Binop (A.Lte KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LBool Runtime.(i1 <=& i2)) - | A.Binop (A.Gt KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LBool Runtime.(i1 >& i2)) - | A.Binop (A.Gte KRat), [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LBool Runtime.(i1 >=& i2)) - | A.Binop (A.Lt KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LBool Runtime.(m1 <$ m2)) - | A.Binop (A.Lte KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LBool Runtime.(m1 <=$ m2)) - | A.Binop (A.Gt KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LBool Runtime.(m1 >$ m2)) - | A.Binop (A.Gte KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LBool Runtime.(m1 >=$ m2)) - | A.Binop (A.Lt KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> A.ELit (LBool Runtime.(d1 <^ d2))) args - | A.Binop (A.Lte KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> A.ELit (LBool Runtime.(d1 <=^ d2))) args - | A.Binop (A.Gt KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> A.ELit (LBool Runtime.(d1 >^ d2))) args - | A.Binop (A.Gte KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> - apply_cmp_or_raise_err (fun _ -> A.ELit (LBool Runtime.(d1 >=^ d2))) args - | A.Binop (A.Lt KDate), [ELit (LDate d1); ELit (LDate d2)] -> - A.ELit (LBool Runtime.(d1 <@ d2)) - | A.Binop (A.Lte KDate), [ELit (LDate d1); ELit (LDate d2)] -> - A.ELit (LBool Runtime.(d1 <=@ d2)) - | A.Binop (A.Gt KDate), [ELit (LDate d1); ELit (LDate d2)] -> - A.ELit (LBool Runtime.(d1 >@ d2)) - | A.Binop (A.Gte KDate), [ELit (LDate d1); ELit (LDate d2)] -> - A.ELit (LBool Runtime.(d1 >=@ d2)) - | A.Binop A.Eq, [ELit LUnit; ELit LUnit] -> A.ELit (LBool true) - | A.Binop A.Eq, [ELit (LDuration d1); ELit (LDuration d2)] -> - A.ELit (LBool Runtime.(d1 =^ d2)) - | A.Binop A.Eq, [ELit (LDate d1); ELit (LDate d2)] -> - A.ELit (LBool Runtime.(d1 =@ d2)) - | A.Binop A.Eq, [ELit (LMoney m1); ELit (LMoney m2)] -> - A.ELit (LBool Runtime.(m1 =$ m2)) - | A.Binop A.Eq, [ELit (LRat i1); ELit (LRat i2)] -> - A.ELit (LBool Runtime.(i1 =& i2)) - | A.Binop A.Eq, [ELit (LInt i1); ELit (LInt i2)] -> - A.ELit (LBool Runtime.(i1 =! i2)) - | A.Binop A.Eq, [ELit (LBool b1); ELit (LBool b2)] -> A.ELit (LBool (b1 = b2)) - | A.Binop A.Eq, [EArray es1; EArray es2] -> - A.ELit + | Binop (Mult KDuration), [ELit (LDuration d1); ELit (LInt i1)] -> + ELit (LDuration Runtime.(d1 *^ i1)) + | Binop (Lt KInt), [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LBool Runtime.(i1 + ELit (LBool Runtime.(i1 <=! i2)) + | Binop (Gt KInt), [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LBool Runtime.(i1 >! i2)) + | Binop (Gte KInt), [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LBool Runtime.(i1 >=! i2)) + | Binop (Lt KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LBool Runtime.(i1 <& i2)) + | Binop (Lte KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LBool Runtime.(i1 <=& i2)) + | Binop (Gt KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LBool Runtime.(i1 >& i2)) + | Binop (Gte KRat), [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LBool Runtime.(i1 >=& i2)) + | Binop (Lt KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LBool Runtime.(m1 <$ m2)) + | Binop (Lte KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LBool Runtime.(m1 <=$ m2)) + | Binop (Gt KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LBool Runtime.(m1 >$ m2)) + | Binop (Gte KMoney), [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LBool Runtime.(m1 >=$ m2)) + | Binop (Lt KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 <^ d2))) args + | Binop (Lte KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 <=^ d2))) args + | Binop (Gt KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 >^ d2))) args + | Binop (Gte KDuration), [ELit (LDuration d1); ELit (LDuration d2)] -> + apply_cmp_or_raise_err (fun _ -> ELit (LBool Runtime.(d1 >=^ d2))) args + | Binop (Lt KDate), [ELit (LDate d1); ELit (LDate d2)] -> + ELit (LBool Runtime.(d1 <@ d2)) + | Binop (Lte KDate), [ELit (LDate d1); ELit (LDate d2)] -> + ELit (LBool Runtime.(d1 <=@ d2)) + | Binop (Gt KDate), [ELit (LDate d1); ELit (LDate d2)] -> + ELit (LBool Runtime.(d1 >@ d2)) + | Binop (Gte KDate), [ELit (LDate d1); ELit (LDate d2)] -> + ELit (LBool Runtime.(d1 >=@ d2)) + | Binop Eq, [ELit LUnit; ELit LUnit] -> ELit (LBool true) + | Binop Eq, [ELit (LDuration d1); ELit (LDuration d2)] -> + ELit (LBool Runtime.(d1 =^ d2)) + | Binop Eq, [ELit (LDate d1); ELit (LDate d2)] -> + ELit (LBool Runtime.(d1 =@ d2)) + | Binop Eq, [ELit (LMoney m1); ELit (LMoney m2)] -> + ELit (LBool Runtime.(m1 =$ m2)) + | Binop Eq, [ELit (LRat i1); ELit (LRat i2)] -> + ELit (LBool Runtime.(i1 =& i2)) + | Binop Eq, [ELit (LInt i1); ELit (LInt i2)] -> + ELit (LBool Runtime.(i1 =! i2)) + | Binop Eq, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 = b2)) + | Binop Eq, [EArray es1; EArray es2] -> + ELit (LBool (try List.for_all2 (fun e1 e2 -> match evaluate_operator ctx op pos [e1; e2] with - | A.ELit (LBool b) -> b + | ELit (LBool b) -> b | _ -> assert false (* should not happen *)) es1 es2 with Invalid_argument _ -> false)) - | A.Binop A.Eq, [ETuple (es1, s1); ETuple (es2, s2)] -> - A.ELit + | Binop Eq, [ETuple (es1, s1); ETuple (es2, s2)] -> + ELit (LBool (try s1 = s2 && List.for_all2 (fun e1 e2 -> match evaluate_operator ctx op pos [e1; e2] with - | A.ELit (LBool b) -> b + | ELit (LBool b) -> b | _ -> assert false (* should not happen *)) es1 es2 with Invalid_argument _ -> false)) - | A.Binop A.Eq, [EInj (e1, i1, en1, _ts1); EInj (e2, i2, en2, _ts2)] -> - A.ELit + | Binop Eq, [EInj (e1, i1, en1, _ts1); EInj (e2, i2, en2, _ts2)] -> + ELit (LBool (try en1 = en2 && i1 = i2 && match evaluate_operator ctx op pos [e1; e2] with - | A.ELit (LBool b) -> b + | ELit (LBool b) -> b | _ -> assert false (* should not happen *) with Invalid_argument _ -> false)) - | A.Binop A.Eq, [_; _] -> - A.ELit (LBool false) (* comparing anything else return false *) - | A.Binop A.Neq, [_; _] -> ( - match evaluate_operator ctx (A.Binop A.Eq) pos args with - | A.ELit (A.LBool b) -> A.ELit (A.LBool (not b)) + | Binop Eq, [_; _] -> + ELit (LBool false) (* comparing anything else return false *) + | Binop Neq, [_; _] -> ( + match evaluate_operator ctx (Binop Eq) pos args with + | ELit (LBool b) -> ELit (LBool (not b)) | _ -> assert false (*should not happen *)) - | A.Binop A.Concat, [A.EArray es1; A.EArray es2] -> A.EArray (es1 @ es2) - | A.Binop A.Map, [_; A.EArray es] -> - A.EArray + | Binop Concat, [EArray es1; EArray es2] -> EArray (es1 @ es2) + | Binop Map, [_; EArray es] -> + EArray (List.map (fun e' -> evaluate_expr ctx - (Marked.same_mark_as (A.EApp (List.nth args 0, [e'])) e')) + (Marked.same_mark_as (EApp (List.nth args 0, [e'])) e')) es) - | A.Binop A.Filter, [_; A.EArray es] -> - A.EArray + | Binop Filter, [_; EArray es] -> + EArray (List.filter (fun e' -> match evaluate_expr ctx - (Marked.same_mark_as (A.EApp (List.nth args 0, [e'])) e') + (Marked.same_mark_as (EApp (List.nth args 0, [e'])) e') with - | A.ELit (A.LBool b), _ -> b + | ELit (LBool b), _ -> b | _ -> Errors.raise_spanned_error - (A.pos (List.nth args 0)) + (Expr.pos (List.nth args 0)) "This predicate evaluated to something else than a boolean \ (should not happen if the term was well-typed)") es) - | A.Binop _, ([ELit LEmptyError; _] | [_; ELit LEmptyError]) -> - A.ELit LEmptyError - | A.Unop (A.Minus KInt), [ELit (LInt i)] -> - A.ELit (LInt Runtime.(integer_of_int 0 -! i)) - | A.Unop (A.Minus KRat), [ELit (LRat i)] -> - A.ELit (LRat Runtime.(decimal_of_string "0" -& i)) - | A.Unop (A.Minus KMoney), [ELit (LMoney i)] -> - A.ELit (LMoney Runtime.(money_of_units_int 0 -$ i)) - | A.Unop (A.Minus KDuration), [ELit (LDuration i)] -> - A.ELit (LDuration Runtime.(~-^i)) - | A.Unop A.Not, [ELit (LBool b)] -> A.ELit (LBool (not b)) - | A.Unop A.Length, [EArray es] -> - A.ELit (LInt (Runtime.integer_of_int (List.length es))) - | A.Unop A.GetDay, [ELit (LDate d)] -> - A.ELit (LInt Runtime.(day_of_month_of_date d)) - | A.Unop A.GetMonth, [ELit (LDate d)] -> - A.ELit (LInt Runtime.(month_number_of_date d)) - | A.Unop A.GetYear, [ELit (LDate d)] -> A.ELit (LInt Runtime.(year_of_date d)) - | A.Unop A.FirstDayOfMonth, [ELit (LDate d)] -> - A.ELit (LDate Runtime.(first_day_of_month d)) - | A.Unop A.LastDayOfMonth, [ELit (LDate d)] -> - A.ELit (LDate Runtime.(first_day_of_month d)) - | A.Unop A.IntToRat, [ELit (LInt i)] -> - A.ELit (LRat Runtime.(decimal_of_integer i)) - | A.Unop A.MoneyToRat, [ELit (LMoney i)] -> - A.ELit (LRat Runtime.(decimal_of_money i)) - | A.Unop A.RatToMoney, [ELit (LRat i)] -> - A.ELit (LMoney Runtime.(money_of_decimal i)) - | A.Unop A.RoundMoney, [ELit (LMoney m)] -> - A.ELit (LMoney Runtime.(money_round m)) - | A.Unop A.RoundDecimal, [ELit (LRat m)] -> - A.ELit (LRat Runtime.(decimal_round m)) - | A.Unop (A.Log (entry, infos)), [e'] -> + | Binop _, ([ELit LEmptyError; _] | [_; ELit LEmptyError]) -> + ELit LEmptyError + | Unop (Minus KInt), [ELit (LInt i)] -> + ELit (LInt Runtime.(integer_of_int 0 -! i)) + | Unop (Minus KRat), [ELit (LRat i)] -> + ELit (LRat Runtime.(decimal_of_string "0" -& i)) + | Unop (Minus KMoney), [ELit (LMoney i)] -> + ELit (LMoney Runtime.(money_of_units_int 0 -$ i)) + | Unop (Minus KDuration), [ELit (LDuration i)] -> + ELit (LDuration Runtime.(~-^i)) + | Unop Not, [ELit (LBool b)] -> ELit (LBool (not b)) + | Unop Length, [EArray es] -> + ELit (LInt (Runtime.integer_of_int (List.length es))) + | Unop GetDay, [ELit (LDate d)] -> + ELit (LInt Runtime.(day_of_month_of_date d)) + | Unop GetMonth, [ELit (LDate d)] -> + ELit (LInt Runtime.(month_number_of_date d)) + | Unop GetYear, [ELit (LDate d)] -> ELit (LInt Runtime.(year_of_date d)) + | Unop FirstDayOfMonth, [ELit (LDate d)] -> + ELit (LDate Runtime.(first_day_of_month d)) + | Unop LastDayOfMonth, [ELit (LDate d)] -> + ELit (LDate Runtime.(first_day_of_month d)) + | Unop IntToRat, [ELit (LInt i)] -> + ELit (LRat Runtime.(decimal_of_integer i)) + | Unop MoneyToRat, [ELit (LMoney i)] -> + ELit (LRat Runtime.(decimal_of_money i)) + | Unop RatToMoney, [ELit (LRat i)] -> + ELit (LMoney Runtime.(money_of_decimal i)) + | Unop RoundMoney, [ELit (LMoney m)] -> + ELit (LMoney Runtime.(money_round m)) + | Unop RoundDecimal, [ELit (LRat m)] -> + ELit (LRat Runtime.(decimal_round m)) + | Unop (Log (entry, infos)), [e'] -> if !Cli.trace_flag then ( match entry with | VarDef _ -> @@ -276,7 +277,7 @@ let rec evaluate_operator Cli.log_format "%*s%a %a: %s" (!log_indent * 2) "" Print.format_log_entry entry Print.format_uid_list infos (match e' with - | Ast.EAbs _ -> Cli.with_style [ANSITerminal.green] "" + | EAbs _ -> Cli.with_style [ANSITerminal.green] "" | _ -> let expr_str = Format.asprintf "%a" @@ -308,7 +309,7 @@ let rec evaluate_operator entry Print.format_uid_list infos) else (); e' - | A.Unop _, [ELit LEmptyError] -> A.ELit LEmptyError + | Unop _, [ELit LEmptyError] -> ELit LEmptyError | _ -> Errors.raise_multispanned_error ([Some "Operator:", pos] @@ -318,16 +319,16 @@ let rec evaluate_operator (Format.asprintf "Argument n°%d, value %a" (i + 1) (Print.format_expr ctx ~debug:true) arg), - A.pos arg )) + Expr.pos arg )) args) "Operator applied to the wrong arguments\n\ (should not happen if the term was well-typed)" -and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr +and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr = match Marked.unmark e with | EVar _ -> - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "free variable found at evaluation (should not happen if term was \ well-typed" | EApp (e1, args) -> ( @@ -339,22 +340,22 @@ and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr evaluate_expr ctx (Bindlib.msubst binder (Array.of_list (List.map Marked.unmark args))) else - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "wrong function call, expected %d arguments, got %d" (Bindlib.mbinder_arity binder) (List.length args) - | EOp op -> Marked.same_mark_as (evaluate_operator ctx op (A.pos e) args) e - | ELit LEmptyError -> Marked.same_mark_as (A.ELit LEmptyError) e + | EOp op -> Marked.same_mark_as (evaluate_operator ctx op (Expr.pos e) args) e + | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "function has not been reduced to a lambda at evaluation (should not \ happen if the term was well-typed") | EAbs _ | ELit _ | EOp _ -> e (* these are values *) | ETuple (es, s) -> let new_es = List.map (evaluate_expr ctx) es in if List.exists is_empty_error new_es then - Marked.same_mark_as (A.ELit LEmptyError) e - else Marked.same_mark_as (A.ETuple (new_es, s)) e + Marked.same_mark_as (ELit LEmptyError) e + else Marked.same_mark_as (ETuple (new_es, s)) e | ETupleAccess (e1, n, s, _) -> ( let e1 = evaluate_expr ctx e1 in match Marked.unmark e1 with @@ -364,49 +365,49 @@ and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr | Some s, Some s' when s = s' -> () | _ -> Errors.raise_multispanned_error - [None, A.pos e; None, A.pos e1] + [None, Expr.pos e; None, Expr.pos e1] "Error during tuple access: not the same structs (should not happen \ if the term was well-typed)"); match List.nth_opt es n with | Some e' -> e' | None -> - Errors.raise_spanned_error (A.pos e1) + Errors.raise_spanned_error (Expr.pos e1) "The tuple has %d components but the %i-th element was requested \ (should not happen if the term was well-type)" (List.length es) n) - | ELit LEmptyError -> Marked.same_mark_as (A.ELit LEmptyError) e + | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> - Errors.raise_spanned_error (A.pos e1) + Errors.raise_spanned_error (Expr.pos e1) "The expression %a should be a tuple with %d components but is not \ (should not happen if the term was well-typed)" (Print.format_expr ctx ~debug:true) e n) | EInj (e1, n, en, ts) -> let e1' = evaluate_expr ctx e1 in - if is_empty_error e1' then Marked.same_mark_as (A.ELit LEmptyError) e - else Marked.same_mark_as (A.EInj (e1', n, en, ts)) e + if is_empty_error e1' then Marked.same_mark_as (ELit LEmptyError) e + else Marked.same_mark_as (EInj (e1', n, en, ts)) e | EMatch (e1, es, e_name) -> ( let e1 = evaluate_expr ctx e1 in match Marked.unmark e1 with - | A.EInj (e1, n, e_name', _) -> + | EInj (e1, n, e_name', _) -> if e_name <> e_name' then Errors.raise_multispanned_error - [None, A.pos e; None, A.pos e1] + [None, Expr.pos e; None, Expr.pos e1] "Error during match: two different enums found (should not happend \ if the term was well-typed)"; let es_n = match List.nth_opt es n with | Some es_n -> es_n | None -> - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "sum type index error (should not happend if the term was \ well-typed)" in - let new_e = Marked.same_mark_as (A.EApp (es_n, [e1])) e in + let new_e = Marked.same_mark_as (EApp (es_n, [e1])) e in evaluate_expr ctx new_e - | A.ELit A.LEmptyError -> Marked.same_mark_as (A.ELit A.LEmptyError) e + | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> - Errors.raise_spanned_error (A.pos e1) + Errors.raise_spanned_error (Expr.pos e1) "Expected a term having a sum type as an argument to a match (should \ not happend if the term was well-typed") | EDefault (exceptions, just, cons) -> ( @@ -416,11 +417,11 @@ and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr | 0 -> ( let just = evaluate_expr ctx just in match Marked.unmark just with - | ELit LEmptyError -> Marked.same_mark_as (A.ELit LEmptyError) e + | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | ELit (LBool true) -> evaluate_expr ctx cons - | ELit (LBool false) -> Marked.same_mark_as (A.ELit LEmptyError) e + | ELit (LBool false) -> Marked.same_mark_as (ELit LEmptyError) e | _ -> - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "Default justification has not been reduced to a boolean at \ evaluation (should not happen if the term was well-typed") | 1 -> List.find (fun sub -> not (is_empty_error sub)) exceptions @@ -428,7 +429,7 @@ and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr Errors.raise_multispanned_error (List.map (fun except -> - Some "This consequence has a valid justification:", A.pos except) + Some "This consequence has a valid justification:", Expr.pos except) (List.filter (fun sub -> not (is_empty_error sub)) exceptions)) "There is a conflict between multiple valid consequences for assigning \ the same variable.") @@ -436,55 +437,55 @@ and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr match Marked.unmark (evaluate_expr ctx cond) with | ELit (LBool true) -> evaluate_expr ctx et | ELit (LBool false) -> evaluate_expr ctx ef - | ELit LEmptyError -> Marked.same_mark_as (A.ELit LEmptyError) e + | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> - Errors.raise_spanned_error (A.pos cond) + Errors.raise_spanned_error (Expr.pos cond) "Expected a boolean literal for the result of this condition (should \ not happen if the term was well-typed)") | EArray es -> let new_es = List.map (evaluate_expr ctx) es in if List.exists is_empty_error new_es then - Marked.same_mark_as (A.ELit LEmptyError) e - else Marked.same_mark_as (A.EArray new_es) e + Marked.same_mark_as (ELit LEmptyError) e + else Marked.same_mark_as (EArray new_es) e | ErrorOnEmpty e' -> let e' = evaluate_expr ctx e' in - if Marked.unmark e' = A.ELit LEmptyError then - Errors.raise_spanned_error (A.pos e') + if Marked.unmark e' = ELit LEmptyError then + Errors.raise_spanned_error (Expr.pos e') "This variable evaluated to an empty term (no rule that defined it \ applied in this situation)" else e' | EAssert e' -> ( match Marked.unmark (evaluate_expr ctx e') with - | ELit (LBool true) -> Marked.same_mark_as (Ast.ELit LUnit) e' + | ELit (LBool true) -> Marked.same_mark_as (ELit LUnit) e' | ELit (LBool false) -> ( match Marked.unmark e' with - | Ast.ErrorOnEmpty + | ErrorOnEmpty ( EApp - ( (Ast.EOp (Binop op), _), + ( (EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)] ), _ ) | EApp - ( (Ast.EOp (Ast.Unop (Ast.Log _)), _), + ( (EOp (Unop (Log _)), _), [ - ( Ast.EApp - ( (Ast.EOp (Binop op), _), + ( EApp + ( (EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)] ), _ ); ] ) | EApp - ((Ast.EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]) + ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]) -> - Errors.raise_spanned_error (A.pos e') "Assertion failed: %a %a %a" + Errors.raise_spanned_error (Expr.pos e') "Assertion failed: %a %a %a" (Print.format_expr ctx ~debug:false) e1 Print.format_binop op (Print.format_expr ctx ~debug:false) e2 | _ -> Cli.debug_format "%a" (Print.format_expr ctx) e'; - Errors.raise_spanned_error (A.pos e') "Assertion failed") - | ELit LEmptyError -> Marked.same_mark_as (A.ELit LEmptyError) e + Errors.raise_spanned_error (Expr.pos e') "Assertion failed") + | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> - Errors.raise_spanned_error (A.pos e') + Errors.raise_spanned_error (Expr.pos e') "Expected a boolean literal for the result of this assertion (should \ not happen if the term was well-typed)") @@ -492,13 +493,13 @@ and evaluate_expr (ctx : Ast.decl_ctx) (e : 'm A.marked_expr) : 'm A.marked_expr let interpret_program : 'm. - Ast.decl_ctx -> + decl_ctx -> 'm Ast.marked_expr -> (Uid.MarkedString.info * 'm Ast.marked_expr) list = - fun (ctx : Ast.decl_ctx) (e : 'm Ast.marked_expr) : + fun (ctx : decl_ctx) (e : 'm Ast.marked_expr) : (Uid.MarkedString.info * 'm Ast.marked_expr) list -> match evaluate_expr ctx e with - | Ast.EAbs (_, [((Ast.TTuple (taus, Some s_in), _) as targs)]), mark_e -> + | EAbs (_, [((TTuple (taus, Some s_in), _) as targs)]), mark_e -> begin (* At this point, the interpreter seeks to execute the scope but does not have a way to retrieve input values from the command line. [taus] contain @@ -509,9 +510,9 @@ let interpret_program : List.map (fun ty -> match Marked.unmark ty with - | A.TArrow ((A.TLit A.TUnit, _), ty_in) -> + | TArrow ((TLit TUnit, _), ty_in) -> Ast.empty_thunked_term - (A.map_mark (fun pos -> pos) (fun _ -> ty_in) mark_e) + (Expr.map_mark (fun pos -> pos) (fun _ -> ty_in) mark_e) | _ -> Errors.raise_spanned_error (Marked.get_mark ty) "This scope needs input arguments to be executed. But the Catala \ @@ -522,23 +523,23 @@ let interpret_program : taus in let to_interpret = - ( Ast.EApp + ( EApp ( e, [ - ( Ast.ETuple (application_term, Some s_in), + ( ETuple (application_term, Some s_in), let pos = match application_term with - | a :: _ -> A.pos a + | a :: _ -> Expr.pos a | [] -> Pos.no_pos in - A.map_mark (fun _ -> pos) (fun _ -> targs) mark_e ); + Expr.map_mark (fun _ -> pos) (fun _ -> targs) mark_e ); ] ), - A.map_mark + Expr.map_mark (fun pos -> pos) (fun ty -> match application_term, ty with | [], t_out -> t_out - | _ :: _, (A.TArrow (_, t_out), _) -> t_out + | _ :: _, (TArrow (_, t_out), _) -> t_out | _ :: _, (_, bad_pos) -> Errors.raise_spanned_error bad_pos "@[(bug) Result of interpretation doesn't have the \ @@ -547,19 +548,19 @@ let interpret_program : mark_e ) in match Marked.unmark (evaluate_expr ctx to_interpret) with - | Ast.ETuple (args, Some s_out) -> + | ETuple (args, Some s_out) -> let s_out_fields = List.map - (fun (f, _) -> Ast.StructFieldName.get_info f) - (Ast.StructMap.find s_out ctx.ctx_structs) + (fun (f, _) -> StructFieldName.get_info f) + (StructMap.find s_out ctx.ctx_structs) in List.map2 (fun arg var -> var, arg) args s_out_fields | _ -> - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "The interpretation of a program should always yield a struct \ corresponding to the scope variables" end | _ -> - Errors.raise_spanned_error (A.pos e) + Errors.raise_spanned_error (Expr.pos e) "The interpreter can only interpret terms starting with functions having \ thunked arguments" diff --git a/compiler/dcalc/interpreter.mli b/compiler/dcalc/interpreter.mli index 4190c2f1..bd1125b0 100644 --- a/compiler/dcalc/interpreter.mli +++ b/compiler/dcalc/interpreter.mli @@ -17,12 +17,13 @@ (** Reference interpreter for the default calculus *) open Utils +open Shared_ast -val evaluate_expr : Ast.decl_ctx -> 'm Ast.marked_expr -> 'm Ast.marked_expr +val evaluate_expr : decl_ctx -> 'm Ast.marked_expr -> 'm Ast.marked_expr (** Evaluates an expression according to the semantics of the default calculus. *) val interpret_program : - Ast.decl_ctx -> + decl_ctx -> 'm Ast.marked_expr -> (Uid.MarkedString.info * 'm Ast.marked_expr) list (** Interprets a program. This function expects an expression typed as a diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index 5ecbe18a..4a00fbfa 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -15,6 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) open Utils +open Shared_ast open Ast type partial_evaluation_ctx = { @@ -82,7 +83,7 @@ let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : (fun arg arms -> match arg, arms with | (EInj (e1, i, e_name', _ts), _), _ - when Ast.EnumName.compare e_name e_name' = 0 -> + when EnumName.compare e_name e_name' = 0 -> (* iota reduction *) EApp (List.nth arms i, [e1]), pos | _ -> EMatch (arg, arms, e_name), pos) @@ -252,4 +253,4 @@ let optimize_program (p : 'm program) : untyped program = (program_map partial_evaluation { var_values = Var.Map.empty; decl_ctx = p.decl_ctx } p) - |> untype_program + |> Expr.untype_program diff --git a/compiler/dcalc/optimizations.mli b/compiler/dcalc/optimizations.mli index 53c7a600..e70ec2c2 100644 --- a/compiler/dcalc/optimizations.mli +++ b/compiler/dcalc/optimizations.mli @@ -17,6 +17,7 @@ (** Optimization passes for default calculus programs and expressions *) +open Shared_ast open Ast val optimize_expr : decl_ctx -> 'm marked_expr -> 'm marked_expr Bindlib.box diff --git a/compiler/dcalc/print.ml b/compiler/dcalc/print.ml index ac94560d..2f31f12e 100644 --- a/compiler/dcalc/print.ml +++ b/compiler/dcalc/print.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast open Ast open String_common @@ -68,7 +69,7 @@ let format_enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : (Utils.Cli.format_with_style [ANSITerminal.magenta]) (Format.asprintf "%a" EnumConstructor.format_t c) -let rec format_typ (ctx : Ast.decl_ctx) (fmt : Format.formatter) (typ : typ) : +let rec format_typ (ctx : decl_ctx) (fmt : Format.formatter) (typ : typ) : unit = let format_typ = format_typ ctx in let format_typ_with_parens (fmt : Format.formatter) (t : typ) = @@ -84,7 +85,7 @@ let rec format_typ (ctx : Ast.decl_ctx) (fmt : Format.formatter) (typ : typ) : (fun fmt t -> Format.fprintf fmt "%a" format_typ t)) (List.map Marked.unmark ts) | TTuple (_args, Some s) -> - Format.fprintf fmt "@[%a%a%a%a@]" Ast.StructName.format_t s + Format.fprintf fmt "@[%a%a%a%a@]" StructName.format_t s format_punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> @@ -98,7 +99,7 @@ let rec format_typ (ctx : Ast.decl_ctx) (fmt : Format.formatter) (typ : typ) : (StructMap.find s ctx.ctx_structs)) format_punctuation "}" | TEnum (_, e) -> - Format.fprintf fmt "@[%a%a%a%a@]" Ast.EnumName.format_t e + Format.fprintf fmt "@[%a%a%a%a@]" EnumName.format_t e format_punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> @@ -211,7 +212,7 @@ let format_var (fmt : Format.formatter) (v : 'm Ast.var) : unit = let rec format_expr ?(debug : bool = false) - (ctx : Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm marked_expr) : unit = let format_expr = format_expr ~debug ctx in @@ -231,15 +232,15 @@ let rec format_expr es format_punctuation ")" | ETuple (es, Some s) -> Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" - Ast.StructName.format_t s format_punctuation "{" + StructName.format_t s format_punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " format_punctuation ";") (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a@ %a" format_punctuation "\"" - Ast.StructFieldName.format_t struct_field format_punctuation "\"" + StructFieldName.format_t struct_field format_punctuation "\"" format_punctuation "=" format_expr e)) - (List.combine es (List.map fst (Ast.StructMap.find s ctx.ctx_structs))) + (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) format_punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" format_punctuation "[" @@ -253,12 +254,12 @@ let rec format_expr Format.fprintf fmt "%a%a%d" format_expr e1 format_punctuation "." n | Some s -> Format.fprintf fmt "%a%a%a%a%a" format_expr e1 format_operator "." - format_punctuation "\"" Ast.StructFieldName.format_t - (fst (List.nth (Ast.StructMap.find s ctx.ctx_structs) n)) + format_punctuation "\"" StructFieldName.format_t + (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) format_punctuation "\"") | EInj (e, n, en, _ts) -> Format.fprintf fmt "@[%a@ %a@]" format_enum_constructor - (fst (List.nth (Ast.EnumMap.find en ctx.ctx_enums) n)) + (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) format_expr e | EMatch (e, es, e_name) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" format_keyword @@ -268,7 +269,7 @@ let rec format_expr (fun fmt (e, c) -> Format.fprintf fmt "@[%a %a%a@ %a@]" format_punctuation "|" format_enum_constructor c format_punctuation ":" format_expr e)) - (List.combine es (List.map fst (Ast.EnumMap.find e_name ctx.ctx_enums))) + (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) | ELit l -> format_lit fmt l | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in @@ -298,7 +299,7 @@ let rec format_expr Format.fprintf fmt "%a%a%a %a%a" format_punctuation "(" format_var x format_punctuation ":" (format_typ ctx) tau format_punctuation ")")) xs_tau format_punctuation "→" format_expr body - | EApp ((EOp (Binop ((Ast.Map | Ast.Filter) as op)), _), [arg1; arg2]) -> + | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" format_binop op format_with_parens arg1 format_with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> @@ -347,13 +348,13 @@ let format_scope ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) - ((n, s) : Ast.ScopeName.t * ('m Ast.expr, 'm) scope_body) = + ((n, s) : ScopeName.t * ('m Ast.expr, 'm) scope_body) = Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" - Ast.ScopeName.format_t n (format_expr ctx ~debug) + ScopeName.format_t n (format_expr ctx ~debug) (Bindlib.unbox (Ast.build_whole_scope_expr ~make_abs:Ast.make_abs - ~make_let_in:Ast.make_let_in ~box_expr:Ast.box_expr ctx s - (Ast.map_mark - (fun _ -> Marked.get_mark (Ast.ScopeName.get_info n)) + ~make_let_in:Ast.make_let_in ~box_expr:Expr.box ctx s + (Expr.map_mark + (fun _ -> Marked.get_mark (ScopeName.get_info n)) (fun ty -> ty) - (Ast.get_scope_body_mark s)))) + (Expr.get_scope_body_mark s)))) diff --git a/compiler/dcalc/print.mli b/compiler/dcalc/print.mli index 8a3ae7a0..a9148e33 100644 --- a/compiler/dcalc/print.mli +++ b/compiler/dcalc/print.mli @@ -17,6 +17,7 @@ (** Printing functions for the default calculus AST *) open Utils +open Shared_ast (** {1 Common syntax highlighting helpers}*) @@ -29,27 +30,27 @@ val format_lit_style : Format.formatter -> string -> unit (** {1 Formatters} *) val format_uid_list : Format.formatter -> Uid.MarkedString.info list -> unit -val format_enum_constructor : Format.formatter -> Ast.EnumConstructor.t -> unit -val format_tlit : Format.formatter -> Ast.typ_lit -> unit -val format_typ : Ast.decl_ctx -> Format.formatter -> Ast.typ -> unit +val format_enum_constructor : Format.formatter -> EnumConstructor.t -> unit +val format_tlit : Format.formatter -> typ_lit -> unit +val format_typ : decl_ctx -> Format.formatter -> typ -> unit val format_lit : Format.formatter -> Ast.lit -> unit -val format_op_kind : Format.formatter -> Ast.op_kind -> unit -val format_binop : Format.formatter -> Ast.binop -> unit -val format_ternop : Format.formatter -> Ast.ternop -> unit -val format_log_entry : Format.formatter -> Ast.log_entry -> unit -val format_unop : Format.formatter -> Ast.unop -> unit +val format_op_kind : Format.formatter -> op_kind -> unit +val format_binop : Format.formatter -> binop -> unit +val format_ternop : Format.formatter -> ternop -> unit +val format_log_entry : Format.formatter -> log_entry -> unit +val format_unop : Format.formatter -> unop -> unit val format_var : Format.formatter -> 'm Ast.var -> unit val format_expr : ?debug:bool (** [true] for debug printing *) -> - Ast.decl_ctx -> + decl_ctx -> Format.formatter -> 'm Ast.marked_expr -> unit val format_scope : ?debug:bool (** [true] for debug printing *) -> - Ast.decl_ctx -> + decl_ctx -> Format.formatter -> - Ast.ScopeName.t * ('m Ast.expr, 'm) Ast.scope_body -> + ScopeName.t * ('m Ast.expr, 'm) scope_body -> unit diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 0184c54c..9945eece 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -71,7 +71,7 @@ let typ_needs_parens (t : typ Marked.pos UnionFind.elem) : bool = match Marked.unmark t with TArrow _ | TArray _ -> true | _ -> false let rec format_typ - (ctx : Ast.decl_ctx) + (ctx : A.decl_ctx) (fmt : Format.formatter) (typ : typ Marked.pos UnionFind.elem) : unit = let format_typ = format_typ ctx in @@ -90,8 +90,8 @@ let rec format_typ ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ *@ ") (fun fmt t -> Format.fprintf fmt "%a" format_typ t)) ts - | TTuple (_ts, Some s) -> Format.fprintf fmt "%a" Ast.StructName.format_t s - | TEnum (_ts, e) -> Format.fprintf fmt "%a" Ast.EnumName.format_t e + | TTuple (_ts, Some s) -> Format.fprintf fmt "%a" A.StructName.format_t s + | TEnum (_ts, e) -> Format.fprintf fmt "%a" A.EnumName.format_t e | TArrow (t1, t2) -> Format.fprintf fmt "@[%a →@ %a@]" format_typ_with_parens t1 format_typ t2 @@ -108,8 +108,8 @@ type mark = { pos : Pos.t; uf : unionfind_typ } (** Raises an error if unification cannot be performed *) let rec unify - (ctx : Ast.decl_ctx) - (e : ('a, 'm A.mark) Ast.marked_gexpr) (* used for error context *) + (ctx : A.decl_ctx) + (e : ('a, 'm A.mark) A.marked_gexpr) (* used for error context *) (t1 : typ Marked.pos UnionFind.elem) (t2 : typ Marked.pos UnionFind.elem) : unit = let unify = unify ctx in @@ -263,7 +263,7 @@ let op_type (op : A.operator Marked.pos) : typ Marked.pos UnionFind.elem = type 'e env = ('e, typ Marked.pos UnionFind.elem) A.Var.Map.t -let add_pos e ty = Marked.mark (Ast.pos e) ty +let add_pos e ty = Marked.mark (A.Expr.pos e) ty let ty (_, { uf; _ }) = uf let ( let+ ) x f = Bindlib.box_apply f x let ( and+ ) x1 x2 = Bindlib.box_pair x1 x2 @@ -290,12 +290,12 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) (** Infers the most permissive type from an expression *) let rec typecheck_expr_bottom_up - (ctx : Ast.decl_ctx) + (ctx : A.decl_ctx) (env : 'm Ast.expr env) (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Print.format_expr ~debug:true ctx) e; *) - let pos_e = Ast.pos e in + let pos_e = A.Expr.pos e in let mark (e : (A.dcalc, mark) A.gexpr) uf = Marked.mark { uf; pos = pos_e } e in @@ -308,7 +308,7 @@ let rec typecheck_expr_bottom_up let+ v' = Bindlib.box_var (A.Var.translate v) in mark v' t | None -> - Errors.raise_spanned_error (Ast.pos e) + Errors.raise_spanned_error (A.Expr.pos e) "Variable %s not found in the current context." (Bindlib.name_of v) end | A.ELit (LBool _) as e1 -> Bindlib.box @@ mark_with_uf e1 (TLit TBool) @@ -343,7 +343,7 @@ let rec typecheck_expr_bottom_up match List.nth_opt ts' n with | Some ts_n -> ts_n | None -> - Errors.raise_spanned_error (Ast.pos e) + Errors.raise_spanned_error (A.Expr.pos e) "Expression should have a sum type with at least %d cases but only \ has %d" n (List.length ts') @@ -368,7 +368,7 @@ let rec typecheck_expr_bottom_up mark (EMatch (e1', es', e_name)) t_ret | A.EAbs (binder, taus) -> if Bindlib.mbinder_arity binder <> List.length taus then - Errors.raise_spanned_error (Ast.pos e) + Errors.raise_spanned_error (A.Expr.pos e) "function has %d variables but was supplied %d types" (Bindlib.mbinder_arity binder) (List.length taus) @@ -446,13 +446,13 @@ let rec typecheck_expr_bottom_up (** Checks whether the expression can be typed with the provided type *) and typecheck_expr_top_down - (ctx : Ast.decl_ctx) + (ctx : A.decl_ctx) (env : 'm Ast.expr env) (tau : typ Marked.pos UnionFind.elem) (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau (Print.format_expr ctx) e; *) - let pos_e = Ast.pos e in + let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in let unify_and_mark (e' : (A.dcalc, mark) A.gexpr) tau' = (* This try...with was added because of @@ -502,7 +502,7 @@ and typecheck_expr_top_down match List.nth_opt typs' n with | Some t1n -> unify_and_mark (A.ETupleAccess (e1', n, s, typs)) t1n | None -> - Errors.raise_spanned_error (Ast.pos e1) + Errors.raise_spanned_error (A.Expr.pos e1) "Expression should have a tuple type with at least %d elements but \ only has %d" n (List.length typs) @@ -513,7 +513,7 @@ and typecheck_expr_top_down match List.nth_opt ts' n with | Some ts_n -> ts_n | None -> - Errors.raise_spanned_error (Ast.pos e) + Errors.raise_spanned_error (A.Expr.pos e) "Expression should have a sum type with at least %d cases but only \ has %d" n (List.length ts) @@ -544,7 +544,7 @@ and typecheck_expr_top_down unify_and_mark (EMatch (e1', es', e_name)) t_ret | A.EAbs (binder, t_args) -> if Bindlib.mbinder_arity binder <> List.length t_args then - Errors.raise_spanned_error (Ast.pos e) + Errors.raise_spanned_error (A.Expr.pos e) "function has %d variables but was supplied %d types" (Bindlib.mbinder_arity binder) (List.length t_args) @@ -628,8 +628,8 @@ let wrap ctx f e = let get_ty_mark { uf; pos } = A.Typed { ty = typ_to_ast uf; pos } (* Infer the type of an expression *) -let infer_types (ctx : Ast.decl_ctx) (e : 'm Ast.marked_expr) : - Ast.typed Ast.marked_expr Bindlib.box = +let infer_types (ctx : A.decl_ctx) (e : 'm Ast.marked_expr) : + A.typed Ast.marked_expr Bindlib.box = A.Expr.map_marks ~f:get_ty_mark @@ Bindlib.unbox @@ wrap ctx (typecheck_expr_bottom_up ctx A.Var.Map.empty) e @@ -637,11 +637,11 @@ let infer_types (ctx : Ast.decl_ctx) (e : 'm Ast.marked_expr) : let infer_type (type m) ctx (e : m Ast.marked_expr) = match Marked.get_mark e with | A.Typed { ty; _ } -> ty - | A.Untyped _ -> Ast.ty (Bindlib.unbox (infer_types ctx e)) + | A.Untyped _ -> A.Expr.ty (Bindlib.unbox (infer_types ctx e)) (** Typechecks an expression given an expected type *) let check_type - (ctx : Ast.decl_ctx) + (ctx : A.decl_ctx) (e : 'm Ast.marked_expr) (tau : A.typ Marked.pos) = (* todo: consider using the already inferred type if ['m] = [typed] *) diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 5c66ca4f..91ee3df1 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -17,18 +17,20 @@ (** Typing for the default calculus. Because of the error terms, we perform type inference using the classical W algorithm with union-find unification. *) +open Shared_ast + val infer_types : - Ast.decl_ctx -> - Ast.untyped Ast.marked_expr -> - Ast.typed Ast.marked_expr Bindlib.box + decl_ctx -> + untyped Ast.marked_expr -> + typed Ast.marked_expr Bindlib.box (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) -val infer_type : Ast.decl_ctx -> 'm Ast.marked_expr -> Ast.typ Utils.Marked.pos +val infer_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos (** Gets the outer type of the given expression, using either the existing annotations or inference *) val check_type : - Ast.decl_ctx -> 'm Ast.marked_expr -> Ast.typ Utils.Marked.pos -> unit + decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos -> unit -val infer_types_program : Ast.untyped Ast.program -> Ast.typed Ast.program +val infer_types_program : untyped Ast.program -> typed Ast.program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index a65c0828..7982d783 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -17,6 +17,7 @@ (** Abstract syntax tree of the desugared representation *) open Utils +open Shared_ast (** {1 Names, Maps and Keys} *) @@ -99,7 +100,7 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t = Set.Make (ScopeDef) type location = | ScopeVar of ScopeVar.t Marked.pos * StateName.t option | SubScopeVar of - Scopelang.Ast.ScopeName.t + ScopeName.t * Scopelang.Ast.SubScopeName.t Marked.pos * ScopeVar.t Marked.pos @@ -132,20 +133,20 @@ and expr = | ELocation of location | EVar of expr Bindlib.var | EStruct of - Scopelang.Ast.StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t + StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t | EStructAccess of - marked_expr * Scopelang.Ast.StructFieldName.t * Scopelang.Ast.StructName.t + marked_expr * StructFieldName.t * StructName.t | EEnumInj of - marked_expr * Scopelang.Ast.EnumConstructor.t * Scopelang.Ast.EnumName.t + marked_expr * EnumConstructor.t * EnumName.t | EMatch of marked_expr - * Scopelang.Ast.EnumName.t + * EnumName.t * marked_expr Scopelang.Ast.EnumConstructorMap.t | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list | EApp of marked_expr * marked_expr list - | EOp of Dcalc.Ast.operator + | EOp of operator | EDefault of marked_expr list * marked_expr * marked_expr | EIfThenElse of marked_expr * marked_expr * marked_expr | EArray of marked_expr list @@ -170,7 +171,7 @@ module Expr = struct | ELocation _, ELocation _ -> 0 | EVar v1, EVar v2 -> Bindlib.compare_vars v1 v2 | EStruct (name1, field_map1), EStruct (name2, field_map2) -> ( - match Scopelang.Ast.StructName.compare name1 name2 with + match StructName.compare name1 name2 with | 0 -> Scopelang.Ast.StructFieldMap.compare (Marked.compare compare) field_map1 field_map2 @@ -179,21 +180,21 @@ module Expr = struct EStructAccess ((e2, _), field_name2, struct_name2) ) -> ( match compare e1 e2 with | 0 -> ( - match Scopelang.Ast.StructFieldName.compare field_name1 field_name2 with - | 0 -> Scopelang.Ast.StructName.compare struct_name1 struct_name2 + match StructFieldName.compare field_name1 field_name2 with + | 0 -> StructName.compare struct_name1 struct_name2 | n -> n) | n -> n) | EEnumInj ((e1, _), cstr1, name1), EEnumInj ((e2, _), cstr2, name2) -> ( match compare e1 e2 with | 0 -> ( - match Scopelang.Ast.EnumName.compare name1 name2 with - | 0 -> Scopelang.Ast.EnumConstructor.compare cstr1 cstr2 + match EnumName.compare name1 name2 with + | 0 -> EnumConstructor.compare cstr1 cstr2 | n -> n) | n -> n) | EMatch ((e1, _), name1, emap1), EMatch ((e2, _), name2, emap2) -> ( match compare e1 e2 with | 0 -> ( - match Scopelang.Ast.EnumName.compare name1 name2 with + match EnumName.compare name1 name2 with | 0 -> Scopelang.Ast.EnumConstructorMap.compare (Marked.compare compare) emap1 emap2 @@ -325,8 +326,8 @@ let empty_rule (pos : Pos.t) (have_parameter : Scopelang.Ast.typ Marked.pos option) : rule = { - rule_just = Bindlib.box (ELit (Dcalc.Ast.LBool false), pos); - rule_cons = Bindlib.box (ELit Dcalc.Ast.LEmptyError, pos); + rule_just = Bindlib.box (ELit (LBool false), pos); + rule_cons = Bindlib.box (ELit LEmptyError, pos); rule_parameter = (match have_parameter with | Some typ -> Some (Var.make "dummy", typ) @@ -340,8 +341,8 @@ let always_false_rule (pos : Pos.t) (have_parameter : Scopelang.Ast.typ Marked.pos option) : rule = { - rule_just = Bindlib.box (ELit (Dcalc.Ast.LBool true), pos); - rule_cons = Bindlib.box (ELit (Dcalc.Ast.LBool false), pos); + rule_just = Bindlib.box (ELit (LBool true), pos); + rule_cons = Bindlib.box (ELit (LBool false), pos); rule_parameter = (match have_parameter with | Some typ -> Some (Var.make "dummy", typ) @@ -370,8 +371,8 @@ type var_or_states = WholeVar | States of StateName.t list type scope = { scope_vars : var_or_states ScopeVarMap.t; - scope_sub_scopes : Scopelang.Ast.ScopeName.t Scopelang.Ast.SubScopeMap.t; - scope_uid : Scopelang.Ast.ScopeName.t; + scope_sub_scopes : ScopeName.t Scopelang.Ast.SubScopeMap.t; + scope_uid : ScopeName.t; scope_defs : scope_def ScopeDefMap.t; scope_assertions : assertion list; scope_meta_assertions : meta_assertion list; diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index 80702135..365aff2d 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -17,6 +17,7 @@ (** Abstract syntax tree of the desugared representation *) open Utils +open Shared_ast (** {1 Names, Maps and Keys} *) @@ -54,7 +55,7 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t type location = | ScopeVar of ScopeVar.t Marked.pos * StateName.t option | SubScopeVar of - Scopelang.Ast.ScopeName.t + ScopeName.t * Scopelang.Ast.SubScopeName.t Marked.pos * ScopeVar.t Marked.pos @@ -68,20 +69,20 @@ and expr = | ELocation of location | EVar of expr Bindlib.var | EStruct of - Scopelang.Ast.StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t + StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t | EStructAccess of - marked_expr * Scopelang.Ast.StructFieldName.t * Scopelang.Ast.StructName.t + marked_expr * StructFieldName.t * StructName.t | EEnumInj of - marked_expr * Scopelang.Ast.EnumConstructor.t * Scopelang.Ast.EnumName.t + marked_expr * EnumConstructor.t * EnumName.t | EMatch of marked_expr - * Scopelang.Ast.EnumName.t + * EnumName.t * marked_expr Scopelang.Ast.EnumConstructorMap.t | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list | EApp of marked_expr * marked_expr list - | EOp of Dcalc.Ast.operator + | EOp of operator | EDefault of marked_expr list * marked_expr * marked_expr | EIfThenElse of marked_expr * marked_expr * marked_expr | EArray of marked_expr list @@ -166,8 +167,8 @@ type var_or_states = WholeVar | States of StateName.t list type scope = { scope_vars : var_or_states ScopeVarMap.t; - scope_sub_scopes : Scopelang.Ast.ScopeName.t Scopelang.Ast.SubScopeMap.t; - scope_uid : Scopelang.Ast.ScopeName.t; + scope_sub_scopes : ScopeName.t Scopelang.Ast.SubScopeMap.t; + scope_uid : ScopeName.t; scope_defs : scope_def ScopeDefMap.t; scope_assertions : assertion list; scope_meta_assertions : meta_assertion list; diff --git a/compiler/desugared/dependency.ml b/compiler/desugared/dependency.ml index 9aad2351..7a5f7268 100644 --- a/compiler/desugared/dependency.ml +++ b/compiler/desugared/dependency.ml @@ -18,6 +18,7 @@ OCamlgraph} *) open Utils +open Shared_ast (** {1 Scope variables dependency graph} *) @@ -140,7 +141,7 @@ let check_for_cycle (scope : Ast.scope) (g : ScopeDependencies.t) : unit = in Errors.raise_multispanned_error spans "Cyclic dependency detected between variables of scope %a!" - Scopelang.Ast.ScopeName.format_t scope.scope_uid + ScopeName.format_t scope.scope_uid (** Builds the dependency graph of a particular scope *) let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 531d5d91..df9edbea 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -17,6 +17,7 @@ (** Translation from {!module: Desugared.Ast} to {!module: Scopelang.Ast} *) open Utils +open Shared_ast (** {1 Expression translation}*) @@ -31,11 +32,11 @@ type ctx = { let tag_with_log_entry (e : Scopelang.Ast.expr Marked.pos) - (l : Dcalc.Ast.log_entry) + (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : Scopelang.Ast.expr Marked.pos = ( Scopelang.Ast.EApp - ( ( Scopelang.Ast.EOp (Dcalc.Ast.Unop (Dcalc.Ast.Log (l, markings))), + ( ( Scopelang.Ast.EOp (Unop (Log (l, markings))), Marked.get_mark e ), [e] ), Marked.get_mark e ) @@ -263,11 +264,11 @@ let rec rule_tree_to_expr Scopelang.Ast.make_default ~pos:def_pos [] (* Here we insert the logging command that records when a decision is taken for the value of a variable. *) - (tag_with_log_entry base_just Dcalc.Ast.PosRecordIfTrueBool []) + (tag_with_log_entry base_just PosRecordIfTrueBool []) base_cons) base_just_list base_cons_list) - (Scopelang.Ast.ELit (Dcalc.Ast.LBool false), def_pos) - (Scopelang.Ast.ELit Dcalc.Ast.LEmptyError, def_pos)) + (Scopelang.Ast.ELit (LBool false), def_pos) + (Scopelang.Ast.ELit LEmptyError, def_pos)) (Bindlib.box_list (translate_and_unbox_list base_just_list)) (Bindlib.box_list (translate_and_unbox_list base_cons_list)) in @@ -281,7 +282,7 @@ let rec rule_tree_to_expr Bindlib.box_apply2 (fun exceptions default_containing_base_cases -> Scopelang.Ast.make_default exceptions - (Scopelang.Ast.ELit (Dcalc.Ast.LBool true), def_pos) + (Scopelang.Ast.ELit (LBool true), def_pos) default_containing_base_cases) exceptions default_containing_base_cases in diff --git a/compiler/driver.ml b/compiler/driver.ml index bf4c1e10..d357a48f 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -200,10 +200,10 @@ let driver source_file (options : Cli.options) : int = (Dcalc.Print.format_scope ~debug:options.debug prgm.decl_ctx) ( scope_uid, Option.get - (Dcalc.Ast.fold_left_scope_defs ~init:None + (Shared_ast.Expr.fold_left_scope_defs ~init:None ~f:(fun acc scope_def _ -> if - Dcalc.Ast.ScopeName.compare scope_def.scope_name + Shared_ast.ScopeName.compare scope_def.scope_name scope_uid = 0 then Some scope_def.scope_body @@ -212,7 +212,7 @@ let driver source_file (options : Cli.options) : int = else let prgrm_dcalc_expr = Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr ~box_expr:Dcalc.Ast.box_expr + (Dcalc.Ast.build_whole_program_expr ~box_expr:Shared_ast.Expr.box ~make_abs:Dcalc.Ast.make_abs ~make_let_in:Dcalc.Ast.make_let_in prgm scope_uid) in @@ -242,7 +242,7 @@ let driver source_file (options : Cli.options) : int = Cli.debug_print "Starting interpretation..."; let prgrm_dcalc_expr = Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr ~box_expr:Dcalc.Ast.box_expr + (Dcalc.Ast.build_whole_program_expr ~box_expr:Shared_ast.Expr.box ~make_abs:Dcalc.Ast.make_abs ~make_let_in:Dcalc.Ast.make_let_in prgm scope_uid) in @@ -285,7 +285,7 @@ let driver source_file (options : Cli.options) : int = Cli.debug_print "Optimizing lambda calculus..."; Lcalc.Optimizations.optimize_program prgm end - else Lcalc.Ast.untype_program prgm + else Shared_ast.Expr.untype_program prgm in let prgm = if options.closure_conversion then ( @@ -305,10 +305,10 @@ let driver source_file (options : Cli.options) : int = (Lcalc.Print.format_scope ~debug:options.debug prgm.decl_ctx) ( scope_uid, Option.get - (Dcalc.Ast.fold_left_scope_defs ~init:None + (Shared_ast.Expr.fold_left_scope_defs ~init:None ~f:(fun acc scope_def _ -> if - Dcalc.Ast.ScopeName.compare scope_def.scope_name + Shared_ast.ScopeName.compare scope_def.scope_name scope_uid = 0 then Some scope_def.scope_body @@ -318,7 +318,7 @@ let driver source_file (options : Cli.options) : int = let prgrm_lcalc_expr = Bindlib.unbox (Dcalc.Ast.build_whole_program_expr - ~box_expr:Lcalc.Ast.box_expr ~make_abs:Lcalc.Ast.make_abs + ~box_expr:Shared_ast.Expr.box ~make_abs:Lcalc.Ast.make_abs ~make_let_in:Lcalc.Ast.make_let_in prgm scope_uid) in Format.fprintf fmt "%a\n" diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 04a09255..df1b80a8 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -23,80 +23,10 @@ type lit = lcalc glit type 'm expr = (lcalc, 'm mark) gexpr and 'm marked_expr = (lcalc, 'm mark) marked_gexpr -type 'm program = ('m expr, 'm) Dcalc.Ast.program_generic +type 'm program = ('m expr, 'm) program_generic type 'm var = 'm expr Var.t type 'm vars = 'm expr Var.vars -(* *) - -let evar v mark = Bindlib.box_apply (Marked.mark mark) (Bindlib.box_var v) - -let etuple args s mark = - Bindlib.box_apply (fun args -> ETuple (args, s), mark) (Bindlib.box_list args) - -let etupleaccess e1 i s typs mark = - Bindlib.box_apply (fun e1 -> ETupleAccess (e1, i, s, typs), mark) e1 - -let einj e1 i e_name typs mark = - Bindlib.box_apply (fun e1 -> EInj (e1, i, e_name, typs), mark) e1 - -let ematch arg arms e_name mark = - Bindlib.box_apply2 - (fun arg arms -> EMatch (arg, arms, e_name), mark) - arg (Bindlib.box_list arms) - -let earray args mark = - Bindlib.box_apply (fun args -> EArray args, mark) (Bindlib.box_list args) - -let elit l mark = Bindlib.box (ELit l, mark) - -let eabs binder typs mark = - Bindlib.box_apply (fun binder -> EAbs (binder, typs), mark) binder - -let eapp e1 args mark = - Bindlib.box_apply2 - (fun e1 args -> EApp (e1, args), mark) - e1 (Bindlib.box_list args) - -let eassert e1 mark = Bindlib.box_apply (fun e1 -> EAssert e1, mark) e1 -let eop op mark = Bindlib.box (EOp op, mark) - -let eifthenelse e1 e2 e3 pos = - Bindlib.box_apply3 (fun e1 e2 e3 -> EIfThenElse (e1, e2, e3), pos) e1 e2 e3 - -(* *) - -let eraise e1 pos = Bindlib.box (ERaise e1, pos) - -let ecatch e1 exn e2 pos = - Bindlib.box_apply2 (fun e1 e2 -> ECatch (e1, exn, e2), pos) e1 e2 - -let map_expr ctx ~f e = Expr.map ctx ~f e - -let rec map_expr_top_down ~f e = - map_expr () ~f:(fun () -> map_expr_top_down ~f) (f e) - -let map_expr_marks ~f e = - map_expr_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e - -let untype_expr e = - map_expr_marks ~f:(fun m -> Untyped { pos = D.mark_pos m }) e - -let untype_program prg = - { - prg with - D.scopes = - Bindlib.unbox - (D.map_exprs_in_scopes - ~f:(fun e -> untype_expr e) - ~varf:Var.translate prg.D.scopes); - } - -(** See [Bindlib.box_term] documentation for why we are doing that. *) -let box_expr (e : 'm marked_expr) : 'm marked_expr Bindlib.box = - let rec id_t () e = map_expr () ~f:id_t e in - id_t () e - let make_var (x, mark) = Bindlib.box_apply (fun x -> x, mark) (Bindlib.box_var x) @@ -110,7 +40,7 @@ let make_let_in x tau e1 e2 pos = let m_e1 = Marked.get_mark (Bindlib.unbox e1) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in let m_abs = - D.map_mark2 + Expr.map_mark2 (fun _ _ -> pos) (fun m1 m2 -> TArrow (m1.ty, m2.ty), m1.pos) m_e1 m_e2 @@ -120,47 +50,47 @@ let make_let_in x tau e1 e2 pos = let make_multiple_let_in xs taus e1s e2 pos = (* let m_e1s = List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s in *) let m_e1s = - D.fold_marks List.hd + Expr.fold_marks List.hd (fun tys -> - D.TTuple (List.map (fun t -> t.D.ty) tys, None), (List.hd tys).D.pos) + TTuple (List.map (fun t -> t.ty) tys, None), (List.hd tys).pos) (List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in let m_abs = - D.map_mark2 + Expr.map_mark2 (fun _ _ -> pos) - (fun m1 m2 -> Marked.mark pos (D.TArrow (m1.ty, m2.ty))) + (fun m1 m2 -> Marked.mark pos (TArrow (m1.ty, m2.ty))) m_e1s m_e2 in make_app (make_abs xs e2 taus m_abs) e1s m_e2 let ( let+ ) x f = Bindlib.box_apply f x let ( and+ ) x y = Bindlib.box_pair x y -let option_enum : D.EnumName.t = D.EnumName.fresh ("eoption", Pos.no_pos) +let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) -let none_constr : D.EnumConstructor.t = - D.EnumConstructor.fresh ("ENone", Pos.no_pos) +let none_constr : EnumConstructor.t = + EnumConstructor.fresh ("ENone", Pos.no_pos) -let some_constr : D.EnumConstructor.t = - D.EnumConstructor.fresh ("ESome", Pos.no_pos) +let some_constr : EnumConstructor.t = + EnumConstructor.fresh ("ESome", Pos.no_pos) -let option_enum_config : (D.EnumConstructor.t * D.typ Marked.pos) list = - [none_constr, (D.TLit D.TUnit, Pos.no_pos); some_constr, (D.TAny, Pos.no_pos)] +let option_enum_config : (EnumConstructor.t * typ Marked.pos) list = + [none_constr, (TLit TUnit, Pos.no_pos); some_constr, (TAny, Pos.no_pos)] (* FIXME: proper typing in all the constructors below *) let make_none m = let mark = Marked.mark m in - let tunit = D.TLit D.TUnit, D.mark_pos m in + let tunit = TLit TUnit, Expr.mark_pos m in Bindlib.box @@ mark @@ EInj ( Marked.mark - (D.map_mark (fun pos -> pos) (fun _ -> tunit) m) + (Expr.map_mark (fun pos -> pos) (fun _ -> tunit) m) (ELit LUnit), 0, option_enum, - [D.TLit D.TUnit, Pos.no_pos; D.TAny, Pos.no_pos] ) + [TLit TUnit, Pos.no_pos; TAny, Pos.no_pos] ) let make_some e = let m = Marked.get_mark @@ Bindlib.unbox e in @@ -168,7 +98,7 @@ let make_some e = let+ e in mark @@ EInj - (e, 1, option_enum, [D.TLit D.TUnit, D.mark_pos m; D.TAny, D.mark_pos m]) + (e, 1, option_enum, [TLit TUnit, Expr.mark_pos m; TAny, Expr.mark_pos m]) (** [make_matchopt_with_abs_arms arg e_none e_some] build an expression [match arg with |None -> e_none | Some -> e_some] and requires e_some and @@ -187,7 +117,7 @@ let make_matchopt m v tau arg e_none e_some = let x = Var.make "_" in make_matchopt_with_abs_arms arg - (make_abs (Array.of_list [x]) e_none [D.TLit D.TUnit, D.mark_pos m] m) + (make_abs (Array.of_list [x]) e_none [TLit TUnit, Expr.mark_pos m] m) (make_abs (Array.of_list [v]) e_some [tau] m) let handle_default = Var.make "handle_default" diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 51739da6..40ef7373 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -15,7 +15,7 @@ the License. *) open Utils -include module type of Shared_ast +open Shared_ast (** Abstract syntax tree for the lambda calculus *) @@ -26,114 +26,21 @@ type lit = lcalc glit type 'm expr = (lcalc, 'm mark) gexpr and 'm marked_expr = (lcalc, 'm mark) marked_gexpr -type 'm program = ('m expr, 'm) Dcalc.Ast.program_generic +type 'm program = ('m expr, 'm) program_generic (** {1 Variable helpers} *) type 'm var = 'm expr Var.t type 'm vars = 'm expr Var.vars -(** {2 Program traversal} *) - -val map_expr : - 'a -> - f:('a -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box) -> - ('m1 expr, 'm2 mark) Marked.t -> - 'm2 marked_expr Bindlib.box -(** See [Dcalc.Ast.map_expr] *) - -val map_expr_top_down : - f:('m1 marked_expr -> ('m1 expr, 'm2 mark) Marked.t) -> - 'm1 marked_expr -> - 'm2 marked_expr Bindlib.box -(** See [Dcalc.Ast.map_expr_top_down] *) - -val map_expr_marks : - f:('m1 mark -> 'm2 mark) -> 'm1 marked_expr -> 'm2 marked_expr Bindlib.box -(** See [Dcalc.Ast.map_expr_marks] *) - -val untype_expr : 'm marked_expr -> Dcalc.Ast.untyped marked_expr Bindlib.box -val untype_program : 'm program -> Dcalc.Ast.untyped program - -(** {1 Boxed constructors} *) - -val evar : 'm expr Bindlib.var -> 'm mark -> 'm marked_expr Bindlib.box - -val etuple : - 'm marked_expr Bindlib.box list -> - Dcalc.Ast.StructName.t option -> - 'm mark -> - 'm marked_expr Bindlib.box - -val etupleaccess : - 'm marked_expr Bindlib.box -> - int -> - Dcalc.Ast.StructName.t option -> - Dcalc.Ast.typ Marked.pos list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val einj : - 'm marked_expr Bindlib.box -> - int -> - Dcalc.Ast.EnumName.t -> - Dcalc.Ast.typ Marked.pos list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val ematch : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - Dcalc.Ast.EnumName.t -> - 'm mark -> - 'm marked_expr Bindlib.box - -val earray : - 'm marked_expr Bindlib.box list -> 'm mark -> 'm marked_expr Bindlib.box - -val elit : lit -> 'm mark -> 'm marked_expr Bindlib.box - -val eabs : - ('m expr, 'm marked_expr) Bindlib.mbinder Bindlib.box -> - Dcalc.Ast.typ Marked.pos list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eapp : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eassert : - 'm marked_expr Bindlib.box -> 'm mark -> 'm marked_expr Bindlib.box - -val eop : Dcalc.Ast.operator -> 'm mark -> 'm marked_expr Bindlib.box - -val eifthenelse : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm mark -> - 'm marked_expr Bindlib.box - -val ecatch : - 'm marked_expr Bindlib.box -> - except -> - 'm marked_expr Bindlib.box -> - 'm mark -> - 'm marked_expr Bindlib.box - -val eraise : except -> 'm mark -> 'm marked_expr Bindlib.box - (** {1 Language terms construction}*) -val make_var : ('m var, 'm) Dcalc.Ast.marked -> 'm marked_expr Bindlib.box +val make_var : ('m var, 'm) marked -> 'm marked_expr Bindlib.box val make_abs : 'm vars -> 'm marked_expr Bindlib.box -> - Dcalc.Ast.typ Marked.pos list -> + typ Marked.pos list -> 'm mark -> 'm marked_expr Bindlib.box @@ -145,7 +52,7 @@ val make_app : val make_let_in : 'm var -> - Dcalc.Ast.typ Marked.pos -> + typ Marked.pos -> 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box -> Pos.t -> @@ -153,18 +60,18 @@ val make_let_in : val make_multiple_let_in : 'm vars -> - Dcalc.Ast.typ Marked.pos list -> + typ Marked.pos list -> 'm marked_expr Bindlib.box list -> 'm marked_expr Bindlib.box -> Pos.t -> 'm marked_expr Bindlib.box -val option_enum : Dcalc.Ast.EnumName.t -val none_constr : Dcalc.Ast.EnumConstructor.t -val some_constr : Dcalc.Ast.EnumConstructor.t +val option_enum : EnumName.t +val none_constr : EnumConstructor.t +val some_constr : EnumConstructor.t val option_enum_config : - (Dcalc.Ast.EnumConstructor.t * Dcalc.Ast.typ Marked.pos) list + (EnumConstructor.t * typ Marked.pos) list val make_none : 'm mark -> 'm marked_expr Bindlib.box val make_some : 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box @@ -178,7 +85,7 @@ val make_matchopt_with_abs_arms : val make_matchopt : 'm mark -> 'm var -> - Dcalc.Ast.typ Marked.pos -> + typ Marked.pos -> 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box -> @@ -186,8 +93,6 @@ val make_matchopt : (** [e' = make_matchopt'' pos v e e_none e_some] Builds the term corresponding to [match e with | None -> fun () -> e_none |Some -> fun v -> e_some]. *) -val box_expr : 'm marked_expr -> 'm marked_expr Bindlib.box - (** {1 Special symbols} *) val handle_default : untyped var diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index b878a05f..62a74bc7 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -14,8 +14,9 @@ License for the specific language governing permissions and limitations under the License. *) -open Ast open Utils +open Shared_ast +open Ast module D = Dcalc.Ast (** TODO: This version is not yet debugged and ought to be specialized when @@ -127,7 +128,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : | EAbs (binder, typs) -> (* λ x.t *) let binder_mark = Marked.get_mark e in - let binder_pos = D.mark_pos binder_mark in + let binder_pos = Expr.mark_pos binder_mark in (* Converting the closure. *) let vars, body = Bindlib.unmbind binder in (* t *) @@ -141,7 +142,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : let code_var = Var.make ctx.name_context in (* code *) let inner_c_var = Var.make "env" in - let any_ty = Dcalc.Ast.TAny, binder_pos in + let any_ty = TAny, binder_pos in let new_closure_body = make_multiple_let_in (Array.of_list extra_vars_list) @@ -158,17 +159,17 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : binder_mark )) (Bindlib.box_var inner_c_var)) extra_vars_list) - new_body (D.mark_pos binder_mark) + new_body (Expr.mark_pos binder_mark) in let new_closure = make_abs (Array.concat [Array.make 1 inner_c_var; vars]) new_closure_body - ((Dcalc.Ast.TAny, binder_pos) :: typs) + ((TAny, binder_pos) :: typs) (Marked.get_mark e) in ( make_let_in code_var - (Dcalc.Ast.TAny, D.pos e) + (TAny, Expr.pos e) new_closure (Bindlib.box_apply2 (fun code_var extra_vars -> @@ -184,7 +185,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : (List.map (fun extra_var -> Bindlib.box_var extra_var) extra_vars_list))) - (D.pos e), + (Expr.pos e), extra_vars ) | EApp ((EOp op, pos_op), args) -> (* This corresponds to an operator call, which we don't want to @@ -227,7 +228,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : in let call_expr = make_let_in code_var - (Dcalc.Ast.TAny, D.pos e) + (TAny, Expr.pos e) (Bindlib.box_apply (fun env_var -> ( ETupleAccess @@ -242,9 +243,9 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : Marked.get_mark e )) (Bindlib.box_var code_var) (Bindlib.box_var env_var) (Bindlib.box_list new_args)) - (D.pos e) + (Expr.pos e) in - ( make_let_in env_var (Dcalc.Ast.TAny, D.pos e) new_e1 call_expr (D.pos e), + ( make_let_in env_var (TAny, Expr.pos e) new_e1 call_expr (Expr.pos e), free_vars ) | EAssert e1 -> let new_e1, free_vars = aux e1 in @@ -278,7 +279,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : let closure_conversion (p : 'm program) : 'm program Bindlib.box = let new_scopes, _ = - D.fold_left_scope_defs + Expr.fold_left_scope_defs ~f:(fun (acc_new_scopes, global_vars) scope scope_var -> (* [acc_new_scopes] represents what has been translated in the past, it needs a continuation to attach the rest of the translated scopes. *) @@ -289,12 +290,12 @@ let closure_conversion (p : 'm program) : 'm program Bindlib.box = let ctx = { name_context = - Marked.unmark (Dcalc.Ast.ScopeName.get_info scope.scope_name); + Marked.unmark (ScopeName.get_info scope.scope_name); globally_bound_vars = global_vars; } in let new_scope_lets = - D.map_exprs_in_scope_lets + Expr.map_exprs_in_scope_lets ~f:(closure_conversion_expr ctx) ~varf:(fun v -> v) scope_body_expr @@ -306,7 +307,7 @@ let closure_conversion (p : 'm program) : 'm program Bindlib.box = acc_new_scopes (Bindlib.box_apply2 (fun new_scope_body_expr next -> - D.ScopeDef + ScopeDef { scope with scope_body = @@ -327,4 +328,4 @@ let closure_conversion (p : 'm program) : 'm program Bindlib.box = in Bindlib.box_apply (fun new_scopes -> { p with scopes = new_scopes }) - (new_scopes (Bindlib.box D.Nil)) + (new_scopes (Bindlib.box Nil)) diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 4850891d..2d231195 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -25,26 +25,26 @@ type 'm ctx = ('m D.expr, 'm A.expr Var.t) Var.Map.t let translate_lit (l : D.lit) : 'm A.expr = match l with - | D.LBool l -> A.ELit (A.LBool l) - | D.LInt i -> A.ELit (A.LInt i) - | D.LRat r -> A.ELit (A.LRat r) - | D.LMoney m -> A.ELit (A.LMoney m) - | D.LUnit -> A.ELit A.LUnit - | D.LDate d -> A.ELit (A.LDate d) - | D.LDuration d -> A.ELit (A.LDuration d) - | D.LEmptyError -> A.ERaise A.EmptyError + | LBool l -> ELit (LBool l) + | LInt i -> ELit (LInt i) + | LRat r -> ELit (LRat r) + | LMoney m -> ELit (LMoney m) + | LUnit -> ELit LUnit + | LDate d -> ELit (LDate d) + | LDuration d -> ELit (LDuration d) + | LEmptyError -> ERaise EmptyError -let thunk_expr (e : 'm A.marked_expr Bindlib.box) (mark : 'm A.mark) : +let thunk_expr (e : 'm A.marked_expr Bindlib.box) (mark : 'm mark) : 'm A.marked_expr Bindlib.box = let dummy_var = Var.make "_" in - A.make_abs [| dummy_var |] e [D.TAny, D.mark_pos mark] mark + A.make_abs [| dummy_var |] e [TAny, Expr.mark_pos mark] mark let rec translate_default (ctx : 'm ctx) (exceptions : 'm D.marked_expr list) (just : 'm D.marked_expr) (cons : 'm D.marked_expr) - (mark_default : 'm D.mark) : 'm A.marked_expr Bindlib.box = + (mark_default : 'm mark) : 'm A.marked_expr Bindlib.box = let exceptions = List.map (fun except -> thunk_expr (translate_expr ctx except) mark_default) @@ -54,7 +54,7 @@ let rec translate_default A.make_app (A.make_var (Var.translate A.handle_default, mark_default)) [ - A.earray exceptions mark_default; + Expr.earray exceptions mark_default; thunk_expr (translate_expr ctx just) mark_default; thunk_expr (translate_expr ctx cons) mark_default; ] @@ -65,34 +65,34 @@ let rec translate_default and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : 'm A.marked_expr Bindlib.box = match Marked.unmark e with - | D.EVar v -> A.make_var (Var.Map.find v ctx, Marked.get_mark e) - | D.ETuple (args, s) -> - A.etuple (List.map (translate_expr ctx) args) s (Marked.get_mark e) - | D.ETupleAccess (e1, i, s, ts) -> - A.etupleaccess (translate_expr ctx e1) i s ts (Marked.get_mark e) - | D.EInj (e1, i, en, ts) -> - A.einj (translate_expr ctx e1) i en ts (Marked.get_mark e) - | D.EMatch (e1, cases, en) -> - A.ematch (translate_expr ctx e1) + | EVar v -> A.make_var (Var.Map.find v ctx, Marked.get_mark e) + | ETuple (args, s) -> + Expr.etuple (List.map (translate_expr ctx) args) s (Marked.get_mark e) + | ETupleAccess (e1, i, s, ts) -> + Expr.etupleaccess (translate_expr ctx e1) i s ts (Marked.get_mark e) + | EInj (e1, i, en, ts) -> + Expr.einj (translate_expr ctx e1) i en ts (Marked.get_mark e) + | EMatch (e1, cases, en) -> + Expr.ematch (translate_expr ctx e1) (List.map (translate_expr ctx) cases) en (Marked.get_mark e) - | D.EArray es -> - A.earray (List.map (translate_expr ctx) es) (Marked.get_mark e) - | D.ELit l -> Bindlib.box (Marked.same_mark_as (translate_lit l) e) - | D.EOp op -> A.eop op (Marked.get_mark e) - | D.EIfThenElse (e1, e2, e3) -> - A.eifthenelse (translate_expr ctx e1) (translate_expr ctx e2) + | EArray es -> + Expr.earray (List.map (translate_expr ctx) es) (Marked.get_mark e) + | ELit l -> Bindlib.box (Marked.same_mark_as (translate_lit l) e) + | EOp op -> Expr.eop op (Marked.get_mark e) + | EIfThenElse (e1, e2, e3) -> + Expr.eifthenelse (translate_expr ctx e1) (translate_expr ctx e2) (translate_expr ctx e3) (Marked.get_mark e) - | D.EAssert e1 -> A.eassert (translate_expr ctx e1) (Marked.get_mark e) - | D.ErrorOnEmpty arg -> - A.ecatch (translate_expr ctx arg) A.EmptyError - (Bindlib.box (Marked.same_mark_as (A.ERaise A.NoValueProvided) e)) + | EAssert e1 -> Expr.eassert (translate_expr ctx e1) (Marked.get_mark e) + | ErrorOnEmpty arg -> + Expr.ecatch (translate_expr ctx arg) EmptyError + (Bindlib.box (Marked.same_mark_as (ERaise NoValueProvided) e)) (Marked.get_mark e) - | D.EApp (e1, args) -> - A.eapp (translate_expr ctx e1) + | EApp (e1, args) -> + Expr.eapp (translate_expr ctx e1) (List.map (translate_expr ctx) args) (Marked.get_mark e) - | D.EAbs (binder, ts) -> + | EAbs (binder, ts) -> let vars, body = Bindlib.unmbind binder in let ctx, lc_vars = Array.fold_right @@ -105,24 +105,24 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : let new_body = translate_expr ctx body in let new_binder = Bindlib.bind_mvar lc_vars new_body in Bindlib.box_apply - (fun new_binder -> Marked.same_mark_as (A.EAbs (new_binder, ts)) e) + (fun new_binder -> Marked.same_mark_as (EAbs (new_binder, ts)) e) new_binder - | D.EDefault ([exn], just, cons) when !Cli.optimize_flag -> - A.ecatch (translate_expr ctx exn) A.EmptyError - (A.eifthenelse (translate_expr ctx just) (translate_expr ctx cons) - (Bindlib.box (Marked.same_mark_as (A.ERaise A.EmptyError) e)) + | EDefault ([exn], just, cons) when !Cli.optimize_flag -> + Expr.ecatch (translate_expr ctx exn) EmptyError + (Expr.eifthenelse (translate_expr ctx just) (translate_expr ctx cons) + (Bindlib.box (Marked.same_mark_as (ERaise EmptyError) e)) (Marked.get_mark e)) (Marked.get_mark e) - | D.EDefault (exceptions, just, cons) -> + | EDefault (exceptions, just, cons) -> translate_default ctx exceptions just cons (Marked.get_mark e) let rec translate_scope_lets - (decl_ctx : D.decl_ctx) + (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scope_lets : ('m D.expr, 'm) D.scope_body_expr) : - ('m A.expr, 'm) D.scope_body_expr Bindlib.box = + (scope_lets : ('m D.expr, 'm) scope_body_expr) : + ('m A.expr, 'm) scope_body_expr Bindlib.box = match scope_lets with - | Result e -> Bindlib.box_apply (fun e -> D.Result e) (translate_expr ctx e) + | Result e -> Bindlib.box_apply (fun e -> Result e) (translate_expr ctx e) | ScopeLet scope_let -> let old_scope_let_var, scope_let_next = Bindlib.unbind scope_let.scope_let_next @@ -134,26 +134,26 @@ let rec translate_scope_lets let new_scope_next = Bindlib.bind_var new_scope_let_var new_scope_next in Bindlib.box_apply2 (fun new_scope_next new_scope_let_expr -> - D.ScopeLet + ScopeLet { - scope_let_typ = scope_let.D.scope_let_typ; - scope_let_kind = scope_let.D.scope_let_kind; - scope_let_pos = scope_let.D.scope_let_pos; + scope_let_typ = scope_let.scope_let_typ; + scope_let_kind = scope_let.scope_let_kind; + scope_let_pos = scope_let.scope_let_pos; scope_let_next = new_scope_next; scope_let_expr = new_scope_let_expr; }) new_scope_next new_scope_let_expr let rec translate_scopes - (decl_ctx : D.decl_ctx) + (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scopes : ('m D.expr, 'm) D.scopes) : ('m A.expr, 'm) D.scopes Bindlib.box = + (scopes : ('m D.expr, 'm) scopes) : ('m A.expr, 'm) scopes Bindlib.box = match scopes with - | Nil -> Bindlib.box D.Nil + | Nil -> Bindlib.box Nil | ScopeDef scope_def -> let old_scope_var, scope_next = Bindlib.unbind scope_def.scope_next in let new_scope_var = - Var.make (Marked.unmark (D.ScopeName.get_info scope_def.scope_name)) + Var.make (Marked.unmark (ScopeName.get_info scope_def.scope_name)) in let old_scope_input_var, scope_body_expr = Bindlib.unbind scope_def.scope_body.scope_body_expr @@ -166,11 +166,11 @@ let rec translate_scopes let new_scope_body_expr = Bindlib.bind_var new_scope_input_var new_scope_body_expr in - let new_scope : ('m A.expr, 'm) D.scope_body Bindlib.box = + let new_scope : ('m A.expr, 'm) scope_body Bindlib.box = Bindlib.box_apply (fun new_scope_body_expr -> { - D.scope_body_input_struct = + scope_body_input_struct = scope_def.scope_body.scope_body_input_struct; scope_body_output_struct = scope_def.scope_body.scope_body_output_struct; @@ -185,7 +185,7 @@ let rec translate_scopes in Bindlib.box_apply2 (fun new_scope scope_next -> - D.ScopeDef + ScopeDef { scope_name = scope_def.scope_name; scope_body = new_scope; diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 63ade836..991d7e34 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -61,7 +61,7 @@ let pp_info (fmt : Format.formatter) (info : 'm info) = info.is_pure type 'm ctx = { - decl_ctx : D.decl_ctx; + decl_ctx : decl_ctx; vars : ('m D.expr, 'm info) Var.Map.t; (** information context about variables in the current scope *) } @@ -95,7 +95,7 @@ let find ?(info : string = "none") (n : 'm D.var) (ctx : 'm ctx) : 'm info = var, creating a unique corresponding variable in Lcalc, with the corresponding expression, and the boolean is_pure. It is usefull for debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) -let add_var (mark : 'm D.mark) (var : 'm D.var) (is_pure : bool) (ctx : 'm ctx) +let add_var (mark : 'm mark) (var : 'm D.var) (is_pure : bool) (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in let expr = A.make_var (new_var, mark) in @@ -115,33 +115,33 @@ let add_var (mark : 'm D.mark) (var : 'm D.var) (is_pure : bool) (ctx : 'm ctx) Since positions where there is thunked expressions is exactly where we will put option expressions. Hence, the transformation simply reduce [unit -> 'a] into ['a option] recursivly. There is no polymorphism inside catala. *) -let rec translate_typ (tau : D.typ Marked.pos) : D.typ Marked.pos = +let rec translate_typ (tau : typ Marked.pos) : typ Marked.pos = (Fun.flip Marked.same_mark_as) tau begin match Marked.unmark tau with - | D.TLit l -> D.TLit l - | D.TTuple (ts, s) -> D.TTuple (List.map translate_typ ts, s) - | D.TEnum (ts, en) -> D.TEnum (List.map translate_typ ts, en) - | D.TAny -> D.TAny - | D.TArray ts -> D.TArray (translate_typ ts) + | TLit l -> TLit l + | TTuple (ts, s) -> TTuple (List.map translate_typ ts, s) + | TEnum (ts, en) -> TEnum (List.map translate_typ ts, en) + | TAny -> TAny + | TArray ts -> TArray (translate_typ ts) (* catala is not polymorphic *) - | D.TArrow ((D.TLit D.TUnit, pos_unit), t2) -> - D.TEnum ([D.TLit D.TUnit, pos_unit; translate_typ t2], A.option_enum) - (* D.TAny *) - | D.TArrow (t1, t2) -> D.TArrow (translate_typ t1, translate_typ t2) + | TArrow ((TLit TUnit, pos_unit), t2) -> + TEnum ([TLit TUnit, pos_unit; translate_typ t2], A.option_enum) + (* TAny *) + | TArrow (t1, t2) -> TArrow (translate_typ t1, translate_typ t2) end let translate_lit (l : D.lit) (pos : Pos.t) : A.lit = match l with - | D.LBool l -> A.LBool l - | D.LInt i -> A.LInt i - | D.LRat r -> A.LRat r - | D.LMoney m -> A.LMoney m - | D.LUnit -> A.LUnit - | D.LDate d -> A.LDate d - | D.LDuration d -> A.LDuration d - | D.LEmptyError -> + | LBool l -> LBool l + | LInt i -> LInt i + | LRat r -> LRat r + | LMoney m -> LMoney m + | LUnit -> LUnit + | LDate d -> LDate d + | LDuration d -> LDuration d + | LEmptyError -> Errors.raise_spanned_error pos "Internal Error: An empty error was found in a place that shouldn't be \ possible." @@ -171,7 +171,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : (* empty-producing/using terms. We hoist those. (D.EVar in some cases, EApp(D.EVar _, [ELit LUnit]), EDefault _, ELit LEmptyDefault) I'm unsure about assert. *) - | D.EVar v -> + | EVar v -> (* todo: for now, every unpure (such that [is_pure] is [false] in the current context) is thunked, hence matched in the next case. This assumption can change in the future, and this case is here for this @@ -183,20 +183,20 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : Print.format_var v'; *) A.make_var (v', pos), Var.Map.singleton v' e else (find ~info:"should never happend" v ctx).expr, Var.Map.empty - | D.EApp ((D.EVar v, p), [(D.ELit D.LUnit, _)]) -> + | EApp ((EVar v, p), [(ELit LUnit, _)]) -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, created a variable %a to replace it" Dcalc.Print.format_var v Print.format_var v'; *) - A.make_var (v', pos), Var.Map.singleton v' (D.EVar v, p) + A.make_var (v', pos), Var.Map.singleton v' (EVar v, p) else - Errors.raise_spanned_error (D.pos e) + Errors.raise_spanned_error (Expr.pos e) "Internal error: an pure variable was found in an unpure environment." - | D.EDefault (_exceptions, _just, _cons) -> + | EDefault (_exceptions, _just, _cons) -> let v' = Var.make "default_term" in A.make_var (v', pos), Var.Map.singleton v' e - | D.ELit D.LEmptyError -> + | ELit LEmptyError -> let v' = Var.make "empty_litteral" in A.make_var (v', pos), Var.Map.singleton v' e (* This one is a very special case. It transform an unpure expression @@ -210,29 +210,29 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : ( A.make_matchopt_with_abs_arms arg' (A.make_abs [| silent_var |] - (Bindlib.box (A.ERaise A.NoValueProvided, pos)) - [D.TAny, D.pos e] + (Bindlib.box (ERaise NoValueProvided, pos)) + [TAny, Expr.pos e] pos) - (A.make_abs [| x |] (A.make_var (x, pos)) [D.TAny, D.pos e] pos), + (A.make_abs [| x |] (A.make_var (x, pos)) [TAny, Expr.pos e] pos), Var.Map.empty ) (* pure terms *) - | D.ELit l -> A.elit (translate_lit l (D.pos e)) pos, Var.Map.empty - | D.EIfThenElse (e1, e2, e3) -> + | ELit l -> Expr.elit (translate_lit l (Expr.pos e)) pos, Var.Map.empty + | EIfThenElse (e1, e2, e3) -> let e1', h1 = translate_and_hoist ctx e1 in let e2', h2 = translate_and_hoist ctx e2 in let e3', h3 = translate_and_hoist ctx e3 in - let e' = A.eifthenelse e1' e2' e3' pos in + let e' = Expr.eifthenelse e1' e2' e3' pos in (*(* equivalent code : *) let e' = let+ e1' = e1' and+ e2' = e2' and+ e3' = e3' in (A.EIfThenElse (e1', e2', e3'), pos) in *) - e', disjoint_union_maps (D.pos e) [h1; h2; h3] - | D.EAssert e1 -> + e', disjoint_union_maps (Expr.pos e) [h1; h2; h3] + | EAssert e1 -> (* same behavior as in the ICFP paper: if e1 is empty, then no error is raised. *) let e1', h1 = translate_and_hoist ctx e1 in - A.eassert e1' pos, h1 - | D.EAbs (binder, ts) -> + Expr.eassert e1' pos, h1 + | EAbs (binder, ts) -> let vars, body = Bindlib.unmbind binder in let ctx, lc_vars = ArrayLabels.fold_right vars ~init:(ctx, []) ~f:(fun var (ctx, lc_vars) -> @@ -254,7 +254,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : let new_binder = Bindlib.bind_mvar lc_vars new_body in ( Bindlib.box_apply - (fun new_binder -> A.EAbs (new_binder, List.map translate_typ ts), pos) + (fun new_binder -> EAbs (new_binder, List.map translate_typ ts), pos) new_binder, hoists ) | EApp (e1, args) -> @@ -263,23 +263,23 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : args |> List.map (translate_and_hoist ctx) |> List.split in - let hoists = disjoint_union_maps (D.pos e) (h1 :: h_args) in - let e' = A.eapp e1' args' pos in + let hoists = disjoint_union_maps (Expr.pos e) (h1 :: h_args) in + let e' = Expr.eapp e1' args' pos in e', hoists | ETuple (args, s) -> let args', h_args = args |> List.map (translate_and_hoist ctx) |> List.split in - let hoists = disjoint_union_maps (D.pos e) h_args in - A.etuple args' s pos, hoists + let hoists = disjoint_union_maps (Expr.pos e) h_args in + Expr.etuple args' s pos, hoists | ETupleAccess (e1, i, s, ts) -> let e1', hoists = translate_and_hoist ctx e1 in - let e1' = A.etupleaccess e1' i s ts pos in + let e1' = Expr.etupleaccess e1' i s ts pos in e1', hoists | EInj (e1, i, en, ts) -> let e1', hoists = translate_and_hoist ctx e1 in - let e1' = A.einj e1' i en ts pos in + let e1' = Expr.einj e1' i en ts pos in e1', hoists | EMatch (e1, cases, en) -> let e1', h1 = translate_and_hoist ctx e1 in @@ -287,14 +287,14 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : cases |> List.map (translate_and_hoist ctx) |> List.split in - let hoists = disjoint_union_maps (D.pos e) (h1 :: h_cases) in - let e' = A.ematch e1' cases' en pos in + let hoists = disjoint_union_maps (Expr.pos e) (h1 :: h_cases) in + let e' = Expr.ematch e1' cases' en pos in e', hoists | EArray es -> let es', hoists = es |> List.map (translate_and_hoist ctx) |> List.split in - A.earray es' pos, disjoint_union_maps (D.pos e) hoists - | EOp op -> Bindlib.box (A.EOp op, pos), Var.Map.empty + Expr.earray es' pos, disjoint_union_maps (Expr.pos e) hoists + | EOp op -> Bindlib.box (EOp op, pos), Var.Map.empty and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) : 'm A.marked_expr Bindlib.box = @@ -315,8 +315,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) match hoist with (* Here we have to handle only the cases appearing in hoists, as defined the [translate_and_hoist] function. *) - | D.EVar v -> (find ~info:"should never happend" v ctx).expr - | D.EDefault (excep, just, cons) -> + | EVar v -> (find ~info:"should never happend" v ctx).expr + | EDefault (excep, just, cons) -> let excep' = List.map (translate_expr ctx) excep in let just' = translate_expr ctx just in let cons' = translate_expr ctx cons in @@ -325,14 +325,14 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (A.make_var (Var.translate A.handle_default_opt, mark_hoist)) [ Bindlib.box_apply - (fun excep' -> A.EArray excep', mark_hoist) + (fun excep' -> EArray excep', mark_hoist) (Bindlib.box_list excep'); just'; cons'; ] mark_hoist - | D.ELit D.LEmptyError -> A.make_none mark_hoist - | D.EAssert arg -> + | ELit LEmptyError -> A.make_none mark_hoist + | EAssert arg -> let arg' = translate_expr ctx arg in (* [ match arg with | None -> raise NoValueProvided | Some v -> assert @@ -342,17 +342,17 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) A.make_matchopt_with_abs_arms arg' (A.make_abs [| silent_var |] - (Bindlib.box (A.ERaise A.NoValueProvided, mark_hoist)) - [D.TAny, D.mark_pos mark_hoist] + (Bindlib.box (ERaise NoValueProvided, mark_hoist)) + [TAny, Expr.mark_pos mark_hoist] mark_hoist) (A.make_abs [| x |] (Bindlib.box_apply - (fun arg -> A.EAssert arg, mark_hoist) + (fun arg -> EAssert arg, mark_hoist) (A.make_var (x, mark_hoist))) - [D.TAny, D.mark_pos mark_hoist] + [TAny, Expr.mark_pos mark_hoist] mark_hoist) | _ -> - Errors.raise_spanned_error (D.mark_pos mark_hoist) + Errors.raise_spanned_error (Expr.mark_pos mark_hoist) "Internal Error: An term was found in a position where it should \ not be" in @@ -362,23 +362,23 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (* Cli.debug_print @@ Format.asprintf "build matchopt using %a" Print.format_var v; *) A.make_matchopt mark_hoist v - (D.TAny, D.mark_pos mark_hoist) + (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) let rec translate_scope_let (ctx : 'm ctx) - (lets : ('m D.expr, 'm) D.scope_body_expr) : - ('m A.expr, 'm) D.scope_body_expr Bindlib.box = + (lets : ('m D.expr, 'm) scope_body_expr) : + ('m A.expr, 'm) scope_body_expr Bindlib.box = match lets with | Result e -> Bindlib.box_apply - (fun e -> D.Result e) + (fun e -> Result e) (translate_expr ~append_esome:false ctx e) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = D.EAbs (binder, _), emark; + scope_let_expr = EAbs (binder, _), emark; scope_let_next = next; scope_let_pos = pos; } -> @@ -390,13 +390,13 @@ let rec translate_scope_let let var, next = Bindlib.unbind next in (* Cli.debug_print @@ Format.asprintf "unbinding %a" Dcalc.Print.format_var var; *) - let vmark = D.map_mark (fun _ -> pos) (fun _ -> typ) emark in + let vmark = Expr.map_mark (fun _ -> pos) (fun _ -> typ) emark in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in let new_next = translate_scope_let ctx' next in Bindlib.box_apply2 (fun new_expr new_next -> - D.ScopeLet + ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_typ = translate_typ typ; @@ -410,7 +410,7 @@ let rec translate_scope_let { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = (D.ErrorOnEmpty _, emark) as expr; + scope_let_expr = (ErrorOnEmpty _, emark) as expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -419,12 +419,12 @@ let rec translate_scope_let let var, next = Bindlib.unbind next in (* Cli.debug_print @@ Format.asprintf "unbinding %a" Dcalc.Print.format_var var; *) - let vmark = D.map_mark (fun _ -> pos) (fun _ -> typ) emark in + let vmark = Expr.map_mark (fun _ -> pos) (fun _ -> typ) emark in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in Bindlib.box_apply2 (fun new_expr new_next -> - D.ScopeLet + ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_typ = translate_typ typ; @@ -463,7 +463,7 @@ let rec translate_scope_let thunked, then the variable is context. If it's not thunked, it's a regular input. *) match Marked.unmark typ with - | D.TArrow ((D.TLit D.TUnit, _), _) -> false + | TArrow ((TLit TUnit, _), _) -> false | _ -> true) | ScopeVarDefinition | SubScopeVarDefinition | CallingSubScope | DestructuringSubScopeResults | Assertion -> @@ -473,13 +473,13 @@ let rec translate_scope_let (* Cli.debug_print @@ Format.asprintf "unbinding %a" Dcalc.Print.format_var var; *) let vmark = - D.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark expr) + Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark expr) in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in Bindlib.box_apply2 (fun new_expr new_next -> - D.ScopeLet + ScopeLet { scope_let_kind = kind; scope_let_typ = translate_typ typ; @@ -493,8 +493,8 @@ let rec translate_scope_let let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : ('m D.expr, 'm) D.scope_body) : - ('m A.expr, 'm) D.scope_body Bindlib.box = + (body : ('m D.expr, 'm) scope_body) : + ('m A.expr, 'm) scope_body Bindlib.box = match body with | { scope_body_expr = result; @@ -507,23 +507,23 @@ let translate_scope_body match lets with | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e in - D.map_mark (fun _ -> scope_pos) (fun ty -> ty) m + Expr.map_mark (fun _ -> scope_pos) (fun ty -> ty) m in let ctx' = add_var vmark v true ctx in let v' = (find ~info:"variable that was just created" v ctx').var in Bindlib.box_apply (fun new_expr -> { - D.scope_body_expr = new_expr; + scope_body_expr = new_expr; scope_body_input_struct = input_struct; scope_body_output_struct = output_struct; }) (Bindlib.bind_var v' (translate_scope_let ctx' lets)) -let rec translate_scopes (ctx : 'm ctx) (scopes : ('m D.expr, 'm) D.scopes) : - ('m A.expr, 'm) D.scopes Bindlib.box = +let rec translate_scopes (ctx : 'm ctx) (scopes : ('m D.expr, 'm) scopes) : + ('m A.expr, 'm) scopes Bindlib.box = match scopes with - | Nil -> Bindlib.box D.Nil + | Nil -> Bindlib.box Nil | ScopeDef { scope_name; scope_body; scope_next } -> let scope_var, next = Bindlib.unbind scope_next in let vmark = @@ -536,21 +536,21 @@ let rec translate_scopes (ctx : 'm ctx) (scopes : ('m D.expr, 'm) D.scopes) : (find ~info:"variable that was just created" scope_var new_ctx).var in - let scope_pos = Marked.get_mark (D.ScopeName.get_info scope_name) in + let scope_pos = Marked.get_mark (ScopeName.get_info scope_name) in let new_body = translate_scope_body scope_pos ctx scope_body in let tail = translate_scopes new_ctx next in Bindlib.box_apply2 (fun body tail -> - D.ScopeDef { scope_name; scope_body = body; scope_next = tail }) + ScopeDef { scope_name; scope_body = body; scope_next = tail }) new_body (Bindlib.bind_var new_scope_name tail) let translate_program (prgm : 'm D.program) : 'm A.program = let inputs_structs = - D.fold_left_scope_defs prgm.scopes ~init:[] ~f:(fun acc scope_def _ -> - scope_def.D.scope_body.scope_body_input_struct :: acc) + Expr.fold_left_scope_defs prgm.scopes ~init:[] ~f:(fun acc scope_def _ -> + scope_def.scope_body.scope_body_input_struct :: acc) in (* Cli.debug_print @@ Format.asprintf "List of structs to modify: [%a]" @@ -558,17 +558,17 @@ let translate_program (prgm : 'm D.program) : 'm A.program = let decl_ctx = { prgm.decl_ctx with - D.ctx_enums = + ctx_enums = prgm.decl_ctx.ctx_enums - |> D.EnumMap.add A.option_enum A.option_enum_config; + |> EnumMap.add A.option_enum A.option_enum_config; } in let decl_ctx = { decl_ctx with - D.ctx_structs = + ctx_structs = prgm.decl_ctx.ctx_structs - |> D.StructMap.mapi (fun n l -> + |> StructMap.mapi (fun n l -> if List.mem n inputs_structs then ListLabels.map l ~f:(fun (n, tau) -> (* Cli.debug_print @@ Format.asprintf "Input type: %a" diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index c31f3c5e..0dc4c6da 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -14,6 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) open Utils +open Shared_ast open Ast module D = Dcalc.Ast @@ -71,7 +72,7 @@ let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with | EMatch ((EInj (e1, i, n', _ts), _), cases, n) - when Dcalc.Ast.EnumName.compare n n' = 0 -> + when EnumName.compare n n' = 0 -> let+ e1 = visitor_map iota_expr () e1 and+ case = visitor_map iota_expr () (List.nth cases i) in default_mark @@ EApp (case, [e1]) @@ -80,7 +81,7 @@ let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = |> List.mapi (fun i (case, _pos) -> match case with | EInj (_ei, i', n', _ts') -> - i = i' && (* n = n' *) Dcalc.Ast.EnumName.compare n n' = 0 + i = i' && (* n = n' *) EnumName.compare n n' = 0 | _ -> false) |> List.for_all Fun.id -> visitor_map iota_expr () e' @@ -101,9 +102,9 @@ let rec beta_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = let iota_optimizations (p : 'm program) : 'm program = let new_scopes = - Dcalc.Ast.map_exprs_in_scopes ~f:(iota_expr ()) ~varf:(fun v -> v) p.scopes + Expr.map_exprs_in_scopes ~f:(iota_expr ()) ~varf:(fun v -> v) p.scopes in - { p with D.scopes = Bindlib.unbox new_scopes } + { p with scopes = Bindlib.unbox new_scopes } (* TODO: beta optimizations apply inlining of the program. We left the inclusion of beta-optimization as future work since its produce code that is harder to @@ -111,7 +112,7 @@ let iota_optimizations (p : 'm program) : 'm program = program. *) let _beta_optimizations (p : 'm program) : 'm program = let new_scopes = - Dcalc.Ast.map_exprs_in_scopes ~f:(beta_expr ()) ~varf:(fun v -> v) p.scopes + Expr.map_exprs_in_scopes ~f:(beta_expr ()) ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } @@ -145,11 +146,11 @@ let rec peephole_expr (_ : unit) (e : 'm marked_expr) : let peephole_optimizations (p : 'm program) : 'm program = let new_scopes = - Dcalc.Ast.map_exprs_in_scopes ~f:(peephole_expr ()) + Expr.map_exprs_in_scopes ~f:(peephole_expr ()) ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } -let optimize_program (p : 'm program) : Dcalc.Ast.untyped program = - p |> iota_optimizations |> peephole_optimizations |> untype_program +let optimize_program (p : 'm program) : untyped program = + p |> iota_optimizations |> peephole_optimizations |> Expr.untype_program diff --git a/compiler/lcalc/optimizations.mli b/compiler/lcalc/optimizations.mli index da3af2c5..8c0c0b03 100644 --- a/compiler/lcalc/optimizations.mli +++ b/compiler/lcalc/optimizations.mli @@ -16,6 +16,6 @@ open Ast -val optimize_program : 'm program -> Dcalc.Ast.untyped program +val optimize_program : 'm program -> Shared_ast.untyped program (** Warning/todo: no effort was yet made to ensure correct propagation of type annotations in the typed case *) diff --git a/compiler/lcalc/print.ml b/compiler/lcalc/print.ml index 661ceec7..f7caa5b9 100644 --- a/compiler/lcalc/print.ml +++ b/compiler/lcalc/print.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast open Ast (** {b Note:} (EmileRolley) seems to be factorizable with @@ -64,7 +65,7 @@ let format_var (fmt : Format.formatter) (v : 'm Ast.var) : unit = let rec format_expr ?(debug : bool = false) - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm marked_expr) : unit = let format_expr = format_expr ctx ~debug in @@ -83,16 +84,16 @@ let rec format_expr (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) es format_punctuation ")" | ETuple (es, Some s) -> - Format.fprintf fmt "@[%a@ %a%a%a@]" Dcalc.Ast.StructName.format_t s + Format.fprintf fmt "@[%a@ %a%a%a@]" StructName.format_t s format_punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a %a" format_punctuation "\"" - Dcalc.Ast.StructFieldName.format_t struct_field format_punctuation + StructFieldName.format_t struct_field format_punctuation "\"" format_punctuation ":" format_expr e)) (List.combine es - (List.map fst (Dcalc.Ast.StructMap.find s ctx.ctx_structs))) + (List.map fst (StructMap.find s ctx.ctx_structs))) format_punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" format_punctuation "[" @@ -106,12 +107,12 @@ let rec format_expr Format.fprintf fmt "%a%a%d" format_expr e1 format_punctuation "." n | Some s -> Format.fprintf fmt "%a%a%a%a%a" format_expr e1 format_punctuation "." - format_punctuation "\"" Dcalc.Ast.StructFieldName.format_t - (fst (List.nth (Dcalc.Ast.StructMap.find s ctx.ctx_structs) n)) + format_punctuation "\"" StructFieldName.format_t + (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) format_punctuation "\"") | EInj (e, n, en, _ts) -> Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_enum_constructor - (fst (List.nth (Dcalc.Ast.EnumMap.find en ctx.ctx_enums) n)) + (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) format_expr e | EMatch (e, es, e_name) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a@]" format_keyword "match" @@ -123,9 +124,9 @@ let rec format_expr Dcalc.Print.format_enum_constructor c format_punctuation ":" format_expr e)) (List.combine es - (List.map fst (Dcalc.Ast.EnumMap.find e_name ctx.ctx_enums))) + (List.map fst (EnumMap.find e_name ctx.ctx_enums))) | ELit l -> - Format.fprintf fmt "%a" format_lit (Marked.mark (Dcalc.Ast.pos e) l) + Format.fprintf fmt "%a" format_lit (Marked.mark (Expr.pos e) l) | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in Format.fprintf fmt "%a%a" @@ -152,7 +153,7 @@ let rec format_expr (List.combine (Array.to_list xs) taus) format_punctuation "→" format_expr body | EApp - ((EOp (Binop ((Dcalc.Ast.Map | Dcalc.Ast.Filter) as op)), _), [arg1; arg2]) + ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" Dcalc.Print.format_binop op format_with_parens arg1 format_with_parens arg2 @@ -190,11 +191,11 @@ let rec format_expr let format_scope ?(debug = false) ctx fmt (n, s) = Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" - Dcalc.Ast.ScopeName.format_t n (format_expr ctx ~debug) + ScopeName.format_t n (format_expr ctx ~debug) (Bindlib.unbox (Dcalc.Ast.build_whole_scope_expr ~make_abs:Ast.make_abs - ~make_let_in:Ast.make_let_in ~box_expr:Ast.box_expr ctx s - (Dcalc.Ast.map_mark - (fun _ -> Marked.get_mark (Dcalc.Ast.ScopeName.get_info n)) + ~make_let_in:Ast.make_let_in ~box_expr:Expr.box ctx s + (Expr.map_mark + (fun _ -> Marked.get_mark (ScopeName.get_info n)) (fun ty -> ty) - (Dcalc.Ast.get_scope_body_mark s)))) + (Expr.get_scope_body_mark s)))) diff --git a/compiler/lcalc/print.mli b/compiler/lcalc/print.mli index 938aa3d5..46e7b71b 100644 --- a/compiler/lcalc/print.mli +++ b/compiler/lcalc/print.mli @@ -15,23 +15,24 @@ the License. *) open Utils +open Shared_ast (** {1 Formatters} *) val format_lit : Format.formatter -> Ast.lit Marked.pos -> unit val format_var : Format.formatter -> 'm Ast.var -> unit -val format_exception : Format.formatter -> Ast.except -> unit +val format_exception : Format.formatter -> except -> unit val format_expr : ?debug:bool -> - Dcalc.Ast.decl_ctx -> + decl_ctx -> Format.formatter -> 'm Ast.marked_expr -> unit val format_scope : ?debug:bool -> - Dcalc.Ast.decl_ctx -> + decl_ctx -> Format.formatter -> - Dcalc.Ast.ScopeName.t * ('m Ast.expr, 'm) Dcalc.Ast.scope_body -> + ScopeName.t * ('m Ast.expr, 'm) scope_body -> unit diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index 2de4ea73..1c53f24b 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -15,37 +15,38 @@ the License. *) open Utils +open Shared_ast open Ast open String_common module D = Dcalc.Ast -let find_struct (s : D.StructName.t) (ctx : D.decl_ctx) : - (D.StructFieldName.t * D.typ Marked.pos) list = - try D.StructMap.find s ctx.D.ctx_structs +let find_struct (s : StructName.t) (ctx : decl_ctx) : + (StructFieldName.t * typ Marked.pos) list = + try StructMap.find s ctx.ctx_structs with Not_found -> - let s_name, pos = D.StructName.get_info s in + let s_name, pos = StructName.get_info s in Errors.raise_spanned_error pos "Internal Error: Structure %s was not found in the current environment." s_name -let find_enum (en : D.EnumName.t) (ctx : D.decl_ctx) : - (D.EnumConstructor.t * D.typ Marked.pos) list = - try D.EnumMap.find en ctx.D.ctx_enums +let find_enum (en : EnumName.t) (ctx : decl_ctx) : + (EnumConstructor.t * typ Marked.pos) list = + try EnumMap.find en ctx.ctx_enums with Not_found -> - let en_name, pos = D.EnumName.get_info en in + let en_name, pos = EnumName.get_info en in Errors.raise_spanned_error pos "Internal Error: Enumeration %s was not found in the current environment." en_name let format_lit (fmt : Format.formatter) (l : lit Marked.pos) : unit = match Marked.unmark l with - | LBool b -> Dcalc.Print.format_lit fmt (Dcalc.Ast.LBool b) + | LBool b -> Dcalc.Print.format_lit fmt (LBool b) | LInt i -> Format.fprintf fmt "integer_of_string@ \"%s\"" (Runtime.integer_to_string i) - | LUnit -> Dcalc.Print.format_lit fmt Dcalc.Ast.LUnit + | LUnit -> Dcalc.Print.format_lit fmt LUnit | LRat i -> Format.fprintf fmt "decimal_of_string \"%a\"" Dcalc.Print.format_lit - (Dcalc.Ast.LRat i) + (LRat i) | LMoney e -> Format.fprintf fmt "money_of_cents_string@ \"%s\"" (Runtime.integer_to_string (Runtime.money_to_cents e)) @@ -58,7 +59,7 @@ let format_lit (fmt : Format.formatter) (l : lit Marked.pos) : unit = let years, months, days = Runtime.duration_to_years_months_days d in Format.fprintf fmt "duration_of_numbers (%d) (%d) (%d)" years months days -let format_op_kind (fmt : Format.formatter) (k : Dcalc.Ast.op_kind) = +let format_op_kind (fmt : Format.formatter) (k : op_kind) = Format.fprintf fmt "%s" (match k with | KInt -> "!" @@ -67,7 +68,7 @@ let format_op_kind (fmt : Format.formatter) (k : Dcalc.Ast.op_kind) = | KDate -> "@" | KDuration -> "^") -let format_binop (fmt : Format.formatter) (op : Dcalc.Ast.binop Marked.pos) : +let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : unit = match Marked.unmark op with | Add k -> Format.fprintf fmt "+%a" format_op_kind k @@ -86,7 +87,7 @@ let format_binop (fmt : Format.formatter) (op : Dcalc.Ast.binop Marked.pos) : | Map -> Format.fprintf fmt "Array.map" | Filter -> Format.fprintf fmt "array_filter" -let format_ternop (fmt : Format.formatter) (op : Dcalc.Ast.ternop Marked.pos) : +let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : unit = match Marked.unmark op with Fold -> Format.fprintf fmt "Array.fold_left" @@ -109,7 +110,7 @@ let format_string_list (fmt : Format.formatter) (uids : string list) : unit = (Re.replace sanitize_quotes ~f:(fun _ -> "\\\"") info))) uids -let format_unop (fmt : Format.formatter) (op : Dcalc.Ast.unop Marked.pos) : unit +let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit = match Marked.unmark op with | Minus k -> Format.fprintf fmt "~-%a" format_op_kind k @@ -145,9 +146,9 @@ let avoid_keywords (s : string) : string = s ^ "_user" | _ -> s -let format_struct_name (fmt : Format.formatter) (v : Dcalc.Ast.StructName.t) : +let format_struct_name (fmt : Format.formatter) (v : StructName.t) : unit = - Format.asprintf "%a" Dcalc.Ast.StructName.format_t v + Format.asprintf "%a" StructName.format_t v |> to_ascii |> to_snake_case |> avoid_keywords @@ -155,10 +156,10 @@ let format_struct_name (fmt : Format.formatter) (v : Dcalc.Ast.StructName.t) : let format_to_module_name (fmt : Format.formatter) - (name : [< `Ename of D.EnumName.t | `Sname of D.StructName.t ]) = + (name : [< `Ename of EnumName.t | `Sname of StructName.t ]) = (match name with - | `Ename v -> Format.asprintf "%a" D.EnumName.format_t v - | `Sname v -> Format.asprintf "%a" D.StructName.format_t v) + | `Ename v -> Format.asprintf "%a" EnumName.format_t v + | `Sname v -> Format.asprintf "%a" StructName.format_t v) |> to_ascii |> to_snake_case |> avoid_keywords @@ -170,52 +171,52 @@ let format_to_module_name let format_struct_field_name (fmt : Format.formatter) ((sname_opt, v) : - Dcalc.Ast.StructName.t option * Dcalc.Ast.StructFieldName.t) : unit = + StructName.t option * StructFieldName.t) : unit = (match sname_opt with | Some sname -> Format.fprintf fmt "%a.%s" format_to_module_name (`Sname sname) | None -> Format.fprintf fmt "%s") (avoid_keywords - (to_ascii (Format.asprintf "%a" Dcalc.Ast.StructFieldName.format_t v))) + (to_ascii (Format.asprintf "%a" StructFieldName.format_t v))) -let format_enum_name (fmt : Format.formatter) (v : Dcalc.Ast.EnumName.t) : unit +let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords (to_snake_case - (to_ascii (Format.asprintf "%a" Dcalc.Ast.EnumName.format_t v)))) + (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) let format_enum_cons_name (fmt : Format.formatter) - (v : Dcalc.Ast.EnumConstructor.t) : unit = + (v : EnumConstructor.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_ascii (Format.asprintf "%a" Dcalc.Ast.EnumConstructor.format_t v))) + (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let rec typ_embedding_name (fmt : Format.formatter) (ty : D.typ Marked.pos) : +let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit = match Marked.unmark ty with - | D.TLit D.TUnit -> Format.fprintf fmt "embed_unit" - | D.TLit D.TBool -> Format.fprintf fmt "embed_bool" - | D.TLit D.TInt -> Format.fprintf fmt "embed_integer" - | D.TLit D.TRat -> Format.fprintf fmt "embed_decimal" - | D.TLit D.TMoney -> Format.fprintf fmt "embed_money" - | D.TLit D.TDate -> Format.fprintf fmt "embed_date" - | D.TLit D.TDuration -> Format.fprintf fmt "embed_duration" - | D.TTuple (_, Some s_name) -> + | TLit TUnit -> Format.fprintf fmt "embed_unit" + | TLit TBool -> Format.fprintf fmt "embed_bool" + | TLit TInt -> Format.fprintf fmt "embed_integer" + | TLit TRat -> Format.fprintf fmt "embed_decimal" + | TLit TMoney -> Format.fprintf fmt "embed_money" + | TLit TDate -> Format.fprintf fmt "embed_date" + | TLit TDuration -> Format.fprintf fmt "embed_duration" + | TTuple (_, Some s_name) -> Format.fprintf fmt "embed_%a" format_struct_name s_name - | D.TEnum (_, e_name) -> Format.fprintf fmt "embed_%a" format_enum_name e_name - | D.TArray ty -> Format.fprintf fmt "embed_array (%a)" typ_embedding_name ty + | TEnum (_, e_name) -> Format.fprintf fmt "embed_%a" format_enum_name e_name + | TArray ty -> Format.fprintf fmt "embed_array (%a)" typ_embedding_name ty | _ -> Format.fprintf fmt "unembeddable" -let typ_needs_parens (e : Dcalc.Ast.typ Marked.pos) : bool = +let typ_needs_parens (e : typ Marked.pos) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : Dcalc.Ast.typ Marked.pos) : +let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = let format_typ_with_parens (fmt : Format.formatter) - (t : Dcalc.Ast.typ Marked.pos) = + (t : typ Marked.pos) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -229,10 +230,10 @@ let rec format_typ (fmt : Format.formatter) (typ : Dcalc.Ast.typ Marked.pos) : ts | TTuple (_, Some s) -> Format.fprintf fmt "%a.t" format_to_module_name (`Sname s) - | TEnum ([t], e) when D.EnumName.compare e Ast.option_enum = 0 -> + | TEnum ([t], e) when EnumName.compare e Ast.option_enum = 0 -> Format.fprintf fmt "@[(%a)@] %a" format_typ_with_parens t format_enum_name e - | TEnum (_, e) when D.EnumName.compare e Ast.option_enum = 0 -> + | TEnum (_, e) when EnumName.compare e Ast.option_enum = 0 -> Errors.raise_spanned_error (Marked.get_mark typ) "Internal Error: found an typing parameter for an eoption type of the \ wrong length." @@ -290,7 +291,7 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = (Pos.get_law_info pos) let rec format_expr - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm marked_expr) : unit = let format_expr = format_expr ctx in @@ -360,7 +361,7 @@ let rec format_expr (* should not happen *)) e)) (List.combine es (List.map fst (find_enum e_name ctx))) - | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.mark (D.pos e) l) + | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.mark (Expr.pos e) l) | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in @@ -382,35 +383,35 @@ let rec format_expr Format.fprintf fmt "@[(%a:@ %a)@]" format_var x format_typ tau)) xs_tau format_expr body | EApp - ((EOp (Binop ((Dcalc.Ast.Map | Dcalc.Ast.Filter) as op)), _), [arg1; arg2]) + ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" format_binop (op, Pos.no_pos) format_with_parens arg1 format_with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 format_binop (op, Pos.no_pos) format_with_parens arg2 - | EApp ((EApp ((EOp (Unop (D.Log (D.BeginCall, info))), _), [f]), _), [arg]) + | EApp ((EApp ((EOp (Unop (Log (BeginCall, info))), _), [f]), _), [arg]) when !Cli.trace_flag -> Format.fprintf fmt "(log_begin_call@ %a@ %a)@ %a" format_uid_list info format_with_parens f format_with_parens arg - | EApp ((EOp (Unop (D.Log (D.VarDef tau, info))), _), [arg1]) + | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "(log_variable_definition@ %a@ (%a)@ %a)" format_uid_list info typ_embedding_name (tau, Pos.no_pos) format_with_parens arg1 - | EApp ((EOp (Unop (D.Log (D.PosRecordIfTrueBool, _))), m), [arg1]) + | EApp ((EOp (Unop (Log (PosRecordIfTrueBool, _))), m), [arg1]) when !Cli.trace_flag -> - let pos = D.mark_pos m in + let pos = Expr.mark_pos m in Format.fprintf fmt "(log_decision_taken@ @[{filename = \"%s\";@ start_line=%d;@ \ start_column=%d;@ end_line=%d; end_column=%d;@ law_headings=%a}@]@ %a)" (Pos.get_file pos) (Pos.get_start_line pos) (Pos.get_start_column pos) (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) format_with_parens arg1 - | EApp ((EOp (Unop (D.Log (D.EndCall, info))), _), [arg1]) + | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "(log_end_call@ %a@ %a)" format_uid_list info format_with_parens arg1 - | EApp ((EOp (Unop (D.Log _)), _), [arg1]) -> + | EApp ((EOp (Unop (Log _)), _), [arg1]) -> Format.fprintf fmt "%a" format_with_parens arg1 | EApp ((EOp (Unop op), _), [arg1]) -> Format.fprintf fmt "@[%a@ %a@]" format_unop (op, Pos.no_pos) @@ -422,13 +423,13 @@ let rec format_expr "@[%a@ @[{filename = \"%s\";@ start_line=%d;@ \ start_column=%d;@ end_line=%d; end_column=%d;@ law_headings=%a}@]@ %a@]" format_var x - (Pos.get_file (D.mark_pos pos)) - (Pos.get_start_line (D.mark_pos pos)) - (Pos.get_start_column (D.mark_pos pos)) - (Pos.get_end_line (D.mark_pos pos)) - (Pos.get_end_column (D.mark_pos pos)) + (Pos.get_file (Expr.mark_pos pos)) + (Pos.get_start_line (Expr.mark_pos pos)) + (Pos.get_start_column (Expr.mark_pos pos)) + (Pos.get_end_line (Expr.mark_pos pos)) + (Pos.get_end_column (Expr.mark_pos pos)) format_string_list - (Pos.get_law_info (D.mark_pos pos)) + (Pos.get_law_info (Expr.mark_pos pos)) (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") format_with_parens) @@ -452,25 +453,25 @@ let rec format_expr 2>{filename = \"%s\";@ start_line=%d;@ start_column=%d;@ end_line=%d; \ end_column=%d;@ law_headings=%a}@])@]" format_with_parens e' - (Pos.get_file (D.pos e')) - (Pos.get_start_line (D.pos e')) - (Pos.get_start_column (D.pos e')) - (Pos.get_end_line (D.pos e')) - (Pos.get_end_column (D.pos e')) + (Pos.get_file (Expr.pos e')) + (Pos.get_start_line (Expr.pos e')) + (Pos.get_start_column (Expr.pos e')) + (Pos.get_end_line (Expr.pos e')) + (Pos.get_end_column (Expr.pos e')) format_string_list - (Pos.get_law_info (D.pos e')) - | ERaise exc -> Format.fprintf fmt "raise@ %a" format_exception (exc, D.pos e) + (Pos.get_law_info (Expr.pos e')) + | ERaise exc -> Format.fprintf fmt "raise@ %a" format_exception (exc, Expr.pos e) | ECatch (e1, exc, e2) -> Format.fprintf fmt "@,@[@[try@ %a@]@ with@]@ @[%a@ ->@ %a@]" format_with_parens e1 format_exception - (exc, D.pos e) + (exc, Expr.pos e) format_with_parens e2 let format_struct_embedding (fmt : Format.formatter) ((struct_name, struct_fields) : - D.StructName.t * (D.StructFieldName.t * D.typ Marked.pos) list) = + StructName.t * (StructFieldName.t * typ Marked.pos) list) = if List.length struct_fields = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_struct_name struct_name format_to_module_name (`Sname struct_name) @@ -480,11 +481,11 @@ let format_struct_embedding @[[%a]@])@]@\n\ @\n" format_struct_name struct_name format_to_module_name (`Sname struct_name) - D.StructName.format_t struct_name + StructName.format_t struct_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@\n") (fun _fmt (struct_field, struct_field_type) -> - Format.fprintf fmt "(\"%a\",@ %a@ x.%a)" D.StructFieldName.format_t + Format.fprintf fmt "(\"%a\",@ %a@ x.%a)" StructFieldName.format_t struct_field typ_embedding_name struct_field_type format_struct_field_name (Some struct_name, struct_field))) @@ -493,7 +494,7 @@ let format_struct_embedding let format_enum_embedding (fmt : Format.formatter) ((enum_name, enum_cases) : - D.EnumName.t * (D.EnumConstructor.t * D.typ Marked.pos) list) = + EnumName.t * (EnumConstructor.t * typ Marked.pos) list) = if List.length enum_cases = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_to_module_name (`Ename enum_name) format_enum_name enum_name @@ -503,19 +504,19 @@ let format_enum_embedding =@]@ Enum([\"%a\"],@ @[match x with@ %a@])@]@\n\ @\n" format_enum_name enum_name format_to_module_name (`Ename enum_name) - D.EnumName.format_t enum_name + EnumName.format_t enum_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun _fmt (enum_cons, enum_cons_type) -> Format.fprintf fmt "@[| %a x ->@ (\"%a\", %a x)@]" - format_enum_cons_name enum_cons D.EnumConstructor.format_t + format_enum_cons_name enum_cons EnumConstructor.format_t enum_cons typ_embedding_name enum_cons_type)) enum_cases let format_ctx (type_ordering : Scopelang.Dependency.TVertex.t list) (fmt : Format.formatter) - (ctx : D.decl_ctx) : unit = + (ctx : decl_ctx) : unit = let format_struct_decl fmt (struct_name, struct_fields) = if List.length struct_fields = 0 then Format.fprintf fmt @@ -559,8 +560,8 @@ let format_ctx let scope_structs = List.map (fun (s, _) -> Scopelang.Dependency.TVertex.Struct s) - (Dcalc.Ast.StructMap.bindings - (Dcalc.Ast.StructMap.filter + (StructMap.bindings + (StructMap.filter (fun s _ -> not (is_in_type_ordering s)) ctx.ctx_structs)) in @@ -574,12 +575,12 @@ let format_ctx (type_ordering @ scope_structs) let rec format_scope_body_expr - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) - (scope_lets : ('m Ast.expr, 'm) Dcalc.Ast.scope_body_expr) : unit = + (scope_lets : ('m Ast.expr, 'm) scope_body_expr) : unit = match scope_lets with - | Dcalc.Ast.Result e -> format_expr ctx fmt e - | Dcalc.Ast.ScopeLet scope_let -> + | Result e -> format_expr ctx fmt e + | ScopeLet scope_let -> let scope_let_var, scope_let_next = Bindlib.unbind scope_let.scope_let_next in @@ -590,12 +591,12 @@ let rec format_scope_body_expr scope_let_next let rec format_scopes - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : ('m Ast.expr, 'm) Dcalc.Ast.scopes) : unit = + (scopes : ('m Ast.expr, 'm) scopes) : unit = match scopes with - | Dcalc.Ast.Nil -> () - | Dcalc.Ast.ScopeDef scope_def -> + | Nil -> () + | ScopeDef scope_def -> let scope_input_var, scope_body_expr = Bindlib.unbind scope_def.scope_body.scope_body_expr in diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index f64ca373..b5d75e3d 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast open Ast (** Formats a lambda calculus program into a valid OCaml program *) @@ -22,32 +23,32 @@ open Ast val avoid_keywords : string -> string val find_struct : - Dcalc.Ast.StructName.t -> - Dcalc.Ast.decl_ctx -> - (Dcalc.Ast.StructFieldName.t * Dcalc.Ast.typ Marked.pos) list + StructName.t -> + decl_ctx -> + (StructFieldName.t * typ Marked.pos) list val find_enum : - Dcalc.Ast.EnumName.t -> - Dcalc.Ast.decl_ctx -> - (Dcalc.Ast.EnumConstructor.t * Dcalc.Ast.typ Marked.pos) list + EnumName.t -> + decl_ctx -> + (EnumConstructor.t * typ Marked.pos) list -val typ_needs_parens : Dcalc.Ast.typ Marked.pos -> bool +val typ_needs_parens : typ Marked.pos -> bool val needs_parens : 'm marked_expr -> bool -val format_enum_name : Format.formatter -> Dcalc.Ast.EnumName.t -> unit +val format_enum_name : Format.formatter -> EnumName.t -> unit val format_enum_cons_name : - Format.formatter -> Dcalc.Ast.EnumConstructor.t -> unit + Format.formatter -> EnumConstructor.t -> unit -val format_struct_name : Format.formatter -> Dcalc.Ast.StructName.t -> unit +val format_struct_name : Format.formatter -> StructName.t -> unit val format_struct_field_name : Format.formatter -> - Dcalc.Ast.StructName.t option * Dcalc.Ast.StructFieldName.t -> + StructName.t option * StructFieldName.t -> unit val format_to_module_name : Format.formatter -> - [< `Ename of Dcalc.Ast.EnumName.t | `Sname of Dcalc.Ast.StructName.t ] -> + [< `Ename of EnumName.t | `Sname of StructName.t ] -> unit val format_lit : Format.formatter -> lit Marked.pos -> unit diff --git a/compiler/plugin.ml b/compiler/plugin.ml index 9dfaf6f5..1378c2da 100644 --- a/compiler/plugin.ml +++ b/compiler/plugin.ml @@ -29,7 +29,7 @@ type 'ast gen = { } type t = - | Lcalc of Dcalc.Ast.untyped Lcalc.Ast.program gen + | Lcalc of Shared_ast.untyped Lcalc.Ast.program gen | Scalc of Scalc.Ast.program gen let name = function Lcalc { name; _ } | Scalc { name; _ } -> name diff --git a/compiler/plugin.mli b/compiler/plugin.mli index 0eb30c17..b6d678f9 100644 --- a/compiler/plugin.mli +++ b/compiler/plugin.mli @@ -31,7 +31,7 @@ type 'ast gen = { } type t = - | Lcalc of Dcalc.Ast.untyped Lcalc.Ast.program gen + | Lcalc of Shared_ast.untyped Lcalc.Ast.program gen | Scalc of Scalc.Ast.program gen val find : string -> t @@ -49,7 +49,7 @@ module PluginAPI : sig val register_lcalc : name:string -> extension:string -> - Dcalc.Ast.untyped Lcalc.Ast.program plugin_apply_fun_typ -> + Shared_ast.untyped Lcalc.Ast.program plugin_apply_fun_typ -> unit val register_scalc : diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index ee9c784e..e58edc63 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -19,6 +19,7 @@ the associated [js_of_ocaml] wrapper. *) open Utils +open Shared_ast open String_common open Lcalc open Lcalc.Ast @@ -39,9 +40,9 @@ module To_jsoo = struct let format_struct_field_name_camel_case (fmt : Format.formatter) - (v : Dcalc.Ast.StructFieldName.t) : unit = + (v : StructFieldName.t) : unit = let s = - Format.asprintf "%a" Dcalc.Ast.StructFieldName.format_t v + Format.asprintf "%a" StructFieldName.format_t v |> to_ascii |> to_snake_case |> avoid_keywords @@ -49,7 +50,7 @@ module To_jsoo = struct in Format.fprintf fmt "%s" s - let format_tlit (fmt : Format.formatter) (l : Dcalc.Ast.typ_lit) : unit = + let format_tlit (fmt : Format.formatter) (l : typ_lit) : unit = Dcalc.Print.format_base_type fmt (match l with | TUnit -> "unit" @@ -59,11 +60,11 @@ module To_jsoo = struct | TBool -> "bool Js.t" | TDate -> "Js.js_string Js.t") - let rec format_typ (fmt : Format.formatter) (typ : Dcalc.Ast.typ Marked.pos) : + let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = let format_typ_with_parens (fmt : Format.formatter) - (t : Dcalc.Ast.typ Marked.pos) = + (t : typ Marked.pos) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -73,10 +74,10 @@ module To_jsoo = struct | TTuple (_, None) -> (* Tuples are encoded as an javascript polymorphic array. *) Format.fprintf fmt "Js.Unsafe.any_js_array Js.t " - | TEnum ([t], e) when D.EnumName.compare e option_enum = 0 -> + | TEnum ([t], e) when EnumName.compare e option_enum = 0 -> Format.fprintf fmt "@[(%a)@] %a" format_typ_with_parens t format_enum_name e - | TEnum (_, e) when D.EnumName.compare e option_enum = 0 -> + | TEnum (_, e) when EnumName.compare e option_enum = 0 -> Errors.raise_spanned_error (Marked.get_mark typ) "Internal Error: found an typing parameter for an eoption type of the \ wrong length." @@ -90,41 +91,41 @@ module To_jsoo = struct let rec format_typ_to_jsoo fmt typ = match Marked.unmark typ with - | Dcalc.Ast.TLit TBool -> Format.fprintf fmt "Js.bool" - | Dcalc.Ast.TLit TInt -> Format.fprintf fmt "integer_to_int" - | Dcalc.Ast.TLit TRat -> + | TLit TBool -> Format.fprintf fmt "Js.bool" + | TLit TInt -> Format.fprintf fmt "integer_to_int" + | TLit TRat -> Format.fprintf fmt "Js.number_of_float %@%@ decimal_to_float" - | Dcalc.Ast.TLit TMoney -> + | TLit TMoney -> Format.fprintf fmt "Js.number_of_float %@%@ money_to_float" - | Dcalc.Ast.TLit TDuration -> Format.fprintf fmt "duration_to_jsoo" - | Dcalc.Ast.TLit TDate -> Format.fprintf fmt "date_to_jsoo" - | Dcalc.Ast.TEnum (_, ename) -> + | TLit TDuration -> Format.fprintf fmt "duration_to_jsoo" + | TLit TDate -> Format.fprintf fmt "date_to_jsoo" + | TEnum (_, ename) -> Format.fprintf fmt "%a_to_jsoo" format_enum_name ename - | Dcalc.Ast.TTuple (_, Some sname) -> + | TTuple (_, Some sname) -> Format.fprintf fmt "%a_to_jsoo" format_struct_name sname - | Dcalc.Ast.TArray t -> + | TArray t -> Format.fprintf fmt "Js.array %@%@ Array.map (fun x -> %a x)" format_typ_to_jsoo t - | Dcalc.Ast.TAny | Dcalc.Ast.TTuple (_, None) -> + | TAny | TTuple (_, None) -> Format.fprintf fmt "Js.Unsafe.inject" | _ -> Format.fprintf fmt "" let rec format_typ_of_jsoo fmt typ = match Marked.unmark typ with - | Dcalc.Ast.TLit TBool -> Format.fprintf fmt "Js.to_bool" - | Dcalc.Ast.TLit TInt -> Format.fprintf fmt "integer_of_int" - | Dcalc.Ast.TLit TRat -> + | TLit TBool -> Format.fprintf fmt "Js.to_bool" + | TLit TInt -> Format.fprintf fmt "integer_of_int" + | TLit TRat -> Format.fprintf fmt "decimal_of_float %@%@ Js.float_of_number" - | Dcalc.Ast.TLit TMoney -> + | TLit TMoney -> Format.fprintf fmt "money_of_decimal %@%@ decimal_of_float %@%@ Js.float_of_number" - | Dcalc.Ast.TLit TDuration -> Format.fprintf fmt "duration_of_jsoo" - | Dcalc.Ast.TLit TDate -> Format.fprintf fmt "date_of_jsoo" - | Dcalc.Ast.TEnum (_, ename) -> + | TLit TDuration -> Format.fprintf fmt "duration_of_jsoo" + | TLit TDate -> Format.fprintf fmt "date_of_jsoo" + | TEnum (_, ename) -> Format.fprintf fmt "%a_of_jsoo" format_enum_name ename - | Dcalc.Ast.TTuple (_, Some sname) -> + | TTuple (_, Some sname) -> Format.fprintf fmt "%a_of_jsoo" format_struct_name sname - | Dcalc.Ast.TArray t -> + | TArray t -> Format.fprintf fmt "Array.map (fun x -> %a x) %@%@ Js.to_array" format_typ_of_jsoo t | _ -> Format.fprintf fmt "" @@ -150,10 +151,10 @@ module To_jsoo = struct let format_ctx (type_ordering : Scopelang.Dependency.TVertex.t list) (fmt : Format.formatter) - (ctx : D.decl_ctx) : unit = - let format_prop_or_meth fmt (struct_field_type : D.typ Marked.pos) = + (ctx : decl_ctx) : unit = + let format_prop_or_meth fmt (struct_field_type : typ Marked.pos) = match Marked.unmark struct_field_type with - | Dcalc.Ast.TArrow _ -> Format.fprintf fmt "Js.meth" + | TArrow _ -> Format.fprintf fmt "Js.meth" | _ -> Format.fprintf fmt "Js.readonly_prop" in let format_struct_decl fmt (struct_name, struct_fields) = @@ -167,7 +168,7 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (struct_field, struct_field_type) -> match Marked.unmark struct_field_type with - | Dcalc.Ast.TArrow (t1, t2) -> + | TArrow (t1, t2) -> Format.fprintf fmt "@[method %a =@ Js.wrap_meth_callback@ @[(@,\ fun input ->@ %a (%a.%a (%a input)))@]@]" @@ -188,7 +189,7 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@\n") (fun fmt (struct_field, struct_field_type) -> match Marked.unmark struct_field_type with - | Dcalc.Ast.TArrow _ -> + | TArrow _ -> Format.fprintf fmt "%a = failwith \"The function '%a' translation isn't yet \ supported...\"" @@ -238,7 +239,7 @@ module To_jsoo = struct in let format_enum_decl fmt - (enum_name, (enum_cons : (D.EnumConstructor.t * D.typ Marked.pos) list)) + (enum_name, (enum_cons : (EnumConstructor.t * typ Marked.pos) list)) = let fmt_enum_name fmt _ = format_enum_name fmt enum_name in let fmt_module_enum_name fmt _ = @@ -250,7 +251,7 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cname, typ) -> match Marked.unmark typ with - | Dcalc.Ast.TTuple (_, None) -> + | TTuple (_, None) -> Cli.error_print "Tuples aren't supported yet in the conversion to JS" | _ -> @@ -275,10 +276,10 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cname, typ) -> match Marked.unmark typ with - | Dcalc.Ast.TTuple (_, None) -> + | TTuple (_, None) -> Cli.error_print "Tuples aren't yet supported in the conversion to JS..." - | Dcalc.Ast.TLit TUnit -> + | TLit TUnit -> Format.fprintf fmt "@[| \"%a\" ->@ %a.%a ()@]" format_enum_cons_name cname fmt_module_enum_name () format_enum_cons_name cname @@ -329,8 +330,8 @@ module To_jsoo = struct let scope_structs = List.map (fun (s, _) -> Scopelang.Dependency.TVertex.Struct s) - (Dcalc.Ast.StructMap.bindings - (Dcalc.Ast.StructMap.filter + (StructMap.bindings + (StructMap.filter (fun s _ -> not (is_in_type_ordering s)) ctx.ctx_structs)) in @@ -343,19 +344,19 @@ module To_jsoo = struct Format.fprintf fmt "%a@\n" format_enum_decl (e, find_enum e ctx)) (type_ordering @ scope_structs) - let fmt_input_struct_name fmt (scope_def : ('a expr, 'm) D.scope_def) = + let fmt_input_struct_name fmt (scope_def : ('a expr, 'm) scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_input_struct - let fmt_output_struct_name fmt (scope_def : ('a expr, 'm) D.scope_def) = + let fmt_output_struct_name fmt (scope_def : ('a expr, 'm) scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_output_struct let rec format_scopes_to_fun - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : ('expr, 'm) Dcalc.Ast.scopes) = + (scopes : ('expr, 'm) scopes) = match scopes with - | Dcalc.Ast.Nil -> () - | Dcalc.Ast.ScopeDef scope_def -> + | Nil -> () + | ScopeDef scope_def -> let scope_var, scope_next = Bindlib.unbind scope_def.scope_next in let fmt_fun_call fmt _ = Format.fprintf fmt "@[%a@ |> %a_of_jsoo@ |> %a@ |> %a_to_jsoo@]" @@ -369,12 +370,12 @@ module To_jsoo = struct fmt_fun_call () (format_scopes_to_fun ctx) scope_next let rec format_scopes_to_callbacks - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : ('expr, 'm) Dcalc.Ast.scopes) : unit = + (scopes : ('expr, 'm) scopes) : unit = match scopes with - | Dcalc.Ast.Nil -> () - | Dcalc.Ast.ScopeDef scope_def -> + | Nil -> () + | ScopeDef scope_def -> let scope_var, scope_next = Bindlib.unbind scope_def.scope_next in let fmt_meth_name fmt _ = Format.fprintf fmt "method %a : (%a Js.t -> %a Js.t) Js.callback" diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 63624cac..240fbc41 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -22,6 +22,7 @@ let extension = "_schema.json" open Utils open String_common +open Shared_ast open Lcalc.Ast open Lcalc.To_ocaml module D = Dcalc.Ast @@ -37,9 +38,9 @@ module To_json = struct let format_struct_field_name_camel_case (fmt : Format.formatter) - (v : Dcalc.Ast.StructFieldName.t) : unit = + (v : StructFieldName.t) : unit = let s = - Format.asprintf "%a" Dcalc.Ast.StructFieldName.format_t v + Format.asprintf "%a" StructFieldName.format_t v |> to_ascii |> to_snake_case |> avoid_keywords @@ -48,18 +49,18 @@ module To_json = struct Format.fprintf fmt "%s" s let rec find_scope_def (target_name : string) : - ('m expr, 'm) D.scopes -> ('m expr, 'm) D.scope_def option = function - | D.Nil -> None - | D.ScopeDef scope_def -> + ('m expr, 'm) scopes -> ('m expr, 'm) scope_def option = function + | Nil -> None + | ScopeDef scope_def -> let name = - Format.asprintf "%a" D.ScopeName.format_t scope_def.scope_name + Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in if name = target_name then Some scope_def else let _, next_scope = Bindlib.unbind scope_def.scope_next in find_scope_def target_name next_scope - let fmt_tlit fmt (tlit : D.typ_lit) = + let fmt_tlit fmt (tlit : typ_lit) = match tlit with | TUnit -> Format.fprintf fmt "\"type\": \"null\",@\n\"default\": null" | TInt | TRat -> Format.fprintf fmt "\"type\": \"number\",@\n\"default\": 0" @@ -70,15 +71,15 @@ module To_json = struct | TDate -> Format.fprintf fmt "\"type\": \"string\",@\n\"format\": \"date\"" | TDuration -> failwith "TODO: tlit duration" - let rec fmt_type fmt (typ : D.marked_typ) = + let rec fmt_type fmt (typ : marked_typ) = match Marked.unmark typ with - | D.TLit tlit -> fmt_tlit fmt tlit - | D.TTuple (_, Some sname) -> + | TLit tlit -> fmt_tlit fmt tlit + | TTuple (_, Some sname) -> Format.fprintf fmt "\"$ref\": \"#/definitions/%a\"" format_struct_name sname - | D.TEnum (_, ename) -> + | TEnum (_, ename) -> Format.fprintf fmt "\"$ref\": \"#/definitions/%a\"" format_enum_name ename - | D.TArray t -> + | TArray t -> Format.fprintf fmt "\"type\": \"array\",@\n\ \"default\": [],@\n\ @@ -89,9 +90,9 @@ module To_json = struct | _ -> () let fmt_struct_properties - (ctx : D.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) - (sname : D.StructName.t) = + (sname : StructName.t) = Format.fprintf fmt "%a" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@\n") @@ -101,26 +102,26 @@ module To_json = struct (find_struct sname ctx) let fmt_definitions - (ctx : D.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) - (scope_def : ('m expr, 'm) D.scope_def) = + (scope_def : ('m expr, 'm) scope_def) = let get_name t = match Marked.unmark t with - | D.TTuple (_, Some sname) -> + | TTuple (_, Some sname) -> Format.asprintf "%a" format_struct_name sname - | D.TEnum (_, ename) -> Format.asprintf "%a" format_enum_name ename + | TEnum (_, ename) -> Format.asprintf "%a" format_enum_name ename | _ -> failwith "unreachable: only structs and enums are collected." in let rec collect_required_type_defs_from_scope_input - (input_struct : D.StructName.t) : D.marked_typ list = - let rec collect (acc : D.marked_typ list) (t : D.marked_typ) : - D.marked_typ list = + (input_struct : StructName.t) : marked_typ list = + let rec collect (acc : marked_typ list) (t : marked_typ) : + marked_typ list = match Marked.unmark t with - | D.TTuple (_, Some s) -> + | TTuple (_, Some s) -> (* Scope's input is a struct. *) (t :: acc) @ collect_required_type_defs_from_scope_input s - | D.TEnum (ts, _) -> List.fold_left collect (t :: acc) ts - | D.TArray t -> collect acc t + | TEnum (ts, _) -> List.fold_left collect (t :: acc) ts + | TArray t -> collect acc t | _ -> acc in find_struct input_struct ctx @@ -177,7 +178,7 @@ module To_json = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@\n") (fun fmt typ -> match Marked.unmark typ with - | D.TTuple (_, Some sname) -> + | TTuple (_, Some sname) -> Format.fprintf fmt "@[\"%a\": {@\n\ \"type\": \"object\",@\n\ @@ -188,7 +189,7 @@ module To_json = struct format_struct_name sname (fmt_struct_properties ctx) sname - | D.TEnum (_, ename) -> + | TEnum (_, ename) -> Format.fprintf fmt "@[\"%a\": {@\n\ \"type\": \"object\",@\n\ diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index e4f36a34..ead57cd4 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast module D = Dcalc.Ast module L = Lcalc.Ast module TopLevelName = Uid.Make (Uid.MarkedString) () @@ -27,24 +28,24 @@ let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) type expr = | EVar of LocalName.t | EFunc of TopLevelName.t - | EStruct of expr Marked.pos list * D.StructName.t - | EStructFieldAccess of expr Marked.pos * D.StructFieldName.t * D.StructName.t - | EInj of expr Marked.pos * D.EnumConstructor.t * D.EnumName.t + | EStruct of expr Marked.pos list * StructName.t + | EStructFieldAccess of expr Marked.pos * StructFieldName.t * StructName.t + | EInj of expr Marked.pos * EnumConstructor.t * EnumName.t | EArray of expr Marked.pos list | ELit of L.lit | EApp of expr Marked.pos * expr Marked.pos list - | EOp of Dcalc.Ast.operator + | EOp of operator type stmt = | SInnerFuncDef of LocalName.t Marked.pos * func - | SLocalDecl of LocalName.t Marked.pos * D.typ Marked.pos + | SLocalDecl of LocalName.t Marked.pos * typ Marked.pos | SLocalDef of LocalName.t Marked.pos * expr Marked.pos - | STryExcept of block * L.except * block - | SRaise of L.except + | STryExcept of block * except * block + | SRaise of except | SIfThenElse of expr Marked.pos * block * block | SSwitch of expr Marked.pos - * D.EnumName.t + * EnumName.t * (block (* Statements corresponding to arm closure body*) * (* Variable instantiated with enum payload *) LocalName.t) list (** Each block corresponds to one case of the enum *) @@ -54,14 +55,14 @@ type stmt = and block = stmt Marked.pos list and func = { - func_params : (LocalName.t Marked.pos * D.typ Marked.pos) list; + func_params : (LocalName.t Marked.pos * typ Marked.pos) list; func_body : block; } type scope_body = { - scope_body_name : Dcalc.Ast.ScopeName.t; + scope_body_name : ScopeName.t; scope_body_var : TopLevelName.t; scope_body_func : func; } -type program = { decl_ctx : D.decl_ctx; scopes : scope_body list } +type program = { decl_ctx : decl_ctx; scopes : scope_body list } diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 51c4d73a..b17821be 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -22,7 +22,7 @@ module D = Dcalc.Ast type 'm ctxt = { func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t; - decl_ctx : D.decl_ctx; + decl_ctx : decl_ctx; var_dict : ('m L.expr, A.LocalName.t) Var.Map.t; inside_definition_of : A.LocalName.t option; context_name : string; @@ -33,13 +33,13 @@ type 'm ctxt = { let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : A.block * A.expr Marked.pos = match Marked.unmark expr with - | L.EVar v -> + | EVar v -> let local_var = try A.EVar (Var.Map.find v ctxt.var_dict) with Not_found -> A.EFunc (Var.Map.find v ctxt.func_dict) in - [], (local_var, D.pos expr) - | L.ETuple (args, Some s_name) -> + [], (local_var, Expr.pos expr) + | ETuple (args, Some s_name) -> let args_stmts, new_args = List.fold_left (fun (args_stmts, new_args) arg -> @@ -49,25 +49,25 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : in let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in - args_stmts, (A.EStruct (new_args, s_name), D.pos expr) - | L.ETuple (_, None) -> + args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) + | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" - | L.ETupleAccess (e1, num_field, Some s_name, _) -> + | ETupleAccess (e1, num_field, Some s_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let field_name = fst - (List.nth (D.StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) + (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) in - e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), D.pos expr) - | L.ETupleAccess (_, _, None, _) -> + e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) + | ETupleAccess (_, _, None, _) -> failwith "Non-struct tuples cannot be compiled to scalc" - | L.EInj (e1, num_cons, e_name, _) -> + | EInj (e1, num_cons, e_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let cons_name = - fst (List.nth (D.EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) + fst (List.nth (EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) in - e1_stmts, (A.EInj (new_e1, cons_name, e_name), D.pos expr) - | L.EApp (f, args) -> + e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos expr) + | EApp (f, args) -> let f_stmts, new_f = translate_expr ctxt f in let args_stmts, new_args = List.fold_left @@ -77,8 +77,8 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : ([], []) args in let new_args = List.rev new_args in - f_stmts @ args_stmts, (A.EApp (new_f, new_args), D.pos expr) - | L.EArray args -> + f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos expr) + | EArray args -> let args_stmts, new_args = List.fold_left (fun (args_stmts, new_args) arg -> @@ -87,9 +87,9 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : ([], []) args in let new_args = List.rev new_args in - args_stmts, (A.EArray new_args, D.pos expr) - | L.EOp op -> [], (A.EOp op, D.pos expr) - | L.ELit l -> [], (A.ELit l, D.pos expr) + args_stmts, (A.EArray new_args, Expr.pos expr) + | EOp op -> [], (A.EOp op, Expr.pos expr) + | ELit l -> [], (A.ELit l, Expr.pos expr) | _ -> let tmp_var = A.LocalName.fresh @@ -102,7 +102,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : let v = Marked.unmark (A.LocalName.get_info v) in let tmp_rex = Re.Pcre.regexp "^temp_" in if Re.Pcre.pmatch ~rex:tmp_rex v then v else "temp_" ^ v), - D.pos expr ) + Expr.pos expr ) in let ctxt = { @@ -112,20 +112,20 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : } in let tmp_stmts = translate_statements ctxt expr in - ( (A.SLocalDecl ((tmp_var, D.pos expr), (D.TAny, D.pos expr)), D.pos expr) + ( (A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), Expr.pos expr) :: tmp_stmts, - (A.EVar tmp_var, D.pos expr) ) + (A.EVar tmp_var, Expr.pos expr) ) and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : A.block = match Marked.unmark block_expr with - | L.EAssert e -> + | EAssert e -> (* Assertions are always encapsulated in a unit-typed let binding *) let e_stmts, new_e = translate_expr ctxt e in - e_stmts @ [A.SAssert (Marked.unmark new_e), D.pos block_expr] - | L.EApp ((L.EAbs (binder, taus), binder_mark), args) -> + e_stmts @ [A.SAssert (Marked.unmark new_e), Expr.pos block_expr] + | EApp ((EAbs (binder, taus), binder_mark), args) -> (* This defines multiple local variables at the time *) - let binder_pos = D.mark_pos binder_mark in + let binder_pos = Expr.mark_pos binder_mark in let vars, body = Bindlib.unmbind binder in let vars_tau = List.map2 (fun x tau -> x, tau) (Array.to_list vars) taus in let ctxt = @@ -170,13 +170,13 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : in let rest_of_block = translate_statements ctxt body in local_decls @ List.flatten def_blocks @ rest_of_block - | L.EAbs (binder, taus) -> + | EAbs (binder, taus) -> let vars, body = Bindlib.unmbind binder in - let binder_pos = D.pos block_expr in + let binder_pos = Expr.pos block_expr in let vars_tau = List.map2 (fun x tau -> x, tau) (Array.to_list vars) taus in let closure_name = match ctxt.inside_definition_of with - | None -> A.LocalName.fresh (ctxt.context_name, D.pos block_expr) + | None -> A.LocalName.fresh (ctxt.context_name, Expr.pos block_expr) | Some x -> x in let ctxt = @@ -206,18 +206,18 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : } ), binder_pos ); ] - | L.EMatch (e1, args, e_name) -> + | EMatch (e1, args, e_name) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let new_args = List.fold_left (fun new_args arg -> match Marked.unmark arg with - | L.EAbs (binder, _) -> + | EAbs (binder, _) -> let vars, body = Bindlib.unmbind binder in assert (Array.length vars = 1); let var = vars.(0) in let scalc_var = - A.LocalName.fresh (Bindlib.name_of var, D.pos arg) + A.LocalName.fresh (Bindlib.name_of var, Expr.pos arg) in let ctxt = { ctxt with var_dict = Var.Map.add var scalc_var ctxt.var_dict } @@ -229,17 +229,17 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : [] args in let new_args = List.rev new_args in - e1_stmts @ [A.SSwitch (new_e1, e_name, new_args), D.pos block_expr] - | L.EIfThenElse (cond, e_true, e_false) -> + e1_stmts @ [A.SSwitch (new_e1, e_name, new_args), Expr.pos block_expr] + | EIfThenElse (cond, e_true, e_false) -> let cond_stmts, s_cond = translate_expr ctxt cond in let s_e_true = translate_statements ctxt e_true in let s_e_false = translate_statements ctxt e_false in - cond_stmts @ [A.SIfThenElse (s_cond, s_e_true, s_e_false), D.pos block_expr] - | L.ECatch (e_try, except, e_catch) -> + cond_stmts @ [A.SIfThenElse (s_cond, s_e_true, s_e_false), Expr.pos block_expr] + | ECatch (e_try, except, e_catch) -> let s_e_try = translate_statements ctxt e_try in let s_e_catch = translate_statements ctxt e_catch in - [A.STryExcept (s_e_try, except, s_e_catch), D.pos block_expr] - | L.ERaise except -> + [A.STryExcept (s_e_try, except, s_e_catch), Expr.pos block_expr] + | ERaise except -> (* Before raising the exception, we still give a dummy definition to the current variable so that tools like mypy don't complain. *) (match ctxt.inside_definition_of with @@ -247,10 +247,10 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : | Some x -> [ ( A.SLocalDef - ((x, D.pos block_expr), (Ast.EVar Ast.dead_value, D.pos block_expr)), - D.pos block_expr ); + ((x, Expr.pos block_expr), (Ast.EVar Ast.dead_value, Expr.pos block_expr)), + Expr.pos block_expr ); ]) - @ [A.SRaise except, D.pos block_expr] + @ [A.SRaise except, Expr.pos block_expr] | _ -> ( let e_stmts, new_e = translate_expr ctxt block_expr in e_stmts @@ -266,15 +266,15 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : ( (match ctxt.inside_definition_of with | None -> A.SReturn (Marked.unmark new_e) | Some x -> A.SLocalDef (Marked.same_mark_as x new_e, new_e)), - D.pos block_expr ); + Expr.pos block_expr ); ]) let rec translate_scope_body_expr - (scope_name : D.ScopeName.t) - (decl_ctx : D.decl_ctx) + (scope_name : ScopeName.t) + (decl_ctx : decl_ctx) (var_dict : ('m L.expr, A.LocalName.t) Var.Map.t) (func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t) - (scope_expr : ('m L.expr, 'm) D.scope_body_expr) : A.block = + (scope_expr : ('m L.expr, 'm) scope_body_expr) : A.block = match scope_expr with | Result e -> let block, new_e = @@ -284,7 +284,7 @@ let rec translate_scope_body_expr func_dict; var_dict; inside_definition_of = None; - context_name = Marked.unmark (D.ScopeName.get_info scope_name); + context_name = Marked.unmark (ScopeName.get_info scope_name); } e in @@ -296,14 +296,14 @@ let rec translate_scope_body_expr in let new_var_dict = Var.Map.add let_var let_var_id var_dict in (match scope_let.scope_let_kind with - | D.Assertion -> + | Assertion -> translate_statements { decl_ctx; func_dict; var_dict; inside_definition_of = Some let_var_id; - context_name = Marked.unmark (D.ScopeName.get_info scope_name); + context_name = Marked.unmark (ScopeName.get_info scope_name); } scope_let.scope_let_expr | _ -> @@ -314,7 +314,7 @@ let rec translate_scope_body_expr func_dict; var_dict; inside_definition_of = Some let_var_id; - context_name = Marked.unmark (D.ScopeName.get_info scope_name); + context_name = Marked.unmark (ScopeName.get_info scope_name); } scope_let.scope_let_expr in @@ -331,16 +331,16 @@ let rec translate_scope_body_expr let translate_program (p : 'm L.program) : A.program = { - decl_ctx = p.D.decl_ctx; + decl_ctx = p.decl_ctx; scopes = (let _, new_scopes = - D.fold_left_scope_defs + Expr.fold_left_scope_defs ~f:(fun (func_dict, new_scopes) scope_def scope_var -> let scope_input_var, scope_body_expr = Bindlib.unbind scope_def.scope_body.scope_body_expr in let input_pos = - Marked.get_mark (D.ScopeName.get_info scope_def.scope_name) + Marked.get_mark (ScopeName.get_info scope_def.scope_name) in let scope_input_var_id = A.LocalName.fresh (Bindlib.name_of scope_input_var, input_pos) @@ -349,7 +349,7 @@ let translate_program (p : 'm L.program) : A.program = Var.Map.singleton scope_input_var scope_input_var_id in let new_scope_body = - translate_scope_body_expr scope_def.D.scope_name p.decl_ctx + translate_scope_body_expr scope_def.scope_name p.decl_ctx var_dict func_dict scope_body_expr in let func_id = @@ -358,22 +358,22 @@ let translate_program (p : 'm L.program) : A.program = let func_dict = Var.Map.add scope_var func_id func_dict in ( func_dict, { - Ast.scope_body_name = scope_def.D.scope_name; + Ast.scope_body_name = scope_def.scope_name; Ast.scope_body_var = func_id; scope_body_func = { A.func_params = [ ( (scope_input_var_id, input_pos), - ( D.TTuple + ( TTuple ( List.map snd - (D.StructMap.find - scope_def.D.scope_body - .D.scope_body_input_struct - p.D.decl_ctx.ctx_structs), + (StructMap.find + scope_def.scope_body + .scope_body_input_struct + p.decl_ctx.ctx_structs), Some - scope_def.D.scope_body - .D.scope_body_input_struct ), + scope_def.scope_body + .scope_body_input_struct ), input_pos ) ); ]; A.func_body = new_scope_body; @@ -385,7 +385,7 @@ let translate_program (p : 'm L.program) : A.program = Var.Map.singleton L.handle_default_opt A.handle_default_opt else Var.Map.singleton L.handle_default A.handle_default), [] ) - p.D.scopes + p.scopes in List.rev new_scopes); } diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 44ff6487..052e8315 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast open Ast let needs_parens (_e : expr Marked.pos) : bool = false @@ -24,7 +25,7 @@ let format_local_name (fmt : Format.formatter) (v : LocalName.t) : unit = (string_of_int (LocalName.hash v)) let rec format_expr - (decl_ctx : Dcalc.Ast.decl_ctx) + (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) (e : expr Marked.pos) : unit = @@ -39,17 +40,17 @@ let rec format_expr | EVar v -> Format.fprintf fmt "%a" format_local_name v | EFunc v -> Format.fprintf fmt "%a" TopLevelName.format_t v | EStruct (es, s) -> - Format.fprintf fmt "@[%a@ %a%a%a@]" Dcalc.Ast.StructName.format_t s + Format.fprintf fmt "@[%a@ %a%a%a@]" StructName.format_t s Dcalc.Print.format_punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a %a" Dcalc.Print.format_punctuation "\"" - Dcalc.Ast.StructFieldName.format_t struct_field + StructFieldName.format_t struct_field Dcalc.Print.format_punctuation "\"" Dcalc.Print.format_punctuation ":" format_expr e)) (List.combine es - (List.map fst (Dcalc.Ast.StructMap.find s decl_ctx.ctx_structs))) + (List.map fst (StructMap.find s decl_ctx.ctx_structs))) Dcalc.Print.format_punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" Dcalc.Print.format_punctuation "[" @@ -60,24 +61,24 @@ let rec format_expr | EStructFieldAccess (e1, field, s) -> Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Dcalc.Print.format_punctuation "." Dcalc.Print.format_punctuation "\"" - Dcalc.Ast.StructFieldName.format_t + StructFieldName.format_t (fst (List.find (fun (field', _) -> - Dcalc.Ast.StructFieldName.compare field' field = 0) - (Dcalc.Ast.StructMap.find s decl_ctx.ctx_structs))) + StructFieldName.compare field' field = 0) + (StructMap.find s decl_ctx.ctx_structs))) Dcalc.Print.format_punctuation "\"" | EInj (e, case, enum) -> Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_enum_constructor (fst (List.find - (fun (case', _) -> Dcalc.Ast.EnumConstructor.compare case' case = 0) - (Dcalc.Ast.EnumMap.find enum decl_ctx.ctx_enums))) + (fun (case', _) -> EnumConstructor.compare case' case = 0) + (EnumMap.find enum decl_ctx.ctx_enums))) format_expr e | ELit l -> Format.fprintf fmt "%a" Lcalc.Print.format_lit (Marked.same_mark_as l e) | EApp - ((EOp (Binop ((Dcalc.Ast.Map | Dcalc.Ast.Filter) as op)), _), [arg1; arg2]) + ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" Dcalc.Print.format_binop op format_with_parens arg1 format_with_parens arg2 @@ -100,7 +101,7 @@ let rec format_expr | EOp (Unop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_unop op let rec format_statement - (decl_ctx : Dcalc.Ast.decl_ctx) + (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) (stmt : stmt Marked.pos) : unit = @@ -174,10 +175,10 @@ let rec format_statement Dcalc.Print.format_punctuation "→" (format_block decl_ctx ~debug) arm_block)) - (List.combine (Dcalc.Ast.EnumMap.find enum decl_ctx.ctx_enums) arms) + (List.combine (EnumMap.find enum decl_ctx.ctx_enums) arms) and format_block - (decl_ctx : Dcalc.Ast.decl_ctx) + (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) (block : block) : unit = @@ -188,7 +189,7 @@ and format_block fmt block let format_scope - (decl_ctx : Dcalc.Ast.decl_ctx) + (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) (body : scope_body) : unit = diff --git a/compiler/scalc/print.mli b/compiler/scalc/print.mli index b2a5a0fe..512694bb 100644 --- a/compiler/scalc/print.mli +++ b/compiler/scalc/print.mli @@ -15,7 +15,7 @@ the License. *) val format_scope : - Dcalc.Ast.decl_ctx -> + Shared_ast.decl_ctx -> ?debug:bool -> Format.formatter -> Ast.scope_body -> diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index 38ae02f3..a55e34a1 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -16,6 +16,7 @@ [@@@warning "-32-27"] open Utils +open Shared_ast open Ast open String_common module Runtime = Runtime_ocaml.Runtime @@ -31,7 +32,7 @@ let format_lit (fmt : Format.formatter) (l : L.lit Marked.pos) : unit = | LUnit -> Format.fprintf fmt "Unit()" | LRat i -> Format.fprintf fmt "decimal_of_string(\"%a\")" Dcalc.Print.format_lit - (Dcalc.Ast.LRat i) + (LRat i) | LMoney e -> Format.fprintf fmt "money_of_cents_string(\"%s\")" (Runtime.integer_to_string (Runtime.money_to_cents e)) @@ -44,7 +45,7 @@ let format_lit (fmt : Format.formatter) (l : L.lit Marked.pos) : unit = let years, months, days = Runtime.duration_to_years_months_days d in Format.fprintf fmt "duration_of_numbers(%d,%d,%d)" years months days -let format_log_entry (fmt : Format.formatter) (entry : Dcalc.Ast.log_entry) : +let format_log_entry (fmt : Format.formatter) (entry : log_entry) : unit = match entry with | VarDef _ -> Format.fprintf fmt ":=" @@ -52,13 +53,13 @@ let format_log_entry (fmt : Format.formatter) (entry : Dcalc.Ast.log_entry) : | EndCall -> Format.fprintf fmt "%s" "← " | PosRecordIfTrueBool -> Format.fprintf fmt "☛ " -let format_binop (fmt : Format.formatter) (op : Dcalc.Ast.binop Marked.pos) : +let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : unit = match Marked.unmark op with | Add _ | Concat -> Format.fprintf fmt "+" | Sub _ -> Format.fprintf fmt "-" | Mult _ -> Format.fprintf fmt "*" - | Div D.KInt -> Format.fprintf fmt "//" + | Div KInt -> Format.fprintf fmt "//" | Div _ -> Format.fprintf fmt "/" | And -> Format.fprintf fmt "and" | Or -> Format.fprintf fmt "or" @@ -71,7 +72,7 @@ let format_binop (fmt : Format.formatter) (op : Dcalc.Ast.binop Marked.pos) : | Map -> Format.fprintf fmt "list_map" | Filter -> Format.fprintf fmt "list_filter" -let format_ternop (fmt : Format.formatter) (op : Dcalc.Ast.ternop Marked.pos) : +let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : unit = match Marked.unmark op with Fold -> Format.fprintf fmt "list_fold_left" @@ -94,7 +95,7 @@ let format_string_list (fmt : Format.formatter) (uids : string list) : unit = (Re.replace sanitize_quotes ~f:(fun _ -> "\\\"") info))) uids -let format_unop (fmt : Format.formatter) (op : Dcalc.Ast.unop Marked.pos) : unit +let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit = match Marked.unmark op with | Minus _ -> Format.fprintf fmt "-" @@ -127,43 +128,43 @@ let avoid_keywords (s : string) : string = then s ^ "_" else s -let format_struct_name (fmt : Format.formatter) (v : Dcalc.Ast.StructName.t) : +let format_struct_name (fmt : Format.formatter) (v : StructName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords (to_camel_case - (to_ascii (Format.asprintf "%a" Dcalc.Ast.StructName.format_t v)))) + (to_ascii (Format.asprintf "%a" StructName.format_t v)))) let format_struct_field_name (fmt : Format.formatter) - (v : Dcalc.Ast.StructFieldName.t) : unit = + (v : StructFieldName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_ascii (Format.asprintf "%a" Dcalc.Ast.StructFieldName.format_t v))) + (to_ascii (Format.asprintf "%a" StructFieldName.format_t v))) -let format_enum_name (fmt : Format.formatter) (v : Dcalc.Ast.EnumName.t) : unit +let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords (to_camel_case - (to_ascii (Format.asprintf "%a" Dcalc.Ast.EnumName.format_t v)))) + (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) let format_enum_cons_name (fmt : Format.formatter) - (v : Dcalc.Ast.EnumConstructor.t) : unit = + (v : EnumConstructor.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_ascii (Format.asprintf "%a" Dcalc.Ast.EnumConstructor.format_t v))) + (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let typ_needs_parens (e : Dcalc.Ast.typ Marked.pos) : bool = +let typ_needs_parens (e : typ Marked.pos) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : Dcalc.Ast.typ Marked.pos) : +let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = let format_typ = format_typ in let format_typ_with_parens (fmt : Format.formatter) - (t : Dcalc.Ast.typ Marked.pos) = + (t : typ Marked.pos) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -182,7 +183,7 @@ let rec format_typ (fmt : Format.formatter) (typ : Dcalc.Ast.typ Marked.pos) : (fun fmt t -> Format.fprintf fmt "%a" format_typ_with_parens t)) ts | TTuple (_, Some s) -> Format.fprintf fmt "%a" format_struct_name s - | TEnum ([_; some_typ], e) when D.EnumName.compare e L.option_enum = 0 -> + | TEnum ([_; some_typ], e) when EnumName.compare e L.option_enum = 0 -> (* We translate the option type with an overloading by Python's [None] *) Format.fprintf fmt "Optional[%a]" format_typ some_typ | TEnum (_, e) -> Format.fprintf fmt "%a" format_enum_name e @@ -251,7 +252,7 @@ let needs_parens (e : expr Marked.pos) : bool = | ELit (LBool _ | LUnit) | EVar _ | EOp _ -> false | _ -> true -let format_exception (fmt : Format.formatter) (exc : L.except Marked.pos) : unit +let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let pos = Marked.get_mark exc in match Marked.unmark exc with @@ -275,7 +276,7 @@ let format_exception (fmt : Format.formatter) (exc : L.except Marked.pos) : unit (Pos.get_law_info pos) let rec format_expression - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) (e : expr Marked.pos) : unit = match Marked.unmark e with @@ -289,18 +290,18 @@ let rec format_expression Format.fprintf fmt "%a = %a" format_struct_field_name struct_field (format_expression ctx) e)) (List.combine es - (List.map fst (Dcalc.Ast.StructMap.find s ctx.ctx_structs))) + (List.map fst (StructMap.find s ctx.ctx_structs))) | EStructFieldAccess (e1, field, _) -> Format.fprintf fmt "%a.%a" (format_expression ctx) e1 format_struct_field_name field | EInj (_, cons, e_name) - when D.EnumName.compare e_name L.option_enum = 0 - && D.EnumConstructor.compare cons L.none_constr = 0 -> + when EnumName.compare e_name L.option_enum = 0 + && EnumConstructor.compare cons L.none_constr = 0 -> (* We translate the option type with an overloading by Python's [None] *) Format.fprintf fmt "None" | EInj (e, cons, e_name) - when D.EnumName.compare e_name L.option_enum = 0 - && D.EnumConstructor.compare cons L.some_constr = 0 -> + when EnumName.compare e_name L.option_enum = 0 + && EnumConstructor.compare cons L.some_constr = 0 -> (* We translate the option type with an overloading by Python's [None] *) format_expression ctx fmt e | EInj (e, cons, enum_name) -> @@ -315,22 +316,22 @@ let rec format_expression es | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.same_mark_as l e) | EApp - ((EOp (Binop ((Dcalc.Ast.Map | Dcalc.Ast.Filter) as op)), _), [arg1; arg2]) + ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "%a(%a,@ %a)" format_binop (op, Pos.no_pos) (format_expression ctx) arg1 (format_expression ctx) arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "(%a %a@ %a)" (format_expression ctx) arg1 format_binop (op, Pos.no_pos) (format_expression ctx) arg2 - | EApp ((EApp ((EOp (Unop (D.Log (D.BeginCall, info))), _), [f]), _), [arg]) + | EApp ((EApp ((EOp (Unop (Log (BeginCall, info))), _), [f]), _), [arg]) when !Cli.trace_flag -> Format.fprintf fmt "log_begin_call(%a,@ %a,@ %a)" format_uid_list info (format_expression ctx) f (format_expression ctx) arg - | EApp ((EOp (Unop (D.Log (D.VarDef tau, info))), _), [arg1]) + | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_variable_definition(%a,@ %a)" format_uid_list info (format_expression ctx) arg1 - | EApp ((EOp (Unop (D.Log (D.PosRecordIfTrueBool, _))), pos), [arg1]) + | EApp ((EOp (Unop (Log (PosRecordIfTrueBool, _))), pos), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_decision_taken(SourcePosition(filename=\"%s\",@ start_line=%d,@ \ @@ -338,11 +339,11 @@ let rec format_expression (Pos.get_file pos) (Pos.get_start_line pos) (Pos.get_start_column pos) (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) (format_expression ctx) arg1 - | EApp ((EOp (Unop (D.Log (D.EndCall, info))), _), [arg1]) + | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_end_call(%a,@ %a)" format_uid_list info (format_expression ctx) arg1 - | EApp ((EOp (Unop (D.Log _)), _), [arg1]) -> + | EApp ((EOp (Unop (Log _)), _), [arg1]) -> Format.fprintf fmt "%a" (format_expression ctx) arg1 | EApp ((EOp (Unop ((Minus _ | Not) as op)), _), [arg1]) -> Format.fprintf fmt "%a %a" format_unop (op, Pos.no_pos) @@ -374,7 +375,7 @@ let rec format_expression | EOp (Unop op) -> Format.fprintf fmt "%a" format_unop (op, Pos.no_pos) let rec format_statement - (ctx : Dcalc.Ast.decl_ctx) + (ctx : decl_ctx) (fmt : Format.formatter) (s : stmt Marked.pos) : unit = match Marked.unmark s with @@ -403,7 +404,7 @@ let rec format_statement Format.fprintf fmt "@[if %a:@\n%a@]@\n@[else:@\n%a@]" (format_expression ctx) cond (format_block ctx) b1 (format_block ctx) b2 | SSwitch (e1, e_name, [(case_none, _); (case_some, case_some_var)]) - when D.EnumName.compare e_name L.option_enum = 0 -> + when EnumName.compare e_name L.option_enum = 0 -> (* We translate the option type with an overloading by Python's [None] *) let tmp_var = LocalName.fresh ("perhaps_none_arg", Pos.no_pos) in Format.fprintf fmt @@ -421,7 +422,7 @@ let rec format_statement List.map2 (fun (x, y) (cons, _) -> x, y, cons) cases - (D.EnumMap.find e_name ctx.ctx_enums) + (EnumMap.find e_name ctx.ctx_enums) in let tmp_var = LocalName.fresh ("match_arg", Pos.no_pos) in Format.fprintf fmt "%a = %a@\n@[if %a@]" format_var tmp_var @@ -450,7 +451,7 @@ let rec format_statement (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) -and format_block (ctx : Dcalc.Ast.decl_ctx) (fmt : Format.formatter) (b : block) +and format_block (ctx : decl_ctx) (fmt : Format.formatter) (b : block) : unit = Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") @@ -462,7 +463,7 @@ and format_block (ctx : Dcalc.Ast.decl_ctx) (fmt : Format.formatter) (b : block) let format_ctx (type_ordering : Scopelang.Dependency.TVertex.t list) (fmt : Format.formatter) - (ctx : D.decl_ctx) : unit = + (ctx : decl_ctx) : unit = let format_struct_decl fmt (struct_name, struct_fields) = Format.fprintf fmt "class %a:@\n\ @@ -562,8 +563,8 @@ let format_ctx let scope_structs = List.map (fun (s, _) -> Scopelang.Dependency.TVertex.Struct s) - (Dcalc.Ast.StructMap.bindings - (Dcalc.Ast.StructMap.filter + (StructMap.bindings + (StructMap.filter (fun s _ -> not (is_in_type_ordering s)) ctx.ctx_structs)) in @@ -572,10 +573,10 @@ let format_ctx match struct_or_enum with | Scopelang.Dependency.TVertex.Struct s -> Format.fprintf fmt "%a@\n@\n" format_struct_decl - (s, Dcalc.Ast.StructMap.find s ctx.Dcalc.Ast.ctx_structs) + (s, StructMap.find s ctx.ctx_structs) | Scopelang.Dependency.TVertex.Enum e -> Format.fprintf fmt "%a@\n@\n" format_enum_decl - (e, Dcalc.Ast.EnumMap.find e ctx.Dcalc.Ast.ctx_enums)) + (e, EnumMap.find e ctx.ctx_enums)) (type_ordering @ scope_structs) let format_program diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index c3b663bf..5197425a 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -15,8 +15,8 @@ the License. *) open Utils -module ScopeName = Dcalc.Ast.ScopeName -module ScopeNameSet : Set.S with type elt = ScopeName.t = Set.Make (ScopeName) +open Shared_ast + module ScopeMap : Map.S with type key = ScopeName.t = Map.Make (ScopeName) module SubScopeName : Uid.Id with type info = Uid.MarkedString.info = @@ -33,17 +33,11 @@ module ScopeVar : Uid.Id with type info = Uid.MarkedString.info = module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) -module StructName = Dcalc.Ast.StructName -module StructMap = Dcalc.Ast.StructMap -module StructFieldName = Dcalc.Ast.StructFieldName module StructFieldMap : Map.S with type key = StructFieldName.t = Map.Make (StructFieldName) module StructFieldMapLift = Bindlib.Lift (StructFieldMap) -module EnumName = Dcalc.Ast.EnumName -module EnumMap = Dcalc.Ast.EnumMap -module EnumConstructor = Dcalc.Ast.EnumConstructor module EnumConstructorMap : Map.S with type key = EnumConstructor.t = Map.Make (EnumConstructor) @@ -71,7 +65,7 @@ Set.Make (struct end) type typ = - | TLit of Dcalc.Ast.typ_lit + | TLit of typ_lit | TStruct of StructName.t | TEnum of EnumName.t | TArrow of typ Marked.pos * typ Marked.pos @@ -114,7 +108,7 @@ and expr = | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * typ Marked.pos list | EApp of marked_expr * marked_expr list - | EOp of Dcalc.Ast.operator + | EOp of operator | EDefault of marked_expr list * marked_expr * marked_expr | EIfThenElse of marked_expr * marked_expr * marked_expr | EArray of marked_expr list @@ -319,9 +313,9 @@ let make_let_in let make_default ?(pos = Pos.no_pos) exceptions just cons = let rec bool_value = function - | ELit (Dcalc.Ast.LBool b), _ -> Some b + | ELit (LBool b), _ -> Some b | EApp ((EOp (Unop (Log (l, _))), _), [e]), _ - when l <> Dcalc.Ast.PosRecordIfTrueBool + when l <> PosRecordIfTrueBool (* we don't remove the log calls corresponding to source code definitions !*) -> bool_value e diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 764aef36..4a95098f 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -17,11 +17,10 @@ (** Abstract syntax tree of the scope language *) open Utils +open Shared_ast (** {1 Identifiers} *) -module ScopeName = Dcalc.Ast.ScopeName -module ScopeNameSet : Set.S with type elt = ScopeName.t module ScopeMap : Map.S with type key = ScopeName.t module SubScopeName : Uid.Id with type info = Uid.MarkedString.info module SubScopeNameSet : Set.S with type elt = SubScopeName.t @@ -29,9 +28,6 @@ module SubScopeMap : Map.S with type key = SubScopeName.t module ScopeVar : Uid.Id with type info = Uid.MarkedString.info module ScopeVarSet : Set.S with type elt = ScopeVar.t module ScopeVarMap : Map.S with type key = ScopeVar.t -module StructName = Dcalc.Ast.StructName -module StructMap = Dcalc.Ast.StructMap -module StructFieldName = Dcalc.Ast.StructFieldName module StructFieldMap : Map.S with type key = StructFieldName.t module StructFieldMapLift : sig @@ -39,9 +35,6 @@ module StructFieldMapLift : sig 'a Bindlib.box StructFieldMap.t -> 'a StructFieldMap.t Bindlib.box end -module EnumName = Dcalc.Ast.EnumName -module EnumMap = Dcalc.Ast.EnumMap -module EnumConstructor = Dcalc.Ast.EnumConstructor module EnumConstructorMap : Map.S with type key = EnumConstructor.t module EnumConstructorMapLift : sig @@ -59,7 +52,7 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) type typ = - | TLit of Dcalc.Ast.typ_lit + | TLit of typ_lit | TStruct of StructName.t | TEnum of EnumName.t | TArrow of typ Marked.pos * typ Marked.pos @@ -82,7 +75,7 @@ and expr = | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * typ Marked.pos list | EApp of marked_expr * marked_expr list - | EOp of Dcalc.Ast.operator + | EOp of operator | EDefault of marked_expr list * marked_expr * marked_expr | EIfThenElse of marked_expr * marked_expr * marked_expr | EArray of marked_expr list diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index 05248304..85b15dfc 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -18,13 +18,14 @@ program. Vertices are functions, x -> y if x is used in the definition of y. *) open Utils +open Shared_ast module SVertex = struct - type t = Ast.ScopeName.t + type t = ScopeName.t - let hash x = Ast.ScopeName.hash x - let compare = Ast.ScopeName.compare - let equal x y = Ast.ScopeName.compare x y = 0 + let hash x = ScopeName.hash x + let compare = ScopeName.compare + let equal x y = ScopeName.compare x y = 0 end (** On the edges, the label is the expression responsible for the use of the @@ -62,10 +63,10 @@ let build_program_dep_graph (prgm : Ast.program) : SDependencies.t = if subscope = scope_name then Errors.raise_spanned_error (Marked.get_mark - (Ast.ScopeName.get_info scope.Ast.scope_decl_name)) + (ScopeName.get_info scope.Ast.scope_decl_name)) "The scope %a is calling into itself as a subscope, which is \ forbidden since Catala does not provide recursion" - Ast.ScopeName.format_t scope.Ast.scope_decl_name + ScopeName.format_t scope.Ast.scope_decl_name else Ast.ScopeMap.add subscope (Marked.get_mark (Ast.SubScopeName.get_info subindex)) @@ -90,14 +91,14 @@ let check_for_cycle_in_scope (g : SDependencies.t) : unit = (List.map (fun v -> let var_str, var_info = - ( Format.asprintf "%a" Ast.ScopeName.format_t v, - Ast.ScopeName.get_info v ) + ( Format.asprintf "%a" ScopeName.format_t v, + ScopeName.get_info v ) in let succs = SDependencies.succ_e g v in let _, edge_pos, succ = List.find (fun (_, _, succ) -> List.mem succ scc) succs in - let succ_str = Format.asprintf "%a" Ast.ScopeName.format_t succ in + let succ_str = Format.asprintf "%a" ScopeName.format_t succ in [ ( Some ("Cycle variable " ^ var_str ^ ", declared:"), Marked.get_mark var_info ); @@ -112,39 +113,39 @@ let check_for_cycle_in_scope (g : SDependencies.t) : unit = Errors.raise_multispanned_error spans "Cyclic dependency detected between scopes!" -let get_scope_ordering (g : SDependencies.t) : Ast.ScopeName.t list = +let get_scope_ordering (g : SDependencies.t) : ScopeName.t list = List.rev (STopologicalTraversal.fold (fun sd acc -> sd :: acc) g []) module TVertex = struct - type t = Struct of Ast.StructName.t | Enum of Ast.EnumName.t + type t = Struct of StructName.t | Enum of EnumName.t let hash x = match x with - | Struct x -> Ast.StructName.hash x - | Enum x -> Ast.EnumName.hash x + | Struct x -> StructName.hash x + | Enum x -> EnumName.hash x let compare x y = match x, y with - | Struct x, Struct y -> Ast.StructName.compare x y - | Enum x, Enum y -> Ast.EnumName.compare x y + | Struct x, Struct y -> StructName.compare x y + | Enum x, Enum y -> EnumName.compare x y | Struct _, Enum _ -> 1 | Enum _, Struct _ -> -1 let equal x y = match x, y with - | Struct x, Struct y -> Ast.StructName.compare x y = 0 - | Enum x, Enum y -> Ast.EnumName.compare x y = 0 + | Struct x, Struct y -> StructName.compare x y = 0 + | Enum x, Enum y -> EnumName.compare x y = 0 | _ -> false let format_t (fmt : Format.formatter) (x : t) : unit = match x with - | Struct x -> Ast.StructName.format_t fmt x - | Enum x -> Ast.EnumName.format_t fmt x + | Struct x -> StructName.format_t fmt x + | Enum x -> EnumName.format_t fmt x let get_info (x : t) = match x with - | Struct x -> Ast.StructName.get_info x - | Enum x -> Ast.EnumName.get_info x + | Struct x -> StructName.get_info x + | Enum x -> EnumName.get_info x end module TVertexSet = Set.Make (TVertex) @@ -181,7 +182,7 @@ let build_type_graph (structs : Ast.struct_ctx) (enums : Ast.enum_ctx) : TDependencies.t = let g = TDependencies.empty in let g = - Ast.StructMap.fold + StructMap.fold (fun s fields g -> List.fold_left (fun g (_, typ) -> @@ -205,7 +206,7 @@ let build_type_graph (structs : Ast.struct_ctx) (enums : Ast.enum_ctx) : structs g in let g = - Ast.EnumMap.fold + EnumMap.fold (fun e cases g -> List.fold_left (fun g (_, typ) -> diff --git a/compiler/scopelang/dependency.mli b/compiler/scopelang/dependency.mli index 01c147c7..0414b1ae 100644 --- a/compiler/scopelang/dependency.mli +++ b/compiler/scopelang/dependency.mli @@ -18,25 +18,26 @@ program. Vertices are functions, x -> y if x is used in the definition of y. *) open Utils +open Shared_ast (** {1 Scope dependencies} *) (** On the edges, the label is the expression responsible for the use of the function *) module SDependencies : - Graph.Sig.P with type V.t = Ast.ScopeName.t and type E.label = Pos.t + Graph.Sig.P with type V.t = ScopeName.t and type E.label = Pos.t val build_program_dep_graph : Ast.program -> SDependencies.t val check_for_cycle_in_scope : SDependencies.t -> unit -val get_scope_ordering : SDependencies.t -> Ast.ScopeName.t list +val get_scope_ordering : SDependencies.t -> ScopeName.t list (** {1 Type dependencies} *) module TVertex : sig - type t = Struct of Ast.StructName.t | Enum of Ast.EnumName.t + type t = Struct of StructName.t | Enum of EnumName.t val format_t : Format.formatter -> t -> unit - val get_info : t -> Ast.StructName.info + val get_info : t -> StructName.info include Graph.Sig.COMPARABLE with type t := t end diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 68fbb815..0b13425e 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast open Ast let needs_parens (e : expr Marked.pos) : bool = @@ -42,8 +43,8 @@ let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = in match Marked.unmark typ with | TLit l -> Dcalc.Print.format_tlit fmt l - | TStruct s -> Format.fprintf fmt "%a" Ast.StructName.format_t s - | TEnum e -> Format.fprintf fmt "%a" Ast.EnumName.format_t e + | TStruct s -> Format.fprintf fmt "%a" StructName.format_t s + | TEnum e -> Format.fprintf fmt "%a" EnumName.format_t e | TArrow (t1, t2) -> Format.fprintf fmt "@[%a %a@ %a@]" format_typ_with_parens t1 Dcalc.Print.format_operator "→" format_typ t2 @@ -67,14 +68,14 @@ let rec format_expr | EVar v -> Format.fprintf fmt "%a" format_var v | ELit l -> Format.fprintf fmt "%a" Dcalc.Print.format_lit l | EStruct (name, fields) -> - Format.fprintf fmt " @[%a@ %a@ %a@ %a@]" Ast.StructName.format_t name + Format.fprintf fmt " @[%a@ %a@ %a@ %a@]" StructName.format_t name Dcalc.Print.format_punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " Dcalc.Print.format_punctuation ";") (fun fmt (field_name, field_expr) -> Format.fprintf fmt "%a%a%a%a@ %a" Dcalc.Print.format_punctuation "\"" - Ast.StructFieldName.format_t field_name + StructFieldName.format_t field_name Dcalc.Print.format_punctuation "\"" Dcalc.Print.format_punctuation "=" format_expr field_expr)) (Ast.StructFieldMap.bindings fields) @@ -82,9 +83,9 @@ let rec format_expr | EStructAccess (e1, field, _) -> Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Dcalc.Print.format_punctuation "." Dcalc.Print.format_punctuation "\"" - Ast.StructFieldName.format_t field Dcalc.Print.format_punctuation "\"" + StructFieldName.format_t field Dcalc.Print.format_punctuation "\"" | EEnumInj (e1, cons, _) -> - Format.fprintf fmt "%a@ %a" Ast.EnumConstructor.format_t cons format_expr e1 + Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons format_expr e1 | EMatch (e1, _, cases) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" Dcalc.Print.format_keyword "match" format_expr e1 diff --git a/compiler/scopelang/print.mli b/compiler/scopelang/print.mli index ca6b8945..3188ccce 100644 --- a/compiler/scopelang/print.mli +++ b/compiler/scopelang/print.mli @@ -29,7 +29,7 @@ val format_expr : val format_scope : ?debug:bool (** [true] for debug printing *) -> Format.formatter -> - Ast.ScopeName.t * Ast.scope_decl -> + Shared_ast.ScopeName.t * Ast.scope_decl -> unit val format_program : diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index dd336439..3aeb8957 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -19,18 +19,18 @@ open Shared_ast type scope_var_ctx = { scope_var_name : Ast.ScopeVar.t; - scope_var_typ : Dcalc.Ast.typ; + scope_var_typ : typ; scope_var_io : Ast.io; } type scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : Dcalc.Ast.untyped Dcalc.Ast.var; + scope_sig_scope_var : untyped Dcalc.Ast.var; (** Var representing the scope *) - scope_sig_input_var : Dcalc.Ast.untyped Dcalc.Ast.var; + scope_sig_input_var : untyped Dcalc.Ast.var; (** Var representing the scope input inside the scope func *) - scope_sig_input_struct : Ast.StructName.t; (** Scope input *) - scope_sig_output_struct : Ast.StructName.t; (** Scope output *) + scope_sig_input_struct : StructName.t; (** Scope input *) + scope_sig_output_struct : StructName.t; (** Scope output *) } type scope_sigs_ctx = scope_sig_ctx Ast.ScopeMap.t @@ -38,21 +38,21 @@ type scope_sigs_ctx = scope_sig_ctx Ast.ScopeMap.t type ctx = { structs : Ast.struct_ctx; enums : Ast.enum_ctx; - scope_name : Ast.ScopeName.t; + scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; scope_vars : - (Dcalc.Ast.untyped Dcalc.Ast.var * Dcalc.Ast.typ * Ast.io) Ast.ScopeVarMap.t; + (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t; subscope_vars : - (Dcalc.Ast.untyped Dcalc.Ast.var * Dcalc.Ast.typ * Ast.io) Ast.ScopeVarMap.t + (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : Dcalc.Ast.untyped Dcalc.Ast.var Ast.VarMap.t; + local_vars : untyped Dcalc.Ast.var Ast.VarMap.t; } let empty_ctx (struct_ctx : Ast.struct_ctx) (enum_ctx : Ast.enum_ctx) (scopes_ctx : scope_sigs_ctx) - (scope_name : Ast.ScopeName.t) = + (scope_name : ScopeName.t) = { structs = struct_ctx; enums = enum_ctx; @@ -64,62 +64,62 @@ let empty_ctx } let rec translate_typ (ctx : ctx) (t : Ast.typ Marked.pos) : - Dcalc.Ast.typ Marked.pos = + typ Marked.pos = Marked.same_mark_as (match Marked.unmark t with - | Ast.TLit l -> Dcalc.Ast.TLit l + | Ast.TLit l -> TLit l | Ast.TArrow (t1, t2) -> - Dcalc.Ast.TArrow (translate_typ ctx t1, translate_typ ctx t2) + TArrow (translate_typ ctx t1, translate_typ ctx t2) | Ast.TStruct s_uid -> - let s_fields = Ast.StructMap.find s_uid ctx.structs in - Dcalc.Ast.TTuple + let s_fields = StructMap.find s_uid ctx.structs in + TTuple (List.map (fun (_, t) -> translate_typ ctx t) s_fields, Some s_uid) | Ast.TEnum e_uid -> - let e_cases = Ast.EnumMap.find e_uid ctx.enums in - Dcalc.Ast.TEnum + let e_cases = EnumMap.find e_uid ctx.enums in + TEnum (List.map (fun (_, t) -> translate_typ ctx t) e_cases, e_uid) | Ast.TArray t1 -> - Dcalc.Ast.TArray (translate_typ ctx (Marked.same_mark_as t1 t)) - | Ast.TAny -> Dcalc.Ast.TAny) + TArray (translate_typ ctx (Marked.same_mark_as t1 t)) + | Ast.TAny -> TAny) t -let pos_mark (pos : Pos.t) : Dcalc.Ast.untyped Dcalc.Ast.mark = - Dcalc.Ast.Untyped { pos } +let pos_mark (pos : Pos.t) : untyped mark = + Untyped { pos } let pos_mark_as e = pos_mark (Marked.get_mark e) let merge_defaults - (caller : Dcalc.Ast.untyped Dcalc.Ast.marked_expr Bindlib.box) - (callee : Dcalc.Ast.untyped Dcalc.Ast.marked_expr Bindlib.box) : - Dcalc.Ast.untyped Dcalc.Ast.marked_expr Bindlib.box = + (caller : untyped Dcalc.Ast.marked_expr Bindlib.box) + (callee : untyped Dcalc.Ast.marked_expr Bindlib.box) : + untyped Dcalc.Ast.marked_expr Bindlib.box = let caller = let m = Marked.get_mark (Bindlib.unbox caller) in Dcalc.Ast.make_app caller - [Bindlib.box (Dcalc.Ast.ELit Dcalc.Ast.LUnit, m)] + [Bindlib.box (ELit LUnit, m)] m in let body = Bindlib.box_apply2 (fun caller callee -> let m = Marked.get_mark callee in - ( Dcalc.Ast.EDefault - ([caller], (Dcalc.Ast.ELit (Dcalc.Ast.LBool true), m), callee), + ( EDefault + ([caller], (ELit (LBool true), m), callee), m )) caller callee in body let tag_with_log_entry - (e : Dcalc.Ast.untyped Dcalc.Ast.marked_expr Bindlib.box) - (l : Dcalc.Ast.log_entry) + (e : untyped Dcalc.Ast.marked_expr Bindlib.box) + (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - Dcalc.Ast.untyped Dcalc.Ast.marked_expr Bindlib.box = + untyped Dcalc.Ast.marked_expr Bindlib.box = Bindlib.box_apply (fun e -> Marked.same_mark_as - (Dcalc.Ast.EApp + (EApp ( Marked.same_mark_as - (Dcalc.Ast.EOp (Dcalc.Ast.Unop (Dcalc.Ast.Log (l, markings)))) + (EOp (Unop (Log (l, markings)))) e, [e] )) e) @@ -165,15 +165,15 @@ let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : excepts let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : - Dcalc.Ast.untyped Dcalc.Ast.marked_expr Bindlib.box = - Bindlib.box_apply (fun (x : Dcalc.Ast.untyped Dcalc.Ast.expr) -> + untyped Dcalc.Ast.marked_expr Bindlib.box = + Bindlib.box_apply (fun (x : untyped Dcalc.Ast.expr) -> Marked.mark (pos_mark_as e) x) @@ match Marked.unmark e with | EVar v -> Bindlib.box_var (Ast.VarMap.find v ctx.local_vars) - | ELit l -> Bindlib.box (Dcalc.Ast.ELit l) + | ELit l -> Bindlib.box (ELit l) | EStruct (struct_name, e_fields) -> - let struct_sig = Ast.StructMap.find struct_name ctx.structs in + let struct_sig = StructMap.find struct_name ctx.structs in let d_fields, remaining_e_fields = List.fold_right (fun (field_name, _) (d_fields, e_fields) -> @@ -185,58 +185,58 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : if Ast.StructFieldMap.cardinal remaining_e_fields > 0 then Errors.raise_spanned_error (Marked.get_mark e) "The fields \"%a\" do not belong to the structure %a" - Ast.StructName.format_t struct_name + StructName.format_t struct_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") (fun fmt (field_name, _) -> - Format.fprintf fmt "%a" Ast.StructFieldName.format_t field_name)) + Format.fprintf fmt "%a" StructFieldName.format_t field_name)) (Ast.StructFieldMap.bindings remaining_e_fields) else Bindlib.box_apply - (fun d_fields -> Dcalc.Ast.ETuple (d_fields, Some struct_name)) + (fun d_fields -> ETuple (d_fields, Some struct_name)) (Bindlib.box_list d_fields) | EStructAccess (e1, field_name, struct_name) -> - let struct_sig = Ast.StructMap.find struct_name ctx.structs in + let struct_sig = StructMap.find struct_name ctx.structs in let _, field_index = try List.assoc field_name (List.mapi (fun i (x, y) -> x, (y, i)) struct_sig) with Not_found -> Errors.raise_spanned_error (Marked.get_mark e) "The field \"%a\" does not belong to the structure %a" - Ast.StructFieldName.format_t field_name Ast.StructName.format_t + StructFieldName.format_t field_name StructName.format_t struct_name in let e1 = translate_expr ctx e1 in Bindlib.box_apply (fun e1 -> - Dcalc.Ast.ETupleAccess + ETupleAccess ( e1, field_index, Some struct_name, List.map (fun (_, t) -> translate_typ ctx t) struct_sig )) e1 | EEnumInj (e1, constructor, enum_name) -> - let enum_sig = Ast.EnumMap.find enum_name ctx.enums in + let enum_sig = EnumMap.find enum_name ctx.enums in let _, constructor_index = try List.assoc constructor (List.mapi (fun i (x, y) -> x, (y, i)) enum_sig) with Not_found -> Errors.raise_spanned_error (Marked.get_mark e) "The constructor \"%a\" does not belong to the enum %a" - Ast.EnumConstructor.format_t constructor Ast.EnumName.format_t + EnumConstructor.format_t constructor EnumName.format_t enum_name in let e1 = translate_expr ctx e1 in Bindlib.box_apply (fun e1 -> - Dcalc.Ast.EInj + EInj ( e1, constructor_index, enum_name, List.map (fun (_, t) -> translate_typ ctx t) enum_sig )) e1 | EMatch (e1, enum_name, cases) -> - let enum_sig = Ast.EnumMap.find enum_name ctx.enums in + let enum_sig = EnumMap.find enum_name ctx.enums in let d_cases, remaining_e_cases = List.fold_right (fun (constructor, _) (d_cases, e_cases) -> @@ -246,7 +246,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Errors.raise_spanned_error (Marked.get_mark e) "The constructor %a of enum %a is missing from this pattern \ matching" - Ast.EnumConstructor.format_t constructor Ast.EnumName.format_t + EnumConstructor.format_t constructor EnumName.format_t enum_name in let case_d = translate_expr ctx case_e in @@ -256,16 +256,16 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : if Ast.EnumConstructorMap.cardinal remaining_e_cases > 0 then Errors.raise_spanned_error (Marked.get_mark e) "Patter matching is incomplete for enum %a: missing cases %a" - Ast.EnumName.format_t enum_name + EnumName.format_t enum_name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") (fun fmt (case_name, _) -> - Format.fprintf fmt "%a" Ast.EnumConstructor.format_t case_name)) + Format.fprintf fmt "%a" EnumConstructor.format_t case_name)) (Ast.EnumConstructorMap.bindings remaining_e_cases) else let e1 = translate_expr ctx e1 in Bindlib.box_apply2 - (fun d_fields e1 -> Dcalc.Ast.EMatch (e1, d_fields, enum_name)) + (fun d_fields e1 -> EMatch (e1, d_fields, enum_name)) (Bindlib.box_list d_cases) e1 | EApp (e1, args) -> (* We insert various log calls to record arguments and outputs of @@ -274,14 +274,14 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let markings l = match l with | Ast.ScopeVar (v, _) -> - [Ast.ScopeName.get_info ctx.scope_name; Ast.ScopeVar.get_info v] + [ScopeName.get_info ctx.scope_name; Ast.ScopeVar.get_info v] | Ast.SubScopeVar (s, _, (v, _)) -> - [Ast.ScopeName.get_info s; Ast.ScopeVar.get_info v] + [ScopeName.get_info s; Ast.ScopeVar.get_info v] in let e1_func = match Marked.unmark e1 with | ELocation l -> - tag_with_log_entry e1_func Dcalc.Ast.BeginCall (markings l) + tag_with_log_entry e1_func BeginCall (markings l) | _ -> e1_func in let new_args = List.map (translate_expr ctx) args in @@ -293,9 +293,9 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let retrieve_in_and_out_typ_or_any var vars = let _, typ, _ = Ast.ScopeVarMap.find (Marked.unmark var) vars in match typ with - | Dcalc.Ast.TArrow (marked_input_typ, marked_output_typ) -> + | TArrow (marked_input_typ, marked_output_typ) -> Marked.unmark marked_input_typ, Marked.unmark marked_output_typ - | _ -> Dcalc.Ast.TAny, Dcalc.Ast.TAny + | _ -> TAny, TAny in match Marked.unmark e1 with | ELocation (ScopeVar var) -> @@ -304,20 +304,20 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : ctx.subscope_vars |> Ast.SubScopeMap.find (Marked.unmark sname) |> retrieve_in_and_out_typ_or_any var - | _ -> Dcalc.Ast.TAny, Dcalc.Ast.TAny + | _ -> TAny, TAny in let new_args = match Marked.unmark e1, new_args with | ELocation l, [new_arg] -> [ - tag_with_log_entry new_arg (Dcalc.Ast.VarDef input_typ) + tag_with_log_entry new_arg (VarDef input_typ) (markings l @ [Marked.same_mark_as "input" e]); ] | _ -> new_args in let new_e = Bindlib.box_apply2 - (fun e' u -> Dcalc.Ast.EApp (e', u), pos_mark_as e) + (fun e' u -> EApp (e', u), pos_mark_as e) e1_func (Bindlib.box_list new_args) in @@ -325,9 +325,9 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : match Marked.unmark e1 with | ELocation l -> tag_with_log_entry - (tag_with_log_entry new_e (Dcalc.Ast.VarDef output_typ) + (tag_with_log_entry new_e (VarDef output_typ) (markings l @ [Marked.same_mark_as "output" e])) - Dcalc.Ast.EndCall (markings l) + EndCall (markings l) | _ -> new_e in Bindlib.box_apply Marked.unmark new_e @@ -348,12 +348,12 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : in let binder = Bindlib.bind_mvar new_xs body in Bindlib.box_apply - (fun b -> Dcalc.Ast.EAbs (b, List.map (translate_typ ctx) typ)) + (fun b -> EAbs (b, List.map (translate_typ ctx) typ)) binder | EDefault (excepts, just, cons) -> let excepts = collapse_similar_outcomes excepts in Bindlib.box_apply3 - (fun e j c -> Dcalc.Ast.EDefault (e, j, c)) + (fun e j c -> EDefault (e, j, c)) (Bindlib.box_list (List.map (translate_expr ctx) excepts)) (translate_expr ctx just) (translate_expr ctx cons) | ELocation (ScopeVar a) -> @@ -381,16 +381,16 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : (Marked.unmark a) Ast.SubScopeName.format_t (Marked.unmark s)) | EIfThenElse (cond, et, ef) -> Bindlib.box_apply3 - (fun c t f -> Dcalc.Ast.EIfThenElse (c, t, f)) + (fun c t f -> EIfThenElse (c, t, f)) (translate_expr ctx cond) (translate_expr ctx et) (translate_expr ctx ef) - | EOp op -> Bindlib.box (Dcalc.Ast.EOp op) + | EOp op -> Bindlib.box (EOp op) | ErrorOnEmpty e' -> Bindlib.box_apply - (fun e' -> Dcalc.Ast.ErrorOnEmpty e') + (fun e' -> ErrorOnEmpty e') (translate_expr ctx e') | EArray es -> Bindlib.box_apply - (fun es -> Dcalc.Ast.EArray es) + (fun es -> EArray es) (Bindlib.box_list (List.map (translate_expr ctx) es)) (** The result of a rule translation is a list of assignment, with variables and @@ -402,13 +402,13 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - (( Dcalc.Ast.untyped Dcalc.Ast.expr, - Dcalc.Ast.untyped ) - Dcalc.Ast.scope_body_expr + (( untyped Dcalc.Ast.expr, + untyped ) + scope_body_expr Bindlib.box -> - ( Dcalc.Ast.untyped Dcalc.Ast.expr, - Dcalc.Ast.untyped ) - Dcalc.Ast.scope_body_expr + ( untyped Dcalc.Ast.expr, + untyped ) + scope_body_expr Bindlib.box) * ctx = match rule with @@ -421,7 +421,7 @@ let translate_rule let merged_expr = Bindlib.box_apply (fun merged_expr -> - Dcalc.Ast.ErrorOnEmpty merged_expr, pos_mark_as a_name) + ErrorOnEmpty merged_expr, pos_mark_as a_name) (match Marked.unmark a_io.io_input with | OnlyInput -> failwith "should not happen" @@ -432,19 +432,19 @@ let translate_rule in let merged_expr = tag_with_log_entry merged_expr - (Dcalc.Ast.VarDef (Marked.unmark tau)) + (VarDef (Marked.unmark tau)) [sigma_name, pos_sigma; a_name] in ( (fun next -> Bindlib.box_apply2 (fun next merged_expr -> - Dcalc.Ast.ScopeLet + ScopeLet { - Dcalc.Ast.scope_let_next = next; - Dcalc.Ast.scope_let_typ = tau; - Dcalc.Ast.scope_let_expr = merged_expr; - Dcalc.Ast.scope_let_kind = Dcalc.Ast.ScopeVarDefinition; - Dcalc.Ast.scope_let_pos = Marked.get_mark a; + scope_let_next = next; + scope_let_typ = tau; + scope_let_expr = merged_expr; + scope_let_kind = ScopeVarDefinition; + scope_let_pos = Marked.get_mark a; }) (Bindlib.bind_var a_var next) merged_expr), @@ -472,7 +472,7 @@ let translate_rule let tau = translate_typ ctx tau in let new_e = tag_with_log_entry (translate_expr ctx e) - (Dcalc.Ast.VarDef (Marked.unmark tau)) + (VarDef (Marked.unmark tau)) [sigma_name, pos_sigma; a_name] in let silent_var = Var.make "_" in @@ -481,31 +481,31 @@ let translate_rule | NoInput -> failwith "should not happen" | OnlyInput -> Bindlib.box_apply - (fun new_e -> Dcalc.Ast.ErrorOnEmpty new_e, pos_mark_as subs_var) + (fun new_e -> ErrorOnEmpty new_e, pos_mark_as subs_var) new_e | Reentrant -> Dcalc.Ast.make_abs (Array.of_list [silent_var]) new_e - [Dcalc.Ast.TLit TUnit, var_def_pos] + [TLit TUnit, var_def_pos] (pos_mark var_def_pos) in ( (fun next -> Bindlib.box_apply2 (fun next thunked_or_nonempty_new_e -> - Dcalc.Ast.ScopeLet + ScopeLet { - Dcalc.Ast.scope_let_next = next; - Dcalc.Ast.scope_let_pos = Marked.get_mark a_name; - Dcalc.Ast.scope_let_typ = + scope_let_next = next; + scope_let_pos = Marked.get_mark a_name; + scope_let_typ = (match Marked.unmark a_io.io_input with | NoInput -> failwith "should not happen" | OnlyInput -> tau | Reentrant -> - ( Dcalc.Ast.TArrow ((TLit TUnit, var_def_pos), tau), + ( TArrow ((TLit TUnit, var_def_pos), tau), var_def_pos )); - Dcalc.Ast.scope_let_expr = thunked_or_nonempty_new_e; - Dcalc.Ast.scope_let_kind = Dcalc.Ast.SubScopeVarDefinition; + scope_let_expr = thunked_or_nonempty_new_e; + scope_let_kind = SubScopeVarDefinition; }) (Bindlib.bind_var a_var next) thunked_or_nonempty_new_e), @@ -573,7 +573,7 @@ let translate_rule let subscope_struct_arg = Bindlib.box_apply (fun subscope_args -> - ( Dcalc.Ast.ETuple (subscope_args, Some called_scope_input_struct), + ( ETuple (subscope_args, Some called_scope_input_struct), pos_mark pos_call )) (Bindlib.box_list subscope_args) in @@ -593,28 +593,28 @@ let translate_rule tag_with_log_entry (Dcalc.Ast.make_var (scope_dcalc_var, pos_mark_as (Ast.SubScopeName.get_info subindex))) - Dcalc.Ast.BeginCall + BeginCall [ sigma_name, pos_sigma; Ast.SubScopeName.get_info subindex; - Ast.ScopeName.get_info subname; + ScopeName.get_info subname; ] in let call_expr = tag_with_log_entry (Bindlib.box_apply2 - (fun e u -> Dcalc.Ast.EApp (e, [u]), pos_mark Pos.no_pos) + (fun e u -> EApp (e, [u]), pos_mark Pos.no_pos) subscope_func subscope_struct_arg) - Dcalc.Ast.EndCall + EndCall [ sigma_name, pos_sigma; Ast.SubScopeName.get_info subindex; - Ast.ScopeName.get_info subname; + ScopeName.get_info subname; ] in let result_tuple_var = Var.make "result" in let result_tuple_typ = - ( Dcalc.Ast.TTuple + ( TTuple ( List.map (fun (subvar, _) -> subvar.scope_var_typ, pos_sigma) all_subscope_output_vars_dcalc, @@ -624,13 +624,13 @@ let translate_rule let call_scope_let next = Bindlib.box_apply2 (fun next call_expr -> - Dcalc.Ast.ScopeLet + ScopeLet { - Dcalc.Ast.scope_let_next = next; - Dcalc.Ast.scope_let_pos = pos_sigma; - Dcalc.Ast.scope_let_kind = Dcalc.Ast.CallingSubScope; - Dcalc.Ast.scope_let_typ = result_tuple_typ; - Dcalc.Ast.scope_let_expr = call_expr; + scope_let_next = next; + scope_let_pos = pos_sigma; + scope_let_kind = CallingSubScope; + scope_let_typ = result_tuple_typ; + scope_let_expr = call_expr; }) (Bindlib.bind_var result_tuple_var next) call_expr @@ -640,15 +640,15 @@ let translate_rule (fun (var_ctx, v) (next, i) -> ( Bindlib.box_apply2 (fun next r -> - Dcalc.Ast.ScopeLet + ScopeLet { - Dcalc.Ast.scope_let_next = next; - Dcalc.Ast.scope_let_pos = pos_sigma; - Dcalc.Ast.scope_let_typ = var_ctx.scope_var_typ, pos_sigma; - Dcalc.Ast.scope_let_kind = - Dcalc.Ast.DestructuringSubScopeResults; - Dcalc.Ast.scope_let_expr = - ( Dcalc.Ast.ETupleAccess + scope_let_next = next; + scope_let_pos = pos_sigma; + scope_let_typ = var_ctx.scope_var_typ, pos_sigma; + scope_let_kind = + DestructuringSubScopeResults; + scope_let_expr = + ( ETupleAccess ( r, i, Some called_scope_return_struct, @@ -682,20 +682,20 @@ let translate_rule ( (fun next -> Bindlib.box_apply2 (fun next new_e -> - Dcalc.Ast.ScopeLet + ScopeLet { - Dcalc.Ast.scope_let_next = next; - Dcalc.Ast.scope_let_pos = Marked.get_mark e; - Dcalc.Ast.scope_let_typ = - Dcalc.Ast.TLit TUnit, Marked.get_mark e; - Dcalc.Ast.scope_let_expr = + scope_let_next = next; + scope_let_pos = Marked.get_mark e; + scope_let_typ = + TLit TUnit, Marked.get_mark e; + scope_let_expr = (* To ensure that we throw an error if the value is not defined, we add an check "ErrorOnEmpty" here. *) Marked.same_mark_as - (Dcalc.Ast.EAssert - (Dcalc.Ast.ErrorOnEmpty new_e, pos_mark_as e)) + (EAssert + (ErrorOnEmpty new_e, pos_mark_as e)) new_e; - Dcalc.Ast.scope_let_kind = Dcalc.Ast.Assertion; + scope_let_kind = Assertion; }) (Bindlib.bind_var (Var.make "_") next) new_e), @@ -705,10 +705,10 @@ let translate_rules (ctx : ctx) (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) - (sigma_return_struct_name : Ast.StructName.t) : - ( Dcalc.Ast.untyped Dcalc.Ast.expr, - Dcalc.Ast.untyped ) - Dcalc.Ast.scope_body_expr + (sigma_return_struct_name : StructName.t) : + ( untyped Dcalc.Ast.expr, + untyped ) + scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = @@ -730,7 +730,7 @@ let translate_rules let return_exp = Bindlib.box_apply (fun args -> - ( Dcalc.Ast.ETuple (args, Some sigma_return_struct_name), + ( ETuple (args, Some sigma_return_struct_name), pos_mark pos_sigma )) (Bindlib.box_list (List.map @@ -740,7 +740,7 @@ let translate_rules in ( scope_lets (Bindlib.box_apply - (fun return_exp -> Dcalc.Ast.Result return_exp) + (fun return_exp -> Result return_exp) return_exp), new_ctx ) @@ -748,12 +748,12 @@ let translate_scope_decl (struct_ctx : Ast.struct_ctx) (enum_ctx : Ast.enum_ctx) (sctx : scope_sigs_ctx) - (scope_name : Ast.ScopeName.t) + (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - (Dcalc.Ast.untyped Dcalc.Ast.expr, Dcalc.Ast.untyped) Dcalc.Ast.scope_body + (untyped Dcalc.Ast.expr, untyped) scope_body Bindlib.box * struct_ctx = - let sigma_info = Ast.ScopeName.get_info sigma.scope_decl_name in + let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in let ctx = @@ -813,8 +813,8 @@ let translate_scope_decl match Marked.unmark var_ctx.scope_var_io.io_input with | OnlyInput -> var_ctx.scope_var_typ, pos_sigma | Reentrant -> - ( Dcalc.Ast.TArrow - ((Dcalc.Ast.TLit TUnit, pos_sigma), (var_ctx.scope_var_typ, pos_sigma)), + ( TArrow + ((TLit TUnit, pos_sigma), (var_ctx.scope_var_typ, pos_sigma)), pos_sigma ) | NoInput -> failwith "should not happen" in @@ -824,15 +824,15 @@ let translate_scope_decl (fun (var_ctx, v) (next, i) -> ( Bindlib.box_apply2 (fun next r -> - Dcalc.Ast.ScopeLet + ScopeLet { - Dcalc.Ast.scope_let_kind = - Dcalc.Ast.DestructuringInputStruct; - Dcalc.Ast.scope_let_next = next; - Dcalc.Ast.scope_let_pos = pos_sigma; - Dcalc.Ast.scope_let_typ = input_var_typ var_ctx; - Dcalc.Ast.scope_let_expr = - ( Dcalc.Ast.ETupleAccess + scope_let_kind = + DestructuringInputStruct; + scope_let_next = next; + scope_let_pos = pos_sigma; + scope_let_typ = input_var_typ var_ctx; + scope_let_expr = + ( ETupleAccess ( r, i, Some scope_input_struct_name, @@ -851,7 +851,7 @@ let translate_scope_decl List.map (fun (var_ctx, dvar) -> let struct_field_name = - Ast.StructFieldName.fresh (Bindlib.name_of dvar ^ "_out", pos_sigma) + StructFieldName.fresh (Bindlib.name_of dvar ^ "_out", pos_sigma) in struct_field_name, (var_ctx.scope_var_typ, pos_sigma)) scope_output_variables @@ -860,29 +860,29 @@ let translate_scope_decl List.map (fun (var_ctx, dvar) -> let struct_field_name = - Ast.StructFieldName.fresh (Bindlib.name_of dvar ^ "_in", pos_sigma) + StructFieldName.fresh (Bindlib.name_of dvar ^ "_in", pos_sigma) in struct_field_name, input_var_typ var_ctx) scope_input_variables in let new_struct_ctx = - Ast.StructMap.add scope_input_struct_name scope_input_struct_fields - (Ast.StructMap.singleton scope_return_struct_name + StructMap.add scope_input_struct_name scope_input_struct_fields + (StructMap.singleton scope_return_struct_name scope_return_struct_fields) in ( Bindlib.box_apply (fun scope_body_expr -> { - Dcalc.Ast.scope_body_expr; - Dcalc.Ast.scope_body_input_struct = scope_input_struct_name; - Dcalc.Ast.scope_body_output_struct = scope_return_struct_name; + scope_body_expr; + scope_body_input_struct = scope_input_struct_name; + scope_body_output_struct = scope_return_struct_name; }) (Bindlib.bind_var scope_input_var (input_destructurings rules_with_return_expr)), new_struct_ctx ) let translate_program (prgm : Ast.program) : - Dcalc.Ast.untyped Dcalc.Ast.program * Dependency.TVertex.t list = + untyped Dcalc.Ast.program * Dependency.TVertex.t list = let scope_dependencies = Dependency.build_program_dep_graph prgm in Dependency.check_for_cycle_in_scope scope_dependencies; let types_ordering = @@ -894,16 +894,16 @@ let translate_program (prgm : Ast.program) : let ctx_for_typ_translation scope_name = empty_ctx struct_ctx enum_ctx Ast.ScopeMap.empty scope_name in - let dummy_scope = Ast.ScopeName.fresh ("dummy", Pos.no_pos) in + let dummy_scope = ScopeName.fresh ("dummy", Pos.no_pos) in let decl_ctx = { - Dcalc.Ast.ctx_structs = - Ast.StructMap.map + ctx_structs = + StructMap.map (List.map (fun (x, y) -> x, translate_typ (ctx_for_typ_translation dummy_scope) y)) struct_ctx; - Dcalc.Ast.ctx_enums = - Ast.EnumMap.map + ctx_enums = + EnumMap.map (List.map (fun (x, y) -> x, (translate_typ (ctx_for_typ_translation dummy_scope)) y)) enum_ctx; @@ -914,22 +914,22 @@ let translate_program (prgm : Ast.program) : (fun scope_name scope -> let scope_dvar = Var.make - (Marked.unmark (Ast.ScopeName.get_info scope.Ast.scope_decl_name)) + (Marked.unmark (ScopeName.get_info scope.Ast.scope_decl_name)) in let scope_return_struct_name = - Ast.StructName.fresh + StructName.fresh (Marked.map_under_mark (fun s -> s ^ "_out") - (Ast.ScopeName.get_info scope_name)) + (ScopeName.get_info scope_name)) in let scope_input_var = - Var.make (Marked.unmark (Ast.ScopeName.get_info scope_name) ^ "_in") + Var.make (Marked.unmark (ScopeName.get_info scope_name) ^ "_in") in let scope_input_struct_name = - Ast.StructName.fresh + StructName.fresh (Marked.map_under_mark (fun s -> s ^ "_in") - (Ast.ScopeName.get_info scope_name)) + (ScopeName.get_info scope_name)) in { scope_sig_local_vars = @@ -954,7 +954,7 @@ let translate_program (prgm : Ast.program) : (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) let (scopes, decl_ctx) - : (Dcalc.Ast.untyped Dcalc.Ast.expr, Dcalc.Ast.untyped) Dcalc.Ast.scopes + : (untyped Dcalc.Ast.expr, untyped) scopes Bindlib.box * _ = List.fold_right @@ -967,21 +967,21 @@ let translate_program (prgm : Ast.program) : let decl_ctx = { decl_ctx with - Dcalc.Ast.ctx_structs = - Ast.StructMap.union + ctx_structs = + StructMap.union (fun _ _ -> assert false (* should not happen *)) - decl_ctx.Dcalc.Ast.ctx_structs scope_out_struct; + decl_ctx.ctx_structs scope_out_struct; } in let scope_next = Bindlib.bind_var dvar scopes in let new_scopes = Bindlib.box_apply2 (fun scope_body scope_next -> - Dcalc.Ast.ScopeDef { scope_name; scope_body; scope_next }) + ScopeDef { scope_name; scope_body; scope_next }) scope_body scope_next in new_scopes, decl_ctx) scope_ordering - (Bindlib.box Dcalc.Ast.Nil, decl_ctx) + (Bindlib.box Nil, decl_ctx) in { scopes = Bindlib.unbox scopes; decl_ctx }, types_ordering diff --git a/compiler/scopelang/scope_to_dcalc.mli b/compiler/scopelang/scope_to_dcalc.mli index 38f6228a..510fb5bf 100644 --- a/compiler/scopelang/scope_to_dcalc.mli +++ b/compiler/scopelang/scope_to_dcalc.mli @@ -17,7 +17,7 @@ (** Scope language to default calculus translator *) val translate_program : - Ast.program -> Dcalc.Ast.untyped Dcalc.Ast.program * Dependency.TVertex.t list + Ast.program -> Shared_ast.untyped Dcalc.Ast.program * Dependency.TVertex.t list (** Usage [translate_program p] returns a tuple [(new_program, types_list)] where [new_program] is the map of translated scopes. Finally, [types_list] is a list of all types (structs and enums) used in the program, correctly diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 34cc1160..b0699cbb 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -68,7 +68,67 @@ let eraise e1 pos = Bindlib.box (ERaise e1, pos) let ecatch e1 exn e2 pos = Bindlib.box_apply2 (fun e1 e2 -> ECatch (e1, exn, e2), pos) e1 e2 -let translate_var v = Bindlib.copy_var v (fun x -> EVar x) (Bindlib.name_of v) +(* - Manipulation of marks - *) + +let no_mark (type m) : m mark -> m mark = function + | Untyped _ -> Untyped { pos = Pos.no_pos } + | Typed _ -> Typed { pos = Pos.no_pos; ty = Marked.mark Pos.no_pos TAny } + +let mark_pos (type m) (m : m mark) : Pos.t = + match m with Untyped { pos } | Typed { pos; _ } -> pos + +let pos (type m) (x : ('a, m) marked) : Pos.t = mark_pos (Marked.get_mark x) + +let ty (_, m) : marked_typ = match m with Typed { ty; _ } -> ty + +let with_ty (type m) (ty : marked_typ) (x : ('a, m) marked) : ('a, typed) marked + = + Marked.mark + (match Marked.get_mark x with + | Untyped { pos } -> Typed { pos; ty } + | Typed m -> Typed { m with ty }) + (Marked.unmark x) + +let map_mark + (type m) + (pos_f : Pos.t -> Pos.t) + (ty_f : marked_typ -> marked_typ) + (m : m mark) : m mark = + match m with + | Untyped { pos } -> Untyped { pos = pos_f pos } + | Typed { pos; ty } -> Typed { pos = pos_f pos; ty = ty_f ty } + +let map_mark2 + (type m) + (pos_f : Pos.t -> Pos.t -> Pos.t) + (ty_f : typed -> typed -> marked_typ) + (m1 : m mark) + (m2 : m mark) : m mark = + match m1, m2 with + | Untyped m1, Untyped m2 -> Untyped { pos = pos_f m1.pos m2.pos } + | Typed m1, Typed m2 -> Typed { pos = pos_f m1.pos m2.pos; ty = ty_f m1 m2 } + +let fold_marks + (type m) + (pos_f : Pos.t list -> Pos.t) + (ty_f : typed list -> marked_typ) + (ms : m mark list) : m mark = + match ms with + | [] -> invalid_arg "Dcalc.Ast.fold_mark" + | Untyped _ :: _ as ms -> + Untyped { pos = pos_f (List.map (function Untyped { pos } -> pos) ms) } + | Typed _ :: _ -> + Typed + { + pos = pos_f (List.map (function Typed { pos; _ } -> pos) ms); + ty = ty_f (List.map (function Typed m -> m) ms); + } + +let get_scope_body_mark scope_body = + match snd (Bindlib.unbind scope_body.scope_body_expr) with + | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e + +(* - Traversal functions - *) let map (type a) @@ -81,10 +141,10 @@ let map | EApp (e1, args) -> eapp (f ctx e1) (List.map (f ctx) args) m | EOp op -> Bindlib.box (EOp op, m) | EArray args -> earray (List.map (f ctx) args) m - | EVar v -> evar (translate_var v) m + | EVar v -> evar (Var.translate v) m | EAbs (binder, typs) -> let vars, body = Bindlib.unmbind binder in - eabs (Bindlib.bind_mvar (Array.map translate_var vars) (f ctx body)) typs m + eabs (Bindlib.bind_mvar (Array.map Var.translate vars) (f ctx body)) typs m | EIfThenElse (e1, e2, e3) -> eifthenelse ((f ctx) e1) ((f ctx) e2) ((f ctx) e3) m | ETuple (args, s) -> etuple (List.map (f ctx) args) s m @@ -179,3 +239,22 @@ let map_exprs_in_scopes ~f ~varf scopes = }) new_scope_body_expr new_next) ~init:(Bindlib.box Nil) scopes + +(* - *) + +(** See [Bindlib.box_term] documentation for why we are doing that. *) +let box e= + let rec id_t () e = map () ~f:id_t e in + id_t () e + +let untype e = map_marks ~f:(fun m -> Untyped { pos = mark_pos m }) e + +let untype_program prg = + { + prg with + scopes = + Bindlib.unbox + (map_exprs_in_scopes + ~f:(fun e -> untype e) + ~varf:Var.translate prg.scopes); + } diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 21d2f973..1734505a 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -105,13 +105,70 @@ val eerroronempty : 't -> ('a, 't) marked_gexpr Bindlib.box -(** ---------- *) +val ecatch : + (lcalc, 't) marked_gexpr Bindlib.box -> + except -> + (lcalc, 't) marked_gexpr Bindlib.box -> + 't -> + (lcalc, 't) marked_gexpr Bindlib.box -val map : +val eraise : except -> 't -> (lcalc, 't) marked_gexpr Bindlib.box + +(** Manipulation of marks *) + +val no_mark : 'm mark -> 'm mark +val mark_pos : 'm mark -> Pos.t +val pos : ('a, 'm) marked -> Pos.t +val ty : ('a, typed) marked -> marked_typ +val with_ty : marked_typ -> ('a, 'm) marked -> ('a, typed) marked + +val map_mark : + (Pos.t -> Pos.t) -> (marked_typ -> marked_typ) -> 'm mark -> 'm mark + +val map_mark2 : + (Pos.t -> Pos.t -> Pos.t) -> + (typed -> typed -> marked_typ) -> + 'm mark -> + 'm mark -> + 'm mark + +val fold_marks : + (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark + +val get_scope_body_mark : ('expr, 'm) scope_body -> 'm mark +val untype : ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box +val untype_program : (('a, 'm mark) gexpr Var.expr, 'm) program_generic -> (('a, untyped mark) gexpr Var.expr, untyped) program_generic + +(** {2 Handling of boxing} *) + +val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box + + +(** {2 Traversal functions} *) + +val map: 'ctx -> f:('ctx -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box) -> (('a, 't1) gexpr, 't2) Marked.t -> ('a, 't2) marked_gexpr Bindlib.box +(** Flat (non-recursive) mapping on expressions. + + If you want to apply a map transform to an expression, you can save up + writing a painful match over all the cases of the AST. For instance, if you + want to remove all errors on empty, you can write + + {[ + let remove_error_empty = + let rec f () e = + match Marked.unmark e with + | ErrorOnEmpty e1 -> Expr.map () f e1 + | _ -> Expr.map () f e + in + f () e + ]} + + The first argument of map_expr is an optional context that you can carry + around during your map traversal. *) val map_top_down : f:(('a, 't1) marked_gexpr -> (('a, 't1) gexpr, 't2) Marked.t) -> diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 108dad12..b3352fbe 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -16,6 +16,7 @@ the License. *) open Utils +open Shared_ast module Runtime = Runtime_ocaml.Runtime (** Translation from {!module: Surface.Ast} to {!module: Desugaring.Ast}. @@ -25,7 +26,7 @@ module Runtime = Runtime_ocaml.Runtime (** {1 Translating expressions} *) -let translate_op_kind (k : Ast.op_kind) : Dcalc.Ast.op_kind = +let translate_op_kind (k : Ast.op_kind) : op_kind = match k with | KInt -> KInt | KDec -> KRat @@ -33,7 +34,7 @@ let translate_op_kind (k : Ast.op_kind) : Dcalc.Ast.op_kind = | KDate -> KDate | KDuration -> KDuration -let translate_binop (op : Ast.binop) : Dcalc.Ast.binop = +let translate_binop (op : Ast.binop) : binop = match op with | And -> And | Or -> Or @@ -50,7 +51,7 @@ let translate_binop (op : Ast.binop) : Dcalc.Ast.binop = | Neq -> Neq | Concat -> Concat -let translate_unop (op : Ast.unop) : Dcalc.Ast.unop = +let translate_unop (op : Ast.unop) : unop = match op with Not -> Not | Minus l -> Minus (translate_op_kind l) (** The two modules below help performing operations on map with the {!type: @@ -65,7 +66,7 @@ module LiftEnumConstructorMap = Bindlib.Lift (Scopelang.Ast.EnumConstructorMap) let disambiguate_constructor (ctxt : Name_resolution.context) (constructor : (string Marked.pos option * string Marked.pos) list) - (pos : Pos.t) : Scopelang.Ast.EnumName.t * Scopelang.Ast.EnumConstructor.t = + (pos : Pos.t) : EnumName.t * EnumConstructor.t = let enum, constructor = match constructor with | [c] -> c @@ -86,7 +87,7 @@ let disambiguate_constructor in match enum with | None -> - if Scopelang.Ast.EnumMap.cardinal possible_c_uids > 1 then + if EnumMap.cardinal possible_c_uids > 1 then Errors.raise_spanned_error (Marked.get_mark constructor) "This constructor name is ambiguous, it can belong to %a. Disambiguate \ @@ -94,9 +95,9 @@ let disambiguate_constructor (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") (fun fmt (s_name, _) -> - Format.fprintf fmt "%a" Scopelang.Ast.EnumName.format_t s_name)) - (Scopelang.Ast.EnumMap.bindings possible_c_uids); - Scopelang.Ast.EnumMap.choose possible_c_uids + Format.fprintf fmt "%a" EnumName.format_t s_name)) + (EnumMap.bindings possible_c_uids); + EnumMap.choose possible_c_uids | Some enum -> ( try (* The path is fully qualified *) @@ -104,7 +105,7 @@ let disambiguate_constructor Desugared.Ast.IdentMap.find (Marked.unmark enum) ctxt.enum_idmap in try - let c_uid = Scopelang.Ast.EnumMap.find e_uid possible_c_uids in + let c_uid = EnumMap.find e_uid possible_c_uids in e_uid, c_uid with Not_found -> Errors.raise_spanned_error pos "Enum %s does not contain case %s" @@ -119,7 +120,7 @@ let disambiguate_constructor Translates [expr] into its desugared equivalent. [scope] is used to disambiguate the scope and subscopes variables than occur in the expression *) let rec translate_expr - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) ((expr, pos) : Ast.expression Marked.pos) : @@ -140,11 +141,11 @@ let rec translate_expr let cases = Scopelang.Ast.EnumConstructorMap.mapi (fun c_uid' tau -> - if Scopelang.Ast.EnumConstructor.compare c_uid c_uid' <> 0 then + if EnumConstructor.compare c_uid c_uid' <> 0 then let nop_var = Desugared.Ast.Var.make "_" in Bindlib.unbox (Desugared.Ast.make_abs [| nop_var |] - (Bindlib.box (Desugared.Ast.ELit (Dcalc.Ast.LBool false), pos)) + (Bindlib.box (Desugared.Ast.ELit (LBool false), pos)) [tau] pos) else let ctxt, binding_var = @@ -153,7 +154,7 @@ let rec translate_expr let e2 = translate_expr scope inside_definition_of ctxt e2 in Bindlib.unbox (Desugared.Ast.make_abs [| binding_var |] e2 [tau] pos)) - (Scopelang.Ast.EnumMap.find enum_uid ctxt.enums) + (EnumMap.find enum_uid ctxt.enums) in Bindlib.box_apply (fun e1_sub -> Desugared.Ast.EMatch (e1_sub, enum_uid, cases), pos) @@ -167,7 +168,7 @@ let rec translate_expr let op_term = Marked.same_mark_as (Desugared.Ast.EOp - (Dcalc.Ast.Binop (translate_binop (Marked.unmark op)))) + (Binop (translate_binop (Marked.unmark op)))) op in Bindlib.box_apply2 @@ -176,7 +177,7 @@ let rec translate_expr | Unop (op, e) -> let op_term = Marked.same_mark_as - (Desugared.Ast.EOp (Dcalc.Ast.Unop (translate_unop (Marked.unmark op)))) + (Desugared.Ast.EOp (Unop (translate_unop (Marked.unmark op)))) op in Bindlib.box_apply @@ -186,38 +187,38 @@ let rec translate_expr let untyped_term = match l with | LNumber ((Int i, _), None) -> - Desugared.Ast.ELit (Dcalc.Ast.LInt (Runtime.integer_of_string i)) + Desugared.Ast.ELit (LInt (Runtime.integer_of_string i)) | LNumber ((Int i, _), Some (Percent, _)) -> Desugared.Ast.ELit - (Dcalc.Ast.LRat + (LRat Runtime.(decimal_of_string i /& decimal_of_string "100")) | LNumber ((Dec (i, f), _), None) -> Desugared.Ast.ELit - (Dcalc.Ast.LRat Runtime.(decimal_of_string (i ^ "." ^ f))) + (LRat Runtime.(decimal_of_string (i ^ "." ^ f))) | LNumber ((Dec (i, f), _), Some (Percent, _)) -> Desugared.Ast.ELit - (Dcalc.Ast.LRat + (LRat Runtime.( decimal_of_string (i ^ "." ^ f) /& decimal_of_string "100")) - | LBool b -> Desugared.Ast.ELit (Dcalc.Ast.LBool b) + | LBool b -> Desugared.Ast.ELit (LBool b) | LMoneyAmount i -> Desugared.Ast.ELit - (Dcalc.Ast.LMoney + (LMoney Runtime.( money_of_cents_integer ((integer_of_string i.money_amount_units *! integer_of_int 100) +! integer_of_string i.money_amount_cents))) | LNumber ((Int i, _), Some (Year, _)) -> Desugared.Ast.ELit - (Dcalc.Ast.LDuration + (LDuration (Runtime.duration_of_numbers (int_of_string i) 0 0)) | LNumber ((Int i, _), Some (Month, _)) -> Desugared.Ast.ELit - (Dcalc.Ast.LDuration + (LDuration (Runtime.duration_of_numbers 0 (int_of_string i) 0)) | LNumber ((Int i, _), Some (Day, _)) -> Desugared.Ast.ELit - (Dcalc.Ast.LDuration + (LDuration (Runtime.duration_of_numbers 0 0 (int_of_string i))) | LNumber ((Dec (_, _), _), Some ((Year | Month | Day), _)) -> Errors.raise_spanned_error pos @@ -230,7 +231,7 @@ let rec translate_expr Errors.raise_spanned_error pos "There is an error in this date: the day number is bigger than 31"; Desugared.Ast.ELit - (Dcalc.Ast.LDate + (LDate (try Runtime.date_of_numbers date.literal_date_year date.literal_date_month date.literal_date_day @@ -307,7 +308,7 @@ let rec translate_expr let subscope_uid : Scopelang.Ast.SubScopeName.t = Name_resolution.get_subscope_uid scope ctxt (Marked.same_mark_as y e) in - let subscope_real_uid : Scopelang.Ast.ScopeName.t = + let subscope_real_uid : ScopeName.t = Scopelang.Ast.SubScopeMap.find subscope_uid scope_ctxt.sub_scopes in let subscope_var_uid = @@ -330,19 +331,19 @@ let rec translate_expr match c with | None -> (* No constructor name was specified *) - if Scopelang.Ast.StructMap.cardinal x_possible_structs > 1 then + if StructMap.cardinal x_possible_structs > 1 then Errors.raise_spanned_error (Marked.get_mark x) "This struct field name is ambiguous, it can belong to %a. \ Disambiguate it by prefixing it with the struct name." (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") (fun fmt (s_name, _) -> - Format.fprintf fmt "%a" Scopelang.Ast.StructName.format_t + Format.fprintf fmt "%a" StructName.format_t s_name)) - (Scopelang.Ast.StructMap.bindings x_possible_structs) + (StructMap.bindings x_possible_structs) else let s_uid, f_uid = - Scopelang.Ast.StructMap.choose x_possible_structs + StructMap.choose x_possible_structs in Bindlib.box_apply (fun e -> Desugared.Ast.EStructAccess (e, f_uid, s_uid), pos) @@ -353,7 +354,7 @@ let rec translate_expr Desugared.Ast.IdentMap.find (Marked.unmark c_name) ctxt.struct_idmap in try - let f_uid = Scopelang.Ast.StructMap.find c_uid x_possible_structs in + let f_uid = StructMap.find c_uid x_possible_structs in Bindlib.box_apply (fun e -> Desugared.Ast.EStructAccess (e, f_uid, c_uid), pos) e @@ -391,7 +392,7 @@ let rec translate_expr (fun s_fields (f_name, f_e) -> let f_uid = try - Scopelang.Ast.StructMap.find s_uid + StructMap.find s_uid (Desugared.Ast.IdentMap.find (Marked.unmark f_name) ctxt.field_idmap) with Not_found -> @@ -408,19 +409,19 @@ let rec translate_expr None, Marked.get_mark (Bindlib.unbox e_field); ] "The field %a has been defined twice:" - Scopelang.Ast.StructFieldName.format_t f_uid); + StructFieldName.format_t f_uid); let f_e = translate_expr scope inside_definition_of ctxt f_e in Scopelang.Ast.StructFieldMap.add f_uid f_e s_fields) Scopelang.Ast.StructFieldMap.empty fields in - let expected_s_fields = Scopelang.Ast.StructMap.find s_uid ctxt.structs in + let expected_s_fields = StructMap.find s_uid ctxt.structs in Scopelang.Ast.StructFieldMap.iter (fun expected_f _ -> if not (Scopelang.Ast.StructFieldMap.mem expected_f s_fields) then Errors.raise_spanned_error pos "Missing field for structure %a: \"%a\"" - Scopelang.Ast.StructName.format_t s_uid - Scopelang.Ast.StructFieldName.format_t expected_f) + StructName.format_t s_uid + StructFieldName.format_t expected_f) expected_s_fields; Bindlib.box_apply @@ -443,7 +444,7 @@ let rec translate_expr | None -> if (* No constructor name was specified *) - Scopelang.Ast.EnumMap.cardinal possible_c_uids > 1 + EnumMap.cardinal possible_c_uids > 1 then Errors.raise_spanned_error (Marked.get_mark constructor) @@ -452,10 +453,10 @@ let rec translate_expr (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") (fun fmt (s_name, _) -> - Format.fprintf fmt "%a" Scopelang.Ast.EnumName.format_t s_name)) - (Scopelang.Ast.EnumMap.bindings possible_c_uids) + Format.fprintf fmt "%a" EnumName.format_t s_name)) + (EnumMap.bindings possible_c_uids) else - let e_uid, c_uid = Scopelang.Ast.EnumMap.choose possible_c_uids in + let e_uid, c_uid = EnumMap.choose possible_c_uids in let payload = Option.map (translate_expr scope inside_definition_of ctxt) payload in @@ -465,7 +466,7 @@ let rec translate_expr ( (match payload with | Some e' -> e' | None -> - ( Desugared.Ast.ELit Dcalc.Ast.LUnit, + ( Desugared.Ast.ELit LUnit, Marked.get_mark constructor )), c_uid, e_uid ), @@ -478,7 +479,7 @@ let rec translate_expr Desugared.Ast.IdentMap.find (Marked.unmark enum) ctxt.enum_idmap in try - let c_uid = Scopelang.Ast.EnumMap.find e_uid possible_c_uids in + let c_uid = EnumMap.find e_uid possible_c_uids in let payload = Option.map (translate_expr scope inside_definition_of ctxt) payload in @@ -488,7 +489,7 @@ let rec translate_expr ( (match payload with | Some e' -> e' | None -> - ( Desugared.Ast.ELit Dcalc.Ast.LUnit, + ( Desugared.Ast.ELit LUnit, Marked.get_mark constructor )), c_uid, e_uid ), @@ -530,11 +531,11 @@ let rec translate_expr (Desugared.Ast.make_abs [| nop_var |] (Bindlib.box ( Desugared.Ast.ELit - (Dcalc.Ast.LBool - (Scopelang.Ast.EnumConstructor.compare c_uid c_uid' = 0)), + (LBool + (EnumConstructor.compare c_uid c_uid' = 0)), pos )) [tau] pos)) - (Scopelang.Ast.EnumMap.find enum_uid ctxt.enums) + (EnumMap.find enum_uid ctxt.enums) in Bindlib.box_apply (fun e -> Desugared.Ast.EMatch (e, enum_uid, cases), pos) @@ -563,8 +564,8 @@ let rec translate_expr ( Desugared.Ast.EApp ( ( Desugared.Ast.EOp (match op' with - | Ast.Map -> Dcalc.Ast.Binop Dcalc.Ast.Map - | Ast.Filter -> Dcalc.Ast.Binop Dcalc.Ast.Filter + | Ast.Map -> Binop Map + | Ast.Filter -> Binop Filter | _ -> assert false (* should not happen *)), pos ), [f_pred; collection] ), @@ -583,11 +584,11 @@ let rec translate_expr in let op_kind = match pred_typ with - | Ast.Integer -> Dcalc.Ast.KInt - | Ast.Decimal -> Dcalc.Ast.KRat - | Ast.Money -> Dcalc.Ast.KMoney - | Ast.Duration -> Dcalc.Ast.KDuration - | Ast.Date -> Dcalc.Ast.KDate + | Ast.Integer -> KInt + | Ast.Decimal -> KRat + | Ast.Money -> KMoney + | Ast.Duration -> KDuration + | Ast.Date -> KDate | _ -> Errors.raise_spanned_error pos "It is impossible to compute the arg-%s of two values of type %a" @@ -595,7 +596,7 @@ let rec translate_expr Print.format_primitive_typ pred_typ in let cmp_op = - if max_or_min then Dcalc.Ast.Gt op_kind else Dcalc.Ast.Lt op_kind + if max_or_min then Gt op_kind else Lt op_kind in let f_pred = Desugared.Ast.make_abs [| param |] @@ -619,7 +620,7 @@ let rec translate_expr (fun acc_var_e item_var_e f_pred_var_e -> ( Desugared.Ast.EIfThenElse ( ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Binop cmp_op), pos_op'), + ( (Desugared.Ast.EOp (Binop cmp_op), pos_op'), [ Desugared.Ast.EApp (f_pred_var_e, [acc_var_e]), pos; Desugared.Ast.EApp (f_pred_var_e, [item_var_e]), pos; @@ -639,7 +640,7 @@ let rec translate_expr Bindlib.box_apply3 (fun fold_f collection init -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Ternop Dcalc.Ast.Fold), pos), + ( (Desugared.Ast.EOp (Ternop Fold), pos), [fold_f; init; collection] ), pos )) fold_f collection init @@ -656,28 +657,28 @@ let rec translate_expr assert false (* should not happen *) | Ast.Exists -> Bindlib.box - (Desugared.Ast.ELit (Dcalc.Ast.LBool false), Marked.get_mark op') + (Desugared.Ast.ELit (LBool false), Marked.get_mark op') | Ast.Forall -> Bindlib.box - (Desugared.Ast.ELit (Dcalc.Ast.LBool true), Marked.get_mark op') + (Desugared.Ast.ELit (LBool true), Marked.get_mark op') | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> Bindlib.box - ( Desugared.Ast.ELit (Dcalc.Ast.LInt (Runtime.integer_of_int 0)), + ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 0)), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> Bindlib.box - ( Desugared.Ast.ELit (Dcalc.Ast.LRat (Runtime.decimal_of_string "0")), + ( Desugared.Ast.ELit (LRat (Runtime.decimal_of_string "0")), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> Bindlib.box ( Desugared.Ast.ELit - (Dcalc.Ast.LMoney + (LMoney (Runtime.money_of_cents_integer (Runtime.integer_of_int 0))), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> Bindlib.box ( Desugared.Ast.ELit - (Dcalc.Ast.LDuration (Runtime.duration_of_numbers 0 0 0)), + (LDuration (Runtime.duration_of_numbers 0 0 0)), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum t) -> Errors.raise_spanned_error pos @@ -686,24 +687,24 @@ let rec translate_expr | Ast.Aggregate (Ast.AggregateExtremum (_, _, init)) -> rec_helper init | Ast.Aggregate Ast.AggregateCount -> Bindlib.box - ( Desugared.Ast.ELit (Dcalc.Ast.LInt (Runtime.integer_of_int 0)), + ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 0)), Marked.get_mark op' ) in let acc_var = Desugared.Ast.Var.make "acc" in let acc = Desugared.Ast.make_var (acc_var, Marked.get_mark param') in let f_body = - let make_body (op : Dcalc.Ast.binop) = + let make_body (op : binop) = Bindlib.box_apply2 (fun predicate acc -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Binop op), Marked.get_mark op'), + ( (Desugared.Ast.EOp (Binop op), Marked.get_mark op'), [acc; predicate] ), pos )) (translate_expr scope inside_definition_of ctxt predicate) acc in let make_extr_body - (cmp_op : Dcalc.Ast.binop) + (cmp_op : binop) (t : Scopelang.Ast.typ Marked.pos) = let tmp_var = Desugared.Ast.Var.make "tmp" in let tmp = Desugared.Ast.make_var (tmp_var, Marked.get_mark param') in @@ -713,7 +714,7 @@ let rec translate_expr (fun acc tmp -> ( Desugared.Ast.EIfThenElse ( ( Desugared.Ast.EApp - ( ( Desugared.Ast.EOp (Dcalc.Ast.Binop cmp_op), + ( ( Desugared.Ast.EOp (Binop cmp_op), Marked.get_mark op' ), [acc; tmp] ), pos ), @@ -725,35 +726,35 @@ let rec translate_expr match Marked.unmark op' with | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> assert false (* should not happen *) - | Ast.Exists -> make_body Dcalc.Ast.Or - | Ast.Forall -> make_body Dcalc.Ast.And + | Ast.Exists -> make_body Or + | Ast.Forall -> make_body And | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> - make_body (Dcalc.Ast.Add Dcalc.Ast.KInt) + make_body (Add KInt) | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> - make_body (Dcalc.Ast.Add Dcalc.Ast.KRat) + make_body (Add KRat) | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> - make_body (Dcalc.Ast.Add Dcalc.Ast.KMoney) + make_body (Add KMoney) | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> - make_body (Dcalc.Ast.Add Dcalc.Ast.KDuration) + make_body (Add KDuration) | Ast.Aggregate (Ast.AggregateSum _) -> assert false (* should not happen *) | Ast.Aggregate (Ast.AggregateExtremum (max_or_min, t, _)) -> let op_kind, typ = match t with - | Ast.Integer -> Dcalc.Ast.KInt, (Scopelang.Ast.TLit TInt, pos) - | Ast.Decimal -> Dcalc.Ast.KRat, (Scopelang.Ast.TLit TRat, pos) - | Ast.Money -> Dcalc.Ast.KMoney, (Scopelang.Ast.TLit TMoney, pos) + | Ast.Integer -> KInt, (Scopelang.Ast.TLit TInt, pos) + | Ast.Decimal -> KRat, (Scopelang.Ast.TLit TRat, pos) + | Ast.Money -> KMoney, (Scopelang.Ast.TLit TMoney, pos) | Ast.Duration -> - Dcalc.Ast.KDuration, (Scopelang.Ast.TLit TDuration, pos) - | Ast.Date -> Dcalc.Ast.KDate, (Scopelang.Ast.TLit TDate, pos) + KDuration, (Scopelang.Ast.TLit TDuration, pos) + | Ast.Date -> KDate, (Scopelang.Ast.TLit TDate, pos) | _ -> Errors.raise_spanned_error pos - "It is impossible to compute the %s of two values of type %a" + "ssible to compute the %s of two values of type %a" (if max_or_min then "max" else "min") Print.format_primitive_typ t in let cmp_op = - if max_or_min then Dcalc.Ast.Gt op_kind else Dcalc.Ast.Lt op_kind + if max_or_min then Gt op_kind else Lt op_kind in make_extr_body cmp_op typ | Ast.Aggregate Ast.AggregateCount -> @@ -763,12 +764,12 @@ let rec translate_expr ( predicate, ( Desugared.Ast.EApp ( ( Desugared.Ast.EOp - (Dcalc.Ast.Binop (Dcalc.Ast.Add Dcalc.Ast.KInt)), + (Binop (Add KInt)), Marked.get_mark op' ), [ acc; ( Desugared.Ast.ELit - (Dcalc.Ast.LInt (Runtime.integer_of_int 1)), + (LInt (Runtime.integer_of_int 1)), Marked.get_mark predicate ); ] ), pos ), @@ -778,7 +779,7 @@ let rec translate_expr acc in let f = - let make_f (t : Dcalc.Ast.typ_lit) = + let make_f (t : typ_lit) = Bindlib.box_apply (fun binder -> ( Desugared.Ast.EAbs @@ -796,29 +797,29 @@ let rec translate_expr match Marked.unmark op' with | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> assert false (* should not happen *) - | Ast.Exists -> make_f Dcalc.Ast.TBool - | Ast.Forall -> make_f Dcalc.Ast.TBool + | Ast.Exists -> make_f TBool + | Ast.Forall -> make_f TBool | Ast.Aggregate (Ast.AggregateSum Ast.Integer) | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Integer, _)) -> - make_f Dcalc.Ast.TInt + make_f TInt | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Decimal, _)) -> - make_f Dcalc.Ast.TRat + make_f TRat | Ast.Aggregate (Ast.AggregateSum Ast.Money) | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Money, _)) -> - make_f Dcalc.Ast.TMoney + make_f TMoney | Ast.Aggregate (Ast.AggregateSum Ast.Duration) | Ast.Aggregate (Ast.AggregateExtremum (_, Ast.Duration, _)) -> - make_f Dcalc.Ast.TDuration + make_f TDuration | Ast.Aggregate (Ast.AggregateSum _) | Ast.Aggregate (Ast.AggregateExtremum _) -> assert false (* should not happen *) - | Ast.Aggregate Ast.AggregateCount -> make_f Dcalc.Ast.TInt + | Ast.Aggregate Ast.AggregateCount -> make_f TInt in Bindlib.box_apply3 (fun f collection init -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Ternop Dcalc.Ast.Fold), pos), + ( (Desugared.Ast.EOp (Ternop Fold), pos), [f; init; collection] ), pos )) f collection init @@ -826,17 +827,17 @@ let rec translate_expr let param_var = Desugared.Ast.Var.make "collection_member" in let param = Desugared.Ast.make_var (param_var, pos) in let collection = rec_helper collection in - let init = Bindlib.box (Desugared.Ast.ELit (Dcalc.Ast.LBool false), pos) in + let init = Bindlib.box (Desugared.Ast.ELit (LBool false), pos) in let acc_var = Desugared.Ast.Var.make "acc" in let acc = Desugared.Ast.make_var (acc_var, pos) in let f_body = Bindlib.box_apply3 (fun member acc param -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Binop Dcalc.Ast.Or), pos), + ( (Desugared.Ast.EOp (Binop Or), pos), [ ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Binop Dcalc.Ast.Eq), pos), + ( (Desugared.Ast.EOp (Binop Eq), pos), [member; param] ), pos ); acc; @@ -851,7 +852,7 @@ let rec translate_expr ( Desugared.Ast.EAbs ( binder, [ - Scopelang.Ast.TLit Dcalc.Ast.TBool, pos; + Scopelang.Ast.TLit TBool, pos; Scopelang.Ast.TAny, pos; ] ), pos )) @@ -860,42 +861,42 @@ let rec translate_expr Bindlib.box_apply3 (fun f collection init -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Dcalc.Ast.Ternop Dcalc.Ast.Fold), pos), + ( (Desugared.Ast.EOp (Ternop Fold), pos), [f; init; collection] ), pos )) f collection init | Builtin IntToDec -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.IntToRat), pos) + Bindlib.box (Desugared.Ast.EOp (Unop IntToRat), pos) | Builtin MoneyToDec -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.MoneyToRat), pos) + Bindlib.box (Desugared.Ast.EOp (Unop MoneyToRat), pos) | Builtin DecToMoney -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.RatToMoney), pos) + Bindlib.box (Desugared.Ast.EOp (Unop RatToMoney), pos) | Builtin Cardinal -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.Length), pos) + Bindlib.box (Desugared.Ast.EOp (Unop Length), pos) | Builtin GetDay -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.GetDay), pos) + Bindlib.box (Desugared.Ast.EOp (Unop GetDay), pos) | Builtin GetMonth -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.GetMonth), pos) + Bindlib.box (Desugared.Ast.EOp (Unop GetMonth), pos) | Builtin GetYear -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.GetYear), pos) + Bindlib.box (Desugared.Ast.EOp (Unop GetYear), pos) | Builtin FirstDayOfMonth -> Bindlib.box - (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.FirstDayOfMonth), pos) + (Desugared.Ast.EOp (Unop FirstDayOfMonth), pos) | Builtin LastDayOfMonth -> Bindlib.box - (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.LastDayOfMonth), pos) + (Desugared.Ast.EOp (Unop LastDayOfMonth), pos) | Builtin RoundMoney -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.RoundMoney), pos) + Bindlib.box (Desugared.Ast.EOp (Unop RoundMoney), pos) | Builtin RoundDecimal -> - Bindlib.box (Desugared.Ast.EOp (Dcalc.Ast.Unop Dcalc.Ast.RoundDecimal), pos) + Bindlib.box (Desugared.Ast.EOp (Unop RoundDecimal), pos) and disambiguate_match_and_build_expression - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : Desugared.Ast.expr Marked.pos Bindlib.box Scopelang.Ast.EnumConstructorMap.t - * Scopelang.Ast.EnumName.t = + * EnumName.t = let create_var = function | None -> ctxt, Desugared.Ast.Var.make "_" | Some param -> @@ -903,8 +904,8 @@ and disambiguate_match_and_build_expression ctxt, param_var in let bind_case_body - (c_uid : Dcalc.Ast.EnumConstructor.t) - (e_uid : Dcalc.Ast.EnumName.t) + (c_uid : EnumConstructor.t) + (e_uid : EnumName.t) (ctxt : Name_resolution.context) (case_body : ('a * Pos.t) Bindlib.box) (e_binder : @@ -917,7 +918,7 @@ and disambiguate_match_and_build_expression ( e_binder, [ Scopelang.Ast.EnumConstructorMap.find c_uid - (Scopelang.Ast.EnumMap.find e_uid ctxt.Name_resolution.enums); + (EnumMap.find e_uid ctxt.Name_resolution.enums); ] )) case_body) e_binder case_body @@ -940,8 +941,8 @@ and disambiguate_match_and_build_expression (Marked.get_mark case.Ast.match_case_pattern) "This case matches a constructor of enumeration %a but previous \ case were matching constructors of enumeration %a" - Scopelang.Ast.EnumName.format_t e_uid - Scopelang.Ast.EnumName.format_t e_uid' + EnumName.format_t e_uid + EnumName.format_t e_uid' in (match Scopelang.Ast.EnumConstructorMap.find_opt c_uid cases_d with | None -> () @@ -952,7 +953,7 @@ and disambiguate_match_and_build_expression None, Marked.get_mark (Bindlib.unbox e_case); ] "The constructor %a has been matched twice:" - Scopelang.Ast.EnumConstructor.format_t c_uid); + EnumConstructor.format_t c_uid); let ctxt, param_var = create_var (Option.map Marked.unmark binding) in let case_body = translate_expr scope inside_definition_of ctxt case.Ast.match_case_expr @@ -983,7 +984,7 @@ and disambiguate_match_and_build_expression | Some e_uid -> if curr_index < nb_cases - 1 then raise_wildcard_not_last_case_err (); let missing_constructors = - Scopelang.Ast.EnumMap.find e_uid ctxt.Name_resolution.enums + EnumMap.find e_uid ctxt.Name_resolution.enums |> Scopelang.Ast.EnumConstructorMap.filter_map (fun c_uid _ -> match Scopelang.Ast.EnumConstructorMap.find_opt c_uid cases_d @@ -995,7 +996,7 @@ and disambiguate_match_and_build_expression Errors.format_spanned_warning case_pos "Unreachable match case, all constructors of the enumeration %a \ are already specified" - Scopelang.Ast.EnumName.format_t e_uid; + EnumName.format_t e_uid; (* The current used strategy is to replace the wildcard branch: match foo with | Case1 x -> x @@ -1048,7 +1049,7 @@ let merge_conditions match precond, cond with | Some precond, Some cond -> let op_term = - ( Desugared.Ast.EOp (Dcalc.Ast.Binop Dcalc.Ast.And), + ( Desugared.Ast.EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) ) in Bindlib.box_apply2 @@ -1061,13 +1062,13 @@ let merge_conditions precond | None, Some cond -> cond | None, None -> - Bindlib.box (Desugared.Ast.ELit (Dcalc.Ast.LBool true), default_pos) + Bindlib.box (Desugared.Ast.ELit (LBool true), default_pos) (** Translates a surface definition into condition into a desugared {!type: Desugared.Ast.rule} *) let process_default (ctxt : Name_resolution.context) - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) (param_uid : Desugared.Ast.Var.t Marked.pos option) @@ -1111,7 +1112,7 @@ let process_default disambiguation *) let process_def (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (scope_uid : Scopelang.Ast.ScopeName.t) + (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) (def : Ast.definition) : Desugared.Ast.program = @@ -1200,7 +1201,7 @@ let process_def (** Translates a {!type: Surface.Ast.rule} from the surface language *) let process_rule (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) (rule : Ast.rule) : Desugared.Ast.program = @@ -1210,7 +1211,7 @@ let process_rule (** Translates assertions *) let process_assert (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (scope_uid : Scopelang.Ast.ScopeName.t) + (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) (ass : Ast.assertion) : Desugared.Ast.program = @@ -1236,7 +1237,7 @@ let process_assert ( Desugared.Ast.EIfThenElse ( precond, ass, - Marked.same_mark_as (Desugared.Ast.ELit (Dcalc.Ast.LBool true)) + Marked.same_mark_as (Desugared.Ast.ELit (LBool true)) precond ), Marked.get_mark precond )) precond ass @@ -1254,7 +1255,7 @@ let process_assert (** Translates a surface definition, rule or assertion *) let process_scope_use_item (precond : Ast.expression Marked.pos option) - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) (item : Ast.scope_use_item Marked.pos) : Desugared.Ast.program = @@ -1270,7 +1271,7 @@ let process_scope_use_item (* If this is an unlabeled exception, ensures that it has a unique default definition *) let check_unlabeled_exception - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (ctxt : Name_resolution.context) (item : Ast.scope_use_item Marked.pos) : unit = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in @@ -1353,10 +1354,10 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : let empty_prgm = { Desugared.Ast.program_structs = - Scopelang.Ast.StructMap.map Scopelang.Ast.StructFieldMap.bindings + StructMap.map Scopelang.Ast.StructFieldMap.bindings ctxt.Name_resolution.structs; Desugared.Ast.program_enums = - Scopelang.Ast.EnumMap.map Scopelang.Ast.EnumConstructorMap.bindings + EnumMap.map Scopelang.Ast.EnumConstructorMap.bindings ctxt.Name_resolution.enums; Desugared.Ast.program_scopes = Scopelang.Ast.ScopeMap.mapi diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index 579fc97a..c5497ce2 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -19,6 +19,7 @@ lexical scopes into account *) open Utils +open Shared_ast (** {1 Name resolution context} *) @@ -41,7 +42,7 @@ type scope_context = { (** What is the default rule to refer to for unnamed exceptions, if any *) sub_scopes_idmap : Scopelang.Ast.SubScopeName.t Desugared.Ast.IdentMap.t; (** Sub-scopes variables *) - sub_scopes : Scopelang.Ast.ScopeName.t Scopelang.Ast.SubScopeMap.t; + sub_scopes : ScopeName.t Scopelang.Ast.SubScopeMap.t; (** To what scope sub-scopes refer to? *) } (** Inside a scope, we distinguish between the variables and the subscopes. *) @@ -64,27 +65,27 @@ type context = { local_var_idmap : Desugared.Ast.Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) - scope_idmap : Scopelang.Ast.ScopeName.t Desugared.Ast.IdentMap.t; + scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; (** The names of the scopes *) - struct_idmap : Scopelang.Ast.StructName.t Desugared.Ast.IdentMap.t; + struct_idmap : StructName.t Desugared.Ast.IdentMap.t; (** The names of the structs *) field_idmap : - Scopelang.Ast.StructFieldName.t Scopelang.Ast.StructMap.t + StructFieldName.t StructMap.t Desugared.Ast.IdentMap.t; (** The names of the struct fields. Names of fields can be shared between different structs *) - enum_idmap : Scopelang.Ast.EnumName.t Desugared.Ast.IdentMap.t; + enum_idmap : EnumName.t Desugared.Ast.IdentMap.t; (** The names of the enums *) constructor_idmap : - Scopelang.Ast.EnumConstructor.t Scopelang.Ast.EnumMap.t + EnumConstructor.t EnumMap.t Desugared.Ast.IdentMap.t; (** The names of the enum constructors. Constructor names can be shared between different enums *) scopes : scope_context Scopelang.Ast.ScopeMap.t; (** For each scope, its context *) - structs : struct_context Scopelang.Ast.StructMap.t; + structs : struct_context StructMap.t; (** For each struct, its context *) - enums : enum_context Scopelang.Ast.EnumMap.t; + enums : enum_context EnumMap.t; (** For each enum, its context *) var_typs : var_sig Desugared.Ast.ScopeVarMap.t; (** The signatures of each scope variable declared *) @@ -120,7 +121,7 @@ let get_var_io (ctxt : context) (uid : Desugared.Ast.ScopeVar.t) : (** Get the variable uid inside the scope given in argument *) let get_var_uid - (scope_uid : Scopelang.Ast.ScopeName.t) + (scope_uid : ScopeName.t) (ctxt : context) ((x, pos) : ident Marked.pos) : Desugared.Ast.ScopeVar.t = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in @@ -128,13 +129,13 @@ let get_var_uid | None -> raise_unknown_identifier (Format.asprintf "for a variable of scope %a" - Scopelang.Ast.ScopeName.format_t scope_uid) + ScopeName.format_t scope_uid) (x, pos) | Some uid -> uid (** Get the subscope uid inside the scope given in argument *) let get_subscope_uid - (scope_uid : Scopelang.Ast.ScopeName.t) + (scope_uid : ScopeName.t) (ctxt : context) ((y, pos) : ident Marked.pos) : Scopelang.Ast.SubScopeName.t = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in @@ -145,7 +146,7 @@ let get_subscope_uid (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) let is_subscope_uid - (scope_uid : Scopelang.Ast.ScopeName.t) + (scope_uid : ScopeName.t) (ctxt : context) (y : ident) : bool = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in @@ -155,7 +156,7 @@ let is_subscope_uid let belongs_to (ctxt : context) (uid : Desugared.Ast.ScopeVar.t) - (scope_uid : Scopelang.Ast.ScopeName.t) : bool = + (scope_uid : ScopeName.t) : bool = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in Desugared.Ast.IdentMap.exists (fun _ var_uid -> Desugared.Ast.ScopeVar.compare uid var_uid = 0) @@ -183,7 +184,7 @@ let is_def_cond (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : bool = (** Process a subscope declaration *) let process_subscope_decl - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (ctxt : context) (decl : Ast.scope_decl_context_scope) : context = let name, name_pos = decl.scope_decl_context_scope_name in @@ -277,7 +278,7 @@ let process_type (ctxt : context) ((typ, typ_pos) : Ast.typ Marked.pos) : (** Process data declaration *) let process_data_decl - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (ctxt : context) (decl : Ast.scope_decl_context_data) : context = (* First check the type of the context data *) @@ -330,7 +331,7 @@ let process_data_decl (** Process an item declaration *) let process_item_decl - (scope : Scopelang.Ast.ScopeName.t) + (scope : ScopeName.t) (ctxt : context) (decl : Ast.scope_decl_context_item) : context = match decl with @@ -372,7 +373,7 @@ let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = List.fold_left (fun ctxt (fdecl, _) -> let f_uid = - Scopelang.Ast.StructFieldName.fresh fdecl.Ast.struct_decl_field_name + StructFieldName.fresh fdecl.Ast.struct_decl_field_name in let ctxt = { @@ -382,16 +383,16 @@ let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = (Marked.unmark fdecl.Ast.struct_decl_field_name) (fun uids -> match uids with - | None -> Some (Scopelang.Ast.StructMap.singleton s_uid f_uid) + | None -> Some (StructMap.singleton s_uid f_uid) | Some uids -> - Some (Scopelang.Ast.StructMap.add s_uid f_uid uids)) + Some (StructMap.add s_uid f_uid uids)) ctxt.field_idmap; } in { ctxt with structs = - Scopelang.Ast.StructMap.update s_uid + StructMap.update s_uid (fun fields -> match fields with | None -> @@ -421,7 +422,7 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = List.fold_left (fun ctxt (cdecl, cdecl_pos) -> let c_uid = - Scopelang.Ast.EnumConstructor.fresh cdecl.Ast.enum_decl_case_name + EnumConstructor.fresh cdecl.Ast.enum_decl_case_name in let ctxt = { @@ -431,15 +432,15 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = (Marked.unmark cdecl.Ast.enum_decl_case_name) (fun uids -> match uids with - | None -> Some (Scopelang.Ast.EnumMap.singleton e_uid c_uid) - | Some uids -> Some (Scopelang.Ast.EnumMap.add e_uid c_uid uids)) + | None -> Some (EnumMap.singleton e_uid c_uid) + | Some uids -> Some (EnumMap.add e_uid c_uid uids)) ctxt.constructor_idmap; } in { ctxt with enums = - Scopelang.Ast.EnumMap.update e_uid + EnumMap.update e_uid (fun cases -> let typ = match cdecl.Ast.enum_decl_case_typ with @@ -475,10 +476,10 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : match Desugared.Ast.IdentMap.find_opt name ctxt.scope_idmap with | Some use -> raise_already_defined_error - (Scopelang.Ast.ScopeName.get_info use) + (ScopeName.get_info use) name pos "scope" | None -> - let scope_uid = Scopelang.Ast.ScopeName.fresh (name, pos) in + let scope_uid = ScopeName.fresh (name, pos) in { ctxt with scope_idmap = Desugared.Ast.IdentMap.add name scope_uid ctxt.scope_idmap; @@ -497,10 +498,10 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : match Desugared.Ast.IdentMap.find_opt name ctxt.struct_idmap with | Some use -> raise_already_defined_error - (Scopelang.Ast.StructName.get_info use) + (StructName.get_info use) name pos "struct" | None -> - let s_uid = Scopelang.Ast.StructName.fresh sdecl.struct_decl_name in + let s_uid = StructName.fresh sdecl.struct_decl_name in { ctxt with struct_idmap = @@ -513,10 +514,10 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : match Desugared.Ast.IdentMap.find_opt name ctxt.enum_idmap with | Some use -> raise_already_defined_error - (Scopelang.Ast.EnumName.get_info use) + (EnumName.get_info use) name pos "enum" | None -> - let e_uid = Scopelang.Ast.EnumName.fresh edecl.enum_decl_name in + let e_uid = EnumName.fresh edecl.enum_decl_name in { ctxt with @@ -561,7 +562,7 @@ let rec process_law_structure let get_def_key (name : Ast.qident) (state : Ast.ident Marked.pos option) - (scope_uid : Scopelang.Ast.ScopeName.t) + (scope_uid : ScopeName.t) (ctxt : context) (default_pos : Pos.t) : Desugared.Ast.ScopeDef.t = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in @@ -603,7 +604,7 @@ let get_def_key let subscope_uid : Scopelang.Ast.SubScopeName.t = get_subscope_uid scope_uid ctxt y in - let subscope_real_uid : Scopelang.Ast.ScopeName.t = + let subscope_real_uid : ScopeName.t = Scopelang.Ast.SubScopeMap.find subscope_uid scope_ctxt.sub_scopes in let x_uid = get_var_uid subscope_real_uid ctxt x in @@ -616,7 +617,7 @@ let get_def_key let process_definition (ctxt : context) - (s_name : Scopelang.Ast.ScopeName.t) + (s_name : ScopeName.t) (d : Ast.definition) : context = (* We update the definition context inside the big context *) { @@ -725,7 +726,7 @@ let process_definition } let process_scope_use_item - (s_name : Scopelang.Ast.ScopeName.t) + (s_name : ScopeName.t) (ctxt : context) (sitem : Ast.scope_use_item Marked.pos) : context = match Marked.unmark sitem with @@ -764,10 +765,10 @@ let form_context (prgm : Ast.program) : context = scope_idmap = Desugared.Ast.IdentMap.empty; scopes = Scopelang.Ast.ScopeMap.empty; var_typs = Desugared.Ast.ScopeVarMap.empty; - structs = Scopelang.Ast.StructMap.empty; + structs = StructMap.empty; struct_idmap = Desugared.Ast.IdentMap.empty; field_idmap = Desugared.Ast.IdentMap.empty; - enums = Scopelang.Ast.EnumMap.empty; + enums = EnumMap.empty; enum_idmap = Desugared.Ast.IdentMap.empty; constructor_idmap = Desugared.Ast.IdentMap.empty; } diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index 21520a35..b68d5ceb 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -19,6 +19,7 @@ lexical scopes into account *) open Utils +open Shared_ast (** {1 Name resolution context} *) @@ -41,7 +42,7 @@ type scope_context = { (** What is the default rule to refer to for unnamed exceptions, if any *) sub_scopes_idmap : Scopelang.Ast.SubScopeName.t Desugared.Ast.IdentMap.t; (** Sub-scopes variables *) - sub_scopes : Scopelang.Ast.ScopeName.t Scopelang.Ast.SubScopeMap.t; + sub_scopes : ScopeName.t Scopelang.Ast.SubScopeMap.t; (** To what scope sub-scopes refer to? *) } (** Inside a scope, we distinguish between the variables and the subscopes. *) @@ -64,27 +65,27 @@ type context = { local_var_idmap : Desugared.Ast.Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) - scope_idmap : Scopelang.Ast.ScopeName.t Desugared.Ast.IdentMap.t; + scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; (** The names of the scopes *) - struct_idmap : Scopelang.Ast.StructName.t Desugared.Ast.IdentMap.t; + struct_idmap : StructName.t Desugared.Ast.IdentMap.t; (** The names of the structs *) field_idmap : - Scopelang.Ast.StructFieldName.t Scopelang.Ast.StructMap.t + StructFieldName.t StructMap.t Desugared.Ast.IdentMap.t; (** The names of the struct fields. Names of fields can be shared between different structs *) - enum_idmap : Scopelang.Ast.EnumName.t Desugared.Ast.IdentMap.t; + enum_idmap : EnumName.t Desugared.Ast.IdentMap.t; (** The names of the enums *) constructor_idmap : - Scopelang.Ast.EnumConstructor.t Scopelang.Ast.EnumMap.t + EnumConstructor.t EnumMap.t Desugared.Ast.IdentMap.t; (** The names of the enum constructors. Constructor names can be shared between different enums *) scopes : scope_context Scopelang.Ast.ScopeMap.t; (** For each scope, its context *) - structs : struct_context Scopelang.Ast.StructMap.t; + structs : struct_context StructMap.t; (** For each struct, its context *) - enums : enum_context Scopelang.Ast.EnumMap.t; + enums : enum_context EnumMap.t; (** For each enum, its context *) var_typs : var_sig Desugared.Ast.ScopeVarMap.t; (** The signatures of each scope variable declared *) @@ -110,25 +111,25 @@ val get_var_io : context -> Desugared.Ast.ScopeVar.t -> Ast.scope_decl_context_io val get_var_uid : - Scopelang.Ast.ScopeName.t -> + ScopeName.t -> context -> ident Marked.pos -> Desugared.Ast.ScopeVar.t (** Get the variable uid inside the scope given in argument *) val get_subscope_uid : - Scopelang.Ast.ScopeName.t -> + ScopeName.t -> context -> ident Marked.pos -> Scopelang.Ast.SubScopeName.t (** Get the subscope uid inside the scope given in argument *) -val is_subscope_uid : Scopelang.Ast.ScopeName.t -> context -> ident -> bool +val is_subscope_uid : ScopeName.t -> context -> ident -> bool (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) val belongs_to : - context -> Desugared.Ast.ScopeVar.t -> Scopelang.Ast.ScopeName.t -> bool + context -> Desugared.Ast.ScopeVar.t -> ScopeName.t -> bool (** Checks if the var_uid belongs to the scope scope_uid *) val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos @@ -143,7 +144,7 @@ val add_def_local_var : context -> ident -> context * Desugared.Ast.Var.t val get_def_key : Ast.qident -> Ast.ident Marked.pos option -> - Scopelang.Ast.ScopeName.t -> + ScopeName.t -> context -> Pos.t -> Desugared.Ast.ScopeDef.t diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 67299376..09e30d94 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -16,6 +16,7 @@ the License. *) open Utils +open Shared_ast open Dcalc open Ast @@ -92,7 +93,7 @@ let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed marked_expr) | ErrorOnEmpty d -> d (* input subscope variables and non-input scope variable *) | _ -> - Errors.raise_spanned_error (pos e) + Errors.raise_spanned_error (Expr.pos e) "Internal error: this expression does not have the structure expected by \ the VC generator:\n\ %a" @@ -382,7 +383,7 @@ let rec generate_verification_conditions_scopes | ScopeDef scope_def -> let is_selected_scope = match s with - | Some s when Dcalc.Ast.ScopeName.compare s scope_def.scope_name = 0 -> + | Some s when ScopeName.compare s scope_def.scope_name = 0 -> true | None -> true | _ -> false @@ -416,7 +417,7 @@ let rec generate_verification_conditions_scopes let generate_verification_conditions (p : 'm program) - (s : Dcalc.Ast.ScopeName.t option) : verification_condition list = + (s : ScopeName.t option) : verification_condition list = let vcs = generate_verification_conditions_scopes p.decl_ctx p.scopes s in (* We sort this list by scope name and then variable name to ensure consistent output for testing*) diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 924e0676..33ada9ca 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -29,21 +29,21 @@ type verification_condition_kind = a conflict error *) type verification_condition = { - vc_guard : Dcalc.Ast.typed Dcalc.Ast.marked_expr; + vc_guard : typed Dcalc.Ast.marked_expr; (** This expression should have type [bool]*) vc_kind : verification_condition_kind; - vc_scope : Dcalc.Ast.ScopeName.t; + vc_scope : ScopeName.t; vc_variable : typed Dcalc.Ast.var Marked.pos; vc_free_vars_typ : - (typed Dcalc.Ast.expr, Dcalc.Ast.typ Marked.pos) Var.Map.t; + (typed Dcalc.Ast.expr, typ Marked.pos) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) } val generate_verification_conditions : - Dcalc.Ast.typed Dcalc.Ast.program -> - Dcalc.Ast.ScopeName.t option -> + typed Dcalc.Ast.program -> + ScopeName.t option -> verification_condition list (** [generate_verification_conditions p None] will generate the verification conditions for all the variables of all the scopes of the program [p], while diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index e94bd5d6..f6b20ea7 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -16,6 +16,7 @@ the License. *) open Utils +open Shared_ast open Dcalc.Ast module type Backend = sig @@ -73,7 +74,7 @@ module type BackendIO = sig string val encode_and_check_vc : - Dcalc.Ast.decl_ctx -> + decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit end @@ -161,7 +162,7 @@ module MakeBackendIO (B : Backend) = struct let vc, z3_vc = vc in Cli.debug_print "For this variable:\n%s\n" - (Pos.retrieve_loc_text (pos vc.Conditions.vc_guard)); + (Pos.retrieve_loc_text (Expr.pos vc.Conditions.vc_guard)); Cli.debug_format "This verification condition was generated for %a:@\n%a" (Cli.format_with_style [ANSITerminal.yellow]) (match vc.vc_kind with diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 6a37e07f..7283b2ad 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -26,8 +26,8 @@ module type Backend = sig type backend_context val make_context : - Dcalc.Ast.decl_ctx -> - (typed Dcalc.Ast.expr, Dcalc.Ast.typ Utils.Marked.pos) Var.Map.t -> + decl_ctx -> + (typed Dcalc.Ast.expr, typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -53,8 +53,8 @@ module type BackendIO = sig type backend_context val make_context : - Dcalc.Ast.decl_ctx -> - (typed Dcalc.Ast.expr, Dcalc.Ast.typ Utils.Marked.pos) Var.Map.t -> + decl_ctx -> + (typed Dcalc.Ast.expr, typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -79,7 +79,7 @@ module type BackendIO = sig string val encode_and_check_vc : - Dcalc.Ast.decl_ctx -> + decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit end diff --git a/compiler/verification/solver.ml b/compiler/verification/solver.ml index c47bf8d8..6056ab1e 100644 --- a/compiler/verification/solver.ml +++ b/compiler/verification/solver.ml @@ -20,7 +20,7 @@ open Dcalc.Ast expressions [vcs] corresponding to verification conditions that must be discharged by Z3, and attempts to solve them **) let solve_vc - (decl_ctx : decl_ctx) + (decl_ctx : Shared_ast.decl_ctx) (vcs : Conditions.verification_condition list) : unit = (* Right now we only use the Z3 backend but the functorial interface should make it easy to mix and match different proof backends. *) diff --git a/compiler/verification/solver.mli b/compiler/verification/solver.mli index 8c972cb1..5ea951cb 100644 --- a/compiler/verification/solver.mli +++ b/compiler/verification/solver.mli @@ -17,4 +17,4 @@ (** Solves verification conditions using various proof backends *) val solve_vc : - Dcalc.Ast.decl_ctx -> Conditions.verification_condition list -> unit + Shared_ast.decl_ctx -> Conditions.verification_condition list -> unit diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index cb3b2a68..1c79a6e0 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -15,6 +15,7 @@ the License. *) open Utils +open Shared_ast open Dcalc open Ast open Z3 @@ -428,7 +429,7 @@ let rec translate_op (Print.format_expr ctx.ctx_decl) ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), - List.map (fun arg -> Bindlib.unbox (untype_expr arg)) args ), + List.map (fun arg -> Bindlib.unbox (Shared_ast.Expr.untype arg)) args ), Untyped { pos = Pos.no_pos } )) in @@ -520,7 +521,7 @@ let rec translate_op ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), List.map - (fun arg -> arg |> untype_expr |> Bindlib.unbox) + (fun arg -> arg |> Shared_ast.Expr.untype |> Bindlib.unbox) args ), Untyped { pos = Pos.no_pos } )) in @@ -572,7 +573,7 @@ let rec translate_op ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), List.map - (fun arg -> arg |> untype_expr |> Bindlib.unbox) + (fun arg -> arg |> Shared_ast.Expr.untype |> Bindlib.unbox) args ), Untyped { pos = Pos.no_pos } )) in diff --git a/dune-project b/dune-project index 1b7867ee..45993555 100644 --- a/dune-project +++ b/dune-project @@ -1,4 +1,4 @@ -(lang dune 2.8) +(lang dune 3.0) (name catala) diff --git a/french_law/ocaml/bench.ml b/french_law/ocaml/bench.ml index b2734d96..44e73e97 100644 --- a/french_law/ocaml/bench.ml +++ b/french_law/ocaml/bench.ml @@ -115,7 +115,7 @@ let run_test () = exit (-1) | Runtime.AssertionFailed _ -> () -let bench = +let _bench = Random.init (int_of_float (Unix.time ())); let num_iter = 10000 in let _ = diff --git a/french_law/ocaml/dune b/french_law/ocaml/dune index 734bae77..10350009 100644 --- a/french_law/ocaml/dune +++ b/french_law/ocaml/dune @@ -12,7 +12,7 @@ (preprocess (pps js_of_ocaml-ppx)) (js_of_ocaml - (flags --disable=shortvar --opt 3)) + (flags :standard --disable=shortvar --opt 3)) ; We need to disable shortvar because ; otherwise Webpack wrongly minifies ; the library and it gives bugs. From 06dbab74d2e392229833d6f7d5ca7abe629e7bd6 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 16 Aug 2022 10:04:01 +0200 Subject: [PATCH 03/31] reformat --- compiler/dcalc/interpreter.ml | 33 ++--- compiler/dcalc/print.ml | 8 +- compiler/dcalc/typing.mli | 8 +- compiler/desugared/ast.ml | 13 +- compiler/desugared/ast.mli | 13 +- compiler/desugared/desugared_to_scope.ml | 4 +- compiler/driver.ml | 11 +- compiler/lcalc/ast.ml | 8 +- compiler/lcalc/ast.mli | 5 +- compiler/lcalc/closure_conversion.ml | 6 +- compiler/lcalc/compile_without_exceptions.ml | 8 +- compiler/lcalc/optimizations.ml | 8 +- compiler/lcalc/print.ml | 17 +-- compiler/lcalc/print.mli | 6 +- compiler/lcalc/to_ocaml.ml | 55 +++----- compiler/lcalc/to_ocaml.mli | 21 +-- compiler/plugins/api_web.ml | 28 ++-- compiler/plugins/json_schema.ml | 11 +- compiler/scalc/compile_from_lambda.ml | 19 +-- compiler/scalc/print.ml | 10 +- compiler/scalc/to_python.ml | 63 +++------ compiler/scopelang/ast.ml | 1 - compiler/scopelang/dependency.ml | 7 +- compiler/scopelang/print.ml | 5 +- compiler/scopelang/scope_to_dcalc.ml | 110 ++++----------- compiler/scopelang/scope_to_dcalc.mli | 3 +- compiler/shared_ast/expr.ml | 6 +- compiler/shared_ast/expr.mli | 12 +- compiler/shared_ast/shared_ast.ml | 1 - compiler/shared_ast/types.ml | 4 +- compiler/shared_ast/var.ml | 4 +- compiler/shared_ast/var.mli | 4 +- compiler/surface/desugaring.ml | 141 ++++++------------- compiler/surface/name_resolution.ml | 46 ++---- compiler/surface/name_resolution.mli | 27 +--- compiler/verification/conditions.ml | 8 +- compiler/verification/conditions.mli | 7 +- compiler/verification/io.ml | 4 +- compiler/verification/io.mli | 4 +- compiler/verification/z3backend.real.ml | 7 +- 40 files changed, 258 insertions(+), 498 deletions(-) diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 4aaafd0e..c27f74f7 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -71,12 +71,9 @@ let rec evaluate_operator evaluate_expr ctx (Marked.same_mark_as (EApp (List.nth args 0, [acc; e'])) e')) (List.nth args 1) es) - | Binop And, [ELit (LBool b1); ELit (LBool b2)] -> - ELit (LBool (b1 && b2)) - | Binop Or, [ELit (LBool b1); ELit (LBool b2)] -> - ELit (LBool (b1 || b2)) - | Binop Xor, [ELit (LBool b1); ELit (LBool b2)] -> - ELit (LBool (b1 <> b2)) + | Binop And, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 && b2)) + | Binop Or, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 || b2)) + | Binop Xor, [ELit (LBool b1); ELit (LBool b2)] -> ELit (LBool (b1 <> b2)) | Binop (Add KInt), [ELit (LInt i1); ELit (LInt i2)] -> ELit (LInt Runtime.(i1 +! i2)) | Binop (Sub KInt), [ELit (LInt i1); ELit (LInt i2)] -> @@ -236,8 +233,7 @@ let rec evaluate_operator "This predicate evaluated to something else than a boolean \ (should not happen if the term was well-typed)") es) - | Binop _, ([ELit LEmptyError; _] | [_; ELit LEmptyError]) -> - ELit LEmptyError + | Binop _, ([ELit LEmptyError; _] | [_; ELit LEmptyError]) -> ELit LEmptyError | Unop (Minus KInt), [ELit (LInt i)] -> ELit (LInt Runtime.(integer_of_int 0 -! i)) | Unop (Minus KRat), [ELit (LRat i)] -> @@ -258,16 +254,13 @@ let rec evaluate_operator ELit (LDate Runtime.(first_day_of_month d)) | Unop LastDayOfMonth, [ELit (LDate d)] -> ELit (LDate Runtime.(first_day_of_month d)) - | Unop IntToRat, [ELit (LInt i)] -> - ELit (LRat Runtime.(decimal_of_integer i)) + | Unop IntToRat, [ELit (LInt i)] -> ELit (LRat Runtime.(decimal_of_integer i)) | Unop MoneyToRat, [ELit (LMoney i)] -> ELit (LRat Runtime.(decimal_of_money i)) | Unop RatToMoney, [ELit (LRat i)] -> ELit (LMoney Runtime.(money_of_decimal i)) - | Unop RoundMoney, [ELit (LMoney m)] -> - ELit (LMoney Runtime.(money_round m)) - | Unop RoundDecimal, [ELit (LRat m)] -> - ELit (LRat Runtime.(decimal_round m)) + | Unop RoundMoney, [ELit (LMoney m)] -> ELit (LMoney Runtime.(money_round m)) + | Unop RoundDecimal, [ELit (LRat m)] -> ELit (LRat Runtime.(decimal_round m)) | Unop (Log (entry, infos)), [e'] -> if !Cli.trace_flag then ( match entry with @@ -344,7 +337,8 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr "wrong function call, expected %d arguments, got %d" (Bindlib.mbinder_arity binder) (List.length args) - | EOp op -> Marked.same_mark_as (evaluate_operator ctx op (Expr.pos e) args) e + | EOp op -> + Marked.same_mark_as (evaluate_operator ctx op (Expr.pos e) args) e | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> Errors.raise_spanned_error (Expr.pos e) @@ -461,8 +455,7 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr match Marked.unmark e' with | ErrorOnEmpty ( EApp - ( (EOp (Binop op), _), - [((ELit _, _) as e1); ((ELit _, _) as e2)] ), + ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]), _ ) | EApp ( (EOp (Unop (Log _)), _), @@ -472,8 +465,7 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr [((ELit _, _) as e1); ((ELit _, _) as e2)] ), _ ); ] ) - | EApp - ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]) + | EApp ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]) -> Errors.raise_spanned_error (Expr.pos e') "Assertion failed: %a %a %a" (Print.format_expr ctx ~debug:false) @@ -499,8 +491,7 @@ let interpret_program : fun (ctx : decl_ctx) (e : 'm Ast.marked_expr) : (Uid.MarkedString.info * 'm Ast.marked_expr) list -> match evaluate_expr ctx e with - | EAbs (_, [((TTuple (taus, Some s_in), _) as targs)]), mark_e -> - begin + | EAbs (_, [((TTuple (taus, Some s_in), _) as targs)]), mark_e -> begin (* At this point, the interpreter seeks to execute the scope but does not have a way to retrieve input values from the command line. [taus] contain the types of the scope arguments. For [context] arguments, we cann diff --git a/compiler/dcalc/print.ml b/compiler/dcalc/print.ml index 2f31f12e..e2f68df1 100644 --- a/compiler/dcalc/print.ml +++ b/compiler/dcalc/print.ml @@ -69,8 +69,8 @@ let format_enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : (Utils.Cli.format_with_style [ANSITerminal.magenta]) (Format.asprintf "%a" EnumConstructor.format_t c) -let rec format_typ (ctx : decl_ctx) (fmt : Format.formatter) (typ : typ) : - unit = +let rec format_typ (ctx : decl_ctx) (fmt : Format.formatter) (typ : typ) : unit + = let format_typ = format_typ ctx in let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t @@ -231,8 +231,8 @@ let rec format_expr (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) es format_punctuation ")" | ETuple (es, Some s) -> - Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" - StructName.format_t s format_punctuation "{" + Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t s + format_punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " format_punctuation ";") diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 91ee3df1..691745f5 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -20,9 +20,7 @@ open Shared_ast val infer_types : - decl_ctx -> - untyped Ast.marked_expr -> - typed Ast.marked_expr Bindlib.box + decl_ctx -> untyped Ast.marked_expr -> typed Ast.marked_expr Bindlib.box (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) @@ -30,7 +28,5 @@ val infer_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos (** Gets the outer type of the given expression, using either the existing annotations or inference *) -val check_type : - decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos -> unit - +val check_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos -> unit val infer_types_program : untyped Ast.program -> typed Ast.program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 7982d783..608ca0f5 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -132,16 +132,11 @@ type marked_expr = expr Marked.pos and expr = | ELocation of location | EVar of expr Bindlib.var - | EStruct of - StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t - | EStructAccess of - marked_expr * StructFieldName.t * StructName.t - | EEnumInj of - marked_expr * EnumConstructor.t * EnumName.t + | EStruct of StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t + | EStructAccess of marked_expr * StructFieldName.t * StructName.t + | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t | EMatch of - marked_expr - * EnumName.t - * marked_expr Scopelang.Ast.EnumConstructorMap.t + marked_expr * EnumName.t * marked_expr Scopelang.Ast.EnumConstructorMap.t | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index 365aff2d..21fefaa7 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -68,16 +68,11 @@ type marked_expr = expr Marked.pos and expr = | ELocation of location | EVar of expr Bindlib.var - | EStruct of - StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t - | EStructAccess of - marked_expr * StructFieldName.t * StructName.t - | EEnumInj of - marked_expr * EnumConstructor.t * EnumName.t + | EStruct of StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t + | EStructAccess of marked_expr * StructFieldName.t * StructName.t + | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t | EMatch of - marked_expr - * EnumName.t - * marked_expr Scopelang.Ast.EnumConstructorMap.t + marked_expr * EnumName.t * marked_expr Scopelang.Ast.EnumConstructorMap.t | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index df9edbea..80e0a472 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -36,9 +36,7 @@ let tag_with_log_entry (markings : Utils.Uid.MarkedString.info list) : Scopelang.Ast.expr Marked.pos = ( Scopelang.Ast.EApp - ( ( Scopelang.Ast.EOp (Unop (Log (l, markings))), - Marked.get_mark e ), - [e] ), + ((Scopelang.Ast.EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : diff --git a/compiler/driver.ml b/compiler/driver.ml index d357a48f..685d34cc 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -212,8 +212,8 @@ let driver source_file (options : Cli.options) : int = else let prgrm_dcalc_expr = Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr ~box_expr:Shared_ast.Expr.box - ~make_abs:Dcalc.Ast.make_abs + (Dcalc.Ast.build_whole_program_expr + ~box_expr:Shared_ast.Expr.box ~make_abs:Dcalc.Ast.make_abs ~make_let_in:Dcalc.Ast.make_let_in prgm scope_uid) in Format.fprintf fmt "%a\n" @@ -242,8 +242,8 @@ let driver source_file (options : Cli.options) : int = Cli.debug_print "Starting interpretation..."; let prgrm_dcalc_expr = Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr ~box_expr:Shared_ast.Expr.box - ~make_abs:Dcalc.Ast.make_abs + (Dcalc.Ast.build_whole_program_expr + ~box_expr:Shared_ast.Expr.box ~make_abs:Dcalc.Ast.make_abs ~make_let_in:Dcalc.Ast.make_let_in prgm scope_uid) in let results = @@ -318,7 +318,8 @@ let driver source_file (options : Cli.options) : int = let prgrm_lcalc_expr = Bindlib.unbox (Dcalc.Ast.build_whole_program_expr - ~box_expr:Shared_ast.Expr.box ~make_abs:Lcalc.Ast.make_abs + ~box_expr:Shared_ast.Expr.box + ~make_abs:Lcalc.Ast.make_abs ~make_let_in:Lcalc.Ast.make_let_in prgm scope_uid) in Format.fprintf fmt "%a\n" diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index df1b80a8..21c8233e 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -67,12 +67,8 @@ let make_multiple_let_in xs taus e1s e2 pos = let ( let+ ) x f = Bindlib.box_apply f x let ( and+ ) x y = Bindlib.box_pair x y let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) - -let none_constr : EnumConstructor.t = - EnumConstructor.fresh ("ENone", Pos.no_pos) - -let some_constr : EnumConstructor.t = - EnumConstructor.fresh ("ESome", Pos.no_pos) +let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) +let some_constr : EnumConstructor.t = EnumConstructor.fresh ("ESome", Pos.no_pos) let option_enum_config : (EnumConstructor.t * typ Marked.pos) list = [none_constr, (TLit TUnit, Pos.no_pos); some_constr, (TAny, Pos.no_pos)] diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 40ef7373..a61bd592 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -69,10 +69,7 @@ val make_multiple_let_in : val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t - -val option_enum_config : - (EnumConstructor.t * typ Marked.pos) list - +val option_enum_config : (EnumConstructor.t * typ Marked.pos) list val make_none : 'm mark -> 'm marked_expr Bindlib.box val make_some : 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index 62a74bc7..02cac000 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -159,7 +159,8 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : binder_mark )) (Bindlib.box_var inner_c_var)) extra_vars_list) - new_body (Expr.mark_pos binder_mark) + new_body + (Expr.mark_pos binder_mark) in let new_closure = make_abs @@ -289,8 +290,7 @@ let closure_conversion (p : 'm program) : 'm program Bindlib.box = let global_vars = Var.Set.add scope_var global_vars in let ctx = { - name_context = - Marked.unmark (ScopeName.get_info scope.scope_name); + name_context = Marked.unmark (ScopeName.get_info scope.scope_name); globally_bound_vars = global_vars; } in diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 991d7e34..a2982a48 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -95,8 +95,8 @@ let find ?(info : string = "none") (n : 'm D.var) (ctx : 'm ctx) : 'm info = var, creating a unique corresponding variable in Lcalc, with the corresponding expression, and the boolean is_pure. It is usefull for debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) -let add_var (mark : 'm mark) (var : 'm D.var) (is_pure : bool) (ctx : 'm ctx) - : 'm ctx = +let add_var (mark : 'm mark) (var : 'm D.var) (is_pure : bool) (ctx : 'm ctx) : + 'm ctx = let new_var = Var.make (Bindlib.name_of var) in let expr = A.make_var (new_var, mark) in @@ -493,8 +493,8 @@ let rec translate_scope_let let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : ('m D.expr, 'm) scope_body) : - ('m A.expr, 'm) scope_body Bindlib.box = + (body : ('m D.expr, 'm) scope_body) : ('m A.expr, 'm) scope_body Bindlib.box + = match body with | { scope_body_expr = result; diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index 0dc4c6da..cbca7967 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -71,8 +71,8 @@ let visitor_map let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with - | EMatch ((EInj (e1, i, n', _ts), _), cases, n) - when EnumName.compare n n' = 0 -> + | EMatch ((EInj (e1, i, n', _ts), _), cases, n) when EnumName.compare n n' = 0 + -> let+ e1 = visitor_map iota_expr () e1 and+ case = visitor_map iota_expr () (List.nth cases i) in default_mark @@ EApp (case, [e1]) @@ -146,9 +146,7 @@ let rec peephole_expr (_ : unit) (e : 'm marked_expr) : let peephole_optimizations (p : 'm program) : 'm program = let new_scopes = - Expr.map_exprs_in_scopes ~f:(peephole_expr ()) - ~varf:(fun v -> v) - p.scopes + Expr.map_exprs_in_scopes ~f:(peephole_expr ()) ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } diff --git a/compiler/lcalc/print.ml b/compiler/lcalc/print.ml index f7caa5b9..67201c40 100644 --- a/compiler/lcalc/print.ml +++ b/compiler/lcalc/print.ml @@ -90,10 +90,9 @@ let rec format_expr ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a %a" format_punctuation "\"" - StructFieldName.format_t struct_field format_punctuation - "\"" format_punctuation ":" format_expr e)) - (List.combine es - (List.map fst (StructMap.find s ctx.ctx_structs))) + StructFieldName.format_t struct_field format_punctuation "\"" + format_punctuation ":" format_expr e)) + (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) format_punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" format_punctuation "[" @@ -123,10 +122,8 @@ let rec format_expr Format.fprintf fmt "@[%a %a%a@ %a@]" format_punctuation "|" Dcalc.Print.format_enum_constructor c format_punctuation ":" format_expr e)) - (List.combine es - (List.map fst (EnumMap.find e_name ctx.ctx_enums))) - | ELit l -> - Format.fprintf fmt "%a" format_lit (Marked.mark (Expr.pos e) l) + (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) + | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.mark (Expr.pos e) l) | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in Format.fprintf fmt "%a%a" @@ -152,9 +149,7 @@ let rec format_expr (Marked.unmark tau) format_punctuation ")")) (List.combine (Array.to_list xs) taus) format_punctuation "→" format_expr body - | EApp - ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) - -> + | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" Dcalc.Print.format_binop op format_with_parens arg1 format_with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> diff --git a/compiler/lcalc/print.mli b/compiler/lcalc/print.mli index 46e7b71b..5b606e82 100644 --- a/compiler/lcalc/print.mli +++ b/compiler/lcalc/print.mli @@ -24,11 +24,7 @@ val format_var : Format.formatter -> 'm Ast.var -> unit val format_exception : Format.formatter -> except -> unit val format_expr : - ?debug:bool -> - decl_ctx -> - Format.formatter -> - 'm Ast.marked_expr -> - unit + ?debug:bool -> decl_ctx -> Format.formatter -> 'm Ast.marked_expr -> unit val format_scope : ?debug:bool -> diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index 1c53f24b..d94bbacc 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -68,8 +68,7 @@ let format_op_kind (fmt : Format.formatter) (k : op_kind) = | KDate -> "@" | KDuration -> "^") -let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : - unit = +let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : unit = match Marked.unmark op with | Add k -> Format.fprintf fmt "+%a" format_op_kind k | Sub k -> Format.fprintf fmt "-%a" format_op_kind k @@ -87,8 +86,7 @@ let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : | Map -> Format.fprintf fmt "Array.map" | Filter -> Format.fprintf fmt "array_filter" -let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : - unit = +let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : unit = match Marked.unmark op with Fold -> Format.fprintf fmt "Array.fold_left" let format_uid_list (fmt : Format.formatter) (uids : Uid.MarkedString.info list) @@ -110,8 +108,7 @@ let format_string_list (fmt : Format.formatter) (uids : string list) : unit = (Re.replace sanitize_quotes ~f:(fun _ -> "\\\"") info))) uids -let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit - = +let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit = match Marked.unmark op with | Minus k -> Format.fprintf fmt "~-%a" format_op_kind k | Not -> Format.fprintf fmt "%s" "not" @@ -146,8 +143,7 @@ let avoid_keywords (s : string) : string = s ^ "_user" | _ -> s -let format_struct_name (fmt : Format.formatter) (v : StructName.t) : - unit = +let format_struct_name (fmt : Format.formatter) (v : StructName.t) : unit = Format.asprintf "%a" StructName.format_t v |> to_ascii |> to_snake_case @@ -170,8 +166,7 @@ let format_to_module_name let format_struct_field_name (fmt : Format.formatter) - ((sname_opt, v) : - StructName.t option * StructFieldName.t) : unit = + ((sname_opt, v) : StructName.t option * StructFieldName.t) : unit = (match sname_opt with | Some sname -> Format.fprintf fmt "%a.%s" format_to_module_name (`Sname sname) @@ -179,22 +174,19 @@ let format_struct_field_name (avoid_keywords (to_ascii (Format.asprintf "%a" StructFieldName.format_t v))) -let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit - = +let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_snake_case - (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) + (to_snake_case (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) -let format_enum_cons_name - (fmt : Format.formatter) - (v : EnumConstructor.t) : unit = +let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : + unit = Format.fprintf fmt "%s" (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : - unit = +let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit + = match Marked.unmark ty with | TLit TUnit -> Format.fprintf fmt "embed_unit" | TLit TBool -> Format.fprintf fmt "embed_bool" @@ -212,11 +204,8 @@ let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : let typ_needs_parens (e : typ Marked.pos) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : - unit = - let format_typ_with_parens - (fmt : Format.formatter) - (t : typ Marked.pos) = +let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = + let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -382,9 +371,7 @@ let rec format_expr (fun fmt (x, tau) -> Format.fprintf fmt "@[(%a:@ %a)@]" format_var x format_typ tau)) xs_tau format_expr body - | EApp - ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) - -> + | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" format_binop (op, Pos.no_pos) format_with_parens arg1 format_with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> @@ -394,8 +381,8 @@ let rec format_expr when !Cli.trace_flag -> Format.fprintf fmt "(log_begin_call@ %a@ %a)@ %a" format_uid_list info format_with_parens f format_with_parens arg - | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) - when !Cli.trace_flag -> + | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) when !Cli.trace_flag + -> Format.fprintf fmt "(log_variable_definition@ %a@ (%a)@ %a)" format_uid_list info typ_embedding_name (tau, Pos.no_pos) format_with_parens arg1 | EApp ((EOp (Unop (Log (PosRecordIfTrueBool, _))), m), [arg1]) @@ -407,8 +394,7 @@ let rec format_expr (Pos.get_file pos) (Pos.get_start_line pos) (Pos.get_start_column pos) (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) format_with_parens arg1 - | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) - when !Cli.trace_flag -> + | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "(log_end_call@ %a@ %a)" format_uid_list info format_with_parens arg1 | EApp ((EOp (Unop (Log _)), _), [arg1]) -> @@ -460,7 +446,8 @@ let rec format_expr (Pos.get_end_column (Expr.pos e')) format_string_list (Pos.get_law_info (Expr.pos e')) - | ERaise exc -> Format.fprintf fmt "raise@ %a" format_exception (exc, Expr.pos e) + | ERaise exc -> + Format.fprintf fmt "raise@ %a" format_exception (exc, Expr.pos e) | ECatch (e1, exc, e2) -> Format.fprintf fmt "@,@[@[try@ %a@]@ with@]@ @[%a@ ->@ %a@]" @@ -509,8 +496,8 @@ let format_enum_embedding ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun _fmt (enum_cons, enum_cons_type) -> Format.fprintf fmt "@[| %a x ->@ (\"%a\", %a x)@]" - format_enum_cons_name enum_cons EnumConstructor.format_t - enum_cons typ_embedding_name enum_cons_type)) + format_enum_cons_name enum_cons EnumConstructor.format_t enum_cons + typ_embedding_name enum_cons_type)) enum_cases let format_ctx diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index b5d75e3d..643d4ea2 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -23,33 +23,22 @@ open Ast val avoid_keywords : string -> string val find_struct : - StructName.t -> - decl_ctx -> - (StructFieldName.t * typ Marked.pos) list + StructName.t -> decl_ctx -> (StructFieldName.t * typ Marked.pos) list val find_enum : - EnumName.t -> - decl_ctx -> - (EnumConstructor.t * typ Marked.pos) list + EnumName.t -> decl_ctx -> (EnumConstructor.t * typ Marked.pos) list val typ_needs_parens : typ Marked.pos -> bool val needs_parens : 'm marked_expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit - -val format_enum_cons_name : - Format.formatter -> EnumConstructor.t -> unit - +val format_enum_cons_name : Format.formatter -> EnumConstructor.t -> unit val format_struct_name : Format.formatter -> StructName.t -> unit val format_struct_field_name : - Format.formatter -> - StructName.t option * StructFieldName.t -> - unit + Format.formatter -> StructName.t option * StructFieldName.t -> unit val format_to_module_name : - Format.formatter -> - [< `Ename of EnumName.t | `Sname of StructName.t ] -> - unit + Format.formatter -> [< `Ename of EnumName.t | `Sname of StructName.t ] -> unit val format_lit : Format.formatter -> lit Marked.pos -> unit val format_uid_list : Format.formatter -> Uid.MarkedString.info list -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index e58edc63..4f81247d 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -60,11 +60,8 @@ module To_jsoo = struct | TBool -> "bool Js.t" | TDate -> "Js.js_string Js.t") - let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : - unit = - let format_typ_with_parens - (fmt : Format.formatter) - (t : typ Marked.pos) = + let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = + let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -93,36 +90,30 @@ module To_jsoo = struct match Marked.unmark typ with | TLit TBool -> Format.fprintf fmt "Js.bool" | TLit TInt -> Format.fprintf fmt "integer_to_int" - | TLit TRat -> - Format.fprintf fmt "Js.number_of_float %@%@ decimal_to_float" - | TLit TMoney -> - Format.fprintf fmt "Js.number_of_float %@%@ money_to_float" + | TLit TRat -> Format.fprintf fmt "Js.number_of_float %@%@ decimal_to_float" + | TLit TMoney -> Format.fprintf fmt "Js.number_of_float %@%@ money_to_float" | TLit TDuration -> Format.fprintf fmt "duration_to_jsoo" | TLit TDate -> Format.fprintf fmt "date_to_jsoo" - | TEnum (_, ename) -> - Format.fprintf fmt "%a_to_jsoo" format_enum_name ename + | TEnum (_, ename) -> Format.fprintf fmt "%a_to_jsoo" format_enum_name ename | TTuple (_, Some sname) -> Format.fprintf fmt "%a_to_jsoo" format_struct_name sname | TArray t -> Format.fprintf fmt "Js.array %@%@ Array.map (fun x -> %a x)" format_typ_to_jsoo t - | TAny | TTuple (_, None) -> - Format.fprintf fmt "Js.Unsafe.inject" + | TAny | TTuple (_, None) -> Format.fprintf fmt "Js.Unsafe.inject" | _ -> Format.fprintf fmt "" let rec format_typ_of_jsoo fmt typ = match Marked.unmark typ with | TLit TBool -> Format.fprintf fmt "Js.to_bool" | TLit TInt -> Format.fprintf fmt "integer_of_int" - | TLit TRat -> - Format.fprintf fmt "decimal_of_float %@%@ Js.float_of_number" + | TLit TRat -> Format.fprintf fmt "decimal_of_float %@%@ Js.float_of_number" | TLit TMoney -> Format.fprintf fmt "money_of_decimal %@%@ decimal_of_float %@%@ Js.float_of_number" | TLit TDuration -> Format.fprintf fmt "duration_of_jsoo" | TLit TDate -> Format.fprintf fmt "date_of_jsoo" - | TEnum (_, ename) -> - Format.fprintf fmt "%a_of_jsoo" format_enum_name ename + | TEnum (_, ename) -> Format.fprintf fmt "%a_of_jsoo" format_enum_name ename | TTuple (_, Some sname) -> Format.fprintf fmt "%a_of_jsoo" format_struct_name sname | TArray t -> @@ -239,8 +230,7 @@ module To_jsoo = struct in let format_enum_decl fmt - (enum_name, (enum_cons : (EnumConstructor.t * typ Marked.pos) list)) - = + (enum_name, (enum_cons : (EnumConstructor.t * typ Marked.pos) list)) = let fmt_enum_name fmt _ = format_enum_name fmt enum_name in let fmt_module_enum_name fmt _ = To_ocaml.format_to_module_name fmt (`Ename enum_name) diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 240fbc41..b2e94815 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -52,9 +52,7 @@ module To_json = struct ('m expr, 'm) scopes -> ('m expr, 'm) scope_def option = function | Nil -> None | ScopeDef scope_def -> - let name = - Format.asprintf "%a" ScopeName.format_t scope_def.scope_name - in + let name = Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in if name = target_name then Some scope_def else let _, next_scope = Bindlib.unbind scope_def.scope_next in @@ -107,15 +105,14 @@ module To_json = struct (scope_def : ('m expr, 'm) scope_def) = let get_name t = match Marked.unmark t with - | TTuple (_, Some sname) -> - Format.asprintf "%a" format_struct_name sname + | TTuple (_, Some sname) -> Format.asprintf "%a" format_struct_name sname | TEnum (_, ename) -> Format.asprintf "%a" format_enum_name ename | _ -> failwith "unreachable: only structs and enums are collected." in let rec collect_required_type_defs_from_scope_input (input_struct : StructName.t) : marked_typ list = - let rec collect (acc : marked_typ list) (t : marked_typ) : - marked_typ list = + let rec collect (acc : marked_typ list) (t : marked_typ) : marked_typ list + = match Marked.unmark t with | TTuple (_, Some s) -> (* Scope's input is a struct. *) diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index b17821be..e18d0c43 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -50,13 +50,11 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) - | ETuple (_, None) -> - failwith "Non-struct tuples cannot be compiled to scalc" + | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" | ETupleAccess (e1, num_field, Some s_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let field_name = - fst - (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) + fst (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) in e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) | ETupleAccess (_, _, None, _) -> @@ -112,7 +110,8 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : } in let tmp_stmts = translate_statements ctxt expr in - ( (A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), Expr.pos expr) + ( ( A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), + Expr.pos expr ) :: tmp_stmts, (A.EVar tmp_var, Expr.pos expr) ) @@ -234,7 +233,8 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : let cond_stmts, s_cond = translate_expr ctxt cond in let s_e_true = translate_statements ctxt e_true in let s_e_false = translate_statements ctxt e_false in - cond_stmts @ [A.SIfThenElse (s_cond, s_e_true, s_e_false), Expr.pos block_expr] + cond_stmts + @ [A.SIfThenElse (s_cond, s_e_true, s_e_false), Expr.pos block_expr] | ECatch (e_try, except, e_catch) -> let s_e_try = translate_statements ctxt e_try in let s_e_catch = translate_statements ctxt e_catch in @@ -247,7 +247,8 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : | Some x -> [ ( A.SLocalDef - ((x, Expr.pos block_expr), (Ast.EVar Ast.dead_value, Expr.pos block_expr)), + ( (x, Expr.pos block_expr), + (Ast.EVar Ast.dead_value, Expr.pos block_expr) ), Expr.pos block_expr ); ]) @ [A.SRaise except, Expr.pos block_expr] @@ -372,8 +373,8 @@ let translate_program (p : 'm L.program) : A.program = .scope_body_input_struct p.decl_ctx.ctx_structs), Some - scope_def.scope_body - .scope_body_input_struct ), + scope_def.scope_body.scope_body_input_struct + ), input_pos ) ); ]; A.func_body = new_scope_body; diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 052e8315..24b73474 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -49,8 +49,7 @@ let rec format_expr StructFieldName.format_t struct_field Dcalc.Print.format_punctuation "\"" Dcalc.Print.format_punctuation ":" format_expr e)) - (List.combine es - (List.map fst (StructMap.find s decl_ctx.ctx_structs))) + (List.combine es (List.map fst (StructMap.find s decl_ctx.ctx_structs))) Dcalc.Print.format_punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" Dcalc.Print.format_punctuation "[" @@ -64,8 +63,7 @@ let rec format_expr StructFieldName.format_t (fst (List.find - (fun (field', _) -> - StructFieldName.compare field' field = 0) + (fun (field', _) -> StructFieldName.compare field' field = 0) (StructMap.find s decl_ctx.ctx_structs))) Dcalc.Print.format_punctuation "\"" | EInj (e, case, enum) -> @@ -77,9 +75,7 @@ let rec format_expr format_expr e | ELit l -> Format.fprintf fmt "%a" Lcalc.Print.format_lit (Marked.same_mark_as l e) - | EApp - ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) - -> + | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" Dcalc.Print.format_binop op format_with_parens arg1 format_with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index a55e34a1..af9f6be5 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -45,16 +45,14 @@ let format_lit (fmt : Format.formatter) (l : L.lit Marked.pos) : unit = let years, months, days = Runtime.duration_to_years_months_days d in Format.fprintf fmt "duration_of_numbers(%d,%d,%d)" years months days -let format_log_entry (fmt : Format.formatter) (entry : log_entry) : - unit = +let format_log_entry (fmt : Format.formatter) (entry : log_entry) : unit = match entry with | VarDef _ -> Format.fprintf fmt ":=" | BeginCall -> Format.fprintf fmt "→ " | EndCall -> Format.fprintf fmt "%s" "← " | PosRecordIfTrueBool -> Format.fprintf fmt "☛ " -let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : - unit = +let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : unit = match Marked.unmark op with | Add _ | Concat -> Format.fprintf fmt "+" | Sub _ -> Format.fprintf fmt "-" @@ -72,8 +70,7 @@ let format_binop (fmt : Format.formatter) (op : binop Marked.pos) : | Map -> Format.fprintf fmt "list_map" | Filter -> Format.fprintf fmt "list_filter" -let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : - unit = +let format_ternop (fmt : Format.formatter) (op : ternop Marked.pos) : unit = match Marked.unmark op with Fold -> Format.fprintf fmt "list_fold_left" let format_uid_list (fmt : Format.formatter) (uids : Uid.MarkedString.info list) @@ -95,8 +92,7 @@ let format_string_list (fmt : Format.formatter) (uids : string list) : unit = (Re.replace sanitize_quotes ~f:(fun _ -> "\\\"") info))) uids -let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit - = +let format_unop (fmt : Format.formatter) (op : unop Marked.pos) : unit = match Marked.unmark op with | Minus _ -> Format.fprintf fmt "-" | Not -> Format.fprintf fmt "not" @@ -128,30 +124,24 @@ let avoid_keywords (s : string) : string = then s ^ "_" else s -let format_struct_name (fmt : Format.formatter) (v : StructName.t) : - unit = +let format_struct_name (fmt : Format.formatter) (v : StructName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_camel_case - (to_ascii (Format.asprintf "%a" StructName.format_t v)))) + (to_camel_case (to_ascii (Format.asprintf "%a" StructName.format_t v)))) -let format_struct_field_name - (fmt : Format.formatter) - (v : StructFieldName.t) : unit = +let format_struct_field_name (fmt : Format.formatter) (v : StructFieldName.t) : + unit = Format.fprintf fmt "%s" (avoid_keywords (to_ascii (Format.asprintf "%a" StructFieldName.format_t v))) -let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit - = +let format_enum_name (fmt : Format.formatter) (v : EnumName.t) : unit = Format.fprintf fmt "%s" (avoid_keywords - (to_camel_case - (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) + (to_camel_case (to_ascii (Format.asprintf "%a" EnumName.format_t v)))) -let format_enum_cons_name - (fmt : Format.formatter) - (v : EnumConstructor.t) : unit = +let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : + unit = Format.fprintf fmt "%s" (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) @@ -159,12 +149,9 @@ let format_enum_cons_name let typ_needs_parens (e : typ Marked.pos) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : - unit = +let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = let format_typ = format_typ in - let format_typ_with_parens - (fmt : Format.formatter) - (t : typ Marked.pos) = + let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -252,8 +239,7 @@ let needs_parens (e : expr Marked.pos) : bool = | ELit (LBool _ | LUnit) | EVar _ | EOp _ -> false | _ -> true -let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit - = +let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let pos = Marked.get_mark exc in match Marked.unmark exc with | ConflictError -> @@ -289,14 +275,13 @@ let rec format_expression (fun fmt (e, struct_field) -> Format.fprintf fmt "%a = %a" format_struct_field_name struct_field (format_expression ctx) e)) - (List.combine es - (List.map fst (StructMap.find s ctx.ctx_structs))) + (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) | EStructFieldAccess (e1, field, _) -> Format.fprintf fmt "%a.%a" (format_expression ctx) e1 format_struct_field_name field | EInj (_, cons, e_name) when EnumName.compare e_name L.option_enum = 0 - && EnumConstructor.compare cons L.none_constr = 0 -> + && EnumConstructor.compare cons L.none_constr = 0 -> (* We translate the option type with an overloading by Python's [None] *) Format.fprintf fmt "None" | EInj (e, cons, e_name) @@ -315,9 +300,7 @@ let rec format_expression (fun fmt e -> Format.fprintf fmt "%a" (format_expression ctx) e)) es | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.same_mark_as l e) - | EApp - ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) - -> + | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "%a(%a,@ %a)" format_binop (op, Pos.no_pos) (format_expression ctx) arg1 (format_expression ctx) arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> @@ -327,8 +310,8 @@ let rec format_expression when !Cli.trace_flag -> Format.fprintf fmt "log_begin_call(%a,@ %a,@ %a)" format_uid_list info (format_expression ctx) f (format_expression ctx) arg - | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) - when !Cli.trace_flag -> + | EApp ((EOp (Unop (Log (VarDef tau, info))), _), [arg1]) when !Cli.trace_flag + -> Format.fprintf fmt "log_variable_definition(%a,@ %a)" format_uid_list info (format_expression ctx) arg1 | EApp ((EOp (Unop (Log (PosRecordIfTrueBool, _))), pos), [arg1]) @@ -339,8 +322,7 @@ let rec format_expression (Pos.get_file pos) (Pos.get_start_line pos) (Pos.get_start_column pos) (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) (format_expression ctx) arg1 - | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) - when !Cli.trace_flag -> + | EApp ((EOp (Unop (Log (EndCall, info))), _), [arg1]) when !Cli.trace_flag -> Format.fprintf fmt "log_end_call(%a,@ %a)" format_uid_list info (format_expression ctx) arg1 | EApp ((EOp (Unop (Log _)), _), [arg1]) -> @@ -451,8 +433,7 @@ let rec format_statement (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) -and format_block (ctx : decl_ctx) (fmt : Format.formatter) (b : block) - : unit = +and format_block (ctx : decl_ctx) (fmt : Format.formatter) (b : block) : unit = Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (format_statement ctx) fmt diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 5197425a..1f484d29 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -16,7 +16,6 @@ open Utils open Shared_ast - module ScopeMap : Map.S with type key = ScopeName.t = Map.Make (ScopeName) module SubScopeName : Uid.Id with type info = Uid.MarkedString.info = diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index 85b15dfc..7ff7eaeb 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -91,8 +91,7 @@ let check_for_cycle_in_scope (g : SDependencies.t) : unit = (List.map (fun v -> let var_str, var_info = - ( Format.asprintf "%a" ScopeName.format_t v, - ScopeName.get_info v ) + Format.asprintf "%a" ScopeName.format_t v, ScopeName.get_info v in let succs = SDependencies.succ_e g v in let _, edge_pos, succ = @@ -120,9 +119,7 @@ module TVertex = struct type t = Struct of StructName.t | Enum of EnumName.t let hash x = - match x with - | Struct x -> StructName.hash x - | Enum x -> EnumName.hash x + match x with Struct x -> StructName.hash x | Enum x -> EnumName.hash x let compare x y = match x, y with diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 0b13425e..7328caf0 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -75,9 +75,8 @@ let rec format_expr Format.fprintf fmt "%a@ " Dcalc.Print.format_punctuation ";") (fun fmt (field_name, field_expr) -> Format.fprintf fmt "%a%a%a%a@ %a" Dcalc.Print.format_punctuation "\"" - StructFieldName.format_t field_name - Dcalc.Print.format_punctuation "\"" Dcalc.Print.format_punctuation - "=" format_expr field_expr)) + StructFieldName.format_t field_name Dcalc.Print.format_punctuation + "\"" Dcalc.Print.format_punctuation "=" format_expr field_expr)) (Ast.StructFieldMap.bindings fields) Dcalc.Print.format_punctuation "}" | EStructAccess (e1, field, _) -> diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 3aeb8957..10f53986 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -40,11 +40,9 @@ type ctx = { enums : Ast.enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : - (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t - Ast.SubScopeMap.t; + (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t Ast.SubScopeMap.t; local_vars : untyped Dcalc.Ast.var Ast.VarMap.t; } @@ -63,29 +61,22 @@ let empty_ctx local_vars = Ast.VarMap.empty; } -let rec translate_typ (ctx : ctx) (t : Ast.typ Marked.pos) : - typ Marked.pos = +let rec translate_typ (ctx : ctx) (t : Ast.typ Marked.pos) : typ Marked.pos = Marked.same_mark_as (match Marked.unmark t with | Ast.TLit l -> TLit l - | Ast.TArrow (t1, t2) -> - TArrow (translate_typ ctx t1, translate_typ ctx t2) + | Ast.TArrow (t1, t2) -> TArrow (translate_typ ctx t1, translate_typ ctx t2) | Ast.TStruct s_uid -> let s_fields = StructMap.find s_uid ctx.structs in - TTuple - (List.map (fun (_, t) -> translate_typ ctx t) s_fields, Some s_uid) + TTuple (List.map (fun (_, t) -> translate_typ ctx t) s_fields, Some s_uid) | Ast.TEnum e_uid -> let e_cases = EnumMap.find e_uid ctx.enums in - TEnum - (List.map (fun (_, t) -> translate_typ ctx t) e_cases, e_uid) - | Ast.TArray t1 -> - TArray (translate_typ ctx (Marked.same_mark_as t1 t)) + TEnum (List.map (fun (_, t) -> translate_typ ctx t) e_cases, e_uid) + | Ast.TArray t1 -> TArray (translate_typ ctx (Marked.same_mark_as t1 t)) | Ast.TAny -> TAny) t -let pos_mark (pos : Pos.t) : untyped mark = - Untyped { pos } - +let pos_mark (pos : Pos.t) : untyped mark = Untyped { pos } let pos_mark_as e = pos_mark (Marked.get_mark e) let merge_defaults @@ -94,17 +85,13 @@ let merge_defaults untyped Dcalc.Ast.marked_expr Bindlib.box = let caller = let m = Marked.get_mark (Bindlib.unbox caller) in - Dcalc.Ast.make_app caller - [Bindlib.box (ELit LUnit, m)] - m + Dcalc.Ast.make_app caller [Bindlib.box (ELit LUnit, m)] m in let body = Bindlib.box_apply2 (fun caller callee -> let m = Marked.get_mark callee in - ( EDefault - ([caller], (ELit (LBool true), m), callee), - m )) + EDefault ([caller], (ELit (LBool true), m), callee), m) caller callee in body @@ -117,11 +104,7 @@ let tag_with_log_entry Bindlib.box_apply (fun e -> Marked.same_mark_as - (EApp - ( Marked.same_mark_as - (EOp (Unop (Log (l, markings)))) - e, - [e] )) + (EApp (Marked.same_mark_as (EOp (Unop (Log (l, markings)))) e, [e])) e) e @@ -203,8 +186,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : with Not_found -> Errors.raise_spanned_error (Marked.get_mark e) "The field \"%a\" does not belong to the structure %a" - StructFieldName.format_t field_name StructName.format_t - struct_name + StructFieldName.format_t field_name StructName.format_t struct_name in let e1 = translate_expr ctx e1 in Bindlib.box_apply @@ -223,8 +205,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : with Not_found -> Errors.raise_spanned_error (Marked.get_mark e) "The constructor \"%a\" does not belong to the enum %a" - EnumConstructor.format_t constructor EnumName.format_t - enum_name + EnumConstructor.format_t constructor EnumName.format_t enum_name in let e1 = translate_expr ctx e1 in Bindlib.box_apply @@ -246,8 +227,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Errors.raise_spanned_error (Marked.get_mark e) "The constructor %a of enum %a is missing from this pattern \ matching" - EnumConstructor.format_t constructor EnumName.format_t - enum_name + EnumConstructor.format_t constructor EnumName.format_t enum_name in let case_d = translate_expr ctx case_e in case_d :: d_cases, Ast.EnumConstructorMap.remove constructor e_cases) @@ -280,8 +260,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : in let e1_func = match Marked.unmark e1 with - | ELocation l -> - tag_with_log_entry e1_func BeginCall (markings l) + | ELocation l -> tag_with_log_entry e1_func BeginCall (markings l) | _ -> e1_func in let new_args = List.map (translate_expr ctx) args in @@ -385,9 +364,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : (translate_expr ctx cond) (translate_expr ctx et) (translate_expr ctx ef) | EOp op -> Bindlib.box (EOp op) | ErrorOnEmpty e' -> - Bindlib.box_apply - (fun e' -> ErrorOnEmpty e') - (translate_expr ctx e') + Bindlib.box_apply (fun e' -> ErrorOnEmpty e') (translate_expr ctx e') | EArray es -> Bindlib.box_apply (fun es -> EArray es) @@ -402,14 +379,8 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - (( untyped Dcalc.Ast.expr, - untyped ) - scope_body_expr - Bindlib.box -> - ( untyped Dcalc.Ast.expr, - untyped ) - scope_body_expr - Bindlib.box) + ((untyped Dcalc.Ast.expr, untyped) scope_body_expr Bindlib.box -> + (untyped Dcalc.Ast.expr, untyped) scope_body_expr Bindlib.box) * ctx = match rule with | Definition ((ScopeVar a, var_def_pos), tau, a_io, e) -> @@ -420,8 +391,7 @@ let translate_rule let a_expr = Dcalc.Ast.make_var (a_var, pos_mark var_def_pos) in let merged_expr = Bindlib.box_apply - (fun merged_expr -> - ErrorOnEmpty merged_expr, pos_mark_as a_name) + (fun merged_expr -> ErrorOnEmpty merged_expr, pos_mark_as a_name) (match Marked.unmark a_io.io_input with | OnlyInput -> failwith "should not happen" @@ -502,8 +472,7 @@ let translate_rule | NoInput -> failwith "should not happen" | OnlyInput -> tau | Reentrant -> - ( TArrow ((TLit TUnit, var_def_pos), tau), - var_def_pos )); + TArrow ((TLit TUnit, var_def_pos), tau), var_def_pos); scope_let_expr = thunked_or_nonempty_new_e; scope_let_kind = SubScopeVarDefinition; }) @@ -645,8 +614,7 @@ let translate_rule scope_let_next = next; scope_let_pos = pos_sigma; scope_let_typ = var_ctx.scope_var_typ, pos_sigma; - scope_let_kind = - DestructuringSubScopeResults; + scope_let_kind = DestructuringSubScopeResults; scope_let_expr = ( ETupleAccess ( r, @@ -686,14 +654,12 @@ let translate_rule { scope_let_next = next; scope_let_pos = Marked.get_mark e; - scope_let_typ = - TLit TUnit, Marked.get_mark e; + scope_let_typ = TLit TUnit, Marked.get_mark e; scope_let_expr = (* To ensure that we throw an error if the value is not defined, we add an check "ErrorOnEmpty" here. *) Marked.same_mark_as - (EAssert - (ErrorOnEmpty new_e, pos_mark_as e)) + (EAssert (ErrorOnEmpty new_e, pos_mark_as e)) new_e; scope_let_kind = Assertion; }) @@ -706,11 +672,7 @@ let translate_rules (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) (sigma_return_struct_name : StructName.t) : - ( untyped Dcalc.Ast.expr, - untyped ) - scope_body_expr - Bindlib.box - * ctx = + (untyped Dcalc.Ast.expr, untyped) scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -730,8 +692,7 @@ let translate_rules let return_exp = Bindlib.box_apply (fun args -> - ( ETuple (args, Some sigma_return_struct_name), - pos_mark pos_sigma )) + ETuple (args, Some sigma_return_struct_name), pos_mark pos_sigma) (Bindlib.box_list (List.map (fun (_, (dcalc_var, _, _)) -> @@ -739,9 +700,7 @@ let translate_rules scope_output_variables)) in ( scope_lets - (Bindlib.box_apply - (fun return_exp -> Result return_exp) - return_exp), + (Bindlib.box_apply (fun return_exp -> Result return_exp) return_exp), new_ctx ) let translate_scope_decl @@ -750,9 +709,7 @@ let translate_scope_decl (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - (untyped Dcalc.Ast.expr, untyped) scope_body - Bindlib.box - * struct_ctx = + (untyped Dcalc.Ast.expr, untyped) scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in @@ -813,8 +770,7 @@ let translate_scope_decl match Marked.unmark var_ctx.scope_var_io.io_input with | OnlyInput -> var_ctx.scope_var_typ, pos_sigma | Reentrant -> - ( TArrow - ((TLit TUnit, pos_sigma), (var_ctx.scope_var_typ, pos_sigma)), + ( TArrow ((TLit TUnit, pos_sigma), (var_ctx.scope_var_typ, pos_sigma)), pos_sigma ) | NoInput -> failwith "should not happen" in @@ -826,8 +782,7 @@ let translate_scope_decl (fun next r -> ScopeLet { - scope_let_kind = - DestructuringInputStruct; + scope_let_kind = DestructuringInputStruct; scope_let_next = next; scope_let_pos = pos_sigma; scope_let_typ = input_var_typ var_ctx; @@ -867,8 +822,7 @@ let translate_scope_decl in let new_struct_ctx = StructMap.add scope_input_struct_name scope_input_struct_fields - (StructMap.singleton scope_return_struct_name - scope_return_struct_fields) + (StructMap.singleton scope_return_struct_name scope_return_struct_fields) in ( Bindlib.box_apply (fun scope_body_expr -> @@ -954,9 +908,7 @@ let translate_program (prgm : Ast.program) : (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) let (scopes, decl_ctx) - : (untyped Dcalc.Ast.expr, untyped) scopes - Bindlib.box - * _ = + : (untyped Dcalc.Ast.expr, untyped) scopes Bindlib.box * _ = List.fold_right (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in diff --git a/compiler/scopelang/scope_to_dcalc.mli b/compiler/scopelang/scope_to_dcalc.mli index 510fb5bf..40ad6f43 100644 --- a/compiler/scopelang/scope_to_dcalc.mli +++ b/compiler/scopelang/scope_to_dcalc.mli @@ -17,7 +17,8 @@ (** Scope language to default calculus translator *) val translate_program : - Ast.program -> Shared_ast.untyped Dcalc.Ast.program * Dependency.TVertex.t list + Ast.program -> + Shared_ast.untyped Dcalc.Ast.program * Dependency.TVertex.t list (** Usage [translate_program p] returns a tuple [(new_program, types_list)] where [new_program] is the map of translated scopes. Finally, [types_list] is a list of all types (structs and enums) used in the program, correctly diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index b0699cbb..b272ba57 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -78,7 +78,6 @@ let mark_pos (type m) (m : m mark) : Pos.t = match m with Untyped { pos } | Typed { pos; _ } -> pos let pos (type m) (x : ('a, m) marked) : Pos.t = mark_pos (Marked.get_mark x) - let ty (_, m) : marked_typ = match m with Typed { ty; _ } -> ty let with_ty (type m) (ty : marked_typ) (x : ('a, m) marked) : ('a, typed) marked @@ -160,8 +159,7 @@ let map | ECatch (e1, exn, e2) -> ecatch (f ctx e1) exn (f ctx e2) (Marked.get_mark e) | ERaise exn -> eraise exn (Marked.get_mark e) -let rec map_top_down ~f e = - map () ~f:(fun () -> map_top_down ~f) (f e) +let rec map_top_down ~f e = map () ~f:(fun () -> map_top_down ~f) (f e) let map_marks ~f e = map_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e @@ -243,7 +241,7 @@ let map_exprs_in_scopes ~f ~varf scopes = (* - *) (** See [Bindlib.box_term] documentation for why we are doing that. *) -let box e= +let box e = let rec id_t () e = map () ~f:id_t e in id_t () e diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 1734505a..0640d7cd 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -136,17 +136,21 @@ val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark val get_scope_body_mark : ('expr, 'm) scope_body -> 'm mark -val untype : ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box -val untype_program : (('a, 'm mark) gexpr Var.expr, 'm) program_generic -> (('a, untyped mark) gexpr Var.expr, untyped) program_generic + +val untype : + ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box + +val untype_program : + (('a, 'm mark) gexpr Var.expr, 'm) program_generic -> + (('a, untyped mark) gexpr Var.expr, untyped) program_generic (** {2 Handling of boxing} *) val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box - (** {2 Traversal functions} *) -val map: +val map : 'ctx -> f:('ctx -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box) -> (('a, 't1) gexpr, 't2) Marked.t -> diff --git a/compiler/shared_ast/shared_ast.ml b/compiler/shared_ast/shared_ast.ml index 8c91d8d3..c1ed9a8b 100644 --- a/compiler/shared_ast/shared_ast.ml +++ b/compiler/shared_ast/shared_ast.ml @@ -15,6 +15,5 @@ the License. *) include Types - module Expr = Expr module Var = Var diff --git a/compiler/shared_ast/types.ml b/compiler/shared_ast/types.ml index 7aa62665..75ecfff5 100644 --- a/compiler/shared_ast/types.ml +++ b/compiler/shared_ast/types.ml @@ -15,12 +15,12 @@ License for the specific language governing permissions and limitations under the License. *) -(** This module defines generic types for types, literals and expressions shared through several of the different ASTs. *) +(** This module defines generic types for types, literals and expressions shared + through several of the different ASTs. *) (* Doesn't define values, so OK to have without an mli *) open Utils - module Runtime = Runtime_ocaml.Runtime module ScopeName : Uid.Id with type info = Uid.MarkedString.info = diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index da81f5ee..32e60462 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -18,8 +18,8 @@ open Types (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the - [gexpr] type *) +(** This module provides types and helpers for Bindlib variables on the [gexpr] + type *) (* The subtypes of the generic AST that hold vars *) type 'e expr = 'e diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 3227fcb8..004ea728 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -18,8 +18,8 @@ open Types (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the - [gexpr] type *) +(** This module provides types and helpers for Bindlib variables on the [gexpr] + type *) type 'e expr = 'e constraint 'e = ([< desugared | scopelang | dcalc | lcalc ], 't) gexpr diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index b3352fbe..67136314 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -167,8 +167,7 @@ let rec translate_expr | Binop (op, e1, e2) -> let op_term = Marked.same_mark_as - (Desugared.Ast.EOp - (Binop (translate_binop (Marked.unmark op)))) + (Desugared.Ast.EOp (Binop (translate_binop (Marked.unmark op)))) op in Bindlib.box_apply2 @@ -190,11 +189,9 @@ let rec translate_expr Desugared.Ast.ELit (LInt (Runtime.integer_of_string i)) | LNumber ((Int i, _), Some (Percent, _)) -> Desugared.Ast.ELit - (LRat - Runtime.(decimal_of_string i /& decimal_of_string "100")) + (LRat Runtime.(decimal_of_string i /& decimal_of_string "100")) | LNumber ((Dec (i, f), _), None) -> - Desugared.Ast.ELit - (LRat Runtime.(decimal_of_string (i ^ "." ^ f))) + Desugared.Ast.ELit (LRat Runtime.(decimal_of_string (i ^ "." ^ f))) | LNumber ((Dec (i, f), _), Some (Percent, _)) -> Desugared.Ast.ELit (LRat @@ -210,16 +207,13 @@ let rec translate_expr +! integer_of_string i.money_amount_cents))) | LNumber ((Int i, _), Some (Year, _)) -> Desugared.Ast.ELit - (LDuration - (Runtime.duration_of_numbers (int_of_string i) 0 0)) + (LDuration (Runtime.duration_of_numbers (int_of_string i) 0 0)) | LNumber ((Int i, _), Some (Month, _)) -> Desugared.Ast.ELit - (LDuration - (Runtime.duration_of_numbers 0 (int_of_string i) 0)) + (LDuration (Runtime.duration_of_numbers 0 (int_of_string i) 0)) | LNumber ((Int i, _), Some (Day, _)) -> Desugared.Ast.ELit - (LDuration - (Runtime.duration_of_numbers 0 0 (int_of_string i))) + (LDuration (Runtime.duration_of_numbers 0 0 (int_of_string i))) | LNumber ((Dec (_, _), _), Some ((Year | Month | Day), _)) -> Errors.raise_spanned_error pos "Impossible to specify decimal amounts of days, months or years" @@ -338,13 +332,10 @@ let rec translate_expr (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt " or ") (fun fmt (s_name, _) -> - Format.fprintf fmt "%a" StructName.format_t - s_name)) + Format.fprintf fmt "%a" StructName.format_t s_name)) (StructMap.bindings x_possible_structs) else - let s_uid, f_uid = - StructMap.choose x_possible_structs - in + let s_uid, f_uid = StructMap.choose x_possible_structs in Bindlib.box_apply (fun e -> Desugared.Ast.EStructAccess (e, f_uid, s_uid), pos) e @@ -408,8 +399,8 @@ let rec translate_expr None, Marked.get_mark f_e; None, Marked.get_mark (Bindlib.unbox e_field); ] - "The field %a has been defined twice:" - StructFieldName.format_t f_uid); + "The field %a has been defined twice:" StructFieldName.format_t + f_uid); let f_e = translate_expr scope inside_definition_of ctxt f_e in Scopelang.Ast.StructFieldMap.add f_uid f_e s_fields) Scopelang.Ast.StructFieldMap.empty fields @@ -419,8 +410,7 @@ let rec translate_expr (fun expected_f _ -> if not (Scopelang.Ast.StructFieldMap.mem expected_f s_fields) then Errors.raise_spanned_error pos - "Missing field for structure %a: \"%a\"" - StructName.format_t s_uid + "Missing field for structure %a: \"%a\"" StructName.format_t s_uid StructFieldName.format_t expected_f) expected_s_fields; @@ -466,8 +456,7 @@ let rec translate_expr ( (match payload with | Some e' -> e' | None -> - ( Desugared.Ast.ELit LUnit, - Marked.get_mark constructor )), + Desugared.Ast.ELit LUnit, Marked.get_mark constructor), c_uid, e_uid ), pos )) @@ -489,8 +478,7 @@ let rec translate_expr ( (match payload with | Some e' -> e' | None -> - ( Desugared.Ast.ELit LUnit, - Marked.get_mark constructor )), + Desugared.Ast.ELit LUnit, Marked.get_mark constructor), c_uid, e_uid ), pos )) @@ -531,8 +519,7 @@ let rec translate_expr (Desugared.Ast.make_abs [| nop_var |] (Bindlib.box ( Desugared.Ast.ELit - (LBool - (EnumConstructor.compare c_uid c_uid' = 0)), + (LBool (EnumConstructor.compare c_uid c_uid' = 0)), pos )) [tau] pos)) (EnumMap.find enum_uid ctxt.enums) @@ -595,9 +582,7 @@ let rec translate_expr (if max_or_min then "max" else "min") Print.format_primitive_typ pred_typ in - let cmp_op = - if max_or_min then Gt op_kind else Lt op_kind - in + let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in let f_pred = Desugared.Ast.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) @@ -656,11 +641,9 @@ let rec translate_expr | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> assert false (* should not happen *) | Ast.Exists -> - Bindlib.box - (Desugared.Ast.ELit (LBool false), Marked.get_mark op') + Bindlib.box (Desugared.Ast.ELit (LBool false), Marked.get_mark op') | Ast.Forall -> - Bindlib.box - (Desugared.Ast.ELit (LBool true), Marked.get_mark op') + Bindlib.box (Desugared.Ast.ELit (LBool true), Marked.get_mark op') | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> Bindlib.box ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 0)), @@ -677,8 +660,7 @@ let rec translate_expr Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> Bindlib.box - ( Desugared.Ast.ELit - (LDuration (Runtime.duration_of_numbers 0 0 0)), + ( Desugared.Ast.ELit (LDuration (Runtime.duration_of_numbers 0 0 0)), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum t) -> Errors.raise_spanned_error pos @@ -703,9 +685,7 @@ let rec translate_expr (translate_expr scope inside_definition_of ctxt predicate) acc in - let make_extr_body - (cmp_op : binop) - (t : Scopelang.Ast.typ Marked.pos) = + let make_extr_body (cmp_op : binop) (t : Scopelang.Ast.typ Marked.pos) = let tmp_var = Desugared.Ast.Var.make "tmp" in let tmp = Desugared.Ast.make_var (tmp_var, Marked.get_mark param') in Desugared.Ast.make_let_in tmp_var t @@ -728,12 +708,9 @@ let rec translate_expr assert false (* should not happen *) | Ast.Exists -> make_body Or | Ast.Forall -> make_body And - | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> - make_body (Add KInt) - | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> - make_body (Add KRat) - | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> - make_body (Add KMoney) + | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> make_body (Add KInt) + | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> make_body (Add KRat) + | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> make_body (Add KMoney) | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> make_body (Add KDuration) | Ast.Aggregate (Ast.AggregateSum _) -> @@ -744,8 +721,7 @@ let rec translate_expr | Ast.Integer -> KInt, (Scopelang.Ast.TLit TInt, pos) | Ast.Decimal -> KRat, (Scopelang.Ast.TLit TRat, pos) | Ast.Money -> KMoney, (Scopelang.Ast.TLit TMoney, pos) - | Ast.Duration -> - KDuration, (Scopelang.Ast.TLit TDuration, pos) + | Ast.Duration -> KDuration, (Scopelang.Ast.TLit TDuration, pos) | Ast.Date -> KDate, (Scopelang.Ast.TLit TDate, pos) | _ -> Errors.raise_spanned_error pos @@ -753,9 +729,7 @@ let rec translate_expr (if max_or_min then "max" else "min") Print.format_primitive_typ t in - let cmp_op = - if max_or_min then Gt op_kind else Lt op_kind - in + let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in make_extr_body cmp_op typ | Ast.Aggregate Ast.AggregateCount -> Bindlib.box_apply2 @@ -763,13 +737,11 @@ let rec translate_expr ( Desugared.Ast.EIfThenElse ( predicate, ( Desugared.Ast.EApp - ( ( Desugared.Ast.EOp - (Binop (Add KInt)), + ( ( Desugared.Ast.EOp (Binop (Add KInt)), Marked.get_mark op' ), [ acc; - ( Desugared.Ast.ELit - (LInt (Runtime.integer_of_int 1)), + ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 1)), Marked.get_mark predicate ); ] ), pos ), @@ -819,8 +791,7 @@ let rec translate_expr Bindlib.box_apply3 (fun f collection init -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Ternop Fold), pos), - [f; init; collection] ), + ((Desugared.Ast.EOp (Ternop Fold), pos), [f; init; collection]), pos )) f collection init | MemCollection (member, collection) -> @@ -837,8 +808,7 @@ let rec translate_expr ( (Desugared.Ast.EOp (Binop Or), pos), [ ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Binop Eq), pos), - [member; param] ), + ((Desugared.Ast.EOp (Binop Eq), pos), [member; param]), pos ); acc; ] ), @@ -850,43 +820,28 @@ let rec translate_expr Bindlib.box_apply (fun binder -> ( Desugared.Ast.EAbs - ( binder, - [ - Scopelang.Ast.TLit TBool, pos; - Scopelang.Ast.TAny, pos; - ] ), + (binder, [Scopelang.Ast.TLit TBool, pos; Scopelang.Ast.TAny, pos]), pos )) (Bindlib.bind_mvar [| acc_var; param_var |] f_body) in Bindlib.box_apply3 (fun f collection init -> ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Ternop Fold), pos), - [f; init; collection] ), + ((Desugared.Ast.EOp (Ternop Fold), pos), [f; init; collection]), pos )) f collection init - | Builtin IntToDec -> - Bindlib.box (Desugared.Ast.EOp (Unop IntToRat), pos) - | Builtin MoneyToDec -> - Bindlib.box (Desugared.Ast.EOp (Unop MoneyToRat), pos) - | Builtin DecToMoney -> - Bindlib.box (Desugared.Ast.EOp (Unop RatToMoney), pos) - | Builtin Cardinal -> - Bindlib.box (Desugared.Ast.EOp (Unop Length), pos) - | Builtin GetDay -> - Bindlib.box (Desugared.Ast.EOp (Unop GetDay), pos) - | Builtin GetMonth -> - Bindlib.box (Desugared.Ast.EOp (Unop GetMonth), pos) - | Builtin GetYear -> - Bindlib.box (Desugared.Ast.EOp (Unop GetYear), pos) + | Builtin IntToDec -> Bindlib.box (Desugared.Ast.EOp (Unop IntToRat), pos) + | Builtin MoneyToDec -> Bindlib.box (Desugared.Ast.EOp (Unop MoneyToRat), pos) + | Builtin DecToMoney -> Bindlib.box (Desugared.Ast.EOp (Unop RatToMoney), pos) + | Builtin Cardinal -> Bindlib.box (Desugared.Ast.EOp (Unop Length), pos) + | Builtin GetDay -> Bindlib.box (Desugared.Ast.EOp (Unop GetDay), pos) + | Builtin GetMonth -> Bindlib.box (Desugared.Ast.EOp (Unop GetMonth), pos) + | Builtin GetYear -> Bindlib.box (Desugared.Ast.EOp (Unop GetYear), pos) | Builtin FirstDayOfMonth -> - Bindlib.box - (Desugared.Ast.EOp (Unop FirstDayOfMonth), pos) + Bindlib.box (Desugared.Ast.EOp (Unop FirstDayOfMonth), pos) | Builtin LastDayOfMonth -> - Bindlib.box - (Desugared.Ast.EOp (Unop LastDayOfMonth), pos) - | Builtin RoundMoney -> - Bindlib.box (Desugared.Ast.EOp (Unop RoundMoney), pos) + Bindlib.box (Desugared.Ast.EOp (Unop LastDayOfMonth), pos) + | Builtin RoundMoney -> Bindlib.box (Desugared.Ast.EOp (Unop RoundMoney), pos) | Builtin RoundDecimal -> Bindlib.box (Desugared.Ast.EOp (Unop RoundDecimal), pos) @@ -941,8 +896,7 @@ and disambiguate_match_and_build_expression (Marked.get_mark case.Ast.match_case_pattern) "This case matches a constructor of enumeration %a but previous \ case were matching constructors of enumeration %a" - EnumName.format_t e_uid - EnumName.format_t e_uid' + EnumName.format_t e_uid EnumName.format_t e_uid' in (match Scopelang.Ast.EnumConstructorMap.find_opt c_uid cases_d with | None -> () @@ -952,8 +906,8 @@ and disambiguate_match_and_build_expression None, Marked.get_mark case.match_case_expr; None, Marked.get_mark (Bindlib.unbox e_case); ] - "The constructor %a has been matched twice:" - EnumConstructor.format_t c_uid); + "The constructor %a has been matched twice:" EnumConstructor.format_t + c_uid); let ctxt, param_var = create_var (Option.map Marked.unmark binding) in let case_body = translate_expr scope inside_definition_of ctxt case.Ast.match_case_expr @@ -1049,8 +1003,7 @@ let merge_conditions match precond, cond with | Some precond, Some cond -> let op_term = - ( Desugared.Ast.EOp (Binop And), - Marked.get_mark (Bindlib.unbox cond) ) + Desugared.Ast.EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) in Bindlib.box_apply2 (fun precond cond -> @@ -1061,8 +1014,7 @@ let merge_conditions (fun precond -> Marked.unmark precond, default_pos) precond | None, Some cond -> cond - | None, None -> - Bindlib.box (Desugared.Ast.ELit (LBool true), default_pos) + | None, None -> Bindlib.box (Desugared.Ast.ELit (LBool true), default_pos) (** Translates a surface definition into condition into a desugared {!type: Desugared.Ast.rule} *) @@ -1237,8 +1189,7 @@ let process_assert ( Desugared.Ast.EIfThenElse ( precond, ass, - Marked.same_mark_as (Desugared.Ast.ELit (LBool true)) - precond ), + Marked.same_mark_as (Desugared.Ast.ELit (LBool true)) precond ), Marked.get_mark precond )) precond ass | None -> ass diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index c5497ce2..0c0a7e5d 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -69,24 +69,18 @@ type context = { (** The names of the scopes *) struct_idmap : StructName.t Desugared.Ast.IdentMap.t; (** The names of the structs *) - field_idmap : - StructFieldName.t StructMap.t - Desugared.Ast.IdentMap.t; + field_idmap : StructFieldName.t StructMap.t Desugared.Ast.IdentMap.t; (** The names of the struct fields. Names of fields can be shared between different structs *) enum_idmap : EnumName.t Desugared.Ast.IdentMap.t; (** The names of the enums *) - constructor_idmap : - EnumConstructor.t EnumMap.t - Desugared.Ast.IdentMap.t; + constructor_idmap : EnumConstructor.t EnumMap.t Desugared.Ast.IdentMap.t; (** The names of the enum constructors. Constructor names can be shared between different enums *) scopes : scope_context Scopelang.Ast.ScopeMap.t; (** For each scope, its context *) - structs : struct_context StructMap.t; - (** For each struct, its context *) - enums : enum_context EnumMap.t; - (** For each enum, its context *) + structs : struct_context StructMap.t; (** For each struct, its context *) + enums : enum_context EnumMap.t; (** For each enum, its context *) var_typs : var_sig Desugared.Ast.ScopeVarMap.t; (** The signatures of each scope variable declared *) } @@ -128,8 +122,7 @@ let get_var_uid match Desugared.Ast.IdentMap.find_opt x scope.var_idmap with | None -> raise_unknown_identifier - (Format.asprintf "for a variable of scope %a" - ScopeName.format_t scope_uid) + (Format.asprintf "for a variable of scope %a" ScopeName.format_t scope_uid) (x, pos) | Some uid -> uid @@ -145,10 +138,8 @@ let get_subscope_uid (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) -let is_subscope_uid - (scope_uid : ScopeName.t) - (ctxt : context) - (y : ident) : bool = +let is_subscope_uid (scope_uid : ScopeName.t) (ctxt : context) (y : ident) : + bool = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in Desugared.Ast.IdentMap.mem y scope.sub_scopes_idmap @@ -372,9 +363,7 @@ let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = (Marked.unmark sdecl.struct_decl_name); List.fold_left (fun ctxt (fdecl, _) -> - let f_uid = - StructFieldName.fresh fdecl.Ast.struct_decl_field_name - in + let f_uid = StructFieldName.fresh fdecl.Ast.struct_decl_field_name in let ctxt = { ctxt with @@ -384,8 +373,7 @@ let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = (fun uids -> match uids with | None -> Some (StructMap.singleton s_uid f_uid) - | Some uids -> - Some (StructMap.add s_uid f_uid uids)) + | Some uids -> Some (StructMap.add s_uid f_uid uids)) ctxt.field_idmap; } in @@ -421,9 +409,7 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = (Marked.unmark edecl.enum_decl_name); List.fold_left (fun ctxt (cdecl, cdecl_pos) -> - let c_uid = - EnumConstructor.fresh cdecl.Ast.enum_decl_case_name - in + let c_uid = EnumConstructor.fresh cdecl.Ast.enum_decl_case_name in let ctxt = { ctxt with @@ -475,9 +461,7 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : (* Checks if the name is already used *) match Desugared.Ast.IdentMap.find_opt name ctxt.scope_idmap with | Some use -> - raise_already_defined_error - (ScopeName.get_info use) - name pos "scope" + raise_already_defined_error (ScopeName.get_info use) name pos "scope" | None -> let scope_uid = ScopeName.fresh (name, pos) in { @@ -497,9 +481,7 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : let name, pos = sdecl.struct_decl_name in match Desugared.Ast.IdentMap.find_opt name ctxt.struct_idmap with | Some use -> - raise_already_defined_error - (StructName.get_info use) - name pos "struct" + raise_already_defined_error (StructName.get_info use) name pos "struct" | None -> let s_uid = StructName.fresh sdecl.struct_decl_name in { @@ -513,9 +495,7 @@ let process_name_item (ctxt : context) (item : Ast.code_item Marked.pos) : let name, pos = edecl.enum_decl_name in match Desugared.Ast.IdentMap.find_opt name ctxt.enum_idmap with | Some use -> - raise_already_defined_error - (EnumName.get_info use) - name pos "enum" + raise_already_defined_error (EnumName.get_info use) name pos "enum" | None -> let e_uid = EnumName.fresh edecl.enum_decl_name in diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index b68d5ceb..49384952 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -69,24 +69,18 @@ type context = { (** The names of the scopes *) struct_idmap : StructName.t Desugared.Ast.IdentMap.t; (** The names of the structs *) - field_idmap : - StructFieldName.t StructMap.t - Desugared.Ast.IdentMap.t; + field_idmap : StructFieldName.t StructMap.t Desugared.Ast.IdentMap.t; (** The names of the struct fields. Names of fields can be shared between different structs *) enum_idmap : EnumName.t Desugared.Ast.IdentMap.t; (** The names of the enums *) - constructor_idmap : - EnumConstructor.t EnumMap.t - Desugared.Ast.IdentMap.t; + constructor_idmap : EnumConstructor.t EnumMap.t Desugared.Ast.IdentMap.t; (** The names of the enum constructors. Constructor names can be shared between different enums *) scopes : scope_context Scopelang.Ast.ScopeMap.t; (** For each scope, its context *) - structs : struct_context StructMap.t; - (** For each struct, its context *) - enums : enum_context EnumMap.t; - (** For each enum, its context *) + structs : struct_context StructMap.t; (** For each struct, its context *) + enums : enum_context EnumMap.t; (** For each enum, its context *) var_typs : var_sig Desugared.Ast.ScopeVarMap.t; (** The signatures of each scope variable declared *) } @@ -111,25 +105,18 @@ val get_var_io : context -> Desugared.Ast.ScopeVar.t -> Ast.scope_decl_context_io val get_var_uid : - ScopeName.t -> - context -> - ident Marked.pos -> - Desugared.Ast.ScopeVar.t + ScopeName.t -> context -> ident Marked.pos -> Desugared.Ast.ScopeVar.t (** Get the variable uid inside the scope given in argument *) val get_subscope_uid : - ScopeName.t -> - context -> - ident Marked.pos -> - Scopelang.Ast.SubScopeName.t + ScopeName.t -> context -> ident Marked.pos -> Scopelang.Ast.SubScopeName.t (** Get the subscope uid inside the scope given in argument *) val is_subscope_uid : ScopeName.t -> context -> ident -> bool (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) -val belongs_to : - context -> Desugared.Ast.ScopeVar.t -> ScopeName.t -> bool +val belongs_to : context -> Desugared.Ast.ScopeVar.t -> ScopeName.t -> bool (** Checks if the var_uid belongs to the scope scope_uid *) val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 09e30d94..9e140746 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -383,8 +383,7 @@ let rec generate_verification_conditions_scopes | ScopeDef scope_def -> let is_selected_scope = match s with - | Some s when ScopeName.compare s scope_def.scope_name = 0 -> - true + | Some s when ScopeName.compare s scope_def.scope_name = 0 -> true | None -> true | _ -> false in @@ -415,9 +414,8 @@ let rec generate_verification_conditions_scopes let _scope_var, next = Bindlib.unbind scope_def.scope_next in generate_verification_conditions_scopes decl_ctx next s @ vcs -let generate_verification_conditions - (p : 'm program) - (s : ScopeName.t option) : verification_condition list = +let generate_verification_conditions (p : 'm program) (s : ScopeName.t option) : + verification_condition list = let vcs = generate_verification_conditions_scopes p.decl_ctx p.scopes s in (* We sort this list by scope name and then variable name to ensure consistent output for testing*) diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 33ada9ca..24aa6769 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -34,17 +34,14 @@ type verification_condition = { vc_kind : verification_condition_kind; vc_scope : ScopeName.t; vc_variable : typed Dcalc.Ast.var Marked.pos; - vc_free_vars_typ : - (typed Dcalc.Ast.expr, typ Marked.pos) Var.Map.t; + vc_free_vars_typ : (typed Dcalc.Ast.expr, typ Marked.pos) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) } val generate_verification_conditions : - typed Dcalc.Ast.program -> - ScopeName.t option -> - verification_condition list + typed Dcalc.Ast.program -> ScopeName.t option -> verification_condition list (** [generate_verification_conditions p None] will generate the verification conditions for all the variables of all the scopes of the program [p], while [generate_verification_conditions p (Some s)] will focus only on the diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index f6b20ea7..e8415812 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -74,9 +74,7 @@ module type BackendIO = sig string val encode_and_check_vc : - decl_ctx -> - Conditions.verification_condition * vc_encoding_result -> - unit + decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit end module MakeBackendIO (B : Backend) = struct diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 7283b2ad..7a318a37 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -79,9 +79,7 @@ module type BackendIO = sig string val encode_and_check_vc : - decl_ctx -> - Conditions.verification_condition * vc_encoding_result -> - unit + decl_ctx -> Conditions.verification_condition * vc_encoding_result -> unit end module MakeBackendIO : functor (B : Backend) -> diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 1c79a6e0..497afc4a 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -429,7 +429,9 @@ let rec translate_op (Print.format_expr ctx.ctx_decl) ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), - List.map (fun arg -> Bindlib.unbox (Shared_ast.Expr.untype arg)) args ), + List.map + (fun arg -> Bindlib.unbox (Shared_ast.Expr.untype arg)) + args ), Untyped { pos = Pos.no_pos } )) in @@ -521,7 +523,8 @@ let rec translate_op ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), List.map - (fun arg -> arg |> Shared_ast.Expr.untype |> Bindlib.unbox) + (fun arg -> + arg |> Shared_ast.Expr.untype |> Bindlib.unbox) args ), Untyped { pos = Pos.no_pos } )) in From a74ccd30eb0b0b9527d64e9435c50fe2ebdd3980 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 16 Aug 2022 10:28:55 +0200 Subject: [PATCH 04/31] Add some documentation on the new lib --- compiler/shared_ast/shared_ast.mld | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 compiler/shared_ast/shared_ast.mld diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld new file mode 100644 index 00000000..b8faa8cf --- /dev/null +++ b/compiler/shared_ast/shared_ast.mld @@ -0,0 +1,34 @@ +{0 Default calculus} + +This module contains a generic AST structure, various type definitions and +helpers that are reused in various passes of the compiler. + +{1 The {!modules: Shared_ast.Types} module} + +The main module {!modules: Shared_ast.Types} is exposed at top-level of the library (so that [open +Shared_ast] gives access to the structures). It defines literals, operators, +and in particular the type {!types: Shared_ast.gexpr}. + +The {!types: Shared_ast.gexpr} type regroups all the cases for the {{: +../dcalc.html} Dcalc} and {{: ../lcalc.html} Lcalc} ASTs, with unconstrained +annotations (used for positions, types, etc.). A GADT is used to eliminate +irrelevant cases, so that e.g. [(dcalc, _) gexpr] doesn't have the [ERaise] and +[ECatch] cases, while [(lcalc, _) gexpr] doesn't have [EDefault]. + +For example, Lcalc expressions are then defined as +[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.gexpr]. + +This makes it possible to write a single function that works on the different +ASTs, by having it take a [('a, _) gexpr] as input. + +The module additionally defines the encompassing [scope] and [program] +structures that are also shared between different compiler passes. + +{1 Helper library} + +The {!modules: Shared_ast.Var} defines ['e Var.Set.t] and [('e, _) Var.Map.t] +types that are useful to handle variables for the different ['e] expression +types without re-instanciating [Set.Make] and [Map.Make] each time. + +[!modules: Shared_ast.Expr} contains various helpers to build well-formed +expressions, and for traversal. From 4bb49c14f1d90c2ada41a14d625e2a3a8ffaa814 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 16 Aug 2022 16:54:42 +0200 Subject: [PATCH 05/31] Simplify some type aliases --- compiler/dcalc/ast.ml | 75 ++++++++++---------- compiler/dcalc/ast.mli | 72 +++++++++---------- compiler/dcalc/optimizations.ml | 6 +- compiler/dcalc/print.ml | 2 +- compiler/dcalc/print.mli | 2 +- compiler/lcalc/ast.ml | 2 +- compiler/lcalc/ast.mli | 4 +- compiler/lcalc/closure_conversion.ml | 45 ++++++------ compiler/lcalc/compile_with_exceptions.ml | 8 +-- compiler/lcalc/compile_without_exceptions.ml | 13 ++-- compiler/lcalc/print.mli | 2 +- compiler/lcalc/to_ocaml.ml | 4 +- compiler/plugins/api_web.ml | 8 +-- compiler/plugins/json_schema.ml | 4 +- compiler/scalc/compile_from_lambda.ml | 2 +- compiler/scopelang/scope_to_dcalc.ml | 11 ++- compiler/shared_ast/dune | 2 + compiler/shared_ast/expr.ml | 15 ++-- compiler/shared_ast/expr.mli | 67 ++++++++--------- compiler/shared_ast/types.ml | 56 ++++++++------- compiler/shared_ast/var.ml | 22 +++--- compiler/shared_ast/var.mli | 17 +++-- compiler/verification/conditions.ml | 4 +- 23 files changed, 214 insertions(+), 229 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 99e8b233..3b01e435 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -23,11 +23,8 @@ type lit = dcalc glit type 'm expr = (dcalc, 'm mark) gexpr and 'm marked_expr = (dcalc, 'm mark) marked_gexpr -type 'm program = ('m expr, 'm) program_generic - -type ('expr, 'm) box_expr_sig = - ('expr, 'm) marked -> ('expr, 'm) marked Bindlib.box - +type 'm program = 'm expr Shared_ast.program +type 'e box_expr_sig = 'e marked -> 'e marked Bindlib.box type 'm var = 'm expr Var.t type 'm vars = 'm expr Var.vars @@ -58,7 +55,7 @@ let rec free_vars_expr (e : 'm marked_expr) : 'm expr Var.Set.t = let vs, body = Bindlib.unmbind binder in Array.fold_right Var.Set.remove vs (free_vars_expr body) -let rec free_vars_scope_body_expr (scope_lets : ('m expr, 'm) scope_body_expr) : +let rec free_vars_scope_body_expr (scope_lets : 'm expr scope_body_expr) : 'm expr Var.Set.t = match scope_lets with | Result e -> free_vars_expr e @@ -67,13 +64,12 @@ let rec free_vars_scope_body_expr (scope_lets : ('m expr, 'm) scope_body_expr) : Var.Set.union (free_vars_expr e) (Var.Set.remove v (free_vars_scope_body_expr body)) -let free_vars_scope_body (scope_body : ('m expr, 'm) scope_body) : - 'm expr Var.Set.t = +let free_vars_scope_body (scope_body : 'm expr scope_body) : 'm expr Var.Set.t = let { scope_body_expr = binder; _ } = scope_body in let v, body = Bindlib.unbind binder in Var.Set.remove v (free_vars_scope_body_expr body) -let rec free_vars_scopes (scopes : ('m expr, 'm) scopes) : 'm expr Var.Set.t = +let rec free_vars_scopes (scopes : 'm expr scopes) : 'm expr Var.Set.t = match scopes with | Nil -> Var.Set.empty | ScopeDef { scope_body = body; scope_next = next; _ } -> @@ -82,18 +78,19 @@ let rec free_vars_scopes (scopes : ('m expr, 'm) scopes) : 'm expr Var.Set.t = (Var.Set.remove v (free_vars_scopes next)) (free_vars_scope_body body) -let make_var ((x, mark) : ('m expr Bindlib.var, 'm) marked) : +let make_var ((x, mark) : ('m expr Bindlib.var, 'm mark) Marked.t) : 'm marked_expr Bindlib.box = Bindlib.box_apply (fun x -> x, mark) (Bindlib.box_var x) -type ('e, 'm) make_abs_sig = +type 'e make_abs_sig = 'e Bindlib.mvar -> - ('e, 'm) marked Bindlib.box -> + 'e marked Bindlib.box -> typ Marked.pos list -> 'm mark -> - ('e, 'm) marked Bindlib.box + 'e marked Bindlib.box + constraint 'e = ('a, 'm mark) gexpr -let (make_abs : ('m expr, 'm) make_abs_sig) = +let (make_abs : 'm expr make_abs_sig) = fun xs e taus mark -> Bindlib.box_apply (fun b -> EAbs (b, taus), mark) (Bindlib.bind_mvar xs e) @@ -105,13 +102,13 @@ let make_app : fun e u mark -> Bindlib.box_apply2 (fun e u -> EApp (e, u), mark) e (Bindlib.box_list u) -type ('expr, 'm) make_let_in_sig = - 'expr Bindlib.var -> - typ Marked.pos -> - ('expr, 'm) marked Bindlib.box -> - ('expr, 'm) marked Bindlib.box -> +type 'e make_let_in_sig = + 'e Bindlib.var -> + marked_typ -> + 'e marked Bindlib.box -> + 'e marked Bindlib.box -> Pos.t -> - ('expr, 'm) marked Bindlib.box + 'e marked Bindlib.box let empty_thunked_term mark : 'm marked_expr = let silent = Var.make "_" in @@ -126,7 +123,7 @@ let empty_thunked_term mark : 'm marked_expr = Marked.mark pos (TArrow (Marked.mark pos (TLit TUnit), ty))) mark)) -let (make_let_in : ('m expr, 'm) make_let_in_sig) = +let (make_let_in : 'm expr make_let_in_sig) = fun x tau e1 e2 pos -> let m_e1 = Marked.get_mark (Bindlib.unbox e1) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in @@ -215,10 +212,10 @@ and equal_exprs_list (es1 : 'e marked_expr list) (es2 : 'm marked_expr list) : List.for_all (fun (x, y) -> equal_exprs x y) (List.combine es1 es2) let rec unfold_scope_body_expr - ~(box_expr : ('expr, 'm) box_expr_sig) - ~(make_let_in : ('expr, 'm) make_let_in_sig) + ~(box_expr : 'e box_expr_sig) + ~(make_let_in : 'e make_let_in_sig) (ctx : decl_ctx) - (scope_let : ('expr, 'm) scope_body_expr) : ('expr, 'm) marked Bindlib.box = + (scope_let : 'e scope_body_expr) : 'e marked Bindlib.box = match scope_let with | Result e -> box_expr e | ScopeLet @@ -235,12 +232,12 @@ let rec unfold_scope_body_expr scope_let_pos let build_whole_scope_expr - ~(box_expr : ('expr, 'm) box_expr_sig) - ~(make_abs : ('expr, 'm) make_abs_sig) - ~(make_let_in : ('expr, 'm) make_let_in_sig) + ~(box_expr : 'e box_expr_sig) + ~(make_abs : 'e make_abs_sig) + ~(make_let_in : 'e make_let_in_sig) (ctx : decl_ctx) - (body : ('expr, 'm) scope_body) - (mark_scope : 'm mark) : ('expr, 'm) marked Bindlib.box = + (body : 'e scope_body) + (mark_scope : 'm mark) : 'e marked Bindlib.box = let var, body_expr = Bindlib.unbind body.scope_body_expr in let body_expr = unfold_scope_body_expr ~box_expr ~make_let_in ctx body_expr in make_abs (Array.of_list [var]) body_expr @@ -275,13 +272,13 @@ type 'expr scope_name_or_var = | ScopeVar of 'expr Bindlib.var let rec unfold_scopes - ~(box_expr : ('expr, 'm) box_expr_sig) - ~(make_abs : ('expr, 'm) make_abs_sig) - ~(make_let_in : ('expr, 'm) make_let_in_sig) + ~(box_expr : 'e box_expr_sig) + ~(make_abs : 'e make_abs_sig) + ~(make_let_in : 'e make_let_in_sig) (ctx : decl_ctx) - (s : ('expr, 'm) scopes) + (s : 'e scopes) (mark : 'm mark) - (main_scope : 'expr scope_name_or_var) : ('expr, 'm) marked Bindlib.box = + (main_scope : 'expr scope_name_or_var) : 'e marked Bindlib.box = match s with | Nil -> ( match main_scope with @@ -316,11 +313,11 @@ let rec find_scope name vars = function find_scope name (var :: vars) next let build_whole_program_expr - ~(box_expr : ('expr, 'm) box_expr_sig) - ~(make_abs : ('expr, 'm) make_abs_sig) - ~(make_let_in : ('expr, 'm) make_let_in_sig) - (p : ('expr, 'm) program_generic) - (main_scope : ScopeName.t) : ('expr, 'm) marked Bindlib.box = + ~(box_expr : 'e box_expr_sig) + ~(make_abs : 'e make_abs_sig) + ~(make_let_in : 'e make_let_in_sig) + (p : 'e Shared_ast.program) + (main_scope : ScopeName.t) : 'e marked Bindlib.box = let _, main_scope_body = find_scope main_scope [] p.scopes in unfold_scopes ~box_expr ~make_abs ~make_let_in p.decl_ctx p.scopes (Expr.get_scope_body_mark main_scope_body) diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index 04ff839e..77dc9f43 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -25,7 +25,7 @@ type lit = dcalc glit type 'm expr = (dcalc, 'm mark) gexpr and 'm marked_expr = (dcalc, 'm mark) marked_gexpr -type 'm program = ('m expr, 'm) program_generic +type 'm program = 'm expr Shared_ast.program (** {1 Helpers} *) @@ -35,27 +35,24 @@ type 'm var = 'm expr Var.t type 'm vars = 'm expr Var.vars val free_vars_expr : 'm marked_expr -> 'm expr Var.Set.t +val free_vars_scope_body_expr : 'm expr scope_body_expr -> 'm expr Var.Set.t +val free_vars_scope_body : 'm expr scope_body -> 'm expr Var.Set.t +val free_vars_scopes : 'm expr scopes -> 'm expr Var.Set.t +val make_var : ('m var, 'm mark) Marked.t -> 'm expr marked Bindlib.box -val free_vars_scope_body_expr : - ('m expr, 'm) scope_body_expr -> 'm expr Var.Set.t - -val free_vars_scope_body : ('m expr, 'm) scope_body -> 'm expr Var.Set.t -val free_vars_scopes : ('m expr, 'm) scopes -> 'm expr Var.Set.t -val make_var : ('m var, 'm) marked -> 'm marked_expr Bindlib.box - -type ('expr, 'm) box_expr_sig = - ('expr, 'm) marked -> ('expr, 'm) marked Bindlib.box +type 'e box_expr_sig = 'e marked -> 'e marked Bindlib.box (** {2 Boxed term constructors} *) -type ('e, 'm) make_abs_sig = +type 'e make_abs_sig = 'e Bindlib.mvar -> - ('e, 'm) marked Bindlib.box -> - marked_typ list -> + 'e marked Bindlib.box -> + typ Marked.pos list -> 'm mark -> - ('e, 'm) marked Bindlib.box + 'e marked Bindlib.box + constraint 'e = ('a, 'm mark) gexpr -val make_abs : ('m expr, 'm) make_abs_sig +val make_abs : 'm expr make_abs_sig val make_app : 'm marked_expr Bindlib.box -> @@ -63,15 +60,16 @@ val make_app : 'm mark -> 'm marked_expr Bindlib.box -type ('expr, 'm) make_let_in_sig = - 'expr Bindlib.var -> +type 'e make_let_in_sig = + 'e Bindlib.var -> marked_typ -> - ('expr, 'm) marked Bindlib.box -> - ('expr, 'm) marked Bindlib.box -> + 'e marked Bindlib.box -> + 'e marked Bindlib.box -> Pos.t -> - ('expr, 'm) marked Bindlib.box + 'e marked Bindlib.box + constraint 'e = (_, _) gexpr -val make_let_in : ('m expr, 'm) make_let_in_sig +val make_let_in : 'm expr make_let_in_sig (**{2 Other}*) @@ -84,13 +82,13 @@ val equal_exprs : 'm marked_expr -> 'm marked_expr -> bool (** {1 AST manipulation helpers}*) val build_whole_scope_expr : - box_expr:('expr, 'm) box_expr_sig -> - make_abs:('expr, 'm) make_abs_sig -> - make_let_in:('expr, 'm) make_let_in_sig -> + box_expr:'e box_expr_sig -> + make_abs:'e make_abs_sig -> + make_let_in:'e make_let_in_sig -> decl_ctx -> - ('expr, 'm) scope_body -> + (('a, 'm mark) gexpr as 'e) scope_body -> 'm mark -> - ('expr, 'm) marked Bindlib.box + 'e marked Bindlib.box (** Usage: [build_whole_scope_expr ctx body scope_position] where [scope_position] corresponds to the line of the scope declaration for instance. *) @@ -100,22 +98,22 @@ type 'expr scope_name_or_var = | ScopeVar of 'expr Bindlib.var val unfold_scopes : - box_expr:('expr, 'm) box_expr_sig -> - make_abs:('expr, 'm) make_abs_sig -> - make_let_in:('expr, 'm) make_let_in_sig -> + box_expr:'e box_expr_sig -> + make_abs:'e make_abs_sig -> + make_let_in:'e make_let_in_sig -> decl_ctx -> - ('expr, 'm) scopes -> + (('a, 'm mark) gexpr as 'e) scopes -> 'm mark -> - 'expr scope_name_or_var -> - ('expr, 'm) marked Bindlib.box + 'e scope_name_or_var -> + 'e marked Bindlib.box val build_whole_program_expr : - box_expr:('expr, 'm) box_expr_sig -> - make_abs:('expr, 'm) make_abs_sig -> - make_let_in:('expr, 'm) make_let_in_sig -> - ('expr, 'm) program_generic -> + box_expr:'e box_expr_sig -> + make_abs:'e make_abs_sig -> + make_let_in:'e make_let_in_sig -> + 'e Shared_ast.program -> ScopeName.t -> - ('expr, 'm) marked Bindlib.box + (('a, 'm mark) gexpr as 'e) marked Bindlib.box (** Usage: [build_whole_program_expr program main_scope] builds an expression corresponding to the main program and returning the main scope as a function. *) diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index 4a00fbfa..649ab806 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -190,8 +190,8 @@ let optimize_expr (decl_ctx : decl_ctx) (e : 'm marked_expr) = let rec scope_lets_map (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) (ctx : 'a) - (scope_body_expr : ('m expr, 'm) scope_body_expr) : - ('m expr, 'm) scope_body_expr Bindlib.box = + (scope_body_expr : 'm expr scope_body_expr) : + 'm expr scope_body_expr Bindlib.box = match scope_body_expr with | Result e -> Bindlib.box_apply (fun e' -> Result e') (t ctx e) | ScopeLet scope_let -> @@ -212,7 +212,7 @@ let rec scope_lets_map let rec scopes_map (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) (ctx : 'a) - (scopes : ('m expr, 'm) scopes) : ('m expr, 'm) scopes Bindlib.box = + (scopes : 'm expr scopes) : 'm expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> diff --git a/compiler/dcalc/print.ml b/compiler/dcalc/print.ml index e2f68df1..e48e3b1d 100644 --- a/compiler/dcalc/print.ml +++ b/compiler/dcalc/print.ml @@ -348,7 +348,7 @@ let format_scope ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) - ((n, s) : ScopeName.t * ('m Ast.expr, 'm) scope_body) = + ((n, s) : ScopeName.t * 'm scope_body) = Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" ScopeName.format_t n (format_expr ctx ~debug) (Bindlib.unbox diff --git a/compiler/dcalc/print.mli b/compiler/dcalc/print.mli index a9148e33..d39332ea 100644 --- a/compiler/dcalc/print.mli +++ b/compiler/dcalc/print.mli @@ -52,5 +52,5 @@ val format_scope : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - ScopeName.t * ('m Ast.expr, 'm) scope_body -> + ScopeName.t * 'm Ast.expr scope_body -> unit diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 21c8233e..559e7294 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -23,7 +23,7 @@ type lit = lcalc glit type 'm expr = (lcalc, 'm mark) gexpr and 'm marked_expr = (lcalc, 'm mark) marked_gexpr -type 'm program = ('m expr, 'm) program_generic +type 'm program = 'm expr Shared_ast.program type 'm var = 'm expr Var.t type 'm vars = 'm expr Var.vars diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index a61bd592..4d60a9b9 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -26,7 +26,7 @@ type lit = lcalc glit type 'm expr = (lcalc, 'm mark) gexpr and 'm marked_expr = (lcalc, 'm mark) marked_gexpr -type 'm program = ('m expr, 'm) program_generic +type 'm program = 'm expr Shared_ast.program (** {1 Variable helpers} *) @@ -35,7 +35,7 @@ type 'm vars = 'm expr Var.vars (** {1 Language terms construction}*) -val make_var : ('m var, 'm) marked -> 'm marked_expr Bindlib.box +val make_var : ('m var, 'm mark) Marked.t -> 'm marked_expr Bindlib.box val make_abs : 'm vars -> diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index 02cac000..95ef8c1d 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -29,26 +29,21 @@ type 'm ctx = { name_context : string; globally_bound_vars : 'm expr Var.Set.t } http://gallium.inria.fr/~fpottier/mpri/cours04.pdf#page=9. *) let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : m marked_expr Bindlib.box = - let module MVarSet = Set.Make (struct - type t = m var - - let compare = Bindlib.compare_vars - end) in let rec aux e = match Marked.unmark e with | EVar v -> ( Bindlib.box_apply (fun new_v -> new_v, Marked.get_mark e) (Bindlib.box_var v), - if Var.Set.mem v ctx.globally_bound_vars then MVarSet.empty - else MVarSet.singleton v ) + if Var.Set.mem v ctx.globally_bound_vars then Var.Set.empty + else Var.Set.singleton v ) | ETuple (args, s) -> let new_args, free_vars = List.fold_left (fun (new_args, free_vars) arg -> let new_arg, new_free_vars = aux arg in - new_arg :: new_args, MVarSet.union new_free_vars free_vars) - ([], MVarSet.empty) args + new_arg :: new_args, Var.Set.union new_free_vars free_vars) + ([], Var.Set.empty) args in ( Bindlib.box_apply (fun new_args -> ETuple (List.rev new_args, s), Marked.get_mark e) @@ -83,7 +78,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : EAbs (new_binder, typs), Marked.get_mark arm) new_binder :: new_arms, - MVarSet.union free_vars new_free_vars ) + Var.Set.union free_vars new_free_vars ) | _ -> failwith "should not happen") arms ([], free_vars) in @@ -98,14 +93,14 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : List.fold_right (fun arg (new_args, free_vars) -> let new_arg, new_free_vars = aux arg in - new_arg :: new_args, MVarSet.union free_vars new_free_vars) - args ([], MVarSet.empty) + new_arg :: new_args, Var.Set.union free_vars new_free_vars) + args ([], Var.Set.empty) in ( Bindlib.box_apply (fun new_args -> EArray new_args, Marked.get_mark e) (Bindlib.box_list new_args), free_vars ) - | ELit l -> Bindlib.box (ELit l, Marked.get_mark e), MVarSet.empty + | ELit l -> Bindlib.box (ELit l, Marked.get_mark e), Var.Set.empty | EApp ((EAbs (binder, typs_abs), e1_pos), args) -> (* let-binding, we should not close these *) let vars, body = Bindlib.unmbind binder in @@ -115,7 +110,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : List.fold_right (fun arg (new_args, free_vars) -> let new_arg, new_free_vars = aux arg in - new_arg :: new_args, MVarSet.union free_vars new_free_vars) + new_arg :: new_args, Var.Set.union free_vars new_free_vars) args ([], free_vars) in ( Bindlib.box_apply2 @@ -135,9 +130,9 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : let new_body, body_vars = aux body in (* [[t]] *) let extra_vars = - MVarSet.diff body_vars (MVarSet.of_list (Array.to_list vars)) + Var.Set.diff body_vars (Var.Set.of_list (Array.to_list vars)) in - let extra_vars_list = MVarSet.elements extra_vars in + let extra_vars_list = Var.Set.elements extra_vars in (* x1, ..., xn *) let code_var = Var.make ctx.name_context in (* code *) @@ -195,8 +190,8 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : List.fold_right (fun arg (new_args, free_vars) -> let new_arg, new_free_vars = aux arg in - new_arg :: new_args, MVarSet.union free_vars new_free_vars) - args ([], MVarSet.empty) + new_arg :: new_args, Var.Set.union free_vars new_free_vars) + args ([], Var.Set.empty) in ( Bindlib.box_apply (fun new_e2 -> EApp ((EOp op, pos_op), new_e2), Marked.get_mark e) @@ -208,8 +203,8 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : List.fold_right (fun arg (new_args, free_vars) -> let new_arg, new_free_vars = aux arg in - new_arg :: new_args, MVarSet.union free_vars new_free_vars) - args ([], MVarSet.empty) + new_arg :: new_args, Var.Set.union free_vars new_free_vars) + args ([], Var.Set.empty) in ( Bindlib.box_apply2 (fun new_v new_e2 -> EApp ((new_v, v_pos), new_e2), Marked.get_mark e) @@ -224,7 +219,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : List.fold_right (fun arg (new_args, free_vars) -> let new_arg, new_free_vars = aux arg in - new_arg :: new_args, MVarSet.union free_vars new_free_vars) + new_arg :: new_args, Var.Set.union free_vars new_free_vars) args ([], free_vars) in let call_expr = @@ -254,7 +249,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : (fun new_e1 -> EAssert new_e1, Marked.get_mark e) new_e1, free_vars ) - | EOp op -> Bindlib.box (EOp op, Marked.get_mark e), MVarSet.empty + | EOp op -> Bindlib.box (EOp op, Marked.get_mark e), Var.Set.empty | EIfThenElse (e1, e2, e3) -> let new_e1, free_vars1 = aux e1 in let new_e2, free_vars2 = aux e2 in @@ -263,9 +258,9 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : (fun new_e1 new_e2 new_e3 -> EIfThenElse (new_e1, new_e2, new_e3), Marked.get_mark e) new_e1 new_e2 new_e3, - MVarSet.union (MVarSet.union free_vars1 free_vars2) free_vars3 ) + Var.Set.union (Var.Set.union free_vars1 free_vars2) free_vars3 ) | ERaise except -> - Bindlib.box (ERaise except, Marked.get_mark e), MVarSet.empty + Bindlib.box (ERaise except, Marked.get_mark e), Var.Set.empty | ECatch (e1, except, e2) -> let new_e1, free_vars1 = aux e1 in let new_e2, free_vars2 = aux e2 in @@ -273,7 +268,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : (fun new_e1 new_e2 -> ECatch (new_e1, except, new_e2), Marked.get_mark e) new_e1 new_e2, - MVarSet.union free_vars1 free_vars2 ) + Var.Set.union free_vars1 free_vars2 ) in let e', _vars = aux e in e' diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 2d231195..f7bd8d20 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -119,8 +119,8 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : let rec translate_scope_lets (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scope_lets : ('m D.expr, 'm) scope_body_expr) : - ('m A.expr, 'm) scope_body_expr Bindlib.box = + (scope_lets : 'm D.expr scope_body_expr) : + 'm A.expr scope_body_expr Bindlib.box = match scope_lets with | Result e -> Bindlib.box_apply (fun e -> Result e) (translate_expr ctx e) | ScopeLet scope_let -> @@ -147,7 +147,7 @@ let rec translate_scope_lets let rec translate_scopes (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scopes : ('m D.expr, 'm) scopes) : ('m A.expr, 'm) scopes Bindlib.box = + (scopes : 'm D.expr scopes) : 'm A.expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -166,7 +166,7 @@ let rec translate_scopes let new_scope_body_expr = Bindlib.bind_var new_scope_input_var new_scope_body_expr in - let new_scope : ('m A.expr, 'm) scope_body Bindlib.box = + let new_scope : 'm A.expr scope_body Bindlib.box = Bindlib.box_apply (fun new_scope_body_expr -> { diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index a2982a48..3e848954 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -365,10 +365,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) -let rec translate_scope_let - (ctx : 'm ctx) - (lets : ('m D.expr, 'm) scope_body_expr) : - ('m A.expr, 'm) scope_body_expr Bindlib.box = +let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : + 'm A.expr scope_body_expr Bindlib.box = match lets with | Result e -> Bindlib.box_apply @@ -493,8 +491,7 @@ let rec translate_scope_let let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : ('m D.expr, 'm) scope_body) : ('m A.expr, 'm) scope_body Bindlib.box - = + (body : 'm D.expr scope_body) : 'm A.expr scope_body Bindlib.box = match body with | { scope_body_expr = result; @@ -520,8 +517,8 @@ let translate_scope_body }) (Bindlib.bind_var v' (translate_scope_let ctx' lets)) -let rec translate_scopes (ctx : 'm ctx) (scopes : ('m D.expr, 'm) scopes) : - ('m A.expr, 'm) scopes Bindlib.box = +let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.expr scopes) : + 'm A.expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef { scope_name; scope_body; scope_next } -> diff --git a/compiler/lcalc/print.mli b/compiler/lcalc/print.mli index 5b606e82..6027217c 100644 --- a/compiler/lcalc/print.mli +++ b/compiler/lcalc/print.mli @@ -30,5 +30,5 @@ val format_scope : ?debug:bool -> decl_ctx -> Format.formatter -> - ScopeName.t * ('m Ast.expr, 'm) scope_body -> + ScopeName.t * 'm Ast.expr scope_body -> unit diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index d94bbacc..81cf78b0 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -564,7 +564,7 @@ let format_ctx let rec format_scope_body_expr (ctx : decl_ctx) (fmt : Format.formatter) - (scope_lets : ('m Ast.expr, 'm) scope_body_expr) : unit = + (scope_lets : 'm Ast.expr scope_body_expr) : unit = match scope_lets with | Result e -> format_expr ctx fmt e | ScopeLet scope_let -> @@ -580,7 +580,7 @@ let rec format_scope_body_expr let rec format_scopes (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : ('m Ast.expr, 'm) scopes) : unit = + (scopes : 'm Ast.expr scopes) : unit = match scopes with | Nil -> () | ScopeDef scope_def -> diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index 4f81247d..9e81801e 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -334,16 +334,16 @@ module To_jsoo = struct Format.fprintf fmt "%a@\n" format_enum_decl (e, find_enum e ctx)) (type_ordering @ scope_structs) - let fmt_input_struct_name fmt (scope_def : ('a expr, 'm) scope_def) = + let fmt_input_struct_name fmt (scope_def : 'a expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_input_struct - let fmt_output_struct_name fmt (scope_def : ('a expr, 'm) scope_def) = + let fmt_output_struct_name fmt (scope_def : 'a expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_output_struct let rec format_scopes_to_fun (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : ('expr, 'm) scopes) = + (scopes : 'e scopes) = match scopes with | Nil -> () | ScopeDef scope_def -> @@ -362,7 +362,7 @@ module To_jsoo = struct let rec format_scopes_to_callbacks (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : ('expr, 'm) scopes) : unit = + (scopes : 'e scopes) : unit = match scopes with | Nil -> () | ScopeDef scope_def -> diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index b2e94815..7441ce3e 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -49,7 +49,7 @@ module To_json = struct Format.fprintf fmt "%s" s let rec find_scope_def (target_name : string) : - ('m expr, 'm) scopes -> ('m expr, 'm) scope_def option = function + 'm expr scopes -> 'm expr scope_def option = function | Nil -> None | ScopeDef scope_def -> let name = Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in @@ -102,7 +102,7 @@ module To_json = struct let fmt_definitions (ctx : decl_ctx) (fmt : Format.formatter) - (scope_def : ('m expr, 'm) scope_def) = + (scope_def : 'e scope_def) = let get_name t = match Marked.unmark t with | TTuple (_, Some sname) -> Format.asprintf "%a" format_struct_name sname diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index e18d0c43..2342244d 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -275,7 +275,7 @@ let rec translate_scope_body_expr (decl_ctx : decl_ctx) (var_dict : ('m L.expr, A.LocalName.t) Var.Map.t) (func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t) - (scope_expr : ('m L.expr, 'm) scope_body_expr) : A.block = + (scope_expr : 'm L.expr scope_body_expr) : A.block = match scope_expr with | Result e -> let block, new_e = diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 10f53986..12564007 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -379,8 +379,8 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - ((untyped Dcalc.Ast.expr, untyped) scope_body_expr Bindlib.box -> - (untyped Dcalc.Ast.expr, untyped) scope_body_expr Bindlib.box) + (untyped Dcalc.Ast.expr scope_body_expr Bindlib.box -> + untyped Dcalc.Ast.expr scope_body_expr Bindlib.box) * ctx = match rule with | Definition ((ScopeVar a, var_def_pos), tau, a_io, e) -> @@ -672,7 +672,7 @@ let translate_rules (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) (sigma_return_struct_name : StructName.t) : - (untyped Dcalc.Ast.expr, untyped) scope_body_expr Bindlib.box * ctx = + untyped Dcalc.Ast.expr scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -709,7 +709,7 @@ let translate_scope_decl (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - (untyped Dcalc.Ast.expr, untyped) scope_body Bindlib.box * struct_ctx = + untyped Dcalc.Ast.expr scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in @@ -907,8 +907,7 @@ let translate_program (prgm : Ast.program) : in (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) - let (scopes, decl_ctx) - : (untyped Dcalc.Ast.expr, untyped) scopes Bindlib.box * _ = + let (scopes, decl_ctx) : untyped Dcalc.Ast.expr scopes Bindlib.box * _ = List.fold_right (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in diff --git a/compiler/shared_ast/dune b/compiler/shared_ast/dune index 0fffcc69..64a1668b 100644 --- a/compiler/shared_ast/dune +++ b/compiler/shared_ast/dune @@ -1,4 +1,6 @@ (library (name shared_ast) (public_name catala.shared_ast) + (flags + (:standard -short-paths)) (libraries bindlib unionFind utils catala.runtime_ocaml)) diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index b272ba57..50ca7531 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -77,11 +77,13 @@ let no_mark (type m) : m mark -> m mark = function let mark_pos (type m) (m : m mark) : Pos.t = match m with Untyped { pos } | Typed { pos; _ } -> pos -let pos (type m) (x : ('a, m) marked) : Pos.t = mark_pos (Marked.get_mark x) +let pos (type m) (x : ('a, m mark) Marked.t) : Pos.t = + mark_pos (Marked.get_mark x) + let ty (_, m) : marked_typ = match m with Typed { ty; _ } -> ty -let with_ty (type m) (ty : marked_typ) (x : ('a, m) marked) : ('a, typed) marked - = +let with_ty (type m) (ty : marked_typ) (x : ('a, m mark) Marked.t) : + ('a, typed mark) Marked.t = Marked.mark (match Marked.get_mark x with | Untyped { pos } -> Typed { pos; ty } @@ -247,12 +249,11 @@ let box e = let untype e = map_marks ~f:(fun m -> Untyped { pos = mark_pos m }) e -let untype_program prg = +let untype_program (prg : ('a, 'm mark) gexpr program) : + ('a, untyped mark) gexpr program = { prg with scopes = Bindlib.unbox - (map_exprs_in_scopes - ~f:(fun e -> untype e) - ~varf:Var.translate prg.scopes); + (map_exprs_in_scopes ~f:untype ~varf:Var.translate prg.scopes); } diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 0640d7cd..d4678b2b 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -22,10 +22,7 @@ open Types (** {2 Boxed constructors} *) -val evar : - (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr Bindlib.var -> - 't -> - ('a, 't) marked_gexpr Bindlib.box +val evar : ('a, 't) gexpr Bindlib.var -> 't -> ('a, 't) marked_gexpr Bindlib.box val etuple : (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> @@ -57,23 +54,21 @@ val ematch : ('a, 't) marked_gexpr Bindlib.box val earray : - ('a, 't) marked_gexpr Bindlib.box list -> + (([< any ] as 'a), 't) marked_gexpr Bindlib.box list -> 't -> ('a, 't) marked_gexpr Bindlib.box -val elit : 'a glit -> 't -> ('a, 't) marked_gexpr Bindlib.box +val elit : ([< any ] as 'a) glit -> 't -> ('a, 't) marked_gexpr Bindlib.box val eabs : - ( (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr, - ('a, 't) marked_gexpr ) - Bindlib.mbinder + ((([< any ] as 'a), 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder Bindlib.box -> marked_typ list -> 't -> ('a, 't) marked_gexpr Bindlib.box val eapp : - ('a, 't) marked_gexpr Bindlib.box -> + (([< any ] as 'a), 't) marked_gexpr Bindlib.box -> ('a, 't) marked_gexpr Bindlib.box list -> 't -> ('a, 't) marked_gexpr Bindlib.box @@ -83,7 +78,7 @@ val eassert : 't -> ('a, 't) marked_gexpr Bindlib.box -val eop : operator -> 't -> ('a, 't) marked_gexpr Bindlib.box +val eop : operator -> 't -> ([< any ], 't) marked_gexpr Bindlib.box val edefault : (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> @@ -93,8 +88,7 @@ val edefault : ('a, 't) marked_gexpr Bindlib.box val eifthenelse : - (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) marked_gexpr - Bindlib.box -> + (([< any ] as 'a), 't) marked_gexpr Bindlib.box -> ('a, 't) marked_gexpr Bindlib.box -> ('a, 't) marked_gexpr Bindlib.box -> 't -> @@ -118,9 +112,9 @@ val eraise : except -> 't -> (lcalc, 't) marked_gexpr Bindlib.box val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t -val pos : ('a, 'm) marked -> Pos.t -val ty : ('a, typed) marked -> marked_typ -val with_ty : marked_typ -> ('a, 'm) marked -> ('a, typed) marked +val pos : ('e, _) gexpr marked -> Pos.t +val ty : (_, typed mark) Marked.t -> marked_typ +val with_ty : marked_typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t val map_mark : (Pos.t -> Pos.t) -> (marked_typ -> marked_typ) -> 'm mark -> 'm mark @@ -135,14 +129,13 @@ val map_mark2 : val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark -val get_scope_body_mark : ('expr, 'm) scope_body -> 'm mark +val get_scope_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark val untype : ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box val untype_program : - (('a, 'm mark) gexpr Var.expr, 'm) program_generic -> - (('a, untyped mark) gexpr Var.expr, untyped) program_generic + (([< any ] as 'a), 'm mark) gexpr program -> ('a, untyped mark) gexpr program (** {2 Handling of boxing} *) @@ -186,9 +179,9 @@ val map_marks : f:('t1 -> 't2) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box val fold_left_scope_lets : - f:('a -> ('expr, 'm) scope_let -> 'expr Bindlib.var -> 'a) -> + f:('a -> 'e scope_let -> 'e Bindlib.var -> 'a) -> init:'a -> - ('expr, 'm) scope_body_expr -> + 'e scope_body_expr -> 'a (** Usage: [fold_left_scope_lets ~f:(fun acc scope_let scope_let_var -> ...) ~init scope_lets], @@ -196,9 +189,9 @@ val fold_left_scope_lets : scope lets to be examined. *) val fold_right_scope_lets : - f:(('expr1, 'm1) scope_let -> 'expr1 Bindlib.var -> 'a -> 'a) -> - init:(('expr1, 'm1) marked -> 'a) -> - ('expr1, 'm1) scope_body_expr -> + f:('expr1 scope_let -> 'expr1 Bindlib.var -> 'a -> 'a) -> + init:('expr1 marked -> 'a) -> + 'expr1 scope_body_expr -> 'a (** Usage: [fold_right_scope_lets ~f:(fun scope_let scope_let_var acc -> ...) ~init scope_lets], @@ -206,15 +199,15 @@ val fold_right_scope_lets : scope lets to be examined (which are before in the program order). *) val map_exprs_in_scope_lets : - f:(('expr1, 'm1) marked -> ('expr2, 'm2) marked Bindlib.box) -> + f:('expr1 marked -> 'expr2 marked Bindlib.box) -> varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> - ('expr1, 'm1) scope_body_expr -> - ('expr2, 'm2) scope_body_expr Bindlib.box + 'expr1 scope_body_expr -> + 'expr2 scope_body_expr Bindlib.box val fold_left_scope_defs : - f:('a -> ('expr1, 'm1) scope_def -> 'expr1 Bindlib.var -> 'a) -> + f:('a -> 'expr1 scope_def -> 'expr1 Bindlib.var -> 'a) -> init:'a -> - ('expr1, 'm1) scopes -> + 'expr1 scopes -> 'a (** Usage: [fold_left_scope_defs ~f:(fun acc scope_def scope_var -> ...) ~init scope_def], @@ -222,9 +215,9 @@ val fold_left_scope_defs : be examined. *) val fold_right_scope_defs : - f:(('expr1, 'm1) scope_def -> 'expr1 Bindlib.var -> 'a -> 'a) -> + f:('expr1 scope_def -> 'expr1 Bindlib.var -> 'a -> 'a) -> init:'a -> - ('expr1, 'm1) scopes -> + 'expr1 scopes -> 'a (** Usage: [fold_right_scope_defs ~f:(fun scope_def scope_var acc -> ...) ~init scope_def], @@ -232,14 +225,14 @@ val fold_right_scope_defs : be examined (which are before in the program order). *) val map_scope_defs : - f:(('expr, 'm) scope_def -> ('expr, 'm) scope_def Bindlib.box) -> - ('expr, 'm) scopes -> - ('expr, 'm) scopes Bindlib.box + f:('e scope_def -> 'e scope_def Bindlib.box) -> + 'e scopes -> + 'e scopes Bindlib.box val map_exprs_in_scopes : - f:(('expr1, 'm1) marked -> ('expr2, 'm2) marked Bindlib.box) -> + f:('expr1 marked -> 'expr2 marked Bindlib.box) -> varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> - ('expr1, 'm1) scopes -> - ('expr2, 'm2) scopes Bindlib.box + 'expr1 scopes -> + 'expr2 scopes Bindlib.box (** This is the main map visitor for all the expressions inside all the scopes of the program. *) diff --git a/compiler/shared_ast/types.ml b/compiler/shared_ast/types.ml index 75ecfff5..ffc9a567 100644 --- a/compiler/shared_ast/types.ml +++ b/compiler/shared_ast/types.ml @@ -127,8 +127,9 @@ type desugared = [ `Desugared ] type scopelang = [ `Scopelang ] type dcalc = [ `Dcalc ] type lcalc = [ `Lcalc ] -type scalc = [ `Scalc ] -type any = [ desugared | scopelang | dcalc | lcalc | scalc ] + +(* type scalc = [ `Scalc ] *) +type any = [ desugared | scopelang | dcalc | lcalc ] (** Literals are the same throughout compilation except for the [LEmptyError] case which is eliminated midway through. *) @@ -152,10 +153,12 @@ type ('a, 't) marked_gexpr = (('a, 't) gexpr, 't) Marked.t library, based on higher-order abstract syntax *) and ('a, 't) gexpr = (* Constructors common to all ASTs *) - | ELit : 'a glit -> ('a, 't) gexpr - | EApp : ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list -> ('a, 't) gexpr - | EOp : operator -> ('a, 't) gexpr - | EArray : ('a, 't) marked_gexpr list -> ('a, 't) gexpr + | ELit : 'a glit -> (([< any ] as 'a), 't) gexpr + | EApp : + ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list + -> (([< any ] as 'a), 't) gexpr + | EOp : operator -> (([< any ] as 'a), 't) gexpr + | EArray : ('a, 't) marked_gexpr list -> (([< any ] as 'a), 't) gexpr (* All but statement calculus *) | EVar : ('a, 't) gexpr Bindlib.var @@ -219,11 +222,12 @@ type typed = { pos : Pos.t; ty : marked_typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when appropriate. Expected to fill the ['t] parameter of [gexpr] and - [marked_gexpr] *) + [marked_gexpr] (a ['t] annotation different from this type is used in the + middle of the typing processing, but all visible ASTs should otherwise use + this. *) type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark -(* | Inferring : inferring -> inferring mark *) -type ('a, 'm) marked = ('a, 'm mark) Marked.t +type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) gexpr (** Useful for errors and printing, for example *) type any_marked_expr = @@ -249,42 +253,47 @@ type scope_let_kind = | DestructuringSubScopeResults (** [let s.x = result.x ]**) | Assertion (** [let _ = assert e]*) -type ('expr, 'm) scope_let = { +type 'e scope_let = { scope_let_kind : scope_let_kind; scope_let_typ : marked_typ; - scope_let_expr : ('expr, 'm) marked; - scope_let_next : ('expr, ('expr, 'm) scope_body_expr) Bindlib.binder; + scope_let_expr : 'e marked; + scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; scope_let_pos : Pos.t; } + constraint 'e = ('a, 'm mark) gexpr (** This type is parametrized by the expression type so it can be reused in later intermediate representations. *) (** A scope let-binding has all the information necessary to make a proper let-binding expression, plus an annotation for the kind of the let-binding that comes from the compilation of a {!module: Scopelang.Ast} statement. *) -and ('expr, 'm) scope_body_expr = - | Result of ('expr, 'm) marked - | ScopeLet of ('expr, 'm) scope_let +and 'e scope_body_expr = + | Result of 'e marked + | ScopeLet of 'e scope_let + constraint 'e = ('a, 'm mark) gexpr -type ('expr, 'm) scope_body = { +type 'e scope_body = { scope_body_input_struct : StructName.t; scope_body_output_struct : StructName.t; - scope_body_expr : ('expr, ('expr, 'm) scope_body_expr) Bindlib.binder; + scope_body_expr : ('e, 'e scope_body_expr) Bindlib.binder; } (** Instead of being a single expression, we give a little more ad-hoc structure to the scope body by decomposing it in an ordered list of let-bindings, and a result expression that uses the let-binded variables. The first binder is the argument of type [scope_body_input_struct]. *) -type ('expr, 'm) scope_def = { +type 'e scope_def = { scope_name : ScopeName.t; - scope_body : ('expr, 'm) scope_body; - scope_next : ('expr, ('expr, 'm) scopes) Bindlib.binder; + scope_body : 'e scope_body; + scope_next : ('e, 'e scopes) Bindlib.binder; } (** Finally, we do the same transformation for the whole program for the kinded lets. This permit us to use bindlib variables for scopes names. *) -and ('expr, 'm) scopes = Nil | ScopeDef of ('expr, 'm) scope_def +and 'e scopes = + | Nil + | ScopeDef of 'e scope_def + constraint 'e = ('a, 'm mark) gexpr type struct_ctx = (StructFieldName.t * marked_typ) list StructMap.t @@ -293,7 +302,4 @@ type decl_ctx = { ctx_structs : struct_ctx; } -type ('expr, 'm) program_generic = { - decl_ctx : decl_ctx; - scopes : ('expr, 'm) scopes; -} +type 'e program = { decl_ctx : decl_ctx; scopes : 'e scopes } diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index 32e60462..a4c41bfb 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -21,21 +21,18 @@ open Types (** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -(* The subtypes of the generic AST that hold vars *) -type 'e expr = 'e - constraint 'e = ([< desugared | scopelang | dcalc | lcalc ], 't) gexpr - -type 'e var = 'e expr Bindlib.var -type 'e t = 'e var -type 'e vars = 'e expr Bindlib.mvar - -let make (name : string) : 'e var = Bindlib.new_var (fun x -> EVar x) name +type 'e t = 'e Bindlib.var constraint 'e = ([< any ], 't) gexpr +type 'e vars = 'e Bindlib.mvar +type 'e binder = ('e, 'e marked) Bindlib.binder +let make (name : string) : 'e t = Bindlib.new_var (fun x -> EVar x) name let compare = Bindlib.compare_vars let eq = Bindlib.eq_vars -let translate (v : 'e1 var) : 'e2 var = +let translate (v : 'e1 t) : 'e2 t = Bindlib.copy_var v (fun x -> EVar x) (Bindlib.name_of v) +type 'e var = 'e t + (* The purpose of this module is just to lift a type parameter outside of [Set.S] and [Map.S], so that we can have ['e Var.Set.t] for sets of variables bound to the ['e = ('a, 't) gexpr] expression type. This is made possible by @@ -67,7 +64,7 @@ module Set = struct open Generic open Set.Make (Generic) - type nonrec 'e t = t constraint 'e = 'e expr + type nonrec 'e t = t let empty = empty let singleton x = singleton (t x) @@ -77,6 +74,7 @@ module Set = struct let mem x s = mem (t x) s let of_list l = of_list (List.map t l) let elements s = elements s |> List.map get + let diff s1 s2 = diff s1 s2 (* Add more as needed *) end @@ -87,7 +85,7 @@ module Map = struct open Generic open Map.Make (Generic) - type nonrec ('e, 'x) t = 'x t constraint 'e = 'e expr + type nonrec ('e, 'x) t = 'x t let empty = empty let singleton v x = singleton (t v) x diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 004ea728..02695275 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -21,13 +21,8 @@ open Types (** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e expr = 'e - constraint 'e = ([< desugared | scopelang | dcalc | lcalc ], 't) gexpr -(** Subtype of gexpr where variables are handled *) - -type 'e var = 'e expr Bindlib.var -type 'e t = 'e var -type 'e vars = 'e expr Bindlib.mvar +type 'e t = 'e Bindlib.var constraint 'e = ([< any ], 't) gexpr +type 'e vars = 'e Bindlib.mvar val make : string -> 'e t val compare : 'e t -> 'e t -> int @@ -37,10 +32,13 @@ val translate : 'e1 t -> 'e2 t (** Needed when converting from one AST type to another. See the note of caution on [Bindlib.copy_var]. *) +type 'e var = 'e t +(** Alias to allow referring to the type in the submodules *) + (** Wrapper over [Set.S] but with a type variable for the AST type parameters. Extend as needed *) module Set : sig - type 'e t constraint 'e = 'e expr + type 'e t val empty : 'e t val singleton : 'e var -> 'e t @@ -50,12 +48,13 @@ module Set : sig val mem : 'e var -> 'e t -> bool val of_list : 'e var list -> 'e t val elements : 'e t -> 'e var list + val diff : 'e t -> 'e t -> 'e t end (** Wrapper over [Map.S] but with a type variable for the AST type parameters. Extend as needed *) module Map : sig - type ('e, 'x) t constraint 'e = 'e expr + type ('e, 'x) t val empty : ('e, 'x) t val singleton : 'e var -> 'x -> ('e, 'x) t diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 9e140746..35f53d16 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -293,7 +293,7 @@ type verification_condition = { let rec generate_verification_conditions_scope_body_expr (ctx : ctx) - (scope_body_expr : ('m expr, 'm) scope_body_expr) : + (scope_body_expr : 'm expr scope_body_expr) : ctx * verification_condition list = match scope_body_expr with | Result _ -> ctx, [] @@ -376,7 +376,7 @@ let rec generate_verification_conditions_scope_body_expr let rec generate_verification_conditions_scopes (decl_ctx : decl_ctx) - (scopes : ('m expr, 'm) scopes) + (scopes : 'm expr scopes) (s : ScopeName.t option) : verification_condition list = match scopes with | Nil -> [] From 8e7f65d2040d4ad19dd479a25c806acb15993e68 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 16 Aug 2022 17:09:26 +0200 Subject: [PATCH 06/31] Split Shared_ast.Expr of scope and program functions --- compiler/dcalc/optimizations.ml | 2 +- compiler/driver.ml | 6 +- compiler/lcalc/closure_conversion.ml | 4 +- compiler/lcalc/compile_without_exceptions.ml | 2 +- compiler/lcalc/optimizations.ml | 8 +- compiler/scalc/compile_from_lambda.ml | 2 +- compiler/shared_ast/expr.ml | 83 ------------------ compiler/shared_ast/expr.mli | 64 +------------- compiler/shared_ast/program.ml | 27 ++++++ compiler/shared_ast/program.mli | 21 +++++ compiler/shared_ast/scope.ml | 92 ++++++++++++++++++++ compiler/shared_ast/scope.mli | 82 +++++++++++++++++ compiler/shared_ast/shared_ast.ml | 4 +- 13 files changed, 238 insertions(+), 159 deletions(-) create mode 100644 compiler/shared_ast/program.ml create mode 100644 compiler/shared_ast/program.mli create mode 100644 compiler/shared_ast/scope.ml create mode 100644 compiler/shared_ast/scope.mli diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index 649ab806..f082c43d 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -253,4 +253,4 @@ let optimize_program (p : 'm program) : untyped program = (program_map partial_evaluation { var_values = Var.Map.empty; decl_ctx = p.decl_ctx } p) - |> Expr.untype_program + |> Program.untype diff --git a/compiler/driver.ml b/compiler/driver.ml index 685d34cc..6002ca81 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -200,7 +200,7 @@ let driver source_file (options : Cli.options) : int = (Dcalc.Print.format_scope ~debug:options.debug prgm.decl_ctx) ( scope_uid, Option.get - (Shared_ast.Expr.fold_left_scope_defs ~init:None + (Shared_ast.Scope.fold_left ~init:None ~f:(fun acc scope_def _ -> if Shared_ast.ScopeName.compare scope_def.scope_name @@ -285,7 +285,7 @@ let driver source_file (options : Cli.options) : int = Cli.debug_print "Optimizing lambda calculus..."; Lcalc.Optimizations.optimize_program prgm end - else Shared_ast.Expr.untype_program prgm + else Shared_ast.Program.untype prgm in let prgm = if options.closure_conversion then ( @@ -305,7 +305,7 @@ let driver source_file (options : Cli.options) : int = (Lcalc.Print.format_scope ~debug:options.debug prgm.decl_ctx) ( scope_uid, Option.get - (Shared_ast.Expr.fold_left_scope_defs ~init:None + (Shared_ast.Scope.fold_left ~init:None ~f:(fun acc scope_def _ -> if Shared_ast.ScopeName.compare scope_def.scope_name diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index 95ef8c1d..46eeacb5 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -275,7 +275,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : let closure_conversion (p : 'm program) : 'm program Bindlib.box = let new_scopes, _ = - Expr.fold_left_scope_defs + Scope.fold_left ~f:(fun (acc_new_scopes, global_vars) scope scope_var -> (* [acc_new_scopes] represents what has been translated in the past, it needs a continuation to attach the rest of the translated scopes. *) @@ -290,7 +290,7 @@ let closure_conversion (p : 'm program) : 'm program Bindlib.box = } in let new_scope_lets = - Expr.map_exprs_in_scope_lets + Scope.map_exprs_in_lets ~f:(closure_conversion_expr ctx) ~varf:(fun v -> v) scope_body_expr diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 3e848954..5e738bb8 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -546,7 +546,7 @@ let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.expr scopes) : let translate_program (prgm : 'm D.program) : 'm A.program = let inputs_structs = - Expr.fold_left_scope_defs prgm.scopes ~init:[] ~f:(fun acc scope_def _ -> + Scope.fold_left prgm.scopes ~init:[] ~f:(fun acc scope_def _ -> scope_def.scope_body.scope_body_input_struct :: acc) in diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index cbca7967..25526b48 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -102,7 +102,7 @@ let rec beta_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = let iota_optimizations (p : 'm program) : 'm program = let new_scopes = - Expr.map_exprs_in_scopes ~f:(iota_expr ()) ~varf:(fun v -> v) p.scopes + Scope.map_exprs ~f:(iota_expr ()) ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } @@ -112,7 +112,7 @@ let iota_optimizations (p : 'm program) : 'm program = program. *) let _beta_optimizations (p : 'm program) : 'm program = let new_scopes = - Expr.map_exprs_in_scopes ~f:(beta_expr ()) ~varf:(fun v -> v) p.scopes + Scope.map_exprs ~f:(beta_expr ()) ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } @@ -146,9 +146,9 @@ let rec peephole_expr (_ : unit) (e : 'm marked_expr) : let peephole_optimizations (p : 'm program) : 'm program = let new_scopes = - Expr.map_exprs_in_scopes ~f:(peephole_expr ()) ~varf:(fun v -> v) p.scopes + Scope.map_exprs ~f:(peephole_expr ()) ~varf:(fun v -> v) p.scopes in { p with scopes = Bindlib.unbox new_scopes } let optimize_program (p : 'm program) : untyped program = - p |> iota_optimizations |> peephole_optimizations |> Expr.untype_program + p |> iota_optimizations |> peephole_optimizations |> Program.untype diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 2342244d..60fefc0d 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -335,7 +335,7 @@ let translate_program (p : 'm L.program) : A.program = decl_ctx = p.decl_ctx; scopes = (let _, new_scopes = - Expr.fold_left_scope_defs + Scope.fold_left ~f:(fun (func_dict, new_scopes) scope_def scope_var -> let scope_input_var, scope_body_expr = Bindlib.unbind scope_def.scope_body.scope_body_expr diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 50ca7531..ce6ceb3a 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -166,80 +166,6 @@ let rec map_top_down ~f e = map () ~f:(fun () -> map_top_down ~f) (f e) let map_marks ~f e = map_top_down ~f:(fun e -> Marked.(mark (f (get_mark e)) (unmark e))) e -let rec fold_left_scope_lets ~f ~init scope_body_expr = - match scope_body_expr with - | Result _ -> init - | ScopeLet scope_let -> - let var, next = Bindlib.unbind scope_let.scope_let_next in - fold_left_scope_lets ~f ~init:(f init scope_let var) next - -let rec fold_right_scope_lets ~f ~init scope_body_expr = - match scope_body_expr with - | Result result -> init result - | ScopeLet scope_let -> - let var, next = Bindlib.unbind scope_let.scope_let_next in - let next_result = fold_right_scope_lets ~f ~init next in - f scope_let var next_result - -let map_exprs_in_scope_lets ~f ~varf scope_body_expr = - fold_right_scope_lets - ~f:(fun scope_let var_next acc -> - Bindlib.box_apply2 - (fun scope_let_next scope_let_expr -> - ScopeLet { scope_let with scope_let_next; scope_let_expr }) - (Bindlib.bind_var (varf var_next) acc) - (f scope_let.scope_let_expr)) - ~init:(fun res -> Bindlib.box_apply (fun res -> Result res) (f res)) - scope_body_expr - -let rec fold_left_scope_defs ~f ~init scopes = - match scopes with - | Nil -> init - | ScopeDef scope_def -> - let var, next = Bindlib.unbind scope_def.scope_next in - fold_left_scope_defs ~f ~init:(f init scope_def var) next - -let rec fold_right_scope_defs ~f ~init scopes = - match scopes with - | Nil -> init - | ScopeDef scope_def -> - let var_next, next = Bindlib.unbind scope_def.scope_next in - let result_next = fold_right_scope_defs ~f ~init next in - f scope_def var_next result_next - -let map_scope_defs ~f scopes = - fold_right_scope_defs - ~f:(fun scope_def var_next acc -> - let new_scope_def = f scope_def in - let new_next = Bindlib.bind_var var_next acc in - Bindlib.box_apply2 - (fun new_scope_def new_next -> - ScopeDef { new_scope_def with scope_next = new_next }) - new_scope_def new_next) - ~init:(Bindlib.box Nil) scopes - -let map_exprs_in_scopes ~f ~varf scopes = - fold_right_scope_defs - ~f:(fun scope_def var_next acc -> - let scope_input_var, scope_lets = - Bindlib.unbind scope_def.scope_body.scope_body_expr - in - let new_scope_body_expr = map_exprs_in_scope_lets ~f ~varf scope_lets in - let new_scope_body_expr = - Bindlib.bind_var (varf scope_input_var) new_scope_body_expr - in - let new_next = Bindlib.bind_var (varf var_next) acc in - Bindlib.box_apply2 - (fun scope_body_expr scope_next -> - ScopeDef - { - scope_def with - scope_body = { scope_def.scope_body with scope_body_expr }; - scope_next; - }) - new_scope_body_expr new_next) - ~init:(Bindlib.box Nil) scopes - (* - *) (** See [Bindlib.box_term] documentation for why we are doing that. *) @@ -248,12 +174,3 @@ let box e = id_t () e let untype e = map_marks ~f:(fun m -> Untyped { pos = mark_pos m }) e - -let untype_program (prg : ('a, 'm mark) gexpr program) : - ('a, untyped mark) gexpr program = - { - prg with - scopes = - Bindlib.unbox - (map_exprs_in_scopes ~f:untype ~varf:Var.translate prg.scopes); - } diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index d4678b2b..c568cc25 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -15,7 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) -(** Functions handling the types of [shared_ast] *) +(** Functions handling the expressions of [shared_ast] *) open Utils open Types @@ -134,9 +134,6 @@ val get_scope_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark val untype : ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box -val untype_program : - (([< any ] as 'a), 'm mark) gexpr program -> ('a, untyped mark) gexpr program - (** {2 Handling of boxing} *) val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box @@ -177,62 +174,3 @@ val map_top_down : val map_marks : f:('t1 -> 't2) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box - -val fold_left_scope_lets : - f:('a -> 'e scope_let -> 'e Bindlib.var -> 'a) -> - init:'a -> - 'e scope_body_expr -> - 'a -(** Usage: - [fold_left_scope_lets ~f:(fun acc scope_let scope_let_var -> ...) ~init scope_lets], - where [scope_let_var] is the variable bound to the scope let in the next - scope lets to be examined. *) - -val fold_right_scope_lets : - f:('expr1 scope_let -> 'expr1 Bindlib.var -> 'a -> 'a) -> - init:('expr1 marked -> 'a) -> - 'expr1 scope_body_expr -> - 'a -(** Usage: - [fold_right_scope_lets ~f:(fun scope_let scope_let_var acc -> ...) ~init scope_lets], - where [scope_let_var] is the variable bound to the scope let in the next - scope lets to be examined (which are before in the program order). *) - -val map_exprs_in_scope_lets : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> - 'expr1 scope_body_expr -> - 'expr2 scope_body_expr Bindlib.box - -val fold_left_scope_defs : - f:('a -> 'expr1 scope_def -> 'expr1 Bindlib.var -> 'a) -> - init:'a -> - 'expr1 scopes -> - 'a -(** Usage: - [fold_left_scope_defs ~f:(fun acc scope_def scope_var -> ...) ~init scope_def], - where [scope_var] is the variable bound to the scope in the next scopes to - be examined. *) - -val fold_right_scope_defs : - f:('expr1 scope_def -> 'expr1 Bindlib.var -> 'a -> 'a) -> - init:'a -> - 'expr1 scopes -> - 'a -(** Usage: - [fold_right_scope_defs ~f:(fun scope_def scope_var acc -> ...) ~init scope_def], - where [scope_var] is the variable bound to the scope in the next scopes to - be examined (which are before in the program order). *) - -val map_scope_defs : - f:('e scope_def -> 'e scope_def Bindlib.box) -> - 'e scopes -> - 'e scopes Bindlib.box - -val map_exprs_in_scopes : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> - 'expr1 scopes -> - 'expr2 scopes Bindlib.box -(** This is the main map visitor for all the expressions inside all the scopes - of the program. *) diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml new file mode 100644 index 00000000..76ab52f1 --- /dev/null +++ b/compiler/shared_ast/program.ml @@ -0,0 +1,27 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020-2022 Inria, + contributor: Denis Merigoux , Alain Delaët-Tixeuil + , Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Types + +let untype (prg : ('a, 'm mark) gexpr program) : + ('a, untyped mark) gexpr program = + { + prg with + scopes = + Bindlib.unbox + (Scope.map_exprs ~f:Expr.untype ~varf:Var.translate prg.scopes); + } diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli new file mode 100644 index 00000000..2c8863f0 --- /dev/null +++ b/compiler/shared_ast/program.mli @@ -0,0 +1,21 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020-2022 Inria, + contributor: Denis Merigoux , Alain Delaët-Tixeuil + , Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Types + +val untype : + (([< any ] as 'a), 'm mark) gexpr program -> ('a, untyped mark) gexpr program diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml new file mode 100644 index 00000000..d83b2d21 --- /dev/null +++ b/compiler/shared_ast/scope.ml @@ -0,0 +1,92 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020-2022 Inria, + contributor: Denis Merigoux , Alain Delaët-Tixeuil + , Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Types + +let rec fold_left_lets ~f ~init scope_body_expr = + match scope_body_expr with + | Result _ -> init + | ScopeLet scope_let -> + let var, next = Bindlib.unbind scope_let.scope_let_next in + fold_left_lets ~f ~init:(f init scope_let var) next + +let rec fold_right_lets ~f ~init scope_body_expr = + match scope_body_expr with + | Result result -> init result + | ScopeLet scope_let -> + let var, next = Bindlib.unbind scope_let.scope_let_next in + let next_result = fold_right_lets ~f ~init next in + f scope_let var next_result + +let map_exprs_in_lets ~f ~varf scope_body_expr = + fold_right_lets + ~f:(fun scope_let var_next acc -> + Bindlib.box_apply2 + (fun scope_let_next scope_let_expr -> + ScopeLet { scope_let with scope_let_next; scope_let_expr }) + (Bindlib.bind_var (varf var_next) acc) + (f scope_let.scope_let_expr)) + ~init:(fun res -> Bindlib.box_apply (fun res -> Result res) (f res)) + scope_body_expr + +let rec fold_left ~f ~init scopes = + match scopes with + | Nil -> init + | ScopeDef scope_def -> + let var, next = Bindlib.unbind scope_def.scope_next in + fold_left ~f ~init:(f init scope_def var) next + +let rec fold_right ~f ~init scopes = + match scopes with + | Nil -> init + | ScopeDef scope_def -> + let var_next, next = Bindlib.unbind scope_def.scope_next in + let result_next = fold_right ~f ~init next in + f scope_def var_next result_next + +let map ~f scopes = + fold_right + ~f:(fun scope_def var_next acc -> + let new_def = f scope_def in + let new_next = Bindlib.bind_var var_next acc in + Bindlib.box_apply2 + (fun new_def new_next -> + ScopeDef { new_def with scope_next = new_next }) + new_def new_next) + ~init:(Bindlib.box Nil) scopes + +let map_exprs ~f ~varf scopes = + fold_right + ~f:(fun scope_def var_next acc -> + let scope_input_var, scope_lets = + Bindlib.unbind scope_def.scope_body.scope_body_expr + in + let new_body_expr = map_exprs_in_lets ~f ~varf scope_lets in + let new_body_expr = + Bindlib.bind_var (varf scope_input_var) new_body_expr + in + let new_next = Bindlib.bind_var (varf var_next) acc in + Bindlib.box_apply2 + (fun scope_body_expr scope_next -> + ScopeDef + { + scope_def with + scope_body = { scope_def.scope_body with scope_body_expr }; + scope_next; + }) + new_body_expr new_next) + ~init:(Bindlib.box Nil) scopes diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli new file mode 100644 index 00000000..a5fbee91 --- /dev/null +++ b/compiler/shared_ast/scope.mli @@ -0,0 +1,82 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020-2022 Inria, + contributor: Denis Merigoux , Alain Delaët-Tixeuil + , Louis Gesbert + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +(** Functions handling the scope structures of [shared_ast] *) + +open Types + +(** {2 Traversal functions} *) + +val fold_left_lets : + f:('a -> 'e scope_let -> 'e Bindlib.var -> 'a) -> + init:'a -> + 'e scope_body_expr -> + 'a +(** Usage: + [fold_left_lets ~f:(fun acc scope_let scope_let_var -> ...) ~init scope_lets], + where [scope_let_var] is the variable bound to the scope let in the next + scope lets to be examined. *) + +val fold_right_lets : + f:('expr1 scope_let -> 'expr1 Bindlib.var -> 'a -> 'a) -> + init:('expr1 marked -> 'a) -> + 'expr1 scope_body_expr -> + 'a +(** Usage: + [fold_right_lets ~f:(fun scope_let scope_let_var acc -> ...) ~init scope_lets], + where [scope_let_var] is the variable bound to the scope let in the next + scope lets to be examined (which are before in the program order). *) + +val map_exprs_in_lets : + f:('expr1 marked -> 'expr2 marked Bindlib.box) -> + varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + 'expr1 scope_body_expr -> + 'expr2 scope_body_expr Bindlib.box + +val fold_left : + f:('a -> 'expr1 scope_def -> 'expr1 Bindlib.var -> 'a) -> + init:'a -> + 'expr1 scopes -> + 'a +(** Usage: [fold_left ~f:(fun acc scope_def scope_var -> ...) ~init scope_def], + where [scope_var] is the variable bound to the scope in the next scopes to + be examined. *) + +val fold_right : + f:('expr1 scope_def -> 'expr1 Bindlib.var -> 'a -> 'a) -> + init:'a -> + 'expr1 scopes -> + 'a +(** Usage: + [fold_right_scope ~f:(fun scope_def scope_var acc -> ...) ~init scope_def], + where [scope_var] is the variable bound to the scope in the next scopes to + be examined (which are before in the program order). *) + +val map : + f:('e scope_def -> 'e scope_def Bindlib.box) -> + 'e scopes -> + 'e scopes Bindlib.box + +val map_exprs : + f:('expr1 marked -> 'expr2 marked Bindlib.box) -> + varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + 'expr1 scopes -> + 'expr2 scopes Bindlib.box +(** This is the main map visitor for all the expressions inside all the scopes + of the program. *) + +(** {2 Other helpers} *) diff --git a/compiler/shared_ast/shared_ast.ml b/compiler/shared_ast/shared_ast.ml index c1ed9a8b..487f649b 100644 --- a/compiler/shared_ast/shared_ast.ml +++ b/compiler/shared_ast/shared_ast.ml @@ -15,5 +15,7 @@ the License. *) include Types -module Expr = Expr module Var = Var +module Expr = Expr +module Scope = Scope +module Program = Program From d02c02e352aebe29789b8e9ef83569f8c25dd748 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 16 Aug 2022 17:20:36 +0200 Subject: [PATCH 07/31] Fix some warnings --- compiler/shared_ast/var.ml | 1 + compiler/shared_ast/var.mli | 1 + compiler/verification/io.mli | 1 - compiler/verification/solver.ml | 2 -- 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index a4c41bfb..dc902e5b 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -56,6 +56,7 @@ module Generic = struct let t v = Var v let get (Var v) = Bindlib.copy_var v (fun x -> EVar x) (Bindlib.name_of v) let compare (Var x) (Var y) = Bindlib.compare_vars x y + let eq (Var x) (Var y) = Bindlib.eq_vars x y [@@ocaml.warning "-32"] end (* Wrapper around Set.Make to re-add type parameters (avoid inconsistent diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 02695275..9b054491 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -23,6 +23,7 @@ open Types type 'e t = 'e Bindlib.var constraint 'e = ([< any ], 't) gexpr type 'e vars = 'e Bindlib.mvar +type 'e binder = ('e, 'e marked) Bindlib.binder val make : string -> 'e t val compare : 'e t -> 'e t -> int diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 7a318a37..13fc8b7d 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -17,7 +17,6 @@ (** Common code for handling the IO of all proof backends supported *) -open Utils open Shared_ast module type Backend = sig diff --git a/compiler/verification/solver.ml b/compiler/verification/solver.ml index 6056ab1e..778ceb6e 100644 --- a/compiler/verification/solver.ml +++ b/compiler/verification/solver.ml @@ -14,8 +14,6 @@ License for the specific language governing permissions and limitations under the License. *) -open Dcalc.Ast - (** [solve_vc] is the main entry point of this module. It takes a list of expressions [vcs] corresponding to verification conditions that must be discharged by Z3, and attempts to solve them **) From ae2801be6d72f54e01594f57c20581f197fe5176 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Wed, 17 Aug 2022 11:49:16 +0200 Subject: [PATCH 08/31] Move mode handling code from dcalc to shared_ast Handling code should now be reasonably well sorted between `Shared_ast.{Var,Expr,Scope,Program}` The function parameters (e.g. `make_let_in`) could be removed from the scope handling functions since now the types are compatible, which makes them much easier to read. --- compiler/dcalc/ast.ml | 328 ------------------- compiler/dcalc/ast.mli | 103 ------ compiler/dcalc/interpreter.ml | 2 +- compiler/dcalc/optimizations.ml | 6 +- compiler/dcalc/print.ml | 7 +- compiler/dcalc/print.mli | 2 +- compiler/driver.ml | 16 +- compiler/lcalc/compile_without_exceptions.ml | 14 +- compiler/lcalc/print.ml | 5 +- compiler/scopelang/scope_to_dcalc.ml | 30 +- compiler/shared_ast/expr.ml | 208 +++++++++++- compiler/shared_ast/expr.mli | 67 +++- compiler/shared_ast/program.ml | 14 + compiler/shared_ast/program.mli | 10 +- compiler/shared_ast/scope.ml | 105 ++++++ compiler/shared_ast/scope.mli | 35 +- compiler/shared_ast/types.ml | 16 +- compiler/shared_ast/var.ml | 4 +- compiler/shared_ast/var.mli | 4 +- compiler/verification/conditions.ml | 8 +- compiler/verification/conditions.mli | 2 +- compiler/verification/z3backend.real.ml | 17 +- 22 files changed, 487 insertions(+), 516 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 3b01e435..f3bdb1f3 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -24,331 +24,3 @@ type 'm expr = (dcalc, 'm mark) gexpr and 'm marked_expr = (dcalc, 'm mark) marked_gexpr type 'm program = 'm expr Shared_ast.program -type 'e box_expr_sig = 'e marked -> 'e marked Bindlib.box -type 'm var = 'm expr Var.t -type 'm vars = 'm expr Var.vars - -let rec free_vars_expr (e : 'm marked_expr) : 'm expr Var.Set.t = - match Marked.unmark e with - | EVar v -> Var.Set.singleton v - | ETuple (es, _) | EArray es -> - es |> List.map free_vars_expr |> List.fold_left Var.Set.union Var.Set.empty - | ETupleAccess (e1, _, _, _) - | EAssert e1 - | ErrorOnEmpty e1 - | EInj (e1, _, _, _) -> - free_vars_expr e1 - | EApp (e1, es) | EMatch (e1, es, _) -> - e1 :: es - |> List.map free_vars_expr - |> List.fold_left Var.Set.union Var.Set.empty - | EDefault (es, ejust, econs) -> - ejust :: econs :: es - |> List.map free_vars_expr - |> List.fold_left Var.Set.union Var.Set.empty - | EOp _ | ELit _ -> Var.Set.empty - | EIfThenElse (e1, e2, e3) -> - [e1; e2; e3] - |> List.map free_vars_expr - |> List.fold_left Var.Set.union Var.Set.empty - | EAbs (binder, _) -> - let vs, body = Bindlib.unmbind binder in - Array.fold_right Var.Set.remove vs (free_vars_expr body) - -let rec free_vars_scope_body_expr (scope_lets : 'm expr scope_body_expr) : - 'm expr Var.Set.t = - match scope_lets with - | Result e -> free_vars_expr e - | ScopeLet { scope_let_expr = e; scope_let_next = next; _ } -> - let v, body = Bindlib.unbind next in - Var.Set.union (free_vars_expr e) - (Var.Set.remove v (free_vars_scope_body_expr body)) - -let free_vars_scope_body (scope_body : 'm expr scope_body) : 'm expr Var.Set.t = - let { scope_body_expr = binder; _ } = scope_body in - let v, body = Bindlib.unbind binder in - Var.Set.remove v (free_vars_scope_body_expr body) - -let rec free_vars_scopes (scopes : 'm expr scopes) : 'm expr Var.Set.t = - match scopes with - | Nil -> Var.Set.empty - | ScopeDef { scope_body = body; scope_next = next; _ } -> - let v, next = Bindlib.unbind next in - Var.Set.union - (Var.Set.remove v (free_vars_scopes next)) - (free_vars_scope_body body) - -let make_var ((x, mark) : ('m expr Bindlib.var, 'm mark) Marked.t) : - 'm marked_expr Bindlib.box = - Bindlib.box_apply (fun x -> x, mark) (Bindlib.box_var x) - -type 'e make_abs_sig = - 'e Bindlib.mvar -> - 'e marked Bindlib.box -> - typ Marked.pos list -> - 'm mark -> - 'e marked Bindlib.box - constraint 'e = ('a, 'm mark) gexpr - -let (make_abs : 'm expr make_abs_sig) = - fun xs e taus mark -> - Bindlib.box_apply (fun b -> EAbs (b, taus), mark) (Bindlib.bind_mvar xs e) - -let make_app : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - 'm mark -> - 'm marked_expr Bindlib.box = - fun e u mark -> - Bindlib.box_apply2 (fun e u -> EApp (e, u), mark) e (Bindlib.box_list u) - -type 'e make_let_in_sig = - 'e Bindlib.var -> - marked_typ -> - 'e marked Bindlib.box -> - 'e marked Bindlib.box -> - Pos.t -> - 'e marked Bindlib.box - -let empty_thunked_term mark : 'm marked_expr = - let silent = Var.make "_" in - let pos = Expr.mark_pos mark in - Bindlib.unbox - (make_abs [| silent |] - (Bindlib.box (ELit LEmptyError, mark)) - [TLit TUnit, pos] - (Expr.map_mark - (fun pos -> pos) - (fun ty -> - Marked.mark pos (TArrow (Marked.mark pos (TLit TUnit), ty))) - mark)) - -let (make_let_in : 'm expr make_let_in_sig) = - fun x tau e1 e2 pos -> - let m_e1 = Marked.get_mark (Bindlib.unbox e1) in - let m_e2 = Marked.get_mark (Bindlib.unbox e2) in - let m_abs = - Expr.map_mark2 - (fun _ _ -> pos) - (fun m1 m2 -> Marked.mark pos (TArrow (m1.ty, m2.ty))) - m_e1 m_e2 - in - make_app (make_abs [| x |] e2 [tau] m_abs) [e1] m_e2 - -let is_value (e : 'e marked_expr) : bool = - match Marked.unmark e with ELit _ | EAbs _ | EOp _ -> true | _ -> false - -let rec equal_typs (ty1 : typ Marked.pos) (ty2 : typ Marked.pos) : bool = - match Marked.unmark ty1, Marked.unmark ty2 with - | TLit l1, TLit l2 -> l1 = l2 - | TTuple (tys1, n1), TTuple (tys2, n2) -> n1 = n2 && equal_typs_list tys1 tys2 - | TEnum (tys1, n1), TEnum (tys2, n2) -> n1 = n2 && equal_typs_list tys1 tys2 - | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typs t1 t2 && equal_typs t1' t2' - | TArray t1, TArray t2 -> equal_typs t1 t2 - | TAny, TAny -> true - | _, _ -> false - -and equal_typs_list (tys1 : typ Marked.pos list) (tys2 : typ Marked.pos list) : - bool = - List.length tys1 = List.length tys2 - && (* OCaml && operator short-circuits when a clause is false, we can safely - assume here that both lists have equal length *) - List.for_all (fun (x, y) -> equal_typs x y) (List.combine tys1 tys2) - -let equal_log_entries (l1 : log_entry) (l2 : log_entry) : bool = - match l1, l2 with - | VarDef t1, VarDef t2 -> equal_typs (t1, Pos.no_pos) (t2, Pos.no_pos) - | x, y -> x = y - -let equal_unops (op1 : unop) (op2 : unop) : bool = - match op1, op2 with - (* Log entries contain a typ which contain position information, we thus need - to descend into them *) - | Log (l1, info1), Log (l2, info2) -> equal_log_entries l1 l2 && info1 = info2 - (* All the other cases can be discharged through equality *) - | _ -> op1 = op2 - -let equal_ops (op1 : operator) (op2 : operator) : bool = - match op1, op2 with - | Ternop op1, Ternop op2 -> op1 = op2 - | Binop op1, Binop op2 -> op1 = op2 - | Unop op1, Unop op2 -> equal_unops op1 op2 - | _, _ -> false - -let rec equal_exprs (e1 : 'm marked_expr) (e2 : 'm marked_expr) : bool = - match Marked.unmark e1, Marked.unmark e2 with - | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 - | ETuple (es1, n1), ETuple (es2, n2) -> n1 = n2 && equal_exprs_list es1 es2 - | ETupleAccess (e1, id1, n1, tys1), ETupleAccess (e2, id2, n2, tys2) -> - equal_exprs e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 - | EInj (e1, id1, n1, tys1), EInj (e2, id2, n2, tys2) -> - equal_exprs e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 - | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> - n1 = n2 && equal_exprs e1 e2 && equal_exprs_list cases1 cases2 - | EArray es1, EArray es2 -> equal_exprs_list es1 es2 - | ELit l1, ELit l2 -> l1 = l2 - | EAbs (b1, tys1), EAbs (b2, tys2) -> - equal_typs_list tys1 tys2 - && - let vars1, body1 = Bindlib.unmbind b1 in - let body2 = Bindlib.msubst b2 (Array.map (fun x -> EVar x) vars1) in - equal_exprs body1 body2 - | EAssert e1, EAssert e2 -> equal_exprs e1 e2 - | EOp op1, EOp op2 -> equal_ops op1 op2 - | EDefault (exc1, def1, cons1), EDefault (exc2, def2, cons2) -> - equal_exprs def1 def2 - && equal_exprs cons1 cons2 - && equal_exprs_list exc1 exc2 - | EIfThenElse (if1, then1, else1), EIfThenElse (if2, then2, else2) -> - equal_exprs if1 if2 && equal_exprs then1 then2 && equal_exprs else1 else2 - | ErrorOnEmpty e1, ErrorOnEmpty e2 -> equal_exprs e1 e2 - | _, _ -> false - -and equal_exprs_list (es1 : 'e marked_expr list) (es2 : 'm marked_expr list) : - bool = - List.length es1 = List.length es2 - && (* OCaml && operator short-circuits when a clause is false, we can safely - assume here that both lists have equal length *) - List.for_all (fun (x, y) -> equal_exprs x y) (List.combine es1 es2) - -let rec unfold_scope_body_expr - ~(box_expr : 'e box_expr_sig) - ~(make_let_in : 'e make_let_in_sig) - (ctx : decl_ctx) - (scope_let : 'e scope_body_expr) : 'e marked Bindlib.box = - match scope_let with - | Result e -> box_expr e - | ScopeLet - { - scope_let_kind = _; - scope_let_typ; - scope_let_expr; - scope_let_next; - scope_let_pos; - } -> - let var, next = Bindlib.unbind scope_let_next in - make_let_in var scope_let_typ (box_expr scope_let_expr) - (unfold_scope_body_expr ~box_expr ~make_let_in ctx next) - scope_let_pos - -let build_whole_scope_expr - ~(box_expr : 'e box_expr_sig) - ~(make_abs : 'e make_abs_sig) - ~(make_let_in : 'e make_let_in_sig) - (ctx : decl_ctx) - (body : 'e scope_body) - (mark_scope : 'm mark) : 'e marked Bindlib.box = - let var, body_expr = Bindlib.unbind body.scope_body_expr in - let body_expr = unfold_scope_body_expr ~box_expr ~make_let_in ctx body_expr in - make_abs (Array.of_list [var]) body_expr - [ - ( TTuple - ( List.map snd - (StructMap.find body.scope_body_input_struct ctx.ctx_structs), - Some body.scope_body_input_struct ), - Expr.mark_pos mark_scope ); - ] - mark_scope - -let build_scope_typ_from_sig - (ctx : decl_ctx) - (scope_input_struct_name : StructName.t) - (scope_return_struct_name : StructName.t) - (pos : Pos.t) : typ Marked.pos = - let scope_sig = StructMap.find scope_input_struct_name ctx.ctx_structs in - let scope_return_typ = - StructMap.find scope_return_struct_name ctx.ctx_structs - in - let result_typ = - TTuple (List.map snd scope_return_typ, Some scope_return_struct_name), pos - in - let input_typ = - TTuple (List.map snd scope_sig, Some scope_input_struct_name), pos - in - TArrow (input_typ, result_typ), pos - -type 'expr scope_name_or_var = - | ScopeName of ScopeName.t - | ScopeVar of 'expr Bindlib.var - -let rec unfold_scopes - ~(box_expr : 'e box_expr_sig) - ~(make_abs : 'e make_abs_sig) - ~(make_let_in : 'e make_let_in_sig) - (ctx : decl_ctx) - (s : 'e scopes) - (mark : 'm mark) - (main_scope : 'expr scope_name_or_var) : 'e marked Bindlib.box = - match s with - | Nil -> ( - match main_scope with - | ScopeVar v -> Bindlib.box_apply (fun v -> v, mark) (Bindlib.box_var v) - | ScopeName _ -> failwith "should not happen") - | ScopeDef { scope_name; scope_body; scope_next } -> - let scope_var, scope_next = Bindlib.unbind scope_next in - let scope_pos = Marked.get_mark (ScopeName.get_info scope_name) in - let scope_body_mark = Expr.get_scope_body_mark scope_body in - let main_scope = - match main_scope with - | ScopeVar v -> ScopeVar v - | ScopeName n -> - if ScopeName.compare n scope_name = 0 then ScopeVar scope_var - else ScopeName n - in - make_let_in scope_var - (build_scope_typ_from_sig ctx scope_body.scope_body_input_struct - scope_body.scope_body_output_struct scope_pos) - (build_whole_scope_expr ~box_expr ~make_abs ~make_let_in ctx scope_body - scope_body_mark) - (unfold_scopes ~box_expr ~make_abs ~make_let_in ctx scope_next mark - main_scope) - scope_pos - -let rec find_scope name vars = function - | Nil -> raise Not_found - | ScopeDef { scope_name; scope_body; _ } when scope_name = name -> - List.rev vars, scope_body - | ScopeDef { scope_next; _ } -> - let var, next = Bindlib.unbind scope_next in - find_scope name (var :: vars) next - -let build_whole_program_expr - ~(box_expr : 'e box_expr_sig) - ~(make_abs : 'e make_abs_sig) - ~(make_let_in : 'e make_let_in_sig) - (p : 'e Shared_ast.program) - (main_scope : ScopeName.t) : 'e marked Bindlib.box = - let _, main_scope_body = find_scope main_scope [] p.scopes in - unfold_scopes ~box_expr ~make_abs ~make_let_in p.decl_ctx p.scopes - (Expr.get_scope_body_mark main_scope_body) - (ScopeName main_scope) - -let rec expr_size (e : 'm marked_expr) : int = - match Marked.unmark e with - | EVar _ | ELit _ | EOp _ -> 1 - | ETuple (args, _) | EArray args -> - List.fold_left (fun acc arg -> acc + expr_size arg) 1 args - | ETupleAccess (e1, _, _, _) - | EInj (e1, _, _, _) - | EAssert e1 - | ErrorOnEmpty e1 -> - expr_size e1 + 1 - | EMatch (arg, args, _) | EApp (arg, args) -> - List.fold_left (fun acc arg -> acc + expr_size arg) (1 + expr_size arg) args - | EAbs (binder, _) -> - let _, body = Bindlib.unmbind binder in - 1 + expr_size body - | EIfThenElse (e1, e2, e3) -> 1 + expr_size e1 + expr_size e2 + expr_size e3 - | EDefault (exceptions, just, cons) -> - List.fold_left - (fun acc except -> acc + expr_size except) - (1 + expr_size just + expr_size cons) - exceptions - -let remove_logging_calls (e : 'm marked_expr) : 'm marked_expr Bindlib.box = - let rec f () e = - match Marked.unmark e with - | EApp ((EOp (Unop (Log _)), _), [arg]) -> Expr.map () ~f arg - | _ -> Expr.map () ~f e - in - f () e diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index 77dc9f43..f3d91cea 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -26,106 +26,3 @@ type 'm expr = (dcalc, 'm mark) gexpr and 'm marked_expr = (dcalc, 'm mark) marked_gexpr type 'm program = 'm expr Shared_ast.program - -(** {1 Helpers} *) - -(** {2 Variables} *) - -type 'm var = 'm expr Var.t -type 'm vars = 'm expr Var.vars - -val free_vars_expr : 'm marked_expr -> 'm expr Var.Set.t -val free_vars_scope_body_expr : 'm expr scope_body_expr -> 'm expr Var.Set.t -val free_vars_scope_body : 'm expr scope_body -> 'm expr Var.Set.t -val free_vars_scopes : 'm expr scopes -> 'm expr Var.Set.t -val make_var : ('m var, 'm mark) Marked.t -> 'm expr marked Bindlib.box - -type 'e box_expr_sig = 'e marked -> 'e marked Bindlib.box - -(** {2 Boxed term constructors} *) - -type 'e make_abs_sig = - 'e Bindlib.mvar -> - 'e marked Bindlib.box -> - typ Marked.pos list -> - 'm mark -> - 'e marked Bindlib.box - constraint 'e = ('a, 'm mark) gexpr - -val make_abs : 'm expr make_abs_sig - -val make_app : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - 'm mark -> - 'm marked_expr Bindlib.box - -type 'e make_let_in_sig = - 'e Bindlib.var -> - marked_typ -> - 'e marked Bindlib.box -> - 'e marked Bindlib.box -> - Pos.t -> - 'e marked Bindlib.box - constraint 'e = (_, _) gexpr - -val make_let_in : 'm expr make_let_in_sig - -(**{2 Other}*) - -val empty_thunked_term : 'm mark -> 'm marked_expr -val is_value : 'm marked_expr -> bool - -val equal_exprs : 'm marked_expr -> 'm marked_expr -> bool -(** Determines if two expressions are equal, omitting their position information *) - -(** {1 AST manipulation helpers}*) - -val build_whole_scope_expr : - box_expr:'e box_expr_sig -> - make_abs:'e make_abs_sig -> - make_let_in:'e make_let_in_sig -> - decl_ctx -> - (('a, 'm mark) gexpr as 'e) scope_body -> - 'm mark -> - 'e marked Bindlib.box -(** Usage: [build_whole_scope_expr ctx body scope_position] where - [scope_position] corresponds to the line of the scope declaration for - instance. *) - -type 'expr scope_name_or_var = - | ScopeName of ScopeName.t - | ScopeVar of 'expr Bindlib.var - -val unfold_scopes : - box_expr:'e box_expr_sig -> - make_abs:'e make_abs_sig -> - make_let_in:'e make_let_in_sig -> - decl_ctx -> - (('a, 'm mark) gexpr as 'e) scopes -> - 'm mark -> - 'e scope_name_or_var -> - 'e marked Bindlib.box - -val build_whole_program_expr : - box_expr:'e box_expr_sig -> - make_abs:'e make_abs_sig -> - make_let_in:'e make_let_in_sig -> - 'e Shared_ast.program -> - ScopeName.t -> - (('a, 'm mark) gexpr as 'e) marked Bindlib.box -(** Usage: [build_whole_program_expr program main_scope] builds an expression - corresponding to the main program and returning the main scope as a - function. *) - -val expr_size : 'm marked_expr -> int -(** Used by the optimizer to know when to stop *) - -val remove_logging_calls : 'm marked_expr -> 'm marked_expr Bindlib.box -(** Removes all calls to [Log] unary operators in the AST, replacing them by - their argument. *) - -val build_scope_typ_from_sig : - decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ Marked.pos -(** [build_scope_typ_from_sig ctx in_struct out_struct pos] builds the arrow - type for the specified scope *) diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index c27f74f7..dc75aab0 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -502,7 +502,7 @@ let interpret_program : (fun ty -> match Marked.unmark ty with | TArrow ((TLit TUnit, _), ty_in) -> - Ast.empty_thunked_term + Expr.empty_thunked_term (Expr.map_mark (fun pos -> pos) (fun _ -> ty_in) mark_e) | _ -> Errors.raise_spanned_error (Marked.get_mark ty) diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index f082c43d..f097f483 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -128,7 +128,7 @@ let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : with | exceptions, just, cons when List.fold_left - (fun nb except -> if is_value except then nb + 1 else nb) + (fun nb except -> if Expr.is_value except then nb + 1 else nb) 0 exceptions > 1 -> (* at this point we know a conflict error will be triggered so we just @@ -136,7 +136,7 @@ let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : beautiful right error message *) Interpreter.evaluate_expr ctx.decl_ctx (EDefault (exceptions, just, cons), pos) - | [except], _, _ when is_value except -> + | [except], _, _ when Expr.is_value except -> (* if there is only one exception and it is a non-empty value it is always chosen *) except @@ -178,7 +178,7 @@ let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : ( ELit (LBool false) | EApp ((EOp (Unop (Log _)), _), [(ELit (LBool false), _)]) ) ) -> e1 - | _ when equal_exprs e2 e3 -> e2 + | _ when Expr.equal e2 e3 -> e2 | _ -> EIfThenElse (e1, e2, e3), pos) (rec_helper e1) (rec_helper e2) (rec_helper e3) | ErrorOnEmpty e1 -> diff --git a/compiler/dcalc/print.ml b/compiler/dcalc/print.ml index e48e3b1d..5aafe5cc 100644 --- a/compiler/dcalc/print.ml +++ b/compiler/dcalc/print.ml @@ -207,7 +207,7 @@ let format_unop (fmt : Format.formatter) (op : unop) : unit = let needs_parens (e : 'm marked_expr) : bool = match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false -let format_var (fmt : Format.formatter) (v : 'm Ast.var) : unit = +let format_var fmt v = Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) let rec format_expr @@ -352,9 +352,8 @@ let format_scope Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" ScopeName.format_t n (format_expr ctx ~debug) (Bindlib.unbox - (Ast.build_whole_scope_expr ~make_abs:Ast.make_abs - ~make_let_in:Ast.make_let_in ~box_expr:Expr.box ctx s + (Scope.to_expr ctx s (Expr.map_mark (fun _ -> Marked.get_mark (ScopeName.get_info n)) (fun ty -> ty) - (Expr.get_scope_body_mark s)))) + (Scope.get_body_mark s)))) diff --git a/compiler/dcalc/print.mli b/compiler/dcalc/print.mli index d39332ea..30fb052e 100644 --- a/compiler/dcalc/print.mli +++ b/compiler/dcalc/print.mli @@ -39,7 +39,7 @@ val format_binop : Format.formatter -> binop -> unit val format_ternop : Format.formatter -> ternop -> unit val format_log_entry : Format.formatter -> log_entry -> unit val format_unop : Format.formatter -> unop -> unit -val format_var : Format.formatter -> 'm Ast.var -> unit +val format_var : Format.formatter -> 'e Var.t -> unit val format_expr : ?debug:bool (** [true] for debug printing *) -> diff --git a/compiler/driver.ml b/compiler/driver.ml index 6002ca81..38a26b18 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -211,10 +211,7 @@ let driver source_file (options : Cli.options) : int = prgm.scopes) ) else let prgrm_dcalc_expr = - Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr - ~box_expr:Shared_ast.Expr.box ~make_abs:Dcalc.Ast.make_abs - ~make_let_in:Dcalc.Ast.make_let_in prgm scope_uid) + Bindlib.unbox (Shared_ast.Program.to_expr prgm scope_uid) in Format.fprintf fmt "%a\n" (Dcalc.Print.format_expr prgm.decl_ctx) @@ -241,10 +238,7 @@ let driver source_file (options : Cli.options) : int = | `Interpret -> Cli.debug_print "Starting interpretation..."; let prgrm_dcalc_expr = - Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr - ~box_expr:Shared_ast.Expr.box ~make_abs:Dcalc.Ast.make_abs - ~make_let_in:Dcalc.Ast.make_let_in prgm scope_uid) + Bindlib.unbox (Shared_ast.Program.to_expr prgm scope_uid) in let results = Dcalc.Interpreter.interpret_program prgm.decl_ctx prgrm_dcalc_expr @@ -316,11 +310,7 @@ let driver source_file (options : Cli.options) : int = prgm.scopes) ) else let prgrm_lcalc_expr = - Bindlib.unbox - (Dcalc.Ast.build_whole_program_expr - ~box_expr:Shared_ast.Expr.box - ~make_abs:Lcalc.Ast.make_abs - ~make_let_in:Lcalc.Ast.make_let_in prgm scope_uid) + Bindlib.unbox (Shared_ast.Program.to_expr prgm scope_uid) in Format.fprintf fmt "%a\n" (Lcalc.Print.format_expr prgm.decl_ctx) diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 5e738bb8..c13b2647 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -67,7 +67,9 @@ type 'm ctx = { } let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = - let pp_binding (fmt : Format.formatter) ((v, info) : 'm D.var * 'm info) = + let pp_binding + (fmt : Format.formatter) + ((v, info) : 'm D.expr Var.t * 'm info) = Format.fprintf fmt "%a: %a" Dcalc.Print.format_var v pp_info info in @@ -81,7 +83,8 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = (** [find ~info n ctx] is a warpper to ocaml's Map.find that handle errors in a slightly better way. *) -let find ?(info : string = "none") (n : 'm D.var) (ctx : 'm ctx) : 'm info = +let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : + 'm info = (* let _ = Format.asprintf "Searching for variable %a inside context %a" Dcalc.Print.format_var n pp_ctx ctx |> Cli.debug_print in *) try Var.Map.find n ctx.vars @@ -95,8 +98,11 @@ let find ?(info : string = "none") (n : 'm D.var) (ctx : 'm ctx) : 'm info = var, creating a unique corresponding variable in Lcalc, with the corresponding expression, and the boolean is_pure. It is usefull for debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) -let add_var (mark : 'm mark) (var : 'm D.var) (is_pure : bool) (ctx : 'm ctx) : - 'm ctx = +let add_var + (mark : 'm mark) + (var : 'm D.expr Var.t) + (is_pure : bool) + (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in let expr = A.make_var (new_var, mark) in diff --git a/compiler/lcalc/print.ml b/compiler/lcalc/print.ml index 67201c40..c204c666 100644 --- a/compiler/lcalc/print.ml +++ b/compiler/lcalc/print.ml @@ -188,9 +188,8 @@ let format_scope ?(debug = false) ctx fmt (n, s) = Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" ScopeName.format_t n (format_expr ctx ~debug) (Bindlib.unbox - (Dcalc.Ast.build_whole_scope_expr ~make_abs:Ast.make_abs - ~make_let_in:Ast.make_let_in ~box_expr:Expr.box ctx s + (Scope.to_expr ctx s (Expr.map_mark (fun _ -> Marked.get_mark (ScopeName.get_info n)) (fun ty -> ty) - (Expr.get_scope_body_mark s)))) + (Scope.get_body_mark s)))) diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 12564007..eb210f93 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -25,9 +25,9 @@ type scope_var_ctx = { type scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : untyped Dcalc.Ast.var; + scope_sig_scope_var : untyped Dcalc.Ast.expr Var.t; (** Var representing the scope *) - scope_sig_input_var : untyped Dcalc.Ast.var; + scope_sig_input_var : untyped Dcalc.Ast.expr Var.t; (** Var representing the scope input inside the scope func *) scope_sig_input_struct : StructName.t; (** Scope input *) scope_sig_output_struct : StructName.t; (** Scope output *) @@ -40,10 +40,11 @@ type ctx = { enums : Ast.enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) Ast.ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.var * typ * Ast.io) Ast.ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : untyped Dcalc.Ast.var Ast.VarMap.t; + (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) Ast.ScopeVarMap.t + Ast.SubScopeMap.t; + local_vars : untyped Dcalc.Ast.expr Var.t Ast.VarMap.t; } let empty_ctx @@ -85,7 +86,7 @@ let merge_defaults untyped Dcalc.Ast.marked_expr Bindlib.box = let caller = let m = Marked.get_mark (Bindlib.unbox caller) in - Dcalc.Ast.make_app caller [Bindlib.box (ELit LUnit, m)] m + Expr.make_app caller [Bindlib.box (ELit LUnit, m)] m in let body = Bindlib.box_apply2 @@ -388,7 +389,7 @@ let translate_rule let a_var = Var.make (Marked.unmark a_name) in let tau = translate_typ ctx tau in let new_e = translate_expr ctx e in - let a_expr = Dcalc.Ast.make_var (a_var, pos_mark var_def_pos) in + let a_expr = Expr.make_var (a_var, pos_mark var_def_pos) in let merged_expr = Bindlib.box_apply (fun merged_expr -> ErrorOnEmpty merged_expr, pos_mark_as a_name) @@ -454,7 +455,7 @@ let translate_rule (fun new_e -> ErrorOnEmpty new_e, pos_mark_as subs_var) new_e | Reentrant -> - Dcalc.Ast.make_abs + Expr.make_abs (Array.of_list [silent_var]) new_e [TLit TUnit, var_def_pos] @@ -530,13 +531,12 @@ let translate_rule should have been defined (even an empty definition, if they're not defined by any rule in the source code) by the translation from desugared to the scope language. *) - Bindlib.box - (Dcalc.Ast.empty_thunked_term (Untyped { pos = pos_call })) + Bindlib.box (Expr.empty_thunked_term (Untyped { pos = pos_call })) else let a_var, _, _ = Ast.ScopeVarMap.find subvar.scope_var_name subscope_vars_defined in - Dcalc.Ast.make_var (a_var, pos_mark pos_call)) + Expr.make_var (a_var, pos_mark pos_call)) all_subscope_input_vars in let subscope_struct_arg = @@ -560,7 +560,7 @@ let translate_rule in let subscope_func = tag_with_log_entry - (Dcalc.Ast.make_var + (Expr.make_var (scope_dcalc_var, pos_mark_as (Ast.SubScopeName.get_info subindex))) BeginCall [ @@ -627,7 +627,7 @@ let translate_rule pos_mark pos_sigma ); }) (Bindlib.bind_var v next) - (Dcalc.Ast.make_var (result_tuple_var, pos_mark pos_sigma)), + (Expr.make_var (result_tuple_var, pos_mark pos_sigma)), i - 1 )) all_subscope_output_vars_dcalc (next, List.length all_subscope_output_vars_dcalc - 1) @@ -696,7 +696,7 @@ let translate_rules (Bindlib.box_list (List.map (fun (_, (dcalc_var, _, _)) -> - Dcalc.Ast.make_var (dcalc_var, pos_mark pos_sigma)) + Expr.make_var (dcalc_var, pos_mark pos_sigma)) scope_output_variables)) in ( scope_lets @@ -797,7 +797,7 @@ let translate_scope_decl pos_mark pos_sigma ); }) (Bindlib.bind_var v next) - (Dcalc.Ast.make_var (scope_input_var, pos_mark pos_sigma)), + (Expr.make_var (scope_input_var, pos_mark pos_sigma)), i - 1 )) scope_input_variables (next, List.length scope_input_variables - 1)) diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index ce6ceb3a..8e60735f 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -20,6 +20,8 @@ open Types (** Functions handling the types of [shared_ast] *) +(* Basic block constructors *) + let evar v mark = Bindlib.box_apply (Marked.mark mark) (Bindlib.box_var v) let etuple args s mark = @@ -125,10 +127,6 @@ let fold_marks ty = ty_f (List.map (function Typed m -> m) ms); } -let get_scope_body_mark scope_body = - match snd (Bindlib.unbind scope_body.scope_body_expr) with - | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e - (* - Traversal functions - *) let map @@ -174,3 +172,205 @@ let box e = id_t () e let untype e = map_marks ~f:(fun m -> Untyped { pos = mark_pos m }) e + +(* - Expression building helpers - *) + +let make_var (x, mark) = + Bindlib.box_apply (fun x -> x, mark) (Bindlib.box_var x) + +let make_abs xs e taus mark = + Bindlib.box_apply (fun b -> EAbs (b, taus), mark) (Bindlib.bind_mvar xs e) + +let make_app e u mark = + Bindlib.box_apply2 (fun e u -> EApp (e, u), mark) e (Bindlib.box_list u) + +let empty_thunked_term mark = + let silent = Var.make "_" in + let pos = mark_pos mark in + Bindlib.unbox + (make_abs [| silent |] + (Bindlib.box (ELit LEmptyError, mark)) + [TLit TUnit, pos] + (map_mark + (fun pos -> pos) + (fun ty -> + Marked.mark pos (TArrow (Marked.mark pos (TLit TUnit), ty))) + mark)) + +let make_let_in x tau e1 e2 pos = + let m_e1 = Marked.get_mark (Bindlib.unbox e1) in + let m_e2 = Marked.get_mark (Bindlib.unbox e2) in + let m_abs = + map_mark2 + (fun _ _ -> pos) + (fun m1 m2 -> Marked.mark pos (TArrow (m1.ty, m2.ty))) + m_e1 m_e2 + in + make_app (make_abs [| x |] e2 [tau] m_abs) [e1] m_e2 + +(* Tests *) + +let is_value (type a) (e : (a, 'm mark) gexpr marked) = + match Marked.unmark e with + | ELit _ | EAbs _ | EOp _ | ERaise _ -> true + | _ -> false + +let rec equal_typs ty1 ty2 = + match Marked.unmark ty1, Marked.unmark ty2 with + | TLit l1, TLit l2 -> l1 = l2 + | TTuple (tys1, n1), TTuple (tys2, n2) -> n1 = n2 && equal_typs_list tys1 tys2 + | TEnum (tys1, n1), TEnum (tys2, n2) -> n1 = n2 && equal_typs_list tys1 tys2 + | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typs t1 t2 && equal_typs t1' t2' + | TArray t1, TArray t2 -> equal_typs t1 t2 + | TAny, TAny -> true + | _, _ -> false + +and equal_typs_list tys1 tys2 = + List.length tys1 = List.length tys2 + && (* OCaml && operator short-circuits when a clause is false, we can safely + assume here that both lists have equal length *) + List.for_all (fun (x, y) -> equal_typs x y) (List.combine tys1 tys2) + +let equal_log_entries l1 l2 = + match l1, l2 with + | VarDef t1, VarDef t2 -> equal_typs (t1, Pos.no_pos) (t2, Pos.no_pos) + | x, y -> x = y + +let equal_unops op1 op2 = + match op1, op2 with + (* Log entries contain a typ which contain position information, we thus need + to descend into them *) + | Log (l1, info1), Log (l2, info2) -> equal_log_entries l1 l2 && info1 = info2 + (* All the other cases can be discharged through equality *) + | _ -> op1 = op2 + +let equal_ops op1 op2 = + match op1, op2 with + | Ternop op1, Ternop op2 -> op1 = op2 + | Binop op1, Binop op2 -> op1 = op2 + | Unop op1, Unop op2 -> equal_unops op1 op2 + | _, _ -> false + +let equal_except ex1 ex2 = ex1 = ex2 + +(* weird indentation; see + https://github.com/ocaml-ppx/ocamlformat/issues/2143 *) +let rec equal_list : + 'a. ('a, 't) gexpr marked list -> ('a, 't) gexpr marked list -> bool = + fun es1 es2 -> + try List.for_all2 equal es1 es2 with Invalid_argument _ -> false + +and equal : 'a. ('a, 't) gexpr marked -> ('a, 't) gexpr marked -> bool = + fun (type a) (e1 : (a, 't) gexpr marked) (e2 : (a, 't) gexpr marked) -> + match Marked.unmark e1, Marked.unmark e2 with + | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 + | ETuple (es1, n1), ETuple (es2, n2) -> n1 = n2 && equal_list es1 es2 + | ETupleAccess (e1, id1, n1, tys1), ETupleAccess (e2, id2, n2, tys2) -> + equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 + | EInj (e1, id1, n1, tys1), EInj (e2, id2, n2, tys2) -> + equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 + | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> + n1 = n2 && equal e1 e2 && equal_list cases1 cases2 + | EArray es1, EArray es2 -> equal_list es1 es2 + | ELit l1, ELit l2 -> l1 = l2 + | EAbs (b1, tys1), EAbs (b2, tys2) -> + equal_typs_list tys1 tys2 + && + let vars1, body1 = Bindlib.unmbind b1 in + let body2 = Bindlib.msubst b2 (Array.map (fun x -> EVar x) vars1) in + equal body1 body2 + | EAssert e1, EAssert e2 -> equal e1 e2 + | EOp op1, EOp op2 -> equal_ops op1 op2 + | EDefault (exc1, def1, cons1), EDefault (exc2, def2, cons2) -> + equal def1 def2 && equal cons1 cons2 && equal_list exc1 exc2 + | EIfThenElse (if1, then1, else1), EIfThenElse (if2, then2, else2) -> + equal if1 if2 && equal then1 then2 && equal else1 else2 + | ErrorOnEmpty e1, ErrorOnEmpty e2 -> equal e1 e2 + | ERaise ex1, ERaise ex2 -> equal_except ex1 ex2 + | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> + equal etry1 etry2 && equal_except ex1 ex2 && equal ewith1 ewith2 + | _, _ -> false + +let free_vars : 'a. ('a, 't) gexpr marked -> ('a, 't) gexpr Var.Set.t = + fun (type a) (e : (a, 't) gexpr marked) -> + let rec aux : (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = + fun e -> + match Marked.unmark e with + | EOp _ | ELit _ | ERaise _ -> Var.Set.empty + | EVar v -> Var.Set.singleton v + | ETuple (es, _) -> + es |> List.map aux |> List.fold_left Var.Set.union Var.Set.empty + | EArray es -> + es |> List.map aux |> List.fold_left Var.Set.union Var.Set.empty + | _ -> Var.Set.empty + in + aux e + +let rec free_vars : 'a. ('a, 't) gexpr marked -> ('a, 't) gexpr Var.Set.t = + fun (type a) (e : (a, 't) gexpr marked) : (a, 't) gexpr Var.Set.t -> + match Marked.unmark e with + | EOp _ | ELit _ | ERaise _ -> Var.Set.empty + | EVar v -> Var.Set.singleton v + | ETuple (es, _) -> + es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty + | EArray es -> + es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty + | ETupleAccess (e1, _, _, _) -> free_vars e1 + | EAssert e1 -> free_vars e1 + | EInj (e1, _, _, _) -> free_vars e1 + | ErrorOnEmpty e1 -> free_vars e1 + | ECatch (etry, ex, ewith) -> + Var.Set.union (free_vars etry) (free_vars ewith) + | EApp (e1, es) -> + e1 :: es + |> List.map free_vars + |> List.fold_left Var.Set.union Var.Set.empty + | EMatch (e1, es, _) -> + e1 :: es + |> List.map free_vars + |> List.fold_left Var.Set.union Var.Set.empty + | EDefault (es, ejust, econs) -> + ejust :: econs :: es + |> List.map free_vars + |> List.fold_left Var.Set.union Var.Set.empty + | EIfThenElse (e1, e2, e3) -> + [e1; e2; e3] + |> List.map free_vars + |> List.fold_left Var.Set.union Var.Set.empty + | EAbs (binder, _) -> + let vs, body = Bindlib.unmbind binder in + Array.fold_right Var.Set.remove vs (free_vars body) + +let remove_logging_calls e = + let rec f () e = + match Marked.unmark e with + | EApp ((EOp (Unop (Log _)), _), [arg]) -> map () ~f arg + | _ -> map () ~f e + in + f () e + +let rec size : 'a. ('a, 't) gexpr marked -> int = + fun (type a) (e : (a, 't) gexpr marked) -> + match Marked.unmark e with + | EVar _ | ELit _ | EOp _ -> 1 + | ETuple (args, _) -> List.fold_left (fun acc arg -> acc + size arg) 1 args + | EArray args -> List.fold_left (fun acc arg -> acc + size arg) 1 args + | ETupleAccess (e1, _, _, _) -> size e1 + 1 + | EInj (e1, _, _, _) -> size e1 + 1 + | EAssert e1 -> size e1 + 1 + | ErrorOnEmpty e1 -> size e1 + 1 + | EMatch (arg, args, _) -> + List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args + | EApp (arg, args) -> + List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args + | EAbs (binder, _) -> + let _, body = Bindlib.unmbind binder in + 1 + size body + | EIfThenElse (e1, e2, e3) -> 1 + size e1 + size e2 + size e3 + | EDefault (exceptions, just, cons) -> + List.fold_left + (fun acc except -> acc + size except) + (1 + size just + size cons) + exceptions + | ERaise _ -> 1 + | ECatch (etry, _, ewith) -> 1 + size etry + size ewith diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index c568cc25..1b8d3afb 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -22,6 +22,7 @@ open Types (** {2 Boxed constructors} *) +val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box val evar : ('a, 't) gexpr Bindlib.var -> 't -> ('a, 't) marked_gexpr Bindlib.box val etuple : @@ -54,21 +55,20 @@ val ematch : ('a, 't) marked_gexpr Bindlib.box val earray : - (([< any ] as 'a), 't) marked_gexpr Bindlib.box list -> + ('a any, 't) marked_gexpr Bindlib.box list -> 't -> ('a, 't) marked_gexpr Bindlib.box -val elit : ([< any ] as 'a) glit -> 't -> ('a, 't) marked_gexpr Bindlib.box +val elit : 'a any glit -> 't -> ('a, 't) marked_gexpr Bindlib.box val eabs : - ((([< any ] as 'a), 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder - Bindlib.box -> + (('a any, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder Bindlib.box -> marked_typ list -> 't -> ('a, 't) marked_gexpr Bindlib.box val eapp : - (([< any ] as 'a), 't) marked_gexpr Bindlib.box -> + ('a any, 't) marked_gexpr Bindlib.box -> ('a, 't) marked_gexpr Bindlib.box list -> 't -> ('a, 't) marked_gexpr Bindlib.box @@ -78,7 +78,7 @@ val eassert : 't -> ('a, 't) marked_gexpr Bindlib.box -val eop : operator -> 't -> ([< any ], 't) marked_gexpr Bindlib.box +val eop : operator -> 't -> (_ any, 't) marked_gexpr Bindlib.box val edefault : (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> @@ -88,7 +88,7 @@ val edefault : ('a, 't) marked_gexpr Bindlib.box val eifthenelse : - (([< any ] as 'a), 't) marked_gexpr Bindlib.box -> + ('a any, 't) marked_gexpr Bindlib.box -> ('a, 't) marked_gexpr Bindlib.box -> ('a, 't) marked_gexpr Bindlib.box -> 't -> @@ -129,15 +129,9 @@ val map_mark2 : val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark -val get_scope_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark - val untype : ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box -(** {2 Handling of boxing} *) - -val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box - (** {2 Traversal functions} *) val map : @@ -174,3 +168,50 @@ val map_top_down : val map_marks : f:('t1 -> 't2) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box + +(** {2 Expression building helpers} *) + +val make_var : 'a Bindlib.var * 'b -> ('a * 'b) Bindlib.box + +val make_abs : + 'e Var.vars -> + (('a, 'm mark) gexpr as 'e) marked Bindlib.box -> + typ Marked.pos list -> + 'm mark -> + 'e marked Bindlib.box + +val make_app : + ((_ any, 'm mark) gexpr as 'e) marked Bindlib.box -> + 'e marked Bindlib.box list -> + 'm mark -> + 'e marked Bindlib.box + +val empty_thunked_term : + 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) gexpr marked + +val make_let_in : + 'e Bindlib.var -> + typ Utils.Marked.pos -> + ((_ any, 'm mark) gexpr as 'e) marked Bindlib.box -> + 'e marked Bindlib.box -> + Utils.Pos.t -> + 'e marked Bindlib.box + +(** {2 Transformations} *) + +val remove_logging_calls : + ((_ any, 't) gexpr as 'e) marked -> 'e marked Bindlib.box +(** Removes all calls to [Log] unary operators in the AST, replacing them by + their argument. *) + +(** {2 Analysis and tests} *) + +val is_value : (_ any, 'm mark) gexpr marked -> bool + +val equal : ('a, 'm mark) gexpr marked -> ('a, 'm mark) gexpr marked -> bool +(** Determines if two expressions are equal, omitting their position information *) + +val free_vars : 'e marked -> 'e Var.Set.t + +val size : (_ any, 't) gexpr marked -> int +(** Used by the optimizer to know when to stop *) diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index 76ab52f1..e2d6b475 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -25,3 +25,17 @@ let untype (prg : ('a, 'm mark) gexpr program) : Bindlib.unbox (Scope.map_exprs ~f:Expr.untype ~varf:Var.translate prg.scopes); } + +let rec find_scope name vars = function + | Nil -> raise Not_found + | ScopeDef { scope_name; scope_body; _ } when scope_name = name -> + List.rev vars, scope_body + | ScopeDef { scope_next; _ } -> + let var, next = Bindlib.unbind scope_next in + find_scope name (var :: vars) next + +let to_expr p main_scope = + let _, main_scope_body = find_scope main_scope [] p.scopes in + Scope.unfold p.decl_ctx p.scopes + (Scope.get_body_mark main_scope_body) + (ScopeName main_scope) diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index 2c8863f0..65225ac0 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -17,5 +17,11 @@ open Types -val untype : - (([< any ] as 'a), 'm mark) gexpr program -> ('a, untyped mark) gexpr program +(** {2 Transformations} *) + +val untype : ('a any, 'm mark) gexpr program -> ('a, untyped mark) gexpr program + +val to_expr : 'e anyexpr program -> ScopeName.t -> 'e marked Bindlib.box +(** Usage: [build_whole_program_expr program main_scope] builds an expression + corresponding to the main program and returning the main scope as a + function. *) diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index d83b2d21..efe1843a 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -15,6 +15,7 @@ License for the specific language governing permissions and limitations under the License. *) +open Utils open Types let rec fold_left_lets ~f ~init scope_body_expr = @@ -90,3 +91,107 @@ let map_exprs ~f ~varf scopes = }) new_body_expr new_next) ~init:(Bindlib.box Nil) scopes + +let get_body_mark scope_body = + match snd (Bindlib.unbind scope_body.scope_body_expr) with + | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e + +let rec unfold_body_expr (ctx : decl_ctx) (scope_let : 'e scope_body_expr) : + 'e marked Bindlib.box = + match scope_let with + | Result e -> Expr.box e + | ScopeLet + { + scope_let_kind = _; + scope_let_typ; + scope_let_expr; + scope_let_next; + scope_let_pos; + } -> + let var, next = Bindlib.unbind scope_let_next in + Expr.make_let_in var scope_let_typ (Expr.box scope_let_expr) + (unfold_body_expr ctx next) + scope_let_pos + +let build_typ_from_sig + (ctx : decl_ctx) + (scope_input_struct_name : StructName.t) + (scope_return_struct_name : StructName.t) + (pos : Pos.t) : typ Marked.pos = + let scope_sig = StructMap.find scope_input_struct_name ctx.ctx_structs in + let scope_return_typ = + StructMap.find scope_return_struct_name ctx.ctx_structs + in + let result_typ = + TTuple (List.map snd scope_return_typ, Some scope_return_struct_name), pos + in + let input_typ = + TTuple (List.map snd scope_sig, Some scope_input_struct_name), pos + in + TArrow (input_typ, result_typ), pos + +type 'e scope_name_or_var = + | ScopeName of ScopeName.t + | ScopeVar of 'e Bindlib.var + +let to_expr (ctx : decl_ctx) (body : 'e scope_body) (mark_scope : 'm mark) : + 'e marked Bindlib.box = + let var, body_expr = Bindlib.unbind body.scope_body_expr in + let body_expr = unfold_body_expr ctx body_expr in + Expr.make_abs [| var |] body_expr + [ + ( TTuple + ( List.map snd + (StructMap.find body.scope_body_input_struct ctx.ctx_structs), + Some body.scope_body_input_struct ), + Expr.mark_pos mark_scope ); + ] + mark_scope + +let rec unfold + (ctx : decl_ctx) + (s : 'e scopes) + (mark : 'm mark) + (main_scope : 'expr scope_name_or_var) : 'e marked Bindlib.box = + match s with + | Nil -> ( + match main_scope with + | ScopeVar v -> Bindlib.box_apply (fun v -> v, mark) (Bindlib.box_var v) + | ScopeName _ -> failwith "should not happen") + | ScopeDef { scope_name; scope_body; scope_next } -> + let scope_var, scope_next = Bindlib.unbind scope_next in + let scope_pos = Marked.get_mark (ScopeName.get_info scope_name) in + let scope_body_mark = get_body_mark scope_body in + let main_scope = + match main_scope with + | ScopeVar v -> ScopeVar v + | ScopeName n -> + if ScopeName.compare n scope_name = 0 then ScopeVar scope_var + else ScopeName n + in + Expr.make_let_in scope_var + (build_typ_from_sig ctx scope_body.scope_body_input_struct + scope_body.scope_body_output_struct scope_pos) + (to_expr ctx scope_body scope_body_mark) + (unfold ctx scope_next mark main_scope) + scope_pos + +let rec free_vars_body_expr scope_lets = + match scope_lets with + | Result e -> Expr.free_vars e + | ScopeLet { scope_let_expr = e; scope_let_next = next; _ } -> + let v, body = Bindlib.unbind next in + Var.Set.union (Expr.free_vars e) + (Var.Set.remove v (free_vars_body_expr body)) + +let free_vars_body scope_body = + let { scope_body_expr = binder; _ } = scope_body in + let v, body = Bindlib.unbind binder in + Var.Set.remove v (free_vars_body_expr body) + +let rec free_vars scopes = + match scopes with + | Nil -> Var.Set.empty + | ScopeDef { scope_body = body; scope_next = next; _ } -> + let v, next = Bindlib.unbind next in + Var.Set.union (Var.Set.remove v (free_vars next)) (free_vars_body body) diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index a5fbee91..4bbeebb9 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -17,6 +17,7 @@ (** Functions handling the scope structures of [shared_ast] *) +open Utils open Types (** {2 Traversal functions} *) @@ -79,4 +80,36 @@ val map_exprs : (** This is the main map visitor for all the expressions inside all the scopes of the program. *) -(** {2 Other helpers} *) +val get_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark + +(** {2 Conversions} *) + +val to_expr : + decl_ctx -> + ((_ any, 'm mark) gexpr as 'e) scope_body -> + 'm mark -> + 'e marked Bindlib.box +(** Usage: [to_expr ctx body scope_position] where [scope_position] corresponds + to the line of the scope declaration for instance. *) + +type 'e scope_name_or_var = + | ScopeName of ScopeName.t + | ScopeVar of 'e Bindlib.var + +val unfold : + decl_ctx -> + ((_ any, 'm mark) gexpr as 'e) scopes -> + 'm mark -> + 'e scope_name_or_var -> + 'e marked Bindlib.box + +val build_typ_from_sig : + decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ Marked.pos +(** [build_typ_from_sig ctx in_struct out_struct pos] builds the arrow type for + the specified scope *) + +(** {2 Analysis and tests} *) + +val free_vars_body_expr : 'e anyexpr scope_body_expr -> 'e Var.Set.t +val free_vars_body : 'e anyexpr scope_body -> 'e Var.Set.t +val free_vars : 'e anyexpr scopes -> 'e Var.Set.t diff --git a/compiler/shared_ast/types.ml b/compiler/shared_ast/types.ml index ffc9a567..fb1f4f7a 100644 --- a/compiler/shared_ast/types.ml +++ b/compiler/shared_ast/types.ml @@ -129,7 +129,8 @@ type dcalc = [ `Dcalc ] type lcalc = [ `Lcalc ] (* type scalc = [ `Scalc ] *) -type any = [ desugared | scopelang | dcalc | lcalc ] + +type 'a any = [< desugared | scopelang | dcalc | lcalc ] as 'a (** Literals are the same throughout compilation except for the [LEmptyError] case which is eliminated midway through. *) @@ -153,12 +154,12 @@ type ('a, 't) marked_gexpr = (('a, 't) gexpr, 't) Marked.t library, based on higher-order abstract syntax *) and ('a, 't) gexpr = (* Constructors common to all ASTs *) - | ELit : 'a glit -> (([< any ] as 'a), 't) gexpr + | ELit : 'a glit -> ('a any, 't) gexpr | EApp : ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list - -> (([< any ] as 'a), 't) gexpr - | EOp : operator -> (([< any ] as 'a), 't) gexpr - | EArray : ('a, 't) marked_gexpr list -> (([< any ] as 'a), 't) gexpr + -> ('a any, 't) gexpr + | EOp : operator -> ('a any, 't) gexpr + | EArray : ('a, 't) marked_gexpr list -> ('a any, 't) gexpr (* All but statement calculus *) | EVar : ('a, 't) gexpr Bindlib.var @@ -213,6 +214,9 @@ and ('a, 't) gexpr = * | ESInj: ('a, 't) marked_gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) gexpr * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) gexpr *) +type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr +(** Shorter alias for functions taking any kind of expression *) + (** {2 Markings} *) type untyped = { pos : Pos.t } [@@ocaml.unboxed] @@ -231,7 +235,7 @@ type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) gexpr (** Useful for errors and printing, for example *) type any_marked_expr = - | AnyExpr : ([< any ], 'm mark) marked_gexpr -> any_marked_expr + | AnyExpr : (_ any, _ mark) marked_gexpr -> any_marked_expr (** {2 Higher-level program structure} *) diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index dc902e5b..bb69eca6 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -21,8 +21,8 @@ open Types (** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e t = 'e Bindlib.var constraint 'e = ([< any ], 't) gexpr -type 'e vars = 'e Bindlib.mvar +type 'e t = 'e anyexpr Bindlib.var +type 'e vars = 'e anyexpr Bindlib.mvar type 'e binder = ('e, 'e marked) Bindlib.binder let make (name : string) : 'e t = Bindlib.new_var (fun x -> EVar x) name let compare = Bindlib.compare_vars diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 9b054491..b99b3ed5 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -21,8 +21,8 @@ open Types (** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e t = 'e Bindlib.var constraint 'e = ([< any ], 't) gexpr -type 'e vars = 'e Bindlib.mvar +type 'e t = 'e anyexpr Bindlib.var +type 'e vars = 'e anyexpr Bindlib.mvar type 'e binder = ('e, 'e marked) Bindlib.binder val make : string -> 'e t diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 35f53d16..73c36122 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -29,7 +29,7 @@ type vc_return = typed marked_expr * (typed expr, typ Marked.pos) Var.Map.t type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; - input_vars : typed var list; + input_vars : typed expr Var.t list; scope_variables_typs : (typed expr, typ Marked.pos) Var.Map.t; } @@ -287,7 +287,7 @@ type verification_condition = { (* should have type bool *) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed var Marked.pos; + vc_variable : typed expr Var.t Marked.pos; vc_free_vars_typ : (typed expr, typ Marked.pos) Var.Map.t; } @@ -311,7 +311,9 @@ let rec generate_verification_conditions_scope_body_expr what we're really doing is adding exceptions to something defined in the subscope so we just ought to verify only that the exceptions overlap. *) - let e = Bindlib.unbox (remove_logging_calls scope_let.scope_let_expr) in + let e = + Bindlib.unbox (Expr.remove_logging_calls scope_let.scope_let_expr) + in let e = match_and_ignore_outer_reentrant_default ctx e in let vc_confl, vc_confl_typs = generate_vs_must_not_return_confict ctx e diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 24aa6769..359c3ae9 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -33,7 +33,7 @@ type verification_condition = { (** This expression should have type [bool]*) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed Dcalc.Ast.var Marked.pos; + vc_variable : typed Dcalc.Ast.expr Var.t Marked.pos; vc_free_vars_typ : (typed Dcalc.Ast.expr, typ Marked.pos) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 497afc4a..5112b0bb 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -33,7 +33,7 @@ type context = { ctx_funcdecl : (typed expr, FuncDecl.func_decl) Var.Map.t; (* A map from Catala function names (represented as variables) to Z3 function declarations, used to only define once functions in Z3 queries *) - ctx_z3vars : typed var StringMap.t; + ctx_z3vars : typed expr Var.t StringMap.t; (* A map from strings, corresponding to Z3 symbol names, to the Catala variable they represent. Used when to pretty-print Z3 models when a counterexample is generated *) @@ -65,13 +65,15 @@ type context = { (** [add_funcdecl] adds the mapping between the Catala variable [v] and the Z3 function declaration [fd] to the context **) -let add_funcdecl (v : typed var) (fd : FuncDecl.func_decl) (ctx : context) : - context = +let add_funcdecl + (v : typed expr Var.t) + (fd : FuncDecl.func_decl) + (ctx : context) : context = { ctx with ctx_funcdecl = Var.Map.add v fd ctx.ctx_funcdecl } (** [add_z3var] adds the mapping between [name] and the Catala variable [v] to the context **) -let add_z3var (name : string) (v : typed var) (ctx : context) : context = +let add_z3var (name : string) (v : typed expr Var.t) (ctx : context) : context = { ctx with ctx_z3vars = StringMap.add name v ctx.ctx_z3vars } (** [add_z3enum] adds the mapping between the Catala enumeration [enum] and the @@ -82,7 +84,8 @@ let add_z3enum (enum : EnumName.t) (sort : Sort.sort) (ctx : context) : context (** [add_z3var] adds the mapping between temporary variable [v] and the Z3 expression [e] representing an accessor application to the context **) -let add_z3matchsubst (v : typed var) (e : Expr.expr) (ctx : context) : context = +let add_z3matchsubst (v : typed expr Var.t) (e : Expr.expr) (ctx : context) : + context = { ctx with ctx_z3matchsubsts = Var.Map.add v e ctx.ctx_z3matchsubsts } (** [add_z3struct] adds the mapping between the Catala struct [s] and the @@ -100,7 +103,7 @@ let base_day = CalendarLib.Date.make 1900 1 1 (** [unique_name] returns the full, unique name corresponding to variable [v], as given by Bindlib **) -let unique_name (v : 'm var) : string = +let unique_name (v : 'e Var.t) : string = Format.asprintf "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) (** [date_to_int] translates [date] to an integer corresponding to the number of @@ -386,7 +389,7 @@ let translate_lit (ctx : context) (l : lit) : Expr.expr = corresponding to the variable [v]. If no such function declaration exists yet, we construct it and add it to the context, thus requiring to return a new context *) -let find_or_create_funcdecl (ctx : context) (v : typed var) : +let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : context * FuncDecl.func_decl = match Var.Map.find_opt v ctx.ctx_funcdecl with | Some fd -> ctx, fd From 576e0fb3ff59f41fa80355a19acd66e096357f00 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Wed, 17 Aug 2022 16:14:14 +0200 Subject: [PATCH 09/31] Factorise AST printers Note that there were significant differences between the two printers (see the test diff!). Overall the `dcalc` one seemed newer so that's what I took, with only the required additions from `lcalc` (exceptions, raise and catch) --- compiler/dcalc/interpreter.ml | 34 +- compiler/dcalc/print.ml | 359 ------------------ compiler/dcalc/print.mli | 56 --- compiler/dcalc/typing.ml | 9 +- compiler/driver.ml | 12 +- compiler/lcalc/compile_without_exceptions.ml | 47 +-- compiler/lcalc/print.ml | 195 ---------- compiler/lcalc/print.mli | 34 -- compiler/lcalc/to_ocaml.ml | 10 +- compiler/plugins/api_web.ml | 2 +- compiler/scalc/print.ml | 120 +++--- compiler/scalc/to_python.ml | 4 +- compiler/scopelang/print.ml | 157 ++++---- compiler/shared_ast/expr.ml | 2 + compiler/shared_ast/expr.mli | 7 + compiler/shared_ast/print.ml | 337 ++++++++++++++++ compiler/shared_ast/print.mli | 50 +++ compiler/shared_ast/scope.ml | 14 + compiler/shared_ast/scope.mli | 7 + compiler/shared_ast/shared_ast.ml | 1 + compiler/surface/desugaring.ml | 7 +- compiler/utils/uid.ml | 6 +- compiler/utils/uid.mli | 1 + compiler/verification/conditions.ml | 2 +- compiler/verification/io.ml | 3 +- compiler/verification/z3backend.real.ml | 6 +- .../good/output/simple.catala_en.Lcalc | 2 +- 27 files changed, 609 insertions(+), 875 deletions(-) delete mode 100644 compiler/dcalc/print.ml delete mode 100644 compiler/dcalc/print.mli delete mode 100644 compiler/lcalc/print.ml delete mode 100644 compiler/lcalc/print.mli create mode 100644 compiler/shared_ast/print.ml create mode 100644 compiler/shared_ast/print.mli diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index dc75aab0..cec069c1 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -267,15 +267,13 @@ let rec evaluate_operator | VarDef _ -> (* TODO: this usage of Format is broken, Formatting requires that all is formatted in one pass, without going through intermediate "%s" *) - Cli.log_format "%*s%a %a: %s" (!log_indent * 2) "" - Print.format_log_entry entry Print.format_uid_list infos + Cli.log_format "%*s%a %a: %s" (!log_indent * 2) "" Print.log_entry entry + Print.uid_list infos (match e' with | EAbs _ -> Cli.with_style [ANSITerminal.green] "" | _ -> let expr_str = - Format.asprintf "%a" - (Print.format_expr ctx ~debug:false) - (List.hd args) + Format.asprintf "%a" (Expr.format ctx ~debug:false) (List.hd args) in let expr_str = Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\n\\s*") @@ -286,20 +284,20 @@ let rec evaluate_operator | PosRecordIfTrueBool -> ( match pos <> Pos.no_pos, e' with | true, ELit (LBool true) -> - Cli.log_format "%*s%a%s:\n%s" (!log_indent * 2) "" - Print.format_log_entry entry + Cli.log_format "%*s%a%s:\n%s" (!log_indent * 2) "" Print.log_entry + entry (Cli.with_style [ANSITerminal.green] "Definition applied") (Cli.add_prefix_to_each_line (Pos.retrieve_loc_text pos) (fun _ -> Format.asprintf "%*s" (!log_indent * 2) "")) | _ -> ()) | BeginCall -> - Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.format_log_entry - entry Print.format_uid_list infos; + Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.log_entry entry + Print.uid_list infos; log_indent := !log_indent + 1 | EndCall -> log_indent := !log_indent - 1; - Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.format_log_entry - entry Print.format_uid_list infos) + Cli.log_format "%*s%a %a" (!log_indent * 2) "" Print.log_entry entry + Print.uid_list infos) else (); e' | Unop _, [ELit LEmptyError] -> ELit LEmptyError @@ -310,7 +308,7 @@ let rec evaluate_operator (fun i arg -> ( Some (Format.asprintf "Argument n°%d, value %a" (i + 1) - (Print.format_expr ctx ~debug:true) + (Expr.format ctx ~debug:true) arg), Expr.pos arg )) args) @@ -374,7 +372,7 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr Errors.raise_spanned_error (Expr.pos e1) "The expression %a should be a tuple with %d components but is not \ (should not happen if the term was well-typed)" - (Print.format_expr ctx ~debug:true) + (Expr.format ctx ~debug:true) e n) | EInj (e1, n, en, ts) -> let e1' = evaluate_expr ctx e1 in @@ -468,12 +466,12 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr | EApp ((EOp (Binop op), _), [((ELit _, _) as e1); ((ELit _, _) as e2)]) -> Errors.raise_spanned_error (Expr.pos e') "Assertion failed: %a %a %a" - (Print.format_expr ctx ~debug:false) - e1 Print.format_binop op - (Print.format_expr ctx ~debug:false) + (Expr.format ctx ~debug:false) + e1 Print.binop op + (Expr.format ctx ~debug:false) e2 | _ -> - Cli.debug_format "%a" (Print.format_expr ctx) e'; + Cli.debug_format "%a" (Expr.format ctx) e'; Errors.raise_spanned_error (Expr.pos e') "Assertion failed") | ELit LEmptyError -> Marked.same_mark_as (ELit LEmptyError) e | _ -> @@ -535,7 +533,7 @@ let interpret_program : Errors.raise_spanned_error bad_pos "@[(bug) Result of interpretation doesn't have the \ expected type:@ @[%a@]@]" - (Print.format_typ ctx) (fst @@ ty)) + (Print.typ ctx) (fst @@ ty)) mark_e ) in match Marked.unmark (evaluate_expr ctx to_interpret) with diff --git a/compiler/dcalc/print.ml b/compiler/dcalc/print.ml deleted file mode 100644 index 5aafe5cc..00000000 --- a/compiler/dcalc/print.ml +++ /dev/null @@ -1,359 +0,0 @@ -(* This file is part of the Catala compiler, a specification language for tax - and social benefits computation rules. Copyright (C) 2020 Inria, contributor: - Denis Merigoux - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy of - the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. *) - -open Utils -open Shared_ast -open Ast -open String_common - -let typ_needs_parens (e : typ) : bool = - match e with TArrow _ | TArray _ -> true | _ -> false - -let format_uid_list - (fmt : Format.formatter) - (infos : Uid.MarkedString.info list) : unit = - Format.fprintf fmt "%a" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ".") - (fun fmt info -> - Format.fprintf fmt "%a" - (Utils.Cli.format_with_style - (if begins_with_uppercase (Marked.unmark info) then - [ANSITerminal.red] - else [])) - (Format.asprintf "%a" Utils.Uid.MarkedString.format_info info))) - infos - -let format_keyword (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.red]) s - -let format_base_type (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.yellow]) s - -let format_punctuation (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.cyan]) s - -let format_operator (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.green]) s - -let format_lit_style (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.yellow]) s - -let format_tlit (fmt : Format.formatter) (l : typ_lit) : unit = - format_base_type fmt - (match l with - | TUnit -> "unit" - | TBool -> "bool" - | TInt -> "integer" - | TRat -> "decimal" - | TMoney -> "money" - | TDuration -> "duration" - | TDate -> "date") - -let format_enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : - unit = - Format.fprintf fmt "%a" - (Utils.Cli.format_with_style [ANSITerminal.magenta]) - (Format.asprintf "%a" EnumConstructor.format_t c) - -let rec format_typ (ctx : decl_ctx) (fmt : Format.formatter) (typ : typ) : unit - = - let format_typ = format_typ ctx in - let format_typ_with_parens (fmt : Format.formatter) (t : typ) = - if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t - else Format.fprintf fmt "%a" format_typ t - in - match typ with - | TLit l -> Format.fprintf fmt "%a" format_tlit l - | TTuple (ts, None) -> - Format.fprintf fmt "@[(%a)@]" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " format_operator "*") - (fun fmt t -> Format.fprintf fmt "%a" format_typ t)) - (List.map Marked.unmark ts) - | TTuple (_args, Some s) -> - Format.fprintf fmt "@[%a%a%a%a@]" StructName.format_t s - format_punctuation "{" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "%a@ " format_punctuation ";") - (fun fmt (field, typ) -> - Format.fprintf fmt "%a%a%a%a@ %a" format_punctuation "\"" - StructFieldName.format_t field format_punctuation "\"" - format_punctuation ":" format_typ typ)) - (List.map - (fun (c, t) -> c, Marked.unmark t) - (StructMap.find s ctx.ctx_structs)) - format_punctuation "}" - | TEnum (_, e) -> - Format.fprintf fmt "@[%a%a%a%a@]" EnumName.format_t e - format_punctuation "[" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "@ %a@ " format_punctuation "|") - (fun fmt (case, typ) -> - Format.fprintf fmt "%a%a@ %a" format_enum_constructor case - format_punctuation ":" format_typ typ)) - (List.map - (fun (c, t) -> c, Marked.unmark t) - (EnumMap.find e ctx.ctx_enums)) - format_punctuation "]" - | TArrow (t1, t2) -> - Format.fprintf fmt "@[%a %a@ %a@]" format_typ_with_parens - (Marked.unmark t1) format_operator "→" format_typ (Marked.unmark t2) - | TArray t1 -> - Format.fprintf fmt "@[%a@ %a@]" format_base_type "array" format_typ - (Marked.unmark t1) - | TAny -> format_base_type fmt "any" - -(* (EmileRolley) NOTE: seems to be factorizable with Lcalc.Print.format_lit. *) -let format_lit (fmt : Format.formatter) (l : lit) : unit = - match l with - | LBool b -> format_lit_style fmt (string_of_bool b) - | LInt i -> format_lit_style fmt (Runtime.integer_to_string i) - | LEmptyError -> format_lit_style fmt "∅ " - | LUnit -> format_lit_style fmt "()" - | LRat i -> - format_lit_style fmt - (Runtime.decimal_to_string ~max_prec_digits:!Utils.Cli.max_prec_digits i) - | LMoney e -> ( - match !Utils.Cli.locale_lang with - | En -> - format_lit_style fmt (Format.asprintf "$%s" (Runtime.money_to_string e)) - | Fr -> - format_lit_style fmt (Format.asprintf "%s €" (Runtime.money_to_string e)) - | Pl -> - format_lit_style fmt - (Format.asprintf "%s PLN" (Runtime.money_to_string e))) - | LDate d -> format_lit_style fmt (Runtime.date_to_string d) - | LDuration d -> format_lit_style fmt (Runtime.duration_to_string d) - -let format_op_kind (fmt : Format.formatter) (k : op_kind) = - Format.fprintf fmt "%s" - (match k with - | KInt -> "" - | KRat -> "." - | KMoney -> "$" - | KDate -> "@" - | KDuration -> "^") - -let format_binop (fmt : Format.formatter) (op : binop) : unit = - format_operator fmt - (match op with - | Add k -> Format.asprintf "+%a" format_op_kind k - | Sub k -> Format.asprintf "-%a" format_op_kind k - | Mult k -> Format.asprintf "*%a" format_op_kind k - | Div k -> Format.asprintf "/%a" format_op_kind k - | And -> "&&" - | Or -> "||" - | Xor -> "xor" - | Eq -> "=" - | Neq -> "!=" - | Lt k -> Format.asprintf "%s%a" "<" format_op_kind k - | Lte k -> Format.asprintf "%s%a" "<=" format_op_kind k - | Gt k -> Format.asprintf "%s%a" ">" format_op_kind k - | Gte k -> Format.asprintf "%s%a" ">=" format_op_kind k - | Concat -> "++" - | Map -> "map" - | Filter -> "filter") - -let format_ternop (fmt : Format.formatter) (op : ternop) : unit = - match op with Fold -> format_keyword fmt "fold" - -let format_log_entry (fmt : Format.formatter) (entry : log_entry) : unit = - Format.fprintf fmt "@<2>%s" - (match entry with - | VarDef _ -> Utils.Cli.with_style [ANSITerminal.blue] "≔ " - | BeginCall -> Utils.Cli.with_style [ANSITerminal.yellow] "→ " - | EndCall -> Utils.Cli.with_style [ANSITerminal.yellow] "← " - | PosRecordIfTrueBool -> Utils.Cli.with_style [ANSITerminal.green] "☛ ") - -let format_unop (fmt : Format.formatter) (op : unop) : unit = - Format.fprintf fmt "%s" - (match op with - | Minus _ -> "-" - | Not -> "~" - | Log (entry, infos) -> - Format.asprintf "log@[[%a|%a]@]" format_log_entry entry - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ".") - (fun fmt info -> Utils.Uid.MarkedString.format_info fmt info)) - infos - | Length -> "length" - | IntToRat -> "int_to_rat" - | MoneyToRat -> "money_to_rat" - | RatToMoney -> "rat_to_money" - | GetDay -> "get_day" - | GetMonth -> "get_month" - | GetYear -> "get_year" - | FirstDayOfMonth -> "first_day_of_month" - | LastDayOfMonth -> "last_day_of_month" - | RoundMoney -> "round_money" - | RoundDecimal -> "round_decimal") - -let needs_parens (e : 'm marked_expr) : bool = - match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false - -let format_var fmt v = - Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) - -let rec format_expr - ?(debug : bool = false) - (ctx : decl_ctx) - (fmt : Format.formatter) - (e : 'm marked_expr) : unit = - let format_expr = format_expr ~debug ctx in - let format_with_parens (fmt : Format.formatter) (e : 'm marked_expr) = - if needs_parens e then - Format.fprintf fmt "%a%a%a" format_punctuation "(" format_expr e - format_punctuation ")" - else Format.fprintf fmt "%a" format_expr e - in - match Marked.unmark e with - | EVar v -> Format.fprintf fmt "%a" format_var v - | ETuple (es, None) -> - Format.fprintf fmt "@[%a%a%a@]" format_punctuation "(" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) - es format_punctuation ")" - | ETuple (es, Some s) -> - Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t s - format_punctuation "{" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "%a@ " format_punctuation ";") - (fun fmt (e, struct_field) -> - Format.fprintf fmt "%a%a%a%a@ %a" format_punctuation "\"" - StructFieldName.format_t struct_field format_punctuation "\"" - format_punctuation "=" format_expr e)) - (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) - format_punctuation "}" - | EArray es -> - Format.fprintf fmt "@[%a%a%a@]" format_punctuation "[" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") - (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) - es format_punctuation "]" - | ETupleAccess (e1, n, s, _ts) -> ( - match s with - | None -> - Format.fprintf fmt "%a%a%d" format_expr e1 format_punctuation "." n - | Some s -> - Format.fprintf fmt "%a%a%a%a%a" format_expr e1 format_operator "." - format_punctuation "\"" StructFieldName.format_t - (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) - format_punctuation "\"") - | EInj (e, n, en, _ts) -> - Format.fprintf fmt "@[%a@ %a@]" format_enum_constructor - (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) - format_expr e - | EMatch (e, es, e_name) -> - Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" format_keyword - "match" format_expr e format_keyword "with" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun fmt (e, c) -> - Format.fprintf fmt "@[%a %a%a@ %a@]" format_punctuation "|" - format_enum_constructor c format_punctuation ":" format_expr e)) - (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) - | ELit l -> format_lit fmt l - | EApp ((EAbs (binder, taus), _), args) -> - let xs, body = Bindlib.unmbind binder in - let xs_tau = - List.map2 (fun x tau -> x, Marked.unmark tau) (Array.to_list xs) taus - in - let xs_tau_arg = List.map2 (fun (x, tau) arg -> x, tau, arg) xs_tau args in - Format.fprintf fmt "%a%a" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "") - (fun fmt (x, tau, arg) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@]@\n" - format_keyword "let" format_var x format_punctuation ":" - (format_typ ctx) tau format_punctuation "=" format_expr arg - format_keyword "in")) - xs_tau_arg format_expr body - | EAbs (binder, taus) -> - let xs, body = Bindlib.unmbind binder in - let xs_tau = - List.map2 (fun x tau -> x, Marked.unmark tau) (Array.to_list xs) taus - in - Format.fprintf fmt "@[%a @[%a@] %a@ %a@]" format_punctuation - "λ" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") - (fun fmt (x, tau) -> - Format.fprintf fmt "%a%a%a %a%a" format_punctuation "(" format_var x - format_punctuation ":" (format_typ ctx) tau format_punctuation ")")) - xs_tau format_punctuation "→" format_expr body - | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_binop op - format_with_parens arg1 format_with_parens arg2 - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 - format_binop op format_with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> - format_expr fmt arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" format_unop op format_with_parens - arg1 - | EApp (f, args) -> - Format.fprintf fmt "@[%a@ %a@]" format_expr f - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") - format_with_parens) - args - | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" format_keyword "if" - format_expr e1 format_keyword "then" format_expr e2 format_keyword "else" - format_expr e3 - | EOp (Ternop op) -> Format.fprintf fmt "%a" format_ternop op - | EOp (Binop op) -> Format.fprintf fmt "%a" format_binop op - | EOp (Unop op) -> Format.fprintf fmt "%a" format_unop op - | EDefault (exceptions, just, cons) -> - if List.length exceptions = 0 then - Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" format_punctuation "⟨" - format_expr just format_punctuation "⊢" format_expr cons - format_punctuation "⟩" - else - Format.fprintf fmt "@[%a%a@ %a@ %a@ %a@ %a%a@]" format_punctuation - "⟨" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "%a@ " format_punctuation ",") - format_expr) - exceptions format_punctuation "|" format_expr just format_punctuation - "⊢" format_expr cons format_punctuation "⟩" - | ErrorOnEmpty e' -> - Format.fprintf fmt "%a@ %a" format_operator "error_empty" format_with_parens - e' - | EAssert e' -> - Format.fprintf fmt "@[%a@ %a%a%a@]" format_keyword "assert" - format_punctuation "(" format_expr e' format_punctuation ")" - -let format_scope - ?(debug : bool = false) - (ctx : decl_ctx) - (fmt : Format.formatter) - ((n, s) : ScopeName.t * 'm scope_body) = - Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" - ScopeName.format_t n (format_expr ctx ~debug) - (Bindlib.unbox - (Scope.to_expr ctx s - (Expr.map_mark - (fun _ -> Marked.get_mark (ScopeName.get_info n)) - (fun ty -> ty) - (Scope.get_body_mark s)))) diff --git a/compiler/dcalc/print.mli b/compiler/dcalc/print.mli deleted file mode 100644 index 30fb052e..00000000 --- a/compiler/dcalc/print.mli +++ /dev/null @@ -1,56 +0,0 @@ -(* This file is part of the Catala compiler, a specification language for tax - and social benefits computation rules. Copyright (C) 2020 Inria, contributor: - Denis Merigoux - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy of - the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. *) - -(** Printing functions for the default calculus AST *) - -open Utils -open Shared_ast - -(** {1 Common syntax highlighting helpers}*) - -val format_base_type : Format.formatter -> string -> unit -val format_keyword : Format.formatter -> string -> unit -val format_punctuation : Format.formatter -> string -> unit -val format_operator : Format.formatter -> string -> unit -val format_lit_style : Format.formatter -> string -> unit - -(** {1 Formatters} *) - -val format_uid_list : Format.formatter -> Uid.MarkedString.info list -> unit -val format_enum_constructor : Format.formatter -> EnumConstructor.t -> unit -val format_tlit : Format.formatter -> typ_lit -> unit -val format_typ : decl_ctx -> Format.formatter -> typ -> unit -val format_lit : Format.formatter -> Ast.lit -> unit -val format_op_kind : Format.formatter -> op_kind -> unit -val format_binop : Format.formatter -> binop -> unit -val format_ternop : Format.formatter -> ternop -> unit -val format_log_entry : Format.formatter -> log_entry -> unit -val format_unop : Format.formatter -> unop -> unit -val format_var : Format.formatter -> 'e Var.t -> unit - -val format_expr : - ?debug:bool (** [true] for debug printing *) -> - decl_ctx -> - Format.formatter -> - 'm Ast.marked_expr -> - unit - -val format_scope : - ?debug:bool (** [true] for debug printing *) -> - decl_ctx -> - Format.formatter -> - ScopeName.t * 'm Ast.expr scope_body -> - unit diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 9945eece..f2751b3a 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -25,6 +25,7 @@ module Any = (struct type info = unit + let to_string _ = "any" let format_info fmt () = Format.fprintf fmt "any" end) () @@ -83,7 +84,7 @@ let rec format_typ in let typ = UnionFind.get (UnionFind.find typ) in match Marked.unmark typ with - | TLit l -> Format.fprintf fmt "%a" Print.format_tlit l + | TLit l -> Format.fprintf fmt "%a" A.Print.tlit l | TTuple (ts, None) -> Format.fprintf fmt "@[(%a)]" (Format.pp_print_list @@ -293,8 +294,8 @@ let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) (env : 'm Ast.expr env) (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = - (* Cli.debug_format "Looking for type of %a" (Print.format_expr ~debug:true - ctx) e; *) + (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) + e; *) let pos_e = A.Expr.pos e in let mark (e : (A.dcalc, mark) A.gexpr) uf = Marked.mark { uf; pos = pos_e } e @@ -451,7 +452,7 @@ and typecheck_expr_top_down (tau : typ Marked.pos UnionFind.elem) (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau - (Print.format_expr ctx) e; *) + (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in let unify_and_mark (e' : (A.dcalc, mark) A.gexpr) tau' = diff --git a/compiler/driver.ml b/compiler/driver.ml index 38a26b18..fc3a2911 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -197,7 +197,7 @@ let driver source_file (options : Cli.options) : int = @@ fun fmt -> if Option.is_some options.ex_scope then Format.fprintf fmt "%a\n" - (Dcalc.Print.format_scope ~debug:options.debug prgm.decl_ctx) + (Shared_ast.Scope.format ~debug:options.debug prgm.decl_ctx) ( scope_uid, Option.get (Shared_ast.Scope.fold_left ~init:None @@ -214,14 +214,14 @@ let driver source_file (options : Cli.options) : int = Bindlib.unbox (Shared_ast.Program.to_expr prgm scope_uid) in Format.fprintf fmt "%a\n" - (Dcalc.Print.format_expr prgm.decl_ctx) + (Shared_ast.Expr.format prgm.decl_ctx) prgrm_dcalc_expr | ( `Interpret | `Typecheck | `OCaml | `Python | `Scalc | `Lcalc | `Proof | `Plugin _ ) as backend -> ( Cli.debug_print "Typechecking..."; let prgm = Dcalc.Typing.infer_types_program prgm in (* Cli.debug_print (Format.asprintf "Typechecking results :@\n%a" - (Dcalc.Print.format_typ prgm.decl_ctx) typ); *) + (Print.typ prgm.decl_ctx) typ); *) match backend with | `Typecheck -> (* That's it! *) @@ -264,7 +264,7 @@ let driver source_file (options : Cli.options) : int = List.iter (fun ((var, _), result) -> Cli.result_format "@[%s@ =@ %a@]" var - (Dcalc.Print.format_expr ~debug:options.debug prgm.decl_ctx) + (Shared_ast.Expr.format ~debug:options.debug prgm.decl_ctx) result) results | (`OCaml | `Python | `Lcalc | `Scalc | `Plugin _) as backend -> ( @@ -296,7 +296,7 @@ let driver source_file (options : Cli.options) : int = @@ fun fmt -> if Option.is_some options.ex_scope then Format.fprintf fmt "%a\n" - (Lcalc.Print.format_scope ~debug:options.debug prgm.decl_ctx) + (Shared_ast.Scope.format ~debug:options.debug prgm.decl_ctx) ( scope_uid, Option.get (Shared_ast.Scope.fold_left ~init:None @@ -313,7 +313,7 @@ let driver source_file (options : Cli.options) : int = Bindlib.unbox (Shared_ast.Program.to_expr prgm scope_uid) in Format.fprintf fmt "%a\n" - (Lcalc.Print.format_expr prgm.decl_ctx) + (Shared_ast.Expr.format prgm.decl_ctx) prgrm_lcalc_expr | (`OCaml | `Python | `Scalc | `Plugin _) as backend -> ( match backend with diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index c13b2647..6f8eb26d 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -57,8 +57,7 @@ type 'm info = { matched (false) or if it never can be EmptyError (true). *) let pp_info (fmt : Format.formatter) (info : 'm info) = - Format.fprintf fmt "{var: %a; is_pure: %b}" Print.format_var info.var - info.is_pure + Format.fprintf fmt "{var: %a; is_pure: %b}" Print.var info.var info.is_pure type 'm ctx = { decl_ctx : decl_ctx; @@ -70,7 +69,7 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = let pp_binding (fmt : Format.formatter) ((v, info) : 'm D.expr Var.t * 'm info) = - Format.fprintf fmt "%a: %a" Dcalc.Print.format_var v pp_info info + Format.fprintf fmt "%a: %a" Print.var v pp_info info in let pp_bindings = @@ -86,13 +85,13 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : 'm info = (* let _ = Format.asprintf "Searching for variable %a inside context %a" - Dcalc.Print.format_var n pp_ctx ctx |> Cli.debug_print in *) + Print.var n pp_ctx ctx |> Cli.debug_print in *) try Var.Map.find n ctx.vars with Not_found -> Errors.raise_spanned_error Pos.no_pos "Internal Error: Variable %a was not found in the current environment. \ Additional informations : %s." - Dcalc.Print.format_var n info + Print.var n info (** [add_var pos var is_pure ctx] add to the context [ctx] the Dcalc variable var, creating a unique corresponding variable in Lcalc, with the @@ -106,8 +105,8 @@ let add_var let new_var = Var.make (Bindlib.name_of var) in let expr = A.make_var (new_var, mark) in - (* Cli.debug_print @@ Format.asprintf "D.%a |-> A.%a" Dcalc.Print.format_var - var Print.format_var new_var; *) + (* Cli.debug_print @@ Format.asprintf "D.%a |-> A.%a" Print.var var Print.var + new_var; *) { ctx with vars = @@ -185,16 +184,14 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, - created a variable %a to replace it" Dcalc.Print.format_var v - Print.format_var v'; *) + created a variable %a to replace it" Print.var v Print.var v'; *) A.make_var (v', pos), Var.Map.singleton v' e else (find ~info:"should never happend" v ctx).expr, Var.Map.empty | EApp ((EVar v, p), [(ELit LUnit, _)]) -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, - created a variable %a to replace it" Dcalc.Print.format_var v - Print.format_var v'; *) + created a variable %a to replace it" Print.var v Print.var v'; *) A.make_var (v', pos), Var.Map.singleton v' (EVar v, p) else Errors.raise_spanned_error (Expr.pos e) @@ -311,12 +308,11 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (* build the hoists *) (* Cli.debug_print @@ Format.asprintf "hoist for the expression: [%a]" - (Format.pp_print_list Print.format_var) (List.map fst hoists); *) + (Format.pp_print_list Print.var) (List.map fst hoists); *) ListLabels.fold_left hoists ~init:(if append_esome then A.make_some e' else e') ~f:(fun acc (v, (hoist, mark_hoist)) -> - (* Cli.debug_print @@ Format.asprintf "hoist using A.%a" Print.format_var - v; *) + (* Cli.debug_print @@ Format.asprintf "hoist using A.%a" Print.var v; *) let c' : 'm A.marked_expr Bindlib.box = match hoist with (* Here we have to handle only the cases appearing in hoists, as defined @@ -365,8 +361,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (* [ match {{ c' }} with | None -> None | Some {{ v }} -> {{ acc }} end ] *) - (* Cli.debug_print @@ Format.asprintf "build matchopt using %a" - Print.format_var v; *) + (* Cli.debug_print @@ Format.asprintf "build matchopt using %a" Print.var + v; *) A.make_matchopt mark_hoist v (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) @@ -392,8 +388,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : let var_is_pure = true in let var, next = Bindlib.unbind next in - (* Cli.debug_print @@ Format.asprintf "unbinding %a" Dcalc.Print.format_var - var; *) + (* Cli.debug_print @@ Format.asprintf "unbinding %a" Print.var var; *) let vmark = Expr.map_mark (fun _ -> pos) (fun _ -> typ) emark in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in @@ -421,8 +416,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : (* special case: regular input to the subscope *) let var_is_pure = true in let var, next = Bindlib.unbind next in - (* Cli.debug_print @@ Format.asprintf "unbinding %a" Dcalc.Print.format_var - var; *) + (* Cli.debug_print @@ Format.asprintf "unbinding %a" Print.var var; *) let vmark = Expr.map_mark (fun _ -> pos) (fun _ -> typ) emark in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in @@ -449,8 +443,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : "Internal Error: found an SubScopeVarDefinition that does not satisfy \ the invariants when translating Dcalc to Lcalc without exceptions: \ @[%a@]" - (Dcalc.Print.format_expr ctx.decl_ctx) - expr + (Expr.format ctx.decl_ctx) expr | ScopeLet { scope_let_kind = kind; @@ -474,8 +467,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : true in let var, next = Bindlib.unbind next in - (* Cli.debug_print @@ Format.asprintf "unbinding %a" Dcalc.Print.format_var - var; *) + (* Cli.debug_print @@ Format.asprintf "unbinding %a" Print.var var; *) let vmark = Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark expr) in @@ -575,10 +567,9 @@ let translate_program (prgm : 'm D.program) : 'm A.program = if List.mem n inputs_structs then ListLabels.map l ~f:(fun (n, tau) -> (* Cli.debug_print @@ Format.asprintf "Input type: %a" - (Dcalc.Print.format_typ decl_ctx) tau; Cli.debug_print - @@ Format.asprintf "Output type: %a" - (Dcalc.Print.format_typ decl_ctx) (translate_typ - tau); *) + (Print.typ decl_ctx) tau; Cli.debug_print @@ + Format.asprintf "Output type: %a" (Print.typ decl_ctx) + (translate_typ tau); *) n, translate_typ tau) else l); } diff --git a/compiler/lcalc/print.ml b/compiler/lcalc/print.ml deleted file mode 100644 index c204c666..00000000 --- a/compiler/lcalc/print.ml +++ /dev/null @@ -1,195 +0,0 @@ -(* This file is part of the Catala compiler, a specification language for tax - and social benefits computation rules. Copyright (C) 2020 Inria, contributor: - Denis Merigoux - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy of - the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. *) - -open Utils -open Shared_ast -open Ast - -(** {b Note:} (EmileRolley) seems to be factorizable with - Dcalc.Print.format_lit. *) -let format_lit (fmt : Format.formatter) (l : lit Marked.pos) : unit = - match Marked.unmark l with - | LBool b -> Dcalc.Print.format_lit_style fmt (string_of_bool b) - | LInt i -> Dcalc.Print.format_lit_style fmt (Runtime.integer_to_string i) - | LUnit -> Dcalc.Print.format_lit_style fmt "()" - | LRat i -> - Dcalc.Print.format_lit_style fmt - (Runtime.decimal_to_string ~max_prec_digits:!Utils.Cli.max_prec_digits i) - | LMoney e -> ( - match !Utils.Cli.locale_lang with - | En -> - Dcalc.Print.format_lit_style fmt - (Format.asprintf "$%s" (Runtime.money_to_string e)) - | Fr -> - Dcalc.Print.format_lit_style fmt - (Format.asprintf "%s €" (Runtime.money_to_string e)) - | Pl -> - Dcalc.Print.format_lit_style fmt - (Format.asprintf "%s PLN" (Runtime.money_to_string e))) - | LDate d -> Dcalc.Print.format_lit_style fmt (Runtime.date_to_string d) - | LDuration d -> - Dcalc.Print.format_lit_style fmt (Runtime.duration_to_string d) - -let format_exception (fmt : Format.formatter) (exn : except) : unit = - Dcalc.Print.format_operator fmt - (match exn with - | EmptyError -> "EmptyError" - | ConflictError -> "ConflictError" - | Crash -> "Crash" - | NoValueProvided -> "NoValueProvided") - -let format_keyword (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.red]) s - -let format_punctuation (fmt : Format.formatter) (s : string) : unit = - Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.cyan]) s - -let needs_parens (e : 'm marked_expr) : bool = - match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false - -let format_var (fmt : Format.formatter) (v : 'm Ast.var) : unit = - Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) - -let rec format_expr - ?(debug : bool = false) - (ctx : decl_ctx) - (fmt : Format.formatter) - (e : 'm marked_expr) : unit = - let format_expr = format_expr ctx ~debug in - let format_with_parens (fmt : Format.formatter) (e : 'm marked_expr) = - if needs_parens e then - Format.fprintf fmt "%a%a%a" format_punctuation "(" format_expr e - format_punctuation ")" - else Format.fprintf fmt "%a" format_expr e - in - match Marked.unmark e with - | EVar v -> Format.fprintf fmt "%a" format_var v - | ETuple (es, None) -> - Format.fprintf fmt "@[%a%a%a@]" format_punctuation "(" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) - es format_punctuation ")" - | ETuple (es, Some s) -> - Format.fprintf fmt "@[%a@ %a%a%a@]" StructName.format_t s - format_punctuation "{" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt (e, struct_field) -> - Format.fprintf fmt "%a%a%a%a %a" format_punctuation "\"" - StructFieldName.format_t struct_field format_punctuation "\"" - format_punctuation ":" format_expr e)) - (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) - format_punctuation "}" - | EArray es -> - Format.fprintf fmt "@[%a%a%a@]" format_punctuation "[" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") - (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) - es format_punctuation "]" - | ETupleAccess (e1, n, s, _ts) -> ( - match s with - | None -> - Format.fprintf fmt "%a%a%d" format_expr e1 format_punctuation "." n - | Some s -> - Format.fprintf fmt "%a%a%a%a%a" format_expr e1 format_punctuation "." - format_punctuation "\"" StructFieldName.format_t - (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) - format_punctuation "\"") - | EInj (e, n, en, _ts) -> - Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_enum_constructor - (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) - format_expr e - | EMatch (e, es, e_name) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@]" format_keyword "match" - format_expr e format_keyword "with" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun fmt (e, c) -> - Format.fprintf fmt "@[%a %a%a@ %a@]" format_punctuation "|" - Dcalc.Print.format_enum_constructor c format_punctuation ":" - format_expr e)) - (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) - | ELit l -> Format.fprintf fmt "%a" format_lit (Marked.mark (Expr.pos e) l) - | EApp ((EAbs (binder, taus), _), args) -> - let xs, body = Bindlib.unmbind binder in - Format.fprintf fmt "%a%a" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "") - (fun fmt ((x, tau), arg) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@]@\n" - format_keyword "let" format_var x format_punctuation ":" - (Dcalc.Print.format_typ ctx) - (Marked.unmark tau) format_punctuation "=" format_expr arg - format_keyword "in")) - (List.combine (List.combine (Array.to_list xs) taus) args) - format_expr body - | EAbs (binder, taus) -> - let xs, body = Bindlib.unmbind binder in - Format.fprintf fmt "@[%a %a %a@ %a@]" format_punctuation "λ" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") - (fun fmt (x, tau) -> - Format.fprintf fmt "%a%a%a %a%a" format_punctuation "(" format_var x - format_punctuation ":" - (Dcalc.Print.format_typ ctx) - (Marked.unmark tau) format_punctuation ")")) - (List.combine (Array.to_list xs) taus) - format_punctuation "→" format_expr body - | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" Dcalc.Print.format_binop op - format_with_parens arg1 format_with_parens arg2 - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 - Dcalc.Print.format_binop op format_with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> - Format.fprintf fmt "%a" format_with_parens arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_unop op - format_with_parens arg1 - | EApp (f, args) -> - Format.fprintf fmt "@[%a@ %a@]" format_expr f - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") - format_with_parens) - args - | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" format_keyword "if" - format_expr e1 format_keyword "then" format_expr e2 format_keyword "else" - format_expr e3 - | EOp (Ternop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_ternop op - | EOp (Binop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_binop op - | EOp (Unop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_unop op - | ECatch (e1, exn, e2) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a ->@ %a@]" format_keyword "try" - format_with_parens e1 format_keyword "with" format_exception exn - format_with_parens e2 - | ERaise exn -> - Format.fprintf fmt "@[%a@ %a@]" format_keyword "raise" - format_exception exn - | EAssert e' -> - Format.fprintf fmt "@[%a@ %a%a%a@]" format_keyword "assert" - format_punctuation "(" format_expr e' format_punctuation ")" - -let format_scope ?(debug = false) ctx fmt (n, s) = - Format.fprintf fmt "@[%a %a =@ %a@]" format_keyword "let" - ScopeName.format_t n (format_expr ctx ~debug) - (Bindlib.unbox - (Scope.to_expr ctx s - (Expr.map_mark - (fun _ -> Marked.get_mark (ScopeName.get_info n)) - (fun ty -> ty) - (Scope.get_body_mark s)))) diff --git a/compiler/lcalc/print.mli b/compiler/lcalc/print.mli deleted file mode 100644 index 6027217c..00000000 --- a/compiler/lcalc/print.mli +++ /dev/null @@ -1,34 +0,0 @@ -(* This file is part of the Catala compiler, a specification language for tax - and social benefits computation rules. Copyright (C) 2020 Inria, contributor: - Denis Merigoux - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy of - the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. *) - -open Utils -open Shared_ast - -(** {1 Formatters} *) - -val format_lit : Format.formatter -> Ast.lit Marked.pos -> unit -val format_var : Format.formatter -> 'm Ast.var -> unit -val format_exception : Format.formatter -> except -> unit - -val format_expr : - ?debug:bool -> decl_ctx -> Format.formatter -> 'm Ast.marked_expr -> unit - -val format_scope : - ?debug:bool -> - decl_ctx -> - Format.formatter -> - ScopeName.t * 'm Ast.expr scope_body -> - unit diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index 81cf78b0..469d06a8 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -40,13 +40,11 @@ let find_enum (en : EnumName.t) (ctx : decl_ctx) : let format_lit (fmt : Format.formatter) (l : lit Marked.pos) : unit = match Marked.unmark l with - | LBool b -> Dcalc.Print.format_lit fmt (LBool b) + | LBool b -> Print.lit fmt (LBool b) | LInt i -> Format.fprintf fmt "integer_of_string@ \"%s\"" (Runtime.integer_to_string i) - | LUnit -> Dcalc.Print.format_lit fmt LUnit - | LRat i -> - Format.fprintf fmt "decimal_of_string \"%a\"" Dcalc.Print.format_lit - (LRat i) + | LUnit -> Print.lit fmt LUnit + | LRat i -> Format.fprintf fmt "decimal_of_string \"%a\"" Print.lit (LRat i) | LMoney e -> Format.fprintf fmt "money_of_cents_string@ \"%s\"" (Runtime.integer_to_string (Runtime.money_to_cents e)) @@ -210,7 +208,7 @@ let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = else Format.fprintf fmt "%a" format_typ t in match Marked.unmark typ with - | TLit l -> Format.fprintf fmt "%a" Dcalc.Print.format_tlit l + | TLit l -> Format.fprintf fmt "%a" Print.tlit l | TTuple (ts, None) -> Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index 9e81801e..c251ebde 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -51,7 +51,7 @@ module To_jsoo = struct Format.fprintf fmt "%s" s let format_tlit (fmt : Format.formatter) (l : typ_lit) : unit = - Dcalc.Print.format_base_type fmt + Print.base_type fmt (match l with | TUnit -> "unit" | TInt -> "int" diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 24b73474..23e0e1f2 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -32,8 +32,8 @@ let rec format_expr let format_expr = format_expr decl_ctx ~debug in let format_with_parens (fmt : Format.formatter) (e : expr Marked.pos) = if needs_parens e then - Format.fprintf fmt "%a%a%a" Dcalc.Print.format_punctuation "(" format_expr - e Dcalc.Print.format_punctuation ")" + Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_expr e + Print.punctuation ")" else Format.fprintf fmt "%a" format_expr e in match Marked.unmark e with @@ -41,60 +41,56 @@ let rec format_expr | EFunc v -> Format.fprintf fmt "%a" TopLevelName.format_t v | EStruct (es, s) -> Format.fprintf fmt "@[%a@ %a%a%a@]" StructName.format_t s - Dcalc.Print.format_punctuation "{" + Print.punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") (fun fmt (e, struct_field) -> - Format.fprintf fmt "%a%a%a%a %a" Dcalc.Print.format_punctuation "\"" - StructFieldName.format_t struct_field - Dcalc.Print.format_punctuation "\"" Dcalc.Print.format_punctuation - ":" format_expr e)) + Format.fprintf fmt "%a%a%a%a %a" Print.punctuation "\"" + StructFieldName.format_t struct_field Print.punctuation "\"" + Print.punctuation ":" format_expr e)) (List.combine es (List.map fst (StructMap.find s decl_ctx.ctx_structs))) - Dcalc.Print.format_punctuation "}" + Print.punctuation "}" | EArray es -> - Format.fprintf fmt "@[%a%a%a@]" Dcalc.Print.format_punctuation "[" + Format.fprintf fmt "@[%a%a%a@]" Print.punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") (fun fmt e -> Format.fprintf fmt "%a" format_expr e)) - es Dcalc.Print.format_punctuation "]" + es Print.punctuation "]" | EStructFieldAccess (e1, field, s) -> - Format.fprintf fmt "%a%a%a%a%a" format_expr e1 - Dcalc.Print.format_punctuation "." Dcalc.Print.format_punctuation "\"" - StructFieldName.format_t + Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Print.punctuation "." + Print.punctuation "\"" StructFieldName.format_t (fst (List.find (fun (field', _) -> StructFieldName.compare field' field = 0) (StructMap.find s decl_ctx.ctx_structs))) - Dcalc.Print.format_punctuation "\"" + Print.punctuation "\"" | EInj (e, case, enum) -> - Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_enum_constructor + Format.fprintf fmt "@[%a@ %a@]" Print.enum_constructor (fst (List.find (fun (case', _) -> EnumConstructor.compare case' case = 0) (EnumMap.find enum decl_ctx.ctx_enums))) format_expr e - | ELit l -> - Format.fprintf fmt "%a" Lcalc.Print.format_lit (Marked.same_mark_as l e) + | ELit l -> Print.lit fmt l | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" Dcalc.Print.format_binop op - format_with_parens arg1 format_with_parens arg2 + Format.fprintf fmt "@[%a@ %a@ %a@]" Print.binop op format_with_parens + arg1 format_with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 - Dcalc.Print.format_binop op format_with_parens arg2 + Print.binop op format_with_parens arg2 | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> Format.fprintf fmt "%a" format_with_parens arg1 | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_unop op - format_with_parens arg1 + Format.fprintf fmt "@[%a@ %a@]" Print.unop op format_with_parens arg1 | EApp (f, args) -> Format.fprintf fmt "@[%a@ %a@]" format_expr f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") format_with_parens) args - | EOp (Ternop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_ternop op - | EOp (Binop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_binop op - | EOp (Unop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_unop op + | EOp (Ternop op) -> Format.fprintf fmt "%a" Print.ternop op + | EOp (Binop op) -> Format.fprintf fmt "%a" Print.binop op + | EOp (Unop op) -> Format.fprintf fmt "%a" Print.unop op let rec format_statement (decl_ctx : decl_ctx) @@ -104,71 +100,63 @@ let rec format_statement if debug then () else (); match Marked.unmark stmt with | SInnerFuncDef (name, func) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@]@\n@[ %a@]" - Dcalc.Print.format_keyword "let" LocalName.format_t (Marked.unmark name) + Format.fprintf fmt "@[%a@ %a@ %a@ %a@]@\n@[ %a@]" Print.keyword + "let" LocalName.format_t (Marked.unmark name) (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") (fun fmt ((name, _), typ) -> - Format.fprintf fmt "%a%a %a@ %a%a" Dcalc.Print.format_punctuation "(" - LocalName.format_t name Dcalc.Print.format_punctuation ":" - (Dcalc.Print.format_typ decl_ctx) - (Marked.unmark typ) Dcalc.Print.format_punctuation ")")) - func.func_params Dcalc.Print.format_punctuation "=" + Format.fprintf fmt "%a%a %a@ %a%a" Print.punctuation "(" + LocalName.format_t name Print.punctuation ":" (Print.typ decl_ctx) + (Marked.unmark typ) Print.punctuation ")")) + func.func_params Print.punctuation "=" (format_block decl_ctx ~debug) func.func_body | SLocalDecl (name, typ) -> - Format.fprintf fmt "@[%a %a %a@ %a@]" Dcalc.Print.format_keyword - "decl" LocalName.format_t (Marked.unmark name) - Dcalc.Print.format_punctuation ":" - (Dcalc.Print.format_typ decl_ctx) - (Marked.unmark typ) + Format.fprintf fmt "@[%a %a %a@ %a@]" Print.keyword "decl" + LocalName.format_t (Marked.unmark name) Print.punctuation ":" + (Print.typ decl_ctx) (Marked.unmark typ) | SLocalDef (name, expr) -> Format.fprintf fmt "@[%a %a@ %a@]" LocalName.format_t - (Marked.unmark name) Dcalc.Print.format_punctuation "=" + (Marked.unmark name) Print.punctuation "=" (format_expr decl_ctx ~debug) expr | STryExcept (b_try, except, b_with) -> - Format.fprintf fmt "@[%a%a@ %a@]@\n@[%a %a%a@ %a@]" - Dcalc.Print.format_keyword "try" Dcalc.Print.format_punctuation ":" + Format.fprintf fmt "@[%a%a@ %a@]@\n@[%a %a%a@ %a@]" Print.keyword + "try" Print.punctuation ":" (format_block decl_ctx ~debug) - b_try Dcalc.Print.format_keyword "with" Lcalc.Print.format_exception - except Dcalc.Print.format_punctuation ":" + b_try Print.keyword "with" Print.except except Print.punctuation ":" (format_block decl_ctx ~debug) b_with | SRaise except -> - Format.fprintf fmt "@[%a %a@]" Dcalc.Print.format_keyword "raise" - Lcalc.Print.format_exception except + Format.fprintf fmt "@[%a %a@]" Print.keyword "raise" Print.except + except | SIfThenElse (e_if, b_true, b_false) -> Format.fprintf fmt "@[%a @[%a@]%a@ %a@ @]@[%a%a@ %a@]" - Dcalc.Print.format_keyword "if" + Print.keyword "if" (format_expr decl_ctx ~debug) - e_if Dcalc.Print.format_punctuation ":" + e_if Print.punctuation ":" (format_block decl_ctx ~debug) - b_true Dcalc.Print.format_keyword "else" Dcalc.Print.format_punctuation - ":" + b_true Print.keyword "else" Print.punctuation ":" (format_block decl_ctx ~debug) b_false | SReturn ret -> - Format.fprintf fmt "@[%a %a@]" Dcalc.Print.format_keyword "return" + Format.fprintf fmt "@[%a %a@]" Print.keyword "return" (format_expr decl_ctx ~debug) (ret, Marked.get_mark stmt) | SAssert expr -> - Format.fprintf fmt "@[%a %a@]" Dcalc.Print.format_keyword "assert" + Format.fprintf fmt "@[%a %a@]" Print.keyword "assert" (format_expr decl_ctx ~debug) (expr, Marked.get_mark stmt) | SSwitch (e_switch, enum, arms) -> - Format.fprintf fmt "@[%a @[%a@]%a@]%a" - Dcalc.Print.format_keyword "switch" + Format.fprintf fmt "@[%a @[%a@]%a@]%a" Print.keyword "switch" (format_expr decl_ctx ~debug) - e_switch Dcalc.Print.format_punctuation ":" + e_switch Print.punctuation ":" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt ((case, _), (arm_block, payload_name)) -> - Format.fprintf fmt "%a %a%a@ %a @[%a@ %a@]" - Dcalc.Print.format_punctuation "|" - Dcalc.Print.format_enum_constructor case - Dcalc.Print.format_punctuation ":" LocalName.format_t payload_name - Dcalc.Print.format_punctuation "→" + Format.fprintf fmt "%a %a%a@ %a @[%a@ %a@]" Print.punctuation + "|" Print.enum_constructor case Print.punctuation ":" + LocalName.format_t payload_name Print.punctuation "→" (format_block decl_ctx ~debug) arm_block)) (List.combine (EnumMap.find enum decl_ctx.ctx_enums) arms) @@ -179,8 +167,7 @@ and format_block (fmt : Format.formatter) (block : block) : unit = Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "%a@ " Dcalc.Print.format_punctuation ";") + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " Print.punctuation ";") (format_statement decl_ctx ~debug) fmt block @@ -190,15 +177,14 @@ let format_scope (fmt : Format.formatter) (body : scope_body) : unit = if debug then () else (); - Format.fprintf fmt "@[%a@ %a@ %a@ %a@]@\n@[ %a@]" - Dcalc.Print.format_keyword "let" TopLevelName.format_t body.scope_body_var + Format.fprintf fmt "@[%a@ %a@ %a@ %a@]@\n@[ %a@]" Print.keyword + "let" TopLevelName.format_t body.scope_body_var (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") (fun fmt ((name, _), typ) -> - Format.fprintf fmt "%a%a %a@ %a%a" Dcalc.Print.format_punctuation "(" - LocalName.format_t name Dcalc.Print.format_punctuation ":" - (Dcalc.Print.format_typ decl_ctx) - (Marked.unmark typ) Dcalc.Print.format_punctuation ")")) - body.scope_body_func.func_params Dcalc.Print.format_punctuation "=" + Format.fprintf fmt "%a%a %a@ %a%a" Print.punctuation "(" + LocalName.format_t name Print.punctuation ":" (Print.typ decl_ctx) + (Marked.unmark typ) Print.punctuation ")")) + body.scope_body_func.func_params Print.punctuation "=" (format_block decl_ctx ~debug) body.scope_body_func.func_body diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index af9f6be5..ae5e68a0 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -30,9 +30,7 @@ let format_lit (fmt : Format.formatter) (l : L.lit Marked.pos) : unit = | LInt i -> Format.fprintf fmt "integer_of_string(\"%s\")" (Runtime.integer_to_string i) | LUnit -> Format.fprintf fmt "Unit()" - | LRat i -> - Format.fprintf fmt "decimal_of_string(\"%a\")" Dcalc.Print.format_lit - (LRat i) + | LRat i -> Format.fprintf fmt "decimal_of_string(\"%a\")" Print.lit (LRat i) | LMoney e -> Format.fprintf fmt "money_of_cents_string(\"%s\")" (Runtime.integer_to_string (Runtime.money_to_cents e)) diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 7328caf0..1fc92620 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -37,21 +37,21 @@ let typ_needs_parens (e : typ Marked.pos) : bool = let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = if typ_needs_parens t then - Format.fprintf fmt "%a%a%a" Dcalc.Print.format_punctuation "(" format_typ - t Dcalc.Print.format_punctuation ")" + Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_typ t + Print.punctuation ")" else Format.fprintf fmt "%a" format_typ t in match Marked.unmark typ with - | TLit l -> Dcalc.Print.format_tlit fmt l + | TLit l -> Print.tlit fmt l | TStruct s -> Format.fprintf fmt "%a" StructName.format_t s | TEnum e -> Format.fprintf fmt "%a" EnumName.format_t e | TArrow (t1, t2) -> Format.fprintf fmt "@[%a %a@ %a@]" format_typ_with_parens t1 - Dcalc.Print.format_operator "→" format_typ t2 + Print.operator "→" format_typ t2 | TArray t1 -> Format.fprintf fmt "@[%a@ %a@]" format_typ (Marked.same_mark_as t1 typ) - Dcalc.Print.format_base_type "array" + Print.base_type "array" | TAny -> Format.fprintf fmt "any" let rec format_expr @@ -66,36 +66,33 @@ let rec format_expr match Marked.unmark e with | ELocation l -> Format.fprintf fmt "%a" format_location l | EVar v -> Format.fprintf fmt "%a" format_var v - | ELit l -> Format.fprintf fmt "%a" Dcalc.Print.format_lit l + | ELit l -> Format.fprintf fmt "%a" Print.lit l | EStruct (name, fields) -> Format.fprintf fmt " @[%a@ %a@ %a@ %a@]" StructName.format_t name - Dcalc.Print.format_punctuation "{" + Print.punctuation "{" (Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "%a@ " Dcalc.Print.format_punctuation ";") + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " Print.punctuation ";") (fun fmt (field_name, field_expr) -> - Format.fprintf fmt "%a%a%a%a@ %a" Dcalc.Print.format_punctuation "\"" - StructFieldName.format_t field_name Dcalc.Print.format_punctuation - "\"" Dcalc.Print.format_punctuation "=" format_expr field_expr)) + Format.fprintf fmt "%a%a%a%a@ %a" Print.punctuation "\"" + StructFieldName.format_t field_name Print.punctuation "\"" + Print.punctuation "=" format_expr field_expr)) (Ast.StructFieldMap.bindings fields) - Dcalc.Print.format_punctuation "}" + Print.punctuation "}" | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" format_expr e1 - Dcalc.Print.format_punctuation "." Dcalc.Print.format_punctuation "\"" - StructFieldName.format_t field Dcalc.Print.format_punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Print.punctuation "." + Print.punctuation "\"" StructFieldName.format_t field Print.punctuation + "\"" | EEnumInj (e1, cons, _) -> Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons format_expr e1 | EMatch (e1, _, cases) -> - Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" - Dcalc.Print.format_keyword "match" format_expr e1 - Dcalc.Print.format_keyword "with" + Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" Print.keyword + "match" format_expr e1 Print.keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cons_name, case_expr) -> - Format.fprintf fmt "@[%a %a@ %a@ %a@]" - Dcalc.Print.format_punctuation "|" - Dcalc.Print.format_enum_constructor cons_name - Dcalc.Print.format_punctuation "→" format_expr case_expr)) + Format.fprintf fmt "@[%a %a@ %a@ %a@]" Print.punctuation "|" + Print.enum_constructor cons_name Print.punctuation "→" format_expr + case_expr)) (Ast.EnumConstructorMap.bindings cases) | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in @@ -106,31 +103,27 @@ let rec format_expr ~pp_sep:(fun fmt () -> Format.fprintf fmt " ") (fun fmt (x, tau, arg) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@\n@]" - Dcalc.Print.format_keyword "let" format_var x - Dcalc.Print.format_punctuation ":" format_typ tau - Dcalc.Print.format_punctuation "=" format_expr arg - Dcalc.Print.format_keyword "in")) + Print.keyword "let" format_var x Print.punctuation ":" format_typ + tau Print.punctuation "=" format_expr arg Print.keyword "in")) xs_tau_arg format_expr body | EAbs (binder, taus) -> let xs, body = Bindlib.unmbind binder in let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in - Format.fprintf fmt "@[%a@ %a@ %a@ %a@]" - Dcalc.Print.format_punctuation "λ" + Format.fprintf fmt "@[%a@ %a@ %a@ %a@]" Print.punctuation "λ" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt " ") (fun fmt (x, tau) -> - Format.fprintf fmt "@[%a%a%a@ %a%a@]" Dcalc.Print.format_punctuation - "(" format_var x Dcalc.Print.format_punctuation ":" format_typ tau - Dcalc.Print.format_punctuation ")")) - xs_tau Dcalc.Print.format_punctuation "→" format_expr body + Format.fprintf fmt "@[%a%a%a@ %a%a@]" Print.punctuation "(" + format_var x Print.punctuation ":" format_typ tau Print.punctuation + ")")) + xs_tau Print.punctuation "→" format_expr body | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 - Dcalc.Print.format_binop op format_with_parens arg2 + Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 Print.binop op + format_with_parens arg2 | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> format_expr fmt arg1 | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" Dcalc.Print.format_unop op - format_with_parens arg1 + Format.fprintf fmt "@[%a@ %a@]" Print.unop op format_with_parens arg1 | EApp (f, args) -> Format.fprintf fmt "@[%a@ %a@]" format_expr f (Format.pp_print_list @@ -138,61 +131,58 @@ let rec format_expr format_with_parens) args | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" - Dcalc.Print.format_keyword "if" format_expr e1 Dcalc.Print.format_keyword - "then" format_expr e2 Dcalc.Print.format_keyword "else" format_expr e3 - | EOp (Ternop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_ternop op - | EOp (Binop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_binop op - | EOp (Unop op) -> Format.fprintf fmt "%a" Dcalc.Print.format_unop op + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" Print.keyword "if" + format_expr e1 Print.keyword "then" format_expr e2 Print.keyword "else" + format_expr e3 + | EOp (Ternop op) -> Format.fprintf fmt "%a" Print.ternop op + | EOp (Binop op) -> Format.fprintf fmt "%a" Print.binop op + | EOp (Unop op) -> Format.fprintf fmt "%a" Print.unop op | EDefault (excepts, just, cons) -> if List.length excepts = 0 then - Format.fprintf fmt "@[%a%a %a@ %a%a@]" Dcalc.Print.format_punctuation "⟨" - format_expr just Dcalc.Print.format_punctuation "⊢" format_expr cons - Dcalc.Print.format_punctuation "⟩" + Format.fprintf fmt "@[%a%a %a@ %a%a@]" Print.punctuation "⟨" format_expr + just Print.punctuation "⊢" format_expr cons Print.punctuation "⟩" else - Format.fprintf fmt "@[%a%a@ %a@ %a %a@ %a%a@]" - Dcalc.Print.format_punctuation "⟨" + Format.fprintf fmt "@[%a%a@ %a@ %a %a@ %a%a@]" Print.punctuation + "⟨" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") format_expr) - excepts Dcalc.Print.format_punctuation "|" format_expr just - Dcalc.Print.format_punctuation "⊢" format_expr cons - Dcalc.Print.format_punctuation "⟩" + excepts Print.punctuation "|" format_expr just Print.punctuation "⊢" + format_expr cons Print.punctuation "⟩" | ErrorOnEmpty e' -> Format.fprintf fmt "error_empty@ %a" format_with_parens e' | EArray es -> - Format.fprintf fmt "%a%a%a" Dcalc.Print.format_punctuation "[" + Format.fprintf fmt "%a%a%a" Print.punctuation "[" (Format.pp_print_list - ~pp_sep:(fun fmt () -> Dcalc.Print.format_punctuation fmt ";") + ~pp_sep:(fun fmt () -> Print.punctuation fmt ";") (fun fmt e -> Format.fprintf fmt "@[%a@]" format_expr e)) - es Dcalc.Print.format_punctuation "]" + es Print.punctuation "]" let format_struct (fmt : Format.formatter) ((name, fields) : StructName.t * (StructFieldName.t * typ Marked.pos) list) : unit = - Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" - Dcalc.Print.format_keyword "type" StructName.format_t name - Dcalc.Print.format_punctuation "=" Dcalc.Print.format_punctuation "{" + Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" Print.keyword "type" + StructName.format_t name Print.punctuation "=" Print.punctuation "{" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (field_name, typ) -> Format.fprintf fmt "%a%a %a" StructFieldName.format_t field_name - Dcalc.Print.format_punctuation ":" format_typ typ)) - fields Dcalc.Print.format_punctuation "}" + Print.punctuation ":" format_typ typ)) + fields Print.punctuation "}" let format_enum (fmt : Format.formatter) ((name, cases) : EnumName.t * (EnumConstructor.t * typ Marked.pos) list) : unit = - Format.fprintf fmt "%a %a %a @\n@[ %a@]" Dcalc.Print.format_keyword - "type" EnumName.format_t name Dcalc.Print.format_punctuation "=" + Format.fprintf fmt "%a %a %a @\n@[ %a@]" Print.keyword "type" + EnumName.format_t name Print.punctuation "=" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (field_name, typ) -> - Format.fprintf fmt "%a %a%a %a" Dcalc.Print.format_punctuation "|" - EnumConstructor.format_t field_name Dcalc.Print.format_punctuation - ":" format_typ typ)) + Format.fprintf fmt "%a %a%a %a" Print.punctuation "|" + EnumConstructor.format_t field_name Print.punctuation ":" format_typ + typ)) cases let format_scope @@ -200,36 +190,32 @@ let format_scope (fmt : Format.formatter) ((name, decl) : ScopeName.t * scope_decl) : unit = Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@]@\n@[ %a@]" - Dcalc.Print.format_keyword "let" Dcalc.Print.format_keyword "scope" - ScopeName.format_t name + Print.keyword "let" Print.keyword "scope" ScopeName.format_t name (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") (fun fmt (scope_var, (typ, vis)) -> - Format.fprintf fmt "%a%a%a %a%a%a%a%a" Dcalc.Print.format_punctuation - "(" ScopeVar.format_t scope_var Dcalc.Print.format_punctuation ":" - format_typ typ Dcalc.Print.format_punctuation "|" - Dcalc.Print.format_keyword + Format.fprintf fmt "%a%a%a %a%a%a%a%a" Print.punctuation "(" + ScopeVar.format_t scope_var Print.punctuation ":" format_typ typ + Print.punctuation "|" Print.keyword (match Marked.unmark vis.io_input with | NoInput -> "internal" | OnlyInput -> "input" | Reentrant -> "context") (if Marked.unmark vis.io_output then fun fmt () -> - Format.fprintf fmt "%a@,%a" Dcalc.Print.format_punctuation "|" - Dcalc.Print.format_keyword "output" + Format.fprintf fmt "%a@,%a" Print.punctuation "|" Print.keyword + "output" else fun fmt () -> Format.fprintf fmt "@<0>") - () Dcalc.Print.format_punctuation ")")) + () Print.punctuation ")")) (ScopeVarMap.bindings decl.scope_sig) - Dcalc.Print.format_punctuation "=" + Print.punctuation "=" (Format.pp_print_list - ~pp_sep:(fun fmt () -> - Format.fprintf fmt "%a@ " Dcalc.Print.format_punctuation ";") + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " Print.punctuation ";") (fun fmt rule -> match rule with | Definition (loc, typ, _, e) -> - Format.fprintf fmt "@[%a %a %a %a %a@ %a@]" - Dcalc.Print.format_keyword "let" format_location - (Marked.unmark loc) Dcalc.Print.format_punctuation ":" format_typ - typ Dcalc.Print.format_punctuation "=" + Format.fprintf fmt "@[%a %a %a %a %a@ %a@]" Print.keyword + "let" format_location (Marked.unmark loc) Print.punctuation ":" + format_typ typ Print.punctuation "=" (fun fmt e -> match Marked.unmark loc with | SubScopeVar _ -> format_expr fmt e @@ -240,18 +226,17 @@ let format_scope .io_input with | Reentrant -> - Format.fprintf fmt "%a@ %a" Dcalc.Print.format_operator + Format.fprintf fmt "%a@ %a" Print.operator "reentrant or by default" (format_expr ~debug) e | _ -> Format.fprintf fmt "%a" (format_expr ~debug) e)) e | Assertion e -> - Format.fprintf fmt "%a %a" Dcalc.Print.format_keyword "assert" + Format.fprintf fmt "%a %a" Print.keyword "assert" (format_expr ~debug) e | Call (scope_name, subscope_name) -> - Format.fprintf fmt "%a %a%a%a%a" Dcalc.Print.format_keyword "call" - ScopeName.format_t scope_name Dcalc.Print.format_punctuation "[" - SubScopeName.format_t subscope_name Dcalc.Print.format_punctuation - "]")) + Format.fprintf fmt "%a %a%a%a%a" Print.keyword "call" + ScopeName.format_t scope_name Print.punctuation "[" + SubScopeName.format_t subscope_name Print.punctuation "]")) decl.scope_decl_rules let format_program diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 8e60735f..1ebaf872 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -349,6 +349,8 @@ let remove_logging_calls e = in f () e +let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e + let rec size : 'a. ('a, 't) gexpr marked -> int = fun (type a) (e : (a, 't) gexpr marked) -> match Marked.unmark e with diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 1b8d3afb..b4182023 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -204,6 +204,13 @@ val remove_logging_calls : (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) +val format : + ?debug:bool (** [true] for debug printing *) -> + decl_ctx -> + Format.formatter -> + 'e marked -> + unit + (** {2 Analysis and tests} *) val is_value : (_ any, 'm mark) gexpr marked -> bool diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml new file mode 100644 index 00000000..f4d2ca27 --- /dev/null +++ b/compiler/shared_ast/print.ml @@ -0,0 +1,337 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Denis Merigoux + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +open Utils +open String_common +open Types + +let typ_needs_parens (e : typ) : bool = + match e with TArrow _ | TArray _ -> true | _ -> false + +let uid_list (fmt : Format.formatter) (infos : Uid.MarkedString.info list) : + unit = + Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.pp_print_char fmt '.') + (fun fmt info -> + Utils.Cli.format_with_style + (if begins_with_uppercase (Marked.unmark info) then [ANSITerminal.red] + else []) + fmt + (Utils.Uid.MarkedString.to_string info)) + fmt infos + +let keyword (fmt : Format.formatter) (s : string) : unit = + Utils.Cli.format_with_style [ANSITerminal.red] fmt s + +let base_type (fmt : Format.formatter) (s : string) : unit = + Utils.Cli.format_with_style [ANSITerminal.yellow] fmt s + +let punctuation (fmt : Format.formatter) (s : string) : unit = + Utils.Cli.format_with_style [ANSITerminal.cyan] fmt s + +let operator (fmt : Format.formatter) (s : string) : unit = + Utils.Cli.format_with_style [ANSITerminal.green] fmt s + +let lit_style (fmt : Format.formatter) (s : string) : unit = + Utils.Cli.format_with_style [ANSITerminal.yellow] fmt s + +let tlit (fmt : Format.formatter) (l : typ_lit) : unit = + base_type fmt + (match l with + | TUnit -> "unit" + | TBool -> "bool" + | TInt -> "integer" + | TRat -> "decimal" + | TMoney -> "money" + | TDuration -> "duration" + | TDate -> "date") + +let enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : unit = + Format.fprintf fmt "%a" + (Utils.Cli.format_with_style [ANSITerminal.magenta]) + (Format.asprintf "%a" EnumConstructor.format_t c) + +let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = + let typ = typ ctx in + let typ_with_parens (fmt : Format.formatter) (t : typ) = + if typ_needs_parens t then Format.fprintf fmt "(%a)" typ t + else Format.fprintf fmt "%a" typ t + in + match ty with + | TLit l -> tlit fmt l + | TTuple (ts, None) -> + Format.fprintf fmt "@[(%a)@]" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " operator "*") + (fun fmt t -> Format.fprintf fmt "%a" typ t)) + (List.map Marked.unmark ts) + | TTuple (_args, Some s) -> + Format.fprintf fmt "@[%a%a%a%a@]" StructName.format_t s punctuation + "{" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ";") + (fun fmt (field, mty) -> + Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" + StructFieldName.format_t field punctuation "\"" punctuation ":" typ + (Marked.unmark mty))) + (StructMap.find s ctx.ctx_structs) + punctuation "}" + | TEnum (_, e) -> + Format.fprintf fmt "@[%a%a%a%a@]" EnumName.format_t e punctuation "[" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " punctuation "|") + (fun fmt (case, mty) -> + Format.fprintf fmt "%a%a@ %a" enum_constructor case punctuation ":" + typ (Marked.unmark mty))) + (EnumMap.find e ctx.ctx_enums) + punctuation "]" + | TArrow (t1, t2) -> + Format.fprintf fmt "@[%a %a@ %a@]" typ_with_parens (Marked.unmark t1) + operator "→" typ (Marked.unmark t2) + | TArray t1 -> + Format.fprintf fmt "@[%a@ %a@]" base_type "array" typ + (Marked.unmark t1) + | TAny -> base_type fmt "any" + +(* (EmileRolley) NOTE: seems to be factorizable with Print.lit. *) +let lit (type a) (fmt : Format.formatter) (l : a glit) : unit = + match l with + | LBool b -> lit_style fmt (string_of_bool b) + | LInt i -> lit_style fmt (Runtime.integer_to_string i) + | LEmptyError -> lit_style fmt "∅ " + | LUnit -> lit_style fmt "()" + | LRat i -> + lit_style fmt + (Runtime.decimal_to_string ~max_prec_digits:!Utils.Cli.max_prec_digits i) + | LMoney e -> ( + match !Utils.Cli.locale_lang with + | En -> lit_style fmt (Format.asprintf "$%s" (Runtime.money_to_string e)) + | Fr -> lit_style fmt (Format.asprintf "%s €" (Runtime.money_to_string e)) + | Pl -> lit_style fmt (Format.asprintf "%s PLN" (Runtime.money_to_string e)) + ) + | LDate d -> lit_style fmt (Runtime.date_to_string d) + | LDuration d -> lit_style fmt (Runtime.duration_to_string d) + +let op_kind (fmt : Format.formatter) (k : op_kind) = + Format.fprintf fmt "%s" + (match k with + | KInt -> "" + | KRat -> "." + | KMoney -> "$" + | KDate -> "@" + | KDuration -> "^") + +let binop (fmt : Format.formatter) (op : binop) : unit = + operator fmt + (match op with + | Add k -> Format.asprintf "+%a" op_kind k + | Sub k -> Format.asprintf "-%a" op_kind k + | Mult k -> Format.asprintf "*%a" op_kind k + | Div k -> Format.asprintf "/%a" op_kind k + | And -> "&&" + | Or -> "||" + | Xor -> "xor" + | Eq -> "=" + | Neq -> "!=" + | Lt k -> Format.asprintf "%s%a" "<" op_kind k + | Lte k -> Format.asprintf "%s%a" "<=" op_kind k + | Gt k -> Format.asprintf "%s%a" ">" op_kind k + | Gte k -> Format.asprintf "%s%a" ">=" op_kind k + | Concat -> "++" + | Map -> "map" + | Filter -> "filter") + +let ternop (fmt : Format.formatter) (op : ternop) : unit = + match op with Fold -> keyword fmt "fold" + +let log_entry (fmt : Format.formatter) (entry : log_entry) : unit = + Format.fprintf fmt "@<2>%a" + (fun fmt -> function + | VarDef _ -> Utils.Cli.format_with_style [ANSITerminal.blue] fmt "≔ " + | BeginCall -> Utils.Cli.format_with_style [ANSITerminal.yellow] fmt "→ " + | EndCall -> Utils.Cli.format_with_style [ANSITerminal.yellow] fmt "← " + | PosRecordIfTrueBool -> + Utils.Cli.format_with_style [ANSITerminal.green] fmt "☛ ") + entry + +let unop (fmt : Format.formatter) (op : unop) : unit = + match op with + | Minus _ -> Format.pp_print_string fmt "-" + | Not -> Format.pp_print_string fmt "~" + | Log (entry, infos) -> + Format.fprintf fmt "log@[[%a|%a]@]" log_entry entry + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt ".") + (fun fmt info -> Utils.Uid.MarkedString.format_info fmt info)) + infos + | Length -> Format.pp_print_string fmt "length" + | IntToRat -> Format.pp_print_string fmt "int_to_rat" + | MoneyToRat -> Format.pp_print_string fmt "money_to_rat" + | RatToMoney -> Format.pp_print_string fmt "rat_to_money" + | GetDay -> Format.pp_print_string fmt "get_day" + | GetMonth -> Format.pp_print_string fmt "get_month" + | GetYear -> Format.pp_print_string fmt "get_year" + | FirstDayOfMonth -> Format.pp_print_string fmt "first_day_of_month" + | LastDayOfMonth -> Format.pp_print_string fmt "last_day_of_month" + | RoundMoney -> Format.pp_print_string fmt "round_money" + | RoundDecimal -> Format.pp_print_string fmt "round_decimal" + +let except (fmt : Format.formatter) (exn : except) : unit = + operator fmt + (match exn with + | EmptyError -> "EmptyError" + | ConflictError -> "ConflictError" + | Crash -> "Crash" + | NoValueProvided -> "NoValueProvided") + +let needs_parens (type a) (e : (a, _) gexpr marked) : bool = + match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false + +let var fmt v = + Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) + +let rec expr : + 'a. + ?debug:bool -> + decl_ctx -> + Format.formatter -> + ('a, 't) gexpr marked -> + unit = + fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) + (e : (a, 't) gexpr marked) -> + let expr e = expr ~debug ctx e in + let with_parens fmt e = + if needs_parens e then ( + punctuation fmt "("; + expr fmt e; + punctuation fmt ")") + else expr fmt e + in + match Marked.unmark e with + | EVar v -> Format.fprintf fmt "%a" var v + | ETuple (es, None) -> + Format.fprintf fmt "@[%a%a%a@]" punctuation "(" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") + (fun fmt e -> Format.fprintf fmt "%a" expr e)) + es punctuation ")" + | ETuple (es, Some s) -> + Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t s + punctuation "{" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ";") + (fun fmt (e, struct_field) -> + Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" + StructFieldName.format_t struct_field punctuation "\"" punctuation + "=" expr e)) + (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) + punctuation "}" + | EArray es -> + Format.fprintf fmt "@[%a%a%a@]" punctuation "[" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") + (fun fmt e -> Format.fprintf fmt "%a" expr e)) + es punctuation "]" + | ETupleAccess (e1, n, s, _ts) -> ( + match s with + | None -> Format.fprintf fmt "%a%a%d" expr e1 punctuation "." n + | Some s -> + Format.fprintf fmt "%a%a%a%a%a" expr e1 operator "." punctuation "\"" + StructFieldName.format_t + (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) + punctuation "\"") + | EInj (e, n, en, _ts) -> + Format.fprintf fmt "@[%a@ %a@]" enum_constructor + (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) + expr e + | EMatch (e, es, e_name) -> + Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" + expr e keyword "with" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") + (fun fmt (e, c) -> + Format.fprintf fmt "@[%a %a%a@ %a@]" punctuation "|" + enum_constructor c punctuation ":" expr e)) + (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) + | ELit l -> lit fmt l + | EApp ((EAbs (binder, taus), _), args) -> + let xs, body = Bindlib.unmbind binder in + let xs_tau = + List.map2 (fun x tau -> x, Marked.unmark tau) (Array.to_list xs) taus + in + let xs_tau_arg = List.map2 (fun (x, tau) arg -> x, tau, arg) xs_tau args in + Format.fprintf fmt "%a%a" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "") + (fun fmt (x, tau, arg) -> + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@]@\n" + keyword "let" var x punctuation ":" (typ ctx) tau punctuation "=" + expr arg keyword "in")) + xs_tau_arg expr body + | EAbs (binder, taus) -> + let xs, body = Bindlib.unmbind binder in + let xs_tau = + List.map2 (fun x tau -> x, Marked.unmark tau) (Array.to_list xs) taus + in + Format.fprintf fmt "@[%a @[%a@] %a@ %a@]" punctuation "λ" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") + (fun fmt (x, tau) -> + Format.fprintf fmt "%a%a%a %a%a" punctuation "(" var x punctuation + ":" (typ ctx) tau punctuation ")")) + xs_tau punctuation "→" expr body + | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> + Format.fprintf fmt "@[%a@ %a@ %a@]" binop op with_parens arg1 + with_parens arg2 + | EApp ((EOp (Binop op), _), [arg1; arg2]) -> + Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 binop op + with_parens arg2 + | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> expr fmt arg1 + | EApp ((EOp (Unop op), _), [arg1]) -> + Format.fprintf fmt "@[%a@ %a@]" unop op with_parens arg1 + | EApp (f, args) -> + Format.fprintf fmt "@[%a@ %a@]" expr f + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") + with_parens) + args + | EIfThenElse (e1, e2, e3) -> + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" expr e1 + keyword "then" expr e2 keyword "else" expr e3 + | EOp (Ternop op) -> Format.fprintf fmt "%a" ternop op + | EOp (Binop op) -> Format.fprintf fmt "%a" binop op + | EOp (Unop op) -> Format.fprintf fmt "%a" unop op + | EDefault (exceptions, just, cons) -> + if List.length exceptions = 0 then + Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" expr just + punctuation "⊢" expr cons punctuation "⟩" + else + Format.fprintf fmt "@[%a%a@ %a@ %a@ %a@ %a%a@]" punctuation "⟨" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",") + expr) + exceptions punctuation "|" expr just punctuation "⊢" expr cons + punctuation "⟩" + | ErrorOnEmpty e' -> + Format.fprintf fmt "%a@ %a" operator "error_empty" with_parens e' + | EAssert e' -> + Format.fprintf fmt "@[%a@ %a%a%a@]" keyword "assert" punctuation "(" + expr e' punctuation ")" + | ECatch (e1, exn, e2) -> + Format.fprintf fmt "@[%a@ %a@ %a@ %a ->@ %a@]" keyword "try" + with_parens e1 keyword "with" except exn with_parens e2 + | ERaise exn -> + Format.fprintf fmt "@[%a@ %a@]" keyword "raise" except exn diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli new file mode 100644 index 00000000..59e8bf51 --- /dev/null +++ b/compiler/shared_ast/print.mli @@ -0,0 +1,50 @@ +(* This file is part of the Catala compiler, a specification language for tax + and social benefits computation rules. Copyright (C) 2020 Inria, contributor: + Denis Merigoux + + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy of + the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations under + the License. *) + +(** Printing functions for the default calculus AST *) + +open Utils +open Types + +(** {1 Common syntax highlighting helpers}*) + +val base_type : Format.formatter -> string -> unit +val keyword : Format.formatter -> string -> unit +val punctuation : Format.formatter -> string -> unit +val operator : Format.formatter -> string -> unit +val lit_style : Format.formatter -> string -> unit + +(** {1 Formatters} *) + +val uid_list : Format.formatter -> Uid.MarkedString.info list -> unit +val enum_constructor : Format.formatter -> EnumConstructor.t -> unit +val tlit : Format.formatter -> typ_lit -> unit +val typ : decl_ctx -> Format.formatter -> typ -> unit +val lit : Format.formatter -> 'a glit -> unit +val op_kind : Format.formatter -> op_kind -> unit +val binop : Format.formatter -> binop -> unit +val ternop : Format.formatter -> ternop -> unit +val log_entry : Format.formatter -> log_entry -> unit +val unop : Format.formatter -> unop -> unit +val except : Format.formatter -> except -> unit +val var : Format.formatter -> 'e Var.t -> unit + +val expr : + ?debug:bool (** [true] for debug printing *) -> + decl_ctx -> + Format.formatter -> + 'e marked -> + unit diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index efe1843a..16c01de9 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -148,6 +148,20 @@ let to_expr (ctx : decl_ctx) (body : 'e scope_body) (mark_scope : 'm mark) : ] mark_scope +let format + ?(debug : bool = false) + (ctx : decl_ctx) + (fmt : Format.formatter) + ((n, s) : ScopeName.t * 'm scope_body) = + Format.fprintf fmt "@[%a %a =@ %a@]" Print.keyword "let" + ScopeName.format_t n (Expr.format ctx ~debug) + (Bindlib.unbox + (to_expr ctx s + (Expr.map_mark + (fun _ -> Marked.get_mark (ScopeName.get_info n)) + (fun ty -> ty) + (get_body_mark s)))) + let rec unfold (ctx : decl_ctx) (s : 'e scopes) diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 4bbeebb9..14c8f1ad 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -84,6 +84,13 @@ val get_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark (** {2 Conversions} *) +val format : + ?debug:bool (** [true] for debug printing *) -> + decl_ctx -> + Format.formatter -> + ScopeName.t * 'e anyexpr scope_body -> + unit + val to_expr : decl_ctx -> ((_ any, 'm mark) gexpr as 'e) scope_body -> diff --git a/compiler/shared_ast/shared_ast.ml b/compiler/shared_ast/shared_ast.ml index 487f649b..5158089a 100644 --- a/compiler/shared_ast/shared_ast.ml +++ b/compiler/shared_ast/shared_ast.ml @@ -19,3 +19,4 @@ module Var = Var module Expr = Expr module Scope = Scope module Program = Program +module Print = Print diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 67136314..85643175 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -16,6 +16,7 @@ the License. *) open Utils +module SurfacePrint = Print open Shared_ast module Runtime = Runtime_ocaml.Runtime @@ -580,7 +581,7 @@ let rec translate_expr Errors.raise_spanned_error pos "It is impossible to compute the arg-%s of two values of type %a" (if max_or_min then "max" else "min") - Print.format_primitive_typ pred_typ + SurfacePrint.format_primitive_typ pred_typ in let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in let f_pred = @@ -665,7 +666,7 @@ let rec translate_expr | Ast.Aggregate (Ast.AggregateSum t) -> Errors.raise_spanned_error pos "It is impossible to sum two values of type %a together" - Print.format_primitive_typ t + SurfacePrint.format_primitive_typ t | Ast.Aggregate (Ast.AggregateExtremum (_, _, init)) -> rec_helper init | Ast.Aggregate Ast.AggregateCount -> Bindlib.box @@ -727,7 +728,7 @@ let rec translate_expr Errors.raise_spanned_error pos "ssible to compute the %s of two values of type %a" (if max_or_min then "max" else "min") - Print.format_primitive_typ t + SurfacePrint.format_primitive_typ t in let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in make_extr_body cmp_op typ diff --git a/compiler/utils/uid.ml b/compiler/utils/uid.ml index 58ffbfe8..00f7f951 100644 --- a/compiler/utils/uid.ml +++ b/compiler/utils/uid.ml @@ -17,6 +17,7 @@ module type Info = sig type info + val to_string : info -> string val format_info : Format.formatter -> info -> unit end @@ -45,7 +46,7 @@ module Make (X : Info) () : Id with type info = X.info = struct let compare (x : t) (y : t) : int = compare x.id y.id let format_t (fmt : Format.formatter) (x : t) : unit = - Format.fprintf fmt "%a" X.format_info x.info + X.format_info fmt x.info let hash (x : t) : int = x.id end @@ -53,5 +54,6 @@ end module MarkedString = struct type info = string Marked.pos - let format_info fmt (s, _) = Format.fprintf fmt "%s" s + let to_string (s, _) = s + let format_info fmt i = Format.pp_print_string fmt (to_string i) end diff --git a/compiler/utils/uid.mli b/compiler/utils/uid.mli index 8fb0a091..43352e4c 100644 --- a/compiler/utils/uid.mli +++ b/compiler/utils/uid.mli @@ -20,6 +20,7 @@ module type Info = sig type info + val to_string : info -> string val format_info : Format.formatter -> info -> unit end diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 73c36122..09d217d2 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -97,7 +97,7 @@ let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed marked_expr) "Internal error: this expression does not have the structure expected by \ the VC generator:\n\ %a" - (Print.format_expr ~debug:true ctx.decl) + (Expr.format ~debug:true ctx.decl) e (** {1 Verification conditions generator}*) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index e8415812..3a0bc322 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -167,8 +167,7 @@ module MakeBackendIO (B : Backend) = struct | Conditions.NoEmptyError -> "the variable definition never to return an empty error" | NoOverlappingExceptions -> "no two exceptions to ever overlap") - (Dcalc.Print.format_expr decl_ctx) - vc.vc_guard; + (Expr.format decl_ctx) vc.vc_guard; match z3_vc with | Success (encoding, backend_ctx) -> ( diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 5112b0bb..7b122e89 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -429,7 +429,7 @@ let rec translate_op failwith (Format.asprintf "[Z3 encoding] Ill-formed ternary operator application: %a" - (Print.format_expr ctx.ctx_decl) + (Shared_ast.Expr.format ctx.ctx_decl) ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), List.map @@ -522,7 +522,7 @@ let rec translate_op failwith (Format.asprintf "[Z3 encoding] Ill-formed binary operator application: %a" - (Print.format_expr ctx.ctx_decl) + (Shared_ast.Expr.format ctx.ctx_decl) ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), List.map @@ -575,7 +575,7 @@ let rec translate_op failwith (Format.asprintf "[Z3 encoding] Ill-formed unary operator application: %a" - (Print.format_expr ctx.ctx_decl) + (Shared_ast.Expr.format ctx.ctx_decl) ( EApp ( (EOp op, Untyped { pos = Pos.no_pos }), List.map diff --git a/tests/test_scope/good/output/simple.catala_en.Lcalc b/tests/test_scope/good/output/simple.catala_en.Lcalc index 34487f72..3c398fcc 100644 --- a/tests/test_scope/good/output/simple.catala_en.Lcalc +++ b/tests/test_scope/good/output/simple.catala_en.Lcalc @@ -4,4 +4,4 @@ let Foo = try handle_default_0 [] (λ (__29: any) → true) (λ (__30: any) → 0) with EmptyError -> raise NoValueProvided in - Foo_out {"bar_out": bar_28} + Foo_out {"bar_out"= bar_28} From 4caf828e48fc819370d92541e2a9500fd388af25 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Mon, 22 Aug 2022 18:53:30 +0200 Subject: [PATCH 10/31] Additional cleanup/fixes on the compiler refactoring following review ^^ --- compiler/dcalc/interpreter.ml | 7 +- compiler/dcalc/typing.ml | 24 +- compiler/desugared/ast.ml | 2 +- compiler/desugared/desugared_to_scope.ml | 2 +- compiler/lcalc/ast.ml | 65 ++--- compiler/lcalc/ast.mli | 42 +--- compiler/lcalc/closure_conversion.ml | 10 +- compiler/lcalc/compile_with_exceptions.ml | 8 +- compiler/lcalc/compile_without_exceptions.ml | 24 +- compiler/lcalc/to_ocaml.ml | 2 +- compiler/lcalc/to_ocaml.mli | 2 +- compiler/plugins/api_web.ml | 2 +- compiler/scopelang/ast.ml | 2 +- compiler/scopelang/scope_to_dcalc.ml | 4 +- .../shared_ast/{types.ml => definitions.ml} | 13 +- compiler/shared_ast/expr.ml | 228 +++++++++--------- compiler/shared_ast/expr.mli | 14 +- compiler/shared_ast/print.ml | 2 +- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/program.ml | 19 +- compiler/shared_ast/program.mli | 17 +- compiler/shared_ast/scope.ml | 2 +- compiler/shared_ast/scope.mli | 2 +- compiler/shared_ast/shared_ast.ml | 2 +- compiler/shared_ast/shared_ast.mld | 18 +- compiler/shared_ast/var.ml | 3 +- compiler/shared_ast/var.mli | 2 +- compiler/surface/desugaring.ml | 6 +- compiler/utils/uid.ml | 2 + compiler/utils/uid.mli | 1 + compiler/verification/conditions.ml | 8 +- 31 files changed, 249 insertions(+), 288 deletions(-) rename compiler/shared_ast/{types.ml => definitions.ml} (94%) diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index cec069c1..89225d5e 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -18,7 +18,6 @@ open Utils open Shared_ast -module A = Ast module Runtime = Runtime_ocaml.Runtime (** {1 Helpers} *) @@ -48,15 +47,15 @@ let rec evaluate_operator "division by zero at runtime" in let get_binop_args_pos = function - | (arg0 :: arg1 :: _ : 'm A.marked_expr list) -> + | (arg0 :: arg1 :: _ : 'm Ast.marked_expr list) -> [None, Expr.pos arg0; None, Expr.pos arg1] | _ -> assert false in (* Try to apply [cmp] and if a [UncomparableDurations] exceptions is catched, use [args] to raise multispanned errors. *) let apply_cmp_or_raise_err - (cmp : unit -> 'm A.expr) - (args : 'm A.marked_expr list) : 'm A.expr = + (cmp : unit -> 'm Ast.expr) + (args : 'm Ast.marked_expr list) : 'm Ast.expr = try cmp () with Runtime.UncomparableDurations -> Errors.raise_multispanned_error (get_binop_args_pos args) diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index f2751b3a..dfa2fa20 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -46,22 +46,22 @@ and typ = let rec typ_to_ast (ty : unionfind_typ) : A.marked_typ = let ty, pos = UnionFind.get (UnionFind.find ty) in match ty with - | TLit l -> TLit l, pos - | TTuple (ts, s) -> TTuple (List.map typ_to_ast ts, s), pos - | TEnum (ts, e) -> TEnum (List.map typ_to_ast ts, e), pos - | TArrow (t1, t2) -> TArrow (typ_to_ast t1, typ_to_ast t2), pos - | TAny _ -> TAny, pos - | TArray t1 -> TArray (typ_to_ast t1), pos + | TLit l -> A.TLit l, pos + | TTuple (ts, s) -> A.TTuple (List.map typ_to_ast ts, s), pos + | TEnum (ts, e) -> A.TEnum (List.map typ_to_ast ts, e), pos + | TArrow (t1, t2) -> A.TArrow (typ_to_ast t1, typ_to_ast t2), pos + | TAny _ -> A.TAny, pos + | TArray t1 -> A.TArray (typ_to_ast t1), pos let rec ast_to_typ (ty : A.marked_typ) : unionfind_typ = let ty' = match Marked.unmark ty with - | TLit l -> TLit l - | TArrow (t1, t2) -> TArrow (ast_to_typ t1, ast_to_typ t2) - | TTuple (ts, s) -> TTuple (List.map (fun t -> ast_to_typ t) ts, s) - | TEnum (ts, e) -> TEnum (List.map (fun t -> ast_to_typ t) ts, e) - | TArray t -> TArray (ast_to_typ t) - | TAny -> TAny (Any.fresh ()) + | A.TLit l -> TLit l + | A.TArrow (t1, t2) -> TArrow (ast_to_typ t1, ast_to_typ t2) + | A.TTuple (ts, s) -> TTuple (List.map (fun t -> ast_to_typ t) ts, s) + | A.TEnum (ts, e) -> TEnum (List.map (fun t -> ast_to_typ t) ts, e) + | A.TArray t -> TArray (ast_to_typ t) + | A.TAny -> TAny (Any.fresh ()) in UnionFind.make (Marked.same_mark_as ty' ty) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 608ca0f5..1fb1067b 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -460,7 +460,7 @@ let make_let_in (e2 : expr Marked.pos Bindlib.box) : expr Marked.pos Bindlib.box = Bindlib.box_apply2 (fun e u -> EApp (e, u), Marked.get_mark (Bindlib.unbox e2)) - (make_abs (Array.of_list [x]) e2 [tau] (Marked.get_mark (Bindlib.unbox e2))) + (make_abs [| x |] e2 [tau] (Marked.get_mark (Bindlib.unbox e2))) (Bindlib.box_list [e1]) module VarMap = Map.Make (Var) diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 80e0a472..123c50f7 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -297,7 +297,7 @@ let rec rule_tree_to_expr default in Scopelang.Ast.make_abs - (Array.of_list [Ast.VarMap.find new_param ctx.var_mapping]) + [| Ast.VarMap.find new_param ctx.var_mapping |] default [typ] def_pos else default | _ -> (* should not happen *) assert false diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 559e7294..e5cf3d12 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -16,7 +16,6 @@ open Utils include Shared_ast -module D = Dcalc.Ast type lit = lcalc glit @@ -24,48 +23,7 @@ type 'm expr = (lcalc, 'm mark) gexpr and 'm marked_expr = (lcalc, 'm mark) marked_gexpr type 'm program = 'm expr Shared_ast.program -type 'm var = 'm expr Var.t -type 'm vars = 'm expr Var.vars -let make_var (x, mark) = - Bindlib.box_apply (fun x -> x, mark) (Bindlib.box_var x) - -let make_abs xs e taus mark = - Bindlib.box_apply (fun b -> EAbs (b, taus), mark) (Bindlib.bind_mvar xs e) - -let make_app e u mark = - Bindlib.box_apply2 (fun e u -> EApp (e, u), mark) e (Bindlib.box_list u) - -let make_let_in x tau e1 e2 pos = - let m_e1 = Marked.get_mark (Bindlib.unbox e1) in - let m_e2 = Marked.get_mark (Bindlib.unbox e2) in - let m_abs = - Expr.map_mark2 - (fun _ _ -> pos) - (fun m1 m2 -> TArrow (m1.ty, m2.ty), m1.pos) - m_e1 m_e2 - in - make_app (make_abs [| x |] e2 [tau] m_abs) [e1] m_e2 - -let make_multiple_let_in xs taus e1s e2 pos = - (* let m_e1s = List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s in *) - let m_e1s = - Expr.fold_marks List.hd - (fun tys -> - TTuple (List.map (fun t -> t.ty) tys, None), (List.hd tys).pos) - (List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s) - in - let m_e2 = Marked.get_mark (Bindlib.unbox e2) in - let m_abs = - Expr.map_mark2 - (fun _ _ -> pos) - (fun m1 m2 -> Marked.mark pos (TArrow (m1.ty, m2.ty))) - m_e1s m_e2 - in - make_app (make_abs xs e2 taus m_abs) e1s m_e2 - -let ( let+ ) x f = Bindlib.box_apply f x -let ( and+ ) x y = Bindlib.box_pair x y let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) let some_constr : EnumConstructor.t = EnumConstructor.fresh ("ESome", Pos.no_pos) @@ -91,10 +49,15 @@ let make_none m = let make_some e = let m = Marked.get_mark @@ Bindlib.unbox e in let mark = Marked.mark m in - let+ e in - mark - @@ EInj - (e, 1, option_enum, [TLit TUnit, Expr.mark_pos m; TAny, Expr.mark_pos m]) + Bindlib.box_apply + (fun e -> + mark + @@ EInj + ( e, + 1, + option_enum, + [TLit TUnit, Expr.mark_pos m; TAny, Expr.mark_pos m] )) + e (** [make_matchopt_with_abs_arms arg e_none e_some] build an expression [match arg with |None -> e_none | Some -> e_some] and requires e_some and @@ -102,8 +65,10 @@ let make_some e = let make_matchopt_with_abs_arms arg e_none e_some = let m = Marked.get_mark @@ Bindlib.unbox arg in let mark = Marked.mark m in - let+ arg and+ e_none and+ e_some in - mark @@ EMatch (arg, [e_none; e_some], option_enum) + Bindlib.box_apply3 + (fun arg e_none e_some -> + mark @@ EMatch (arg, [e_none; e_some], option_enum)) + arg e_none e_some (** [make_matchopt pos v tau arg e_none e_some] builds an expression [match arg with | None () -> e_none | Some v -> e_some]. It binds v to @@ -113,8 +78,8 @@ let make_matchopt m v tau arg e_none e_some = let x = Var.make "_" in make_matchopt_with_abs_arms arg - (make_abs (Array.of_list [x]) e_none [TLit TUnit, Expr.mark_pos m] m) - (make_abs (Array.of_list [v]) e_some [tau] m) + (Expr.make_abs [| x |] e_none [TLit TUnit, Expr.mark_pos m] m) + (Expr.make_abs [| v |] e_some [tau] m) let handle_default = Var.make "handle_default" let handle_default_opt = Var.make "handle_default_opt" diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 4d60a9b9..6d14be0e 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -28,44 +28,8 @@ and 'm marked_expr = (lcalc, 'm mark) marked_gexpr type 'm program = 'm expr Shared_ast.program -(** {1 Variable helpers} *) - -type 'm var = 'm expr Var.t -type 'm vars = 'm expr Var.vars - (** {1 Language terms construction}*) -val make_var : ('m var, 'm mark) Marked.t -> 'm marked_expr Bindlib.box - -val make_abs : - 'm vars -> - 'm marked_expr Bindlib.box -> - typ Marked.pos list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val make_app : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box list -> - 'm mark -> - 'm marked_expr Bindlib.box - -val make_let_in : - 'm var -> - typ Marked.pos -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - Pos.t -> - 'm marked_expr Bindlib.box - -val make_multiple_let_in : - 'm vars -> - typ Marked.pos list -> - 'm marked_expr Bindlib.box list -> - 'm marked_expr Bindlib.box -> - Pos.t -> - 'm marked_expr Bindlib.box - val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t @@ -81,7 +45,7 @@ val make_matchopt_with_abs_arms : val make_matchopt : 'm mark -> - 'm var -> + 'm expr Var.t -> typ Marked.pos -> 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box -> @@ -92,5 +56,5 @@ val make_matchopt : (** {1 Special symbols} *) -val handle_default : untyped var -val handle_default_opt : untyped var +val handle_default : untyped expr Var.t +val handle_default_opt : untyped expr Var.t diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index 46eeacb5..a30feb9e 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -139,7 +139,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : let inner_c_var = Var.make "env" in let any_ty = TAny, binder_pos in let new_closure_body = - make_multiple_let_in + Expr.make_multiple_let_in (Array.of_list extra_vars_list) (List.map (fun _ -> any_ty) extra_vars_list) (List.mapi @@ -158,13 +158,13 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : (Expr.mark_pos binder_mark) in let new_closure = - make_abs + Expr.make_abs (Array.concat [Array.make 1 inner_c_var; vars]) new_closure_body ((TAny, binder_pos) :: typs) (Marked.get_mark e) in - ( make_let_in code_var + ( Expr.make_let_in code_var (TAny, Expr.pos e) new_closure (Bindlib.box_apply2 @@ -223,7 +223,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : args ([], free_vars) in let call_expr = - make_let_in code_var + Expr.make_let_in code_var (TAny, Expr.pos e) (Bindlib.box_apply (fun env_var -> @@ -241,7 +241,7 @@ let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : (Bindlib.box_list new_args)) (Expr.pos e) in - ( make_let_in env_var (TAny, Expr.pos e) new_e1 call_expr (Expr.pos e), + ( Expr.make_let_in env_var (TAny, Expr.pos e) new_e1 call_expr (Expr.pos e), free_vars ) | EAssert e1 -> let new_e1, free_vars = aux e1 in diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index f7bd8d20..1337d71a 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -37,7 +37,7 @@ let translate_lit (l : D.lit) : 'm A.expr = let thunk_expr (e : 'm A.marked_expr Bindlib.box) (mark : 'm mark) : 'm A.marked_expr Bindlib.box = let dummy_var = Var.make "_" in - A.make_abs [| dummy_var |] e [TAny, Expr.mark_pos mark] mark + Expr.make_abs [| dummy_var |] e [TAny, Expr.mark_pos mark] mark let rec translate_default (ctx : 'm ctx) @@ -51,8 +51,8 @@ let rec translate_default exceptions in let exceptions = - A.make_app - (A.make_var (Var.translate A.handle_default, mark_default)) + Expr.make_app + (Expr.make_var (Var.translate A.handle_default, mark_default)) [ Expr.earray exceptions mark_default; thunk_expr (translate_expr ctx just) mark_default; @@ -65,7 +65,7 @@ let rec translate_default and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : 'm A.marked_expr Bindlib.box = match Marked.unmark e with - | EVar v -> A.make_var (Var.Map.find v ctx, Marked.get_mark e) + | EVar v -> Expr.make_var (Var.Map.find v ctx, Marked.get_mark e) | ETuple (args, s) -> Expr.etuple (List.map (translate_expr ctx) args) s (Marked.get_mark e) | ETupleAccess (e1, i, s, ts) -> diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 6f8eb26d..a1edf8aa 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -103,7 +103,7 @@ let add_var (is_pure : bool) (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in - let expr = A.make_var (new_var, mark) in + let expr = Expr.make_var (new_var, mark) in (* Cli.debug_print @@ Format.asprintf "D.%a |-> A.%a" Print.var var Print.var new_var; *) @@ -185,23 +185,23 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : let v' = Var.make (Bindlib.name_of v) in (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, created a variable %a to replace it" Print.var v Print.var v'; *) - A.make_var (v', pos), Var.Map.singleton v' e + Expr.make_var (v', pos), Var.Map.singleton v' e else (find ~info:"should never happend" v ctx).expr, Var.Map.empty | EApp ((EVar v, p), [(ELit LUnit, _)]) -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, created a variable %a to replace it" Print.var v Print.var v'; *) - A.make_var (v', pos), Var.Map.singleton v' (EVar v, p) + Expr.make_var (v', pos), Var.Map.singleton v' (EVar v, p) else Errors.raise_spanned_error (Expr.pos e) "Internal error: an pure variable was found in an unpure environment." | EDefault (_exceptions, _just, _cons) -> let v' = Var.make "default_term" in - A.make_var (v', pos), Var.Map.singleton v' e + Expr.make_var (v', pos), Var.Map.singleton v' e | ELit LEmptyError -> let v' = Var.make "empty_litteral" in - A.make_var (v', pos), Var.Map.singleton v' e + Expr.make_var (v', pos), Var.Map.singleton v' e (* This one is a very special case. It transform an unpure expression environement to a pure expression. *) | ErrorOnEmpty arg -> @@ -212,11 +212,11 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : let arg' = translate_expr ctx arg in ( A.make_matchopt_with_abs_arms arg' - (A.make_abs [| silent_var |] + (Expr.make_abs [| silent_var |] (Bindlib.box (ERaise NoValueProvided, pos)) [TAny, Expr.pos e] pos) - (A.make_abs [| x |] (A.make_var (x, pos)) [TAny, Expr.pos e] pos), + (Expr.make_abs [| x |] (Expr.make_var (x, pos)) [TAny, Expr.pos e] pos), Var.Map.empty ) (* pure terms *) | ELit l -> Expr.elit (translate_lit l (Expr.pos e)) pos, Var.Map.empty @@ -323,8 +323,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) let just' = translate_expr ctx just in let cons' = translate_expr ctx cons in (* calls handle_option. *) - A.make_app - (A.make_var (Var.translate A.handle_default_opt, mark_hoist)) + Expr.make_app + (Expr.make_var (Var.translate A.handle_default_opt, mark_hoist)) [ Bindlib.box_apply (fun excep' -> EArray excep', mark_hoist) @@ -343,14 +343,14 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) let x = Var.make "assertion_argument" in A.make_matchopt_with_abs_arms arg' - (A.make_abs [| silent_var |] + (Expr.make_abs [| silent_var |] (Bindlib.box (ERaise NoValueProvided, mark_hoist)) [TAny, Expr.mark_pos mark_hoist] mark_hoist) - (A.make_abs [| x |] + (Expr.make_abs [| x |] (Bindlib.box_apply (fun arg -> EAssert arg, mark_hoist) - (A.make_var (x, mark_hoist))) + (Expr.make_var (x, mark_hoist))) [TAny, Expr.mark_pos mark_hoist] mark_hoist) | _ -> diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index 469d06a8..b3ad0fbb 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -231,7 +231,7 @@ let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = | TArray t1 -> Format.fprintf fmt "@[%a@ array@]" format_typ_with_parens t1 | TAny -> Format.fprintf fmt "_" -let format_var (fmt : Format.formatter) (v : 'm var) : unit = +let format_var (fmt : Format.formatter) (v : 'm Var.t) : unit = let lowercase_name = to_snake_case (to_ascii (Bindlib.name_of v)) in let lowercase_name = Re.Pcre.substitute ~rex:(Re.Pcre.regexp "\\.") diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index 643d4ea2..cf3110cf 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -42,7 +42,7 @@ val format_to_module_name : val format_lit : Format.formatter -> lit Marked.pos -> unit val format_uid_list : Format.formatter -> Uid.MarkedString.info list -> unit -val format_var : Format.formatter -> 'm var -> unit +val format_var : Format.formatter -> 'm Var.t -> unit val format_program : Format.formatter -> diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index c251ebde..ecec403f 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -121,7 +121,7 @@ module To_jsoo = struct format_typ_of_jsoo t | _ -> Format.fprintf fmt "" - let format_var_camel_case (fmt : Format.formatter) (v : 'm var) : unit = + let format_var_camel_case (fmt : Format.formatter) (v : 'm Var.t) : unit = let lowercase_name = Bindlib.name_of v |> to_ascii diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 1f484d29..fba90ad5 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -307,7 +307,7 @@ let make_let_in (e2 : expr Marked.pos Bindlib.box) : expr Marked.pos Bindlib.box = Bindlib.box_apply2 (fun e u -> EApp (e, u), Marked.get_mark (Bindlib.unbox e2)) - (make_abs (Array.of_list [x]) e2 [tau] (Marked.get_mark (Bindlib.unbox e2))) + (make_abs [| x |] e2 [tau] (Marked.get_mark (Bindlib.unbox e2))) (Bindlib.box_list [e1]) let make_default ?(pos = Pos.no_pos) exceptions just cons = diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index eb210f93..754ea25d 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -455,9 +455,7 @@ let translate_rule (fun new_e -> ErrorOnEmpty new_e, pos_mark_as subs_var) new_e | Reentrant -> - Expr.make_abs - (Array.of_list [silent_var]) - new_e + Expr.make_abs [| silent_var |] new_e [TLit TUnit, var_def_pos] (pos_mark var_def_pos) in diff --git a/compiler/shared_ast/types.ml b/compiler/shared_ast/definitions.ml similarity index 94% rename from compiler/shared_ast/types.ml rename to compiler/shared_ast/definitions.ml index fb1f4f7a..bd5d8a76 100644 --- a/compiler/shared_ast/types.ml +++ b/compiler/shared_ast/definitions.ml @@ -221,7 +221,6 @@ type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr type untyped = { pos : Pos.t } [@@ocaml.unboxed] type typed = { pos : Pos.t; ty : marked_typ } -(* type inferring = { pos : Pos.t; uf : Infer.unionfind_typ } *) (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when @@ -232,6 +231,9 @@ type typed = { pos : Pos.t; ty : marked_typ } type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) gexpr +(** [('a, 't) gexpr marked] is equivalent to [('a, 'm mark) marked_gexpr] but + often more convenient to write since we generally use the type of + expressions ['e = (_, _ mark) gexpr] as type parameter. *) (** Useful for errors and printing, for example *) type any_marked_expr = @@ -239,10 +241,11 @@ type any_marked_expr = (** {2 Higher-level program structure} *) -(** Constructs scopes and programs on top of expressions. We may use the [gexpr] - type above at some point, but at the moment this is polymorphic in the types - of the expressions. Their markings are constrained to belong to the [mark] - GADT defined above. *) +(** Constructs scopes and programs on top of expressions. The ['e] type + parameter throughout is expected to match instances of the [gexpr] type + defined above. Markings are constrained to the [mark] GADT defined above. + Note that this structure is at the moment only relevant for [dcalc] and + [lcalc], as [scopelang] has its own scope structure, as the name implies. *) (** This kind annotation signals that the let-binding respects a structural invariant. These invariants concern the shape of the expression in the diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 1ebaf872..dd0f6f27 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -16,7 +16,7 @@ the License. *) open Utils -open Types +open Definitions (** Functions handling the types of [shared_ast] *) @@ -72,7 +72,7 @@ let ecatch e1 exn e2 pos = (* - Manipulation of marks - *) -let no_mark (type m) : m mark -> m mark = function +let no_mark : type m. m mark -> m mark = function | Untyped _ -> Untyped { pos = Pos.no_pos } | Typed _ -> Typed { pos = Pos.no_pos; ty = Marked.mark Pos.no_pos TAny } @@ -208,6 +208,23 @@ let make_let_in x tau e1 e2 pos = in make_app (make_abs [| x |] e2 [tau] m_abs) [e1] m_e2 +let make_multiple_let_in xs taus e1s e2 pos = + (* let m_e1s = List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s in *) + let m_e1s = + fold_marks List.hd + (fun tys -> + TTuple (List.map (fun t -> t.ty) tys, None), (List.hd tys).pos) + (List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s) + in + let m_e2 = Marked.get_mark (Bindlib.unbox e2) in + let m_abs = + map_mark2 + (fun _ _ -> pos) + (fun m1 m2 -> Marked.mark pos (TArrow (m1.ty, m2.ty))) + m_e1s m_e2 + in + make_app (make_abs xs e2 taus m_abs) e1s m_e2 + (* Tests *) let is_value (type a) (e : (a, 'm mark) gexpr marked) = @@ -223,13 +240,10 @@ let rec equal_typs ty1 ty2 = | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typs t1 t2 && equal_typs t1' t2' | TArray t1, TArray t2 -> equal_typs t1 t2 | TAny, TAny -> true - | _, _ -> false + | (TLit _ | TTuple _ | TEnum _ | TArrow _ | TArray _ | TAny), _ -> false and equal_typs_list tys1 tys2 = - List.length tys1 = List.length tys2 - && (* OCaml && operator short-circuits when a clause is false, we can safely - assume here that both lists have equal length *) - List.for_all (fun (x, y) -> equal_typs x y) (List.combine tys1 tys2) + try List.for_all2 equal_typs tys1 tys2 with Invalid_argument _ -> false let equal_log_entries l1 l2 = match l1, l2 with @@ -241,8 +255,13 @@ let equal_unops op1 op2 = (* Log entries contain a typ which contain position information, we thus need to descend into them *) | Log (l1, info1), Log (l2, info2) -> equal_log_entries l1 l2 && info1 = info2 + | Log _, _ | _, Log _ -> false (* All the other cases can be discharged through equality *) - | _ -> op1 = op2 + | ( ( Not | Minus _ | Length | IntToRat | MoneyToRat | RatToMoney | GetDay + | GetMonth | GetYear | FirstDayOfMonth | LastDayOfMonth | RoundMoney + | RoundDecimal ), + _ ) -> + op1 = op2 let equal_ops op1 op2 = match op1, op2 with @@ -260,86 +279,71 @@ let rec equal_list : fun es1 es2 -> try List.for_all2 equal es1 es2 with Invalid_argument _ -> false -and equal : 'a. ('a, 't) gexpr marked -> ('a, 't) gexpr marked -> bool = - fun (type a) (e1 : (a, 't) gexpr marked) (e2 : (a, 't) gexpr marked) -> - match Marked.unmark e1, Marked.unmark e2 with - | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 - | ETuple (es1, n1), ETuple (es2, n2) -> n1 = n2 && equal_list es1 es2 - | ETupleAccess (e1, id1, n1, tys1), ETupleAccess (e2, id2, n2, tys2) -> - equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 - | EInj (e1, id1, n1, tys1), EInj (e2, id2, n2, tys2) -> - equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 - | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> - n1 = n2 && equal e1 e2 && equal_list cases1 cases2 - | EArray es1, EArray es2 -> equal_list es1 es2 - | ELit l1, ELit l2 -> l1 = l2 - | EAbs (b1, tys1), EAbs (b2, tys2) -> - equal_typs_list tys1 tys2 - && - let vars1, body1 = Bindlib.unmbind b1 in - let body2 = Bindlib.msubst b2 (Array.map (fun x -> EVar x) vars1) in - equal body1 body2 - | EAssert e1, EAssert e2 -> equal e1 e2 - | EOp op1, EOp op2 -> equal_ops op1 op2 - | EDefault (exc1, def1, cons1), EDefault (exc2, def2, cons2) -> - equal def1 def2 && equal cons1 cons2 && equal_list exc1 exc2 - | EIfThenElse (if1, then1, else1), EIfThenElse (if2, then2, else2) -> - equal if1 if2 && equal then1 then2 && equal else1 else2 - | ErrorOnEmpty e1, ErrorOnEmpty e2 -> equal e1 e2 - | ERaise ex1, ERaise ex2 -> equal_except ex1 ex2 - | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> - equal etry1 etry2 && equal_except ex1 ex2 && equal ewith1 ewith2 - | _, _ -> false +and equal : type a. (a, 't) gexpr marked -> (a, 't) gexpr marked -> bool = + fun e1 e2 -> + match Marked.unmark e1, Marked.unmark e2 with + | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 + | ETuple (es1, n1), ETuple (es2, n2) -> n1 = n2 && equal_list es1 es2 + | ETupleAccess (e1, id1, n1, tys1), ETupleAccess (e2, id2, n2, tys2) -> + equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 + | EInj (e1, id1, n1, tys1), EInj (e2, id2, n2, tys2) -> + equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 + | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> + n1 = n2 && equal e1 e2 && equal_list cases1 cases2 + | EArray es1, EArray es2 -> equal_list es1 es2 + | ELit l1, ELit l2 -> l1 = l2 + | EAbs (b1, tys1), EAbs (b2, tys2) -> + equal_typs_list tys1 tys2 + && + let vars1, body1 = Bindlib.unmbind b1 in + let body2 = Bindlib.msubst b2 (Array.map (fun x -> EVar x) vars1) in + equal body1 body2 + | EApp (e1, args1), EApp (e2, args2) -> equal e1 e2 && equal_list args1 args2 + | EAssert e1, EAssert e2 -> equal e1 e2 + | EOp op1, EOp op2 -> equal_ops op1 op2 + | EDefault (exc1, def1, cons1), EDefault (exc2, def2, cons2) -> + equal def1 def2 && equal cons1 cons2 && equal_list exc1 exc2 + | EIfThenElse (if1, then1, else1), EIfThenElse (if2, then2, else2) -> + equal if1 if2 && equal then1 then2 && equal else1 else2 + | ErrorOnEmpty e1, ErrorOnEmpty e2 -> equal e1 e2 + | ERaise ex1, ERaise ex2 -> equal_except ex1 ex2 + | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> + equal etry1 etry2 && equal_except ex1 ex2 && equal ewith1 ewith2 + | ( ( EVar _ | ETuple _ | ETupleAccess _ | EInj _ | EMatch _ | EArray _ + | ELit _ | EAbs _ | EApp _ | EAssert _ | EOp _ | EDefault _ + | EIfThenElse _ | ErrorOnEmpty _ | ERaise _ | ECatch _ ), + _ ) -> + false -let free_vars : 'a. ('a, 't) gexpr marked -> ('a, 't) gexpr Var.Set.t = - fun (type a) (e : (a, 't) gexpr marked) -> - let rec aux : (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = - fun e -> - match Marked.unmark e with - | EOp _ | ELit _ | ERaise _ -> Var.Set.empty - | EVar v -> Var.Set.singleton v - | ETuple (es, _) -> - es |> List.map aux |> List.fold_left Var.Set.union Var.Set.empty - | EArray es -> - es |> List.map aux |> List.fold_left Var.Set.union Var.Set.empty - | _ -> Var.Set.empty - in - aux e - -let rec free_vars : 'a. ('a, 't) gexpr marked -> ('a, 't) gexpr Var.Set.t = - fun (type a) (e : (a, 't) gexpr marked) : (a, 't) gexpr Var.Set.t -> - match Marked.unmark e with - | EOp _ | ELit _ | ERaise _ -> Var.Set.empty - | EVar v -> Var.Set.singleton v - | ETuple (es, _) -> - es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty - | EArray es -> - es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty - | ETupleAccess (e1, _, _, _) -> free_vars e1 - | EAssert e1 -> free_vars e1 - | EInj (e1, _, _, _) -> free_vars e1 - | ErrorOnEmpty e1 -> free_vars e1 - | ECatch (etry, ex, ewith) -> - Var.Set.union (free_vars etry) (free_vars ewith) - | EApp (e1, es) -> - e1 :: es - |> List.map free_vars - |> List.fold_left Var.Set.union Var.Set.empty - | EMatch (e1, es, _) -> - e1 :: es - |> List.map free_vars - |> List.fold_left Var.Set.union Var.Set.empty - | EDefault (es, ejust, econs) -> - ejust :: econs :: es - |> List.map free_vars - |> List.fold_left Var.Set.union Var.Set.empty - | EIfThenElse (e1, e2, e3) -> - [e1; e2; e3] - |> List.map free_vars - |> List.fold_left Var.Set.union Var.Set.empty - | EAbs (binder, _) -> - let vs, body = Bindlib.unmbind binder in - Array.fold_right Var.Set.remove vs (free_vars body) +let rec free_vars : type a. (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = + fun e -> + match Marked.unmark e with + | EOp _ | ELit _ | ERaise _ -> Var.Set.empty + | EVar v -> Var.Set.singleton v + | ETuple (es, _) -> + es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty + | EArray es -> + es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty + | ETupleAccess (e1, _, _, _) -> free_vars e1 + | EAssert e1 -> free_vars e1 + | EInj (e1, _, _, _) -> free_vars e1 + | ErrorOnEmpty e1 -> free_vars e1 + | ECatch (etry, _, ewith) -> Var.Set.union (free_vars etry) (free_vars ewith) + | EApp (e1, es) -> + e1 :: es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty + | EMatch (e1, es, _) -> + e1 :: es |> List.map free_vars |> List.fold_left Var.Set.union Var.Set.empty + | EDefault (es, ejust, econs) -> + ejust :: econs :: es + |> List.map free_vars + |> List.fold_left Var.Set.union Var.Set.empty + | EIfThenElse (e1, e2, e3) -> + [e1; e2; e3] + |> List.map free_vars + |> List.fold_left Var.Set.union Var.Set.empty + | EAbs (binder, _) -> + let vs, body = Bindlib.unmbind binder in + Array.fold_right Var.Set.remove vs (free_vars body) let remove_logging_calls e = let rec f () e = @@ -351,28 +355,28 @@ let remove_logging_calls e = let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e -let rec size : 'a. ('a, 't) gexpr marked -> int = - fun (type a) (e : (a, 't) gexpr marked) -> - match Marked.unmark e with - | EVar _ | ELit _ | EOp _ -> 1 - | ETuple (args, _) -> List.fold_left (fun acc arg -> acc + size arg) 1 args - | EArray args -> List.fold_left (fun acc arg -> acc + size arg) 1 args - | ETupleAccess (e1, _, _, _) -> size e1 + 1 - | EInj (e1, _, _, _) -> size e1 + 1 - | EAssert e1 -> size e1 + 1 - | ErrorOnEmpty e1 -> size e1 + 1 - | EMatch (arg, args, _) -> - List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args - | EApp (arg, args) -> - List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args - | EAbs (binder, _) -> - let _, body = Bindlib.unmbind binder in - 1 + size body - | EIfThenElse (e1, e2, e3) -> 1 + size e1 + size e2 + size e3 - | EDefault (exceptions, just, cons) -> - List.fold_left - (fun acc except -> acc + size except) - (1 + size just + size cons) - exceptions - | ERaise _ -> 1 - | ECatch (etry, _, ewith) -> 1 + size etry + size ewith +let rec size : type a. (a, 't) gexpr marked -> int = + fun e -> + match Marked.unmark e with + | EVar _ | ELit _ | EOp _ -> 1 + | ETuple (args, _) -> List.fold_left (fun acc arg -> acc + size arg) 1 args + | EArray args -> List.fold_left (fun acc arg -> acc + size arg) 1 args + | ETupleAccess (e1, _, _, _) -> size e1 + 1 + | EInj (e1, _, _, _) -> size e1 + 1 + | EAssert e1 -> size e1 + 1 + | ErrorOnEmpty e1 -> size e1 + 1 + | EMatch (arg, args, _) -> + List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args + | EApp (arg, args) -> + List.fold_left (fun acc arg -> acc + size arg) (1 + size arg) args + | EAbs (binder, _) -> + let _, body = Bindlib.unmbind binder in + 1 + size body + | EIfThenElse (e1, e2, e3) -> 1 + size e1 + size e2 + size e3 + | EDefault (exceptions, just, cons) -> + List.fold_left + (fun acc except -> acc + size except) + (1 + size just + size cons) + exceptions + | ERaise _ -> 1 + | ECatch (etry, _, ewith) -> 1 + size etry + size ewith diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index b4182023..6371530b 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -18,7 +18,7 @@ (** Functions handling the expressions of [shared_ast] *) open Utils -open Types +open Definitions (** {2 Boxed constructors} *) @@ -191,12 +191,20 @@ val empty_thunked_term : val make_let_in : 'e Bindlib.var -> - typ Utils.Marked.pos -> - ((_ any, 'm mark) gexpr as 'e) marked Bindlib.box -> + marked_typ -> + 'e anyexpr marked Bindlib.box -> 'e marked Bindlib.box -> Utils.Pos.t -> 'e marked Bindlib.box +val make_multiple_let_in : + 'e Var.vars -> + marked_typ list -> + 'e marked Bindlib.box list -> + 'e marked Bindlib.box -> + Pos.t -> + 'e marked Bindlib.box + (** {2 Transformations} *) val remove_logging_calls : diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index f4d2ca27..a840d103 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -16,7 +16,7 @@ open Utils open String_common -open Types +open Definitions let typ_needs_parens (e : typ) : bool = match e with TArrow _ | TArray _ -> true | _ -> false diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index 59e8bf51..613102a9 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -17,7 +17,7 @@ (** Printing functions for the default calculus AST *) open Utils -open Types +open Definitions (** {1 Common syntax highlighting helpers}*) diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index e2d6b475..49e470fc 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -15,16 +15,17 @@ License for the specific language governing permissions and limitations under the License. *) -open Types +open Definitions -let untype (prg : ('a, 'm mark) gexpr program) : - ('a, untyped mark) gexpr program = - { - prg with - scopes = - Bindlib.unbox - (Scope.map_exprs ~f:Expr.untype ~varf:Var.translate prg.scopes); - } +let map_exprs ~f ~varf { scopes; decl_ctx } = + Bindlib.box_apply + (fun scopes -> { scopes; decl_ctx }) + (Scope.map_exprs ~f ~varf scopes) + +let untype : 'm. ('a, 'm mark) gexpr program -> ('a, untyped mark) gexpr program + = + fun (prg : ('a, 'm mark) gexpr program) -> + Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) let rec find_scope name vars = function | Nil -> raise Not_found diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index 65225ac0..08acd682 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -15,13 +15,24 @@ License for the specific language governing permissions and limitations under the License. *) -open Types +open Definitions (** {2 Transformations} *) -val untype : ('a any, 'm mark) gexpr program -> ('a, untyped mark) gexpr program +val map_exprs : + f:('expr1 marked -> 'expr2 marked Bindlib.box) -> + varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + 'expr1 program -> + 'expr2 program Bindlib.box -val to_expr : 'e anyexpr program -> ScopeName.t -> 'e marked Bindlib.box +val untype : + (([< dcalc | lcalc ] as 'a), 'm mark) gexpr program -> + ('a, untyped mark) gexpr program + +val to_expr : + (([< dcalc | lcalc ], _) gexpr as 'e) program -> + ScopeName.t -> + 'e marked Bindlib.box (** Usage: [build_whole_program_expr program main_scope] builds an expression corresponding to the main program and returning the main scope as a function. *) diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index 16c01de9..ce0eece1 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -16,7 +16,7 @@ the License. *) open Utils -open Types +open Definitions let rec fold_left_lets ~f ~init scope_body_expr = match scope_body_expr with diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 14c8f1ad..1d53a22f 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -18,7 +18,7 @@ (** Functions handling the scope structures of [shared_ast] *) open Utils -open Types +open Definitions (** {2 Traversal functions} *) diff --git a/compiler/shared_ast/shared_ast.ml b/compiler/shared_ast/shared_ast.ml index 5158089a..5d858f08 100644 --- a/compiler/shared_ast/shared_ast.ml +++ b/compiler/shared_ast/shared_ast.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -include Types +include Definitions module Var = Var module Expr = Expr module Scope = Scope diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld index b8faa8cf..f5acfd58 100644 --- a/compiler/shared_ast/shared_ast.mld +++ b/compiler/shared_ast/shared_ast.mld @@ -3,11 +3,12 @@ This module contains a generic AST structure, various type definitions and helpers that are reused in various passes of the compiler. -{1 The {!modules: Shared_ast.Types} module} +{1 The {!modules: Shared_ast.Definitions} module} -The main module {!modules: Shared_ast.Types} is exposed at top-level of the library (so that [open -Shared_ast] gives access to the structures). It defines literals, operators, -and in particular the type {!types: Shared_ast.gexpr}. +The main module {!modules: Shared_ast.Definitions} is exposed at top-level of +the library (so that [open Shared_ast] gives access to the structures). It +defines literals, operators, and in particular the type {!types: +Shared_ast.gexpr}. The {!types: Shared_ast.gexpr} type regroups all the cases for the {{: ../dcalc.html} Dcalc} and {{: ../lcalc.html} Lcalc} ASTs, with unconstrained @@ -19,7 +20,8 @@ For example, Lcalc expressions are then defined as [type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.gexpr]. This makes it possible to write a single function that works on the different -ASTs, by having it take a [('a, _) gexpr] as input. +ASTs, by having it take a [('a, _) gexpr] as input, while retaining a much +stricter policy than polymorphic variants. The module additionally defines the encompassing [scope] and [program] structures that are also shared between different compiler passes. @@ -30,5 +32,9 @@ The {!modules: Shared_ast.Var} defines ['e Var.Set.t] and [('e, _) Var.Map.t] types that are useful to handle variables for the different ['e] expression types without re-instanciating [Set.Make] and [Map.Make] each time. -[!modules: Shared_ast.Expr} contains various helpers to build well-formed +{!modules: Shared_ast.Expr} contains various helpers to build well-formed expressions, and for traversal. + +{!modules: Shared_ast.Scope Shared_ast.Program} are dedicated to handling the +program structure around expressions. Note that these don't make sense for the +early compiler passes (up to [Scopelang]). diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index bb69eca6..95bdd989 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Types +open Definitions (** {1 Variables and their collections} *) @@ -24,6 +24,7 @@ open Types type 'e t = 'e anyexpr Bindlib.var type 'e vars = 'e anyexpr Bindlib.mvar type 'e binder = ('e, 'e marked) Bindlib.binder + let make (name : string) : 'e t = Bindlib.new_var (fun x -> EVar x) name let compare = Bindlib.compare_vars let eq = Bindlib.eq_vars diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index b99b3ed5..2daca3cc 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -14,7 +14,7 @@ License for the specific language governing permissions and limitations under the License. *) -open Types +open Definitions (** {1 Variables and their collections} *) diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 85643175..7fd2e673 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -913,7 +913,7 @@ and disambiguate_match_and_build_expression let case_body = translate_expr scope inside_definition_of ctxt case.Ast.match_case_expr in - let e_binder = Bindlib.bind_mvar (Array.of_list [param_var]) case_body in + let e_binder = Bindlib.bind_mvar [| param_var |] case_body in let case_expr = bind_case_body c_uid e_uid ctxt case_body e_binder in ( Scopelang.Ast.EnumConstructorMap.add c_uid case_expr cases_d, Some e_uid, @@ -968,9 +968,7 @@ and disambiguate_match_and_build_expression let case_body = translate_expr scope inside_definition_of ctxt match_case_expr in - let e_binder = - Bindlib.bind_mvar (Array.of_list [payload_var]) case_body - in + let e_binder = Bindlib.bind_mvar [| payload_var |] case_body in (* For each missing cases, binds the wildcard payload. *) Scopelang.Ast.EnumConstructorMap.fold diff --git a/compiler/utils/uid.ml b/compiler/utils/uid.ml index 00f7f951..f9a29873 100644 --- a/compiler/utils/uid.ml +++ b/compiler/utils/uid.ml @@ -28,6 +28,7 @@ module type Id = sig val fresh : info -> t val get_info : t -> info val compare : t -> t -> int + val equal : t -> t -> bool val format_t : Format.formatter -> t -> unit val hash : t -> int end @@ -44,6 +45,7 @@ module Make (X : Info) () : Id with type info = X.info = struct let get_info (uid : t) : X.info = uid.info let compare (x : t) (y : t) : int = compare x.id y.id + let equal x y = Int.equal x.id y.id let format_t (fmt : Format.formatter) (x : t) : unit = X.format_info fmt x.info diff --git a/compiler/utils/uid.mli b/compiler/utils/uid.mli index 43352e4c..23b81896 100644 --- a/compiler/utils/uid.mli +++ b/compiler/utils/uid.mli @@ -39,6 +39,7 @@ module type Id = sig val fresh : info -> t val get_info : t -> info val compare : t -> t -> int + val equal : t -> t -> bool val format_t : Format.formatter -> t -> unit val hash : t -> int end diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 09d217d2..7bba760a 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -132,10 +132,10 @@ let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed marked_expr) : (generate_vc_must_not_return_empty ctx) body in ( vc_body_expr, - List.fold_left - (fun acc (var, ty) -> Var.Map.add var ty acc) - vc_body_ty - (List.map2 (fun x y -> x, y) (Array.to_list vars) typs) ) + snd + @@ List.fold_left + (fun (i, acc) ty -> i + 1, Var.Map.add vars.(i) ty acc) + (0, vc_body_ty) typs ) | EApp (f, args) -> (* We assume here that function calls never return empty error, which implies all functions have been checked never to return empty errors. *) From 54eee2edeab6d0f84e7442968dcd7b807a8c235b Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Tue, 23 Aug 2022 15:23:52 +0200 Subject: [PATCH 11/31] Rationalise the tuple / enum types This will allow to unify with types used earlier in the pipeline (`Scopelang.Ast.typ`). It seems cleaner! But some areas may warrant a later clean-up, in particular handling of options and their types in the backends, or possible name conflicts of structs/enums with built-in types when printing. --- compiler/dcalc/ast.ml | 1 - compiler/dcalc/ast.mli | 1 - compiler/dcalc/interpreter.ml | 11 +- compiler/dcalc/typing.ml | 103 +++++++++++-------- compiler/lcalc/compile_without_exceptions.ml | 10 +- compiler/lcalc/to_ocaml.ml | 20 ++-- compiler/plugins/api_web.ml | 30 +++--- compiler/plugins/json_schema.ml | 18 ++-- compiler/scalc/compile_from_lambda.ml | 10 +- compiler/scalc/to_python.ml | 8 +- compiler/scopelang/scope_to_dcalc.ml | 24 ++--- compiler/shared_ast/definitions.ml | 6 +- compiler/shared_ast/expr.ml | 14 ++- compiler/shared_ast/print.ml | 9 +- compiler/shared_ast/scope.ml | 24 +---- compiler/verification/z3backend.real.ml | 15 +-- 16 files changed, 146 insertions(+), 158 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index f3bdb1f3..c3678673 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -15,7 +15,6 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils open Shared_ast type lit = dcalc glit diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index f3d91cea..3cdb3d12 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -17,7 +17,6 @@ (** Abstract syntax tree of the default calculus intermediate representation *) -open Utils open Shared_ast type lit = dcalc glit diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 89225d5e..5743c3a9 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -488,15 +488,16 @@ let interpret_program : fun (ctx : decl_ctx) (e : 'm Ast.marked_expr) : (Uid.MarkedString.info * 'm Ast.marked_expr) list -> match evaluate_expr ctx e with - | EAbs (_, [((TTuple (taus, Some s_in), _) as targs)]), mark_e -> begin + | EAbs (_, [((TStruct s_in, _) as targs)]), mark_e -> begin (* At this point, the interpreter seeks to execute the scope but does not have a way to retrieve input values from the command line. [taus] contain - the types of the scope arguments. For [context] arguments, we cann - provide an empty thunked term. But for [input] arguments of another type, - we cannot provide anything so we have to fail. *) + the types of the scope arguments. For [context] arguments, we can provide + an empty thunked term. But for [input] arguments of another type, we + cannot provide anything so we have to fail. *) + let taus = StructMap.find s_in ctx.ctx_structs in let application_term = List.map - (fun ty -> + (fun (_, ty) -> match Marked.unmark ty with | TArrow ((TLit TUnit, _), ty_in) -> Expr.empty_thunked_term diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index dfa2fa20..89f8eefe 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -38,8 +38,10 @@ type unionfind_typ = typ Marked.pos UnionFind.elem and typ = | TLit of A.typ_lit | TArrow of unionfind_typ * unionfind_typ - | TTuple of unionfind_typ list * A.StructName.t option - | TEnum of unionfind_typ list * A.EnumName.t + | TTuple of unionfind_typ list + | TStruct of A.StructName.t + | TEnum of A.EnumName.t + | TOption of unionfind_typ | TArray of unionfind_typ | TAny of Any.t @@ -47,8 +49,10 @@ let rec typ_to_ast (ty : unionfind_typ) : A.marked_typ = let ty, pos = UnionFind.get (UnionFind.find ty) in match ty with | TLit l -> A.TLit l, pos - | TTuple (ts, s) -> A.TTuple (List.map typ_to_ast ts, s), pos - | TEnum (ts, e) -> A.TEnum (List.map typ_to_ast ts, e), pos + | TTuple ts -> A.TTuple (List.map typ_to_ast ts), pos + | TStruct s -> A.TStruct s, pos + | TEnum e -> A.TEnum e, pos + | TOption t -> A.TOption (typ_to_ast t), pos | TArrow (t1, t2) -> A.TArrow (typ_to_ast t1, typ_to_ast t2), pos | TAny _ -> A.TAny, pos | TArray t1 -> A.TArray (typ_to_ast t1), pos @@ -58,8 +62,10 @@ let rec ast_to_typ (ty : A.marked_typ) : unionfind_typ = match Marked.unmark ty with | A.TLit l -> TLit l | A.TArrow (t1, t2) -> TArrow (ast_to_typ t1, ast_to_typ t2) - | A.TTuple (ts, s) -> TTuple (List.map (fun t -> ast_to_typ t) ts, s) - | A.TEnum (ts, e) -> TEnum (List.map (fun t -> ast_to_typ t) ts, e) + | A.TTuple ts -> TTuple (List.map ast_to_typ ts) + | A.TStruct s -> TStruct s + | A.TEnum e -> TEnum e + | A.TOption t -> TOption (ast_to_typ t) | A.TArray t -> TArray (ast_to_typ t) | A.TAny -> TAny (Any.fresh ()) in @@ -85,14 +91,16 @@ let rec format_typ let typ = UnionFind.get (UnionFind.find typ) in match Marked.unmark typ with | TLit l -> Format.fprintf fmt "%a" A.Print.tlit l - | TTuple (ts, None) -> + | TTuple ts -> Format.fprintf fmt "@[(%a)]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ *@ ") (fun fmt t -> Format.fprintf fmt "%a" format_typ t)) ts - | TTuple (_ts, Some s) -> Format.fprintf fmt "%a" A.StructName.format_t s - | TEnum (_ts, e) -> Format.fprintf fmt "%a" A.EnumName.format_t e + | TStruct s -> Format.fprintf fmt "%a" A.StructName.format_t s + | TEnum e -> Format.fprintf fmt "%a" A.EnumName.format_t e + | TOption t -> + Format.fprintf fmt "@[%a@ %s@]" format_typ_with_parens t "eoption" | TArrow (t1, t2) -> Format.fprintf fmt "@[%a →@ %a@]" format_typ_with_parens t1 format_typ t2 @@ -126,25 +134,29 @@ let rec unify unify e t11 t21; unify e t12 t22; None - | TTuple (ts1, s1), TTuple (ts2, s2) -> - if s1 = s2 && List.length ts1 = List.length ts2 then begin - List.iter2 (unify e) ts1 ts2; - None - end - else raise_type_error () - | TEnum (ts1, e1), TEnum (ts2, e2) -> - if e1 = e2 && List.length ts1 = List.length ts2 then begin + | TTuple ts1, TTuple ts2 -> + if List.length ts1 = List.length ts2 then begin List.iter2 (unify e) ts1 ts2; None end else raise_type_error () + | TStruct s1, TStruct s2 -> + if A.StructName.equal s1 s2 then None else raise_type_error () + | TEnum e1, TEnum e2 -> + if A.EnumName.equal e1 e2 then None else raise_type_error () + | TOption t1, TOption t2 -> + unify e t1 t2; + None | TArray t1', TArray t2' -> unify e t1' t2'; None | TAny _, TAny _ -> None | TAny _, _ -> Some t2_repr | _, TAny _ -> Some t1_repr - | _ -> raise_type_error () + | ( ( TLit _ | TArrow _ | TTuple _ | TStruct _ | TEnum _ | TOption _ + | TArray _ ), + _ ) -> + raise_type_error () in let t_union = UnionFind.union t1 t2 in match repr with None -> () | Some t_repr -> UnionFind.set t_union t_repr @@ -322,14 +334,21 @@ let rec typecheck_expr_bottom_up | A.ELit LUnit as e1 -> Bindlib.box @@ mark_with_uf e1 (TLit TUnit) | A.ELit LEmptyError as e1 -> Bindlib.box @@ mark_with_uf e1 (TAny (Any.fresh ())) - | A.ETuple (es, s) -> + | A.ETuple (es, None) -> let+ es = bmap (typecheck_expr_bottom_up ctx env) es in - mark_with_uf (ETuple (es, s)) (TTuple (List.map ty es, s)) + mark_with_uf (ETuple (es, None)) (TTuple (List.map ty es)) + | A.ETuple (es, Some s_name) -> + let tys = + List.map + (fun (_, ty) -> ast_to_typ ty) + (A.StructMap.find s_name ctx.A.ctx_structs) + in + let+ es = bmap2 (typecheck_expr_top_down ctx env) tys es in + mark_with_uf (ETuple (es, Some s_name)) (TStruct s_name) | A.ETupleAccess (e1, n, s, typs) -> begin let utyps = List.map ast_to_typ typs in - let+ e1 = - typecheck_expr_top_down ctx env (unionfind_make (TTuple (utyps, s))) e1 - in + let tuple_ty = match s with None -> TTuple utyps | Some s -> TStruct s in + let+ e1 = typecheck_expr_top_down ctx env (unionfind_make tuple_ty) e1 in match List.nth_opt utyps n with | Some t' -> mark (ETupleAccess (e1, n, s, typs)) t' | None -> @@ -350,12 +369,12 @@ let rec typecheck_expr_bottom_up n (List.length ts') in let+ e1' = typecheck_expr_top_down ctx env ts_n e1 in - mark_with_uf (A.EInj (e1', n, e_name, ts)) (TEnum (ts', e_name)) + mark_with_uf (A.EInj (e1', n, e_name, ts)) (TEnum e_name) | A.EMatch (e1, es, e_name) -> let enum_cases = List.map (fun e' -> unionfind_make ~pos:e' (TAny (Any.fresh ()))) es in - let t_e1 = UnionFind.make (add_pos e1 (TEnum (enum_cases, e_name))) in + let t_e1 = UnionFind.make (add_pos e1 (TEnum e_name)) in let t_ret = unionfind_make ~pos:e (TAny (Any.fresh ())) in let+ e1' = typecheck_expr_top_down ctx env t_e1 e1 and+ es' = @@ -490,16 +509,25 @@ and typecheck_expr_top_down Bindlib.box @@ unify_and_mark e1 (unionfind_make (TLit TUnit)) | A.ELit LEmptyError as e1 -> Bindlib.box @@ unify_and_mark e1 (unionfind_make (TAny (Any.fresh ()))) - | A.ETuple (es, s) -> + | A.ETuple (es, None) -> let+ es' = bmap (typecheck_expr_bottom_up ctx env) es in unify_and_mark - (A.ETuple (es', s)) - (unionfind_make (TTuple (List.map ty es', s))) + (A.ETuple (es', None)) + (unionfind_make (TTuple (List.map ty es'))) + | A.ETuple (es, Some s_name) -> + let tys = + List.map + (fun (_, ty) -> ast_to_typ ty) + (A.StructMap.find s_name ctx.A.ctx_structs) + in + let+ es' = bmap2 (typecheck_expr_top_down ctx env) tys es in + unify_and_mark + (A.ETuple (es', Some s_name)) + (unionfind_make (TStruct s_name)) | A.ETupleAccess (e1, n, s, typs) -> begin let typs' = List.map ast_to_typ typs in - let+ e1' = - typecheck_expr_top_down ctx env (unionfind_make (TTuple (typs', s))) e1 - in + let tuple_ty = match s with None -> TTuple typs' | Some s -> TStruct s in + let+ e1' = typecheck_expr_top_down ctx env (unionfind_make tuple_ty) e1 in match List.nth_opt typs' n with | Some t1n -> unify_and_mark (A.ETupleAccess (e1', n, s, typs)) t1n | None -> @@ -520,17 +548,13 @@ and typecheck_expr_top_down n (List.length ts) in let+ e1' = typecheck_expr_top_down ctx env ts_n e1 in - unify_and_mark - (A.EInj (e1', n, e_name, ts)) - (unionfind_make (TEnum (ts', e_name))) + unify_and_mark (A.EInj (e1', n, e_name, ts)) (unionfind_make (TEnum e_name)) | A.EMatch (e1, es, e_name) -> let enum_cases = List.map (fun e' -> unionfind_make ~pos:e' (TAny (Any.fresh ()))) es in let e1' = - typecheck_expr_top_down ctx env - (unionfind_make ~pos:e1 (TEnum (enum_cases, e_name))) - e1 + typecheck_expr_top_down ctx env (unionfind_make ~pos:e1 (TEnum e_name)) e1 in let t_ret = unionfind_make ~pos:e (TAny (Any.fresh ())) in let+ e1' @@ -666,10 +690,7 @@ let infer_types_program prg = } -> let scope_pos = Marked.get_mark (A.ScopeName.get_info scope_name) in let struct_ty struct_name = - let struc = A.StructMap.find struct_name ctx.A.ctx_structs in - ast_to_typ - (Marked.mark scope_pos - (A.TTuple (List.map snd struc, Some struct_name))) + UnionFind.make (Marked.mark scope_pos (TStruct struct_name)) in let ty_in = struct_ty s_in in let ty_out = struct_ty s_out in diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index a1edf8aa..2defea99 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -126,14 +126,14 @@ let rec translate_typ (tau : typ Marked.pos) : typ Marked.pos = begin match Marked.unmark tau with | TLit l -> TLit l - | TTuple (ts, s) -> TTuple (List.map translate_typ ts, s) - | TEnum (ts, en) -> TEnum (List.map translate_typ ts, en) + | TTuple ts -> TTuple (List.map translate_typ ts) + | TStruct s -> TStruct s + | TEnum en -> TEnum en + | TOption t -> TOption t | TAny -> TAny | TArray ts -> TArray (translate_typ ts) (* catala is not polymorphic *) - | TArrow ((TLit TUnit, pos_unit), t2) -> - TEnum ([TLit TUnit, pos_unit; translate_typ t2], A.option_enum) - (* TAny *) + | TArrow ((TLit TUnit, _), t2) -> TOption (translate_typ t2) | TArrow (t1, t2) -> TArrow (translate_typ t1, translate_typ t2) end diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index b3ad0fbb..fad64743 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -193,9 +193,8 @@ let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit | TLit TMoney -> Format.fprintf fmt "embed_money" | TLit TDate -> Format.fprintf fmt "embed_date" | TLit TDuration -> Format.fprintf fmt "embed_duration" - | TTuple (_, Some s_name) -> - Format.fprintf fmt "embed_%a" format_struct_name s_name - | TEnum (_, e_name) -> Format.fprintf fmt "embed_%a" format_enum_name e_name + | TStruct s_name -> Format.fprintf fmt "embed_%a" format_struct_name s_name + | TEnum e_name -> Format.fprintf fmt "embed_%a" format_enum_name e_name | TArray ty -> Format.fprintf fmt "embed_array (%a)" typ_embedding_name ty | _ -> Format.fprintf fmt "unembeddable" @@ -209,22 +208,17 @@ let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = in match Marked.unmark typ with | TLit l -> Format.fprintf fmt "%a" Print.tlit l - | TTuple (ts, None) -> + | TTuple ts -> Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ *@ ") format_typ_with_parens) ts - | TTuple (_, Some s) -> - Format.fprintf fmt "%a.t" format_to_module_name (`Sname s) - | TEnum ([t], e) when EnumName.compare e Ast.option_enum = 0 -> + | TStruct s -> Format.fprintf fmt "%a.t" format_to_module_name (`Sname s) + | TOption t -> Format.fprintf fmt "@[(%a)@] %a" format_typ_with_parens t - format_enum_name e - | TEnum (_, e) when EnumName.compare e Ast.option_enum = 0 -> - Errors.raise_spanned_error (Marked.get_mark typ) - "Internal Error: found an typing parameter for an eoption type of the \ - wrong length." - | TEnum (_ts, e) -> Format.fprintf fmt "%a.t" format_to_module_name (`Ename e) + format_enum_name Ast.option_enum + | TEnum e -> Format.fprintf fmt "%a.t" format_to_module_name (`Ename e) | TArrow (t1, t2) -> Format.fprintf fmt "@[%a ->@ %a@]" format_typ_with_parens t1 format_typ_with_parens t2 diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index ecec403f..9b56f2bb 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -67,18 +67,14 @@ module To_jsoo = struct in match Marked.unmark typ with | TLit l -> Format.fprintf fmt "%a" format_tlit l - | TTuple (_, Some s) -> Format.fprintf fmt "%a Js.t" format_struct_name s - | TTuple (_, None) -> + | TStruct s -> Format.fprintf fmt "%a Js.t" format_struct_name s + | TTuple _ -> (* Tuples are encoded as an javascript polymorphic array. *) Format.fprintf fmt "Js.Unsafe.any_js_array Js.t " - | TEnum ([t], e) when EnumName.compare e option_enum = 0 -> + | TOption t -> Format.fprintf fmt "@[(%a)@] %a" format_typ_with_parens t - format_enum_name e - | TEnum (_, e) when EnumName.compare e option_enum = 0 -> - Errors.raise_spanned_error (Marked.get_mark typ) - "Internal Error: found an typing parameter for an eoption type of the \ - wrong length." - | TEnum (_, e) -> Format.fprintf fmt "%a Js.t" format_enum_name e + format_enum_name Lcalc.Ast.option_enum + | TEnum e -> Format.fprintf fmt "%a Js.t" format_enum_name e | TArray t1 -> Format.fprintf fmt "@[%a@ Js.js_array Js.t@]" format_typ_with_parens t1 | TAny -> Format.fprintf fmt "Js.Unsafe.any Js.t" @@ -94,13 +90,12 @@ module To_jsoo = struct | TLit TMoney -> Format.fprintf fmt "Js.number_of_float %@%@ money_to_float" | TLit TDuration -> Format.fprintf fmt "duration_to_jsoo" | TLit TDate -> Format.fprintf fmt "date_to_jsoo" - | TEnum (_, ename) -> Format.fprintf fmt "%a_to_jsoo" format_enum_name ename - | TTuple (_, Some sname) -> - Format.fprintf fmt "%a_to_jsoo" format_struct_name sname + | TEnum ename -> Format.fprintf fmt "%a_to_jsoo" format_enum_name ename + | TStruct sname -> Format.fprintf fmt "%a_to_jsoo" format_struct_name sname | TArray t -> Format.fprintf fmt "Js.array %@%@ Array.map (fun x -> %a x)" format_typ_to_jsoo t - | TAny | TTuple (_, None) -> Format.fprintf fmt "Js.Unsafe.inject" + | TAny | TTuple _ -> Format.fprintf fmt "Js.Unsafe.inject" | _ -> Format.fprintf fmt "" let rec format_typ_of_jsoo fmt typ = @@ -113,9 +108,8 @@ module To_jsoo = struct "money_of_decimal %@%@ decimal_of_float %@%@ Js.float_of_number" | TLit TDuration -> Format.fprintf fmt "duration_of_jsoo" | TLit TDate -> Format.fprintf fmt "date_of_jsoo" - | TEnum (_, ename) -> Format.fprintf fmt "%a_of_jsoo" format_enum_name ename - | TTuple (_, Some sname) -> - Format.fprintf fmt "%a_of_jsoo" format_struct_name sname + | TEnum ename -> Format.fprintf fmt "%a_of_jsoo" format_enum_name ename + | TStruct sname -> Format.fprintf fmt "%a_of_jsoo" format_struct_name sname | TArray t -> Format.fprintf fmt "Array.map (fun x -> %a x) %@%@ Js.to_array" format_typ_of_jsoo t @@ -241,7 +235,7 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cname, typ) -> match Marked.unmark typ with - | TTuple (_, None) -> + | TTuple _ -> Cli.error_print "Tuples aren't supported yet in the conversion to JS" | _ -> @@ -266,7 +260,7 @@ module To_jsoo = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cname, typ) -> match Marked.unmark typ with - | TTuple (_, None) -> + | TTuple _ -> Cli.error_print "Tuples aren't yet supported in the conversion to JS..." | TLit TUnit -> diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 7441ce3e..3d0f38dd 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -72,10 +72,10 @@ module To_json = struct let rec fmt_type fmt (typ : marked_typ) = match Marked.unmark typ with | TLit tlit -> fmt_tlit fmt tlit - | TTuple (_, Some sname) -> + | TStruct sname -> Format.fprintf fmt "\"$ref\": \"#/definitions/%a\"" format_struct_name sname - | TEnum (_, ename) -> + | TEnum ename -> Format.fprintf fmt "\"$ref\": \"#/definitions/%a\"" format_enum_name ename | TArray t -> Format.fprintf fmt @@ -105,8 +105,8 @@ module To_json = struct (scope_def : 'e scope_def) = let get_name t = match Marked.unmark t with - | TTuple (_, Some sname) -> Format.asprintf "%a" format_struct_name sname - | TEnum (_, ename) -> Format.asprintf "%a" format_enum_name ename + | TStruct sname -> Format.asprintf "%a" format_struct_name sname + | TEnum ename -> Format.asprintf "%a" format_enum_name ename | _ -> failwith "unreachable: only structs and enums are collected." in let rec collect_required_type_defs_from_scope_input @@ -114,10 +114,12 @@ module To_json = struct let rec collect (acc : marked_typ list) (t : marked_typ) : marked_typ list = match Marked.unmark t with - | TTuple (_, Some s) -> + | TStruct s -> (* Scope's input is a struct. *) (t :: acc) @ collect_required_type_defs_from_scope_input s - | TEnum (ts, _) -> List.fold_left collect (t :: acc) ts + | TEnum e -> + List.fold_left collect (t :: acc) + (List.map snd (EnumMap.find e ctx.ctx_enums)) | TArray t -> collect acc t | _ -> acc in @@ -175,7 +177,7 @@ module To_json = struct ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@\n") (fun fmt typ -> match Marked.unmark typ with - | TTuple (_, Some sname) -> + | TStruct sname -> Format.fprintf fmt "@[\"%a\": {@\n\ \"type\": \"object\",@\n\ @@ -186,7 +188,7 @@ module To_json = struct format_struct_name sname (fmt_struct_properties ctx) sname - | TEnum (_, ename) -> + | TEnum ename -> Format.fprintf fmt "@[\"%a\": {@\n\ \"type\": \"object\",@\n\ diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 60fefc0d..b914b345 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -366,15 +366,7 @@ let translate_program (p : 'm L.program) : A.program = A.func_params = [ ( (scope_input_var_id, input_pos), - ( TTuple - ( List.map snd - (StructMap.find - scope_def.scope_body - .scope_body_input_struct - p.decl_ctx.ctx_structs), - Some - scope_def.scope_body.scope_body_input_struct - ), + ( TStruct scope_def.scope_body.scope_body_input_struct, input_pos ) ); ]; A.func_body = new_scope_body; diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index ae5e68a0..906e1e43 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -161,17 +161,17 @@ let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = | TLit TDate -> Format.fprintf fmt "Date" | TLit TDuration -> Format.fprintf fmt "Duration" | TLit TBool -> Format.fprintf fmt "bool" - | TTuple (ts, None) -> + | TTuple ts -> Format.fprintf fmt "Tuple[%a]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") (fun fmt t -> Format.fprintf fmt "%a" format_typ_with_parens t)) ts - | TTuple (_, Some s) -> Format.fprintf fmt "%a" format_struct_name s - | TEnum ([_; some_typ], e) when EnumName.compare e L.option_enum = 0 -> + | TStruct s -> Format.fprintf fmt "%a" format_struct_name s + | TOption some_typ -> (* We translate the option type with an overloading by Python's [None] *) Format.fprintf fmt "Optional[%a]" format_typ some_typ - | TEnum (_, e) -> Format.fprintf fmt "%a" format_enum_name e + | TEnum e -> Format.fprintf fmt "%a" format_enum_name e | TArrow (t1, t2) -> Format.fprintf fmt "Callable[[%a], %a]" format_typ_with_parens t1 format_typ_with_parens t2 diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 754ea25d..7fe6bb5d 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -62,18 +62,15 @@ let empty_ctx local_vars = Ast.VarMap.empty; } -let rec translate_typ (ctx : ctx) (t : Ast.typ Marked.pos) : typ Marked.pos = +let rec translate_typ (_ctx : ctx) (t : Ast.typ Marked.pos) : typ Marked.pos = Marked.same_mark_as (match Marked.unmark t with | Ast.TLit l -> TLit l - | Ast.TArrow (t1, t2) -> TArrow (translate_typ ctx t1, translate_typ ctx t2) - | Ast.TStruct s_uid -> - let s_fields = StructMap.find s_uid ctx.structs in - TTuple (List.map (fun (_, t) -> translate_typ ctx t) s_fields, Some s_uid) - | Ast.TEnum e_uid -> - let e_cases = EnumMap.find e_uid ctx.enums in - TEnum (List.map (fun (_, t) -> translate_typ ctx t) e_cases, e_uid) - | Ast.TArray t1 -> TArray (translate_typ ctx (Marked.same_mark_as t1 t)) + | Ast.TArrow (t1, t2) -> + TArrow (translate_typ _ctx t1, translate_typ _ctx t2) + | Ast.TStruct s_uid -> TStruct s_uid + | Ast.TEnum e_uid -> TEnum e_uid + | Ast.TArray t1 -> TArray (translate_typ _ctx (Marked.same_mark_as t1 t)) | Ast.TAny -> TAny) t @@ -580,14 +577,7 @@ let translate_rule ] in let result_tuple_var = Var.make "result" in - let result_tuple_typ = - ( TTuple - ( List.map - (fun (subvar, _) -> subvar.scope_var_typ, pos_sigma) - all_subscope_output_vars_dcalc, - Some called_scope_return_struct ), - pos_sigma ) - in + let result_tuple_typ = TStruct called_scope_return_struct, pos_sigma in let call_scope_let next = Bindlib.box_apply2 (fun next call_expr -> diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index bd5d8a76..998427e2 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -54,8 +54,10 @@ type marked_typ = typ Marked.pos and typ = | TLit of typ_lit - | TTuple of marked_typ list * StructName.t option - | TEnum of marked_typ list * EnumName.t + | TTuple of marked_typ list + | TStruct of StructName.t + | TEnum of EnumName.t + | TOption of marked_typ | TArrow of marked_typ * marked_typ | TArray of marked_typ | TAny diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index dd0f6f27..832fed7b 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -212,8 +212,7 @@ let make_multiple_let_in xs taus e1s e2 pos = (* let m_e1s = List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s in *) let m_e1s = fold_marks List.hd - (fun tys -> - TTuple (List.map (fun t -> t.ty) tys, None), (List.hd tys).pos) + (fun tys -> TTuple (List.map (fun t -> t.ty) tys), (List.hd tys).pos) (List.map (fun e -> Marked.get_mark (Bindlib.unbox e)) e1s) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in @@ -235,12 +234,17 @@ let is_value (type a) (e : (a, 'm mark) gexpr marked) = let rec equal_typs ty1 ty2 = match Marked.unmark ty1, Marked.unmark ty2 with | TLit l1, TLit l2 -> l1 = l2 - | TTuple (tys1, n1), TTuple (tys2, n2) -> n1 = n2 && equal_typs_list tys1 tys2 - | TEnum (tys1, n1), TEnum (tys2, n2) -> n1 = n2 && equal_typs_list tys1 tys2 + | TTuple tys1, TTuple tys2 -> equal_typs_list tys1 tys2 + | TStruct n1, TStruct n2 -> StructName.equal n1 n2 + | TEnum n1, TEnum n2 -> EnumName.equal n1 n2 + | TOption t1, TOption t2 -> equal_typs t1 t2 | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typs t1 t2 && equal_typs t1' t2' | TArray t1, TArray t2 -> equal_typs t1 t2 | TAny, TAny -> true - | (TLit _ | TTuple _ | TEnum _ | TArrow _ | TArray _ | TAny), _ -> false + | ( ( TLit _ | TTuple _ | TStruct _ | TEnum _ | TOption _ | TArrow _ + | TArray _ | TAny ), + _ ) -> + false and equal_typs_list tys1 tys2 = try List.for_all2 equal_typs tys1 tys2 with Invalid_argument _ -> false diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index a840d103..f3f79db8 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -72,13 +72,13 @@ let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = in match ty with | TLit l -> tlit fmt l - | TTuple (ts, None) -> + | TTuple ts -> Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " operator "*") (fun fmt t -> Format.fprintf fmt "%a" typ t)) (List.map Marked.unmark ts) - | TTuple (_args, Some s) -> + | TStruct s -> Format.fprintf fmt "@[%a%a%a%a@]" StructName.format_t s punctuation "{" (Format.pp_print_list @@ -89,7 +89,7 @@ let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = (Marked.unmark mty))) (StructMap.find s ctx.ctx_structs) punctuation "}" - | TEnum (_, e) -> + | TEnum e -> Format.fprintf fmt "@[%a%a%a%a@]" EnumName.format_t e punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " punctuation "|") @@ -98,6 +98,9 @@ let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = typ (Marked.unmark mty))) (EnumMap.find e ctx.ctx_enums) punctuation "]" + | TOption t -> + Format.fprintf fmt "@[%a@ %a@]" base_type "option" typ + (Marked.unmark t) | TArrow (t1, t2) -> Format.fprintf fmt "@[%a %a@ %a@]" typ_with_parens (Marked.unmark t1) operator "→" typ (Marked.unmark t2) diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index ce0eece1..b6517745 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -114,21 +114,13 @@ let rec unfold_body_expr (ctx : decl_ctx) (scope_let : 'e scope_body_expr) : scope_let_pos let build_typ_from_sig - (ctx : decl_ctx) + (_ctx : decl_ctx) (scope_input_struct_name : StructName.t) (scope_return_struct_name : StructName.t) (pos : Pos.t) : typ Marked.pos = - let scope_sig = StructMap.find scope_input_struct_name ctx.ctx_structs in - let scope_return_typ = - StructMap.find scope_return_struct_name ctx.ctx_structs - in - let result_typ = - TTuple (List.map snd scope_return_typ, Some scope_return_struct_name), pos - in - let input_typ = - TTuple (List.map snd scope_sig, Some scope_input_struct_name), pos - in - TArrow (input_typ, result_typ), pos + let input_typ = Marked.mark pos (TStruct scope_input_struct_name) in + let result_typ = Marked.mark pos (TStruct scope_return_struct_name) in + Marked.mark pos (TArrow (input_typ, result_typ)) type 'e scope_name_or_var = | ScopeName of ScopeName.t @@ -139,13 +131,7 @@ let to_expr (ctx : decl_ctx) (body : 'e scope_body) (mark_scope : 'm mark) : let var, body_expr = Bindlib.unbind body.scope_body_expr in let body_expr = unfold_body_expr ctx body_expr in Expr.make_abs [| var |] body_expr - [ - ( TTuple - ( List.map snd - (StructMap.find body.scope_body_input_struct ctx.ctx_structs), - Some body.scope_body_input_struct ), - Expr.mark_pos mark_scope ); - ] + [TStruct body.scope_body_input_struct, Expr.mark_pos mark_scope] mark_scope let format diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 7b122e89..89a3b572 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -162,7 +162,7 @@ let rec print_z3model_expr (ctx : context) (ty : typ Marked.pos) (e : Expr.expr) match Marked.unmark ty with | TLit ty -> print_lit ty - | TTuple (_, Some name) -> + | TStruct name -> let s = StructMap.find name ctx.ctx_decl.ctx_structs in let get_fieldname (fn : StructFieldName.t) : string = Marked.unmark (StructFieldName.get_info fn) @@ -180,9 +180,9 @@ let rec print_z3model_expr (ctx : context) (ty : typ Marked.pos) (e : Expr.expr) Format.asprintf "%s { %s }" (Marked.unmark (StructName.get_info name)) fields_str - | TTuple (_, None) -> + | TTuple _ -> failwith "[Z3 model]: Pretty-printing of unnamed structs not supported" - | TEnum (_tys, name) -> + | TEnum name -> (* The value associated to the enum is a single argument *) let e' = List.hd (Expr.get_args e) in let fd = Expr.get_func_decl e in @@ -197,6 +197,7 @@ let rec print_z3model_expr (ctx : context) (ty : typ Marked.pos) (e : Expr.expr) in Format.asprintf "%s (%s)" fd_name (print_z3model_expr ctx (snd case) e') + | TOption _ -> failwith "[Z3 model]: Pretty-printing of options not supported" | TArrow _ -> failwith "[Z3 model]: Pretty-printing of arrows not supported" | TArray _ -> (* For now, only the length of arrays is modeled *) @@ -265,10 +266,10 @@ let translate_typ_lit (ctx : context) (t : typ_lit) : Sort.sort = let rec translate_typ (ctx : context) (t : typ) : context * Sort.sort = match t with | TLit t -> ctx, translate_typ_lit ctx t - | TTuple (_, Some name) -> find_or_create_struct ctx name - | TTuple (_, None) -> - failwith "[Z3 encoding] TTuple type of unnamed struct not supported" - | TEnum (_, e) -> find_or_create_enum ctx e + | TStruct name -> find_or_create_struct ctx name + | TTuple _ -> failwith "[Z3 encoding] TTuple type not supported" + | TEnum e -> find_or_create_enum ctx e + | TOption _ -> failwith "[Z3 encoding] TOption type not supported" | TArrow _ -> failwith "[Z3 encoding] TArrow type not supported" | TArray _ -> (* For now, we are only encoding the (symbolic) length of an array. From 49e37c71b4c23db36c045a5faa45cc2fb4fc89b9 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Wed, 17 Aug 2022 17:14:29 +0200 Subject: [PATCH 12/31] Add scopelang / desugared cases to the shared AST expressions --- compiler/desugared/ast.ml | 35 ++++++--------- compiler/desugared/ast.mli | 11 ++--- compiler/desugared/dependency.ml | 18 ++++---- compiler/desugared/dependency.mli | 2 +- compiler/desugared/desugared_to_scope.ml | 20 ++++----- compiler/scopelang/ast.ml | 14 ------ compiler/scopelang/ast.mli | 5 --- compiler/scopelang/dependency.ml | 2 +- compiler/scopelang/print.ml | 4 +- compiler/scopelang/scope_to_dcalc.ml | 52 +++++++++++------------ compiler/shared_ast/definitions.ml | 45 +++++++++++++++----- compiler/surface/desugaring.ml | 54 ++++++++++-------------- compiler/surface/name_resolution.ml | 27 +++++------- compiler/surface/name_resolution.mli | 8 ++-- 14 files changed, 136 insertions(+), 161 deletions(-) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 1fb1067b..843fadf3 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -49,7 +49,7 @@ module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) module ScopeDef = struct type t = | Var of ScopeVar.t * StateName.t option - | SubScopeVar of Scopelang.Ast.SubScopeName.t * ScopeVar.t + | SubScopeVar of SubScopeName.t * ScopeVar.t (** In this case, the [ScopeVar.t] lives inside the context of the subscope's original declaration *) @@ -65,15 +65,14 @@ module ScopeDef = struct let cmp = ScopeVar.compare x y in if cmp = 0 then StateName.compare sx sy else cmp | SubScopeVar (x', x), SubScopeVar (y', y) -> - let cmp = Scopelang.Ast.SubScopeName.compare x' y' in + let cmp = SubScopeName.compare x' y' in if cmp = 0 then ScopeVar.compare x y else cmp let get_position x = match x with | Var (x, None) -> Marked.get_mark (ScopeVar.get_info x) | Var (_, Some sx) -> Marked.get_mark (StateName.get_info sx) - | SubScopeVar (x, _) -> - Marked.get_mark (Scopelang.Ast.SubScopeName.get_info x) + | SubScopeVar (x, _) -> Marked.get_mark (SubScopeName.get_info x) let format_t fmt x = match x with @@ -81,15 +80,13 @@ module ScopeDef = struct | Var (v, Some sv) -> Format.fprintf fmt "%a.%a" ScopeVar.format_t v StateName.format_t sv | SubScopeVar (s, v) -> - Format.fprintf fmt "%a.%a" Scopelang.Ast.SubScopeName.format_t s - ScopeVar.format_t v + Format.fprintf fmt "%a.%a" SubScopeName.format_t s ScopeVar.format_t v let hash x = match x with | Var (v, None) -> ScopeVar.hash v | Var (v, Some sv) -> Int.logxor (ScopeVar.hash v) (StateName.hash sv) - | SubScopeVar (w, v) -> - Int.logxor (Scopelang.Ast.SubScopeName.hash w) (ScopeVar.hash v) + | SubScopeVar (w, v) -> Int.logxor (SubScopeName.hash w) (ScopeVar.hash v) end module ScopeDefMap : Map.S with type key = ScopeDef.t = Map.Make (ScopeDef) @@ -100,9 +97,7 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t = Set.Make (ScopeDef) type location = | ScopeVar of ScopeVar.t Marked.pos * StateName.t option | SubScopeVar of - ScopeName.t - * Scopelang.Ast.SubScopeName.t Marked.pos - * ScopeVar.t Marked.pos + ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos module LocationSet : Set.S with type elt = location Marked.pos = Set.Make (struct @@ -119,7 +114,7 @@ Set.Make (struct if cmp = 0 then StateName.compare sx sy else cmp | ( SubScopeVar (_, (xsubindex, _), (xsubvar, _)), SubScopeVar (_, (ysubindex, _), (ysubvar, _)) ) -> - let c = Scopelang.Ast.SubScopeName.compare xsubindex ysubindex in + let c = SubScopeName.compare xsubindex ysubindex in if c = 0 then ScopeVar.compare xsubvar ysubvar else c | ScopeVar _, SubScopeVar _ -> -1 | SubScopeVar _, ScopeVar _ -> 1 @@ -132,11 +127,10 @@ type marked_expr = expr Marked.pos and expr = | ELocation of location | EVar of expr Bindlib.var - | EStruct of StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t + | EStruct of StructName.t * marked_expr StructFieldMap.t | EStructAccess of marked_expr * StructFieldName.t * StructName.t | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t - | EMatch of - marked_expr * EnumName.t * marked_expr Scopelang.Ast.EnumConstructorMap.t + | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list @@ -168,8 +162,7 @@ module Expr = struct | EStruct (name1, field_map1), EStruct (name2, field_map2) -> ( match StructName.compare name1 name2 with | 0 -> - Scopelang.Ast.StructFieldMap.compare (Marked.compare compare) field_map1 - field_map2 + StructFieldMap.compare (Marked.compare compare) field_map1 field_map2 | n -> n) | ( EStructAccess ((e1, _), field_name1, struct_name1), EStructAccess ((e2, _), field_name2, struct_name2) ) -> ( @@ -190,9 +183,7 @@ module Expr = struct match compare e1 e2 with | 0 -> ( match EnumName.compare name1 name2 with - | 0 -> - Scopelang.Ast.EnumConstructorMap.compare (Marked.compare compare) - emap1 emap2 + | 0 -> EnumConstructorMap.compare (Marked.compare compare) emap1 emap2 | n -> n) | n -> n) | ELit l1, ELit l2 -> Stdlib.compare l1 l2 @@ -387,13 +378,13 @@ let rec locations_used (e : expr Marked.pos) : LocationSet.t = let _, body = Bindlib.unmbind binder in locations_used body | EStruct (_, es) -> - Scopelang.Ast.StructFieldMap.fold + StructFieldMap.fold (fun _ e' acc -> LocationSet.union acc (locations_used e')) es LocationSet.empty | EStructAccess (e1, _, _) -> locations_used e1 | EEnumInj (e1, _, _) -> locations_used e1 | EMatch (e1, _, es) -> - Scopelang.Ast.EnumConstructorMap.fold + EnumConstructorMap.fold (fun _ e' acc -> LocationSet.union acc (locations_used e')) es (locations_used e1) | EApp (e1, args) -> diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index 21fefaa7..aab86997 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -38,7 +38,7 @@ module ScopeVarMap : Map.S with type key = ScopeVar.t module ScopeDef : sig type t = | Var of ScopeVar.t * StateName.t option - | SubScopeVar of Scopelang.Ast.SubScopeName.t * ScopeVar.t + | SubScopeVar of SubScopeName.t * ScopeVar.t val compare : t -> t -> int val get_position : t -> Pos.t @@ -55,9 +55,7 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t type location = | ScopeVar of ScopeVar.t Marked.pos * StateName.t option | SubScopeVar of - ScopeName.t - * Scopelang.Ast.SubScopeName.t Marked.pos - * ScopeVar.t Marked.pos + ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos module LocationSet : Set.S with type elt = location Marked.pos @@ -68,11 +66,10 @@ type marked_expr = expr Marked.pos and expr = | ELocation of location | EVar of expr Bindlib.var - | EStruct of StructName.t * marked_expr Scopelang.Ast.StructFieldMap.t + | EStruct of StructName.t * marked_expr StructFieldMap.t | EStructAccess of marked_expr * StructFieldName.t * StructName.t | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t - | EMatch of - marked_expr * EnumName.t * marked_expr Scopelang.Ast.EnumConstructorMap.t + | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t | ELit of Dcalc.Ast.lit | EAbs of (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list diff --git a/compiler/desugared/dependency.ml b/compiler/desugared/dependency.ml index 7a5f7268..deabf197 100644 --- a/compiler/desugared/dependency.ml +++ b/compiler/desugared/dependency.ml @@ -35,14 +35,14 @@ open Shared_ast module Vertex = struct type t = | Var of Ast.ScopeVar.t * Ast.StateName.t option - | SubScope of Scopelang.Ast.SubScopeName.t + | SubScope of SubScopeName.t let hash x = match x with | Var (x, None) -> Ast.ScopeVar.hash x | Var (x, Some sx) -> Int.logxor (Ast.ScopeVar.hash x) (Ast.StateName.hash sx) - | SubScope x -> Scopelang.Ast.SubScopeName.hash x + | SubScope x -> SubScopeName.hash x let compare = compare @@ -51,7 +51,7 @@ module Vertex = struct | Var (x, None), Var (y, None) -> Ast.ScopeVar.compare x y = 0 | Var (x, Some sx), Var (y, Some sy) -> Ast.ScopeVar.compare x y = 0 && Ast.StateName.compare sx sy = 0 - | SubScope x, SubScope y -> Scopelang.Ast.SubScopeName.compare x y = 0 + | SubScope x, SubScope y -> SubScopeName.compare x y = 0 | _ -> false let format_t (fmt : Format.formatter) (x : t) : unit = @@ -60,7 +60,7 @@ module Vertex = struct | Var (v, Some sv) -> Format.fprintf fmt "%a.%a" Ast.ScopeVar.format_t v Ast.StateName.format_t sv - | SubScope v -> Scopelang.Ast.SubScopeName.format_t fmt v + | SubScope v -> SubScopeName.format_t fmt v end (** On the edges, the label is the position of the expression responsible for @@ -111,8 +111,8 @@ let check_for_cycle (scope : Ast.scope) (g : ScopeDependencies.t) : unit = Ast.StateName.format_t sv, Ast.StateName.get_info sv ) | Vertex.SubScope v -> - ( Format.asprintf "%a" Scopelang.Ast.SubScopeName.format_t v, - Scopelang.Ast.SubScopeName.get_info v ) + ( Format.asprintf "%a" SubScopeName.format_t v, + SubScopeName.get_info v ) in let succs = ScopeDependencies.succ_e g v in let _, edge_pos, succ = @@ -126,7 +126,7 @@ let check_for_cycle (scope : Ast.scope) (g : ScopeDependencies.t) : unit = Format.asprintf "%a.%a" Ast.ScopeVar.format_t v Ast.StateName.format_t sv | Vertex.SubScope v -> - Format.asprintf "%a" Scopelang.Ast.SubScopeName.format_t v + Format.asprintf "%a" SubScopeName.format_t v in [ ( Some ("Cycle variable " ^ var_str ^ ", declared:"), @@ -161,7 +161,7 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = in let g = Scopelang.Ast.SubScopeMap.fold - (fun (v : Scopelang.Ast.SubScopeName.t) _ g -> + (fun (v : SubScopeName.t) _ g -> ScopeDependencies.add_vertex g (Vertex.SubScope v)) scope.scope_sub_scopes g in @@ -209,7 +209,7 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = Errors.raise_spanned_error fv_def_pos "The subscope %a is used when defining one of its inputs, \ but recursion is forbidden in Catala" - Scopelang.Ast.SubScopeName.format_t defined + SubScopeName.format_t defined else let edge = ScopeDependencies.E.create (Vertex.SubScope used) fv_def_pos diff --git a/compiler/desugared/dependency.mli b/compiler/desugared/dependency.mli index 2ea2f513..001c9bee 100644 --- a/compiler/desugared/dependency.mli +++ b/compiler/desugared/dependency.mli @@ -35,7 +35,7 @@ open Utils module Vertex : sig type t = | Var of Ast.ScopeVar.t * Ast.StateName.t option - | SubScope of Scopelang.Ast.SubScopeName.t + | SubScope of Shared_ast.SubScopeName.t val format_t : Format.formatter -> t -> unit diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 123c50f7..ac36b9ec 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -22,8 +22,8 @@ open Shared_ast (** {1 Expression translation}*) type target_scope_vars = - | WholeVar of Scopelang.Ast.ScopeVar.t - | States of (Ast.StateName.t * Scopelang.Ast.ScopeVar.t) list + | WholeVar of ScopeVar.t + | States of (Ast.StateName.t * ScopeVar.t) list type ctx = { scope_var_mapping : target_scope_vars Ast.ScopeVarMap.t; @@ -85,7 +85,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Bindlib.box_apply (fun new_fields -> Scopelang.Ast.EStruct (s_name, new_fields), m) (Scopelang.Ast.StructFieldMapLift.lift_box - (Scopelang.Ast.StructFieldMap.map (translate_expr ctx) fields)) + (StructFieldMap.map (translate_expr ctx) fields)) | EStructAccess (e1, s_name, f_name) -> Bindlib.box_apply (fun new_e1 -> Scopelang.Ast.EStructAccess (new_e1, s_name, f_name), m) @@ -100,7 +100,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Scopelang.Ast.EMatch (new_e1, e_name, new_arms), m) (translate_expr ctx e1) (Scopelang.Ast.EnumConstructorMapLift.lift_box - (Scopelang.Ast.EnumConstructorMap.map (translate_expr ctx) arms)) + (EnumConstructorMap.map (translate_expr ctx) arms)) | ELit l -> Bindlib.box (Scopelang.Ast.ELit l, m) | EAbs (binder, typs) -> let vars, body = Bindlib.unmbind binder in @@ -479,10 +479,8 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = Scopelang.Ast.Definition ( ( Scopelang.Ast.ScopeVar ( scope_var, - Marked.get_mark - (Scopelang.Ast.ScopeVar.get_info scope_var) ), - Marked.get_mark - (Scopelang.Ast.ScopeVar.get_info scope_var) ), + Marked.get_mark (ScopeVar.get_info scope_var) ), + Marked.get_mark (ScopeVar.get_info scope_var) ), var_typ, scope_def.Ast.scope_def_io, expr_def ); @@ -670,9 +668,7 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = ctx with scope_var_mapping = Ast.ScopeVarMap.add scope_var - (WholeVar - (Scopelang.Ast.ScopeVar.fresh - (Ast.ScopeVar.get_info scope_var))) + (WholeVar (ScopeVar.fresh (Ast.ScopeVar.get_info scope_var))) ctx.scope_var_mapping; } | States states -> @@ -684,7 +680,7 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = (List.map (fun state -> ( state, - Scopelang.Ast.ScopeVar.fresh + ScopeVar.fresh (let state_name, state_pos = Ast.StateName.get_info state in diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index fba90ad5..c8f10b24 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -18,29 +18,15 @@ open Utils open Shared_ast module ScopeMap : Map.S with type key = ScopeName.t = Map.Make (ScopeName) -module SubScopeName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - module SubScopeNameSet : Set.S with type elt = SubScopeName.t = Set.Make (SubScopeName) module SubScopeMap : Map.S with type key = SubScopeName.t = Map.Make (SubScopeName) -module ScopeVar : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) - -module StructFieldMap : Map.S with type key = StructFieldName.t = - Map.Make (StructFieldName) - module StructFieldMapLift = Bindlib.Lift (StructFieldMap) - -module EnumConstructorMap : Map.S with type key = EnumConstructor.t = - Map.Make (EnumConstructor) - module EnumConstructorMapLift = Bindlib.Lift (EnumConstructorMap) type location = diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 4a95098f..3e413008 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -22,21 +22,16 @@ open Shared_ast (** {1 Identifiers} *) module ScopeMap : Map.S with type key = ScopeName.t -module SubScopeName : Uid.Id with type info = Uid.MarkedString.info module SubScopeNameSet : Set.S with type elt = SubScopeName.t module SubScopeMap : Map.S with type key = SubScopeName.t -module ScopeVar : Uid.Id with type info = Uid.MarkedString.info module ScopeVarSet : Set.S with type elt = ScopeVar.t module ScopeVarMap : Map.S with type key = ScopeVar.t -module StructFieldMap : Map.S with type key = StructFieldName.t module StructFieldMapLift : sig val lift_box : 'a Bindlib.box StructFieldMap.t -> 'a StructFieldMap.t Bindlib.box end -module EnumConstructorMap : Map.S with type key = EnumConstructor.t - module EnumConstructorMapLift : sig val lift_box : 'a Bindlib.box EnumConstructorMap.t -> 'a EnumConstructorMap.t Bindlib.box diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index 7ff7eaeb..aef7f0dd 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -69,7 +69,7 @@ let build_program_dep_graph (prgm : Ast.program) : SDependencies.t = ScopeName.format_t scope.Ast.scope_decl_name else Ast.ScopeMap.add subscope - (Marked.get_mark (Ast.SubScopeName.get_info subindex)) + (Marked.get_mark (SubScopeName.get_info subindex)) acc) Ast.ScopeMap.empty scope.Ast.scope_decl_rules in diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 1fc92620..75a9e16c 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -76,7 +76,7 @@ let rec format_expr Format.fprintf fmt "%a%a%a%a@ %a" Print.punctuation "\"" StructFieldName.format_t field_name Print.punctuation "\"" Print.punctuation "=" format_expr field_expr)) - (Ast.StructFieldMap.bindings fields) + (StructFieldMap.bindings fields) Print.punctuation "}" | EStructAccess (e1, field, _) -> Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Print.punctuation "." @@ -93,7 +93,7 @@ let rec format_expr Format.fprintf fmt "@[%a %a@ %a@ %a@]" Print.punctuation "|" Print.enum_constructor cons_name Print.punctuation "→" format_expr case_expr)) - (Ast.EnumConstructorMap.bindings cases) + (EnumConstructorMap.bindings cases) | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 7fe6bb5d..34ee71ee 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -18,7 +18,7 @@ open Utils open Shared_ast type scope_var_ctx = { - scope_var_name : Ast.ScopeVar.t; + scope_var_name : ScopeVar.t; scope_var_typ : typ; scope_var_io : Ast.io; } @@ -158,12 +158,12 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let d_fields, remaining_e_fields = List.fold_right (fun (field_name, _) (d_fields, e_fields) -> - let field_e = Ast.StructFieldMap.find field_name e_fields in + let field_e = StructFieldMap.find field_name e_fields in let field_d = translate_expr ctx field_e in - field_d :: d_fields, Ast.StructFieldMap.remove field_name e_fields) + field_d :: d_fields, StructFieldMap.remove field_name e_fields) struct_sig ([], e_fields) in - if Ast.StructFieldMap.cardinal remaining_e_fields > 0 then + if StructFieldMap.cardinal remaining_e_fields > 0 then Errors.raise_spanned_error (Marked.get_mark e) "The fields \"%a\" do not belong to the structure %a" StructName.format_t struct_name @@ -171,7 +171,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") (fun fmt (field_name, _) -> Format.fprintf fmt "%a" StructFieldName.format_t field_name)) - (Ast.StructFieldMap.bindings remaining_e_fields) + (StructFieldMap.bindings remaining_e_fields) else Bindlib.box_apply (fun d_fields -> ETuple (d_fields, Some struct_name)) @@ -220,7 +220,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : List.fold_right (fun (constructor, _) (d_cases, e_cases) -> let case_e = - try Ast.EnumConstructorMap.find constructor e_cases + try EnumConstructorMap.find constructor e_cases with Not_found -> Errors.raise_spanned_error (Marked.get_mark e) "The constructor %a of enum %a is missing from this pattern \ @@ -228,10 +228,10 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : EnumConstructor.format_t constructor EnumName.format_t enum_name in let case_d = translate_expr ctx case_e in - case_d :: d_cases, Ast.EnumConstructorMap.remove constructor e_cases) + case_d :: d_cases, EnumConstructorMap.remove constructor e_cases) enum_sig ([], cases) in - if Ast.EnumConstructorMap.cardinal remaining_e_cases > 0 then + if EnumConstructorMap.cardinal remaining_e_cases > 0 then Errors.raise_spanned_error (Marked.get_mark e) "Patter matching is incomplete for enum %a: missing cases %a" EnumName.format_t enum_name @@ -239,7 +239,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : ~pp_sep:(fun fmt () -> Format.fprintf fmt ", ") (fun fmt (case_name, _) -> Format.fprintf fmt "%a" EnumConstructor.format_t case_name)) - (Ast.EnumConstructorMap.bindings remaining_e_cases) + (EnumConstructorMap.bindings remaining_e_cases) else let e1 = translate_expr ctx e1 in Bindlib.box_apply2 @@ -252,9 +252,9 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let markings l = match l with | Ast.ScopeVar (v, _) -> - [ScopeName.get_info ctx.scope_name; Ast.ScopeVar.get_info v] + [ScopeName.get_info ctx.scope_name; ScopeVar.get_info v] | Ast.SubScopeVar (s, _, (v, _)) -> - [ScopeName.get_info s; Ast.ScopeVar.get_info v] + [ScopeName.get_info s; ScopeVar.get_info v] in let e1_func = match Marked.unmark e1 with @@ -348,14 +348,14 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : [ Some "Incriminated variable usage:", Marked.get_mark e; ( Some "Incriminated subscope variable declaration:", - Marked.get_mark (Ast.ScopeVar.get_info (Marked.unmark a)) ); + Marked.get_mark (ScopeVar.get_info (Marked.unmark a)) ); ( Some "Incriminated subscope declaration:", - Marked.get_mark (Ast.SubScopeName.get_info (Marked.unmark s)) ); + Marked.get_mark (SubScopeName.get_info (Marked.unmark s)) ); ] "The variable %a.%a cannot be used here, as it is not part subscope \ %a's results. Maybe you forgot to qualify it as an output?" - Ast.SubScopeName.format_t (Marked.unmark s) Ast.ScopeVar.format_t - (Marked.unmark a) Ast.SubScopeName.format_t (Marked.unmark s)) + SubScopeName.format_t (Marked.unmark s) ScopeVar.format_t + (Marked.unmark a) SubScopeName.format_t (Marked.unmark s)) | EIfThenElse (cond, et, ef) -> Bindlib.box_apply3 (fun c t f -> EIfThenElse (c, t, f)) @@ -382,7 +382,7 @@ let translate_rule * ctx = match rule with | Definition ((ScopeVar a, var_def_pos), tau, a_io, e) -> - let a_name = Ast.ScopeVar.get_info (Marked.unmark a) in + let a_name = ScopeVar.get_info (Marked.unmark a) in let a_var = Var.make (Marked.unmark a_name) in let tau = translate_typ ctx tau in let new_e = translate_expr ctx e in @@ -431,10 +431,8 @@ let translate_rule let a_name = Marked.map_under_mark (fun str -> - str - ^ "." - ^ Marked.unmark (Ast.ScopeVar.get_info (Marked.unmark subs_var))) - (Ast.SubScopeName.get_info (Marked.unmark subs_index)) + str ^ "." ^ Marked.unmark (ScopeVar.get_info (Marked.unmark subs_var))) + (SubScopeName.get_info (Marked.unmark subs_index)) in let a_var = Var.make (Marked.unmark a_name) in let tau = translate_typ ctx tau in @@ -517,7 +515,7 @@ let translate_rule let subscope_var_not_yet_defined subvar = not (Ast.ScopeVarMap.mem subvar subscope_vars_defined) in - let pos_call = Marked.get_mark (Ast.SubScopeName.get_info subindex) in + let pos_call = Marked.get_mark (SubScopeName.get_info subindex) in let subscope_args = List.map (fun (subvar : scope_var_ctx) -> @@ -546,9 +544,9 @@ let translate_rule (fun (subvar : scope_var_ctx) -> let sub_dcalc_var = Var.make - (Marked.unmark (Ast.SubScopeName.get_info subindex) + (Marked.unmark (SubScopeName.get_info subindex) ^ "." - ^ Marked.unmark (Ast.ScopeVar.get_info subvar.scope_var_name)) + ^ Marked.unmark (ScopeVar.get_info subvar.scope_var_name)) in subvar, sub_dcalc_var) all_subscope_output_vars @@ -556,11 +554,11 @@ let translate_rule let subscope_func = tag_with_log_entry (Expr.make_var - (scope_dcalc_var, pos_mark_as (Ast.SubScopeName.get_info subindex))) + (scope_dcalc_var, pos_mark_as (SubScopeName.get_info subindex))) BeginCall [ sigma_name, pos_sigma; - Ast.SubScopeName.get_info subindex; + SubScopeName.get_info subindex; ScopeName.get_info subname; ] in @@ -572,7 +570,7 @@ let translate_rule EndCall [ sigma_name, pos_sigma; - Ast.SubScopeName.get_info subindex; + SubScopeName.get_info subindex; ScopeName.get_info subname; ] in @@ -708,7 +706,7 @@ let translate_scope_decl (fun ctx scope_var -> match Marked.unmark scope_var.scope_var_io.io_input with | OnlyInput -> - let scope_var_name = Ast.ScopeVar.get_info scope_var.scope_var_name in + let scope_var_name = ScopeVar.get_info scope_var.scope_var_name in let scope_var_dcalc = Var.make (Marked.unmark scope_var_name) in { ctx with diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index 998427e2..be2c6c17 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -42,7 +42,19 @@ module EnumConstructor : Uid.Id with type info = Uid.MarkedString.info = module EnumMap : Map.S with type key = EnumName.t = Map.Make (EnumName) -(** Abstract syntax tree for the default calculus *) +(** Only used by desugared/scopelang *) + +module ScopeVar : Uid.Id with type info = Uid.MarkedString.info = + Uid.Make (Uid.MarkedString) () + +module SubScopeName : Uid.Id with type info = Uid.MarkedString.info = + Uid.Make (Uid.MarkedString) () + +module StructFieldMap : Map.S with type key = StructFieldName.t = + Map.Make (StructFieldName) + +module EnumConstructorMap : Map.S with type key = EnumConstructor.t = + Map.Make (EnumConstructor) (** {1 Abstract syntax tree} *) @@ -119,6 +131,12 @@ type unop = | RoundDecimal type operator = Ternop of ternop | Binop of binop | Unop of unop + +type location = + | ScopeVar of ScopeVar.t Marked.pos + | SubScopeVar of + ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos + type except = ConflictError | EmptyError | NoValueProvided | Crash (** {2 Generic expressions} *) @@ -173,15 +191,22 @@ and ('a, 't) gexpr = | EIfThenElse : ('a, 't) marked_gexpr * ('a, 't) marked_gexpr * ('a, 't) marked_gexpr -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr - (* (* Early stages *) | ELocation: location -> ([< desugared | scopelang ] as - 'a, 't) gexpr | EStruct: StructName.t * ('a, 't) marked_gexpr - StructFieldMap.t -> ([< desugared | scopelang ] as 'a, 't) gexpr | - EStructAccess: ('a, 't) marked_gexpr * StructFieldName.t * StructName.t -> - ([< desugared | scopelang ] as 'a, 't) gexpr | EEnumInj: ('a, 't) - marked_gexpr * EnumConstructor.t * EnumName.t -> ([< desugared | scopelang - ] as 'a, 't) gexpr | EMatchS: ('a, 't) marked_gexpr * EnumName.t * ('a, 't) - marked_gexpr EnumConstructorMap.t -> ([< desugared | scopelang ] as 'a, 't) - gexpr *) + (* Early stages *) + | ELocation : location -> (([< desugared | scopelang ] as 'a), 't) gexpr + | EStruct : + StructName.t * ('a, 't) marked_gexpr StructFieldMap.t + -> (([< desugared | scopelang ] as 'a), 't) gexpr + | EStructAccess : + ('a, 't) marked_gexpr * StructFieldName.t * StructName.t + -> (([< desugared | scopelang ] as 'a), 't) gexpr + | EEnumInj : + ('a, 't) marked_gexpr * EnumConstructor.t * EnumName.t + -> (([< desugared | scopelang ] as 'a), 't) gexpr + | EMatchS : + ('a, 't) marked_gexpr + * EnumName.t + * ('a, 't) marked_gexpr EnumConstructorMap.t + -> (([< desugared | scopelang ] as 'a), 't) gexpr (* Lambda-like *) | ETuple : ('a, 't) marked_gexpr list * StructName.t option diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 7fd2e673..b5820cbf 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -61,8 +61,8 @@ let translate_unop (op : Ast.unop) : unop = translation, bound variables are used to represent function parameters or pattern macthing bindings. *) -module LiftStructFieldMap = Bindlib.Lift (Scopelang.Ast.StructFieldMap) -module LiftEnumConstructorMap = Bindlib.Lift (Scopelang.Ast.EnumConstructorMap) +module LiftStructFieldMap = Bindlib.Lift (StructFieldMap) +module LiftEnumConstructorMap = Bindlib.Lift (EnumConstructorMap) let disambiguate_constructor (ctxt : Name_resolution.context) @@ -140,7 +140,7 @@ let rec translate_expr disambiguate_constructor ctxt constructors pos_pattern in let cases = - Scopelang.Ast.EnumConstructorMap.mapi + EnumConstructorMap.mapi (fun c_uid' tau -> if EnumConstructor.compare c_uid c_uid' <> 0 then let nop_var = Desugared.Ast.Var.make "_" in @@ -300,7 +300,7 @@ let rec translate_expr match Marked.unmark e with | Ident y when Name_resolution.is_subscope_uid scope ctxt y -> (* In this case, y.x is a subscope variable *) - let subscope_uid : Scopelang.Ast.SubScopeName.t = + let subscope_uid : SubScopeName.t = Name_resolution.get_subscope_uid scope ctxt (Marked.same_mark_as y e) in let subscope_real_uid : ScopeName.t = @@ -392,7 +392,7 @@ let rec translate_expr "This identifier should refer to a field of struct %s" (Marked.unmark s_name) in - (match Scopelang.Ast.StructFieldMap.find_opt f_uid s_fields with + (match StructFieldMap.find_opt f_uid s_fields with | None -> () | Some e_field -> Errors.raise_multispanned_error @@ -403,13 +403,13 @@ let rec translate_expr "The field %a has been defined twice:" StructFieldName.format_t f_uid); let f_e = translate_expr scope inside_definition_of ctxt f_e in - Scopelang.Ast.StructFieldMap.add f_uid f_e s_fields) - Scopelang.Ast.StructFieldMap.empty fields + StructFieldMap.add f_uid f_e s_fields) + StructFieldMap.empty fields in let expected_s_fields = StructMap.find s_uid ctxt.structs in - Scopelang.Ast.StructFieldMap.iter + StructFieldMap.iter (fun expected_f _ -> - if not (Scopelang.Ast.StructFieldMap.mem expected_f s_fields) then + if not (StructFieldMap.mem expected_f s_fields) then Errors.raise_spanned_error pos "Missing field for structure %a: \"%a\"" StructName.format_t s_uid StructFieldName.format_t expected_f) @@ -513,7 +513,7 @@ let rec translate_expr (Marked.get_mark pattern) in let cases = - Scopelang.Ast.EnumConstructorMap.mapi + EnumConstructorMap.mapi (fun c_uid' tau -> let nop_var = Desugared.Ast.Var.make "_" in Bindlib.unbox @@ -851,8 +851,8 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.expr Marked.pos Bindlib.box Scopelang.Ast.EnumConstructorMap.t - * EnumName.t = + Desugared.Ast.expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t + = let create_var = function | None -> ctxt, Desugared.Ast.Var.make "_" | Some param -> @@ -873,7 +873,7 @@ and disambiguate_match_and_build_expression (Desugared.Ast.EAbs ( e_binder, [ - Scopelang.Ast.EnumConstructorMap.find c_uid + EnumConstructorMap.find c_uid (EnumMap.find e_uid ctxt.Name_resolution.enums); ] )) case_body) @@ -899,7 +899,7 @@ and disambiguate_match_and_build_expression case were matching constructors of enumeration %a" EnumName.format_t e_uid EnumName.format_t e_uid' in - (match Scopelang.Ast.EnumConstructorMap.find_opt c_uid cases_d with + (match EnumConstructorMap.find_opt c_uid cases_d with | None -> () | Some e_case -> Errors.raise_multispanned_error @@ -915,9 +915,7 @@ and disambiguate_match_and_build_expression in let e_binder = Bindlib.bind_mvar [| param_var |] case_body in let case_expr = bind_case_body c_uid e_uid ctxt case_body e_binder in - ( Scopelang.Ast.EnumConstructorMap.add c_uid case_expr cases_d, - Some e_uid, - curr_index + 1 ) + EnumConstructorMap.add c_uid case_expr cases_d, Some e_uid, curr_index + 1 | Ast.WildCard match_case_expr -> ( let nb_cases = List.length cases in let raise_wildcard_not_last_case_err () = @@ -940,14 +938,12 @@ and disambiguate_match_and_build_expression if curr_index < nb_cases - 1 then raise_wildcard_not_last_case_err (); let missing_constructors = EnumMap.find e_uid ctxt.Name_resolution.enums - |> Scopelang.Ast.EnumConstructorMap.filter_map (fun c_uid _ -> - match - Scopelang.Ast.EnumConstructorMap.find_opt c_uid cases_d - with + |> EnumConstructorMap.filter_map (fun c_uid _ -> + match EnumConstructorMap.find_opt c_uid cases_d with | Some _ -> None | None -> Some c_uid) in - if Scopelang.Ast.EnumConstructorMap.is_empty missing_constructors then + if EnumConstructorMap.is_empty missing_constructors then Errors.format_spanned_warning case_pos "Unreachable match case, all constructors of the enumeration %a \ are already specified" @@ -971,21 +967,19 @@ and disambiguate_match_and_build_expression let e_binder = Bindlib.bind_mvar [| payload_var |] case_body in (* For each missing cases, binds the wildcard payload. *) - Scopelang.Ast.EnumConstructorMap.fold + EnumConstructorMap.fold (fun c_uid _ (cases_d, e_uid_opt, curr_index) -> let case_expr = bind_case_body c_uid e_uid ctxt case_body e_binder in - ( Scopelang.Ast.EnumConstructorMap.add c_uid case_expr cases_d, + ( EnumConstructorMap.add c_uid case_expr cases_d, e_uid_opt, curr_index + 1 )) missing_constructors (cases_d, Some e_uid, curr_index)) in let expr, e_name, _ = - List.fold_left bind_match_cases - (Scopelang.Ast.EnumConstructorMap.empty, None, 0) - cases + List.fold_left bind_match_cases (EnumConstructorMap.empty, None, 0) cases in expr, Option.get e_name [@@ocamlformat "wrap-comments=false"] @@ -1304,11 +1298,9 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : let empty_prgm = { Desugared.Ast.program_structs = - StructMap.map Scopelang.Ast.StructFieldMap.bindings - ctxt.Name_resolution.structs; + StructMap.map StructFieldMap.bindings ctxt.Name_resolution.structs; Desugared.Ast.program_enums = - EnumMap.map Scopelang.Ast.EnumConstructorMap.bindings - ctxt.Name_resolution.enums; + EnumMap.map EnumConstructorMap.bindings ctxt.Name_resolution.enums; Desugared.Ast.program_scopes = Scopelang.Ast.ScopeMap.mapi (fun s_uid s_context -> diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index 0c0a7e5d..7afec450 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -40,17 +40,17 @@ type scope_context = { (** Scope variables *) scope_defs_contexts : scope_def_context Desugared.Ast.ScopeDefMap.t; (** What is the default rule to refer to for unnamed exceptions, if any *) - sub_scopes_idmap : Scopelang.Ast.SubScopeName.t Desugared.Ast.IdentMap.t; + sub_scopes_idmap : SubScopeName.t Desugared.Ast.IdentMap.t; (** Sub-scopes variables *) sub_scopes : ScopeName.t Scopelang.Ast.SubScopeMap.t; (** To what scope sub-scopes refer to? *) } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ Marked.pos Scopelang.Ast.StructFieldMap.t +type struct_context = typ Marked.pos StructFieldMap.t (** Types of the fields of a struct *) -type enum_context = typ Marked.pos Scopelang.Ast.EnumConstructorMap.t +type enum_context = typ Marked.pos EnumConstructorMap.t (** Types of the payloads of the cases of an enum *) type var_sig = { @@ -130,7 +130,7 @@ let get_var_uid let get_subscope_uid (scope_uid : ScopeName.t) (ctxt : context) - ((y, pos) : ident Marked.pos) : Scopelang.Ast.SubScopeName.t = + ((y, pos) : ident Marked.pos) : SubScopeName.t = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in match Desugared.Ast.IdentMap.find_opt y scope.sub_scopes_idmap with | None -> raise_unknown_identifier "for a subscope of this scope" (y, pos) @@ -187,15 +187,14 @@ let process_subscope_decl | Some use -> Errors.raise_multispanned_error [ - ( Some "first use", - Marked.get_mark (Scopelang.Ast.SubScopeName.get_info use) ); + Some "first use", Marked.get_mark (SubScopeName.get_info use); Some "second use", s_pos; ] "Subscope name \"%a\" already used" (Utils.Cli.format_with_style [ANSITerminal.yellow]) subscope | None -> - let sub_scope_uid = Scopelang.Ast.SubScopeName.fresh (name, name_pos) in + let sub_scope_uid = SubScopeName.fresh (name, name_pos) in let original_subscope_uid = match Desugared.Ast.IdentMap.find_opt subscope ctxt.scope_idmap with | None -> raise_unknown_identifier "for a scope" (subscope, s_pos) @@ -385,11 +384,11 @@ let process_struct_decl (ctxt : context) (sdecl : Ast.struct_decl) : context = match fields with | None -> Some - (Scopelang.Ast.StructFieldMap.singleton f_uid + (StructFieldMap.singleton f_uid (process_type ctxt fdecl.Ast.struct_decl_field_typ)) | Some fields -> Some - (Scopelang.Ast.StructFieldMap.add f_uid + (StructFieldMap.add f_uid (process_type ctxt fdecl.Ast.struct_decl_field_typ) fields)) ctxt.structs; @@ -434,10 +433,8 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = | Some typ -> process_type ctxt typ in match cases with - | None -> - Some (Scopelang.Ast.EnumConstructorMap.singleton c_uid typ) - | Some fields -> - Some (Scopelang.Ast.EnumConstructorMap.add c_uid typ fields)) + | None -> Some (EnumConstructorMap.singleton c_uid typ) + | Some fields -> Some (EnumConstructorMap.add c_uid typ fields)) ctxt.enums; }) ctxt edecl.enum_decl_cases @@ -581,9 +578,7 @@ let get_def_key Desugared.Ast.ScopeVar.format_t x_uid else None ) | [y; x] -> - let subscope_uid : Scopelang.Ast.SubScopeName.t = - get_subscope_uid scope_uid ctxt y - in + let subscope_uid : SubScopeName.t = get_subscope_uid scope_uid ctxt y in let subscope_real_uid : ScopeName.t = Scopelang.Ast.SubScopeMap.find subscope_uid scope_ctxt.sub_scopes in diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index 49384952..e7234ff5 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -40,17 +40,17 @@ type scope_context = { (** Scope variables *) scope_defs_contexts : scope_def_context Desugared.Ast.ScopeDefMap.t; (** What is the default rule to refer to for unnamed exceptions, if any *) - sub_scopes_idmap : Scopelang.Ast.SubScopeName.t Desugared.Ast.IdentMap.t; + sub_scopes_idmap : SubScopeName.t Desugared.Ast.IdentMap.t; (** Sub-scopes variables *) sub_scopes : ScopeName.t Scopelang.Ast.SubScopeMap.t; (** To what scope sub-scopes refer to? *) } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ Marked.pos Scopelang.Ast.StructFieldMap.t +type struct_context = typ Marked.pos StructFieldMap.t (** Types of the fields of a struct *) -type enum_context = typ Marked.pos Scopelang.Ast.EnumConstructorMap.t +type enum_context = typ Marked.pos EnumConstructorMap.t (** Types of the payloads of the cases of an enum *) type var_sig = { @@ -109,7 +109,7 @@ val get_var_uid : (** Get the variable uid inside the scope given in argument *) val get_subscope_uid : - ScopeName.t -> context -> ident Marked.pos -> Scopelang.Ast.SubScopeName.t + ScopeName.t -> context -> ident Marked.pos -> SubScopeName.t (** Get the subscope uid inside the scope given in argument *) val is_subscope_uid : ScopeName.t -> context -> ident -> bool From a6702808ef3644a150ec26d71ea734451feeaea1 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Wed, 17 Aug 2022 18:14:30 +0200 Subject: [PATCH 13/31] Handle additional scopelang cases in helper functions --- compiler/shared_ast/expr.ml | 76 +++++++++++++++++++++++++++++++++--- compiler/shared_ast/print.ml | 34 +++++++++++++++- 2 files changed, 103 insertions(+), 7 deletions(-) diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 832fed7b..6fb090ad 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -65,10 +65,24 @@ let eifthenelse e1 e2 e3 mark = let eerroronempty e1 mark = Bindlib.box_apply (fun e1 -> ErrorOnEmpty e1, mark) e1 -let eraise e1 pos = Bindlib.box (ERaise e1, pos) +let eraise e1 mark = Bindlib.box (ERaise e1, mark) -let ecatch e1 exn e2 pos = - Bindlib.box_apply2 (fun e1 e2 -> ECatch (e1, exn, e2), pos) e1 e2 +let ecatch e1 exn e2 mark = + Bindlib.box_apply2 (fun e1 e2 -> ECatch (e1, exn, e2), mark) e1 e2 + +let elocation loc mark = Bindlib.box (ELocation loc, mark) + +let estruct name fields mark = + Bindlib.box_apply (fun es -> EStruct (name, es), mark) fields + +let estructaccess e1 field struc mark = + Bindlib.box_apply (fun e1 -> EStructAccess (e1, field, struc), mark) e1 + +let eenuminj e1 cons enum mark = + Bindlib.box_apply (fun e1 -> EEnumInj (e1, cons, enum), mark) e1 + +let ematchs e1 enum cases mark = + Bindlib.box_apply2 (fun e1 cases -> EMatchS (e1, enum, cases), mark) e1 cases (* - Manipulation of marks - *) @@ -129,6 +143,7 @@ let fold_marks (* - Traversal functions - *) +(* shallow map *) let map (type a) (ctx : 'ctx) @@ -156,8 +171,28 @@ let map | EDefault (excepts, just, cons) -> edefault (List.map (f ctx) excepts) ((f ctx) just) ((f ctx) cons) m | ErrorOnEmpty e1 -> eerroronempty ((f ctx) e1) m - | ECatch (e1, exn, e2) -> ecatch (f ctx e1) exn (f ctx e2) (Marked.get_mark e) - | ERaise exn -> eraise exn (Marked.get_mark e) + | ECatch (e1, exn, e2) -> ecatch (f ctx e1) exn (f ctx e2) m + | ERaise exn -> eraise exn m + | ELocation loc -> elocation loc m + | EStruct (name, fields) -> + let fields = + StructFieldMap.fold + (fun fld e -> Bindlib.box_apply2 (StructFieldMap.add fld) (f ctx e)) + fields + (Bindlib.box StructFieldMap.empty) + in + estruct name fields m + | EStructAccess (e1, field, struc) -> estructaccess (f ctx e1) field struc m + | EEnumInj (e1, cons, enum) -> eenuminj (f ctx e1) cons enum m + | EMatchS (e1, enum, cases) -> + let cases = + EnumConstructorMap.fold + (fun cstr e -> + Bindlib.box_apply2 (EnumConstructorMap.add cstr) (f ctx e)) + cases + (Bindlib.box EnumConstructorMap.empty) + in + ematchs (f ctx e1) enum cases m let rec map_top_down ~f e = map () ~f:(fun () -> map_top_down ~f) (f e) @@ -313,9 +348,21 @@ and equal : type a. (a, 't) gexpr marked -> (a, 't) gexpr marked -> bool = | ERaise ex1, ERaise ex2 -> equal_except ex1 ex2 | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> equal etry1 etry2 && equal_except ex1 ex2 && equal ewith1 ewith2 + | ELocation _, ELocation _ -> true + | EStruct (s1, fields1), EStruct (s2, fields2) -> + StructName.equal s1 s2 && StructFieldMap.equal equal fields1 fields2 + | EStructAccess (e1, f1, s1), EStructAccess (e2, f2, s2) -> + StructName.equal s1 s2 && StructFieldName.equal f1 f2 && equal e1 e2 + | EEnumInj (e1, c1, n1), EEnumInj (e2, c2, n2) -> + EnumName.equal n1 n2 && EnumConstructor.equal c1 c2 && equal e1 e2 + | EMatchS (e1, n1, cases1), EMatchS (e2, n2, cases2) -> + EnumName.equal n1 n2 + && equal e1 e2 + && EnumConstructorMap.equal equal cases1 cases2 | ( ( EVar _ | ETuple _ | ETupleAccess _ | EInj _ | EMatch _ | EArray _ | ELit _ | EAbs _ | EApp _ | EAssert _ | EOp _ | EDefault _ - | EIfThenElse _ | ErrorOnEmpty _ | ERaise _ | ECatch _ ), + | EIfThenElse _ | ErrorOnEmpty _ | ERaise _ | ECatch _ | ELocation _ + | EStruct _ | EStructAccess _ | EEnumInj _ | EMatchS _ ), _ ) -> false @@ -348,6 +395,16 @@ let rec free_vars : type a. (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = | EAbs (binder, _) -> let vs, body = Bindlib.unmbind binder in Array.fold_right Var.Set.remove vs (free_vars body) + | ELocation _ -> Var.Set.empty + | EStruct (_, fields) -> + StructFieldMap.fold + (fun _ e -> Var.Set.union (free_vars e)) + fields Var.Set.empty + | EStructAccess (e1, _, _) -> free_vars e1 + | EEnumInj (e1, _, _) -> free_vars e1 + | EMatchS (e1, _, cases) -> + free_vars e1 + |> EnumConstructorMap.fold (fun _ e -> Var.Set.union (free_vars e)) cases let remove_logging_calls e = let rec f () e = @@ -384,3 +441,10 @@ let rec size : type a. (a, 't) gexpr marked -> int = exceptions | ERaise _ -> 1 | ECatch (etry, _, ewith) -> 1 + size etry + size ewith + | ELocation _ -> 1 + | EStruct (_, fields) -> + StructFieldMap.fold (fun _ e acc -> acc + 1 + size e) fields 0 + | EStructAccess (e1, _, _) -> 1 + size e1 + | EEnumInj (e1, _, _) -> 1 + size e1 + | EMatchS (e1, _, cases) -> + EnumConstructorMap.fold (fun _ e acc -> acc + 1 + size e) cases (size e1) diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index f3f79db8..68ca6bb9 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -59,6 +59,13 @@ let tlit (fmt : Format.formatter) (l : typ_lit) : unit = | TDuration -> "duration" | TDate -> "date") +let location (fmt : Format.formatter) (l : location) : unit = + match l with + | ScopeVar v -> Format.fprintf fmt "%a" ScopeVar.format_t (Marked.unmark v) + | SubScopeVar (_, subindex, subvar) -> + Format.fprintf fmt "%a.%a" SubScopeName.format_t (Marked.unmark subindex) + ScopeVar.format_t (Marked.unmark subvar) + let enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : unit = Format.fprintf fmt "%a" (Utils.Cli.format_with_style [ANSITerminal.magenta]) @@ -109,7 +116,6 @@ let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = (Marked.unmark t1) | TAny -> base_type fmt "any" -(* (EmileRolley) NOTE: seems to be factorizable with Print.lit. *) let lit (type a) (fmt : Format.formatter) (l : a glit) : unit = match l with | LBool b -> lit_style fmt (string_of_bool b) @@ -338,3 +344,29 @@ let rec expr : with_parens e1 keyword "with" except exn with_parens e2 | ERaise exn -> Format.fprintf fmt "@[%a@ %a@]" keyword "raise" except exn + | ELocation loc -> location fmt loc + | EStruct (name, fields) -> + Format.fprintf fmt " @[%a@ %a@ %a@ %a@]" StructName.format_t name + punctuation "{" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ";") + (fun fmt (field_name, field_expr) -> + Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" + StructFieldName.format_t field_name punctuation "\"" punctuation + "=" expr field_expr)) + (StructFieldMap.bindings fields) + punctuation "}" + | EStructAccess (e1, field, _) -> + Format.fprintf fmt "%a%a%a%a%a" expr e1 punctuation "." punctuation "\"" + StructFieldName.format_t field punctuation "\"" + | EEnumInj (e1, cons, _) -> + Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons expr e1 + | EMatchS (e1, _, cases) -> + Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" + expr e1 keyword "with" + (Format.pp_print_list + ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") + (fun fmt (cons_name, case_expr) -> + Format.fprintf fmt "@[%a %a@ %a@ %a@]" punctuation "|" + enum_constructor cons_name punctuation "→" expr case_expr)) + (EnumConstructorMap.bindings cases) From 01cc957b3b9270ea905d0e4dcc5232e15afcedd4 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 12:09:51 +0200 Subject: [PATCH 14/31] Used `shared_ast` for scopelang expressions --- compiler/dcalc/interpreter.ml | 2 +- compiler/dcalc/typing.ml | 2 + compiler/desugared/ast.ml | 39 +-- compiler/desugared/ast.mli | 21 +- compiler/desugared/dependency.ml | 35 +- compiler/desugared/dependency.mli | 2 +- compiler/desugared/desugared.mld | 2 +- compiler/desugared/desugared_to_scope.ml | 124 ++++--- compiler/driver.ml | 4 +- compiler/lcalc/compile_with_exceptions.ml | 17 +- compiler/lcalc/compile_without_exceptions.ml | 19 +- compiler/scalc/print.ml | 6 +- compiler/scopelang/ast.ml | 235 +------------ compiler/scopelang/ast.mli | 105 +----- compiler/scopelang/dependency.ml | 24 +- compiler/scopelang/dependency.mli | 6 +- compiler/scopelang/print.ml | 213 ++---------- compiler/scopelang/print.mli | 17 +- compiler/scopelang/scope_to_dcalc.ml | 106 ++---- compiler/shared_ast/definitions.ml | 45 ++- compiler/shared_ast/expr.ml | 318 +++++++++++++++++- compiler/shared_ast/expr.mli | 38 ++- compiler/shared_ast/print.ml | 53 ++- compiler/shared_ast/print.mli | 5 +- compiler/surface/desugaring.ml | 58 ++-- compiler/surface/name_resolution.ml | 73 ++-- compiler/surface/name_resolution.mli | 21 +- compiler/utils/uid.ml | 4 + compiler/utils/uid.mli | 6 + .../output/fold_error.catala_en.A.Interpret | 2 +- .../groups_of_exceptions.catala_en.scopelang | 5 +- 31 files changed, 683 insertions(+), 924 deletions(-) diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 5743c3a9..913ef19f 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -533,7 +533,7 @@ let interpret_program : Errors.raise_spanned_error bad_pos "@[(bug) Result of interpretation doesn't have the \ expected type:@ @[%a@]@]" - (Print.typ ctx) (fst @@ ty)) + (Print.typ ctx) ty) mark_e ) in match Marked.unmark (evaluate_expr ctx to_interpret) with diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 89f8eefe..83e3220c 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -27,6 +27,8 @@ module Any = let to_string _ = "any" let format_info fmt () = Format.fprintf fmt "any" + let equal _ _ = true + let compare _ _ = 0 end) () diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 843fadf3..c2eca90e 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -34,13 +34,6 @@ module LabelName : Uid.Id with type info = Uid.MarkedString.info = module LabelMap : Map.S with type key = LabelName.t = Map.Make (LabelName) module LabelSet : Set.S with type elt = LabelName.t = Set.Make (LabelName) - -module StateName : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - -module ScopeVar : Uid.Id with type info = Uid.MarkedString.info = - Uid.Make (Uid.MarkedString) () - module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) @@ -132,8 +125,7 @@ and expr = | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t | ELit of Dcalc.Ast.lit - | EAbs of - (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list + | EAbs of (expr, marked_expr) Bindlib.mbinder * typ Marked.pos list | EApp of marked_expr * marked_expr list | EOp of operator | EDefault of marked_expr list * marked_expr * marked_expr @@ -188,9 +180,7 @@ module Expr = struct | n -> n) | ELit l1, ELit l2 -> Stdlib.compare l1 l2 | EAbs (binder1, typs1), EAbs (binder2, typs2) -> ( - match - list_compare (Marked.compare Scopelang.Ast.Typ.compare) typs1 typs2 - with + match list_compare Expr.compare_typ typs1 typs2 with | 0 -> let _, (e1, _), (e2, _) = Bindlib.unmbind2 binder1 binder2 in compare e1 e2 @@ -268,7 +258,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Marked.pos Bindlib.box; rule_cons : expr Marked.pos Bindlib.box; - rule_parameter : (Var.t * Scopelang.Ast.typ Marked.pos) option; + rule_parameter : (Var.t * typ Marked.pos) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -289,8 +279,8 @@ module Rule = struct let c2, _ = Bindlib.unbox r2.rule_cons in Expr.compare c1 c2 | n -> n) - | Some (v1, (t1, _)), Some (v2, (t2, _)) -> ( - match Scopelang.Ast.Typ.compare t1 t2 with + | Some (v1, t1), Some (v2, t2) -> ( + match Shared_ast.Expr.compare_typ t1 t2 with | 0 -> ( let open Bindlib in let b1 = unbox (bind_var v1 r1.rule_just) in @@ -308,9 +298,7 @@ module Rule = struct | Some _, None -> 1 end -let empty_rule - (pos : Pos.t) - (have_parameter : Scopelang.Ast.typ Marked.pos option) : rule = +let empty_rule (pos : Pos.t) (have_parameter : typ Marked.pos option) : rule = { rule_just = Bindlib.box (ELit (LBool false), pos); rule_cons = Bindlib.box (ELit LEmptyError, pos); @@ -323,9 +311,8 @@ let empty_rule rule_label = Unlabeled; } -let always_false_rule - (pos : Pos.t) - (have_parameter : Scopelang.Ast.typ Marked.pos option) : rule = +let always_false_rule (pos : Pos.t) (have_parameter : typ Marked.pos option) : + rule = { rule_just = Bindlib.box (ELit (LBool true), pos); rule_cons = Bindlib.box (ELit (LBool false), pos); @@ -348,7 +335,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : Scopelang.Ast.typ Marked.pos; + scope_def_typ : typ Marked.pos; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } @@ -366,8 +353,8 @@ type scope = { type program = { program_scopes : scope Scopelang.Ast.ScopeMap.t; - program_enums : Scopelang.Ast.enum_ctx; - program_structs : Scopelang.Ast.struct_ctx; + program_enums : enum_ctx; + program_structs : struct_ctx; } let rec locations_used (e : expr Marked.pos) : LocationSet.t = @@ -434,7 +421,7 @@ let make_var ((x, pos) : Var.t Marked.pos) : expr Marked.pos Bindlib.box = let make_abs (xs : vars) (e : expr Marked.pos Bindlib.box) - (taus : Scopelang.Ast.typ Marked.pos list) + (taus : typ Marked.pos list) (pos : Pos.t) : expr Marked.pos Bindlib.box = Bindlib.box_apply (fun b -> EAbs (b, taus), pos) (Bindlib.bind_mvar xs e) @@ -446,7 +433,7 @@ let make_app let make_let_in (x : Var.t) - (tau : Scopelang.Ast.typ Marked.pos) + (tau : typ Marked.pos) (e1 : expr Marked.pos Bindlib.box) (e2 : expr Marked.pos Bindlib.box) : expr Marked.pos Bindlib.box = Bindlib.box_apply2 diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index aab86997..c1590317 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -28,8 +28,6 @@ module RuleSet : Set.S with type elt = RuleName.t module LabelName : Uid.Id with type info = Uid.MarkedString.info module LabelMap : Map.S with type key = LabelName.t module LabelSet : Set.S with type elt = LabelName.t -module StateName : Uid.Id with type info = Uid.MarkedString.info -module ScopeVar : Uid.Id with type info = Uid.MarkedString.info module ScopeVarSet : Set.S with type elt = ScopeVar.t module ScopeVarMap : Map.S with type key = ScopeVar.t @@ -71,8 +69,7 @@ and expr = | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t | ELit of Dcalc.Ast.lit - | EAbs of - (expr, marked_expr) Bindlib.mbinder * Scopelang.Ast.typ Marked.pos list + | EAbs of (expr, marked_expr) Bindlib.mbinder * marked_typ list | EApp of marked_expr * marked_expr list | EOp of operator | EDefault of marked_expr list * marked_expr * marked_expr @@ -100,7 +97,7 @@ val make_var : Var.t Marked.pos -> expr Marked.pos Bindlib.box val make_abs : vars -> expr Marked.pos Bindlib.box -> - Scopelang.Ast.typ Marked.pos list -> + typ Marked.pos list -> Pos.t -> expr Marked.pos Bindlib.box @@ -112,7 +109,7 @@ val make_app : val make_let_in : Var.t -> - Scopelang.Ast.typ Marked.pos -> + typ Marked.pos -> expr Marked.pos Bindlib.box -> expr Marked.pos Bindlib.box -> expr Marked.pos Bindlib.box @@ -130,15 +127,15 @@ type rule = { rule_id : RuleName.t; rule_just : expr Marked.pos Bindlib.box; rule_cons : expr Marked.pos Bindlib.box; - rule_parameter : (Var.t * Scopelang.Ast.typ Marked.pos) option; + rule_parameter : (Var.t * typ Marked.pos) option; rule_exception : exception_situation; rule_label : label_situation; } module Rule : Set.OrderedType with type t = rule -val empty_rule : Pos.t -> Scopelang.Ast.typ Marked.pos option -> rule -val always_false_rule : Pos.t -> Scopelang.Ast.typ Marked.pos option -> rule +val empty_rule : Pos.t -> typ Marked.pos option -> rule +val always_false_rule : Pos.t -> typ Marked.pos option -> rule type assertion = expr Marked.pos Bindlib.box type variation_typ = Increasing | Decreasing @@ -150,7 +147,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : Scopelang.Ast.typ Marked.pos; + scope_def_typ : typ Marked.pos; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } @@ -168,8 +165,8 @@ type scope = { type program = { program_scopes : scope Scopelang.Ast.ScopeMap.t; - program_enums : Scopelang.Ast.enum_ctx; - program_structs : Scopelang.Ast.struct_ctx; + program_enums : enum_ctx; + program_structs : struct_ctx; } (** {1 Helpers} *) diff --git a/compiler/desugared/dependency.ml b/compiler/desugared/dependency.ml index deabf197..dc2cf193 100644 --- a/compiler/desugared/dependency.ml +++ b/compiler/desugared/dependency.ml @@ -33,33 +33,29 @@ open Shared_ast Indeed, during interpretation, subscopes are executed atomically. *) module Vertex = struct - type t = - | Var of Ast.ScopeVar.t * Ast.StateName.t option - | SubScope of SubScopeName.t + type t = Var of ScopeVar.t * StateName.t option | SubScope of SubScopeName.t let hash x = match x with - | Var (x, None) -> Ast.ScopeVar.hash x - | Var (x, Some sx) -> - Int.logxor (Ast.ScopeVar.hash x) (Ast.StateName.hash sx) + | Var (x, None) -> ScopeVar.hash x + | Var (x, Some sx) -> Int.logxor (ScopeVar.hash x) (StateName.hash sx) | SubScope x -> SubScopeName.hash x let compare = compare let equal x y = match x, y with - | Var (x, None), Var (y, None) -> Ast.ScopeVar.compare x y = 0 + | Var (x, None), Var (y, None) -> ScopeVar.compare x y = 0 | Var (x, Some sx), Var (y, Some sy) -> - Ast.ScopeVar.compare x y = 0 && Ast.StateName.compare sx sy = 0 + ScopeVar.compare x y = 0 && StateName.compare sx sy = 0 | SubScope x, SubScope y -> SubScopeName.compare x y = 0 | _ -> false let format_t (fmt : Format.formatter) (x : t) : unit = match x with - | Var (v, None) -> Ast.ScopeVar.format_t fmt v + | Var (v, None) -> ScopeVar.format_t fmt v | Var (v, Some sv) -> - Format.fprintf fmt "%a.%a" Ast.ScopeVar.format_t v Ast.StateName.format_t - sv + Format.fprintf fmt "%a.%a" ScopeVar.format_t v StateName.format_t sv | SubScope v -> SubScopeName.format_t fmt v end @@ -104,12 +100,11 @@ let check_for_cycle (scope : Ast.scope) (g : ScopeDependencies.t) : unit = let var_str, var_info = match v with | Vertex.Var (v, None) -> - ( Format.asprintf "%a" Ast.ScopeVar.format_t v, - Ast.ScopeVar.get_info v ) + Format.asprintf "%a" ScopeVar.format_t v, ScopeVar.get_info v | Vertex.Var (v, Some sv) -> - ( Format.asprintf "%a.%a" Ast.ScopeVar.format_t v - Ast.StateName.format_t sv, - Ast.StateName.get_info sv ) + ( Format.asprintf "%a.%a" ScopeVar.format_t v + StateName.format_t sv, + StateName.get_info sv ) | Vertex.SubScope v -> ( Format.asprintf "%a" SubScopeName.format_t v, SubScopeName.get_info v ) @@ -121,10 +116,10 @@ let check_for_cycle (scope : Ast.scope) (g : ScopeDependencies.t) : unit = let succ_str = match succ with | Vertex.Var (v, None) -> - Format.asprintf "%a" Ast.ScopeVar.format_t v + Format.asprintf "%a" ScopeVar.format_t v | Vertex.Var (v, Some sv) -> - Format.asprintf "%a.%a" Ast.ScopeVar.format_t v - Ast.StateName.format_t sv + Format.asprintf "%a.%a" ScopeVar.format_t v StateName.format_t + sv | Vertex.SubScope v -> Format.asprintf "%a" SubScopeName.format_t v in @@ -149,7 +144,7 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = (* Add all the vertices to the graph *) let g = Ast.ScopeVarMap.fold - (fun (v : Ast.ScopeVar.t) var_or_state g -> + (fun (v : ScopeVar.t) var_or_state g -> match var_or_state with | Ast.WholeVar -> ScopeDependencies.add_vertex g (Vertex.Var (v, None)) | Ast.States states -> diff --git a/compiler/desugared/dependency.mli b/compiler/desugared/dependency.mli index 001c9bee..6e18b56a 100644 --- a/compiler/desugared/dependency.mli +++ b/compiler/desugared/dependency.mli @@ -34,7 +34,7 @@ open Utils module Vertex : sig type t = - | Var of Ast.ScopeVar.t * Ast.StateName.t option + | Var of Shared_ast.ScopeVar.t * Shared_ast.StateName.t option | SubScope of Shared_ast.SubScopeName.t val format_t : Format.formatter -> t -> unit diff --git a/compiler/desugared/desugared.mld b/compiler/desugared/desugared.mld index 53460f24..7e11b9a1 100644 --- a/compiler/desugared/desugared.mld +++ b/compiler/desugared/desugared.mld @@ -23,7 +23,7 @@ computation order. All the graph computations are done using the The other important piece of work performed by {!module: Desugared.Desugared_to_scope} is the construction of the default trees -(see {!Dcalc.Ast.EDefault}) from the list of prioritized rules. +(see {!Shared_ast.EDefault}) from the list of prioritized rules. Related modules: diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index ac36b9ec..c74ba856 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -23,11 +23,11 @@ open Shared_ast type target_scope_vars = | WholeVar of ScopeVar.t - | States of (Ast.StateName.t * ScopeVar.t) list + | States of (StateName.t * ScopeVar.t) list type ctx = { scope_var_mapping : target_scope_vars Ast.ScopeVarMap.t; - var_mapping : Scopelang.Ast.Var.t Ast.VarMap.t; + var_mapping : Scopelang.Ast.expr Var.t Ast.VarMap.t; } let tag_with_log_entry @@ -35,8 +35,7 @@ let tag_with_log_entry (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : Scopelang.Ast.expr Marked.pos = - ( Scopelang.Ast.EApp - ((Scopelang.Ast.EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), + ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : @@ -54,22 +53,21 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : | States states -> Marked.same_mark_as (snd (List.hd (List.rev states))) s_var in + Bindlib.box (ELocation (SubScopeVar (s_name, ss_name, new_s_var)), m) + | Ast.ELocation (Ast.ScopeVar (s_var, None)) -> Bindlib.box - (Scopelang.Ast.ELocation (SubScopeVar (s_name, ss_name, new_s_var)), m) - | Ast.ELocation (ScopeVar (s_var, None)) -> - Bindlib.box - ( Scopelang.Ast.ELocation - (ScopeVar + ( ELocation + (ScopelangScopeVar (match Ast.ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping with | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var | States _ -> failwith "should not happen")), m ) - | Ast.ELocation (ScopeVar (s_var, Some state)) -> + | Ast.ELocation (Ast.ScopeVar (s_var, Some state)) -> Bindlib.box - ( Scopelang.Ast.ELocation - (ScopeVar + ( ELocation + (ScopelangScopeVar (match Ast.ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping with @@ -83,30 +81,30 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : (Bindlib.box_var (Ast.VarMap.find v ctx.var_mapping)) | EStruct (s_name, fields) -> Bindlib.box_apply - (fun new_fields -> Scopelang.Ast.EStruct (s_name, new_fields), m) + (fun new_fields -> EStruct (s_name, new_fields), m) (Scopelang.Ast.StructFieldMapLift.lift_box (StructFieldMap.map (translate_expr ctx) fields)) | EStructAccess (e1, s_name, f_name) -> Bindlib.box_apply - (fun new_e1 -> Scopelang.Ast.EStructAccess (new_e1, s_name, f_name), m) + (fun new_e1 -> EStructAccess (new_e1, s_name, f_name), m) (translate_expr ctx e1) | EEnumInj (e1, cons, e_name) -> Bindlib.box_apply - (fun new_e1 -> Scopelang.Ast.EEnumInj (new_e1, cons, e_name), m) + (fun new_e1 -> EEnumInj (new_e1, cons, e_name), m) (translate_expr ctx e1) | EMatch (e1, e_name, arms) -> Bindlib.box_apply2 - (fun new_e1 new_arms -> - Scopelang.Ast.EMatch (new_e1, e_name, new_arms), m) + (fun new_e1 new_arms -> EMatchS (new_e1, e_name, new_arms), m) (translate_expr ctx e1) (Scopelang.Ast.EnumConstructorMapLift.lift_box (EnumConstructorMap.map (translate_expr ctx) arms)) - | ELit l -> Bindlib.box (Scopelang.Ast.ELit l, m) + | ELit + (( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ + | LDuration _ ) as l) -> + Bindlib.box (ELit l, m) | EAbs (binder, typs) -> let vars, body = Bindlib.unmbind binder in - let new_vars = - Array.map (fun var -> Scopelang.Ast.Var.make (Bindlib.name_of var)) vars - in + let new_vars = Array.map (fun var -> Var.make (Bindlib.name_of var)) vars in let ctx = List.fold_left2 (fun ctx var new_var -> @@ -114,32 +112,31 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : ctx (Array.to_list vars) (Array.to_list new_vars) in Bindlib.box_apply - (fun new_binder -> Scopelang.Ast.EAbs (new_binder, typs), m) + (fun new_binder -> EAbs (new_binder, typs), m) (Bindlib.bind_mvar new_vars (translate_expr ctx body)) | EApp (e1, args) -> Bindlib.box_apply2 - (fun new_e1 new_args -> Scopelang.Ast.EApp (new_e1, new_args), m) + (fun new_e1 new_args -> EApp (new_e1, new_args), m) (translate_expr ctx e1) (Bindlib.box_list (List.map (translate_expr ctx) args)) - | EOp op -> Bindlib.box (Scopelang.Ast.EOp op, m) + | EOp op -> Bindlib.box (EOp op, m) | EDefault (excepts, just, cons) -> Bindlib.box_apply3 (fun new_excepts new_just new_cons -> - Scopelang.Ast.make_default ~pos:m new_excepts new_just new_cons) + Expr.make_default new_excepts new_just new_cons m) (Bindlib.box_list (List.map (translate_expr ctx) excepts)) (translate_expr ctx just) (translate_expr ctx cons) | EIfThenElse (e1, e2, e3) -> Bindlib.box_apply3 - (fun new_e1 new_e2 new_e3 -> - Scopelang.Ast.EIfThenElse (new_e1, new_e2, new_e3), m) + (fun new_e1 new_e2 new_e3 -> EIfThenElse (new_e1, new_e2, new_e3), m) (translate_expr ctx e1) (translate_expr ctx e2) (translate_expr ctx e3) | EArray args -> Bindlib.box_apply - (fun new_args -> Scopelang.Ast.EArray new_args, m) + (fun new_args -> EArray new_args, m) (Bindlib.box_list (List.map (translate_expr ctx) args)) | ErrorOnEmpty e1 -> Bindlib.box_apply - (fun new_e1 -> Scopelang.Ast.ErrorOnEmpty new_e1, m) + (fun new_e1 -> ErrorOnEmpty new_e1, m) (translate_expr ctx e1) (** {1 Rule tree construction} *) @@ -219,9 +216,7 @@ let rec rule_tree_to_expr | Some new_param -> ( match Ast.VarMap.find_opt new_param ctx.var_mapping with | None -> - let new_param_scope = - Scopelang.Ast.Var.make (Bindlib.name_of new_param) - in + let new_param_scope = Var.make (Bindlib.name_of new_param) in { ctx with var_mapping = Ast.VarMap.add new_param new_param_scope ctx.var_mapping; @@ -256,17 +251,18 @@ let rec rule_tree_to_expr let default_containing_base_cases = Bindlib.box_apply2 (fun base_just_list base_cons_list -> - Scopelang.Ast.make_default + Expr.make_default (List.map2 (fun base_just base_cons -> - Scopelang.Ast.make_default ~pos:def_pos [] + Expr.make_default [] (* Here we insert the logging command that records when a decision is taken for the value of a variable. *) (tag_with_log_entry base_just PosRecordIfTrueBool []) - base_cons) + base_cons def_pos) base_just_list base_cons_list) - (Scopelang.Ast.ELit (LBool false), def_pos) - (Scopelang.Ast.ELit LEmptyError, def_pos)) + (ELit (LBool false), def_pos) + (ELit LEmptyError, def_pos) + def_pos) (Bindlib.box_list (translate_and_unbox_list base_just_list)) (Bindlib.box_list (translate_and_unbox_list base_cons_list)) in @@ -279,9 +275,9 @@ let rec rule_tree_to_expr let default = Bindlib.box_apply2 (fun exceptions default_containing_base_cases -> - Scopelang.Ast.make_default exceptions - (Scopelang.Ast.ELit (LBool true), def_pos) - default_containing_base_cases) + Expr.make_default exceptions + (ELit (LBool true), def_pos) + default_containing_base_cases def_pos) exceptions default_containing_base_cases in match is_func, (List.hd base_rules).Ast.rule_parameter with @@ -293,10 +289,10 @@ let rec rule_tree_to_expr let default = Bindlib.box_apply (fun (default : Scopelang.Ast.expr * Pos.t) -> - Scopelang.Ast.ErrorOnEmpty default, def_pos) + ErrorOnEmpty default, def_pos) default in - Scopelang.Ast.make_abs + Expr.make_abs [| Ast.VarMap.find new_param ctx.var_mapping |] default [typ] def_pos else default @@ -310,15 +306,13 @@ let translate_def (ctx : ctx) (def_info : Ast.ScopeDef.t) (def : Ast.rule Ast.RuleMap.t) - (typ : Scopelang.Ast.typ Marked.pos) + (typ : typ Marked.pos) (io : Scopelang.Ast.io) ~(is_cond : bool) ~(is_subscope_var : bool) : Scopelang.Ast.expr Marked.pos = (* Here, we have to transform this list of rules into a default tree. *) let is_def_func = - match Marked.unmark typ with - | Scopelang.Ast.TArrow (_, _) -> true - | _ -> false + match Marked.unmark typ with TArrow (_, _) -> true | _ -> false in let is_rule_func _ (r : Ast.rule) : bool = Option.is_some r.Ast.rule_parameter @@ -327,15 +321,15 @@ let translate_def let all_rules_not_func = Ast.RuleMap.for_all (fun n r -> not (is_rule_func n r)) def in - let is_def_func_param_typ : Scopelang.Ast.typ Marked.pos option = + let is_def_func_param_typ : typ Marked.pos option = if is_def_func && all_rules_func then match Marked.unmark typ with - | Scopelang.Ast.TArrow (t_param, _) -> Some t_param + | TArrow (t_param, _) -> Some t_param | _ -> Errors.raise_spanned_error (Marked.get_mark typ) - "The definitions of %a are function but its type, %a, is not a \ - function type" - Ast.ScopeDef.format_t def_info Scopelang.Print.format_typ typ + "The definitions of %a are function but it doesn't have a function \ + type" + Ast.ScopeDef.format_t def_info else if (not is_def_func) && all_rules_not_func then None else let spans = @@ -449,7 +443,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = redefined. *) Errors.raise_multispanned_error (( Some "Incriminated variable:", - Marked.get_mark (Ast.ScopeVar.get_info var) ) + Marked.get_mark (ScopeVar.get_info var) ) :: List.map (fun (rule, _) -> ( Some "Incriminated variable definition:", @@ -477,7 +471,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = in [ Scopelang.Ast.Definition - ( ( Scopelang.Ast.ScopeVar + ( ( ScopelangScopeVar ( scope_var, Marked.get_mark (ScopeVar.get_info scope_var) ), Marked.get_mark (ScopeVar.get_info scope_var) ), @@ -531,8 +525,8 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = (( Some "Incriminated subscope:", Ast.ScopeDef.get_position def_key ) :: ( Some "Incriminated variable:", - Marked.get_mark - (Ast.ScopeVar.get_info sub_scope_var) ) + Marked.get_mark (ScopeVar.get_info sub_scope_var) + ) :: List.map (fun (rule, _) -> ( Some @@ -549,8 +543,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = ( Some "Incriminated subscope:", Ast.ScopeDef.get_position def_key ); ( Some "Incriminated variable:", - Marked.get_mark - (Ast.ScopeVar.get_info sub_scope_var) ); + Marked.get_mark (ScopeVar.get_info sub_scope_var) ); ] "This subscope variable is a mandatory input but no \ definition was provided." @@ -567,10 +560,10 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = scope.scope_sub_scopes in let var_pos = - Marked.get_mark (Ast.ScopeVar.get_info sub_scope_var) + Marked.get_mark (ScopeVar.get_info sub_scope_var) in Scopelang.Ast.Definition - ( ( Scopelang.Ast.SubScopeVar + ( ( SubScopeVar ( subscop_real_name, (sub_scope_index, var_pos), match @@ -630,7 +623,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = interesting. We need to create as many Scopelang.Var entries in the scope signature as there are states. *) List.fold_left - (fun acc (state : Ast.StateName.t) -> + (fun acc (state : StateName.t) -> let scope_def = Ast.ScopeDefMap.find (Ast.ScopeDef.Var (var, Some state)) @@ -668,7 +661,7 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = ctx with scope_var_mapping = Ast.ScopeVarMap.add scope_var - (WholeVar (ScopeVar.fresh (Ast.ScopeVar.get_info scope_var))) + (WholeVar (ScopeVar.fresh (ScopeVar.get_info scope_var))) ctx.scope_var_mapping; } | States states -> @@ -682,10 +675,9 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = ( state, ScopeVar.fresh (let state_name, state_pos = - Ast.StateName.get_info state + StateName.get_info state in - ( Marked.unmark - (Ast.ScopeVar.get_info scope_var) + ( Marked.unmark (ScopeVar.get_info scope_var) ^ "_" ^ state_name, state_pos )) )) @@ -702,6 +694,6 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = { Scopelang.Ast.program_scopes = Scopelang.Ast.ScopeMap.map (translate_scope ctx) pgrm.program_scopes; - Scopelang.Ast.program_structs = pgrm.program_structs; - Scopelang.Ast.program_enums = pgrm.program_enums; + Scopelang.Ast.program_ctx = + { ctx_structs = pgrm.program_structs; ctx_enums = pgrm.program_enums }; } diff --git a/compiler/driver.ml b/compiler/driver.ml index fc3a2911..a8edcc36 100644 --- a/compiler/driver.ml +++ b/compiler/driver.ml @@ -170,12 +170,12 @@ let driver source_file (options : Cli.options) : int = @@ fun fmt -> if Option.is_some options.ex_scope then Format.fprintf fmt "%a\n" - (Scopelang.Print.format_scope ~debug:options.debug) + (Scopelang.Print.scope prgm.program_ctx ~debug:options.debug) ( scope_uid, Scopelang.Ast.ScopeMap.find scope_uid prgm.program_scopes ) else Format.fprintf fmt "%a\n" - (Scopelang.Print.format_program ~debug:options.debug) + (Scopelang.Print.program ~debug:options.debug) prgm | ( `Interpret | `Typecheck | `OCaml | `Python | `Scalc | `Lcalc | `Dcalc | `Proof | `Plugin _ ) as backend -> ( diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 1337d71a..25e1da7a 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -23,17 +23,6 @@ type 'm ctx = ('m D.expr, 'm A.expr Var.t) Var.Map.t (** This environment contains a mapping between the variables in Dcalc and their correspondance in Lcalc. *) -let translate_lit (l : D.lit) : 'm A.expr = - match l with - | LBool l -> ELit (LBool l) - | LInt i -> ELit (LInt i) - | LRat r -> ELit (LRat r) - | LMoney m -> ELit (LMoney m) - | LUnit -> ELit LUnit - | LDate d -> ELit (LDate d) - | LDuration d -> ELit (LDuration d) - | LEmptyError -> ERaise EmptyError - let thunk_expr (e : 'm A.marked_expr Bindlib.box) (mark : 'm mark) : 'm A.marked_expr Bindlib.box = let dummy_var = Var.make "_" in @@ -78,7 +67,11 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : en (Marked.get_mark e) | EArray es -> Expr.earray (List.map (translate_expr ctx) es) (Marked.get_mark e) - | ELit l -> Bindlib.box (Marked.same_mark_as (translate_lit l) e) + | ELit + ((LBool _ | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ | LDuration _) as + l) -> + Bindlib.box (Marked.same_mark_as (ELit l) e) + | ELit LEmptyError -> Bindlib.box (Marked.same_mark_as (ERaise EmptyError) e) | EOp op -> Expr.eop op (Marked.get_mark e) | EIfThenElse (e1, e2, e3) -> Expr.eifthenelse (translate_expr ctx e1) (translate_expr ctx e2) diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 2defea99..f0d9e914 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -137,20 +137,6 @@ let rec translate_typ (tau : typ Marked.pos) : typ Marked.pos = | TArrow (t1, t2) -> TArrow (translate_typ t1, translate_typ t2) end -let translate_lit (l : D.lit) (pos : Pos.t) : A.lit = - match l with - | LBool l -> LBool l - | LInt i -> LInt i - | LRat r -> LRat r - | LMoney m -> LMoney m - | LUnit -> LUnit - | LDate d -> LDate d - | LDuration d -> LDuration d - | LEmptyError -> - Errors.raise_spanned_error pos - "Internal Error: An empty error was found in a place that shouldn't be \ - possible." - (** [c = disjoint_union_maps cs] Compute the disjoint union of multiple maps. Raises an internal error if there is two identicals keys in differnts parts. *) let disjoint_union_maps (pos : Pos.t) (cs : ('e, 'a) Var.Map.t list) : @@ -219,7 +205,10 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : (Expr.make_abs [| x |] (Expr.make_var (x, pos)) [TAny, Expr.pos e] pos), Var.Map.empty ) (* pure terms *) - | ELit l -> Expr.elit (translate_lit l (Expr.pos e)) pos, Var.Map.empty + | ELit + ((LBool _ | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ | LDuration _) as + l) -> + Expr.elit l pos, Var.Map.empty | EIfThenElse (e1, e2, e3) -> let e1', h1 = translate_and_hoist ctx e1 in let e2', h2 = translate_and_hoist ctx e2 in diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 23e0e1f2..43cdcf64 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -107,14 +107,14 @@ let rec format_statement (fun fmt ((name, _), typ) -> Format.fprintf fmt "%a%a %a@ %a%a" Print.punctuation "(" LocalName.format_t name Print.punctuation ":" (Print.typ decl_ctx) - (Marked.unmark typ) Print.punctuation ")")) + typ Print.punctuation ")")) func.func_params Print.punctuation "=" (format_block decl_ctx ~debug) func.func_body | SLocalDecl (name, typ) -> Format.fprintf fmt "@[%a %a %a@ %a@]" Print.keyword "decl" LocalName.format_t (Marked.unmark name) Print.punctuation ":" - (Print.typ decl_ctx) (Marked.unmark typ) + (Print.typ decl_ctx) typ | SLocalDef (name, expr) -> Format.fprintf fmt "@[%a %a@ %a@]" LocalName.format_t (Marked.unmark name) Print.punctuation "=" @@ -184,7 +184,7 @@ let format_scope (fun fmt ((name, _), typ) -> Format.fprintf fmt "%a%a %a@ %a%a" Print.punctuation "(" LocalName.format_t name Print.punctuation ":" (Print.typ decl_ctx) - (Marked.unmark typ) Print.punctuation ")")) + typ Print.punctuation ")")) body.scope_body_func.func_params Print.punctuation "=" (format_block decl_ctx ~debug) body.scope_body_func.func_body diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index c8f10b24..f91a5011 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -29,10 +29,7 @@ module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) module StructFieldMapLift = Bindlib.Lift (StructFieldMap) module EnumConstructorMapLift = Bindlib.Lift (EnumConstructorMap) -type location = - | ScopeVar of ScopeVar.t Marked.pos - | SubScopeVar of - ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos +type location = scopelang glocation module LocationSet : Set.S with type elt = location Marked.pos = Set.Make (struct @@ -40,166 +37,24 @@ Set.Make (struct let compare x y = match Marked.unmark x, Marked.unmark y with - | ScopeVar (vx, _), ScopeVar (vy, _) -> ScopeVar.compare vx vy + | ScopelangScopeVar (vx, _), ScopelangScopeVar (vy, _) -> + ScopeVar.compare vx vy | ( SubScopeVar (_, (xsubindex, _), (xsubvar, _)), SubScopeVar (_, (ysubindex, _), (ysubvar, _)) ) -> let c = SubScopeName.compare xsubindex ysubindex in if c = 0 then ScopeVar.compare xsubvar ysubvar else c - | ScopeVar _, SubScopeVar _ -> -1 - | SubScopeVar _, ScopeVar _ -> 1 + | ScopelangScopeVar _, SubScopeVar _ -> -1 + | SubScopeVar _, ScopelangScopeVar _ -> 1 end) -type typ = - | TLit of typ_lit - | TStruct of StructName.t - | TEnum of EnumName.t - | TArrow of typ Marked.pos * typ Marked.pos - | TArray of typ - | TAny - -module Typ = struct - type t = typ - - let rec compare ty1 ty2 = - match ty1, ty2 with - | TLit l1, TLit l2 -> Stdlib.compare l1 l2 - | TStruct n1, TStruct n2 -> StructName.compare n1 n2 - | TEnum en1, TEnum en2 -> EnumName.compare en1 en2 - | TArrow ((a1, _), (b1, _)), TArrow ((a2, _), (b2, _)) -> ( - match compare a1 a2 with 0 -> compare b1 b2 | n -> n) - | TArray t1, TArray t2 -> compare t1 t2 - | TAny, TAny -> 0 - | TLit _, _ -> -1 - | _, TLit _ -> 1 - | TStruct _, _ -> -1 - | _, TStruct _ -> 1 - | TEnum _, _ -> -1 - | _, TEnum _ -> 1 - | TArrow _, _ -> -1 - | _, TArrow _ -> 1 - | TArray _, _ -> -1 - | _, TArray _ -> 1 -end - +type expr = (scopelang, Pos.t) gexpr type marked_expr = expr Marked.pos -and expr = - | ELocation of location - | EVar of expr Bindlib.var - | EStruct of StructName.t * marked_expr StructFieldMap.t - | EStructAccess of marked_expr * StructFieldName.t * StructName.t - | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t - | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t - | ELit of Dcalc.Ast.lit - | EAbs of (expr, marked_expr) Bindlib.mbinder * typ Marked.pos list - | EApp of marked_expr * marked_expr list - | EOp of operator - | EDefault of marked_expr list * marked_expr * marked_expr - | EIfThenElse of marked_expr * marked_expr * marked_expr - | EArray of marked_expr list - | ErrorOnEmpty of marked_expr +module ExprMap = Map.Make (struct + type t = marked_expr -module Expr = struct - type t = expr - - let rec compare e1 e2 = - let rec list_compare cmp l1 l2 = - (* List.compare is available from OCaml 4.12 on *) - match l1, l2 with - | [], [] -> 0 - | [], _ :: _ -> -1 - | _ :: _, [] -> 1 - | a1 :: l1, a2 :: l2 -> - let c = cmp a1 a2 in - if c <> 0 then c else list_compare cmp l1 l2 - in - match e1, e2 with - | ELocation _, ELocation _ -> 0 - | EVar v1, EVar v2 -> Bindlib.compare_vars v1 v2 - | EStruct (name1, field_map1), EStruct (name2, field_map2) -> ( - match StructName.compare name1 name2 with - | 0 -> - StructFieldMap.compare (Marked.compare compare) field_map1 field_map2 - | n -> n) - | ( EStructAccess ((e1, _), field_name1, struct_name1), - EStructAccess ((e2, _), field_name2, struct_name2) ) -> ( - match compare e1 e2 with - | 0 -> ( - match StructFieldName.compare field_name1 field_name2 with - | 0 -> StructName.compare struct_name1 struct_name2 - | n -> n) - | n -> n) - | EEnumInj ((e1, _), cstr1, name1), EEnumInj ((e2, _), cstr2, name2) -> ( - match compare e1 e2 with - | 0 -> ( - match EnumName.compare name1 name2 with - | 0 -> EnumConstructor.compare cstr1 cstr2 - | n -> n) - | n -> n) - | EMatch ((e1, _), name1, emap1), EMatch ((e2, _), name2, emap2) -> ( - match compare e1 e2 with - | 0 -> ( - match EnumName.compare name1 name2 with - | 0 -> EnumConstructorMap.compare (Marked.compare compare) emap1 emap2 - | n -> n) - | n -> n) - | ELit l1, ELit l2 -> Stdlib.compare l1 l2 - | EAbs (binder1, typs1), EAbs (binder2, typs2) -> ( - match list_compare (Marked.compare Typ.compare) typs1 typs2 with - | 0 -> - let _, (e1, _), (e2, _) = Bindlib.unmbind2 binder1 binder2 in - compare e1 e2 - | n -> n) - | EApp ((f1, _), args1), EApp ((f2, _), args2) -> ( - match compare f1 f2 with - | 0 -> list_compare (fun (x1, _) (x2, _) -> compare x1 x2) args1 args2 - | n -> n) - | EOp op1, EOp op2 -> Stdlib.compare op1 op2 - | ( EDefault (exs1, (just1, _), (cons1, _)), - EDefault (exs2, (just2, _), (cons2, _)) ) -> ( - match compare just1 just2 with - | 0 -> ( - match compare cons1 cons2 with - | 0 -> list_compare (Marked.compare compare) exs1 exs2 - | n -> n) - | n -> n) - | ( EIfThenElse ((i1, _), (t1, _), (e1, _)), - EIfThenElse ((i2, _), (t2, _), (e2, _)) ) -> ( - match compare i1 i2 with - | 0 -> ( match compare t1 t2 with 0 -> compare e1 e2 | n -> n) - | n -> n) - | EArray a1, EArray a2 -> - list_compare (fun (e1, _) (e2, _) -> compare e1 e2) a1 a2 - | ErrorOnEmpty (e1, _), ErrorOnEmpty (e2, _) -> compare e1 e2 - | ELocation _, _ -> -1 - | _, ELocation _ -> 1 - | EVar _, _ -> -1 - | _, EVar _ -> 1 - | EStruct _, _ -> -1 - | _, EStruct _ -> 1 - | EStructAccess _, _ -> -1 - | _, EStructAccess _ -> 1 - | EEnumInj _, _ -> -1 - | _, EEnumInj _ -> 1 - | EMatch _, _ -> -1 - | _, EMatch _ -> 1 - | ELit _, _ -> -1 - | _, ELit _ -> 1 - | EAbs _, _ -> -1 - | _, EAbs _ -> 1 - | EApp _, _ -> -1 - | _, EApp _ -> 1 - | EOp _, _ -> -1 - | _, EOp _ -> 1 - | EDefault _, _ -> -1 - | _, EDefault _ -> 1 - | EIfThenElse _, _ -> -1 - | _, EIfThenElse _ -> 1 - | EArray _, _ -> -1 - | _, EArray _ -> 1 -end - -module ExprMap = Map.Make (Expr) + let compare = Expr.compare +end) let rec locations_used (e : expr Marked.pos) : LocationSet.t = match Marked.unmark e with @@ -214,7 +69,7 @@ let rec locations_used (e : expr Marked.pos) : LocationSet.t = es LocationSet.empty | EStructAccess (e1, _, _) -> locations_used e1 | EEnumInj (e1, _, _) -> locations_used e1 - | EMatch (e1, _, es) -> + | EMatchS (e1, _, es) -> EnumConstructorMap.fold (fun _ e' acc -> LocationSet.union acc (locations_used e')) es (locations_used e1) @@ -240,79 +95,17 @@ type io_input = NoInput | OnlyInput | Reentrant type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } type rule = - | Definition of location Marked.pos * typ Marked.pos * io * expr Marked.pos + | Definition of location Marked.pos * marked_typ * io * expr Marked.pos | Assertion of expr Marked.pos | Call of ScopeName.t * SubScopeName.t type scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (typ Marked.pos * io) ScopeVarMap.t; + scope_sig : (marked_typ * io) ScopeVarMap.t; scope_decl_rules : rule list; } -type struct_ctx = (StructFieldName.t * typ Marked.pos) list StructMap.t -type enum_ctx = (EnumConstructor.t * typ Marked.pos) list EnumMap.t - type program = { program_scopes : scope_decl ScopeMap.t; - program_enums : enum_ctx; - program_structs : struct_ctx; + program_ctx : decl_ctx; } - -module Var = struct - type t = expr Bindlib.var - - let make (s : string) : t = - Bindlib.new_var (fun (x : expr Bindlib.var) : expr -> EVar x) s - - let compare x y = Bindlib.compare_vars x y -end - -type vars = expr Bindlib.mvar - -let make_var ((x, pos) : Var.t Marked.pos) : expr Marked.pos Bindlib.box = - Bindlib.box_apply (fun v -> v, pos) (Bindlib.box_var x) - -let make_abs - (xs : vars) - (e : expr Marked.pos Bindlib.box) - (taus : typ Marked.pos list) - (pos : Pos.t) : expr Marked.pos Bindlib.box = - Bindlib.box_apply (fun b -> EAbs (b, taus), pos) (Bindlib.bind_mvar xs e) - -let make_app - (e : expr Marked.pos Bindlib.box) - (u : expr Marked.pos Bindlib.box list) - (pos : Pos.t) : expr Marked.pos Bindlib.box = - Bindlib.box_apply2 (fun e u -> EApp (e, u), pos) e (Bindlib.box_list u) - -let make_let_in - (x : Var.t) - (tau : typ Marked.pos) - (e1 : expr Marked.pos Bindlib.box) - (e2 : expr Marked.pos Bindlib.box) : expr Marked.pos Bindlib.box = - Bindlib.box_apply2 - (fun e u -> EApp (e, u), Marked.get_mark (Bindlib.unbox e2)) - (make_abs [| x |] e2 [tau] (Marked.get_mark (Bindlib.unbox e2))) - (Bindlib.box_list [e1]) - -let make_default ?(pos = Pos.no_pos) exceptions just cons = - let rec bool_value = function - | ELit (LBool b), _ -> Some b - | EApp ((EOp (Unop (Log (l, _))), _), [e]), _ - when l <> PosRecordIfTrueBool - (* we don't remove the log calls corresponding to source code - definitions !*) -> - bool_value e - | _ -> None - in - match exceptions, bool_value just, cons with - | [], Some true, cons -> cons - | exceptions, Some true, (EDefault ([], just, cons), pos) -> - EDefault (exceptions, just, cons), pos - | [except], Some false, _ -> except - | exceptions, _, cons -> - let pos = if pos <> Pos.no_pos then pos else Marked.get_mark just in - EDefault (exceptions, just, cons), pos - -module VarMap = Map.Make (Var) diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 3e413008..a4eb897b 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -37,49 +37,18 @@ module EnumConstructorMapLift : sig 'a Bindlib.box EnumConstructorMap.t -> 'a EnumConstructorMap.t Bindlib.box end -type location = - | ScopeVar of ScopeVar.t Marked.pos - | SubScopeVar of - ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos +type location = scopelang glocation module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type typ = - | TLit of typ_lit - | TStruct of StructName.t - | TEnum of EnumName.t - | TArrow of typ Marked.pos * typ Marked.pos - | TArray of typ - | TAny +type expr = (scopelang, Pos.t) gexpr +type marked_expr = (scopelang, Pos.t) marked_gexpr -module Typ : Set.OrderedType with type t = typ +module ExprMap : Map.S with type key = marked_expr -type marked_expr = expr Marked.pos -(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} - library, based on higher-order abstract syntax*) - -and expr = - | ELocation of location - | EVar of expr Bindlib.var - | EStruct of StructName.t * marked_expr StructFieldMap.t - | EStructAccess of marked_expr * StructFieldName.t * StructName.t - | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t - | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t - | ELit of Dcalc.Ast.lit - | EAbs of (expr, marked_expr) Bindlib.mbinder * typ Marked.pos list - | EApp of marked_expr * marked_expr list - | EOp of operator - | EDefault of marked_expr list * marked_expr * marked_expr - | EIfThenElse of marked_expr * marked_expr * marked_expr - | EArray of marked_expr list - | ErrorOnEmpty of marked_expr - -module Expr : Set.OrderedType with type t = expr -module ExprMap : Map.S with type key = expr - -val locations_used : expr Marked.pos -> LocationSet.t +val locations_used : marked_expr -> LocationSet.t (** This type characterizes the three levels of visibility for a given scope variable with regards to the scope's input and possible redefinitions inside @@ -103,75 +72,17 @@ type io = { (** Characterization of the input/output status of a scope variable. *) type rule = - | Definition of location Marked.pos * typ Marked.pos * io * expr Marked.pos + | Definition of location Marked.pos * marked_typ * io * expr Marked.pos | Assertion of expr Marked.pos | Call of ScopeName.t * SubScopeName.t type scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (typ Marked.pos * io) ScopeVarMap.t; + scope_sig : (marked_typ * io) ScopeVarMap.t; scope_decl_rules : rule list; } -type struct_ctx = (StructFieldName.t * typ Marked.pos) list StructMap.t -type enum_ctx = (EnumConstructor.t * typ Marked.pos) list EnumMap.t - type program = { program_scopes : scope_decl ScopeMap.t; - program_enums : enum_ctx; - program_structs : struct_ctx; + program_ctx : decl_ctx; } - -(** {1 Variable helpers} *) - -module Var : sig - type t = expr Bindlib.var - - val make : string -> t - val compare : t -> t -> int -end - -module VarMap : Map.S with type key = Var.t - -type vars = expr Bindlib.mvar - -val make_var : Var.t Marked.pos -> expr Marked.pos Bindlib.box - -val make_abs : - vars -> - expr Marked.pos Bindlib.box -> - typ Marked.pos list -> - Pos.t -> - expr Marked.pos Bindlib.box - -val make_app : - expr Marked.pos Bindlib.box -> - expr Marked.pos Bindlib.box list -> - Pos.t -> - expr Marked.pos Bindlib.box - -val make_let_in : - Var.t -> - typ Marked.pos -> - expr Marked.pos Bindlib.box -> - expr Marked.pos Bindlib.box -> - expr Marked.pos Bindlib.box - -val make_default : - ?pos:Pos.t -> - expr Marked.pos list -> - expr Marked.pos -> - expr Marked.pos -> - expr Marked.pos -(** [make_default ?pos exceptions just cons] builds a term semantically - equivalent to [] (the [EDefault] constructor) - while avoiding redundant nested constructions. The position is extracted - from [just] by default. - - Note that, due to the simplifications taking place, the result might not be - of the form [EDefault]: - - - [] is rewritten as [x] - - [], when [def] is a default term [] without - exceptions, is collapsed into [] - - [], when [ex] is a single exception, is rewritten as [ex] *) diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index aef7f0dd..0f70fe27 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -164,19 +164,23 @@ module TTopologicalTraversal = Graph.Topological.Make (TDependencies) module TSCC = Graph.Components.Make (TDependencies) (** Tarjan's stongly connected components algorithm, provided by OCamlGraph *) -let rec get_structs_or_enums_in_type (t : Ast.typ Marked.pos) : TVertexSet.t = +let rec get_structs_or_enums_in_type (t : typ Marked.pos) : TVertexSet.t = match Marked.unmark t with - | Ast.TStruct s -> TVertexSet.singleton (TVertex.Struct s) - | Ast.TEnum e -> TVertexSet.singleton (TVertex.Enum e) - | Ast.TArrow (t1, t2) -> + | TStruct s -> TVertexSet.singleton (TVertex.Struct s) + | TEnum e -> TVertexSet.singleton (TVertex.Enum e) + | TArrow (t1, t2) -> TVertexSet.union (get_structs_or_enums_in_type t1) (get_structs_or_enums_in_type t2) - | Ast.TLit _ | Ast.TAny -> TVertexSet.empty - | Ast.TArray t1 -> get_structs_or_enums_in_type (Marked.same_mark_as t1 t) + | TLit _ | TAny -> TVertexSet.empty + | TOption t1 | TArray t1 -> get_structs_or_enums_in_type t1 + | TTuple ts -> + List.fold_left + (fun acc t -> TVertexSet.union acc (get_structs_or_enums_in_type t)) + TVertexSet.empty ts -let build_type_graph (structs : Ast.struct_ctx) (enums : Ast.enum_ctx) : - TDependencies.t = +let build_type_graph (structs : struct_ctx) (enums : enum_ctx) : TDependencies.t + = let g = TDependencies.empty in let g = StructMap.fold @@ -228,8 +232,8 @@ let build_type_graph (structs : Ast.struct_ctx) (enums : Ast.enum_ctx) : in g -let check_type_cycles (structs : Ast.struct_ctx) (enums : Ast.enum_ctx) : - TVertex.t list = +let check_type_cycles (structs : struct_ctx) (enums : enum_ctx) : TVertex.t list + = let g = build_type_graph structs enums in (* if there is a cycle, there will be an strongly connected component of cardinality > 1 *) diff --git a/compiler/scopelang/dependency.mli b/compiler/scopelang/dependency.mli index 0414b1ae..78eafa4d 100644 --- a/compiler/scopelang/dependency.mli +++ b/compiler/scopelang/dependency.mli @@ -49,6 +49,6 @@ module TVertexSet : Set.S with type elt = TVertex.t module TDependencies : Graph.Sig.P with type V.t = TVertex.t and type E.label = Pos.t -val get_structs_or_enums_in_type : Ast.typ Marked.pos -> TVertexSet.t -val build_type_graph : Ast.struct_ctx -> Ast.enum_ctx -> TDependencies.t -val check_type_cycles : Ast.struct_ctx -> Ast.enum_ctx -> TVertex.t list +val get_structs_or_enums_in_type : typ Marked.pos -> TVertexSet.t +val build_type_graph : struct_ctx -> enum_ctx -> TDependencies.t +val check_type_cycles : struct_ctx -> enum_ctx -> TVertex.t list diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 75a9e16c..86e7085d 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -18,147 +18,8 @@ open Utils open Shared_ast open Ast -let needs_parens (e : expr Marked.pos) : bool = - match Marked.unmark e with EAbs _ -> true | _ -> false - -let format_var (fmt : Format.formatter) (v : Var.t) : unit = - Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) - -let format_location (fmt : Format.formatter) (l : location) : unit = - match l with - | ScopeVar v -> Format.fprintf fmt "%a" ScopeVar.format_t (Marked.unmark v) - | SubScopeVar (_, subindex, subvar) -> - Format.fprintf fmt "%a.%a" SubScopeName.format_t (Marked.unmark subindex) - ScopeVar.format_t (Marked.unmark subvar) - -let typ_needs_parens (e : typ Marked.pos) : bool = - match Marked.unmark e with TArrow _ -> true | _ -> false - -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = - if typ_needs_parens t then - Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_typ t - Print.punctuation ")" - else Format.fprintf fmt "%a" format_typ t - in - match Marked.unmark typ with - | TLit l -> Print.tlit fmt l - | TStruct s -> Format.fprintf fmt "%a" StructName.format_t s - | TEnum e -> Format.fprintf fmt "%a" EnumName.format_t e - | TArrow (t1, t2) -> - Format.fprintf fmt "@[%a %a@ %a@]" format_typ_with_parens t1 - Print.operator "→" format_typ t2 - | TArray t1 -> - Format.fprintf fmt "@[%a@ %a@]" format_typ - (Marked.same_mark_as t1 typ) - Print.base_type "array" - | TAny -> Format.fprintf fmt "any" - -let rec format_expr - ?(debug : bool = false) - (fmt : Format.formatter) - (e : expr Marked.pos) : unit = - let format_expr = format_expr ~debug in - let format_with_parens (fmt : Format.formatter) (e : expr Marked.pos) = - if needs_parens e then Format.fprintf fmt "(%a)" format_expr e - else Format.fprintf fmt "%a" format_expr e - in - match Marked.unmark e with - | ELocation l -> Format.fprintf fmt "%a" format_location l - | EVar v -> Format.fprintf fmt "%a" format_var v - | ELit l -> Format.fprintf fmt "%a" Print.lit l - | EStruct (name, fields) -> - Format.fprintf fmt " @[%a@ %a@ %a@ %a@]" StructName.format_t name - Print.punctuation "{" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " Print.punctuation ";") - (fun fmt (field_name, field_expr) -> - Format.fprintf fmt "%a%a%a%a@ %a" Print.punctuation "\"" - StructFieldName.format_t field_name Print.punctuation "\"" - Print.punctuation "=" format_expr field_expr)) - (StructFieldMap.bindings fields) - Print.punctuation "}" - | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" format_expr e1 Print.punctuation "." - Print.punctuation "\"" StructFieldName.format_t field Print.punctuation - "\"" - | EEnumInj (e1, cons, _) -> - Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons format_expr e1 - | EMatch (e1, _, cases) -> - Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" Print.keyword - "match" format_expr e1 Print.keyword "with" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") - (fun fmt (cons_name, case_expr) -> - Format.fprintf fmt "@[%a %a@ %a@ %a@]" Print.punctuation "|" - Print.enum_constructor cons_name Print.punctuation "→" format_expr - case_expr)) - (EnumConstructorMap.bindings cases) - | EApp ((EAbs (binder, taus), _), args) -> - let xs, body = Bindlib.unmbind binder in - let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in - let xs_tau_arg = List.map2 (fun (x, tau) arg -> x, tau, arg) xs_tau args in - Format.fprintf fmt "@[%a%a@]" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt " ") - (fun fmt (x, tau, arg) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@\n@]" - Print.keyword "let" format_var x Print.punctuation ":" format_typ - tau Print.punctuation "=" format_expr arg Print.keyword "in")) - xs_tau_arg format_expr body - | EAbs (binder, taus) -> - let xs, body = Bindlib.unmbind binder in - let xs_tau = List.map2 (fun x tau -> x, tau) (Array.to_list xs) taus in - Format.fprintf fmt "@[%a@ %a@ %a@ %a@]" Print.punctuation "λ" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt " ") - (fun fmt (x, tau) -> - Format.fprintf fmt "@[%a%a%a@ %a%a@]" Print.punctuation "(" - format_var x Print.punctuation ":" format_typ tau Print.punctuation - ")")) - xs_tau Print.punctuation "→" format_expr body - | EApp ((EOp (Binop op), _), [arg1; arg2]) -> - Format.fprintf fmt "@[%a@ %a@ %a@]" format_with_parens arg1 Print.binop op - format_with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> - format_expr fmt arg1 - | EApp ((EOp (Unop op), _), [arg1]) -> - Format.fprintf fmt "@[%a@ %a@]" Print.unop op format_with_parens arg1 - | EApp (f, args) -> - Format.fprintf fmt "@[%a@ %a@]" format_expr f - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") - format_with_parens) - args - | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" Print.keyword "if" - format_expr e1 Print.keyword "then" format_expr e2 Print.keyword "else" - format_expr e3 - | EOp (Ternop op) -> Format.fprintf fmt "%a" Print.ternop op - | EOp (Binop op) -> Format.fprintf fmt "%a" Print.binop op - | EOp (Unop op) -> Format.fprintf fmt "%a" Print.unop op - | EDefault (excepts, just, cons) -> - if List.length excepts = 0 then - Format.fprintf fmt "@[%a%a %a@ %a%a@]" Print.punctuation "⟨" format_expr - just Print.punctuation "⊢" format_expr cons Print.punctuation "⟩" - else - Format.fprintf fmt "@[%a%a@ %a@ %a %a@ %a%a@]" Print.punctuation - "⟨" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - format_expr) - excepts Print.punctuation "|" format_expr just Print.punctuation "⊢" - format_expr cons Print.punctuation "⟩" - | ErrorOnEmpty e' -> - Format.fprintf fmt "error_empty@ %a" format_with_parens e' - | EArray es -> - Format.fprintf fmt "%a%a%a" Print.punctuation "[" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Print.punctuation fmt ";") - (fun fmt e -> Format.fprintf fmt "@[%a@]" format_expr e)) - es Print.punctuation "]" - -let format_struct +let struc + ctx (fmt : Format.formatter) ((name, fields) : StructName.t * (StructFieldName.t * typ Marked.pos) list) : unit = @@ -168,10 +29,11 @@ let format_struct ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (field_name, typ) -> Format.fprintf fmt "%a%a %a" StructFieldName.format_t field_name - Print.punctuation ":" format_typ typ)) + Print.punctuation ":" (Print.typ ctx) typ)) fields Print.punctuation "}" -let format_enum +let enum + ctx (fmt : Format.formatter) ((name, cases) : EnumName.t * (EnumConstructor.t * typ Marked.pos) list) : unit = @@ -181,21 +43,17 @@ let format_enum ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (field_name, typ) -> Format.fprintf fmt "%a %a%a %a" Print.punctuation "|" - EnumConstructor.format_t field_name Print.punctuation ":" format_typ - typ)) + EnumConstructor.format_t field_name Print.punctuation ":" + (Print.typ ctx) typ)) cases -let format_scope - ?(debug : bool = false) - (fmt : Format.formatter) - ((name, decl) : ScopeName.t * scope_decl) : unit = +let scope ?(debug = false) ctx fmt (name, decl) = Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@]@\n@[ %a@]" Print.keyword "let" Print.keyword "scope" ScopeName.format_t name - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") + (Format.pp_print_list ~pp_sep:Format.pp_print_space (fun fmt (scope_var, (typ, vis)) -> Format.fprintf fmt "%a%a%a %a%a%a%a%a" Print.punctuation "(" - ScopeVar.format_t scope_var Print.punctuation ":" format_typ typ + ScopeVar.format_t scope_var Print.punctuation ":" (Print.typ ctx) typ Print.punctuation "|" Print.keyword (match Marked.unmark vis.io_input with | NoInput -> "internal" @@ -214,12 +72,12 @@ let format_scope match rule with | Definition (loc, typ, _, e) -> Format.fprintf fmt "@[%a %a %a %a %a@ %a@]" Print.keyword - "let" format_location (Marked.unmark loc) Print.punctuation ":" - format_typ typ Print.punctuation "=" + "let" Print.location (Marked.unmark loc) Print.punctuation ":" + (Print.typ ctx) typ Print.punctuation "=" (fun fmt e -> match Marked.unmark loc with - | SubScopeVar _ -> format_expr fmt e - | ScopeVar v -> ( + | SubScopeVar _ -> Print.expr ctx fmt e + | ScopelangScopeVar v -> ( match Marked.unmark (snd (ScopeVarMap.find (Marked.unmark v) decl.scope_sig)) @@ -227,40 +85,33 @@ let format_scope with | Reentrant -> Format.fprintf fmt "%a@ %a" Print.operator - "reentrant or by default" (format_expr ~debug) e - | _ -> Format.fprintf fmt "%a" (format_expr ~debug) e)) + "reentrant or by default" (Print.expr ~debug ctx) e + | _ -> Format.fprintf fmt "%a" (Print.expr ~debug ctx) e)) e | Assertion e -> Format.fprintf fmt "%a %a" Print.keyword "assert" - (format_expr ~debug) e + (Print.expr ~debug ctx) e | Call (scope_name, subscope_name) -> Format.fprintf fmt "%a %a%a%a%a" Print.keyword "call" ScopeName.format_t scope_name Print.punctuation "[" SubScopeName.format_t subscope_name Print.punctuation "]")) decl.scope_decl_rules -let format_program - ?(debug : bool = false) - (fmt : Format.formatter) - (p : program) : unit = - Format.fprintf fmt "%a%a%a%a%a" - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "\n\n") - format_struct) - (StructMap.bindings p.program_structs) - (fun fmt () -> - if StructMap.is_empty p.program_structs then Format.fprintf fmt "" - else Format.fprintf fmt "\n\n") +let program ?(debug : bool = false) (fmt : Format.formatter) (p : program) : + unit = + let ctx = p.program_ctx in + let pp_sep fmt () = + Format.pp_print_cut fmt (); + Format.pp_print_cut fmt () + in + Format.fprintf fmt "@[%a%a%a%a%a@]" + (Format.pp_print_list ~pp_sep (struc ctx)) + (StructMap.bindings ctx.ctx_structs) + (if StructMap.is_empty ctx.ctx_structs then fun _ _ -> () else pp_sep) () - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "\n\n") - format_enum) - (EnumMap.bindings p.program_enums) - (fun fmt () -> - if EnumMap.is_empty p.program_enums then Format.fprintf fmt "" - else Format.fprintf fmt "\n\n") + (Format.pp_print_list ~pp_sep (enum ctx)) + (EnumMap.bindings ctx.ctx_enums) + (if EnumMap.is_empty ctx.ctx_enums then fun _ _ -> () else pp_sep) () - (Format.pp_print_list - ~pp_sep:(fun fmt () -> Format.fprintf fmt "\n\n") - (format_scope ~debug)) + (Format.pp_print_list ~pp_sep (scope ~debug ctx)) (ScopeMap.bindings p.program_scopes) diff --git a/compiler/scopelang/print.mli b/compiler/scopelang/print.mli index 3188ccce..77fbd320 100644 --- a/compiler/scopelang/print.mli +++ b/compiler/scopelang/print.mli @@ -14,25 +14,14 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils - -val format_var : Format.formatter -> Ast.Var.t -> unit -val format_location : Format.formatter -> Ast.location -> unit -val format_typ : Format.formatter -> Ast.typ Marked.pos -> unit - -val format_expr : - ?debug:bool (** [true] for debug printing *) -> - Format.formatter -> - Ast.expr Marked.pos -> - unit - -val format_scope : +val scope : ?debug:bool (** [true] for debug printing *) -> + Shared_ast.decl_ctx -> Format.formatter -> Shared_ast.ScopeName.t * Ast.scope_decl -> unit -val format_program : +val program : ?debug:bool (** [true] for debug printing *) -> Format.formatter -> Ast.program -> diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 34ee71ee..632afec5 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -36,20 +36,20 @@ type scope_sig_ctx = { type scope_sigs_ctx = scope_sig_ctx Ast.ScopeMap.t type ctx = { - structs : Ast.struct_ctx; - enums : Ast.enum_ctx; + structs : struct_ctx; + enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; scope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) Ast.ScopeVarMap.t; subscope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) Ast.ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : untyped Dcalc.Ast.expr Var.t Ast.VarMap.t; + local_vars : (Ast.expr, untyped Dcalc.Ast.expr Var.t) Var.Map.t; } let empty_ctx - (struct_ctx : Ast.struct_ctx) - (enum_ctx : Ast.enum_ctx) + (struct_ctx : struct_ctx) + (enum_ctx : enum_ctx) (scopes_ctx : scope_sigs_ctx) (scope_name : ScopeName.t) = { @@ -59,21 +59,9 @@ let empty_ctx scopes_parameters = scopes_ctx; scope_vars = Ast.ScopeVarMap.empty; subscope_vars = Ast.SubScopeMap.empty; - local_vars = Ast.VarMap.empty; + local_vars = Var.Map.empty; } -let rec translate_typ (_ctx : ctx) (t : Ast.typ Marked.pos) : typ Marked.pos = - Marked.same_mark_as - (match Marked.unmark t with - | Ast.TLit l -> TLit l - | Ast.TArrow (t1, t2) -> - TArrow (translate_typ _ctx t1, translate_typ _ctx t2) - | Ast.TStruct s_uid -> TStruct s_uid - | Ast.TEnum e_uid -> TEnum e_uid - | Ast.TArray t1 -> TArray (translate_typ _ctx (Marked.same_mark_as t1 t)) - | Ast.TAny -> TAny) - t - let pos_mark (pos : Pos.t) : untyped mark = Untyped { pos } let pos_mark_as e = pos_mark (Marked.get_mark e) @@ -118,7 +106,7 @@ let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : let cons_map = List.fold_left (fun map -> function - | (Ast.EDefault ([], _, (cons, _)), _) as e -> + | (EDefault ([], _, cons), _) as e -> Ast.ExprMap.update cons (fun prev -> Some (e :: Option.value ~default:[] prev)) map @@ -129,12 +117,12 @@ let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : List.fold_right (fun e (cons_map, excepts) -> match e with - | Ast.EDefault ([], _, (cons, _)), _ -> + | EDefault ([], _, cons), _ -> let collapsed_exc = List.fold_left (fun acc -> function - | Ast.EDefault ([], just, cons), pos -> - [Ast.EDefault (acc, just, cons), pos] + | EDefault ([], just, cons), pos -> + [EDefault (acc, just, cons), pos] | _ -> assert false) [] (Ast.ExprMap.find cons cons_map) @@ -151,8 +139,11 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Marked.mark (pos_mark_as e) x) @@ match Marked.unmark e with - | EVar v -> Bindlib.box_var (Ast.VarMap.find v ctx.local_vars) - | ELit l -> Bindlib.box (ELit l) + | EVar v -> Bindlib.box_var (Var.Map.find v ctx.local_vars) + | ELit + (( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ + | LDuration _ ) as l) -> + Bindlib.box (ELit l) | EStruct (struct_name, e_fields) -> let struct_sig = StructMap.find struct_name ctx.structs in let d_fields, remaining_e_fields = @@ -189,11 +180,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let e1 = translate_expr ctx e1 in Bindlib.box_apply (fun e1 -> - ETupleAccess - ( e1, - field_index, - Some struct_name, - List.map (fun (_, t) -> translate_typ ctx t) struct_sig )) + ETupleAccess (e1, field_index, Some struct_name, List.map snd struct_sig)) e1 | EEnumInj (e1, constructor, enum_name) -> let enum_sig = EnumMap.find enum_name ctx.enums in @@ -207,14 +194,9 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : in let e1 = translate_expr ctx e1 in Bindlib.box_apply - (fun e1 -> - EInj - ( e1, - constructor_index, - enum_name, - List.map (fun (_, t) -> translate_typ ctx t) enum_sig )) + (fun e1 -> EInj (e1, constructor_index, enum_name, List.map snd enum_sig)) e1 - | EMatch (e1, enum_name, cases) -> + | EMatchS (e1, enum_name, cases) -> let enum_sig = EnumMap.find enum_name ctx.enums in let d_cases, remaining_e_cases = List.fold_right @@ -251,9 +233,9 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let e1_func = translate_expr ctx e1 in let markings l = match l with - | Ast.ScopeVar (v, _) -> + | ScopelangScopeVar (v, _) -> [ScopeName.get_info ctx.scope_name; ScopeVar.get_info v] - | Ast.SubScopeVar (s, _, (v, _)) -> + | SubScopeVar (s, _, (v, _)) -> [ScopeName.get_info s; ScopeVar.get_info v] in let e1_func = @@ -275,7 +257,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : | _ -> TAny, TAny in match Marked.unmark e1 with - | ELocation (ScopeVar var) -> + | ELocation (ScopelangScopeVar var) -> retrieve_in_and_out_typ_or_any var ctx.scope_vars | ELocation (SubScopeVar (_, sname, var)) -> ctx.subscope_vars @@ -318,22 +300,20 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : ctx with local_vars = Array.fold_left - (fun local_vars (x, new_x) -> Ast.VarMap.add x new_x local_vars) + (fun local_vars (x, new_x) -> Var.Map.add x new_x local_vars) ctx.local_vars both_xs; } body in let binder = Bindlib.bind_mvar new_xs body in - Bindlib.box_apply - (fun b -> EAbs (b, List.map (translate_typ ctx) typ)) - binder + Bindlib.box_apply (fun b -> EAbs (b, typ)) binder | EDefault (excepts, just, cons) -> let excepts = collapse_similar_outcomes excepts in Bindlib.box_apply3 (fun e j c -> EDefault (e, j, c)) (Bindlib.box_list (List.map (translate_expr ctx) excepts)) (translate_expr ctx just) (translate_expr ctx cons) - | ELocation (ScopeVar a) -> + | ELocation (ScopelangScopeVar a) -> let v, _, _ = Ast.ScopeVarMap.find (Marked.unmark a) ctx.scope_vars in Bindlib.box_var v | ELocation (SubScopeVar (_, s, a)) -> ( @@ -381,10 +361,9 @@ let translate_rule untyped Dcalc.Ast.expr scope_body_expr Bindlib.box) * ctx = match rule with - | Definition ((ScopeVar a, var_def_pos), tau, a_io, e) -> + | Definition ((ScopelangScopeVar a, var_def_pos), tau, a_io, e) -> let a_name = ScopeVar.get_info (Marked.unmark a) in let a_var = Var.make (Marked.unmark a_name) in - let tau = translate_typ ctx tau in let new_e = translate_expr ctx e in let a_expr = Expr.make_var (a_var, pos_mark var_def_pos) in let merged_expr = @@ -435,7 +414,6 @@ let translate_rule (SubScopeName.get_info (Marked.unmark subs_index)) in let a_var = Var.make (Marked.unmark a_name) in - let tau = translate_typ ctx tau in let new_e = tag_with_log_entry (translate_expr ctx e) (VarDef (Marked.unmark tau)) @@ -690,8 +668,8 @@ let translate_rules new_ctx ) let translate_scope_decl - (struct_ctx : Ast.struct_ctx) - (enum_ctx : Ast.enum_ctx) + (struct_ctx : struct_ctx) + (enum_ctx : enum_ctx) (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : @@ -826,29 +804,11 @@ let translate_program (prgm : Ast.program) : let scope_dependencies = Dependency.build_program_dep_graph prgm in Dependency.check_for_cycle_in_scope scope_dependencies; let types_ordering = - Dependency.check_type_cycles prgm.program_structs prgm.program_enums + Dependency.check_type_cycles prgm.program_ctx.ctx_structs + prgm.program_ctx.ctx_enums in let scope_ordering = Dependency.get_scope_ordering scope_dependencies in - let struct_ctx = prgm.program_structs in - let enum_ctx = prgm.program_enums in - let ctx_for_typ_translation scope_name = - empty_ctx struct_ctx enum_ctx Ast.ScopeMap.empty scope_name - in - let dummy_scope = ScopeName.fresh ("dummy", Pos.no_pos) in - let decl_ctx = - { - ctx_structs = - StructMap.map - (List.map (fun (x, y) -> - x, translate_typ (ctx_for_typ_translation dummy_scope) y)) - struct_ctx; - ctx_enums = - EnumMap.map - (List.map (fun (x, y) -> - x, (translate_typ (ctx_for_typ_translation dummy_scope)) y)) - enum_ctx; - } - in + let decl_ctx = prgm.program_ctx in let sctx : scope_sigs_ctx = Ast.ScopeMap.mapi (fun scope_name scope -> @@ -875,9 +835,6 @@ let translate_program (prgm : Ast.program) : scope_sig_local_vars = List.map (fun (scope_var, (tau, vis)) -> - let tau = - translate_typ (ctx_for_typ_translation scope_name) tau - in { scope_var_name = scope_var; scope_var_typ = Marked.unmark tau; @@ -898,7 +855,8 @@ let translate_program (prgm : Ast.program) : (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in let scope_body, scope_out_struct = - translate_scope_decl struct_ctx enum_ctx sctx scope_name scope + translate_scope_decl decl_ctx.ctx_structs decl_ctx.ctx_enums sctx + scope_name scope in let dvar = (Ast.ScopeMap.find scope_name sctx).scope_sig_scope_var in let decl_ctx = diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index be2c6c17..b7e12b6a 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -56,6 +56,9 @@ module StructFieldMap : Map.S with type key = StructFieldName.t = module EnumConstructorMap : Map.S with type key = EnumConstructor.t = Map.Make (EnumConstructor) +module StateName : Uid.Id with type info = Uid.MarkedString.info = + Uid.Make (Uid.MarkedString) () + (** {1 Abstract syntax tree} *) (** {2 Types} *) @@ -131,12 +134,6 @@ type unop = | RoundDecimal type operator = Ternop of ternop | Binop of binop | Unop of unop - -type location = - | ScopeVar of ScopeVar.t Marked.pos - | SubScopeVar of - ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos - type except = ConflictError | EmptyError | NoValueProvided | Crash (** {2 Generic expressions} *) @@ -164,11 +161,28 @@ type 'a glit = | LDate : date -> 'a glit | LDuration : duration -> 'a glit +(** Locations are handled differently in [desugared] and [scopelang] *) +type 'a glocation = + | DesugaredScopeVar : + ScopeVar.t Marked.pos * StateName.t option + -> desugared glocation + | ScopelangScopeVar : ScopeVar.t Marked.pos -> scopelang glocation + | SubScopeVar : + ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos + -> [< desugared | scopelang ] glocation + type ('a, 't) marked_gexpr = (('a, 't) gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type expr = dcalc gexpr] plus the annotations. *) + are then defined with [type expr = dcalc gexpr] plus the annotations. + + A few tips on using this GADT: + + - To write a function that handles cases from different ASTs, explicit the + type variables: [fun (type a) (x: a gexpr) -> ...] + - For recursive functions, you may need to additionally explicit the + generalisation of the variable: [let rec f: type a . a gexpr -> ...] *) (** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} library, based on higher-order abstract syntax *) @@ -185,14 +199,13 @@ and ('a, 't) gexpr = ('a, 't) gexpr Bindlib.var -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr | EAbs : - (('a, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder - * typ Marked.pos list + (('a, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder * marked_typ list -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr | EIfThenElse : ('a, 't) marked_gexpr * ('a, 't) marked_gexpr * ('a, 't) marked_gexpr -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr (* Early stages *) - | ELocation : location -> (([< desugared | scopelang ] as 'a), 't) gexpr + | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) gexpr | EStruct : StructName.t * ('a, 't) marked_gexpr StructFieldMap.t -> (([< desugared | scopelang ] as 'a), 't) gexpr @@ -212,10 +225,10 @@ and ('a, 't) gexpr = ('a, 't) marked_gexpr list * StructName.t option -> (([< dcalc | lcalc ] as 'a), 't) gexpr | ETupleAccess : - ('a, 't) marked_gexpr * int * StructName.t option * typ Marked.pos list + ('a, 't) marked_gexpr * int * StructName.t option * marked_typ list -> (([< dcalc | lcalc ] as 'a), 't) gexpr | EInj : - ('a, 't) marked_gexpr * int * EnumName.t * typ Marked.pos list + ('a, 't) marked_gexpr * int * EnumName.t * marked_typ list -> (([< dcalc | lcalc ] as 'a), 't) gexpr | EMatch : ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list * EnumName.t @@ -330,10 +343,6 @@ and 'e scopes = constraint 'e = ('a, 'm mark) gexpr type struct_ctx = (StructFieldName.t * marked_typ) list StructMap.t - -type decl_ctx = { - ctx_enums : (EnumConstructor.t * marked_typ) list EnumMap.t; - ctx_structs : struct_ctx; -} - +type enum_ctx = (EnumConstructor.t * marked_typ) list EnumMap.t +type decl_ctx = { ctx_enums : enum_ctx; ctx_structs : struct_ctx } type 'e program = { decl_ctx : decl_ctx; scopes : 'e scopes } diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 6fb090ad..db585f9a 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -259,6 +259,23 @@ let make_multiple_let_in xs taus e1s e2 pos = in make_app (make_abs xs e2 taus m_abs) e1s m_e2 +let make_default exceptions just cons mark = + let rec bool_value = function + | ELit (LBool b), _ -> Some b + | EApp ((EOp (Unop (Log (l, _))), _), [e]), _ + when l <> PosRecordIfTrueBool + (* we don't remove the log calls corresponding to source code + definitions !*) -> + bool_value e + | _ -> None + in + match exceptions, bool_value just, cons with + | [], Some true, cons -> cons + | exceptions, Some true, (EDefault ([], just, cons), mark) -> + EDefault (exceptions, just, cons), mark + | [except], Some false, _ -> except + | exceptions, _, cons -> EDefault (exceptions, just, cons), mark + (* Tests *) let is_value (type a) (e : (a, 'm mark) gexpr marked) = @@ -266,34 +283,137 @@ let is_value (type a) (e : (a, 'm mark) gexpr marked) = | ELit _ | EAbs _ | EOp _ | ERaise _ -> true | _ -> false -let rec equal_typs ty1 ty2 = +let equal_tlit l1 l2 = l1 = l2 +let compare_tlit l1 l2 = Stdlib.compare l1 l2 + +let rec equal_typ ty1 ty2 = match Marked.unmark ty1, Marked.unmark ty2 with - | TLit l1, TLit l2 -> l1 = l2 - | TTuple tys1, TTuple tys2 -> equal_typs_list tys1 tys2 + | TLit l1, TLit l2 -> equal_tlit l1 l2 + | TTuple tys1, TTuple tys2 -> equal_typ_list tys1 tys2 | TStruct n1, TStruct n2 -> StructName.equal n1 n2 | TEnum n1, TEnum n2 -> EnumName.equal n1 n2 - | TOption t1, TOption t2 -> equal_typs t1 t2 - | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typs t1 t2 && equal_typs t1' t2' - | TArray t1, TArray t2 -> equal_typs t1 t2 + | TOption t1, TOption t2 -> equal_typ t1 t2 + | TArrow (t1, t1'), TArrow (t2, t2') -> equal_typ t1 t2 && equal_typ t1' t2' + | TArray t1, TArray t2 -> equal_typ t1 t2 | TAny, TAny -> true | ( ( TLit _ | TTuple _ | TStruct _ | TEnum _ | TOption _ | TArrow _ | TArray _ | TAny ), _ ) -> false -and equal_typs_list tys1 tys2 = - try List.for_all2 equal_typs tys1 tys2 with Invalid_argument _ -> false +and equal_typ_list tys1 tys2 = + try List.for_all2 equal_typ tys1 tys2 with Invalid_argument _ -> false + +let rec compare_typ ty1 ty2 = + match Marked.unmark ty1, Marked.unmark ty2 with + | TLit l1, TLit l2 -> compare_tlit l1 l2 + | TTuple tys1, TTuple tys2 -> List.compare compare_typ tys1 tys2 + | TStruct n1, TStruct n2 -> StructName.compare n1 n2 + | TEnum en1, TEnum en2 -> EnumName.compare en1 en2 + | TOption t1, TOption t2 -> compare_typ t1 t2 + | TArrow (a1, b1), TArrow (a2, b2) -> ( + match compare_typ a1 a2 with 0 -> compare_typ b1 b2 | n -> n) + | TArray t1, TArray t2 -> compare_typ t1 t2 + | TAny, TAny -> 0 + | TLit _, _ -> -1 + | _, TLit _ -> 1 + | TTuple _, _ -> -1 + | _, TTuple _ -> 1 + | TStruct _, _ -> -1 + | _, TStruct _ -> 1 + | TEnum _, _ -> -1 + | _, TEnum _ -> 1 + | TOption _, _ -> -1 + | _, TOption _ -> 1 + | TArrow _, _ -> -1 + | _, TArrow _ -> 1 + | TArray _, _ -> -1 + | _, TArray _ -> 1 + +let equal_lit (type a) (l1 : a glit) (l2 : a glit) = + match l1, l2 with + | LBool b1, LBool b2 -> Bool.equal b1 b2 + | LEmptyError, LEmptyError -> true + | LInt n1, LInt n2 -> Runtime.( =! ) n1 n2 + | LRat r1, LRat r2 -> Runtime.( =& ) r1 r2 + | LMoney m1, LMoney m2 -> Runtime.( =$ ) m1 m2 + | LUnit, LUnit -> true + | LDate d1, LDate d2 -> Runtime.( =@ ) d1 d2 + | LDuration d1, LDuration d2 -> Runtime.( =^ ) d1 d2 + | ( ( LBool _ | LEmptyError | LInt _ | LRat _ | LMoney _ | LUnit | LDate _ + | LDuration _ ), + _ ) -> + false + +let compare_lit (type a) (l1 : a glit) (l2 : a glit) = + match l1, l2 with + | LBool b1, LBool b2 -> Bool.compare b1 b2 + | LEmptyError, LEmptyError -> 0 + | LInt n1, LInt n2 -> + if Runtime.( + if Runtime.( <& ) r1 r2 then -1 else if Runtime.( =& ) r1 r2 then 0 else 1 + | LMoney m1, LMoney m2 -> + if Runtime.( <$ ) m1 m2 then -1 else if Runtime.( =$ ) m1 m2 then 0 else 1 + | LUnit, LUnit -> 0 + | LDate d1, LDate d2 -> + if Runtime.( <@ ) d1 d2 then -1 else if Runtime.( =@ ) d1 d2 then 0 else 1 + | LDuration d1, LDuration d2 -> ( + (* Duration comparison in the runtime may fail, so rely on a basic + lexicographic comparison instead *) + let y1, m1, d1 = Runtime.duration_to_years_months_days d1 in + let y2, m2, d2 = Runtime.duration_to_years_months_days d2 in + match compare y1 y2 with + | 0 -> ( match compare m1 m2 with 0 -> compare d1 d2 | n -> n) + | n -> n) + | LBool _, _ -> -1 + | _, LBool _ -> 1 + | LEmptyError, _ -> -1 + | _, LEmptyError -> 1 + | LInt _, _ -> -1 + | _, LInt _ -> 1 + | LRat _, _ -> -1 + | _, LRat _ -> 1 + | LMoney _, _ -> -1 + | _, LMoney _ -> 1 + | LUnit, _ -> -1 + | _, LUnit -> 1 + | LDate _, _ -> -1 + | _, LDate _ -> 1 + | LDuration _, _ -> . + | _, LDuration _ -> . let equal_log_entries l1 l2 = match l1, l2 with - | VarDef t1, VarDef t2 -> equal_typs (t1, Pos.no_pos) (t2, Pos.no_pos) + | VarDef t1, VarDef t2 -> equal_typ (t1, Pos.no_pos) (t2, Pos.no_pos) | x, y -> x = y +let compare_log_entries l1 l2 = + match l1, l2 with + | VarDef t1, VarDef t2 -> compare_typ (t1, Pos.no_pos) (t2, Pos.no_pos) + | BeginCall, BeginCall + | EndCall, EndCall + | PosRecordIfTrueBool, PosRecordIfTrueBool -> + 0 + | VarDef _, _ -> -1 + | _, VarDef _ -> 1 + | BeginCall, _ -> -1 + | _, BeginCall -> 1 + | EndCall, _ -> -1 + | _, EndCall -> 1 + | PosRecordIfTrueBool, _ -> . + | _, PosRecordIfTrueBool -> . + +(* let equal_op_kind = Stdlib.(=) *) + +let compare_op_kind = Stdlib.compare + let equal_unops op1 op2 = match op1, op2 with (* Log entries contain a typ which contain position information, we thus need to descend into them *) - | Log (l1, info1), Log (l2, info2) -> equal_log_entries l1 l2 && info1 = info2 + | Log (l1, info1), Log (l2, info2) -> + equal_log_entries l1 l2 && List.equal Uid.MarkedString.equal info1 info2 | Log _, _ | _, Log _ -> false (* All the other cases can be discharged through equality *) | ( ( Not | Minus _ | Length | IntToRat | MoneyToRat | RatToMoney | GetDay @@ -302,37 +422,104 @@ let equal_unops op1 op2 = _ ) -> op1 = op2 +let compare_unops op1 op2 = + match op1, op2 with + | Not, Not -> 0 + | Minus k1, Minus k2 -> compare_op_kind k1 k2 + | Log (l1, info1), Log (l2, info2) -> ( + match compare_log_entries l1 l2 with + | 0 -> List.compare Uid.MarkedString.compare info1 info2 + | n -> n) + | Length, Length + | IntToRat, IntToRat + | MoneyToRat, MoneyToRat + | RatToMoney, RatToMoney + | GetDay, GetDay + | GetMonth, GetMonth + | GetYear, GetYear + | FirstDayOfMonth, FirstDayOfMonth + | LastDayOfMonth, LastDayOfMonth + | RoundMoney, RoundMoney + | RoundDecimal, RoundDecimal -> + 0 + | Not, _ -> -1 + | _, Not -> 1 + | Minus _, _ -> -1 + | _, Minus _ -> 1 + | Log _, _ -> -1 + | _, Log _ -> 1 + | Length, _ -> -1 + | _, Length -> 1 + | IntToRat, _ -> -1 + | _, IntToRat -> 1 + | MoneyToRat, _ -> -1 + | _, MoneyToRat -> 1 + | RatToMoney, _ -> -1 + | _, RatToMoney -> 1 + | GetDay, _ -> -1 + | _, GetDay -> 1 + | GetMonth, _ -> -1 + | _, GetMonth -> 1 + | GetYear, _ -> -1 + | _, GetYear -> 1 + | FirstDayOfMonth, _ -> -1 + | _, FirstDayOfMonth -> 1 + | LastDayOfMonth, _ -> -1 + | _, LastDayOfMonth -> 1 + | RoundMoney, _ -> -1 + | _, RoundMoney -> 1 + | RoundDecimal, _ -> . + | _, RoundDecimal -> . + +let equal_binop = Stdlib.( = ) +let compare_binop = Stdlib.compare +let equal_ternop = Stdlib.( = ) +let compare_ternop = Stdlib.compare + let equal_ops op1 op2 = match op1, op2 with - | Ternop op1, Ternop op2 -> op1 = op2 - | Binop op1, Binop op2 -> op1 = op2 + | Ternop op1, Ternop op2 -> equal_ternop op1 op2 + | Binop op1, Binop op2 -> equal_binop op1 op2 | Unop op1, Unop op2 -> equal_unops op1 op2 | _, _ -> false +let compare_op op1 op2 = + match op1, op2 with + | Ternop op1, Ternop op2 -> compare_ternop op1 op2 + | Binop op1, Binop op2 -> compare_binop op1 op2 + | Unop op1, Unop op2 -> compare_unops op1 op2 + | Ternop _, _ -> -1 + | _, Ternop _ -> 1 + | Binop _, _ -> -1 + | _, Binop _ -> 1 + | Unop _, _ -> . + | _, Unop _ -> . + let equal_except ex1 ex2 = ex1 = ex2 +let compare_except ex1 ex2 = Stdlib.compare ex1 ex2 (* weird indentation; see https://github.com/ocaml-ppx/ocamlformat/issues/2143 *) let rec equal_list : - 'a. ('a, 't) gexpr marked list -> ('a, 't) gexpr marked list -> bool = + 'a. ('a, 't) marked_gexpr list -> ('a, 't) marked_gexpr list -> bool = fun es1 es2 -> try List.for_all2 equal es1 es2 with Invalid_argument _ -> false -and equal : type a. (a, 't) gexpr marked -> (a, 't) gexpr marked -> bool = +and equal : type a. (a, 't) marked_gexpr -> (a, 't) marked_gexpr -> bool = fun e1 e2 -> match Marked.unmark e1, Marked.unmark e2 with | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 | ETuple (es1, n1), ETuple (es2, n2) -> n1 = n2 && equal_list es1 es2 | ETupleAccess (e1, id1, n1, tys1), ETupleAccess (e2, id2, n2, tys2) -> - equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 + equal e1 e2 && id1 = id2 && n1 = n2 && equal_typ_list tys1 tys2 | EInj (e1, id1, n1, tys1), EInj (e2, id2, n2, tys2) -> - equal e1 e2 && id1 = id2 && n1 = n2 && equal_typs_list tys1 tys2 + equal e1 e2 && id1 = id2 && n1 = n2 && equal_typ_list tys1 tys2 | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> n1 = n2 && equal e1 e2 && equal_list cases1 cases2 | EArray es1, EArray es2 -> equal_list es1 es2 | ELit l1, ELit l2 -> l1 = l2 | EAbs (b1, tys1), EAbs (b2, tys2) -> - equal_typs_list tys1 tys2 + equal_typ_list tys1 tys2 && let vars1, body1 = Bindlib.unmbind b1 in let body2 = Bindlib.msubst b2 (Array.map (fun x -> EVar x) vars1) in @@ -366,6 +553,103 @@ and equal : type a. (a, 't) gexpr marked -> (a, 't) gexpr marked -> bool = _ ) -> false +let rec compare : type a. (a, _) marked_gexpr -> (a, _) marked_gexpr -> int = + fun e1 e2 -> + (* Infix operator to chain comparisons lexicographically. *) + let ( @@< ) cmp1 cmpf = match cmp1 with 0 -> cmpf () | n -> n in + (* OCamlformat doesn't know to keep consistency in match cases so disabled + locally for readability *) + match[@ocamlformat "disable"] Marked.unmark e1, Marked.unmark e2 with + | ELit l1, ELit l2 -> + compare_lit l1 l2 + | EApp (f1, args1), EApp (f2, args2) -> + compare f1 f2 @@< fun () -> + List.compare compare args1 args2 + | EOp op1, EOp op2 -> + compare_op op1 op2 + | EArray a1, EArray a2 -> + List.compare compare a1 a2 + | EVar v1, EVar v2 -> + Bindlib.compare_vars v1 v2 + | EAbs (binder1, typs1), EAbs (binder2, typs2) -> + List.compare compare_typ typs1 typs2 @@< fun () -> + let _, e1, e2 = Bindlib.unmbind2 binder1 binder2 in + compare e1 e2 + | EIfThenElse (i1, t1, e1), EIfThenElse (i2, t2, e2) -> + compare i1 i2 @@< fun () -> + compare t1 t2 @@< fun () -> + compare e1 e2 + | ELocation _, ELocation _ -> + 0 + | EStruct (name1, field_map1), EStruct (name2, field_map2) -> + StructName.compare name1 name2 @@< fun () -> + StructFieldMap.compare compare field_map1 field_map2 + | EStructAccess (e1, field_name1, struct_name1), + EStructAccess (e2, field_name2, struct_name2) -> + compare e1 e2 @@< fun () -> + StructFieldName.compare field_name1 field_name2 @@< fun () -> + StructName.compare struct_name1 struct_name2 + | EEnumInj (e1, cstr1, name1), EEnumInj (e2, cstr2, name2) -> + compare e1 e2 @@< fun () -> + EnumName.compare name1 name2 @@< fun () -> + EnumConstructor.compare cstr1 cstr2 + | EMatchS (e1, name1, emap1), EMatchS (e2, name2, emap2) -> + compare e1 e2 @@< fun () -> + EnumName.compare name1 name2 @@< fun () -> + EnumConstructorMap.compare compare emap1 emap2 + | ETuple (es1, s1), ETuple (es2, s2) -> + Option.compare StructName.compare s1 s2 @@< fun () -> + List.compare compare es1 es2 + | ETupleAccess (e1, n1, s1, tys1), ETupleAccess (e2, n2, s2, tys2) -> + Option.compare StructName.compare s1 s2 @@< fun () -> + Int.compare n1 n2 @@< fun () -> + List.compare compare_typ tys1 tys2 @@< fun () -> + compare e1 e2 + | EInj (e1, n1, name1, ts1), EInj (e2, n2, name2, ts2) -> + EnumName.compare name1 name2 @@< fun () -> + Int.compare n1 n2 @@< fun () -> + List.compare compare_typ ts1 ts2 @@< fun () -> + compare e1 e2 + | EMatch (e1, cases1, n1), EMatch (e2, cases2, n2) -> + EnumName.compare n1 n2 @@< fun () -> + compare e1 e2 @@< fun () -> + List.compare compare cases1 cases2 + | EAssert e1, EAssert e2 -> + compare e1 e2 + | EDefault (exs1, just1, cons1), EDefault (exs2, just2, cons2) -> + compare just1 just2 @@< fun () -> + compare cons1 cons2 @@< fun () -> + List.compare compare exs1 exs2 + | ErrorOnEmpty e1, ErrorOnEmpty e2 -> + compare e1 e2 + | ERaise ex1, ERaise ex2 -> + compare_except ex1 ex2 + | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> + compare_except ex1 ex2 @@< fun () -> + compare etry1 etry2 @@< fun () -> + compare ewith1 ewith2 + | ELit _, _ -> -1 | _, ELit _ -> 1 + | EApp _, _ -> -1 | _, EApp _ -> 1 + | EOp _, _ -> -1 | _, EOp _ -> 1 + | EArray _, _ -> -1 | _, EArray _ -> 1 + | EVar _, _ -> -1 | _, EVar _ -> 1 + | EAbs _, _ -> -1 | _, EAbs _ -> 1 + | EIfThenElse _, _ -> -1 | _, EIfThenElse _ -> 1 + | ELocation _, _ -> -1 | _, ELocation _ -> 1 + | EStruct _, _ -> -1 | _, EStruct _ -> 1 + | EStructAccess _, _ -> -1 | _, EStructAccess _ -> 1 + | EEnumInj _, _ -> -1 | _, EEnumInj _ -> 1 + | EMatchS _, _ -> -1 | _, EMatchS _ -> 1 + | ETuple _, _ -> -1 | _, ETuple _ -> 1 + | ETupleAccess _, _ -> -1 | _, ETupleAccess _ -> 1 + | EInj _, _ -> -1 | _, EInj _ -> 1 + | EMatch _, _ -> -1 | _, EMatch _ -> 1 + | EAssert _, _ -> -1 | _, EAssert _ -> 1 + | EDefault _, _ -> -1 | _, EDefault _ -> 1 + | ErrorOnEmpty _, _ -> . | _, ErrorOnEmpty _ -> . + | ERaise _, _ -> -1 | _, ERaise _ -> 1 + | ECatch _, _ -> . | _, ECatch _ -> . + let rec free_vars : type a. (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = fun e -> match Marked.unmark e with diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 6371530b..0395624e 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -174,11 +174,11 @@ val map_marks : val make_var : 'a Bindlib.var * 'b -> ('a * 'b) Bindlib.box val make_abs : - 'e Var.vars -> - (('a, 'm mark) gexpr as 'e) marked Bindlib.box -> + ('a, 't) gexpr Var.vars -> + ('a, 't) marked_gexpr Bindlib.box -> typ Marked.pos list -> - 'm mark -> - 'e marked Bindlib.box + 't -> + ('a, 't) marked_gexpr Bindlib.box val make_app : ((_ any, 'm mark) gexpr as 'e) marked Bindlib.box -> @@ -205,6 +205,25 @@ val make_multiple_let_in : Pos.t -> 'e marked Bindlib.box +val make_default : + (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr list -> + ('a, 't) marked_gexpr -> + ('a, 't) marked_gexpr -> + 't -> + ('a, 't) marked_gexpr +(** [make_default ?pos exceptions just cons] builds a term semantically + equivalent to [] (the [EDefault] constructor) + while avoiding redundant nested constructions. The position is extracted + from [just] by default. + + Note that, due to the simplifications taking place, the result might not be + of the form [EDefault]: + + - [] is rewritten as [x] + - [], when [def] is a default term [] without + exceptions, is collapsed into [] + - [], when [ex] is a single exception, is rewritten as [ex] *) + (** {2 Transformations} *) val remove_logging_calls : @@ -221,11 +240,18 @@ val format : (** {2 Analysis and tests} *) -val is_value : (_ any, 'm mark) gexpr marked -> bool +val equal_lit : 'a glit -> 'a glit -> bool +val compare_lit : 'a glit -> 'a glit -> int -val equal : ('a, 'm mark) gexpr marked -> ('a, 'm mark) gexpr marked -> bool +val equal : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> bool (** Determines if two expressions are equal, omitting their position information *) +val compare : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> int +(** Standard comparison function, suitable for e.g. [Set.Make]. Ignores position + information *) + +val compare_typ : marked_typ -> marked_typ -> int +val is_value : (_ any, 'm mark) gexpr marked -> bool val free_vars : 'e marked -> 'e Var.Set.t val size : (_ any, 't) gexpr marked -> int diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 68ca6bb9..1287b6e8 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -18,8 +18,8 @@ open Utils open String_common open Definitions -let typ_needs_parens (e : typ) : bool = - match e with TArrow _ | TArray _ -> true | _ -> false +let typ_needs_parens (ty : marked_typ) : bool = + match Marked.unmark ty with TArrow _ | TArray _ -> true | _ -> false let uid_list (fmt : Format.formatter) (infos : Uid.MarkedString.info list) : unit = @@ -59,9 +59,12 @@ let tlit (fmt : Format.formatter) (l : typ_lit) : unit = | TDuration -> "duration" | TDate -> "date") -let location (fmt : Format.formatter) (l : location) : unit = +let location (type a) (fmt : Format.formatter) (l : a glocation) : unit = match l with - | ScopeVar v -> Format.fprintf fmt "%a" ScopeVar.format_t (Marked.unmark v) + | DesugaredScopeVar (v, _st) -> + Format.fprintf fmt "%a" ScopeVar.format_t (Marked.unmark v) + | ScopelangScopeVar v -> + Format.fprintf fmt "%a" ScopeVar.format_t (Marked.unmark v) | SubScopeVar (_, subindex, subvar) -> Format.fprintf fmt "%a.%a" SubScopeName.format_t (Marked.unmark subindex) ScopeVar.format_t (Marked.unmark subvar) @@ -71,20 +74,20 @@ let enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : unit = (Utils.Cli.format_with_style [ANSITerminal.magenta]) (Format.asprintf "%a" EnumConstructor.format_t c) -let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = +let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : marked_typ) : unit = let typ = typ ctx in - let typ_with_parens (fmt : Format.formatter) (t : typ) = + let typ_with_parens (fmt : Format.formatter) (t : marked_typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" typ t else Format.fprintf fmt "%a" typ t in - match ty with + match Marked.unmark ty with | TLit l -> tlit fmt l | TTuple ts -> Format.fprintf fmt "@[(%a)@]" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " operator "*") (fun fmt t -> Format.fprintf fmt "%a" typ t)) - (List.map Marked.unmark ts) + ts | TStruct s -> Format.fprintf fmt "@[%a%a%a%a@]" StructName.format_t s punctuation "{" @@ -93,7 +96,7 @@ let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = (fun fmt (field, mty) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t field punctuation "\"" punctuation ":" typ - (Marked.unmark mty))) + mty)) (StructMap.find s ctx.ctx_structs) punctuation "}" | TEnum e -> @@ -102,18 +105,14 @@ let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ %a@ " punctuation "|") (fun fmt (case, mty) -> Format.fprintf fmt "%a%a@ %a" enum_constructor case punctuation ":" - typ (Marked.unmark mty))) + typ mty)) (EnumMap.find e ctx.ctx_enums) punctuation "]" - | TOption t -> - Format.fprintf fmt "@[%a@ %a@]" base_type "option" typ - (Marked.unmark t) + | TOption t -> Format.fprintf fmt "@[%a@ %a@]" base_type "option" typ t | TArrow (t1, t2) -> - Format.fprintf fmt "@[%a %a@ %a@]" typ_with_parens (Marked.unmark t1) - operator "→" typ (Marked.unmark t2) - | TArray t1 -> - Format.fprintf fmt "@[%a@ %a@]" base_type "array" typ - (Marked.unmark t1) + Format.fprintf fmt "@[%a %a@ %a@]" typ_with_parens t1 operator "→" + typ t2 + | TArray t1 -> Format.fprintf fmt "@[%a@ %a@]" base_type "array" typ t1 | TAny -> base_type fmt "any" let lit (type a) (fmt : Format.formatter) (l : a glit) : unit = @@ -206,21 +205,21 @@ let except (fmt : Format.formatter) (exn : except) : unit = | Crash -> "Crash" | NoValueProvided -> "NoValueProvided") -let needs_parens (type a) (e : (a, _) gexpr marked) : bool = - match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false - let var fmt v = Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) +let needs_parens (type a) (e : (a, _) marked_gexpr) : bool = + match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false + let rec expr : 'a. ?debug:bool -> decl_ctx -> Format.formatter -> - ('a, 't) gexpr marked -> + ('a, 't) marked_gexpr -> unit = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) - (e : (a, 't) gexpr marked) -> + (e : (a, 't) marked_gexpr) -> let expr e = expr ~debug ctx e in let with_parens fmt e = if needs_parens e then ( @@ -278,9 +277,7 @@ let rec expr : | ELit l -> lit fmt l | EApp ((EAbs (binder, taus), _), args) -> let xs, body = Bindlib.unmbind binder in - let xs_tau = - List.map2 (fun x tau -> x, Marked.unmark tau) (Array.to_list xs) taus - in + let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in let xs_tau_arg = List.map2 (fun (x, tau) arg -> x, tau, arg) xs_tau args in Format.fprintf fmt "%a%a" (Format.pp_print_list @@ -292,9 +289,7 @@ let rec expr : xs_tau_arg expr body | EAbs (binder, taus) -> let xs, body = Bindlib.unmbind binder in - let xs_tau = - List.map2 (fun x tau -> x, Marked.unmark tau) (Array.to_list xs) taus - in + let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in Format.fprintf fmt "@[%a @[%a@] %a@ %a@]" punctuation "λ" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index 613102a9..ff686081 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -32,7 +32,8 @@ val lit_style : Format.formatter -> string -> unit val uid_list : Format.formatter -> Uid.MarkedString.info list -> unit val enum_constructor : Format.formatter -> EnumConstructor.t -> unit val tlit : Format.formatter -> typ_lit -> unit -val typ : decl_ctx -> Format.formatter -> typ -> unit +val location : Format.formatter -> 'a glocation -> unit +val typ : decl_ctx -> Format.formatter -> marked_typ -> unit val lit : Format.formatter -> 'a glit -> unit val op_kind : Format.formatter -> op_kind -> unit val binop : Format.formatter -> binop -> unit @@ -46,5 +47,5 @@ val expr : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - 'e marked -> + ('a, 't) marked_gexpr -> unit diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index b5820cbf..71c0691f 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -253,19 +253,15 @@ let rec translate_expr | [] -> None | states -> ( match inside_definition_of with - | Some (Desugared.Ast.ScopeDef.Var (x'_uid, sx'), _) - when Desugared.Ast.ScopeVar.compare uid x'_uid = 0 -> ( + | Some (Var (x'_uid, sx'), _) when ScopeVar.compare uid x'_uid = 0 + -> ( match sx' with | None -> failwith "inconsistent state: inside a definition of a variable with \ no state but variable has states" | Some inside_def_state -> - if - Desugared.Ast.StateName.compare inside_def_state - (List.hd states) - = 0 - then + if StateName.compare inside_def_state (List.hd states) = 0 then Errors.raise_spanned_error pos "It is impossible to refer to the variable you are \ defining when defining its first state." @@ -276,11 +272,8 @@ let rec translate_expr ignore (List.fold_left (fun previous_state state -> - if - Desugared.Ast.StateName.compare inside_def_state - state - = 0 - then correct_state := previous_state; + if StateName.equal inside_def_state state then + correct_state := previous_state; Some state) None states); !correct_state) @@ -362,7 +355,7 @@ let rec translate_expr (rec_helper f) (rec_helper arg) | LetIn (x, e1, e2) -> let ctxt, v = Name_resolution.add_def_local_var ctxt (Marked.unmark x) in - let tau = Scopelang.Ast.TAny, Marked.get_mark x in + let tau = TAny, Marked.get_mark x in let fn = Desugared.Ast.make_abs [| v |] (translate_expr scope inside_definition_of ctxt e2) @@ -544,7 +537,7 @@ let rec translate_expr let f_pred = Desugared.Ast.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) - [Scopelang.Ast.TAny, pos] + [TAny, pos] pos in Bindlib.box_apply2 @@ -587,7 +580,7 @@ let rec translate_expr let f_pred = Desugared.Ast.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) - [Scopelang.Ast.TAny, pos] + [TAny, pos] pos in let f_pred_var = Desugared.Ast.Var.make "predicate" in @@ -619,7 +612,7 @@ let rec translate_expr in let fold_f = Desugared.Ast.make_abs [| acc_var; item_var |] fold_body - [Scopelang.Ast.TAny, pos; Scopelang.Ast.TAny, pos] + [TAny, pos; TAny, pos] pos in let fold = @@ -631,7 +624,7 @@ let rec translate_expr pos )) fold_f collection init in - Desugared.Ast.make_let_in f_pred_var (Scopelang.Ast.TAny, pos) f_pred fold + Desugared.Ast.make_let_in f_pred_var (TAny, pos) f_pred fold | CollectionOp (op', param', collection, predicate) -> let ctxt, param = Name_resolution.add_def_local_var ctxt (Marked.unmark param') @@ -686,7 +679,7 @@ let rec translate_expr (translate_expr scope inside_definition_of ctxt predicate) acc in - let make_extr_body (cmp_op : binop) (t : Scopelang.Ast.typ Marked.pos) = + let make_extr_body (cmp_op : binop) (t : typ Marked.pos) = let tmp_var = Desugared.Ast.Var.make "tmp" in let tmp = Desugared.Ast.make_var (tmp_var, Marked.get_mark param') in Desugared.Ast.make_let_in tmp_var t @@ -719,11 +712,11 @@ let rec translate_expr | Ast.Aggregate (Ast.AggregateExtremum (max_or_min, t, _)) -> let op_kind, typ = match t with - | Ast.Integer -> KInt, (Scopelang.Ast.TLit TInt, pos) - | Ast.Decimal -> KRat, (Scopelang.Ast.TLit TRat, pos) - | Ast.Money -> KMoney, (Scopelang.Ast.TLit TMoney, pos) - | Ast.Duration -> KDuration, (Scopelang.Ast.TLit TDuration, pos) - | Ast.Date -> KDate, (Scopelang.Ast.TLit TDate, pos) + | Ast.Integer -> KInt, (TLit TInt, pos) + | Ast.Decimal -> KRat, (TLit TRat, pos) + | Ast.Money -> KMoney, (TLit TMoney, pos) + | Ast.Duration -> KDuration, (TLit TDuration, pos) + | Ast.Date -> KDate, (TLit TDate, pos) | _ -> Errors.raise_spanned_error pos "ssible to compute the %s of two values of type %a" @@ -758,8 +751,8 @@ let rec translate_expr ( Desugared.Ast.EAbs ( binder, [ - Scopelang.Ast.TLit t, Marked.get_mark op'; - Scopelang.Ast.TAny, pos + TLit t, Marked.get_mark op'; + TAny, pos (* we put any here because the type of the elements of the arrays is not always the type of the accumulator; for instance in AggregateCount. *); @@ -820,9 +813,7 @@ let rec translate_expr let f = Bindlib.box_apply (fun binder -> - ( Desugared.Ast.EAbs - (binder, [Scopelang.Ast.TLit TBool, pos; Scopelang.Ast.TAny, pos]), - pos )) + Desugared.Ast.EAbs (binder, [TLit TBool, pos; TAny, pos]), pos) (Bindlib.bind_mvar [| acc_var; param_var |] f_body) in Bindlib.box_apply3 @@ -1037,9 +1028,8 @@ let process_default Name_resolution.get_def_typ ctxt (Marked.unmark def_key) in match Marked.unmark def_key_typ, param_uid with - | Scopelang.Ast.TArrow (t_in, _), Some param_uid -> - Some (Marked.unmark param_uid, t_in) - | Scopelang.Ast.TArrow _, None -> + | TArrow (t_in, _), Some param_uid -> Some (Marked.unmark param_uid, t_in) + | TArrow _, None -> Errors.raise_spanned_error (Marked.get_mark (Bindlib.unbox cons)) "This definition has a function type but the parameter is missing" @@ -1375,8 +1365,7 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : else ( Scopelang.Ast.NoInput, Marked.get_mark - (Desugared.Ast.StateName - .get_info state) ) + (StateName.get_info state) ) in let io_output = if i = List.length states - 1 then @@ -1384,8 +1373,7 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : else ( false, Marked.get_mark - (Desugared.Ast.StateName - .get_info state) ) + (StateName.get_info state) ) in { io_input; io_output }); } diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index 7afec450..d438e4f1 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -24,7 +24,6 @@ open Shared_ast (** {1 Name resolution context} *) type ident = string -type typ = Scopelang.Ast.typ type unique_rulename = | Ambiguous of Pos.t list @@ -36,8 +35,7 @@ type scope_def_context = { } type scope_context = { - var_idmap : Desugared.Ast.ScopeVar.t Desugared.Ast.IdentMap.t; - (** Scope variables *) + var_idmap : ScopeVar.t Desugared.Ast.IdentMap.t; (** Scope variables *) scope_defs_contexts : scope_def_context Desugared.Ast.ScopeDefMap.t; (** What is the default rule to refer to for unnamed exceptions, if any *) sub_scopes_idmap : SubScopeName.t Desugared.Ast.IdentMap.t; @@ -57,8 +55,8 @@ type var_sig = { var_sig_typ : typ Marked.pos; var_sig_is_condition : bool; var_sig_io : Ast.scope_decl_context_io; - var_sig_states_idmap : Desugared.Ast.StateName.t Desugared.Ast.IdentMap.t; - var_sig_states_list : Desugared.Ast.StateName.t list; + var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; + var_sig_states_list : StateName.t list; } type context = { @@ -102,22 +100,20 @@ let raise_unknown_identifier (msg : string) (ident : ident Marked.pos) = msg (** Gets the type associated to an uid *) -let get_var_typ (ctxt : context) (uid : Desugared.Ast.ScopeVar.t) : - typ Marked.pos = +let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ Marked.pos = (Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs).var_sig_typ -let is_var_cond (ctxt : context) (uid : Desugared.Ast.ScopeVar.t) : bool = +let is_var_cond (ctxt : context) (uid : ScopeVar.t) : bool = (Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs).var_sig_is_condition -let get_var_io (ctxt : context) (uid : Desugared.Ast.ScopeVar.t) : - Ast.scope_decl_context_io = +let get_var_io (ctxt : context) (uid : ScopeVar.t) : Ast.scope_decl_context_io = (Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs).var_sig_io (** Get the variable uid inside the scope given in argument *) let get_var_uid (scope_uid : ScopeName.t) (ctxt : context) - ((x, pos) : ident Marked.pos) : Desugared.Ast.ScopeVar.t = + ((x, pos) : ident Marked.pos) : ScopeVar.t = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in match Desugared.Ast.IdentMap.find_opt x scope.var_idmap with | None -> @@ -144,13 +140,11 @@ let is_subscope_uid (scope_uid : ScopeName.t) (ctxt : context) (y : ident) : Desugared.Ast.IdentMap.mem y scope.sub_scopes_idmap (** Checks if the var_uid belongs to the scope scope_uid *) -let belongs_to - (ctxt : context) - (uid : Desugared.Ast.ScopeVar.t) - (scope_uid : ScopeName.t) : bool = +let belongs_to (ctxt : context) (uid : ScopeVar.t) (scope_uid : ScopeName.t) : + bool = let scope = Scopelang.Ast.ScopeMap.find scope_uid ctxt.scopes in Desugared.Ast.IdentMap.exists - (fun _ var_uid -> Desugared.Ast.ScopeVar.compare uid var_uid = 0) + (fun _ var_uid -> ScopeVar.compare uid var_uid = 0) scope.var_idmap (** Retrieves the type of a scope definition from the context *) @@ -226,30 +220,28 @@ let is_type_cond ((typ, _) : Ast.typ Marked.pos) = (** Process a basic type (all types except function types) *) let rec process_base_typ (ctxt : context) - ((typ, typ_pos) : Ast.base_typ Marked.pos) : Scopelang.Ast.typ Marked.pos = + ((typ, typ_pos) : Ast.base_typ Marked.pos) : typ Marked.pos = match typ with - | Ast.Condition -> Scopelang.Ast.TLit TBool, typ_pos + | Ast.Condition -> TLit TBool, typ_pos | Ast.Data (Ast.Collection t) -> - ( Scopelang.Ast.TArray - (Marked.unmark - (process_base_typ ctxt - (Ast.Data (Marked.unmark t), Marked.get_mark t))), + ( TArray + (process_base_typ ctxt (Ast.Data (Marked.unmark t), Marked.get_mark t)), typ_pos ) | Ast.Data (Ast.Primitive prim) -> ( match prim with - | Ast.Integer -> Scopelang.Ast.TLit TInt, typ_pos - | Ast.Decimal -> Scopelang.Ast.TLit TRat, typ_pos - | Ast.Money -> Scopelang.Ast.TLit TMoney, typ_pos - | Ast.Duration -> Scopelang.Ast.TLit TDuration, typ_pos - | Ast.Date -> Scopelang.Ast.TLit TDate, typ_pos - | Ast.Boolean -> Scopelang.Ast.TLit TBool, typ_pos + | Ast.Integer -> TLit TInt, typ_pos + | Ast.Decimal -> TLit TRat, typ_pos + | Ast.Money -> TLit TMoney, typ_pos + | Ast.Duration -> TLit TDuration, typ_pos + | Ast.Date -> TLit TDate, typ_pos + | Ast.Boolean -> TLit TBool, typ_pos | Ast.Text -> raise_unsupported_feature "text type" typ_pos | Ast.Named ident -> ( match Desugared.Ast.IdentMap.find_opt ident ctxt.struct_idmap with - | Some s_uid -> Scopelang.Ast.TStruct s_uid, typ_pos + | Some s_uid -> TStruct s_uid, typ_pos | None -> ( match Desugared.Ast.IdentMap.find_opt ident ctxt.enum_idmap with - | Some e_uid -> Scopelang.Ast.TEnum e_uid, typ_pos + | Some e_uid -> TEnum e_uid, typ_pos | None -> Errors.raise_spanned_error typ_pos "Unknown type \"%a\", not a struct or enum previously declared" @@ -258,12 +250,11 @@ let rec process_base_typ (** Process a type (function or not) *) let process_type (ctxt : context) ((typ, typ_pos) : Ast.typ Marked.pos) : - Scopelang.Ast.typ Marked.pos = + typ Marked.pos = match typ with | Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) | Ast.Func { arg_typ; return_typ } -> - ( Scopelang.Ast.TArrow - (process_base_typ ctxt arg_typ, process_base_typ ctxt return_typ), + ( TArrow (process_base_typ ctxt arg_typ, process_base_typ ctxt return_typ), typ_pos ) (** Process data declaration *) @@ -280,14 +271,14 @@ let process_data_decl | Some use -> Errors.raise_multispanned_error [ - Some "First use:", Marked.get_mark (Desugared.Ast.ScopeVar.get_info use); + Some "First use:", Marked.get_mark (ScopeVar.get_info use); Some "Second use:", pos; ] "Variable name \"%a\" already used" (Utils.Cli.format_with_style [ANSITerminal.yellow]) name | None -> - let uid = Desugared.Ast.ScopeVar.fresh (name, pos) in + let uid = ScopeVar.fresh (name, pos) in let scope_ctxt = { scope_ctxt with @@ -297,7 +288,7 @@ let process_data_decl let states_idmap, states_list = List.fold_right (fun state_id (states_idmap, states_list) -> - let state_uid = Desugared.Ast.StateName.fresh state_id in + let state_uid = StateName.fresh state_id in ( Desugared.Ast.IdentMap.add (Marked.unmark state_id) state_uid states_idmap, state_uid :: states_list )) @@ -429,7 +420,7 @@ let process_enum_decl (ctxt : context) (edecl : Ast.enum_decl) : context = (fun cases -> let typ = match cdecl.Ast.enum_decl_case_typ with - | None -> Scopelang.Ast.TLit TUnit, cdecl_pos + | None -> TLit TUnit, cdecl_pos | Some typ -> process_type ctxt typ in match cases with @@ -560,10 +551,10 @@ let get_def_key [ None, Marked.get_mark state; ( Some "Variable declaration:", - Marked.get_mark (Desugared.Ast.ScopeVar.get_info x_uid) ); + Marked.get_mark (ScopeVar.get_info x_uid) ); ] "This identifier is not a state declared for variable %a." - Desugared.Ast.ScopeVar.format_t x_uid) + ScopeVar.format_t x_uid) | None -> if not (Desugared.Ast.IdentMap.is_empty var_sig.var_sig_states_idmap) then @@ -571,11 +562,11 @@ let get_def_key [ None, Marked.get_mark x; ( Some "Variable declaration:", - Marked.get_mark (Desugared.Ast.ScopeVar.get_info x_uid) ); + Marked.get_mark (ScopeVar.get_info x_uid) ); ] "This definition does not indicate which state has to be \ considered for variable %a." - Desugared.Ast.ScopeVar.format_t x_uid + ScopeVar.format_t x_uid else None ) | [y; x] -> let subscope_uid : SubScopeName.t = get_subscope_uid scope_uid ctxt y in diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index e7234ff5..30d25ebd 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -24,7 +24,6 @@ open Shared_ast (** {1 Name resolution context} *) type ident = string -type typ = Scopelang.Ast.typ type unique_rulename = | Ambiguous of Pos.t list @@ -36,8 +35,7 @@ type scope_def_context = { } type scope_context = { - var_idmap : Desugared.Ast.ScopeVar.t Desugared.Ast.IdentMap.t; - (** Scope variables *) + var_idmap : ScopeVar.t Desugared.Ast.IdentMap.t; (** Scope variables *) scope_defs_contexts : scope_def_context Desugared.Ast.ScopeDefMap.t; (** What is the default rule to refer to for unnamed exceptions, if any *) sub_scopes_idmap : SubScopeName.t Desugared.Ast.IdentMap.t; @@ -57,8 +55,8 @@ type var_sig = { var_sig_typ : typ Marked.pos; var_sig_is_condition : bool; var_sig_io : Ast.scope_decl_context_io; - var_sig_states_idmap : Desugared.Ast.StateName.t Desugared.Ast.IdentMap.t; - var_sig_states_list : Desugared.Ast.StateName.t list; + var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; + var_sig_states_list : StateName.t list; } type context = { @@ -96,16 +94,13 @@ val raise_unknown_identifier : string -> ident Marked.pos -> 'a (** Function to call whenever an identifier used somewhere has not been declared in the program previously *) -val get_var_typ : context -> Desugared.Ast.ScopeVar.t -> typ Marked.pos +val get_var_typ : context -> ScopeVar.t -> typ Marked.pos (** Gets the type associated to an uid *) -val is_var_cond : context -> Desugared.Ast.ScopeVar.t -> bool +val is_var_cond : context -> ScopeVar.t -> bool +val get_var_io : context -> ScopeVar.t -> Ast.scope_decl_context_io -val get_var_io : - context -> Desugared.Ast.ScopeVar.t -> Ast.scope_decl_context_io - -val get_var_uid : - ScopeName.t -> context -> ident Marked.pos -> Desugared.Ast.ScopeVar.t +val get_var_uid : ScopeName.t -> context -> ident Marked.pos -> ScopeVar.t (** Get the variable uid inside the scope given in argument *) val get_subscope_uid : @@ -116,7 +111,7 @@ val is_subscope_uid : ScopeName.t -> context -> ident -> bool (** [is_subscope_uid scope_uid ctxt y] returns true if [y] belongs to the subscopes of [scope_uid]. *) -val belongs_to : context -> Desugared.Ast.ScopeVar.t -> ScopeName.t -> bool +val belongs_to : context -> ScopeVar.t -> ScopeName.t -> bool (** Checks if the var_uid belongs to the scope scope_uid *) val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos diff --git a/compiler/utils/uid.ml b/compiler/utils/uid.ml index f9a29873..5ea06f97 100644 --- a/compiler/utils/uid.ml +++ b/compiler/utils/uid.ml @@ -19,6 +19,8 @@ module type Info = sig val to_string : info -> string val format_info : Format.formatter -> info -> unit + val equal : info -> info -> bool + val compare : info -> info -> int end module type Id = sig @@ -58,4 +60,6 @@ module MarkedString = struct let to_string (s, _) = s let format_info fmt i = Format.pp_print_string fmt (to_string i) + let equal i1 i2 = String.equal (Marked.unmark i1) (Marked.unmark i2) + let compare i1 i2 = String.compare (Marked.unmark i1) (Marked.unmark i2) end diff --git a/compiler/utils/uid.mli b/compiler/utils/uid.mli index 23b81896..46cec079 100644 --- a/compiler/utils/uid.mli +++ b/compiler/utils/uid.mli @@ -22,6 +22,12 @@ module type Info = sig val to_string : info -> string val format_info : Format.formatter -> info -> unit + + val equal : info -> info -> bool + (** Equality disregards position *) + + val compare : info -> info -> int + (** Comparison disregards position *) end module MarkedString : Info with type info = string Marked.pos diff --git a/tests/test_array/bad/output/fold_error.catala_en.A.Interpret b/tests/test_array/bad/output/fold_error.catala_en.A.Interpret index 3eb607bf..d9c4a4d6 100644 --- a/tests/test_array/bad/output/fold_error.catala_en.A.Interpret +++ b/tests/test_array/bad/output/fold_error.catala_en.A.Interpret @@ -20,5 +20,5 @@ Type integer coming from expression: --> tests/test_array/bad/fold_error.catala_en | 5 | context list content collection integer - | ^^^^^^^^^^^^^^^^^^ + | ^^^^^^^ + Article diff --git a/tests/test_exception/good/output/groups_of_exceptions.catala_en.scopelang b/tests/test_exception/good/output/groups_of_exceptions.catala_en.scopelang index 9fda879c..eeee449b 100644 --- a/tests/test_exception/good/output/groups_of_exceptions.catala_en.scopelang +++ b/tests/test_exception/good/output/groups_of_exceptions.catala_en.scopelang @@ -1,6 +1,5 @@ let scope Foo (y: integer|input) (x: integer|internal|output) = let x : integer = - ⟨⟨⟨⟨y = 4 ⊢ 4⟩, ⟨y = 5 ⊢ 5⟩ | false ⊢ ∅ ⟩ | - true ⊢ - ⟨⟨y = 2 ⊢ 2⟩, ⟨y = 3 ⊢ 3⟩ | false ⊢ ∅ ⟩⟩ | + ⟨⟨⟨⟨y = 4 ⊢ 4⟩, ⟨y = 5 ⊢ 5⟩ | false ⊢ ∅ ⟩ | true + ⊢ ⟨⟨y = 2 ⊢ 2⟩, ⟨y = 3 ⊢ 3⟩ | false ⊢ ∅ ⟩⟩ | true ⊢ ⟨⟨y = 0 ⊢ 0⟩, ⟨y = 1 ⊢ 1⟩ | false ⊢ ∅ ⟩⟩ From ef36b18dfe5de5632fffaf112f9400c648382635 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:08:08 +0200 Subject: [PATCH 15/31] And finally the desugared AST as well --- compiler/desugared/ast.ml | 223 ++-------------- compiler/desugared/ast.mli | 82 +----- compiler/desugared/dependency.ml | 2 +- compiler/desugared/desugared_to_scope.ml | 72 +++--- compiler/scopelang/ast.ml | 13 +- compiler/scopelang/ast.mli | 2 - compiler/scopelang/scope_to_dcalc.ml | 36 +-- compiler/shared_ast/definitions.ml | 3 + compiler/shared_ast/expr.ml | 37 ++- compiler/shared_ast/expr.mli | 11 + compiler/surface/desugaring.ml | 315 +++++++++-------------- compiler/surface/name_resolution.ml | 20 +- compiler/surface/name_resolution.mli | 6 +- 13 files changed, 276 insertions(+), 546 deletions(-) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index c2eca90e..5041d491 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -34,8 +34,6 @@ module LabelName : Uid.Id with type info = Uid.MarkedString.info = module LabelMap : Map.S with type key = LabelName.t = Map.Make (LabelName) module LabelSet : Set.S with type elt = LabelName.t = Set.Make (LabelName) -module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) -module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) (** Inside a scope, a definition can refer either to a scope def, or a subscope def *) @@ -87,165 +85,23 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t = Set.Make (ScopeDef) (** {1 AST} *) -type location = - | ScopeVar of ScopeVar.t Marked.pos * StateName.t option - | SubScopeVar of - ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos +type location = desugared glocation module LocationSet : Set.S with type elt = location Marked.pos = Set.Make (struct type t = location Marked.pos - let compare x y = - match Marked.unmark x, Marked.unmark y with - | ScopeVar (vx, None), ScopeVar (vy, None) - | ScopeVar (vx, Some _), ScopeVar (vy, None) - | ScopeVar (vx, None), ScopeVar (vy, Some _) -> - ScopeVar.compare (Marked.unmark vx) (Marked.unmark vy) - | ScopeVar ((x, _), Some sx), ScopeVar ((y, _), Some sy) -> - let cmp = ScopeVar.compare x y in - if cmp = 0 then StateName.compare sx sy else cmp - | ( SubScopeVar (_, (xsubindex, _), (xsubvar, _)), - SubScopeVar (_, (ysubindex, _), (ysubvar, _)) ) -> - let c = SubScopeName.compare xsubindex ysubindex in - if c = 0 then ScopeVar.compare xsubvar ysubvar else c - | ScopeVar _, SubScopeVar _ -> -1 - | SubScopeVar _, ScopeVar _ -> 1 + let compare = Expr.compare_location end) +type expr = (desugared, Pos.t) gexpr type marked_expr = expr Marked.pos -(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} - library, based on higher-order abstract syntax*) -and expr = - | ELocation of location - | EVar of expr Bindlib.var - | EStruct of StructName.t * marked_expr StructFieldMap.t - | EStructAccess of marked_expr * StructFieldName.t * StructName.t - | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t - | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t - | ELit of Dcalc.Ast.lit - | EAbs of (expr, marked_expr) Bindlib.mbinder * typ Marked.pos list - | EApp of marked_expr * marked_expr list - | EOp of operator - | EDefault of marked_expr list * marked_expr * marked_expr - | EIfThenElse of marked_expr * marked_expr * marked_expr - | EArray of marked_expr list - | ErrorOnEmpty of marked_expr +module ExprMap = Map.Make (struct + type t = marked_expr -module Expr = struct - type t = expr - - (** Syntactic comparison, up to locations and alpha-renaming *) - let rec compare e1 e2 = - let rec list_compare cmp l1 l2 = - (* List.compare is available from OCaml 4.12 on *) - match l1, l2 with - | [], [] -> 0 - | [], _ :: _ -> -1 - | _ :: _, [] -> 1 - | a1 :: l1, a2 :: l2 -> - let c = cmp a1 a2 in - if c <> 0 then c else list_compare cmp l1 l2 - in - match e1, e2 with - | ELocation _, ELocation _ -> 0 - | EVar v1, EVar v2 -> Bindlib.compare_vars v1 v2 - | EStruct (name1, field_map1), EStruct (name2, field_map2) -> ( - match StructName.compare name1 name2 with - | 0 -> - StructFieldMap.compare (Marked.compare compare) field_map1 field_map2 - | n -> n) - | ( EStructAccess ((e1, _), field_name1, struct_name1), - EStructAccess ((e2, _), field_name2, struct_name2) ) -> ( - match compare e1 e2 with - | 0 -> ( - match StructFieldName.compare field_name1 field_name2 with - | 0 -> StructName.compare struct_name1 struct_name2 - | n -> n) - | n -> n) - | EEnumInj ((e1, _), cstr1, name1), EEnumInj ((e2, _), cstr2, name2) -> ( - match compare e1 e2 with - | 0 -> ( - match EnumName.compare name1 name2 with - | 0 -> EnumConstructor.compare cstr1 cstr2 - | n -> n) - | n -> n) - | EMatch ((e1, _), name1, emap1), EMatch ((e2, _), name2, emap2) -> ( - match compare e1 e2 with - | 0 -> ( - match EnumName.compare name1 name2 with - | 0 -> EnumConstructorMap.compare (Marked.compare compare) emap1 emap2 - | n -> n) - | n -> n) - | ELit l1, ELit l2 -> Stdlib.compare l1 l2 - | EAbs (binder1, typs1), EAbs (binder2, typs2) -> ( - match list_compare Expr.compare_typ typs1 typs2 with - | 0 -> - let _, (e1, _), (e2, _) = Bindlib.unmbind2 binder1 binder2 in - compare e1 e2 - | n -> n) - | EApp ((f1, _), args1), EApp ((f2, _), args2) -> ( - match compare f1 f2 with - | 0 -> list_compare (fun (x1, _) (x2, _) -> compare x1 x2) args1 args2 - | n -> n) - | EOp op1, EOp op2 -> Stdlib.compare op1 op2 - | ( EDefault (exs1, (just1, _), (cons1, _)), - EDefault (exs2, (just2, _), (cons2, _)) ) -> ( - match compare just1 just2 with - | 0 -> ( - match compare cons1 cons2 with - | 0 -> list_compare (Marked.compare compare) exs1 exs2 - | n -> n) - | n -> n) - | ( EIfThenElse ((i1, _), (t1, _), (e1, _)), - EIfThenElse ((i2, _), (t2, _), (e2, _)) ) -> ( - match compare i1 i2 with - | 0 -> ( match compare t1 t2 with 0 -> compare e1 e2 | n -> n) - | n -> n) - | EArray a1, EArray a2 -> - list_compare (fun (e1, _) (e2, _) -> compare e1 e2) a1 a2 - | ErrorOnEmpty (e1, _), ErrorOnEmpty (e2, _) -> compare e1 e2 - | ELocation _, _ -> -1 - | _, ELocation _ -> 1 - | EVar _, _ -> -1 - | _, EVar _ -> 1 - | EStruct _, _ -> -1 - | _, EStruct _ -> 1 - | EStructAccess _, _ -> -1 - | _, EStructAccess _ -> 1 - | EEnumInj _, _ -> -1 - | _, EEnumInj _ -> 1 - | EMatch _, _ -> -1 - | _, EMatch _ -> 1 - | ELit _, _ -> -1 - | _, ELit _ -> 1 - | EAbs _, _ -> -1 - | _, EAbs _ -> 1 - | EApp _, _ -> -1 - | _, EApp _ -> 1 - | EOp _, _ -> -1 - | _, EOp _ -> 1 - | EDefault _, _ -> -1 - | _, EDefault _ -> 1 - | EIfThenElse _, _ -> -1 - | _, EIfThenElse _ -> 1 - | EArray _, _ -> -1 - | _, EArray _ -> 1 -end - -module ExprMap = Map.Make (Expr) - -module Var = struct - type t = expr Bindlib.var - - let make (s : string) : t = - Bindlib.new_var (fun (x : expr Bindlib.var) : expr -> EVar x) s - - let compare x y = Bindlib.compare_vars x y -end - -type vars = expr Bindlib.mvar + let compare = Expr.compare +end) type exception_situation = | BaseCase @@ -256,9 +112,9 @@ type label_situation = ExplicitlyLabeled of LabelName.t Marked.pos | Unlabeled type rule = { rule_id : RuleName.t; - rule_just : expr Marked.pos Bindlib.box; - rule_cons : expr Marked.pos Bindlib.box; - rule_parameter : (Var.t * typ Marked.pos) option; + rule_just : marked_expr Bindlib.box; + rule_cons : marked_expr Bindlib.box; + rule_parameter : (expr Var.t * marked_typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -271,12 +127,12 @@ module Rule = struct let compare r1 r2 = match r1.rule_parameter, r2.rule_parameter with | None, None -> ( - let j1, _ = Bindlib.unbox r1.rule_just in - let j2, _ = Bindlib.unbox r2.rule_just in + let j1 = Bindlib.unbox r1.rule_just in + let j2 = Bindlib.unbox r2.rule_just in match Expr.compare j1 j2 with | 0 -> - let c1, _ = Bindlib.unbox r1.rule_cons in - let c2, _ = Bindlib.unbox r2.rule_cons in + let c1 = Bindlib.unbox r1.rule_cons in + let c2 = Bindlib.unbox r2.rule_cons in Expr.compare c1 c2 | n -> n) | Some (v1, t1), Some (v2, t2) -> ( @@ -285,12 +141,12 @@ module Rule = struct let open Bindlib in let b1 = unbox (bind_var v1 r1.rule_just) in let b2 = unbox (bind_var v2 r2.rule_just) in - let _, (j1, _), (j2, _) = unbind2 b1 b2 in + let _, j1, j2 = unbind2 b1 b2 in match Expr.compare j1 j2 with | 0 -> let b1 = unbox (bind_var v1 r1.rule_cons) in let b2 = unbox (bind_var v2 r2.rule_cons) in - let _, (c1, _), (c2, _) = unbind2 b1 b2 in + let _, c1, c2 = unbind2 b1 b2 in Expr.compare c1 c2 | n -> n) | n -> n) @@ -298,7 +154,7 @@ module Rule = struct | Some _, None -> 1 end -let empty_rule (pos : Pos.t) (have_parameter : typ Marked.pos option) : rule = +let empty_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule = { rule_just = Bindlib.box (ELit (LBool false), pos); rule_cons = Bindlib.box (ELit LEmptyError, pos); @@ -311,8 +167,8 @@ let empty_rule (pos : Pos.t) (have_parameter : typ Marked.pos option) : rule = rule_label = Unlabeled; } -let always_false_rule (pos : Pos.t) (have_parameter : typ Marked.pos option) : - rule = +let always_false_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule + = { rule_just = Bindlib.box (ELit (LBool true), pos); rule_cons = Bindlib.box (ELit (LBool false), pos); @@ -325,7 +181,7 @@ let always_false_rule (pos : Pos.t) (have_parameter : typ Marked.pos option) : rule_label = Unlabeled; } -type assertion = expr Marked.pos Bindlib.box +type assertion = marked_expr Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -335,7 +191,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : typ Marked.pos; + scope_def_typ : marked_typ; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } @@ -353,11 +209,10 @@ type scope = { type program = { program_scopes : scope Scopelang.Ast.ScopeMap.t; - program_enums : enum_ctx; - program_structs : struct_ctx; + program_ctx : decl_ctx; } -let rec locations_used (e : expr Marked.pos) : LocationSet.t = +let rec locations_used (e : marked_expr) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty @@ -370,7 +225,7 @@ let rec locations_used (e : expr Marked.pos) : LocationSet.t = es LocationSet.empty | EStructAccess (e1, _, _) -> locations_used e1 | EEnumInj (e1, _, _) -> locations_used e1 - | EMatch (e1, _, es) -> + | EMatchS (e1, _, es) -> EnumConstructorMap.fold (fun _ e' acc -> LocationSet.union acc (locations_used e')) es (locations_used e1) @@ -399,7 +254,7 @@ let free_variables (def : rule RuleMap.t) : Pos.t ScopeDefMap.t = (fun (loc, loc_pos) acc -> ScopeDefMap.add (match loc with - | ScopeVar (v, st) -> ScopeDef.Var (Marked.unmark v, st) + | DesugaredScopeVar (v, st) -> ScopeDef.Var (Marked.unmark v, st) | SubScopeVar (_, sub_index, sub_var) -> ScopeDef.SubScopeVar (Marked.unmark sub_index, Marked.unmark sub_var)) loc_pos acc) @@ -414,31 +269,3 @@ let free_variables (def : rule RuleMap.t) : Pos.t ScopeDefMap.t = in add_locs acc locs) def ScopeDefMap.empty - -let make_var ((x, pos) : Var.t Marked.pos) : expr Marked.pos Bindlib.box = - Bindlib.box_apply (fun v -> v, pos) (Bindlib.box_var x) - -let make_abs - (xs : vars) - (e : expr Marked.pos Bindlib.box) - (taus : typ Marked.pos list) - (pos : Pos.t) : expr Marked.pos Bindlib.box = - Bindlib.box_apply (fun b -> EAbs (b, taus), pos) (Bindlib.bind_mvar xs e) - -let make_app - (e : expr Marked.pos Bindlib.box) - (u : expr Marked.pos Bindlib.box list) - (pos : Pos.t) : expr Marked.pos Bindlib.box = - Bindlib.box_apply2 (fun e u -> EApp (e, u), pos) e (Bindlib.box_list u) - -let make_let_in - (x : Var.t) - (tau : typ Marked.pos) - (e1 : expr Marked.pos Bindlib.box) - (e2 : expr Marked.pos Bindlib.box) : expr Marked.pos Bindlib.box = - Bindlib.box_apply2 - (fun e u -> EApp (e, u), Marked.get_mark (Bindlib.unbox e2)) - (make_abs [| x |] e2 [tau] (Marked.get_mark (Bindlib.unbox e2))) - (Bindlib.box_list [e1]) - -module VarMap = Map.Make (Var) diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index c1590317..eb09cbcf 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -28,8 +28,6 @@ module RuleSet : Set.S with type elt = RuleName.t module LabelName : Uid.Id with type info = Uid.MarkedString.info module LabelMap : Map.S with type key = LabelName.t module LabelSet : Set.S with type elt = LabelName.t -module ScopeVarSet : Set.S with type elt = ScopeVar.t -module ScopeVarMap : Map.S with type key = ScopeVar.t (** Inside a scope, a definition can refer either to a scope def, or a subscope def *) @@ -49,70 +47,17 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {1 AST} *) -(**{2 Expressions}*) -type location = - | ScopeVar of ScopeVar.t Marked.pos * StateName.t option - | SubScopeVar of - ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos +(** {2 Expressions} *) + +type expr = (desugared, Pos.t) gexpr +(** See {!type:Shared_ast.gexpr} for the complete definition *) + +and marked_expr = expr Marked.pos + +type location = desugared glocation module LocationSet : Set.S with type elt = location Marked.pos - -type marked_expr = expr Marked.pos -(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} - library, based on higher-order abstract syntax*) - -and expr = - | ELocation of location - | EVar of expr Bindlib.var - | EStruct of StructName.t * marked_expr StructFieldMap.t - | EStructAccess of marked_expr * StructFieldName.t * StructName.t - | EEnumInj of marked_expr * EnumConstructor.t * EnumName.t - | EMatch of marked_expr * EnumName.t * marked_expr EnumConstructorMap.t - | ELit of Dcalc.Ast.lit - | EAbs of (expr, marked_expr) Bindlib.mbinder * marked_typ list - | EApp of marked_expr * marked_expr list - | EOp of operator - | EDefault of marked_expr list * marked_expr * marked_expr - | EIfThenElse of marked_expr * marked_expr * marked_expr - | EArray of marked_expr list - | ErrorOnEmpty of marked_expr - -module ExprMap : Map.S with type key = expr - -(** {2 Variable helpers} *) - -module Var : sig - type t = expr Bindlib.var - - val make : string -> t - val compare : t -> t -> int -end - -module VarMap : Map.S with type key = Var.t - -type vars = expr Bindlib.mvar - -val make_var : Var.t Marked.pos -> expr Marked.pos Bindlib.box - -val make_abs : - vars -> - expr Marked.pos Bindlib.box -> - typ Marked.pos list -> - Pos.t -> - expr Marked.pos Bindlib.box - -val make_app : - expr Marked.pos Bindlib.box -> - expr Marked.pos Bindlib.box list -> - Pos.t -> - expr Marked.pos Bindlib.box - -val make_let_in : - Var.t -> - typ Marked.pos -> - expr Marked.pos Bindlib.box -> - expr Marked.pos Bindlib.box -> - expr Marked.pos Bindlib.box +module ExprMap : Map.S with type key = marked_expr (** {2 Rules and scopes}*) @@ -125,9 +70,9 @@ type label_situation = ExplicitlyLabeled of LabelName.t Marked.pos | Unlabeled type rule = { rule_id : RuleName.t; - rule_just : expr Marked.pos Bindlib.box; - rule_cons : expr Marked.pos Bindlib.box; - rule_parameter : (Var.t * typ Marked.pos) option; + rule_just : marked_expr Bindlib.box; + rule_cons : marked_expr Bindlib.box; + rule_parameter : (expr Var.t * marked_typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -165,8 +110,7 @@ type scope = { type program = { program_scopes : scope Scopelang.Ast.ScopeMap.t; - program_enums : enum_ctx; - program_structs : struct_ctx; + program_ctx : decl_ctx; } (** {1 Helpers} *) diff --git a/compiler/desugared/dependency.ml b/compiler/desugared/dependency.ml index dc2cf193..b59eaf11 100644 --- a/compiler/desugared/dependency.ml +++ b/compiler/desugared/dependency.ml @@ -143,7 +143,7 @@ let build_scope_dependencies (scope : Ast.scope) : ScopeDependencies.t = let g = ScopeDependencies.empty in (* Add all the vertices to the graph *) let g = - Ast.ScopeVarMap.fold + ScopeVarMap.fold (fun (v : ScopeVar.t) var_or_state g -> match var_or_state with | Ast.WholeVar -> ScopeDependencies.add_vertex g (Vertex.Var (v, None)) diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index c74ba856..3ef25eeb 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -26,8 +26,8 @@ type target_scope_vars = | States of (StateName.t * ScopeVar.t) list type ctx = { - scope_var_mapping : target_scope_vars Ast.ScopeVarMap.t; - var_mapping : Scopelang.Ast.expr Var.t Ast.VarMap.t; + scope_var_mapping : target_scope_vars ScopeVarMap.t; + var_mapping : (Ast.expr, Scopelang.Ast.expr Var.t) Var.Map.t; } let tag_with_log_entry @@ -42,43 +42,41 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Scopelang.Ast.expr Marked.pos Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with - | Ast.ELocation (SubScopeVar (s_name, ss_name, s_var)) -> + | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> (* When referring to a subscope variable in an expression, we are referring to the output, hence we take the last state. *) let new_s_var = - match - Ast.ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping - with + match ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping with | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var | States states -> Marked.same_mark_as (snd (List.hd (List.rev states))) s_var in Bindlib.box (ELocation (SubScopeVar (s_name, ss_name, new_s_var)), m) - | Ast.ELocation (Ast.ScopeVar (s_var, None)) -> + | ELocation (DesugaredScopeVar (s_var, None)) -> Bindlib.box ( ELocation (ScopelangScopeVar (match - Ast.ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping + ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping with | WholeVar new_s_var -> Marked.same_mark_as new_s_var s_var | States _ -> failwith "should not happen")), m ) - | Ast.ELocation (Ast.ScopeVar (s_var, Some state)) -> + | ELocation (DesugaredScopeVar (s_var, Some state)) -> Bindlib.box ( ELocation (ScopelangScopeVar (match - Ast.ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping + ScopeVarMap.find (Marked.unmark s_var) ctx.scope_var_mapping with | WholeVar _ -> failwith "should not happen" | States states -> Marked.same_mark_as (List.assoc state states) s_var)), m ) - | Ast.EVar v -> + | EVar v -> Bindlib.box_apply (fun v -> Marked.same_mark_as v e) - (Bindlib.box_var (Ast.VarMap.find v ctx.var_mapping)) + (Bindlib.box_var (Var.Map.find v ctx.var_mapping)) | EStruct (s_name, fields) -> Bindlib.box_apply (fun new_fields -> EStruct (s_name, new_fields), m) @@ -92,7 +90,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : Bindlib.box_apply (fun new_e1 -> EEnumInj (new_e1, cons, e_name), m) (translate_expr ctx e1) - | EMatch (e1, e_name, arms) -> + | EMatchS (e1, e_name, arms) -> Bindlib.box_apply2 (fun new_e1 new_arms -> EMatchS (new_e1, e_name, new_arms), m) (translate_expr ctx e1) @@ -108,7 +106,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : let ctx = List.fold_left2 (fun ctx var new_var -> - { ctx with var_mapping = Ast.VarMap.add var new_var ctx.var_mapping }) + { ctx with var_mapping = Var.Map.add var new_var ctx.var_mapping }) ctx (Array.to_list vars) (Array.to_list new_vars) in Bindlib.box_apply @@ -181,14 +179,14 @@ let def_map_to_tree (def_info : Ast.ScopeDef.t) (def : Ast.rule Ast.RuleMap.t) : in List.map build_tree base_cases -(** From the {!type: rule_tree}, builds an {!constructor: Dcalc.Ast.EDefault} +(** From the {!type: rule_tree}, builds an {!constructor: Dcalc.EDefault} expression in the scope language. The [~toplevel] parameter is used to know when to place the toplevel binding in the case of functions. *) let rec rule_tree_to_expr ~(toplevel : bool) (ctx : ctx) (def_pos : Pos.t) - (is_func : Ast.Var.t option) + (is_func : Ast.expr Var.t option) (tree : rule_tree) : Scopelang.Ast.expr Marked.pos Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r @@ -214,12 +212,12 @@ let rec rule_tree_to_expr match is_func with | None -> ctx | Some new_param -> ( - match Ast.VarMap.find_opt new_param ctx.var_mapping with + match Var.Map.find_opt new_param ctx.var_mapping with | None -> let new_param_scope = Var.make (Bindlib.name_of new_param) in { ctx with - var_mapping = Ast.VarMap.add new_param new_param_scope ctx.var_mapping; + var_mapping = Var.Map.add new_param new_param_scope ctx.var_mapping; } | Some _ -> (* We only create a mapping if none exists because [rule_tree_to_expr] @@ -293,7 +291,7 @@ let rec rule_tree_to_expr default in Expr.make_abs - [| Ast.VarMap.find new_param ctx.var_mapping |] + [| Var.Map.find new_param ctx.var_mapping |] default [typ] def_pos else default | _ -> (* should not happen *) assert false @@ -301,7 +299,7 @@ let rec rule_tree_to_expr (** {1 AST translation} *) (** Translates a definition inside a scope, the resulting expression should be - an {!constructor: Dcalc.Ast.EDefault} *) + an {!constructor: Dcalc.EDefault} *) let translate_def (ctx : ctx) (def_info : Ast.ScopeDef.t) @@ -396,7 +394,7 @@ let translate_def Bindlib.unbox (rule_tree_to_expr ~toplevel:true ctx (Ast.ScopeDef.get_position def_info) - (Option.map (fun _ -> Ast.Var.make "param") is_def_func_param_typ) + (Option.map (fun _ -> Var.make "param") is_def_func_param_typ) (match top_list, top_value with | [], None -> (* In this case, there are no rules to define the expression and no @@ -462,9 +460,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = ~is_subscope_var:false in let scope_var = - match - Ast.ScopeVarMap.find var ctx.scope_var_mapping, state - with + match ScopeVarMap.find var ctx.scope_var_mapping, state with | WholeVar v, None -> v | States states, Some state -> List.assoc state states | _ -> failwith "should not happen" @@ -567,7 +563,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = ( subscop_real_name, (sub_scope_index, var_pos), match - Ast.ScopeVarMap.find sub_scope_var + ScopeVarMap.find sub_scope_var ctx.scope_var_mapping with | WholeVar v -> v, var_pos @@ -604,7 +600,7 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = (Bindlib.unbox (Bindlib.box_list scope.Ast.scope_assertions)) in let scope_sig = - Ast.ScopeVarMap.fold + ScopeVarMap.fold (fun var (states : Ast.var_or_states) acc -> match states with | WholeVar -> @@ -612,8 +608,8 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = Ast.ScopeDefMap.find (Ast.ScopeDef.Var (var, None)) scope.scope_defs in let typ = scope_def.scope_def_typ in - Scopelang.Ast.ScopeVarMap.add - (match Ast.ScopeVarMap.find var ctx.scope_var_mapping with + ScopeVarMap.add + (match ScopeVarMap.find var ctx.scope_var_mapping with | WholeVar v -> v | States _ -> failwith "should not happen") (typ, scope_def.scope_def_io) @@ -629,14 +625,14 @@ let translate_scope (ctx : ctx) (scope : Ast.scope) : Scopelang.Ast.scope_decl = (Ast.ScopeDef.Var (var, Some state)) scope.scope_defs in - Scopelang.Ast.ScopeVarMap.add - (match Ast.ScopeVarMap.find var ctx.scope_var_mapping with + ScopeVarMap.add + (match ScopeVarMap.find var ctx.scope_var_mapping with | WholeVar _ -> failwith "should not happen" | States states' -> List.assoc state states') (scope_def.scope_def_typ, scope_def.scope_def_io) acc) acc states) - scope.scope_vars Scopelang.Ast.ScopeVarMap.empty + scope.scope_vars ScopeVarMap.empty in { Scopelang.Ast.scope_decl_name = scope.scope_uid; @@ -653,14 +649,14 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = let ctx = Scopelang.Ast.ScopeMap.fold (fun _scope scope_decl ctx -> - Ast.ScopeVarMap.fold + ScopeVarMap.fold (fun scope_var (states : Ast.var_or_states) ctx -> match states with | Ast.WholeVar -> { ctx with scope_var_mapping = - Ast.ScopeVarMap.add scope_var + ScopeVarMap.add scope_var (WholeVar (ScopeVar.fresh (ScopeVar.get_info scope_var))) ctx.scope_var_mapping; } @@ -668,7 +664,7 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = { ctx with scope_var_mapping = - Ast.ScopeVarMap.add scope_var + ScopeVarMap.add scope_var (States (List.map (fun state -> @@ -686,14 +682,10 @@ let translate_program (pgrm : Ast.program) : Scopelang.Ast.program = }) scope_decl.Ast.scope_vars ctx) pgrm.Ast.program_scopes - { - scope_var_mapping = Ast.ScopeVarMap.empty; - var_mapping = Ast.VarMap.empty; - } + { scope_var_mapping = ScopeVarMap.empty; var_mapping = Var.Map.empty } in { Scopelang.Ast.program_scopes = Scopelang.Ast.ScopeMap.map (translate_scope ctx) pgrm.program_scopes; - Scopelang.Ast.program_ctx = - { ctx_structs = pgrm.program_structs; ctx_enums = pgrm.program_enums }; + Scopelang.Ast.program_ctx = pgrm.program_ctx; } diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index f91a5011..1a4683d7 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -24,8 +24,6 @@ module SubScopeNameSet : Set.S with type elt = SubScopeName.t = module SubScopeMap : Map.S with type key = SubScopeName.t = Map.Make (SubScopeName) -module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) -module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) module StructFieldMapLift = Bindlib.Lift (StructFieldMap) module EnumConstructorMapLift = Bindlib.Lift (EnumConstructorMap) @@ -35,16 +33,7 @@ module LocationSet : Set.S with type elt = location Marked.pos = Set.Make (struct type t = location Marked.pos - let compare x y = - match Marked.unmark x, Marked.unmark y with - | ScopelangScopeVar (vx, _), ScopelangScopeVar (vy, _) -> - ScopeVar.compare vx vy - | ( SubScopeVar (_, (xsubindex, _), (xsubvar, _)), - SubScopeVar (_, (ysubindex, _), (ysubvar, _)) ) -> - let c = SubScopeName.compare xsubindex ysubindex in - if c = 0 then ScopeVar.compare xsubvar ysubvar else c - | ScopelangScopeVar _, SubScopeVar _ -> -1 - | SubScopeVar _, ScopelangScopeVar _ -> 1 + let compare = Expr.compare_location end) type expr = (scopelang, Pos.t) gexpr diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index a4eb897b..19b67b9f 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -24,8 +24,6 @@ open Shared_ast module ScopeMap : Map.S with type key = ScopeName.t module SubScopeNameSet : Set.S with type elt = SubScopeName.t module SubScopeMap : Map.S with type key = SubScopeName.t -module ScopeVarSet : Set.S with type elt = ScopeVar.t -module ScopeVarMap : Map.S with type key = ScopeVar.t module StructFieldMapLift : sig val lift_box : diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 632afec5..c533731c 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -40,9 +40,9 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) Ast.ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) Ast.ScopeVarMap.t + (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; local_vars : (Ast.expr, untyped Dcalc.Ast.expr Var.t) Var.Map.t; } @@ -57,7 +57,7 @@ let empty_ctx enums = enum_ctx; scope_name; scopes_parameters = scopes_ctx; - scope_vars = Ast.ScopeVarMap.empty; + scope_vars = ScopeVarMap.empty; subscope_vars = Ast.SubScopeMap.empty; local_vars = Var.Map.empty; } @@ -250,7 +250,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : -- for more information see https://github.com/CatalaLang/catala/pull/280#discussion_r898851693. *) let retrieve_in_and_out_typ_or_any var vars = - let _, typ, _ = Ast.ScopeVarMap.find (Marked.unmark var) vars in + let _, typ, _ = ScopeVarMap.find (Marked.unmark var) vars in match typ with | TArrow (marked_input_typ, marked_output_typ) -> Marked.unmark marked_input_typ, Marked.unmark marked_output_typ @@ -314,12 +314,12 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : (Bindlib.box_list (List.map (translate_expr ctx) excepts)) (translate_expr ctx just) (translate_expr ctx cons) | ELocation (ScopelangScopeVar a) -> - let v, _, _ = Ast.ScopeVarMap.find (Marked.unmark a) ctx.scope_vars in + let v, _, _ = ScopeVarMap.find (Marked.unmark a) ctx.scope_vars in Bindlib.box_var v | ELocation (SubScopeVar (_, s, a)) -> ( try let v, _, _ = - Ast.ScopeVarMap.find (Marked.unmark a) + ScopeVarMap.find (Marked.unmark a) (Ast.SubScopeMap.find (Marked.unmark s) ctx.subscope_vars) in Bindlib.box_var v @@ -398,7 +398,7 @@ let translate_rule { ctx with scope_vars = - Ast.ScopeVarMap.add (Marked.unmark a) + ScopeVarMap.add (Marked.unmark a) (a_var, Marked.unmark tau, a_io) ctx.scope_vars; } ) @@ -458,12 +458,12 @@ let translate_rule match map with | Some map -> Some - (Ast.ScopeVarMap.add (Marked.unmark subs_var) + (ScopeVarMap.add (Marked.unmark subs_var) (a_var, Marked.unmark tau, a_io) map) | None -> Some - (Ast.ScopeVarMap.singleton (Marked.unmark subs_var) + (ScopeVarMap.singleton (Marked.unmark subs_var) (a_var, Marked.unmark tau, a_io))) ctx.subscope_vars; } ) @@ -488,10 +488,10 @@ let translate_rule let called_scope_return_struct = subscope_sig.scope_sig_output_struct in let subscope_vars_defined = try Ast.SubScopeMap.find subindex ctx.subscope_vars - with Not_found -> Ast.ScopeVarMap.empty + with Not_found -> ScopeVarMap.empty in let subscope_var_not_yet_defined subvar = - not (Ast.ScopeVarMap.mem subvar subscope_vars_defined) + not (ScopeVarMap.mem subvar subscope_vars_defined) in let pos_call = Marked.get_mark (SubScopeName.get_info subindex) in let subscope_args = @@ -505,7 +505,7 @@ let translate_rule Bindlib.box (Expr.empty_thunked_term (Untyped { pos = pos_call })) else let a_var, _, _ = - Ast.ScopeVarMap.find subvar.scope_var_name subscope_vars_defined + ScopeVarMap.find subvar.scope_var_name subscope_vars_defined in Expr.make_var (a_var, pos_mark pos_call)) all_subscope_input_vars @@ -603,10 +603,10 @@ let translate_rule Ast.SubScopeMap.add subindex (List.fold_left (fun acc (var_ctx, dvar) -> - Ast.ScopeVarMap.add var_ctx.scope_var_name + ScopeVarMap.add var_ctx.scope_var_name (dvar, var_ctx.scope_var_typ, var_ctx.scope_var_io) acc) - Ast.ScopeVarMap.empty all_subscope_output_vars_dcalc) + ScopeVarMap.empty all_subscope_output_vars_dcalc) ctx.subscope_vars; } ) | Assertion e -> @@ -647,7 +647,7 @@ let translate_rules ((fun next -> next), ctx) rules in - let scope_variables = Ast.ScopeVarMap.bindings new_ctx.scope_vars in + let scope_variables = ScopeVarMap.bindings new_ctx.scope_vars in let scope_output_variables = List.filter (fun (_, (_, _, io)) -> Marked.unmark io.Ast.io_output) @@ -689,7 +689,7 @@ let translate_scope_decl { ctx with scope_vars = - Ast.ScopeVarMap.add scope_var.scope_var_name + ScopeVarMap.add scope_var.scope_var_name ( scope_var_dcalc, scope_var.scope_var_typ, scope_var.scope_var_io ) @@ -711,7 +711,7 @@ let translate_scope_decl List.map (fun var_ctx -> let dcalc_x, _, _ = - Ast.ScopeVarMap.find var_ctx.scope_var_name ctx.scope_vars + ScopeVarMap.find var_ctx.scope_var_name ctx.scope_vars in var_ctx, dcalc_x) scope_variables @@ -840,7 +840,7 @@ let translate_program (prgm : Ast.program) : scope_var_typ = Marked.unmark tau; scope_var_io = vis; }) - (Ast.ScopeVarMap.bindings scope.scope_sig); + (ScopeVarMap.bindings scope.scope_sig); scope_sig_scope_var = scope_dvar; scope_sig_input_var = scope_input_var; scope_sig_input_struct = scope_input_struct_name; diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index b7e12b6a..1ef1acaf 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -47,6 +47,9 @@ module EnumMap : Map.S with type key = EnumName.t = Map.Make (EnumName) module ScopeVar : Uid.Id with type info = Uid.MarkedString.info = Uid.Make (Uid.MarkedString) () +module ScopeVarSet : Set.S with type elt = ScopeVar.t = Set.Make (ScopeVar) +module ScopeVarMap : Map.S with type key = ScopeVar.t = Map.Make (ScopeVar) + module SubScopeName : Uid.Id with type info = Uid.MarkedString.info = Uid.Make (Uid.MarkedString) () diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index db585f9a..19034aa5 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -232,6 +232,9 @@ let empty_thunked_term mark = Marked.mark pos (TArrow (Marked.mark pos (TLit TUnit), ty))) mark)) +let make_let_in_raw x tau e1 e2 mark = + make_app (make_abs [| x |] e2 [tau] mark) [e1] mark + let make_let_in x tau e1 e2 pos = let m_e1 = Marked.get_mark (Bindlib.unbox e1) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in @@ -383,6 +386,33 @@ let compare_lit (type a) (l1 : a glit) (l2 : a glit) = | LDuration _, _ -> . | _, LDuration _ -> . +let compare_location + (type a) + (x : a glocation Marked.pos) + (y : a glocation Marked.pos) = + match Marked.unmark x, Marked.unmark y with + | DesugaredScopeVar (vx, None), DesugaredScopeVar (vy, None) + | DesugaredScopeVar (vx, Some _), DesugaredScopeVar (vy, None) + | DesugaredScopeVar (vx, None), DesugaredScopeVar (vy, Some _) -> + ScopeVar.compare (Marked.unmark vx) (Marked.unmark vy) + | DesugaredScopeVar ((x, _), Some sx), DesugaredScopeVar ((y, _), Some sy) -> + let cmp = ScopeVar.compare x y in + if cmp = 0 then StateName.compare sx sy else cmp + | ScopelangScopeVar (vx, _), ScopelangScopeVar (vy, _) -> + ScopeVar.compare vx vy + | ( SubScopeVar (_, (xsubindex, _), (xsubvar, _)), + SubScopeVar (_, (ysubindex, _), (ysubvar, _)) ) -> + let c = SubScopeName.compare xsubindex ysubindex in + if c = 0 then ScopeVar.compare xsubvar ysubvar else c + | DesugaredScopeVar _, _ -> -1 + | _, DesugaredScopeVar _ -> 1 + | ScopelangScopeVar _, _ -> -1 + | _, ScopelangScopeVar _ -> 1 + | SubScopeVar _, _ -> . + | _, SubScopeVar _ -> . + +let equal_location a b = compare_location a b = 0 + let equal_log_entries l1 l2 = match l1, l2 with | VarDef t1, VarDef t2 -> equal_typ (t1, Pos.no_pos) (t2, Pos.no_pos) @@ -535,7 +565,8 @@ and equal : type a. (a, 't) marked_gexpr -> (a, 't) marked_gexpr -> bool = | ERaise ex1, ERaise ex2 -> equal_except ex1 ex2 | ECatch (etry1, ex1, ewith1), ECatch (etry2, ex2, ewith2) -> equal etry1 etry2 && equal_except ex1 ex2 && equal ewith1 ewith2 - | ELocation _, ELocation _ -> true + | ELocation l1, ELocation l2 -> + equal_location (Marked.mark Pos.no_pos l1) (Marked.mark Pos.no_pos l2) | EStruct (s1, fields1), EStruct (s2, fields2) -> StructName.equal s1 s2 && StructFieldMap.equal equal fields1 fields2 | EStructAccess (e1, f1, s1), EStructAccess (e2, f2, s2) -> @@ -579,8 +610,8 @@ let rec compare : type a. (a, _) marked_gexpr -> (a, _) marked_gexpr -> int = compare i1 i2 @@< fun () -> compare t1 t2 @@< fun () -> compare e1 e2 - | ELocation _, ELocation _ -> - 0 + | ELocation l1, ELocation l2 -> + compare_location (Marked.mark Pos.no_pos l1) (Marked.mark Pos.no_pos l2) | EStruct (name1, field_map1), EStruct (name2, field_map2) -> StructName.compare name1 name2 @@< fun () -> StructFieldMap.compare compare field_map1 field_map2 diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 0395624e..af6b2c1a 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -197,6 +197,15 @@ val make_let_in : Utils.Pos.t -> 'e marked Bindlib.box +val make_let_in_raw : + ('a any, 't) gexpr Bindlib.var -> + marked_typ -> + ('a, 't) marked_gexpr Bindlib.box -> + ('a, 't) marked_gexpr Bindlib.box -> + 't -> + ('a, 't) marked_gexpr Bindlib.box +(** Version with any mark; to be removed once we use the [mark] type everywhere. *) + val make_multiple_let_in : 'e Var.vars -> marked_typ list -> @@ -242,6 +251,8 @@ val format : val equal_lit : 'a glit -> 'a glit -> bool val compare_lit : 'a glit -> 'a glit -> int +val equal_location : 'a glocation Marked.pos -> 'a glocation Marked.pos -> bool +val compare_location : 'a glocation Marked.pos -> 'a glocation Marked.pos -> int val equal : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> bool (** Determines if two expressions are equal, omitting their position information *) diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 71c0691f..1e2d5b5c 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -143,78 +143,65 @@ let rec translate_expr EnumConstructorMap.mapi (fun c_uid' tau -> if EnumConstructor.compare c_uid c_uid' <> 0 then - let nop_var = Desugared.Ast.Var.make "_" in + let nop_var = Var.make "_" in Bindlib.unbox - (Desugared.Ast.make_abs [| nop_var |] - (Bindlib.box (Desugared.Ast.ELit (LBool false), pos)) + (Expr.make_abs [| nop_var |] + (Bindlib.box (ELit (LBool false), pos)) [tau] pos) else let ctxt, binding_var = Name_resolution.add_def_local_var ctxt (Marked.unmark binding) in let e2 = translate_expr scope inside_definition_of ctxt e2 in - Bindlib.unbox - (Desugared.Ast.make_abs [| binding_var |] e2 [tau] pos)) + Bindlib.unbox (Expr.make_abs [| binding_var |] e2 [tau] pos)) (EnumMap.find enum_uid ctxt.enums) in Bindlib.box_apply - (fun e1_sub -> Desugared.Ast.EMatch (e1_sub, enum_uid, cases), pos) + (fun e1_sub -> EMatchS (e1_sub, enum_uid, cases), pos) (translate_expr scope inside_definition_of ctxt e1_sub) | IfThenElse (e_if, e_then, e_else) -> Bindlib.box_apply3 - (fun e_if e_then e_else -> - Desugared.Ast.EIfThenElse (e_if, e_then, e_else), pos) + (fun e_if e_then e_else -> EIfThenElse (e_if, e_then, e_else), pos) (rec_helper e_if) (rec_helper e_then) (rec_helper e_else) | Binop (op, e1, e2) -> let op_term = - Marked.same_mark_as - (Desugared.Ast.EOp (Binop (translate_binop (Marked.unmark op)))) - op + Marked.same_mark_as (EOp (Binop (translate_binop (Marked.unmark op)))) op in Bindlib.box_apply2 - (fun e1 e2 -> Desugared.Ast.EApp (op_term, [e1; e2]), pos) + (fun e1 e2 -> EApp (op_term, [e1; e2]), pos) (rec_helper e1) (rec_helper e2) | Unop (op, e) -> let op_term = - Marked.same_mark_as - (Desugared.Ast.EOp (Unop (translate_unop (Marked.unmark op)))) - op + Marked.same_mark_as (EOp (Unop (translate_unop (Marked.unmark op)))) op in - Bindlib.box_apply - (fun e -> Desugared.Ast.EApp (op_term, [e]), pos) - (rec_helper e) + Bindlib.box_apply (fun e -> EApp (op_term, [e]), pos) (rec_helper e) | Literal l -> let untyped_term = match l with - | LNumber ((Int i, _), None) -> - Desugared.Ast.ELit (LInt (Runtime.integer_of_string i)) + | LNumber ((Int i, _), None) -> ELit (LInt (Runtime.integer_of_string i)) | LNumber ((Int i, _), Some (Percent, _)) -> - Desugared.Ast.ELit - (LRat Runtime.(decimal_of_string i /& decimal_of_string "100")) + ELit (LRat Runtime.(decimal_of_string i /& decimal_of_string "100")) | LNumber ((Dec (i, f), _), None) -> - Desugared.Ast.ELit (LRat Runtime.(decimal_of_string (i ^ "." ^ f))) + ELit (LRat Runtime.(decimal_of_string (i ^ "." ^ f))) | LNumber ((Dec (i, f), _), Some (Percent, _)) -> - Desugared.Ast.ELit + ELit (LRat Runtime.( decimal_of_string (i ^ "." ^ f) /& decimal_of_string "100")) - | LBool b -> Desugared.Ast.ELit (LBool b) + | LBool b -> ELit (LBool b) | LMoneyAmount i -> - Desugared.Ast.ELit + ELit (LMoney Runtime.( money_of_cents_integer ((integer_of_string i.money_amount_units *! integer_of_int 100) +! integer_of_string i.money_amount_cents))) | LNumber ((Int i, _), Some (Year, _)) -> - Desugared.Ast.ELit - (LDuration (Runtime.duration_of_numbers (int_of_string i) 0 0)) + ELit (LDuration (Runtime.duration_of_numbers (int_of_string i) 0 0)) | LNumber ((Int i, _), Some (Month, _)) -> - Desugared.Ast.ELit - (LDuration (Runtime.duration_of_numbers 0 (int_of_string i) 0)) + ELit (LDuration (Runtime.duration_of_numbers 0 (int_of_string i) 0)) | LNumber ((Int i, _), Some (Day, _)) -> - Desugared.Ast.ELit - (LDuration (Runtime.duration_of_numbers 0 0 (int_of_string i))) + ELit (LDuration (Runtime.duration_of_numbers 0 0 (int_of_string i))) | LNumber ((Dec (_, _), _), Some ((Year | Month | Day), _)) -> Errors.raise_spanned_error pos "Impossible to specify decimal amounts of days, months or years" @@ -225,7 +212,7 @@ let rec translate_expr if date.literal_date_day > 31 then Errors.raise_spanned_error pos "There is an error in this date: the day number is bigger than 31"; - Desugared.Ast.ELit + ELit (LDate (try Runtime.date_of_numbers date.literal_date_year @@ -247,7 +234,7 @@ let rec translate_expr desambiguate. In general, only the last state can be referenced. Except if defining a state of the same variable, then it references the previous state in the chain. *) - let x_sig = Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs in + let x_sig = ScopeVarMap.find uid ctxt.var_typs in let x_state = match x_sig.var_sig_states_list with | [] -> None @@ -281,13 +268,12 @@ let rec translate_expr (* we take the last state in the chain *) Some (List.hd (List.rev states))) in - Bindlib.box - (Desugared.Ast.ELocation (ScopeVar ((uid, pos), x_state)), pos) + Bindlib.box (ELocation (DesugaredScopeVar ((uid, pos), x_state)), pos) | None -> Name_resolution.raise_unknown_identifier "for a local or scope-wide variable" (x, pos)) | Some uid -> - Desugared.Ast.make_var (uid, pos) + Expr.make_var (uid, pos) (* the whole box thing is to accomodate for this case *)) | Dotted (e, c, x) -> ( match Marked.unmark e with @@ -303,7 +289,7 @@ let rec translate_expr Name_resolution.get_var_uid subscope_real_uid ctxt x in Bindlib.box - ( Desugared.Ast.ELocation + ( ELocation (SubScopeVar (subscope_real_uid, (subscope_uid, pos), (subscope_var_uid, pos))), pos ) @@ -330,9 +316,7 @@ let rec translate_expr (StructMap.bindings x_possible_structs) else let s_uid, f_uid = StructMap.choose x_possible_structs in - Bindlib.box_apply - (fun e -> Desugared.Ast.EStructAccess (e, f_uid, s_uid), pos) - e + Bindlib.box_apply (fun e -> EStructAccess (e, f_uid, s_uid), pos) e | Some c_name -> ( try let c_uid = @@ -340,9 +324,7 @@ let rec translate_expr in try let f_uid = StructMap.find c_uid x_possible_structs in - Bindlib.box_apply - (fun e -> Desugared.Ast.EStructAccess (e, f_uid, c_uid), pos) - e + Bindlib.box_apply (fun e -> EStructAccess (e, f_uid, c_uid), pos) e with Not_found -> Errors.raise_spanned_error pos "Struct %s does not contain field %s" (Marked.unmark c_name) (Marked.unmark x) @@ -351,19 +333,17 @@ let rec translate_expr "Struct %s has not been defined before" (Marked.unmark c_name)))) | FunCall (f, arg) -> Bindlib.box_apply2 - (fun f arg -> Desugared.Ast.EApp (f, [arg]), pos) + (fun f arg -> EApp (f, [arg]), pos) (rec_helper f) (rec_helper arg) | LetIn (x, e1, e2) -> let ctxt, v = Name_resolution.add_def_local_var ctxt (Marked.unmark x) in let tau = TAny, Marked.get_mark x in let fn = - Desugared.Ast.make_abs [| v |] + Expr.make_abs [| v |] (translate_expr scope inside_definition_of ctxt e2) [tau] pos in - Bindlib.box_apply2 - (fun fn arg -> Desugared.Ast.(EApp (fn, [arg]), pos)) - fn (rec_helper e1) + Bindlib.box_apply2 (fun fn arg -> EApp (fn, [arg]), pos) fn (rec_helper e1) | StructLit (s_name, fields) -> let s_uid = try Desugared.Ast.IdentMap.find (Marked.unmark s_name) ctxt.struct_idmap @@ -409,7 +389,7 @@ let rec translate_expr expected_s_fields; Bindlib.box_apply - (fun s_fields -> Desugared.Ast.EStruct (s_uid, s_fields), pos) + (fun s_fields -> EStruct (s_uid, s_fields), pos) (LiftStructFieldMap.lift_box s_fields) | EnumInject (enum, constructor, payload) -> ( let possible_c_uids = @@ -446,11 +426,10 @@ let rec translate_expr in Bindlib.box_apply (fun payload -> - ( Desugared.Ast.EEnumInj + ( EEnumInj ( (match payload with | Some e' -> e' - | None -> - Desugared.Ast.ELit LUnit, Marked.get_mark constructor), + | None -> ELit LUnit, Marked.get_mark constructor), c_uid, e_uid ), pos )) @@ -468,11 +447,10 @@ let rec translate_expr in Bindlib.box_apply (fun payload -> - ( Desugared.Ast.EEnumInj + ( EEnumInj ( (match payload with | Some e' -> e' - | None -> - Desugared.Ast.ELit LUnit, Marked.get_mark constructor), + | None -> ELit LUnit, Marked.get_mark constructor), c_uid, e_uid ), pos )) @@ -491,7 +469,7 @@ let rec translate_expr cases in Bindlib.box_apply2 - (fun e1 cases_d -> Desugared.Ast.EMatch (e1, e_uid, cases_d), pos) + (fun e1 cases_d -> EMatchS (e1, e_uid, cases_d), pos) e1 (LiftEnumConstructorMap.lift_box cases_d) | TestMatchCase (e1, pattern) -> @@ -508,22 +486,20 @@ let rec translate_expr let cases = EnumConstructorMap.mapi (fun c_uid' tau -> - let nop_var = Desugared.Ast.Var.make "_" in + let nop_var = Var.make "_" in Bindlib.unbox - (Desugared.Ast.make_abs [| nop_var |] + (Expr.make_abs [| nop_var |] (Bindlib.box - ( Desugared.Ast.ELit - (LBool (EnumConstructor.compare c_uid c_uid' = 0)), - pos )) + (ELit (LBool (EnumConstructor.compare c_uid c_uid' = 0)), pos)) [tau] pos)) (EnumMap.find enum_uid ctxt.enums) in Bindlib.box_apply - (fun e -> Desugared.Ast.EMatch (e, enum_uid, cases), pos) + (fun e -> EMatchS (e, enum_uid, cases), pos) (translate_expr scope inside_definition_of ctxt e1) | ArrayLit es -> Bindlib.box_apply - (fun es -> Desugared.Ast.EArray es, pos) + (fun es -> EArray es, pos) (Bindlib.box_list (List.map rec_helper es)) | CollectionOp ( (((Ast.Filter | Ast.Map) as op'), _pos_op'), @@ -535,15 +511,15 @@ let rec translate_expr Name_resolution.add_def_local_var ctxt (Marked.unmark param') in let f_pred = - Desugared.Ast.make_abs [| param |] + Expr.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) [TAny, pos] pos in Bindlib.box_apply2 (fun f_pred collection -> - ( Desugared.Ast.EApp - ( ( Desugared.Ast.EOp + ( EApp + ( ( EOp (match op' with | Ast.Map -> Binop Map | Ast.Filter -> Binop Filter @@ -578,31 +554,28 @@ let rec translate_expr in let cmp_op = if max_or_min then Gt op_kind else Lt op_kind in let f_pred = - Desugared.Ast.make_abs [| param |] + Expr.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) [TAny, pos] pos in - let f_pred_var = Desugared.Ast.Var.make "predicate" in - let f_pred_var_e = - Desugared.Ast.make_var (f_pred_var, Marked.get_mark predicate) - in - let acc_var = Desugared.Ast.Var.make "acc" in - let acc_var_e = Desugared.Ast.make_var (acc_var, pos) in - let item_var = Desugared.Ast.Var.make "item" in + let f_pred_var = Var.make "predicate" in + let f_pred_var_e = Expr.make_var (f_pred_var, Marked.get_mark predicate) in + let acc_var = Var.make "acc" in + let acc_var_e = Expr.make_var (acc_var, pos) in + let item_var = Var.make "item" in let item_var_e = - Desugared.Ast.make_var - (item_var, Marked.get_mark (Bindlib.unbox collection)) + Expr.make_var (item_var, Marked.get_mark (Bindlib.unbox collection)) in let fold_body = Bindlib.box_apply3 (fun acc_var_e item_var_e f_pred_var_e -> - ( Desugared.Ast.EIfThenElse - ( ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Binop cmp_op), pos_op'), + ( EIfThenElse + ( ( EApp + ( (EOp (Binop cmp_op), pos_op'), [ - Desugared.Ast.EApp (f_pred_var_e, [acc_var_e]), pos; - Desugared.Ast.EApp (f_pred_var_e, [item_var_e]), pos; + EApp (f_pred_var_e, [acc_var_e]), pos; + EApp (f_pred_var_e, [item_var_e]), pos; ] ), pos ), acc_var_e, @@ -611,20 +584,15 @@ let rec translate_expr acc_var_e item_var_e f_pred_var_e in let fold_f = - Desugared.Ast.make_abs [| acc_var; item_var |] fold_body - [TAny, pos; TAny, pos] - pos + Expr.make_abs [| acc_var; item_var |] fold_body [TAny, pos; TAny, pos] pos in let fold = Bindlib.box_apply3 (fun fold_f collection init -> - ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Ternop Fold), pos), - [fold_f; init; collection] ), - pos )) + EApp ((EOp (Ternop Fold), pos), [fold_f; init; collection]), pos) fold_f collection init in - Desugared.Ast.make_let_in f_pred_var (TAny, pos) f_pred fold + Expr.make_let_in_raw f_pred_var (TAny, pos) f_pred fold pos | CollectionOp (op', param', collection, predicate) -> let ctxt, param = Name_resolution.add_def_local_var ctxt (Marked.unmark param') @@ -634,27 +602,22 @@ let rec translate_expr match Marked.unmark op' with | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> assert false (* should not happen *) - | Ast.Exists -> - Bindlib.box (Desugared.Ast.ELit (LBool false), Marked.get_mark op') - | Ast.Forall -> - Bindlib.box (Desugared.Ast.ELit (LBool true), Marked.get_mark op') + | Ast.Exists -> Bindlib.box (ELit (LBool false), Marked.get_mark op') + | Ast.Forall -> Bindlib.box (ELit (LBool true), Marked.get_mark op') | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> - Bindlib.box - ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 0)), - Marked.get_mark op' ) + Bindlib.box (ELit (LInt (Runtime.integer_of_int 0)), Marked.get_mark op') | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> Bindlib.box - ( Desugared.Ast.ELit (LRat (Runtime.decimal_of_string "0")), - Marked.get_mark op' ) + (ELit (LRat (Runtime.decimal_of_string "0")), Marked.get_mark op') | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> Bindlib.box - ( Desugared.Ast.ELit + ( ELit (LMoney (Runtime.money_of_cents_integer (Runtime.integer_of_int 0))), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> Bindlib.box - ( Desugared.Ast.ELit (LDuration (Runtime.duration_of_numbers 0 0 0)), + ( ELit (LDuration (Runtime.duration_of_numbers 0 0 0)), Marked.get_mark op' ) | Ast.Aggregate (Ast.AggregateSum t) -> Errors.raise_spanned_error pos @@ -662,40 +625,34 @@ let rec translate_expr SurfacePrint.format_primitive_typ t | Ast.Aggregate (Ast.AggregateExtremum (_, _, init)) -> rec_helper init | Ast.Aggregate Ast.AggregateCount -> - Bindlib.box - ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 0)), - Marked.get_mark op' ) + Bindlib.box (ELit (LInt (Runtime.integer_of_int 0)), Marked.get_mark op') in - let acc_var = Desugared.Ast.Var.make "acc" in - let acc = Desugared.Ast.make_var (acc_var, Marked.get_mark param') in + let acc_var = Var.make "acc" in + let acc = Expr.make_var (acc_var, Marked.get_mark param') in let f_body = let make_body (op : binop) = Bindlib.box_apply2 (fun predicate acc -> - ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Binop op), Marked.get_mark op'), - [acc; predicate] ), - pos )) + EApp ((EOp (Binop op), Marked.get_mark op'), [acc; predicate]), pos) (translate_expr scope inside_definition_of ctxt predicate) acc in let make_extr_body (cmp_op : binop) (t : typ Marked.pos) = - let tmp_var = Desugared.Ast.Var.make "tmp" in - let tmp = Desugared.Ast.make_var (tmp_var, Marked.get_mark param') in - Desugared.Ast.make_let_in tmp_var t + let tmp_var = Var.make "tmp" in + let tmp = Expr.make_var (tmp_var, Marked.get_mark param') in + Expr.make_let_in_raw tmp_var t (translate_expr scope inside_definition_of ctxt predicate) (Bindlib.box_apply2 (fun acc tmp -> - ( Desugared.Ast.EIfThenElse - ( ( Desugared.Ast.EApp - ( ( Desugared.Ast.EOp (Binop cmp_op), - Marked.get_mark op' ), - [acc; tmp] ), + ( EIfThenElse + ( ( EApp + ((EOp (Binop cmp_op), Marked.get_mark op'), [acc; tmp]), pos ), acc, tmp ), pos )) acc tmp) + pos in match Marked.unmark op' with | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> @@ -728,14 +685,13 @@ let rec translate_expr | Ast.Aggregate Ast.AggregateCount -> Bindlib.box_apply2 (fun predicate acc -> - ( Desugared.Ast.EIfThenElse + ( EIfThenElse ( predicate, - ( Desugared.Ast.EApp - ( ( Desugared.Ast.EOp (Binop (Add KInt)), - Marked.get_mark op' ), + ( EApp + ( (EOp (Binop (Add KInt)), Marked.get_mark op'), [ acc; - ( Desugared.Ast.ELit (LInt (Runtime.integer_of_int 1)), + ( ELit (LInt (Runtime.integer_of_int 1)), Marked.get_mark predicate ); ] ), pos ), @@ -748,7 +704,7 @@ let rec translate_expr let make_f (t : typ_lit) = Bindlib.box_apply (fun binder -> - ( Desugared.Ast.EAbs + ( EAbs ( binder, [ TLit t, Marked.get_mark op'; @@ -784,58 +740,45 @@ let rec translate_expr in Bindlib.box_apply3 (fun f collection init -> - ( Desugared.Ast.EApp - ((Desugared.Ast.EOp (Ternop Fold), pos), [f; init; collection]), - pos )) + EApp ((EOp (Ternop Fold), pos), [f; init; collection]), pos) f collection init | MemCollection (member, collection) -> - let param_var = Desugared.Ast.Var.make "collection_member" in - let param = Desugared.Ast.make_var (param_var, pos) in + let param_var = Var.make "collection_member" in + let param = Expr.make_var (param_var, pos) in let collection = rec_helper collection in - let init = Bindlib.box (Desugared.Ast.ELit (LBool false), pos) in - let acc_var = Desugared.Ast.Var.make "acc" in - let acc = Desugared.Ast.make_var (acc_var, pos) in + let init = Bindlib.box (ELit (LBool false), pos) in + let acc_var = Var.make "acc" in + let acc = Expr.make_var (acc_var, pos) in let f_body = Bindlib.box_apply3 (fun member acc param -> - ( Desugared.Ast.EApp - ( (Desugared.Ast.EOp (Binop Or), pos), - [ - ( Desugared.Ast.EApp - ((Desugared.Ast.EOp (Binop Eq), pos), [member; param]), - pos ); - acc; - ] ), + ( EApp + ( (EOp (Binop Or), pos), + [EApp ((EOp (Binop Eq), pos), [member; param]), pos; acc] ), pos )) (translate_expr scope inside_definition_of ctxt member) acc param in let f = Bindlib.box_apply - (fun binder -> - Desugared.Ast.EAbs (binder, [TLit TBool, pos; TAny, pos]), pos) + (fun binder -> EAbs (binder, [TLit TBool, pos; TAny, pos]), pos) (Bindlib.bind_mvar [| acc_var; param_var |] f_body) in Bindlib.box_apply3 (fun f collection init -> - ( Desugared.Ast.EApp - ((Desugared.Ast.EOp (Ternop Fold), pos), [f; init; collection]), - pos )) + EApp ((EOp (Ternop Fold), pos), [f; init; collection]), pos) f collection init - | Builtin IntToDec -> Bindlib.box (Desugared.Ast.EOp (Unop IntToRat), pos) - | Builtin MoneyToDec -> Bindlib.box (Desugared.Ast.EOp (Unop MoneyToRat), pos) - | Builtin DecToMoney -> Bindlib.box (Desugared.Ast.EOp (Unop RatToMoney), pos) - | Builtin Cardinal -> Bindlib.box (Desugared.Ast.EOp (Unop Length), pos) - | Builtin GetDay -> Bindlib.box (Desugared.Ast.EOp (Unop GetDay), pos) - | Builtin GetMonth -> Bindlib.box (Desugared.Ast.EOp (Unop GetMonth), pos) - | Builtin GetYear -> Bindlib.box (Desugared.Ast.EOp (Unop GetYear), pos) - | Builtin FirstDayOfMonth -> - Bindlib.box (Desugared.Ast.EOp (Unop FirstDayOfMonth), pos) - | Builtin LastDayOfMonth -> - Bindlib.box (Desugared.Ast.EOp (Unop LastDayOfMonth), pos) - | Builtin RoundMoney -> Bindlib.box (Desugared.Ast.EOp (Unop RoundMoney), pos) - | Builtin RoundDecimal -> - Bindlib.box (Desugared.Ast.EOp (Unop RoundDecimal), pos) + | Builtin IntToDec -> Bindlib.box (EOp (Unop IntToRat), pos) + | Builtin MoneyToDec -> Bindlib.box (EOp (Unop MoneyToRat), pos) + | Builtin DecToMoney -> Bindlib.box (EOp (Unop RatToMoney), pos) + | Builtin Cardinal -> Bindlib.box (EOp (Unop Length), pos) + | Builtin GetDay -> Bindlib.box (EOp (Unop GetDay), pos) + | Builtin GetMonth -> Bindlib.box (EOp (Unop GetMonth), pos) + | Builtin GetYear -> Bindlib.box (EOp (Unop GetYear), pos) + | Builtin FirstDayOfMonth -> Bindlib.box (EOp (Unop FirstDayOfMonth), pos) + | Builtin LastDayOfMonth -> Bindlib.box (EOp (Unop LastDayOfMonth), pos) + | Builtin RoundMoney -> Bindlib.box (EOp (Unop RoundMoney), pos) + | Builtin RoundDecimal -> Bindlib.box (EOp (Unop RoundDecimal), pos) and disambiguate_match_and_build_expression (scope : ScopeName.t) @@ -845,7 +788,7 @@ and disambiguate_match_and_build_expression Desugared.Ast.expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function - | None -> ctxt, Desugared.Ast.Var.make "_" + | None -> ctxt, Var.make "_" | Some param -> let ctxt, param_var = Name_resolution.add_def_local_var ctxt param in ctxt, param_var @@ -861,7 +804,7 @@ and disambiguate_match_and_build_expression Bindlib.box_apply2 (fun e_binder case_body -> Marked.same_mark_as - (Desugared.Ast.EAbs + (EAbs ( e_binder, [ EnumConstructorMap.find c_uid @@ -986,19 +929,17 @@ let merge_conditions (default_pos : Pos.t) : Desugared.Ast.expr Marked.pos Bindlib.box = match precond, cond with | Some precond, Some cond -> - let op_term = - Desugared.Ast.EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) - in + let op_term = EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) in Bindlib.box_apply2 (fun precond cond -> - Desugared.Ast.EApp (op_term, [precond; cond]), Marked.get_mark cond) + EApp (op_term, [precond; cond]), Marked.get_mark cond) precond cond | Some precond, None -> Bindlib.box_apply (fun precond -> Marked.unmark precond, default_pos) precond | None, Some cond -> cond - | None, None -> Bindlib.box (Desugared.Ast.ELit (LBool true), default_pos) + | None, None -> Bindlib.box (ELit (LBool true), default_pos) (** Translates a surface definition into condition into a desugared {!type: Desugared.Ast.rule} *) @@ -1007,7 +948,7 @@ let process_default (scope : ScopeName.t) (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) - (param_uid : Desugared.Ast.Var.t Marked.pos option) + (param_uid : Desugared.Ast.expr Var.t Marked.pos option) (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) @@ -1095,14 +1036,14 @@ let process_def check_unlabeled_exception *) assert false (* should not happen *) | Some (Name_resolution.Unique (name, pos)) -> - Desugared.Ast.ExceptionToRule (name, pos)) + ExceptionToRule (name, pos)) | ExceptionToLabel label_str -> ( try let label_id = Desugared.Ast.IdentMap.find (Marked.unmark label_str) scope_def_ctxt.label_idmap in - Desugared.Ast.ExceptionToLabel (label_id, Marked.get_mark label_str) + ExceptionToLabel (label_id, Marked.get_mark label_str) with Not_found -> Errors.raise_spanned_error (Marked.get_mark label_str) @@ -1169,10 +1110,8 @@ let process_assert | Some precond -> Bindlib.box_apply2 (fun precond ass -> - ( Desugared.Ast.EIfThenElse - ( precond, - ass, - Marked.same_mark_as (Desugared.Ast.ELit (LBool true)) precond ), + ( EIfThenElse + (precond, ass, Marked.same_mark_as (ELit (LBool true)) precond), Marked.get_mark precond )) precond ass | None -> ass @@ -1287,10 +1226,13 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : Desugared.Ast.program = let empty_prgm = { - Desugared.Ast.program_structs = - StructMap.map StructFieldMap.bindings ctxt.Name_resolution.structs; - Desugared.Ast.program_enums = - EnumMap.map EnumConstructorMap.bindings ctxt.Name_resolution.enums; + Desugared.Ast.program_ctx = + { + ctx_structs = + StructMap.map StructFieldMap.bindings ctxt.Name_resolution.structs; + ctx_enums = + EnumMap.map EnumConstructorMap.bindings ctxt.Name_resolution.enums; + }; Desugared.Ast.program_scopes = Scopelang.Ast.ScopeMap.mapi (fun s_uid s_context -> @@ -1298,17 +1240,12 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : Desugared.Ast.scope_vars = Desugared.Ast.IdentMap.fold (fun _ v acc -> - let v_sig = - Desugared.Ast.ScopeVarMap.find v ctxt.var_typs - in + let v_sig = ScopeVarMap.find v ctxt.var_typs in match v_sig.var_sig_states_list with - | [] -> - Desugared.Ast.ScopeVarMap.add v Desugared.Ast.WholeVar acc + | [] -> ScopeVarMap.add v Desugared.Ast.WholeVar acc | states -> - Desugared.Ast.ScopeVarMap.add v - (Desugared.Ast.States states) acc) - s_context.Name_resolution.var_idmap - Desugared.Ast.ScopeVarMap.empty; + ScopeVarMap.add v (Desugared.Ast.States states) acc) + s_context.Name_resolution.var_idmap ScopeVarMap.empty; Desugared.Ast.scope_sub_scopes = s_context.Name_resolution.sub_scopes; Desugared.Ast.scope_defs = @@ -1318,8 +1255,7 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : Desugared.Ast.IdentMap.fold (fun _ v acc -> let v_sig = - Desugared.Ast.ScopeVarMap.find v - ctxt.Name_resolution.var_typs + ScopeVarMap.find v ctxt.Name_resolution.var_typs in match v_sig.var_sig_states_list with | [] -> @@ -1389,8 +1325,7 @@ let desugar_program (ctxt : Name_resolution.context) (prgm : Ast.program) : Desugared.Ast.IdentMap.fold (fun _ v acc -> let v_sig = - Desugared.Ast.ScopeVarMap.find v - ctxt.Name_resolution.var_typs + ScopeVarMap.find v ctxt.Name_resolution.var_typs in let def_key = Desugared.Ast.ScopeDef.SubScopeVar diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index d438e4f1..ae8f27f3 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -79,7 +79,7 @@ type context = { (** For each scope, its context *) structs : struct_context StructMap.t; (** For each struct, its context *) enums : enum_context EnumMap.t; (** For each enum, its context *) - var_typs : var_sig Desugared.Ast.ScopeVarMap.t; + var_typs : var_sig ScopeVarMap.t; (** The signatures of each scope variable declared *) } (** Main context used throughout {!module: Surface.Desugaring} *) @@ -101,13 +101,13 @@ let raise_unknown_identifier (msg : string) (ident : ident Marked.pos) = (** Gets the type associated to an uid *) let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ Marked.pos = - (Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs).var_sig_typ + (ScopeVarMap.find uid ctxt.var_typs).var_sig_typ let is_var_cond (ctxt : context) (uid : ScopeVar.t) : bool = - (Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs).var_sig_is_condition + (ScopeVarMap.find uid ctxt.var_typs).var_sig_is_condition let get_var_io (ctxt : context) (uid : ScopeVar.t) : Ast.scope_decl_context_io = - (Desugared.Ast.ScopeVarMap.find uid ctxt.var_typs).var_sig_io + (ScopeVarMap.find uid ctxt.var_typs).var_sig_io (** Get the variable uid inside the scope given in argument *) let get_var_uid @@ -299,7 +299,7 @@ let process_data_decl ctxt with scopes = Scopelang.Ast.ScopeMap.add scope scope_ctxt ctxt.scopes; var_typs = - Desugared.Ast.ScopeVarMap.add uid + ScopeVarMap.add uid { var_sig_typ = data_typ; var_sig_is_condition = is_cond; @@ -321,8 +321,8 @@ let process_item_decl (** Adds a binding to the context *) let add_def_local_var (ctxt : context) (name : ident) : - context * Desugared.Ast.Var.t = - let local_var_uid = Desugared.Ast.Var.make name in + context * Desugared.Ast.expr Var.t = + let local_var_uid = Var.make name in let ctxt = { ctxt with @@ -537,7 +537,7 @@ let get_def_key match name with | [x] -> let x_uid = get_var_uid scope_uid ctxt x in - let var_sig = Desugared.Ast.ScopeVarMap.find x_uid ctxt.var_typs in + let var_sig = ScopeVarMap.find x_uid ctxt.var_typs in Desugared.Ast.ScopeDef.Var ( x_uid, match state with @@ -730,7 +730,7 @@ let form_context (prgm : Ast.program) : context = local_var_idmap = Desugared.Ast.IdentMap.empty; scope_idmap = Desugared.Ast.IdentMap.empty; scopes = Scopelang.Ast.ScopeMap.empty; - var_typs = Desugared.Ast.ScopeVarMap.empty; + var_typs = ScopeVarMap.empty; structs = StructMap.empty; struct_idmap = Desugared.Ast.IdentMap.empty; field_idmap = Desugared.Ast.IdentMap.empty; diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index 30d25ebd..59ce3a7d 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -79,7 +79,7 @@ type context = { (** For each scope, its context *) structs : struct_context StructMap.t; (** For each struct, its context *) enums : enum_context EnumMap.t; (** For each enum, its context *) - var_typs : var_sig Desugared.Ast.ScopeVarMap.t; + var_typs : var_sig ScopeVarMap.t; (** The signatures of each scope variable declared *) } (** Main context used throughout {!module: Surface.Desugaring} *) @@ -120,7 +120,7 @@ val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool val is_type_cond : Ast.typ Marked.pos -> bool -val add_def_local_var : context -> ident -> context * Desugared.Ast.Var.t +val add_def_local_var : context -> ident -> context * Desugared.Ast.expr Var.t (** Adds a binding to the context *) val get_def_key : From e41e0f9dccbd1606342fb2bd59ff2bb9c9b924cd Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Fri, 26 Aug 2022 12:00:25 +0200 Subject: [PATCH 16/31] Fix line length and display lines of code --- compiler/literate/latex.ml | 23 +- .../arrete_2019-09-27.catala_fr | 4 +- .../aides_logement/autres_sources.catala_fr | 3 +- .../code_construction_legislatif.catala_fr | 16 +- .../code_construction_reglementaire.catala_fr | 31 +- .../sécurité_sociale_L.catala_fr | 6 +- .../sécurité_sociale_R.catala_fr | 6 +- french_law/ocaml/law_source/aides_logement.ml | 412 +++++++++--------- 8 files changed, 265 insertions(+), 236 deletions(-) diff --git a/compiler/literate/latex.ml b/compiler/literate/latex.ml index 0eb633e4..2998bae8 100644 --- a/compiler/literate/latex.ml +++ b/compiler/literate/latex.ml @@ -26,6 +26,15 @@ module C = Cli (** {1 Helpers} *) +let lines_of_code = ref 0 + +let update_lines_of_code c = + lines_of_code := + !lines_of_code + + Pos.get_end_line (Marked.get_mark c) + - Pos.get_start_line (Marked.get_mark c) + - 1 + (** Espaces various LaTeX-sensitive characters *) let pre_latexify (s : string) : string = (* Then we send to pandoc, to ensure the markdown features used in the @@ -186,9 +195,7 @@ let check_exceeding_lines |> String.split_on_char '\n' |> List.iteri (fun i s -> if - String.length (Ubase.from_utf8 s) - (* we remove diacritics to avoid false positives due to UFT8 encoding - not taken into account by String *) > max_len + Uutf.String.fold_utf_8 (fun (acc : int) _ _ -> acc + 1) 0 s > max_len then ( Cli.warning_print "The line %s in %s is exceeding %s characters:" (Cli.with_style @@ -241,6 +248,11 @@ let rec law_structure_to_latex | A.LawInclude (A.CatalaFile _ | A.LegislativeText _) -> () | A.LawText t -> Format.fprintf fmt "%s" (pre_latexify t) | A.CodeBlock (_, c, false) when not print_only_law -> + let start_line = Pos.get_start_line (Marked.get_mark c) - 1 in + let filename = Filename.basename (Pos.get_file (Marked.get_mark c)) in + let block_content = Marked.unmark c in + check_exceeding_lines start_line filename block_content; + update_lines_of_code c; Format.fprintf fmt "\\begin{minted}[label={\\hspace*{\\fill}\\texttt{%s}},firstnumber=%d]{%s}\n\ ```catala\n\ @@ -261,6 +273,7 @@ let rec law_structure_to_latex let filename = Filename.basename (Pos.get_file (Marked.get_mark c)) in let block_content = Marked.unmark c in check_exceeding_lines start_line filename block_content; + update_lines_of_code c; Format.fprintf fmt "\\begin{tcolorbox}[colframe=OliveGreen, breakable, \ title=\\textcolor{black}{\\texttt{%s}},title after \ @@ -286,4 +299,6 @@ let ast_to_latex Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "\n\n") (law_structure_to_latex language print_only_law) - fmt program.program_items + fmt program.program_items; + Cli.debug_print "Lines of Catala inside literate source code: %d" + !lines_of_code diff --git a/examples/aides_logement/arrete_2019-09-27.catala_fr b/examples/aides_logement/arrete_2019-09-27.catala_fr index 5faf59e9..d11b74d9 100644 --- a/examples/aides_logement/arrete_2019-09-27.catala_fr +++ b/examples/aides_logement/arrete_2019-09-27.catala_fr @@ -2518,8 +2518,8 @@ dispositions sont applicables pour les prestations dues à compter du 1er octobre 2021. ```catala -champ d'application CalculAidePersonnaliséeLogementAccessionPropriété sous condition - date_courante >=@ |2021-10-01|: +champ d'application CalculAidePersonnaliséeLogementAccessionPropriété + sous condition date_courante >=@ |2021-10-01|: étiquette base définition montant_forfaitaire_charges_d832_10 égal à 54,22 € +€ 12,29 € *€ (entier_vers_décimal de nombre_personnes_à_charge) diff --git a/examples/aides_logement/autres_sources.catala_fr b/examples/aides_logement/autres_sources.catala_fr index 2bf04a7e..a4b60cab 100644 --- a/examples/aides_logement/autres_sources.catala_fr +++ b/examples/aides_logement/autres_sources.catala_fr @@ -243,7 +243,8 @@ champ d'application CalculetteAidesAuLogementGardeAlternée: sinon # On retire la part des allocations logement dues aux enfants # en garde alternée à hauteur des coefficients prenant en compte la - # période cumulée pendant laquelle le ménage accueille l'enfant à domicile. + # période cumulée pendant laquelle le ménage accueille l'enfant + # à domicile. (calculette.aide_finale_formule -€ calculette_sans_garde_alternée.aide_finale_formule) *€ ((somme décimal pour coeff dans diff --git a/examples/aides_logement/code_construction_legislatif.catala_fr b/examples/aides_logement/code_construction_legislatif.catala_fr index 68ad9ad3..abd27316 100644 --- a/examples/aides_logement/code_construction_legislatif.catala_fr +++ b/examples/aides_logement/code_construction_legislatif.catala_fr @@ -313,7 +313,8 @@ contrat de travail autre qu'un contrat à durée indéterminée. ```catala # Information donnée par le bureau DGALN/DHUP/FE4 le 25/05/2022: # "Historiquement, cet article avait été créé pour déroger (pour les moins -# de 25 ans) au dispositif « d’évaluation forfaitaire » appliqué, avant réforme, +# de 25 ans) au dispositif « d’évaluation forfaitaire » appliqué, +# avant réforme, # pour les ménages présentant un revenu moindre en N-2 mais ayant une activité # professionnelle lors de la demande ou du recalcul du droit (anciens articles # R. 822-18 à 20 du CCH abrogés en 2020). Cet article n’a de fait plus lieu @@ -712,7 +713,8 @@ champ d'application ÉligibilitéAidePersonnaliséeLogement: étiquette l831_2_base règle condition_logement_prêt rempli # Cas de base implicite - étiquette l831_2_1 exception l831_2_base règle condition_logement_prêt sous condition + étiquette l831_2_1 exception l831_2_base règle condition_logement_prêt + sous condition selon ménage.logement.mode_occupation sous forme -- LocationAccession de propriété: propriété.prêt.date_signature >=@ |2017-12-31| @@ -799,7 +801,9 @@ est fixée par voie réglementaire. ```catala champ d'application CalculAidePersonnaliséeLogementLocatif: - définition traitement_aide_finale de aide_finale état réduction_loyer_solidarité égal à + définition traitement_aide_finale de aide_finale + état réduction_loyer_solidarité + égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans si aide_finale -€ réduction_loyer_solidarité *€ fraction_l832_3 >=€ 0€ @@ -896,7 +900,8 @@ champ d'application ÉligibilitéAllocationLogement: -- a_déjà_ouvert_droit_aux_allocations_familiales: enfant.EnfantÀCharge.a_déjà_ouvert_droit_aux_allocations_familiales -- bénéficie_titre_personnel_aide_personnelle_logement: - enfant.EnfantÀCharge.bénéficie_titre_personnel_aide_personnelle_logement + enfant.EnfantÀCharge. + bénéficie_titre_personnel_aide_personnelle_logement } ) )) = 1 @@ -927,7 +932,8 @@ champ d'application ÉligibilitéAllocationLogement: -- a_déjà_ouvert_droit_aux_allocations_familiales: enfant.EnfantÀCharge.a_déjà_ouvert_droit_aux_allocations_familiales -- bénéficie_titre_personnel_aide_personnelle_logement: - enfant.EnfantÀCharge.bénéficie_titre_personnel_aide_personnelle_logement + enfant.EnfantÀCharge. + bénéficie_titre_personnel_aide_personnelle_logement } ) )) = 0 et diff --git a/examples/aides_logement/code_construction_reglementaire.catala_fr b/examples/aides_logement/code_construction_reglementaire.catala_fr index 524bf213..e9a87eaa 100644 --- a/examples/aides_logement/code_construction_reglementaire.catala_fr +++ b/examples/aides_logement/code_construction_reglementaire.catala_fr @@ -1118,8 +1118,8 @@ peuvent être remises en cause par les parents qu'au bout d'un an, sauf modification, avant cette échéance, des modalités de résidence de l'enfant. ```catala -# Pas pertinent pour le calcul du montant: il s'agit de s'assurer que les parents -# ne changent pas les modalités de résidence tous les quatre matins. +# Pas pertinent pour le calcul du montant: il s'agit de s'assurer que les +# parents ne changent pas les modalités de résidence tous les quatre matins. ``` ####### Article R823-4 | LEGIARTI000038878933 @@ -1947,8 +1947,8 @@ d'ouverture du droit sont réunies ; d'être réunies. ```catala -# Cet article met en place des délais qu'il n'est pas nécessaire de codifier pour -# le moment. +# Cet article met en place des délais qu'il n'est pas nécessaire de codifier +# pour le moment. ``` ######## Article D823-15 | LEGIARTI000038878909 @@ -2002,7 +2002,8 @@ dans le cas où le logement occupé est une chambre, de la composition familiale ```catala champ d'application CalculAidePersonnaliséeLogementLocatif: définition loyer_éligible égal à - si loyer_principal >€ plafond_loyer_d823_16_2 alors plafond_loyer_d823_16_2 + si loyer_principal >€ plafond_loyer_d823_16_2 + alors plafond_loyer_d823_16_2 sinon loyer_principal ``` @@ -2046,7 +2047,9 @@ champ d'application CalculAidePersonnaliséeLogementLocatif: # a bien cette expression. sinon aide_finale) - exception définition traitement_aide_finale de aide_finale état diminué sous condition + exception définition traitement_aide_finale de aide_finale + état diminué + sous condition bénéficiaire_aide_adulte_ou_enfant_handicapés conséquence égal à aide_finale @@ -2057,7 +2060,9 @@ Le résultat ainsi obtenu est minoré d'un montant fixé forfaitairement par arr ```catala champ d'application CalculAidePersonnaliséeLogementLocatif: - définition traitement_aide_finale de aide_finale état minoration_forfaitaire égal à + définition traitement_aide_finale de aide_finale + état minoration_forfaitaire + égal à soit aide_finale égal à traitement_aide_finale de aide_finale dans si aide_finale -€ montant_forfaitaire_d823_16 >=€ 0€ @@ -3422,10 +3427,10 @@ II du présent livre et arrondies à la centaine d'euros supérieure ; # est en effet une reprise peut-être maladroite et perfectible de l’ancien # article (avant recodification, abrogé depuis) R. 351-19 qui est plus clair # sur cette notion d’intervalle : -# « Le coefficient K, au plus égal à 0,95, est déterminé pour chaque intervalle -# de ressources de 100 euros en appliquant la formule suivante : +# « Le coefficient K, au plus égal à 0,95, est déterminé pour chaque +# intervalle de ressources de 100 euros en appliquant la formule suivante : # K = 0,95-R/ CM x N -# dans laquelle : +# dans laquelle : # R représente la limite supérieure de l'intervalle dans lequel se situent # les ressources appréciées conformément à l'article R. 351-5 ; […] » # La manière dont nous interprétons cette réponse est la suivante : toutes @@ -4383,9 +4388,9 @@ au calcul de l'allocation de logement versée en secteur locatif, sous réserve des articles D. 842-2 et D. 842-4. ```catala -# Rien à formaliser ici, voir le prologue sur la déclaration du champ d'application -# de calcul des allocations logement qui appelle directement le champ d'application -# de calcul de l'APL en secteur locatif. +# Rien à formaliser ici, voir le prologue sur la déclaration du +# champ d'application de calcul des allocations logement qui appelle +# directement le champ d'application de calcul de l'APL en secteur locatif. ``` ####### Article D842-2 | LEGIARTI000038878685 diff --git a/examples/prestations_familiales/sécurité_sociale_L.catala_fr b/examples/prestations_familiales/sécurité_sociale_L.catala_fr index 02bd8049..ddf31856 100644 --- a/examples/prestations_familiales/sécurité_sociale_L.catala_fr +++ b/examples/prestations_familiales/sécurité_sociale_L.catala_fr @@ -56,7 +56,8 @@ tout enfant dont la rémunération éventuelle n'excède pas un plafond. champ d'application ÉligibilitéPrestationsFamiliales : étiquette cas_base règle droit_ouvert de enfant sous condition enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Après et - (enfant.EnfantPrestationsFamiliales.rémuneration_mensuelle <=€ plafond_l512_3_2) et + (enfant.EnfantPrestationsFamiliales.rémuneration_mensuelle <=€ + plafond_l512_3_2) et (enfant.EnfantPrestationsFamiliales.date_de_naissance +@ âge_l512_3_2 >@ date_courante) conséquence rempli @@ -67,7 +68,8 @@ champ d'application ÉligibilitéPrestationsFamiliales : enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Avant ou enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Pendant ou enfant.EnfantPrestationsFamiliales.obligation_scolaire sous forme Après et - (enfant.EnfantPrestationsFamiliales.rémuneration_mensuelle <=€ plafond_l512_3_2) + (enfant.EnfantPrestationsFamiliales.rémuneration_mensuelle <=€ + plafond_l512_3_2) conséquence rempli ``` diff --git a/examples/prestations_familiales/sécurité_sociale_R.catala_fr b/examples/prestations_familiales/sécurité_sociale_R.catala_fr index 6c5b9e65..e5702112 100644 --- a/examples/prestations_familiales/sécurité_sociale_R.catala_fr +++ b/examples/prestations_familiales/sécurité_sociale_R.catala_fr @@ -13,9 +13,9 @@ ans sous réserve que leur rémunération n'excède pas le plafond fixé au deux alinéa du présent article. ```catala -# Attention: ici la condition de ressources au dessous du plafond est une répétition -# par rapport au texte de L512-3. On ne remet donc pas le code ici correspondant -# à cette limitation. +# Attention: ici la condition de ressources au dessous du plafond est une +# répétition par rapport au texte de L512-3. On ne remet donc pas le code +# ici correspondant à cette limitation. champ d'application ÉligibilitéPrestationsFamiliales : définition âge_l512_3_2 égal à 20 an diff --git a/french_law/ocaml/law_source/aides_logement.ml b/french_law/ocaml/law_source/aides_logement.ml index dd5e3dee..68ae134f 100644 --- a/french_law/ocaml/law_source/aides_logement.ml +++ b/french_law/ocaml/law_source/aides_logement.ml @@ -2310,7 +2310,7 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4230; start_column=14; end_line=4230; end_column=50; + start_line=4231; start_column=14; end_line=4231; end_column=50; law_headings=["Article D832-26"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2366,8 +2366,8 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4281; start_column=5; - end_line=4281; end_column=26; + start_line=4282; start_column=5; + end_line=4282; end_column=26; law_headings=["Article D832-26"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2416,7 +2416,7 @@ let calcul_equivalence_loyer_minimale (calcul_equivalence_loyer_minimale_in: Cal /& (decimal_of_string "12."))))))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4243; start_column=14; end_line=4243; end_column=21; + start_line=4244; start_column=14; end_line=4244; end_column=21; law_headings=["Article D832-26"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2497,8 +2497,8 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4195; start_column=5; - end_line=4195; end_column=26; + start_line=4196; start_column=5; + end_line=4196; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2539,7 +2539,7 @@ let calcul_nombre_part_logement_foyer (calcul_nombre_part_logement_foyer_in: Cal (integer_of_string "4")))))))))))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4108; start_column=14; end_line=4108; end_column=36; + start_line=4109; start_column=14; end_line=4109; end_column=36; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -2599,7 +2599,7 @@ let calcul_nombre_parts_accession_propriete (calcul_nombre_parts_accession_propr "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3452; start_column=14; end_line=3452; end_column=36; + start_line=3453; start_column=14; end_line=3453; end_column=36; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -2836,7 +2836,7 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2538; start_column=14; end_line=2538; end_column=36; + start_line=2539; start_column=14; end_line=2539; end_column=36; law_headings=["Article R824-3"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2894,8 +2894,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2506; start_column=14; - end_line=2506; end_column=36; + start_line=2507; start_column=14; + end_line=2507; end_column=36; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2910,8 +2910,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn (fun (_: _) -> depense_logement_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2410; start_column=14; - end_line=2410; end_column=36; + start_line=2411; start_column=14; + end_line=2411; end_column=36; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2952,8 +2952,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2419; start_column=14; - end_line=2419; end_column=36; + start_line=2420; start_column=14; + end_line=2420; end_column=36; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -2985,8 +2985,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2515; start_column=14; - end_line=2515; end_column=36; + start_line=2516; start_column=14; + end_line=2516; end_column=36; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3047,8 +3047,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2396; start_column=20; - end_line=2396; end_column=51; + start_line=2397; start_column=20; + end_line=2397; end_column=51; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3078,8 +3078,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn (decimal_of_string "2."))))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2380; start_column=20; - end_line=2380; end_column=55; + start_line=2381; start_column=20; + end_line=2381; end_column=55; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3125,8 +3125,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2490; start_column=7; - end_line=2490; end_column=51; + start_line=2491; start_column=7; + end_line=2491; end_column=51; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3157,8 +3157,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn (money_of_cents_string "0")))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2462; start_column=7; - end_line=2462; end_column=42; + start_line=2463; start_column=7; + end_line=2463; end_column=42; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3221,8 +3221,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2438; start_column=14; - end_line=2438; end_column=28; + start_line=2439; start_column=14; + end_line=2439; end_column=28; law_headings=["Article R824-2"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3241,8 +3241,8 @@ let impaye_depense_logement (impaye_depense_logement_in: ImpayeDepenseLogementIn montant_dette_ else (money_of_cents_string "0")))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2375; start_column=14; - end_line=2375; end_column=28; + start_line=2376; start_column=14; + end_line=2376; end_column=28; law_headings=["Article R824-1"; "Section 1 : Seuils de constitution d'un impayé"; "Chapitre IV : Impayés de dépenses de logement"; @@ -3665,7 +3665,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2098; start_column=14; end_line=2098; end_column=29; + start_line=2099; start_column=14; end_line=2099; end_column=29; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5042,7 +5042,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4403; start_column=14; end_line=4403; end_column=29; + start_line=4404; start_column=14; end_line=4404; end_column=29; law_headings=["Article D842-2"; "Section 1 : Secteur locatif ordinaire"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -5195,8 +5195,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2050; start_column=5; - end_line=2050; end_column=50; + start_line=2051; start_column=5; + end_line=2051; end_column=50; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5209,8 +5209,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme (fun (_: _) -> param_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2038; start_column=14; - end_line=2038; end_column=36; + start_line=2039; start_column=14; + end_line=2039; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5411,8 +5411,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2060; start_column=14; - end_line=2060; end_column=36; + start_line=2061; start_column=14; + end_line=2061; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5574,8 +5574,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2075; start_column=14; - end_line=2075; end_column=36; + start_line=2076; start_column=14; + end_line=2076; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5783,7 +5783,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2158; start_column=14; end_line=2158; end_column=42; + start_line=2159; start_column=14; end_line=2159; end_column=42; law_headings=["Article D823-17"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5818,8 +5818,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2107; start_column=14; - end_line=2107; end_column=36; + start_line=2108; start_column=14; + end_line=2108; end_column=36; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5876,7 +5876,7 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2124; start_column=14; end_line=2124; end_column=39; + start_line=2125; start_column=14; end_line=2125; end_column=39; law_headings=["Article D823-17"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5952,8 +5952,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme with EmptyError -> (raise (NoValueProvided {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2053; start_column=13; - end_line=2053; end_column=76; + start_line=2054; start_column=13; + end_line=2054; end_column=76; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -5964,8 +5964,8 @@ let calcul_aide_personnalisee_logement_locatif (calcul_aide_personnalisee_logeme "Code de la construction et de l'habitation"]}))) then () else raise (AssertionFailed {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2053; start_column=13; - end_line=2053; end_column=76; + start_line=2054; start_column=13; + end_line=2054; end_column=76; law_headings=["Article D823-16"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -6125,8 +6125,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4042; start_column=14; - end_line=4042; end_column=35; + start_line=4043; start_column=14; + end_line=4043; end_column=35; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6430,8 +6430,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3975; start_column=14; - end_line=3975; end_column=36; + start_line=3976; start_column=14; + end_line=3976; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6476,7 +6476,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4131; start_column=14; end_line=4131; end_column=55; + start_line=4132; start_column=14; end_line=4132; end_column=55; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6507,7 +6507,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4127; start_column=14; end_line=4127; end_column=59; + start_line=4128; start_column=14; end_line=4128; end_column=59; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6539,7 +6539,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4129; start_column=14; end_line=4129; end_column=64; + start_line=4130; start_column=14; end_line=4130; end_column=64; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6640,7 +6640,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3949; start_column=14; end_line=3949; end_column=40; + start_line=3950; start_column=14; end_line=3950; end_column=40; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6684,8 +6684,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4133; start_column=14; - end_line=4133; end_column=36; + start_line=4134; start_column=14; + end_line=4134; end_column=36; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6719,8 +6719,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4329; start_column=14; - end_line=4329; end_column=44; + start_line=4330; start_column=14; + end_line=4330; end_column=44; law_headings=["Article D832-27"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6760,7 +6760,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3965; start_column=14; end_line=3965; end_column=75; + start_line=3966; start_column=14; end_line=3966; end_column=75; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6792,7 +6792,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3963; start_column=14; end_line=3963; end_column=69; + start_line=3964; start_column=14; end_line=3964; end_column=69; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6824,7 +6824,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3967; start_column=14; end_line=3967; end_column=70; + start_line=3968; start_column=14; end_line=3968; end_column=70; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6878,8 +6878,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4145; start_column=5; - end_line=4145; end_column=26; + start_line=4146; start_column=5; + end_line=4146; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6896,7 +6896,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement n_nombre_parts_d832_25_))))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4057; start_column=14; end_line=4057; end_column=49; + start_line=4058; start_column=14; end_line=4058; end_column=49; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -6942,8 +6942,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4333; start_column=14; - end_line=4333; end_column=55; + start_line=4334; start_column=14; + end_line=4334; end_column=55; law_headings=["Article D832-27"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7003,7 +7003,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3961; start_column=14; end_line=3961; end_column=40; + start_line=3962; start_column=14; end_line=3962; end_column=40; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7044,8 +7044,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4162; start_column=5; - end_line=4162; end_column=26; + start_line=4163; start_column=5; + end_line=4163; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7063,7 +7063,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement (decimal_of_string "100.")))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4078; start_column=14; end_line=4078; end_column=49; + start_line=4079; start_column=14; end_line=4079; end_column=49; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7101,8 +7101,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3989; start_column=14; - end_line=3989; end_column=36; + start_line=3990; start_column=14; + end_line=3990; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7184,8 +7184,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4168; start_column=5; - end_line=4168; end_column=26; + start_line=4169; start_column=5; + end_line=4169; end_column=26; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7203,7 +7203,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement coefficient_prise_en_charge_d832_25_arrondi_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4081; start_column=14; end_line=4081; end_column=49; + start_line=4082; start_column=14; end_line=4082; end_column=49; law_headings=["Article D832-25"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7242,8 +7242,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4003; start_column=14; - end_line=4003; end_column=36; + start_line=4004; start_column=14; + end_line=4004; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7319,7 +7319,7 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3928; start_column=14; end_line=3928; end_column=33; + start_line=3929; start_column=14; end_line=3929; end_column=33; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7359,8 +7359,8 @@ let calcul_aide_personnalisee_logement_foyer (calcul_aide_personnalisee_logement "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4024; start_column=14; - end_line=4024; end_column=36; + start_line=4025; start_column=14; + end_line=4025; end_column=36; law_headings=["Article D832-24"; "Sous-Section 2 : Conditions d'octroi de l'aide personnalisée au logement aux personnes résidant dans un logement-foyer"; "Section 3 : Logements-foyers"; @@ -7660,7 +7660,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3473; start_column=14; end_line=3473; end_column=59; + start_line=3474; start_column=14; end_line=3474; end_column=59; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -7691,7 +7691,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3475; start_column=14; end_line=3475; end_column=64; + start_line=3476; start_column=14; end_line=3476; end_column=64; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -7968,8 +7968,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3322; start_column=14; - end_line=3322; end_column=36; + start_line=3323; start_column=14; + end_line=3323; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8022,8 +8022,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3787; start_column=5; - end_line=3787; end_column=28; + start_line=3788; start_column=5; + end_line=3788; end_column=28; law_headings=["Article D832-18"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -8035,7 +8035,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna (fun (_: _) -> ressources_menage_arrondies_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3779; start_column=14; end_line=3779; end_column=44; + start_line=3780; start_column=14; end_line=3780; end_column=44; law_headings=["Article D832-18"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11465,7 +11465,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3471; start_column=14; end_line=3471; end_column=36; + start_line=3472; start_column=14; end_line=3472; end_column=36; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11508,8 +11508,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3723; start_column=5; - end_line=3723; end_column=41; + start_line=3724; start_column=5; + end_line=3724; end_column=41; law_headings=["Article D832-17"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11524,8 +11524,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna montant_forfaitaire_charges_d832_10_) -$ param_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3734; start_column=14; - end_line=3734; end_column=44; + start_line=3735; start_column=14; + end_line=3735; end_column=44; law_headings=["Article D832-17"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11572,8 +11572,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3558; start_column=5; - end_line=3558; end_column=44; + start_line=3559; start_column=5; + end_line=3559; end_column=44; law_headings=["Article D832-14"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11617,7 +11617,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna plafond_entree_ else plafond_signature_)))))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3538; start_column=14; end_line=3538; end_column=42; + start_line=3539; start_column=14; end_line=3539; end_column=42; law_headings=["Article D832-14"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11661,7 +11661,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3679; start_column=14; end_line=3679; end_column=75; + start_line=3680; start_column=14; end_line=3680; end_column=75; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11692,7 +11692,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3678; start_column=14; end_line=3678; end_column=69; + start_line=3679; start_column=14; end_line=3679; end_column=69; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11723,7 +11723,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3681; start_column=14; end_line=3681; end_column=70; + start_line=3682; start_column=14; end_line=3682; end_column=70; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11767,7 +11767,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3386; start_column=14; end_line=3386; end_column=49; + start_line=3387; start_column=14; end_line=3387; end_column=49; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11804,8 +11804,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3745; start_column=14; - end_line=3745; end_column=55; + start_line=3746; start_column=14; + end_line=3746; end_column=55; law_headings=["Article D832-17"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -11945,8 +11945,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3618; start_column=5; - end_line=3630; end_column=77; + start_line=3619; start_column=5; + end_line=3631; end_column=77; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12006,8 +12006,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3673; start_column=5; - end_line=3673; end_column=75; + start_line=3674; start_column=5; + end_line=3674; end_column=75; law_headings=["Article D832-15"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12046,7 +12046,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3402; start_column=14; end_line=3402; end_column=49; + start_line=3403; start_column=14; end_line=3403; end_column=49; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12083,8 +12083,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3336; start_column=14; - end_line=3336; end_column=36; + start_line=3337; start_column=14; + end_line=3337; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12156,7 +12156,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3297; start_column=14; end_line=3297; end_column=33; + start_line=3298; start_column=14; end_line=3298; end_column=33; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12192,7 +12192,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3405; start_column=14; end_line=3405; end_column=49; + start_line=3406; start_column=14; end_line=3406; end_column=49; law_headings=["Article D832-11"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12230,8 +12230,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3350; start_column=14; - end_line=3350; end_column=36; + start_line=3351; start_column=14; + end_line=3351; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12306,7 +12306,7 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3277; start_column=14; end_line=3277; end_column=33; + start_line=3278; start_column=14; end_line=3278; end_column=33; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -12347,8 +12347,8 @@ let calcul_aide_personnalisee_logement_accession_propriete (calcul_aide_personna "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3370; start_column=14; - end_line=3370; end_column=36; + start_line=3371; start_column=14; + end_line=3371; end_column=36; law_headings=["Article D832-10"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -15126,8 +15126,8 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4473; start_column=24; - end_line=4473; end_column=46; + start_line=4474; start_column=24; + end_line=4474; end_column=46; law_headings=["Article D842-4"; "Section 1 : Secteur locatif ordinaire"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15197,8 +15197,8 @@ let calcul_allocation_logement_locatif (calcul_allocation_logement_locatif_in: C "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4465; start_column=24; - end_line=4465; end_column=43; + start_line=4466; start_column=24; + end_line=4466; end_column=43; law_headings=["Article D842-4"; "Section 1 : Secteur locatif ordinaire"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15335,7 +15335,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5029; start_column=14; end_line=5029; end_column=55; + start_line=5030; start_column=14; end_line=5030; end_column=55; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15364,7 +15364,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5025; start_column=14; end_line=5025; end_column=59; + start_line=5026; start_column=14; end_line=5026; end_column=59; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15394,7 +15394,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5027; start_column=14; end_line=5027; end_column=64; + start_line=5028; start_column=14; end_line=5028; end_column=64; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15672,7 +15672,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4992; start_column=14; end_line=4992; end_column=61; + start_line=4993; start_column=14; end_line=4993; end_column=61; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15920,8 +15920,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5041; start_column=14; - end_line=5041; end_column=36; + start_line=5042; start_column=14; + end_line=5042; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15963,7 +15963,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5022; start_column=14; end_line=5022; end_column=75; + start_line=5023; start_column=14; end_line=5023; end_column=75; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -15993,7 +15993,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5021; start_column=14; end_line=5021; end_column=69; + start_line=5022; start_column=14; end_line=5022; end_column=69; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16023,7 +16023,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5031; start_column=14; end_line=5031; end_column=70; + start_line=5032; start_column=14; end_line=5032; end_column=70; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16065,7 +16065,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4995; start_column=14; end_line=4995; end_column=41; + start_line=4996; start_column=14; end_line=4996; end_column=41; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16097,8 +16097,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5153; start_column=14; - end_line=5153; end_column=36; + start_line=5154; start_column=14; + end_line=5154; end_column=36; law_headings=["Article D842-17"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16135,7 +16135,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5033; start_column=14; end_line=5033; end_column=27; + start_line=5034; start_column=14; end_line=5034; end_column=27; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16166,8 +16166,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5162; start_column=14; - end_line=5162; end_column=47; + start_line=5163; start_column=14; + end_line=5163; end_column=47; law_headings=["Article D842-17"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16228,7 +16228,7 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4974; start_column=14; end_line=4974; end_column=33; + start_line=4975; start_column=14; end_line=4975; end_column=33; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16261,8 +16261,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5055; start_column=14; - end_line=5055; end_column=36; + start_line=5056; start_column=14; + end_line=5056; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16334,8 +16334,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5073; start_column=14; - end_line=5073; end_column=36; + start_line=5074; start_column=14; + end_line=5074; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16391,8 +16391,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5087; start_column=14; - end_line=5087; end_column=36; + start_line=5088; start_column=14; + end_line=5088; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16466,8 +16466,8 @@ let calcul_allocation_logement_foyer (calcul_allocation_logement_foyer_in: Calcu "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5108; start_column=14; - end_line=5108; end_column=36; + start_line=5109; start_column=14; + end_line=5109; end_column=36; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16715,7 +16715,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4638; start_column=14; end_line=4638; end_column=59; + start_line=4639; start_column=14; end_line=4639; end_column=59; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16745,7 +16745,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4640; start_column=14; end_line=4640; end_column=64; + start_line=4641; start_column=14; end_line=4641; end_column=64; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -16878,8 +16878,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4648; start_column=14; - end_line=4648; end_column=36; + start_line=4649; start_column=14; + end_line=4649; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20263,8 +20263,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4886; start_column=6; - end_line=4892; end_column=6; + start_line=4887; start_column=6; + end_line=4893; end_column=6; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20320,8 +20320,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4904; start_column=5; - end_line=4905; end_column=59; + start_line=4905; start_column=5; + end_line=4906; end_column=59; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20363,8 +20363,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4827; start_column=15; - end_line=4827; end_column=37; + start_line=4828; start_column=15; + end_line=4828; end_column=37; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20508,8 +20508,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4925; start_column=5; - end_line=4925; end_column=28; + start_line=4926; start_column=5; + end_line=4926; end_column=28; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20521,7 +20521,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a (fun (_: _) -> ressources_menage_arrondies_base_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4915; start_column=14; end_line=4915; end_column=41; + start_line=4916; start_column=14; end_line=4916; end_column=41; law_headings=["Article D842-12"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20567,8 +20567,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4778; start_column=5; - end_line=4778; end_column=44; + start_line=4779; start_column=5; + end_line=4779; end_column=44; law_headings=["Article D842-9"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20612,7 +20612,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a plafond_entree_ else plafond_signature_)))))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4760; start_column=14; end_line=4760; end_column=39; + start_line=4761; start_column=14; end_line=4761; end_column=39; law_headings=["Article D842-9"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20655,7 +20655,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4634; start_column=14; end_line=4634; end_column=75; + start_line=4635; start_column=14; end_line=4635; end_column=75; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20685,7 +20685,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4633; start_column=14; end_line=4633; end_column=69; + start_line=4634; start_column=14; end_line=4634; end_column=69; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20715,7 +20715,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4636; start_column=14; end_line=4636; end_column=70; + start_line=4637; start_column=14; end_line=4637; end_column=70; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20963,7 +20963,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4593; start_column=14; end_line=4593; end_column=61; + start_line=4594; start_column=14; end_line=4594; end_column=61; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -20984,7 +20984,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4600; start_column=14; end_line=4600; end_column=62; + start_line=4601; start_column=14; end_line=4601; end_column=62; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21051,8 +21051,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4861; start_column=7; - end_line=4864; end_column=45; + start_line=4862; start_column=7; + end_line=4865; end_column=45; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21096,7 +21096,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a coefficient_d842_11_))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4849; start_column=14; end_line=4849; end_column=50; + start_line=4850; start_column=14; end_line=4850; end_column=50; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21124,7 +21124,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4614; start_column=14; end_line=4614; end_column=33; + start_line=4615; start_column=14; end_line=4615; end_column=33; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21155,7 +21155,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4629; start_column=14; end_line=4629; end_column=33; + start_line=4630; start_column=14; end_line=4630; end_column=33; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21184,7 +21184,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4603; start_column=14; end_line=4603; end_column=41; + start_line=4604; start_column=14; end_line=4604; end_column=41; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21216,8 +21216,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4838; start_column=14; - end_line=4838; end_column=47; + start_line=4839; start_column=14; + end_line=4839; end_column=47; law_headings=["Article D842-11"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21272,7 +21272,7 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4574; start_column=14; end_line=4574; end_column=33; + start_line=4575; start_column=14; end_line=4575; end_column=33; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21305,8 +21305,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4662; start_column=14; - end_line=4662; end_column=36; + start_line=4663; start_column=14; + end_line=4663; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21378,8 +21378,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4676; start_column=14; - end_line=4676; end_column=36; + start_line=4677; start_column=14; + end_line=4677; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21453,8 +21453,8 @@ let calcul_allocation_logement_accession_propriete (calcul_allocation_logement_a "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4696; start_column=14; - end_line=4696; end_column=36; + start_line=4697; start_column=14; + end_line=4697; end_column=36; law_headings=["Article D842-6"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -21563,7 +21563,7 @@ let calcul_aide_personnalisee_logement (calcul_aide_personnalisee_logement_in: C "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2167; start_column=14; end_line=2167; end_column=31; + start_line=2168; start_column=14; end_line=2168; end_column=31; law_headings=["Article D823-17"; "Sous-section 2 : Calcul de l'aide en secteur locatif"; "Section 1 : Calcul, liquidation et versement des aides"; @@ -23191,7 +23191,7 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2276; start_column=14; end_line=2276; end_column=47; + start_line=2277; start_column=14; end_line=2277; end_column=47; law_headings=["Article D823-20"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23227,8 +23227,8 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2253; start_column=5; - end_line=2258; end_column=77; + start_line=2254; start_column=5; + end_line=2259; end_column=77; law_headings=["Article D823-20"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23421,8 +23421,8 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2262; start_column=6; - end_line=2272; end_column=77; + start_line=2263; start_column=6; + end_line=2273; end_column=77; law_headings=["Article D823-20"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23577,7 +23577,7 @@ let eligibilite_prime_de_demenagement (eligibilite_prime_de_demenagement_in: Eli "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=2302; start_column=14; end_line=2302; end_column=40; + start_line=2303; start_column=14; end_line=2303; end_column=40; law_headings=["Article D823-22"; "Section 2 : Prime de déménagement"; "Chapitre III : Modalités de liquidation et de versement"; @@ -23644,8 +23644,8 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3213; start_column=5; - end_line=3216; end_column=46; + start_line=3214; start_column=5; + end_line=3217; end_column=46; law_headings=["Article R832-7"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -23680,8 +23680,8 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge (fun (_: _) -> true))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3178; start_column=5; - end_line=3180; end_column=47; + start_line=3179; start_column=5; + end_line=3181; end_column=47; law_headings=["Article R832-5"; "Section 2 : Accession à la propriété"; "Chapitre II : Modalités de liquidation et de versement de l'aide personnalisée au logement"; @@ -24072,9 +24072,9 @@ let eligibilite_aide_personnalisee_logement (eligibilite_aide_personnalisee_loge (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=3885; + start_line=3886; start_column=5; - end_line=3890; end_column=30; + end_line=3891; end_column=30; law_headings= ["Article R832-21"; "Sous-Section 1 : Conditions d'assimilation des logements-foyers aux logements à usage locatif"; @@ -24364,7 +24364,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4363; start_column=14; end_line=4363; end_column=28; + start_line=4364; start_column=14; end_line=4364; end_column=28; law_headings=["Article D841-1"; "Chapitre 1 : Champ d'application"; "Titre IV : Allocations de Logement"; @@ -24519,9 +24519,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4556; + start_line=4557; start_column=5; - end_line=4561; end_column=28; + end_line=4562; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24562,9 +24562,9 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: _) -> true))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4539; + start_line=4540; start_column=5; - end_line=4544; end_column=28; + end_line=4545; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24605,8 +24605,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: _) -> true))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4522; start_column=5; - end_line=4529; end_column=28; + start_line=4523; start_column=5; + end_line=4530; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24658,8 +24658,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi (fun (_: _) -> raise EmptyError))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4492; start_column=5; - end_line=4494; end_column=28; + start_line=4493; start_column=5; + end_line=4495; end_column=28; law_headings=["Article R842-5"; "Section 2 : Accession à la propriété"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24778,8 +24778,8 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4958; start_column=9; - end_line=4958; end_column=68; + start_line=4959; start_column=9; + end_line=4959; end_column=68; law_headings=["Article R842-14"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -24810,7 +24810,7 @@ let eligibilite_allocation_logement (eligibilite_allocation_logement_in: Eligibi "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=4959; start_column=9; end_line=4959; end_column=55; + start_line=4960; start_column=9; end_line=4960; end_column=55; law_headings=["Article R842-14"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; @@ -25497,7 +25497,7 @@ let calcul_allocation_logement (calcul_allocation_logement_in: CalculAllocationL "Prologue : aides au logement"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/aides_logement/code_construction_reglementaire.catala_fr"; - start_line=5001; start_column=14; end_line=5001; end_column=31; + start_line=5002; start_column=14; end_line=5002; end_column=31; law_headings=["Article D842-15"; "Section 3 : Logements-foyers"; "Chapitre 2 : Modalités de liquidation et de versement des allocations de logement"; From 538cca3f0eb0f4d044a1150646a810376b3c0a90 Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Fri, 26 Aug 2022 12:05:11 +0200 Subject: [PATCH 17/31] Fix table --- examples/aides_logement/arrete_2019-09-27.catala_fr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/aides_logement/arrete_2019-09-27.catala_fr b/examples/aides_logement/arrete_2019-09-27.catala_fr index d11b74d9..2b196ad4 100644 --- a/examples/aides_logement/arrete_2019-09-27.catala_fr +++ b/examples/aides_logement/arrete_2019-09-27.catala_fr @@ -392,8 +392,8 @@ au 3° de l'article D. 823-17 du même code sont fixés comme suit : TL est exprimé en pourcentage et arrondi à la troisième décimale. Le tableau suivant traduit cette formule : -Si $\textrm{RL}<45\%$ Si $45\% < \textrm{RL} < 75\%$ Si $\textrm{RL} >75 \%$ -------------------- ------------------------------------------ ----------------------------------------------------------- +Si $\textrm{RL}<45\%$ Si $45\% < \textrm{RL} < 75\%$ Si $\textrm{RL} >75 \%$ +--------------------- --------------------------------------------- --------------------------------------------------------------- $\textrm{TL}=0 \%$ $\textrm{TL}=0,45 \%\times (\textrm{RL}-45\%)$ $\textrm{TL}=0,45\%\times30 \%+0,68 \%\times(\textrm{RL}-75\%)$ ```catala From 493b6703a7dac8a095dd094d6f1998701107662e Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:31:32 +0200 Subject: [PATCH 18/31] Rename marked_gexpr -> gexpr, gexpr -> naked_gexpr Since the marked kind is used throughout, this should be more clear --- compiler/dcalc/ast.ml | 4 +- compiler/dcalc/ast.mli | 4 +- compiler/dcalc/typing.ml | 10 +-- compiler/desugared/ast.ml | 2 +- compiler/desugared/ast.mli | 4 +- compiler/lcalc/ast.ml | 4 +- compiler/lcalc/ast.mli | 4 +- compiler/scopelang/ast.ml | 2 +- compiler/scopelang/ast.mli | 4 +- compiler/shared_ast/definitions.ml | 116 +++++++++++++------------- compiler/shared_ast/expr.ml | 16 ++-- compiler/shared_ast/expr.mli | 126 ++++++++++++++--------------- compiler/shared_ast/print.ml | 6 +- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/program.ml | 4 +- compiler/shared_ast/program.mli | 6 +- compiler/shared_ast/scope.mli | 6 +- compiler/shared_ast/shared_ast.mld | 12 +-- compiler/shared_ast/var.ml | 4 +- compiler/shared_ast/var.mli | 2 +- 20 files changed, 169 insertions(+), 169 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index c3678673..1a384d51 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -19,7 +19,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) gexpr -and 'm marked_expr = (dcalc, 'm mark) marked_gexpr +type 'm expr = (dcalc, 'm mark) naked_gexpr +and 'm marked_expr = (dcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index 3cdb3d12..dc817f60 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -21,7 +21,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) gexpr -and 'm marked_expr = (dcalc, 'm mark) marked_gexpr +type 'm expr = (dcalc, 'm mark) naked_gexpr +and 'm marked_expr = (dcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 83e3220c..a467ec5f 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -120,7 +120,7 @@ type mark = { pos : Pos.t; uf : unionfind_typ } (** Raises an error if unification cannot be performed *) let rec unify (ctx : A.decl_ctx) - (e : ('a, 'm A.mark) A.marked_gexpr) (* used for error context *) + (e : ('a, 'm A.mark) A.gexpr) (* used for error context *) (t1 : typ Marked.pos UnionFind.elem) (t2 : typ Marked.pos UnionFind.elem) : unit = let unify = unify ctx in @@ -307,11 +307,11 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) (env : 'm Ast.expr env) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = + (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) e; *) let pos_e = A.Expr.pos e in - let mark (e : (A.dcalc, mark) A.gexpr) uf = + let mark (e : (A.dcalc, mark) A.naked_gexpr) uf = Marked.mark { uf; pos = pos_e } e in let unionfind_make ?(pos = e) t = UnionFind.make (add_pos pos t) in @@ -471,12 +471,12 @@ and typecheck_expr_top_down (ctx : A.decl_ctx) (env : 'm Ast.expr env) (tau : typ Marked.pos UnionFind.elem) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = + (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in - let unify_and_mark (e' : (A.dcalc, mark) A.gexpr) tau' = + let unify_and_mark (e' : (A.dcalc, mark) A.naked_gexpr) tau' = (* This try...with was added because of [tests/test_bool/bad/bad_assert.catala_en] but we shouldn't need it. TODO: debug why it is needed here. *) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 5041d491..91ae6b13 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -94,7 +94,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (desugared, Pos.t) gexpr +type expr = (desugared, Pos.t) naked_gexpr type marked_expr = expr Marked.pos module ExprMap = Map.Make (struct diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index eb09cbcf..d568795b 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -49,8 +49,8 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {2 Expressions} *) -type expr = (desugared, Pos.t) gexpr -(** See {!type:Shared_ast.gexpr} for the complete definition *) +type expr = (desugared, Pos.t) naked_gexpr +(** See {!type:Shared_ast.naked_gexpr} for the complete definition *) and marked_expr = expr Marked.pos diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index e5cf3d12..3e3a5504 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -19,8 +19,8 @@ include Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) gexpr -and 'm marked_expr = (lcalc, 'm mark) marked_gexpr +type 'm expr = (lcalc, 'm mark) naked_gexpr +and 'm marked_expr = (lcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 6d14be0e..40276854 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -23,8 +23,8 @@ open Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) gexpr -and 'm marked_expr = (lcalc, 'm mark) marked_gexpr +type 'm expr = (lcalc, 'm mark) naked_gexpr +and 'm marked_expr = (lcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 1a4683d7..96d5c755 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,7 +36,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (scopelang, Pos.t) gexpr +type expr = (scopelang, Pos.t) naked_gexpr type marked_expr = expr Marked.pos module ExprMap = Map.Make (struct diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 19b67b9f..c79bd0f8 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -41,8 +41,8 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type expr = (scopelang, Pos.t) gexpr -type marked_expr = (scopelang, Pos.t) marked_gexpr +type expr = (scopelang, Pos.t) naked_gexpr +type marked_expr = (scopelang, Pos.t) gexpr module ExprMap : Map.S with type key = marked_expr diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index 1ef1acaf..099cbe39 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -174,90 +174,90 @@ type 'a glocation = ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos -> [< desugared | scopelang ] glocation -type ('a, 't) marked_gexpr = (('a, 't) gexpr, 't) Marked.t +type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type expr = dcalc gexpr] plus the annotations. + are then defined with [type expr = dcalc naked_gexpr] plus the annotations. A few tips on using this GADT: - To write a function that handles cases from different ASTs, explicit the - type variables: [fun (type a) (x: a gexpr) -> ...] + type variables: [fun (type a) (x: a naked_gexpr) -> ...] - For recursive functions, you may need to additionally explicit the - generalisation of the variable: [let rec f: type a . a gexpr -> ...] *) + generalisation of the variable: [let rec f: type a . a naked_gexpr -> ...] *) (** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} library, based on higher-order abstract syntax *) -and ('a, 't) gexpr = +and ('a, 't) naked_gexpr = (* Constructors common to all ASTs *) - | ELit : 'a glit -> ('a any, 't) gexpr + | ELit : 'a glit -> ('a any, 't) naked_gexpr | EApp : - ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list - -> ('a any, 't) gexpr - | EOp : operator -> ('a any, 't) gexpr - | EArray : ('a, 't) marked_gexpr list -> ('a any, 't) gexpr + ('a, 't) gexpr * ('a, 't) gexpr list + -> ('a any, 't) naked_gexpr + | EOp : operator -> ('a any, 't) naked_gexpr + | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr (* All but statement calculus *) | EVar : - ('a, 't) gexpr Bindlib.var - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) naked_gexpr Bindlib.var + -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EAbs : - (('a, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder * marked_typ list - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr + (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * marked_typ list + -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EIfThenElse : - ('a, 't) marked_gexpr * ('a, 't) marked_gexpr * ('a, 't) marked_gexpr - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr + -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr (* Early stages *) - | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) gexpr + | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EStruct : - StructName.t * ('a, 't) marked_gexpr StructFieldMap.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + StructName.t * ('a, 't) gexpr StructFieldMap.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EStructAccess : - ('a, 't) marked_gexpr * StructFieldName.t * StructName.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + ('a, 't) gexpr * StructFieldName.t * StructName.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EEnumInj : - ('a, 't) marked_gexpr * EnumConstructor.t * EnumName.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + ('a, 't) gexpr * EnumConstructor.t * EnumName.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EMatchS : - ('a, 't) marked_gexpr + ('a, 't) gexpr * EnumName.t - * ('a, 't) marked_gexpr EnumConstructorMap.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + * ('a, 't) gexpr EnumConstructorMap.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr (* Lambda-like *) | ETuple : - ('a, 't) marked_gexpr list * StructName.t option - -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr list * StructName.t option + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | ETupleAccess : - ('a, 't) marked_gexpr * int * StructName.t option * marked_typ list - -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * int * StructName.t option * marked_typ list + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EInj : - ('a, 't) marked_gexpr * int * EnumName.t * marked_typ list - -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * int * EnumName.t * marked_typ list + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EMatch : - ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list * EnumName.t - -> (([< dcalc | lcalc ] as 'a), 't) gexpr - | EAssert : ('a, 't) marked_gexpr -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * ('a, 't) gexpr list * EnumName.t + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr + | EAssert : ('a, 't) gexpr -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr (* Default terms *) | EDefault : - ('a, 't) marked_gexpr list * ('a, 't) marked_gexpr * ('a, 't) marked_gexpr - -> (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr + ('a, 't) gexpr list * ('a, 't) gexpr * ('a, 't) gexpr + -> (([< desugared | scopelang | dcalc ] as 'a), 't) naked_gexpr | ErrorOnEmpty : - ('a, 't) marked_gexpr - -> (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr + ('a, 't) gexpr + -> (([< desugared | scopelang | dcalc ] as 'a), 't) naked_gexpr (* Lambda calculus with exceptions *) - | ERaise : except -> ((lcalc as 'a), 't) gexpr + | ERaise : except -> ((lcalc as 'a), 't) naked_gexpr | ECatch : - ('a, 't) marked_gexpr * except * ('a, 't) marked_gexpr - -> ((lcalc as 'a), 't) gexpr + ('a, 't) gexpr * except * ('a, 't) gexpr + -> ((lcalc as 'a), 't) naked_gexpr (* (\* Statement calculus *\) - * | ESVar: LocalName.t -> (scalc as 'a, 't) gexpr - * | ESStruct: ('a, 't) marked_gexpr list * StructName.t -> (scalc as 'a, 't) gexpr - * | ESStructFieldAccess: ('a, 't) marked_gexpr * StructFieldName.t * StructName.t -> (scalc as 'a, 't) gexpr - * | ESInj: ('a, 't) marked_gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) gexpr - * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) gexpr *) + * | ESVar: LocalName.t -> (scalc as 'a, 't) naked_gexpr + * | ESStruct: ('a, 't) gexpr list * StructName.t -> (scalc as 'a, 't) naked_gexpr + * | ESStructFieldAccess: ('a, 't) gexpr * StructFieldName.t * StructName.t -> (scalc as 'a, 't) naked_gexpr + * | ESInj: ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) naked_gexpr + * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) naked_gexpr *) -type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr +type 'e anyexpr = 'e constraint 'e = (_ any, _) naked_gexpr (** Shorter alias for functions taking any kind of expression *) (** {2 Markings} *) @@ -267,25 +267,25 @@ type typed = { pos : Pos.t; ty : marked_typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when - appropriate. Expected to fill the ['t] parameter of [gexpr] and - [marked_gexpr] (a ['t] annotation different from this type is used in the + appropriate. Expected to fill the ['t] parameter of [naked_gexpr] and + [gexpr] (a ['t] annotation different from this type is used in the middle of the typing processing, but all visible ASTs should otherwise use this. *) type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark -type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) gexpr -(** [('a, 't) gexpr marked] is equivalent to [('a, 'm mark) marked_gexpr] but +type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) naked_gexpr +(** [('a, 't) naked_gexpr marked] is equivalent to [('a, 'm mark) gexpr] but often more convenient to write since we generally use the type of - expressions ['e = (_, _ mark) gexpr] as type parameter. *) + expressions ['e = (_, _ mark) naked_gexpr] as type parameter. *) (** Useful for errors and printing, for example *) type any_marked_expr = - | AnyExpr : (_ any, _ mark) marked_gexpr -> any_marked_expr + | AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr (** {2 Higher-level program structure} *) (** Constructs scopes and programs on top of expressions. The ['e] type - parameter throughout is expected to match instances of the [gexpr] type + parameter throughout is expected to match instances of the [naked_gexpr] type defined above. Markings are constrained to the [mark] GADT defined above. Note that this structure is at the moment only relevant for [dcalc] and [lcalc], as [scopelang] has its own scope structure, as the name implies. *) @@ -310,7 +310,7 @@ type 'e scope_let = { scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; scope_let_pos : Pos.t; } - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = ('a, 'm mark) naked_gexpr (** This type is parametrized by the expression type so it can be reused in later intermediate representations. *) @@ -320,7 +320,7 @@ type 'e scope_let = { and 'e scope_body_expr = | Result of 'e marked | ScopeLet of 'e scope_let - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = ('a, 'm mark) naked_gexpr type 'e scope_body = { scope_body_input_struct : StructName.t; @@ -343,7 +343,7 @@ type 'e scope_def = { and 'e scopes = | Nil | ScopeDef of 'e scope_def - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = ('a, 'm mark) naked_gexpr type struct_ctx = (StructFieldName.t * marked_typ) list StructMap.t type enum_ctx = (EnumConstructor.t * marked_typ) list EnumMap.t diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 19034aa5..1888ece9 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -147,8 +147,8 @@ let fold_marks let map (type a) (ctx : 'ctx) - ~(f : 'ctx -> (a, 'm1) marked_gexpr -> (a, 'm2) marked_gexpr Bindlib.box) - (e : ((a, 'm1) gexpr, 'm2) Marked.t) : (a, 'm2) marked_gexpr Bindlib.box = + ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) gexpr Bindlib.box) + (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) gexpr Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with | ELit l -> elit l m @@ -281,7 +281,7 @@ let make_default exceptions just cons mark = (* Tests *) -let is_value (type a) (e : (a, 'm mark) gexpr marked) = +let is_value (type a) (e : (a, 'm mark) naked_gexpr marked) = match Marked.unmark e with | ELit _ | EAbs _ | EOp _ | ERaise _ -> true | _ -> false @@ -531,11 +531,11 @@ let compare_except ex1 ex2 = Stdlib.compare ex1 ex2 (* weird indentation; see https://github.com/ocaml-ppx/ocamlformat/issues/2143 *) let rec equal_list : - 'a. ('a, 't) marked_gexpr list -> ('a, 't) marked_gexpr list -> bool = + 'a. ('a, 't) gexpr list -> ('a, 't) gexpr list -> bool = fun es1 es2 -> try List.for_all2 equal es1 es2 with Invalid_argument _ -> false -and equal : type a. (a, 't) marked_gexpr -> (a, 't) marked_gexpr -> bool = +and equal : type a. (a, 't) gexpr -> (a, 't) gexpr -> bool = fun e1 e2 -> match Marked.unmark e1, Marked.unmark e2 with | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 @@ -584,7 +584,7 @@ and equal : type a. (a, 't) marked_gexpr -> (a, 't) marked_gexpr -> bool = _ ) -> false -let rec compare : type a. (a, _) marked_gexpr -> (a, _) marked_gexpr -> int = +let rec compare : type a. (a, _) gexpr -> (a, _) gexpr -> int = fun e1 e2 -> (* Infix operator to chain comparisons lexicographically. *) let ( @@< ) cmp1 cmpf = match cmp1 with 0 -> cmpf () | n -> n in @@ -681,7 +681,7 @@ let rec compare : type a. (a, _) marked_gexpr -> (a, _) marked_gexpr -> int = | ERaise _, _ -> -1 | _, ERaise _ -> 1 | ECatch _, _ -> . | _, ECatch _ -> . -let rec free_vars : type a. (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = +let rec free_vars : type a. (a, 't) naked_gexpr marked -> (a, 't) naked_gexpr Var.Set.t = fun e -> match Marked.unmark e with | EOp _ | ELit _ | ERaise _ -> Var.Set.empty @@ -731,7 +731,7 @@ let remove_logging_calls e = let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e -let rec size : type a. (a, 't) gexpr marked -> int = +let rec size : type a. (a, 't) naked_gexpr marked -> int = fun e -> match Marked.unmark e with | EVar _ | ELit _ | EOp _ -> 1 diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index af6b2c1a..f0348ac9 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -22,97 +22,97 @@ open Definitions (** {2 Boxed constructors} *) -val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box -val evar : ('a, 't) gexpr Bindlib.var -> 't -> ('a, 't) marked_gexpr Bindlib.box +val box : ('a, 't) gexpr -> ('a, 't) gexpr Bindlib.box +val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr Bindlib.box val etuple : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box list -> StructName.t option -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val etupleaccess : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> int -> StructName.t option -> marked_typ list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val einj : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> int -> EnumName.t -> marked_typ list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val ematch : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box list -> EnumName.t -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val earray : - ('a any, 't) marked_gexpr Bindlib.box list -> + ('a any, 't) gexpr Bindlib.box list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box -val elit : 'a any glit -> 't -> ('a, 't) marked_gexpr Bindlib.box +val elit : 'a any glit -> 't -> ('a, 't) gexpr Bindlib.box val eabs : - (('a any, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder Bindlib.box -> + (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder Bindlib.box -> marked_typ list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eapp : - ('a any, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box list -> + ('a any, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eassert : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box -val eop : operator -> 't -> (_ any, 't) marked_gexpr Bindlib.box +val eop : operator -> 't -> (_ any, 't) gexpr Bindlib.box val edefault : - (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> - ('a, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box list -> + ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eifthenelse : - ('a any, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> + ('a any, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eerroronempty : - (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val ecatch : - (lcalc, 't) marked_gexpr Bindlib.box -> + (lcalc, 't) gexpr Bindlib.box -> except -> - (lcalc, 't) marked_gexpr Bindlib.box -> + (lcalc, 't) gexpr Bindlib.box -> 't -> - (lcalc, 't) marked_gexpr Bindlib.box + (lcalc, 't) gexpr Bindlib.box -val eraise : except -> 't -> (lcalc, 't) marked_gexpr Bindlib.box +val eraise : except -> 't -> (lcalc, 't) gexpr Bindlib.box (** Manipulation of marks *) val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t -val pos : ('e, _) gexpr marked -> Pos.t +val pos : ('e, _) naked_gexpr marked -> Pos.t val ty : (_, typed mark) Marked.t -> marked_typ val with_ty : marked_typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t @@ -130,15 +130,15 @@ val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark val untype : - ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box + ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr Bindlib.box (** {2 Traversal functions} *) val map : 'ctx -> - f:('ctx -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box) -> - (('a, 't1) gexpr, 't2) Marked.t -> - ('a, 't2) marked_gexpr Bindlib.box + f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box) -> + (('a, 't1) naked_gexpr, 't2) Marked.t -> + ('a, 't2) gexpr Bindlib.box (** Flat (non-recursive) mapping on expressions. If you want to apply a map transform to an expression, you can save up @@ -159,35 +159,35 @@ val map : around during your map traversal. *) val map_top_down : - f:(('a, 't1) marked_gexpr -> (('a, 't1) gexpr, 't2) Marked.t) -> - ('a, 't1) marked_gexpr -> - ('a, 't2) marked_gexpr Bindlib.box + f:(('a, 't1) gexpr -> (('a, 't1) naked_gexpr, 't2) Marked.t) -> + ('a, 't1) gexpr -> + ('a, 't2) gexpr Bindlib.box (** Recursively applies [f] to the nodes of the expression tree. The type returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) val map_marks : - f:('t1 -> 't2) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box + f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box (** {2 Expression building helpers} *) val make_var : 'a Bindlib.var * 'b -> ('a * 'b) Bindlib.box val make_abs : - ('a, 't) gexpr Var.vars -> - ('a, 't) marked_gexpr Bindlib.box -> + ('a, 't) naked_gexpr Var.vars -> + ('a, 't) gexpr Bindlib.box -> typ Marked.pos list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val make_app : - ((_ any, 'm mark) gexpr as 'e) marked Bindlib.box -> + ((_ any, 'm mark) naked_gexpr as 'e) marked Bindlib.box -> 'e marked Bindlib.box list -> 'm mark -> 'e marked Bindlib.box val empty_thunked_term : - 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) gexpr marked + 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) naked_gexpr marked val make_let_in : 'e Bindlib.var -> @@ -198,12 +198,12 @@ val make_let_in : 'e marked Bindlib.box val make_let_in_raw : - ('a any, 't) gexpr Bindlib.var -> + ('a any, 't) naked_gexpr Bindlib.var -> marked_typ -> - ('a, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box (** Version with any mark; to be removed once we use the [mark] type everywhere. *) val make_multiple_let_in : @@ -215,11 +215,11 @@ val make_multiple_let_in : 'e marked Bindlib.box val make_default : - (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr list -> - ('a, 't) marked_gexpr -> - ('a, 't) marked_gexpr -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr list -> + ('a, 't) gexpr -> + ('a, 't) gexpr -> 't -> - ('a, 't) marked_gexpr + ('a, 't) gexpr (** [make_default ?pos exceptions just cons] builds a term semantically equivalent to [] (the [EDefault] constructor) while avoiding redundant nested constructions. The position is extracted @@ -236,7 +236,7 @@ val make_default : (** {2 Transformations} *) val remove_logging_calls : - ((_ any, 't) gexpr as 'e) marked -> 'e marked Bindlib.box + ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked Bindlib.box (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) @@ -254,16 +254,16 @@ val compare_lit : 'a glit -> 'a glit -> int val equal_location : 'a glocation Marked.pos -> 'a glocation Marked.pos -> bool val compare_location : 'a glocation Marked.pos -> 'a glocation Marked.pos -> int -val equal : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> bool +val equal : ('a, 't) gexpr -> ('a, 't) gexpr -> bool (** Determines if two expressions are equal, omitting their position information *) -val compare : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> int +val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int (** Standard comparison function, suitable for e.g. [Set.Make]. Ignores position information *) val compare_typ : marked_typ -> marked_typ -> int -val is_value : (_ any, 'm mark) gexpr marked -> bool +val is_value : (_ any, 'm mark) naked_gexpr marked -> bool val free_vars : 'e marked -> 'e Var.Set.t -val size : (_ any, 't) gexpr marked -> int +val size : (_ any, 't) naked_gexpr marked -> int (** Used by the optimizer to know when to stop *) diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 1287b6e8..18955fd5 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -208,7 +208,7 @@ let except (fmt : Format.formatter) (exn : except) : unit = let var fmt v = Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) -let needs_parens (type a) (e : (a, _) marked_gexpr) : bool = +let needs_parens (type a) (e : (a, _) gexpr) : bool = match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false let rec expr : @@ -216,10 +216,10 @@ let rec expr : ?debug:bool -> decl_ctx -> Format.formatter -> - ('a, 't) marked_gexpr -> + ('a, 't) gexpr -> unit = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) - (e : (a, 't) marked_gexpr) -> + (e : (a, 't) gexpr) -> let expr e = expr ~debug ctx e in let with_parens fmt e = if needs_parens e then ( diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index ff686081..681e3c1f 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -47,5 +47,5 @@ val expr : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - ('a, 't) marked_gexpr -> + ('a, 't) gexpr -> unit diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index 49e470fc..87584316 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -22,9 +22,9 @@ let map_exprs ~f ~varf { scopes; decl_ctx } = (fun scopes -> { scopes; decl_ctx }) (Scope.map_exprs ~f ~varf scopes) -let untype : 'm. ('a, 'm mark) gexpr program -> ('a, untyped mark) gexpr program +let untype : 'm. ('a, 'm mark) naked_gexpr program -> ('a, untyped mark) naked_gexpr program = - fun (prg : ('a, 'm mark) gexpr program) -> + fun (prg : ('a, 'm mark) naked_gexpr program) -> Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) let rec find_scope name vars = function diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index 08acd682..c9ece890 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -26,11 +26,11 @@ val map_exprs : 'expr2 program Bindlib.box val untype : - (([< dcalc | lcalc ] as 'a), 'm mark) gexpr program -> - ('a, untyped mark) gexpr program + (([< dcalc | lcalc ] as 'a), 'm mark) naked_gexpr program -> + ('a, untyped mark) naked_gexpr program val to_expr : - (([< dcalc | lcalc ], _) gexpr as 'e) program -> + (([< dcalc | lcalc ], _) naked_gexpr as 'e) program -> ScopeName.t -> 'e marked Bindlib.box (** Usage: [build_whole_program_expr program main_scope] builds an expression diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 1d53a22f..b99150ff 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -80,7 +80,7 @@ val map_exprs : (** This is the main map visitor for all the expressions inside all the scopes of the program. *) -val get_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark +val get_body_mark : (_, 'm mark) naked_gexpr scope_body -> 'm mark (** {2 Conversions} *) @@ -93,7 +93,7 @@ val format : val to_expr : decl_ctx -> - ((_ any, 'm mark) gexpr as 'e) scope_body -> + ((_ any, 'm mark) naked_gexpr as 'e) scope_body -> 'm mark -> 'e marked Bindlib.box (** Usage: [to_expr ctx body scope_position] where [scope_position] corresponds @@ -105,7 +105,7 @@ type 'e scope_name_or_var = val unfold : decl_ctx -> - ((_ any, 'm mark) gexpr as 'e) scopes -> + ((_ any, 'm mark) naked_gexpr as 'e) scopes -> 'm mark -> 'e scope_name_or_var -> 'e marked Bindlib.box diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld index f5acfd58..2b50d756 100644 --- a/compiler/shared_ast/shared_ast.mld +++ b/compiler/shared_ast/shared_ast.mld @@ -8,19 +8,19 @@ helpers that are reused in various passes of the compiler. The main module {!modules: Shared_ast.Definitions} is exposed at top-level of the library (so that [open Shared_ast] gives access to the structures). It defines literals, operators, and in particular the type {!types: -Shared_ast.gexpr}. +Shared_ast.naked_gexpr}. -The {!types: Shared_ast.gexpr} type regroups all the cases for the {{: +The {!types: Shared_ast.naked_gexpr} type regroups all the cases for the {{: ../dcalc.html} Dcalc} and {{: ../lcalc.html} Lcalc} ASTs, with unconstrained annotations (used for positions, types, etc.). A GADT is used to eliminate -irrelevant cases, so that e.g. [(dcalc, _) gexpr] doesn't have the [ERaise] and -[ECatch] cases, while [(lcalc, _) gexpr] doesn't have [EDefault]. +irrelevant cases, so that e.g. [(dcalc, _) naked_gexpr] doesn't have the [ERaise] and +[ECatch] cases, while [(lcalc, _) naked_gexpr] doesn't have [EDefault]. For example, Lcalc expressions are then defined as -[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.gexpr]. +[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. This makes it possible to write a single function that works on the different -ASTs, by having it take a [('a, _) gexpr] as input, while retaining a much +ASTs, by having it take a [('a, _) naked_gexpr] as input, while retaining a much stricter policy than polymorphic variants. The module additionally defines the encompassing [scope] and [program] diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index 95bdd989..a5cc424b 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -18,7 +18,7 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [gexpr] +(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] type *) type 'e t = 'e anyexpr Bindlib.var @@ -36,7 +36,7 @@ type 'e var = 'e t (* The purpose of this module is just to lift a type parameter outside of [Set.S] and [Map.S], so that we can have ['e Var.Set.t] for sets of variables - bound to the ['e = ('a, 't) gexpr] expression type. This is made possible by + bound to the ['e = ('a, 't) naked_gexpr] expression type. This is made possible by the fact that [Bindlib.compare_vars] is polymorphic in that parameter; we first hide that parameter inside an existential, then re-add a phantom type outside of the set to ensure consistency. Extracting the elements is then diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 2daca3cc..29e0332c 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -18,7 +18,7 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [gexpr] +(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] type *) type 'e t = 'e anyexpr Bindlib.var From 0a23dc526dbc1d38d6a48630e2063bd611e0c8c7 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:35:08 +0200 Subject: [PATCH 19/31] Rename marked_expr -> expr, expr -> naked_expr throughout Since the marked kind is used throughout, this should be more clear --- compiler/dcalc/ast.ml | 6 +- compiler/dcalc/ast.mli | 6 +- compiler/dcalc/interpreter.ml | 22 +++---- compiler/dcalc/interpreter.mli | 6 +- compiler/dcalc/optimizations.ml | 20 +++---- compiler/dcalc/optimizations.mli | 2 +- compiler/dcalc/typing.ml | 18 +++--- compiler/dcalc/typing.mli | 6 +- compiler/desugared/ast.ml | 16 ++--- compiler/desugared/ast.mli | 16 ++--- compiler/desugared/desugared_to_scope.ml | 26 ++++---- compiler/lcalc/ast.ml | 6 +- compiler/lcalc/ast.mli | 32 +++++----- compiler/lcalc/closure_conversion.ml | 6 +- compiler/lcalc/compile_with_exceptions.ml | 26 ++++---- compiler/lcalc/compile_without_exceptions.ml | 62 ++++++++++---------- compiler/lcalc/optimizations.ml | 12 ++-- compiler/lcalc/to_ocaml.ml | 10 ++-- compiler/lcalc/to_ocaml.mli | 2 +- compiler/plugins/api_web.ml | 4 +- compiler/plugins/json_schema.ml | 2 +- compiler/scalc/ast.ml | 22 +++---- compiler/scalc/compile_from_lambda.ml | 44 +++++++------- compiler/scalc/print.ml | 14 ++--- compiler/scalc/to_python.ml | 4 +- compiler/scopelang/ast.ml | 12 ++-- compiler/scopelang/ast.mli | 12 ++-- compiler/scopelang/print.ml | 8 +-- compiler/scopelang/scope_to_dcalc.ml | 40 ++++++------- compiler/shared_ast/definitions.ml | 2 +- compiler/shared_ast/expr.ml | 2 +- compiler/shared_ast/print.ml | 58 +++++++++--------- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/scope.ml | 2 +- compiler/shared_ast/shared_ast.mld | 2 +- compiler/surface/desugaring.ml | 34 +++++------ compiler/surface/name_resolution.ml | 4 +- compiler/surface/name_resolution.mli | 4 +- compiler/verification/conditions.ml | 24 ++++---- compiler/verification/conditions.mli | 6 +- compiler/verification/io.ml | 8 +-- compiler/verification/io.mli | 8 +-- compiler/verification/z3backend.real.ml | 26 ++++---- 43 files changed, 322 insertions(+), 322 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 1a384d51..010db5c3 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -19,7 +19,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) naked_gexpr -and 'm marked_expr = (dcalc, 'm mark) gexpr +type 'm naked_expr = (dcalc, 'm mark) naked_gexpr +and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index dc817f60..fa8c08fa 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -21,7 +21,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) naked_gexpr -and 'm marked_expr = (dcalc, 'm mark) gexpr +type 'm naked_expr = (dcalc, 'm mark) naked_gexpr +and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 913ef19f..a116e878 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -22,7 +22,7 @@ module Runtime = Runtime_ocaml.Runtime (** {1 Helpers} *) -let is_empty_error (e : 'm Ast.marked_expr) : bool = +let is_empty_error (e : 'm Ast.expr) : bool = match Marked.unmark e with ELit LEmptyError -> true | _ -> false let log_indent = ref 0 @@ -33,10 +33,10 @@ let rec evaluate_operator (ctx : decl_ctx) (op : operator) (pos : Pos.t) - (args : 'm Ast.marked_expr list) : 'm Ast.expr = + (args : 'm Ast.expr list) : 'm Ast.naked_expr = (* Try to apply [div] and if a [Division_by_zero] exceptions is catched, use [op] to raise multispanned errors. *) - let apply_div_or_raise_err (div : unit -> 'm Ast.expr) : 'm Ast.expr = + let apply_div_or_raise_err (div : unit -> 'm Ast.naked_expr) : 'm Ast.naked_expr = try div () with Division_by_zero -> Errors.raise_multispanned_error @@ -47,15 +47,15 @@ let rec evaluate_operator "division by zero at runtime" in let get_binop_args_pos = function - | (arg0 :: arg1 :: _ : 'm Ast.marked_expr list) -> + | (arg0 :: arg1 :: _ : 'm Ast.expr list) -> [None, Expr.pos arg0; None, Expr.pos arg1] | _ -> assert false in (* Try to apply [cmp] and if a [UncomparableDurations] exceptions is catched, use [args] to raise multispanned errors. *) let apply_cmp_or_raise_err - (cmp : unit -> 'm Ast.expr) - (args : 'm Ast.marked_expr list) : 'm Ast.expr = + (cmp : unit -> 'm Ast.naked_expr) + (args : 'm Ast.expr list) : 'm Ast.naked_expr = try cmp () with Runtime.UncomparableDurations -> Errors.raise_multispanned_error (get_binop_args_pos args) @@ -314,7 +314,7 @@ let rec evaluate_operator "Operator applied to the wrong arguments\n\ (should not happen if the term was well-typed)" -and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr +and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = match Marked.unmark e with | EVar _ -> @@ -483,10 +483,10 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr let interpret_program : 'm. decl_ctx -> - 'm Ast.marked_expr -> - (Uid.MarkedString.info * 'm Ast.marked_expr) list = - fun (ctx : decl_ctx) (e : 'm Ast.marked_expr) : - (Uid.MarkedString.info * 'm Ast.marked_expr) list -> + 'm Ast.expr -> + (Uid.MarkedString.info * 'm Ast.expr) list = + fun (ctx : decl_ctx) (e : 'm Ast.expr) : + (Uid.MarkedString.info * 'm Ast.expr) list -> match evaluate_expr ctx e with | EAbs (_, [((TStruct s_in, _) as targs)]), mark_e -> begin (* At this point, the interpreter seeks to execute the scope but does not diff --git a/compiler/dcalc/interpreter.mli b/compiler/dcalc/interpreter.mli index bd1125b0..f5742813 100644 --- a/compiler/dcalc/interpreter.mli +++ b/compiler/dcalc/interpreter.mli @@ -19,13 +19,13 @@ open Utils open Shared_ast -val evaluate_expr : decl_ctx -> 'm Ast.marked_expr -> 'm Ast.marked_expr +val evaluate_expr : decl_ctx -> 'm Ast.expr -> 'm Ast.expr (** Evaluates an expression according to the semantics of the default calculus. *) val interpret_program : decl_ctx -> - 'm Ast.marked_expr -> - (Uid.MarkedString.info * 'm Ast.marked_expr) list + 'm Ast.expr -> + (Uid.MarkedString.info * 'm Ast.expr) list (** Interprets a program. This function expects an expression typed as a function whose argument are all thunked. The function is executed by providing for each argument a thunked empty default. Returns a list of all diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index f097f483..50eaf2e7 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -19,12 +19,12 @@ open Shared_ast open Ast type partial_evaluation_ctx = { - var_values : (typed expr, typed marked_expr) Var.Map.t; + var_values : (typed naked_expr, typed expr) Var.Map.t; decl_ctx : decl_ctx; } -let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : - 'm marked_expr Bindlib.box = +let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm expr) : + 'm expr Bindlib.box = let pos = Marked.get_mark e in let rec_helper = partial_evaluation ctx in match Marked.unmark e with @@ -184,14 +184,14 @@ let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : | ErrorOnEmpty e1 -> Bindlib.box_apply (fun e1 -> ErrorOnEmpty e1, pos) (rec_helper e1) -let optimize_expr (decl_ctx : decl_ctx) (e : 'm marked_expr) = +let optimize_expr (decl_ctx : decl_ctx) (e : 'm expr) = partial_evaluation { var_values = Var.Map.empty; decl_ctx } e let rec scope_lets_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scope_body_expr : 'm expr scope_body_expr) : - 'm expr scope_body_expr Bindlib.box = + (scope_body_expr : 'm naked_expr scope_body_expr) : + 'm naked_expr scope_body_expr Bindlib.box = match scope_body_expr with | Result e -> Bindlib.box_apply (fun e' -> Result e') (t ctx e) | ScopeLet scope_let -> @@ -210,9 +210,9 @@ let rec scope_lets_map new_scope_let_expr new_next let rec scopes_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scopes : 'm expr scopes) : 'm expr scopes Bindlib.box = + (scopes : 'm naked_expr scopes) : 'm naked_expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -241,7 +241,7 @@ let rec scopes_map new_scope_body_expr new_scope_next let program_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) (p : 'm program) : 'm program Bindlib.box = Bindlib.box_apply diff --git a/compiler/dcalc/optimizations.mli b/compiler/dcalc/optimizations.mli index e70ec2c2..6c8cdd0e 100644 --- a/compiler/dcalc/optimizations.mli +++ b/compiler/dcalc/optimizations.mli @@ -20,5 +20,5 @@ open Shared_ast open Ast -val optimize_expr : decl_ctx -> 'm marked_expr -> 'm marked_expr Bindlib.box +val optimize_expr : decl_ctx -> 'm expr -> 'm expr Bindlib.box val optimize_program : 'm program -> untyped program diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index a467ec5f..59797316 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -306,8 +306,8 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) (** Infers the most permissive type from an expression *) let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) - (env : 'm Ast.expr env) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = + (env : 'm Ast.naked_expr env) + (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) e; *) let pos_e = A.Expr.pos e in @@ -469,10 +469,10 @@ let rec typecheck_expr_bottom_up (** Checks whether the expression can be typed with the provided type *) and typecheck_expr_top_down (ctx : A.decl_ctx) - (env : 'm Ast.expr env) + (env : 'm Ast.naked_expr env) (tau : typ Marked.pos UnionFind.elem) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = - (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau + (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = + (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in @@ -655,13 +655,13 @@ let wrap ctx f e = let get_ty_mark { uf; pos } = A.Typed { ty = typ_to_ast uf; pos } (* Infer the type of an expression *) -let infer_types (ctx : A.decl_ctx) (e : 'm Ast.marked_expr) : - A.typed Ast.marked_expr Bindlib.box = +let infer_types (ctx : A.decl_ctx) (e : 'm Ast.expr) : + A.typed Ast.expr Bindlib.box = A.Expr.map_marks ~f:get_ty_mark @@ Bindlib.unbox @@ wrap ctx (typecheck_expr_bottom_up ctx A.Var.Map.empty) e -let infer_type (type m) ctx (e : m Ast.marked_expr) = +let infer_type (type m) ctx (e : m Ast.expr) = match Marked.get_mark e with | A.Typed { ty; _ } -> ty | A.Untyped _ -> A.Expr.ty (Bindlib.unbox (infer_types ctx e)) @@ -669,7 +669,7 @@ let infer_type (type m) ctx (e : m Ast.marked_expr) = (** Typechecks an expression given an expected type *) let check_type (ctx : A.decl_ctx) - (e : 'm Ast.marked_expr) + (e : 'm Ast.expr) (tau : A.typ Marked.pos) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 691745f5..8602c3c4 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -20,13 +20,13 @@ open Shared_ast val infer_types : - decl_ctx -> untyped Ast.marked_expr -> typed Ast.marked_expr Bindlib.box + decl_ctx -> untyped Ast.expr -> typed Ast.expr Bindlib.box (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) -val infer_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos +val infer_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos (** Gets the outer type of the given expression, using either the existing annotations or inference *) -val check_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos -> unit +val check_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos -> unit val infer_types_program : untyped Ast.program -> typed Ast.program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 91ae6b13..f3b001d0 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -94,11 +94,11 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (desugared, Pos.t) naked_gexpr -type marked_expr = expr Marked.pos +type naked_expr = (desugared, Pos.t) naked_gexpr +type expr = naked_expr Marked.pos module ExprMap = Map.Make (struct - type t = marked_expr + type t = expr let compare = Expr.compare end) @@ -112,9 +112,9 @@ type label_situation = ExplicitlyLabeled of LabelName.t Marked.pos | Unlabeled type rule = { rule_id : RuleName.t; - rule_just : marked_expr Bindlib.box; - rule_cons : marked_expr Bindlib.box; - rule_parameter : (expr Var.t * marked_typ) option; + rule_just : expr Bindlib.box; + rule_cons : expr Bindlib.box; + rule_parameter : (naked_expr Var.t * marked_typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -181,7 +181,7 @@ let always_false_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule rule_label = Unlabeled; } -type assertion = marked_expr Bindlib.box +type assertion = expr Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -212,7 +212,7 @@ type program = { program_ctx : decl_ctx; } -let rec locations_used (e : marked_expr) : LocationSet.t = +let rec locations_used (e : expr) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index d568795b..bfe030e6 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -49,15 +49,15 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {2 Expressions} *) -type expr = (desugared, Pos.t) naked_gexpr +type naked_expr = (desugared, Pos.t) naked_gexpr (** See {!type:Shared_ast.naked_gexpr} for the complete definition *) -and marked_expr = expr Marked.pos +and expr = naked_expr Marked.pos type location = desugared glocation module LocationSet : Set.S with type elt = location Marked.pos -module ExprMap : Map.S with type key = marked_expr +module ExprMap : Map.S with type key = expr (** {2 Rules and scopes}*) @@ -70,9 +70,9 @@ type label_situation = ExplicitlyLabeled of LabelName.t Marked.pos | Unlabeled type rule = { rule_id : RuleName.t; - rule_just : marked_expr Bindlib.box; - rule_cons : marked_expr Bindlib.box; - rule_parameter : (expr Var.t * marked_typ) option; + rule_just : expr Bindlib.box; + rule_cons : expr Bindlib.box; + rule_parameter : (naked_expr Var.t * marked_typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -82,7 +82,7 @@ module Rule : Set.OrderedType with type t = rule val empty_rule : Pos.t -> typ Marked.pos option -> rule val always_false_rule : Pos.t -> typ Marked.pos option -> rule -type assertion = expr Marked.pos Bindlib.box +type assertion = naked_expr Marked.pos Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -115,5 +115,5 @@ type program = { (** {1 Helpers} *) -val locations_used : expr Marked.pos -> LocationSet.t +val locations_used : naked_expr Marked.pos -> LocationSet.t val free_variables : rule RuleMap.t -> Pos.t ScopeDefMap.t diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 3ef25eeb..2e723a1e 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -27,19 +27,19 @@ type target_scope_vars = type ctx = { scope_var_mapping : target_scope_vars ScopeVarMap.t; - var_mapping : (Ast.expr, Scopelang.Ast.expr Var.t) Var.Map.t; + var_mapping : (Ast.naked_expr, Scopelang.Ast.naked_expr Var.t) Var.Map.t; } let tag_with_log_entry - (e : Scopelang.Ast.expr Marked.pos) + (e : Scopelang.Ast.naked_expr Marked.pos) (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - Scopelang.Ast.expr Marked.pos = + Scopelang.Ast.naked_expr Marked.pos = ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) -let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : - Scopelang.Ast.expr Marked.pos Bindlib.box = +let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : + Scopelang.Ast.naked_expr Marked.pos Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> @@ -186,8 +186,8 @@ let rec rule_tree_to_expr ~(toplevel : bool) (ctx : ctx) (def_pos : Pos.t) - (is_func : Ast.expr Var.t option) - (tree : rule_tree) : Scopelang.Ast.expr Marked.pos Bindlib.box = + (is_func : Ast.naked_expr Var.t option) + (tree : rule_tree) : Scopelang.Ast.naked_expr Marked.pos Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r in @@ -195,8 +195,8 @@ let rec rule_tree_to_expr whole rule tree into a function, we need to perform some alpha-renaming of all the expressions *) let substitute_parameter - (e : Ast.expr Marked.pos Bindlib.box) - (rule : Ast.rule) : Ast.expr Marked.pos Bindlib.box = + (e : Ast.naked_expr Marked.pos Bindlib.box) + (rule : Ast.rule) : Ast.naked_expr Marked.pos Bindlib.box = match is_func, rule.Ast.rule_parameter with | Some new_param, Some (old_param, _) -> let binder = Bindlib.bind_var old_param e in @@ -236,8 +236,8 @@ let rec rule_tree_to_expr (fun rule -> substitute_parameter rule.Ast.rule_cons rule) base_rules in - let translate_and_unbox_list (list : Ast.expr Marked.pos Bindlib.box list) : - Scopelang.Ast.expr Marked.pos Bindlib.box list = + let translate_and_unbox_list (list : Ast.naked_expr Marked.pos Bindlib.box list) : + Scopelang.Ast.naked_expr Marked.pos Bindlib.box list = List.map (fun e -> (* There are two levels of boxing here, the outermost is introduced by @@ -286,7 +286,7 @@ let rec rule_tree_to_expr that the result returned by the function is not empty *) let default = Bindlib.box_apply - (fun (default : Scopelang.Ast.expr * Pos.t) -> + (fun (default : Scopelang.Ast.naked_expr * Pos.t) -> ErrorOnEmpty default, def_pos) default in @@ -307,7 +307,7 @@ let translate_def (typ : typ Marked.pos) (io : Scopelang.Ast.io) ~(is_cond : bool) - ~(is_subscope_var : bool) : Scopelang.Ast.expr Marked.pos = + ~(is_subscope_var : bool) : Scopelang.Ast.naked_expr Marked.pos = (* Here, we have to transform this list of rules into a default tree. *) let is_def_func = match Marked.unmark typ with TArrow (_, _) -> true | _ -> false diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 3e3a5504..63d46fea 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -19,10 +19,10 @@ include Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) naked_gexpr -and 'm marked_expr = (lcalc, 'm mark) gexpr +type 'm naked_expr = (lcalc, 'm mark) naked_gexpr +and 'm expr = (lcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 40276854..f2c1e133 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -23,10 +23,10 @@ open Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) naked_gexpr -and 'm marked_expr = (lcalc, 'm mark) gexpr +type 'm naked_expr = (lcalc, 'm mark) naked_gexpr +and 'm expr = (lcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program (** {1 Language terms construction}*) @@ -34,27 +34,27 @@ val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t val option_enum_config : (EnumConstructor.t * typ Marked.pos) list -val make_none : 'm mark -> 'm marked_expr Bindlib.box -val make_some : 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box +val make_none : 'm mark -> 'm expr Bindlib.box +val make_some : 'm expr Bindlib.box -> 'm expr Bindlib.box val make_matchopt_with_abs_arms : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box val make_matchopt : 'm mark -> - 'm expr Var.t -> + 'm naked_expr Var.t -> typ Marked.pos -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box (** [e' = make_matchopt'' pos v e e_none e_some] Builds the term corresponding to [match e with | None -> fun () -> e_none |Some -> fun v -> e_some]. *) (** {1 Special symbols} *) -val handle_default : untyped expr Var.t -val handle_default_opt : untyped expr Var.t +val handle_default : untyped naked_expr Var.t +val handle_default_opt : untyped naked_expr Var.t diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index a30feb9e..f807964b 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -22,13 +22,13 @@ module D = Dcalc.Ast (** TODO: This version is not yet debugged and ought to be specialized when Lcalc has more structure. *) -type 'm ctx = { name_context : string; globally_bound_vars : 'm expr Var.Set.t } +type 'm ctx = { name_context : string; globally_bound_vars : 'm naked_expr Var.Set.t } (** Returns the expression with closed closures and the set of free variables inside this new expression. Implementation guided by http://gallium.inria.fr/~fpottier/mpri/cours04.pdf#page=9. *) -let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : - m marked_expr Bindlib.box = +let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : + m expr Bindlib.box = let rec aux e = match Marked.unmark e with | EVar v -> diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 25e1da7a..c67b00b1 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -19,21 +19,21 @@ open Shared_ast module D = Dcalc.Ast module A = Ast -type 'm ctx = ('m D.expr, 'm A.expr Var.t) Var.Map.t +type 'm ctx = ('m D.naked_expr, 'm A.naked_expr Var.t) Var.Map.t (** This environment contains a mapping between the variables in Dcalc and their correspondance in Lcalc. *) -let thunk_expr (e : 'm A.marked_expr Bindlib.box) (mark : 'm mark) : - 'm A.marked_expr Bindlib.box = +let thunk_expr (e : 'm A.expr Bindlib.box) (mark : 'm mark) : + 'm A.expr Bindlib.box = let dummy_var = Var.make "_" in Expr.make_abs [| dummy_var |] e [TAny, Expr.mark_pos mark] mark let rec translate_default (ctx : 'm ctx) - (exceptions : 'm D.marked_expr list) - (just : 'm D.marked_expr) - (cons : 'm D.marked_expr) - (mark_default : 'm mark) : 'm A.marked_expr Bindlib.box = + (exceptions : 'm D.expr list) + (just : 'm D.expr) + (cons : 'm D.expr) + (mark_default : 'm mark) : 'm A.expr Bindlib.box = let exceptions = List.map (fun except -> thunk_expr (translate_expr ctx except) mark_default) @@ -51,8 +51,8 @@ let rec translate_default in exceptions -and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : - 'm A.marked_expr Bindlib.box = +and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : + 'm A.expr Bindlib.box = match Marked.unmark e with | EVar v -> Expr.make_var (Var.Map.find v ctx, Marked.get_mark e) | ETuple (args, s) -> @@ -112,8 +112,8 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : let rec translate_scope_lets (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scope_lets : 'm D.expr scope_body_expr) : - 'm A.expr scope_body_expr Bindlib.box = + (scope_lets : 'm D.naked_expr scope_body_expr) : + 'm A.naked_expr scope_body_expr Bindlib.box = match scope_lets with | Result e -> Bindlib.box_apply (fun e -> Result e) (translate_expr ctx e) | ScopeLet scope_let -> @@ -140,7 +140,7 @@ let rec translate_scope_lets let rec translate_scopes (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scopes : 'm D.expr scopes) : 'm A.expr scopes Bindlib.box = + (scopes : 'm D.naked_expr scopes) : 'm A.naked_expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -159,7 +159,7 @@ let rec translate_scopes let new_scope_body_expr = Bindlib.bind_var new_scope_input_var new_scope_body_expr in - let new_scope : 'm A.expr scope_body Bindlib.box = + let new_scope : 'm A.naked_expr scope_body Bindlib.box = Bindlib.box_apply (fun new_scope_body_expr -> { diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index f0d9e914..9702b1f6 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -42,12 +42,12 @@ module A = Ast open Shared_ast -type 'm hoists = ('m A.expr, 'm D.marked_expr) Var.Map.t -(** Hoists definition. It represent bindings between [A.Var.t] and [D.expr]. *) +type 'm hoists = ('m A.naked_expr, 'm D.expr) Var.Map.t +(** Hoists definition. It represent bindings between [A.Var.t] and [D.naked_expr]. *) type 'm info = { - expr : 'm A.marked_expr Bindlib.box; - var : 'm A.expr Bindlib.var; + naked_expr : 'm A.expr Bindlib.box; + var : 'm A.naked_expr Bindlib.var; is_pure : bool; } (** Information about each encontered Dcalc variable is stored inside a context @@ -61,14 +61,14 @@ let pp_info (fmt : Format.formatter) (info : 'm info) = type 'm ctx = { decl_ctx : decl_ctx; - vars : ('m D.expr, 'm info) Var.Map.t; + vars : ('m D.naked_expr, 'm info) Var.Map.t; (** information context about variables in the current scope *) } let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = let pp_binding (fmt : Format.formatter) - ((v, info) : 'm D.expr Var.t * 'm info) = + ((v, info) : 'm D.naked_expr Var.t * 'm info) = Format.fprintf fmt "%a: %a" Print.var v pp_info info in @@ -82,7 +82,7 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = (** [find ~info n ctx] is a warpper to ocaml's Map.find that handle errors in a slightly better way. *) -let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : +let find ?(info : string = "none") (n : 'm D.naked_expr Var.t) (ctx : 'm ctx) : 'm info = (* let _ = Format.asprintf "Searching for variable %a inside context %a" Print.var n pp_ctx ctx |> Cli.debug_print in *) @@ -99,11 +99,11 @@ let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) let add_var (mark : 'm mark) - (var : 'm D.expr Var.t) + (var : 'm D.naked_expr Var.t) (is_pure : bool) (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in - let expr = Expr.make_var (new_var, mark) in + let naked_expr = Expr.make_var (new_var, mark) in (* Cli.debug_print @@ Format.asprintf "D.%a |-> A.%a" Print.var var Print.var new_var; *) @@ -111,7 +111,7 @@ let add_var ctx with vars = Var.Map.update var - (fun _ -> Some { expr; var = new_var; is_pure }) + (fun _ -> Some { naked_expr; var = new_var; is_pure }) ctx.vars; } @@ -155,8 +155,8 @@ let disjoint_union_maps (pos : Pos.t) (cs : ('e, 'a) Var.Map.t list) : the equivalence between the execution of e and the execution of e' are equivalent in an environement where each variable v, where (v, e_v) is in hoists, has the non-empty value in e_v. *) -let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : - 'm A.marked_expr Bindlib.box * 'm hoists = +let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : + 'm A.expr Bindlib.box * 'm hoists = let pos = Marked.get_mark e in match Marked.unmark e with (* empty-producing/using terms. We hoist those. (D.EVar in some cases, @@ -172,7 +172,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, created a variable %a to replace it" Print.var v Print.var v'; *) Expr.make_var (v', pos), Var.Map.singleton v' e - else (find ~info:"should never happend" v ctx).expr, Var.Map.empty + else (find ~info:"should never happend" v ctx).naked_expr, Var.Map.empty | EApp ((EVar v, p), [(ELit LUnit, _)]) -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in @@ -288,8 +288,8 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : Expr.earray es' pos, disjoint_union_maps (Expr.pos e) hoists | EOp op -> Bindlib.box (EOp op, pos), Var.Map.empty -and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) - : 'm A.marked_expr Bindlib.box = +and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) + : 'm A.expr Bindlib.box = let e', hoists = translate_and_hoist ctx e in let hoists = Var.Map.bindings hoists in @@ -302,11 +302,11 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) ~init:(if append_esome then A.make_some e' else e') ~f:(fun acc (v, (hoist, mark_hoist)) -> (* Cli.debug_print @@ Format.asprintf "hoist using A.%a" Print.var v; *) - let c' : 'm A.marked_expr Bindlib.box = + let c' : 'm A.expr Bindlib.box = match hoist with (* Here we have to handle only the cases appearing in hoists, as defined the [translate_and_hoist] function. *) - | EVar v -> (find ~info:"should never happend" v ctx).expr + | EVar v -> (find ~info:"should never happend" v ctx).naked_expr | EDefault (excep, just, cons) -> let excep' = List.map (translate_expr ctx) excep in let just' = translate_expr ctx just in @@ -356,8 +356,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) -let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : - 'm A.expr scope_body_expr Bindlib.box = +let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_expr) : + 'm A.naked_expr scope_body_expr Bindlib.box = match lets with | Result e -> Bindlib.box_apply @@ -373,7 +373,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : } -> (* special case : the subscope variable is thunked (context i/o). We remove this thunking. *) - let _, expr = Bindlib.unmbind binder in + let _, naked_expr = Bindlib.unmbind binder in let var_is_pure = true in let var, next = Bindlib.unbind next in @@ -392,13 +392,13 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false expr) + (translate_expr ctx ~append_esome:false naked_expr) (Bindlib.bind_var new_var new_next) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = (ErrorOnEmpty _, emark) as expr; + scope_let_expr = (ErrorOnEmpty _, emark) as naked_expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -419,25 +419,25 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false expr) + (translate_expr ctx ~append_esome:false naked_expr) (Bindlib.bind_var new_var (translate_scope_let ctx' next)) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_pos = pos; - scope_let_expr = expr; + scope_let_expr = naked_expr; _; } -> Errors.raise_spanned_error pos "Internal Error: found an SubScopeVarDefinition that does not satisfy \ the invariants when translating Dcalc to Lcalc without exceptions: \ @[%a@]" - (Expr.format ctx.decl_ctx) expr + (Expr.format ctx.decl_ctx) naked_expr | ScopeLet { scope_let_kind = kind; scope_let_typ = typ; - scope_let_expr = expr; + scope_let_expr = naked_expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -458,7 +458,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : let var, next = Bindlib.unbind next in (* Cli.debug_print @@ Format.asprintf "unbinding %a" Print.var var; *) let vmark = - Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark expr) + Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark naked_expr) in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in @@ -472,13 +472,13 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false expr) + (translate_expr ctx ~append_esome:false naked_expr) (Bindlib.bind_var new_var (translate_scope_let ctx' next)) let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : 'm D.expr scope_body) : 'm A.expr scope_body Bindlib.box = + (body : 'm D.naked_expr scope_body) : 'm A.naked_expr scope_body Bindlib.box = match body with | { scope_body_expr = result; @@ -504,8 +504,8 @@ let translate_scope_body }) (Bindlib.bind_var v' (translate_scope_let ctx' lets)) -let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.expr scopes) : - 'm A.expr scopes Bindlib.box = +let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.naked_expr scopes) : + 'm A.naked_expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef { scope_name; scope_body; scope_next } -> diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index 25526b48..1d737c8a 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -22,9 +22,9 @@ let ( let+ ) x f = Bindlib.box_apply f x let ( and+ ) x y = Bindlib.box_pair x y let visitor_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (e : 'm marked_expr) : 'm marked_expr Bindlib.box = + (e : 'm expr) : 'm expr Bindlib.box = (* calls [t ctx] on every direct childs of [e], then rebuild an abstract syntax tree modified. Used in other transformations. *) let default_mark e' = Marked.same_mark_as e' e in @@ -68,7 +68,7 @@ let visitor_map default_mark @@ ECatch (e1, exn, e2) | ERaise _ | ELit _ | EOp _ -> Bindlib.box e -let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = +let rec iota_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with | EMatch ((EInj (e1, i, n', _ts), _), cases, n) when EnumName.compare n n' = 0 @@ -87,7 +87,7 @@ let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = visitor_map iota_expr () e' | _ -> visitor_map iota_expr () e -let rec beta_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = +let rec beta_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = let default_mark e' = Marked.same_mark_as e' e in match Marked.unmark e with | EApp (e1, args) -> ( @@ -116,8 +116,8 @@ let _beta_optimizations (p : 'm program) : 'm program = in { p with scopes = Bindlib.unbox new_scopes } -let rec peephole_expr (_ : unit) (e : 'm marked_expr) : - 'm marked_expr Bindlib.box = +let rec peephole_expr (_ : unit) (e : 'm expr) : + 'm expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index fad64743..9a16842e 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -242,7 +242,7 @@ let format_var (fmt : Format.formatter) (v : 'm Var.t) : unit = Cli.debug_print "lowercase_name: %s " lowercase_name; Format.fprintf fmt "%s_" lowercase_name) -let needs_parens (e : 'm marked_expr) : bool = +let needs_parens (e : 'm expr) : bool = match Marked.unmark e with | EApp ((EAbs (_, _), _), _) | ELit (LBool _ | LUnit) @@ -274,9 +274,9 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) - (e : 'm marked_expr) : unit = + (e : 'm expr) : unit = let format_expr = format_expr ctx in - let format_with_parens (fmt : Format.formatter) (e : 'm marked_expr) = + let format_with_parens (fmt : Format.formatter) (e : 'm expr) = if needs_parens e then Format.fprintf fmt "(%a)" format_expr e else Format.fprintf fmt "%a" format_expr e in @@ -556,7 +556,7 @@ let format_ctx let rec format_scope_body_expr (ctx : decl_ctx) (fmt : Format.formatter) - (scope_lets : 'm Ast.expr scope_body_expr) : unit = + (scope_lets : 'm Ast.naked_expr scope_body_expr) : unit = match scope_lets with | Result e -> format_expr ctx fmt e | ScopeLet scope_let -> @@ -572,7 +572,7 @@ let rec format_scope_body_expr let rec format_scopes (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : 'm Ast.expr scopes) : unit = + (scopes : 'm Ast.naked_expr scopes) : unit = match scopes with | Nil -> () | ScopeDef scope_def -> diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index cf3110cf..dee24908 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -29,7 +29,7 @@ val find_enum : EnumName.t -> decl_ctx -> (EnumConstructor.t * typ Marked.pos) list val typ_needs_parens : typ Marked.pos -> bool -val needs_parens : 'm marked_expr -> bool +val needs_parens : 'm expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit val format_enum_cons_name : Format.formatter -> EnumConstructor.t -> unit val format_struct_name : Format.formatter -> StructName.t -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index 9b56f2bb..e3e0fc76 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -328,10 +328,10 @@ module To_jsoo = struct Format.fprintf fmt "%a@\n" format_enum_decl (e, find_enum e ctx)) (type_ordering @ scope_structs) - let fmt_input_struct_name fmt (scope_def : 'a expr scope_def) = + let fmt_input_struct_name fmt (scope_def : 'a naked_expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_input_struct - let fmt_output_struct_name fmt (scope_def : 'a expr scope_def) = + let fmt_output_struct_name fmt (scope_def : 'a naked_expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_output_struct let rec format_scopes_to_fun diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 3d0f38dd..5f0a9cf6 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -49,7 +49,7 @@ module To_json = struct Format.fprintf fmt "%s" s let rec find_scope_def (target_name : string) : - 'm expr scopes -> 'm expr scope_def option = function + 'm naked_expr scopes -> 'm naked_expr scope_def option = function | Nil -> None | ScopeDef scope_def -> let name = Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index ead57cd4..0a9d2157 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -25,32 +25,32 @@ let dead_value = LocalName.fresh ("dead_value", Pos.no_pos) let handle_default = TopLevelName.fresh ("handle_default", Pos.no_pos) let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) -type expr = +type naked_expr = | EVar of LocalName.t | EFunc of TopLevelName.t - | EStruct of expr Marked.pos list * StructName.t - | EStructFieldAccess of expr Marked.pos * StructFieldName.t * StructName.t - | EInj of expr Marked.pos * EnumConstructor.t * EnumName.t - | EArray of expr Marked.pos list + | EStruct of naked_expr Marked.pos list * StructName.t + | EStructFieldAccess of naked_expr Marked.pos * StructFieldName.t * StructName.t + | EInj of naked_expr Marked.pos * EnumConstructor.t * EnumName.t + | EArray of naked_expr Marked.pos list | ELit of L.lit - | EApp of expr Marked.pos * expr Marked.pos list + | EApp of naked_expr Marked.pos * naked_expr Marked.pos list | EOp of operator type stmt = | SInnerFuncDef of LocalName.t Marked.pos * func | SLocalDecl of LocalName.t Marked.pos * typ Marked.pos - | SLocalDef of LocalName.t Marked.pos * expr Marked.pos + | SLocalDef of LocalName.t Marked.pos * naked_expr Marked.pos | STryExcept of block * except * block | SRaise of except - | SIfThenElse of expr Marked.pos * block * block + | SIfThenElse of naked_expr Marked.pos * block * block | SSwitch of - expr Marked.pos + naked_expr Marked.pos * EnumName.t * (block (* Statements corresponding to arm closure body*) * (* Variable instantiated with enum payload *) LocalName.t) list (** Each block corresponds to one case of the enum *) - | SReturn of expr - | SAssert of expr + | SReturn of naked_expr + | SAssert of naked_expr and block = stmt Marked.pos list diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index b914b345..9e1ef29a 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -21,24 +21,24 @@ module L = Lcalc.Ast module D = Dcalc.Ast type 'm ctxt = { - func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t; + func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t; decl_ctx : decl_ctx; - var_dict : ('m L.expr, A.LocalName.t) Var.Map.t; + var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t; inside_definition_of : A.LocalName.t option; context_name : string; } (* Expressions can spill out side effect, hence this function also returns a list of statements to be prepended before the expression is evaluated *) -let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : - A.block * A.expr Marked.pos = - match Marked.unmark expr with +let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : + A.block * A.naked_expr Marked.pos = + match Marked.unmark naked_expr with | EVar v -> let local_var = try A.EVar (Var.Map.find v ctxt.var_dict) with Not_found -> A.EFunc (Var.Map.find v ctxt.func_dict) in - [], (local_var, Expr.pos expr) + [], (local_var, Expr.pos naked_expr) | ETuple (args, Some s_name) -> let args_stmts, new_args = List.fold_left @@ -49,14 +49,14 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : in let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in - args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) + args_stmts, (A.EStruct (new_args, s_name), Expr.pos naked_expr) | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" | ETupleAccess (e1, num_field, Some s_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let field_name = fst (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) in - e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) + e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos naked_expr) | ETupleAccess (_, _, None, _) -> failwith "Non-struct tuples cannot be compiled to scalc" | EInj (e1, num_cons, e_name, _) -> @@ -64,7 +64,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : let cons_name = fst (List.nth (EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) in - e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos expr) + e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos naked_expr) | EApp (f, args) -> let f_stmts, new_f = translate_expr ctxt f in let args_stmts, new_args = @@ -75,7 +75,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : ([], []) args in let new_args = List.rev new_args in - f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos expr) + f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos naked_expr) | EArray args -> let args_stmts, new_args = List.fold_left @@ -85,9 +85,9 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : ([], []) args in let new_args = List.rev new_args in - args_stmts, (A.EArray new_args, Expr.pos expr) - | EOp op -> [], (A.EOp op, Expr.pos expr) - | ELit l -> [], (A.ELit l, Expr.pos expr) + args_stmts, (A.EArray new_args, Expr.pos naked_expr) + | EOp op -> [], (A.EOp op, Expr.pos naked_expr) + | ELit l -> [], (A.ELit l, Expr.pos naked_expr) | _ -> let tmp_var = A.LocalName.fresh @@ -100,7 +100,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : let v = Marked.unmark (A.LocalName.get_info v) in let tmp_rex = Re.Pcre.regexp "^temp_" in if Re.Pcre.pmatch ~rex:tmp_rex v then v else "temp_" ^ v), - Expr.pos expr ) + Expr.pos naked_expr ) in let ctxt = { @@ -109,13 +109,13 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : context_name = Marked.unmark (A.LocalName.get_info tmp_var); } in - let tmp_stmts = translate_statements ctxt expr in - ( ( A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), - Expr.pos expr ) + let tmp_stmts = translate_statements ctxt naked_expr in + ( ( A.SLocalDecl ((tmp_var, Expr.pos naked_expr), (TAny, Expr.pos naked_expr)), + Expr.pos naked_expr ) :: tmp_stmts, - (A.EVar tmp_var, Expr.pos expr) ) + (A.EVar tmp_var, Expr.pos naked_expr) ) -and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : +and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = match Marked.unmark block_expr with | EAssert e -> @@ -273,9 +273,9 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : let rec translate_scope_body_expr (scope_name : ScopeName.t) (decl_ctx : decl_ctx) - (var_dict : ('m L.expr, A.LocalName.t) Var.Map.t) - (func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t) - (scope_expr : 'm L.expr scope_body_expr) : A.block = + (var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t) + (func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t) + (scope_expr : 'm L.naked_expr scope_body_expr) : A.block = match scope_expr with | Result e -> let block, new_e = diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 43cdcf64..8ad6ef8d 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -18,7 +18,7 @@ open Utils open Shared_ast open Ast -let needs_parens (_e : expr Marked.pos) : bool = false +let needs_parens (_e : naked_expr Marked.pos) : bool = false let format_local_name (fmt : Format.formatter) (v : LocalName.t) : unit = Format.fprintf fmt "%a_%s" LocalName.format_t v @@ -28,9 +28,9 @@ let rec format_expr (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) - (e : expr Marked.pos) : unit = + (e : naked_expr Marked.pos) : unit = let format_expr = format_expr decl_ctx ~debug in - let format_with_parens (fmt : Format.formatter) (e : expr Marked.pos) = + let format_with_parens (fmt : Format.formatter) (e : naked_expr Marked.pos) = if needs_parens e then Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_expr e Print.punctuation ")" @@ -115,11 +115,11 @@ let rec format_statement Format.fprintf fmt "@[%a %a %a@ %a@]" Print.keyword "decl" LocalName.format_t (Marked.unmark name) Print.punctuation ":" (Print.typ decl_ctx) typ - | SLocalDef (name, expr) -> + | SLocalDef (name, naked_expr) -> Format.fprintf fmt "@[%a %a@ %a@]" LocalName.format_t (Marked.unmark name) Print.punctuation "=" (format_expr decl_ctx ~debug) - expr + naked_expr | STryExcept (b_try, except, b_with) -> Format.fprintf fmt "@[%a%a@ %a@]@\n@[%a %a%a@ %a@]" Print.keyword "try" Print.punctuation ":" @@ -143,10 +143,10 @@ let rec format_statement Format.fprintf fmt "@[%a %a@]" Print.keyword "return" (format_expr decl_ctx ~debug) (ret, Marked.get_mark stmt) - | SAssert expr -> + | SAssert naked_expr -> Format.fprintf fmt "@[%a %a@]" Print.keyword "assert" (format_expr decl_ctx ~debug) - (expr, Marked.get_mark stmt) + (naked_expr, Marked.get_mark stmt) | SSwitch (e_switch, enum, arms) -> Format.fprintf fmt "@[%a @[%a@]%a@]%a" Print.keyword "switch" (format_expr decl_ctx ~debug) diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index 906e1e43..d4014ec8 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -232,7 +232,7 @@ let format_toplevel_name (fmt : Format.formatter) (v : TopLevelName.t) : unit = let v_str = Marked.unmark (TopLevelName.get_info v) in format_name_cleaned fmt v_str -let needs_parens (e : expr Marked.pos) : bool = +let needs_parens (e : naked_expr Marked.pos) : bool = match Marked.unmark e with | ELit (LBool _ | LUnit) | EVar _ | EOp _ -> false | _ -> true @@ -262,7 +262,7 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) - (e : expr Marked.pos) : unit = + (e : naked_expr Marked.pos) : unit = match Marked.unmark e with | EVar v -> format_var fmt v | EFunc f -> format_toplevel_name fmt f diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 96d5c755..54121fd0 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,16 +36,16 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (scopelang, Pos.t) naked_gexpr -type marked_expr = expr Marked.pos +type naked_expr = (scopelang, Pos.t) naked_gexpr +type expr = naked_expr Marked.pos module ExprMap = Map.Make (struct - type t = marked_expr + type t = expr let compare = Expr.compare end) -let rec locations_used (e : expr Marked.pos) : LocationSet.t = +let rec locations_used (e : naked_expr Marked.pos) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty @@ -84,8 +84,8 @@ type io_input = NoInput | OnlyInput | Reentrant type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } type rule = - | Definition of location Marked.pos * marked_typ * io * expr Marked.pos - | Assertion of expr Marked.pos + | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos + | Assertion of naked_expr Marked.pos | Call of ScopeName.t * SubScopeName.t type scope_decl = { diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index c79bd0f8..dc567c9b 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -41,12 +41,12 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type expr = (scopelang, Pos.t) naked_gexpr -type marked_expr = (scopelang, Pos.t) gexpr +type naked_expr = (scopelang, Pos.t) naked_gexpr +type expr = (scopelang, Pos.t) gexpr -module ExprMap : Map.S with type key = marked_expr +module ExprMap : Map.S with type key = expr -val locations_used : marked_expr -> LocationSet.t +val locations_used : expr -> LocationSet.t (** This type characterizes the three levels of visibility for a given scope variable with regards to the scope's input and possible redefinitions inside @@ -70,8 +70,8 @@ type io = { (** Characterization of the input/output status of a scope variable. *) type rule = - | Definition of location Marked.pos * marked_typ * io * expr Marked.pos - | Assertion of expr Marked.pos + | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos + | Assertion of naked_expr Marked.pos | Call of ScopeName.t * SubScopeName.t type scope_decl = { diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 86e7085d..cee49080 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -76,7 +76,7 @@ let scope ?(debug = false) ctx fmt (name, decl) = (Print.typ ctx) typ Print.punctuation "=" (fun fmt e -> match Marked.unmark loc with - | SubScopeVar _ -> Print.expr ctx fmt e + | SubScopeVar _ -> Print.naked_expr ctx fmt e | ScopelangScopeVar v -> ( match Marked.unmark @@ -85,12 +85,12 @@ let scope ?(debug = false) ctx fmt (name, decl) = with | Reentrant -> Format.fprintf fmt "%a@ %a" Print.operator - "reentrant or by default" (Print.expr ~debug ctx) e - | _ -> Format.fprintf fmt "%a" (Print.expr ~debug ctx) e)) + "reentrant or by default" (Print.naked_expr ~debug ctx) e + | _ -> Format.fprintf fmt "%a" (Print.naked_expr ~debug ctx) e)) e | Assertion e -> Format.fprintf fmt "%a %a" Print.keyword "assert" - (Print.expr ~debug ctx) e + (Print.naked_expr ~debug ctx) e | Call (scope_name, subscope_name) -> Format.fprintf fmt "%a %a%a%a%a" Print.keyword "call" ScopeName.format_t scope_name Print.punctuation "[" diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index c533731c..5520d4d0 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -25,9 +25,9 @@ type scope_var_ctx = { type scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : untyped Dcalc.Ast.expr Var.t; + scope_sig_scope_var : untyped Dcalc.Ast.naked_expr Var.t; (** Var representing the scope *) - scope_sig_input_var : untyped Dcalc.Ast.expr Var.t; + scope_sig_input_var : untyped Dcalc.Ast.naked_expr Var.t; (** Var representing the scope input inside the scope func *) scope_sig_input_struct : StructName.t; (** Scope input *) scope_sig_output_struct : StructName.t; (** Scope output *) @@ -40,11 +40,11 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) ScopeVarMap.t + (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : (Ast.expr, untyped Dcalc.Ast.expr Var.t) Var.Map.t; + local_vars : (Ast.naked_expr, untyped Dcalc.Ast.naked_expr Var.t) Var.Map.t; } let empty_ctx @@ -66,9 +66,9 @@ let pos_mark (pos : Pos.t) : untyped mark = Untyped { pos } let pos_mark_as e = pos_mark (Marked.get_mark e) let merge_defaults - (caller : untyped Dcalc.Ast.marked_expr Bindlib.box) - (callee : untyped Dcalc.Ast.marked_expr Bindlib.box) : - untyped Dcalc.Ast.marked_expr Bindlib.box = + (caller : untyped Dcalc.Ast.expr Bindlib.box) + (callee : untyped Dcalc.Ast.expr Bindlib.box) : + untyped Dcalc.Ast.expr Bindlib.box = let caller = let m = Marked.get_mark (Bindlib.unbox caller) in Expr.make_app caller [Bindlib.box (ELit LUnit, m)] m @@ -83,10 +83,10 @@ let merge_defaults body let tag_with_log_entry - (e : untyped Dcalc.Ast.marked_expr Bindlib.box) + (e : untyped Dcalc.Ast.expr Bindlib.box) (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - untyped Dcalc.Ast.marked_expr Bindlib.box = + untyped Dcalc.Ast.expr Bindlib.box = Bindlib.box_apply (fun e -> Marked.same_mark_as @@ -101,8 +101,8 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : - Ast.expr Marked.pos list = +let collapse_similar_outcomes (excepts : Ast.naked_expr Marked.pos list) : + Ast.naked_expr Marked.pos list = let cons_map = List.fold_left (fun map -> function @@ -133,9 +133,9 @@ let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : in excepts -let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : - untyped Dcalc.Ast.marked_expr Bindlib.box = - Bindlib.box_apply (fun (x : untyped Dcalc.Ast.expr) -> +let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : + untyped Dcalc.Ast.expr Bindlib.box = + Bindlib.box_apply (fun (x : untyped Dcalc.Ast.naked_expr) -> Marked.mark (pos_mark_as e) x) @@ match Marked.unmark e with @@ -357,8 +357,8 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - (untyped Dcalc.Ast.expr scope_body_expr Bindlib.box -> - untyped Dcalc.Ast.expr scope_body_expr Bindlib.box) + (untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box -> + untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box) * ctx = match rule with | Definition ((ScopelangScopeVar a, var_def_pos), tau, a_io, e) -> @@ -636,7 +636,7 @@ let translate_rules (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) (sigma_return_struct_name : StructName.t) : - untyped Dcalc.Ast.expr scope_body_expr Bindlib.box * ctx = + untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -673,7 +673,7 @@ let translate_scope_decl (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - untyped Dcalc.Ast.expr scope_body Bindlib.box * struct_ctx = + untyped Dcalc.Ast.naked_expr scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in @@ -850,7 +850,7 @@ let translate_program (prgm : Ast.program) : in (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) - let (scopes, decl_ctx) : untyped Dcalc.Ast.expr scopes Bindlib.box * _ = + let (scopes, decl_ctx) : untyped Dcalc.Ast.naked_expr scopes Bindlib.box * _ = List.fold_right (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index 099cbe39..a4fbb511 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -178,7 +178,7 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type expr = dcalc naked_gexpr] plus the annotations. + are then defined with [type naked_expr = dcalc naked_gexpr] plus the annotations. A few tips on using this GADT: diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 1888ece9..f2083550 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -729,7 +729,7 @@ let remove_logging_calls e = in f () e -let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e +let format ?debug decl_ctx ppf e = Print.naked_expr ?debug decl_ctx ppf e let rec size : type a. (a, 't) naked_gexpr marked -> int = fun e -> diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 18955fd5..06835326 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -211,7 +211,7 @@ let var fmt v = let needs_parens (type a) (e : (a, _) gexpr) : bool = match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false -let rec expr : +let rec naked_expr : 'a. ?debug:bool -> decl_ctx -> @@ -220,13 +220,13 @@ let rec expr : unit = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) (e : (a, 't) gexpr) -> - let expr e = expr ~debug ctx e in + let naked_expr e = naked_expr ~debug ctx e in let with_parens fmt e = if needs_parens e then ( punctuation fmt "("; - expr fmt e; + naked_expr fmt e; punctuation fmt ")") - else expr fmt e + else naked_expr fmt e in match Marked.unmark e with | EVar v -> Format.fprintf fmt "%a" var v @@ -234,7 +234,7 @@ let rec expr : Format.fprintf fmt "@[%a%a%a@]" punctuation "(" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt e -> Format.fprintf fmt "%a" expr e)) + (fun fmt e -> Format.fprintf fmt "%a" naked_expr e)) es punctuation ")" | ETuple (es, Some s) -> Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t s @@ -244,35 +244,35 @@ let rec expr : (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t struct_field punctuation "\"" punctuation - "=" expr e)) + "=" naked_expr e)) (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") - (fun fmt e -> Format.fprintf fmt "%a" expr e)) + (fun fmt e -> Format.fprintf fmt "%a" naked_expr e)) es punctuation "]" | ETupleAccess (e1, n, s, _ts) -> ( match s with - | None -> Format.fprintf fmt "%a%a%d" expr e1 punctuation "." n + | None -> Format.fprintf fmt "%a%a%d" naked_expr e1 punctuation "." n | Some s -> - Format.fprintf fmt "%a%a%a%a%a" expr e1 operator "." punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 operator "." punctuation "\"" StructFieldName.format_t (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) punctuation "\"") | EInj (e, n, en, _ts) -> Format.fprintf fmt "@[%a@ %a@]" enum_constructor (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) - expr e + naked_expr e | EMatch (e, es, e_name) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e keyword "with" + naked_expr e keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (e, c) -> Format.fprintf fmt "@[%a %a%a@ %a@]" punctuation "|" - enum_constructor c punctuation ":" expr e)) + enum_constructor c punctuation ":" naked_expr e)) (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) | ELit l -> lit fmt l | EApp ((EAbs (binder, taus), _), args) -> @@ -285,8 +285,8 @@ let rec expr : (fun fmt (x, tau, arg) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@]@\n" keyword "let" var x punctuation ":" (typ ctx) tau punctuation "=" - expr arg keyword "in")) - xs_tau_arg expr body + naked_expr arg keyword "in")) + xs_tau_arg naked_expr body | EAbs (binder, taus) -> let xs, body = Bindlib.unmbind binder in let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in @@ -296,44 +296,44 @@ let rec expr : (fun fmt (x, tau) -> Format.fprintf fmt "%a%a%a %a%a" punctuation "(" var x punctuation ":" (typ ctx) tau punctuation ")")) - xs_tau punctuation "→" expr body + xs_tau punctuation "→" naked_expr body | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" binop op with_parens arg1 with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 binop op with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> expr fmt arg1 + | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> naked_expr fmt arg1 | EApp ((EOp (Unop op), _), [arg1]) -> Format.fprintf fmt "@[%a@ %a@]" unop op with_parens arg1 | EApp (f, args) -> - Format.fprintf fmt "@[%a@ %a@]" expr f + Format.fprintf fmt "@[%a@ %a@]" naked_expr f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") with_parens) args | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" expr e1 - keyword "then" expr e2 keyword "else" expr e3 + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" naked_expr e1 + keyword "then" naked_expr e2 keyword "else" naked_expr e3 | EOp (Ternop op) -> Format.fprintf fmt "%a" ternop op | EOp (Binop op) -> Format.fprintf fmt "%a" binop op | EOp (Unop op) -> Format.fprintf fmt "%a" unop op | EDefault (exceptions, just, cons) -> if List.length exceptions = 0 then - Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" expr just - punctuation "⊢" expr cons punctuation "⟩" + Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" naked_expr just + punctuation "⊢" naked_expr cons punctuation "⟩" else Format.fprintf fmt "@[%a%a@ %a@ %a@ %a@ %a%a@]" punctuation "⟨" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",") - expr) - exceptions punctuation "|" expr just punctuation "⊢" expr cons + naked_expr) + exceptions punctuation "|" naked_expr just punctuation "⊢" naked_expr cons punctuation "⟩" | ErrorOnEmpty e' -> Format.fprintf fmt "%a@ %a" operator "error_empty" with_parens e' | EAssert e' -> Format.fprintf fmt "@[%a@ %a%a%a@]" keyword "assert" punctuation "(" - expr e' punctuation ")" + naked_expr e' punctuation ")" | ECatch (e1, exn, e2) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a ->@ %a@]" keyword "try" with_parens e1 keyword "with" except exn with_parens e2 @@ -348,20 +348,20 @@ let rec expr : (fun fmt (field_name, field_expr) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t field_name punctuation "\"" punctuation - "=" expr field_expr)) + "=" naked_expr field_expr)) (StructFieldMap.bindings fields) punctuation "}" | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" expr e1 punctuation "." punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 punctuation "." punctuation "\"" StructFieldName.format_t field punctuation "\"" | EEnumInj (e1, cons, _) -> - Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons expr e1 + Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons naked_expr e1 | EMatchS (e1, _, cases) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e1 keyword "with" + naked_expr e1 keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cons_name, case_expr) -> Format.fprintf fmt "@[%a %a@ %a@ %a@]" punctuation "|" - enum_constructor cons_name punctuation "→" expr case_expr)) + enum_constructor cons_name punctuation "→" naked_expr case_expr)) (EnumConstructorMap.bindings cases) diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index 681e3c1f..f5b8882e 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -43,7 +43,7 @@ val unop : Format.formatter -> unop -> unit val except : Format.formatter -> except -> unit val var : Format.formatter -> 'e Var.t -> unit -val expr : +val naked_expr : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index b6517745..eb16d8b7 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -152,7 +152,7 @@ let rec unfold (ctx : decl_ctx) (s : 'e scopes) (mark : 'm mark) - (main_scope : 'expr scope_name_or_var) : 'e marked Bindlib.box = + (main_scope : 'naked_expr scope_name_or_var) : 'e marked Bindlib.box = match s with | Nil -> ( match main_scope with diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld index 2b50d756..2ffe7c39 100644 --- a/compiler/shared_ast/shared_ast.mld +++ b/compiler/shared_ast/shared_ast.mld @@ -17,7 +17,7 @@ irrelevant cases, so that e.g. [(dcalc, _) naked_gexpr] doesn't have the [ERaise [ECatch] cases, while [(lcalc, _) naked_gexpr] doesn't have [EDefault]. For example, Lcalc expressions are then defined as -[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. +[type 'm naked_expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. This makes it possible to write a single function that works on the different ASTs, by having it take a [('a, _) naked_gexpr] as input, while retaining a much diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 1e2d5b5c..9403afff 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -116,19 +116,19 @@ let disambiguate_constructor Errors.raise_spanned_error (Marked.get_mark enum) "Enum %s has not been defined before" (Marked.unmark enum)) -(** Usage: [translate_expr scope ctxt expr] +(** Usage: [translate_expr scope ctxt naked_expr] - Translates [expr] into its desugared equivalent. [scope] is used to + Translates [naked_expr] into its desugared equivalent. [scope] is used to disambiguate the scope and subscopes variables than occur in the expression *) let rec translate_expr (scope : ScopeName.t) (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) - ((expr, pos) : Ast.expression Marked.pos) : - Desugared.Ast.expr Marked.pos Bindlib.box = + ((naked_expr, pos) : Ast.expression Marked.pos) : + Desugared.Ast.naked_expr Marked.pos Bindlib.box = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in - match expr with + match naked_expr with | Binop ( (Ast.And, _pos_op), ( TestMatchCase (e1_sub, ((constructors, Some binding), pos_pattern)), @@ -785,7 +785,7 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t + Desugared.Ast.naked_expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" @@ -799,7 +799,7 @@ and disambiguate_match_and_build_expression (ctxt : Name_resolution.context) (case_body : ('a * Pos.t) Bindlib.box) (e_binder : - (Desugared.Ast.expr, Desugared.Ast.expr * Pos.t) Bindlib.mbinder + (Desugared.Ast.naked_expr, Desugared.Ast.naked_expr * Pos.t) Bindlib.mbinder Bindlib.box) : 'c Bindlib.box = Bindlib.box_apply2 (fun e_binder case_body -> @@ -912,10 +912,10 @@ and disambiguate_match_and_build_expression missing_constructors (cases_d, Some e_uid, curr_index)) in - let expr, e_name, _ = + let naked_expr, e_name, _ = List.fold_left bind_match_cases (EnumConstructorMap.empty, None, 0) cases in - expr, Option.get e_name + naked_expr, Option.get e_name [@@ocamlformat "wrap-comments=false"] (** {1 Translating scope definitions} *) @@ -924,9 +924,9 @@ and disambiguate_match_and_build_expression this precondition has to be appended to the justifications of each definition in the subscope use. This is what this function does. *) let merge_conditions - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (cond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (default_pos : Pos.t) : Desugared.Ast.expr Marked.pos Bindlib.box = + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (cond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (default_pos : Pos.t) : Desugared.Ast.naked_expr Marked.pos Bindlib.box = match precond, cond with | Some precond, Some cond -> let op_term = EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) in @@ -948,8 +948,8 @@ let process_default (scope : ScopeName.t) (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) - (param_uid : Desugared.Ast.expr Var.t Marked.pos option) - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (param_uid : Desugared.Ast.naked_expr Var.t Marked.pos option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) (just : Ast.expression Marked.pos option) @@ -987,7 +987,7 @@ let process_default (** Wrapper around {!val: process_default} that performs some name disambiguation *) let process_def - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1076,7 +1076,7 @@ let process_def (** Translates a {!type: Surface.Ast.rule} from the surface language *) let process_rule - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (scope : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1086,7 +1086,7 @@ let process_rule (** Translates assertions *) let process_assert - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index ae8f27f3..af31feb5 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -321,7 +321,7 @@ let process_item_decl (** Adds a binding to the context *) let add_def_local_var (ctxt : context) (name : ident) : - context * Desugared.Ast.expr Var.t = + context * Desugared.Ast.naked_expr Var.t = let local_var_uid = Var.make name in let ctxt = { diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index 59ce3a7d..c346b386 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -120,7 +120,7 @@ val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool val is_type_cond : Ast.typ Marked.pos -> bool -val add_def_local_var : context -> ident -> context * Desugared.Ast.expr Var.t +val add_def_local_var : context -> ident -> context * Desugared.Ast.naked_expr Var.t (** Adds a binding to the context *) val get_def_key : diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 7bba760a..a25778b3 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -22,15 +22,15 @@ open Ast (** {1 Helpers and type definitions}*) -type vc_return = typed marked_expr * (typed expr, typ Marked.pos) Var.Map.t +type vc_return = typed expr * (typed naked_expr, typ Marked.pos) Var.Map.t (** The return type of VC generators is the VC expression plus the types of any locally free variable inside that expression. *) type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; - input_vars : typed expr Var.t list; - scope_variables_typs : (typed expr, typ Marked.pos) Var.Map.t; + input_vars : typed naked_expr Var.t list; + scope_variables_typs : (typed naked_expr, typ Marked.pos) Var.Map.t; } let conjunction (args : vc_return list) (mark : typed mark) : vc_return = @@ -74,8 +74,8 @@ let half_product (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list = variables, or [fun () -> e1] for subscope variables. But what we really want to analyze is only [e1], so we match this outermost structure explicitely and have a clean verification condition generator that only runs on [e1] *) -let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed marked_expr) - : typed marked_expr = +let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) + : typed expr = match Marked.unmark e with | ErrorOnEmpty ( EDefault @@ -106,7 +106,7 @@ let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed marked_expr) [b] such that if [b] is true, then [e] will never return an empty error. It also returns a map of all the types of locally free variables inside the expression. *) -let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed marked_expr) : +let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed expr) : vc_return = let out = match Marked.unmark e with @@ -200,7 +200,7 @@ let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed marked_expr) : [b] such that if [b] is true, then [e] will never return a conflict error. It also returns a map of all the types of locally free variables inside the expression. *) -let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed marked_expr) +let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed expr) : vc_return = let out = (* See the code of [generate_vc_must_not_return_empty] for a list of invariants on which this @@ -283,17 +283,17 @@ let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed marked_expr) type verification_condition_kind = NoEmptyError | NoOverlappingExceptions type verification_condition = { - vc_guard : typed marked_expr; + vc_guard : typed expr; (* should have type bool *) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed expr Var.t Marked.pos; - vc_free_vars_typ : (typed expr, typ Marked.pos) Var.Map.t; + vc_variable : typed naked_expr Var.t Marked.pos; + vc_free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t; } let rec generate_verification_conditions_scope_body_expr (ctx : ctx) - (scope_body_expr : 'm expr scope_body_expr) : + (scope_body_expr : 'm naked_expr scope_body_expr) : ctx * verification_condition list = match scope_body_expr with | Result _ -> ctx, [] @@ -378,7 +378,7 @@ let rec generate_verification_conditions_scope_body_expr let rec generate_verification_conditions_scopes (decl_ctx : decl_ctx) - (scopes : 'm expr scopes) + (scopes : 'm naked_expr scopes) (s : ScopeName.t option) : verification_condition list = match scopes with | Nil -> [] diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 359c3ae9..bba3e625 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -29,12 +29,12 @@ type verification_condition_kind = a conflict error *) type verification_condition = { - vc_guard : typed Dcalc.Ast.marked_expr; + vc_guard : typed Dcalc.Ast.expr; (** This expression should have type [bool]*) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed Dcalc.Ast.expr Var.t Marked.pos; - vc_free_vars_typ : (typed Dcalc.Ast.expr, typ Marked.pos) Var.Map.t; + vc_variable : typed Dcalc.Ast.naked_expr Var.t Marked.pos; + vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ Marked.pos) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 3a0bc322..070dad6b 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -25,7 +25,7 @@ module type Backend = sig type backend_context val make_context : - decl_ctx -> (typed expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -40,7 +40,7 @@ module type Backend = sig val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding end @@ -50,13 +50,13 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> (typed expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context type vc_encoding val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 13fc8b7d..125bb7bb 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -26,7 +26,7 @@ module type Backend = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -42,7 +42,7 @@ module type Backend = sig val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding end @@ -53,14 +53,14 @@ module type BackendIO = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 89a3b572..6c2b4bb0 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -27,20 +27,20 @@ type context = { ctx_decl : decl_ctx; (* The declaration context from the Catala program, containing information to precisely pretty print Catala expressions *) - ctx_var : (typed expr, typ Marked.pos) Var.Map.t; + ctx_var : (typed naked_expr, typ Marked.pos) Var.Map.t; (* A map from Catala variables to their types, needed to create Z3 expressions of the right sort *) - ctx_funcdecl : (typed expr, FuncDecl.func_decl) Var.Map.t; + ctx_funcdecl : (typed naked_expr, FuncDecl.func_decl) Var.Map.t; (* A map from Catala function names (represented as variables) to Z3 function declarations, used to only define once functions in Z3 queries *) - ctx_z3vars : typed expr Var.t StringMap.t; + ctx_z3vars : typed naked_expr Var.t StringMap.t; (* A map from strings, corresponding to Z3 symbol names, to the Catala variable they represent. Used when to pretty-print Z3 models when a counterexample is generated *) ctx_z3datatypes : Sort.sort EnumMap.t; (* A map from Catala enumeration names to the corresponding Z3 sort, from which we can retrieve constructors and accessors *) - ctx_z3matchsubsts : (typed expr, Expr.expr) Var.Map.t; + ctx_z3matchsubsts : (typed naked_expr, Expr.expr) Var.Map.t; (* A map from Catala temporary variables, generated when translating a match, to the corresponding enum accessor call as a Z3 expression *) ctx_z3structs : Sort.sort StructMap.t; @@ -66,14 +66,14 @@ type context = { (** [add_funcdecl] adds the mapping between the Catala variable [v] and the Z3 function declaration [fd] to the context **) let add_funcdecl - (v : typed expr Var.t) + (v : typed naked_expr Var.t) (fd : FuncDecl.func_decl) (ctx : context) : context = { ctx with ctx_funcdecl = Var.Map.add v fd ctx.ctx_funcdecl } (** [add_z3var] adds the mapping between [name] and the Catala variable [v] to the context **) -let add_z3var (name : string) (v : typed expr Var.t) (ctx : context) : context = +let add_z3var (name : string) (v : typed naked_expr Var.t) (ctx : context) : context = { ctx with ctx_z3vars = StringMap.add name v ctx.ctx_z3vars } (** [add_z3enum] adds the mapping between the Catala enumeration [enum] and the @@ -84,7 +84,7 @@ let add_z3enum (enum : EnumName.t) (sort : Sort.sort) (ctx : context) : context (** [add_z3var] adds the mapping between temporary variable [v] and the Z3 expression [e] representing an accessor application to the context **) -let add_z3matchsubst (v : typed expr Var.t) (e : Expr.expr) (ctx : context) : +let add_z3matchsubst (v : typed naked_expr Var.t) (e : Expr.expr) (ctx : context) : context = { ctx with ctx_z3matchsubsts = Var.Map.add v e ctx.ctx_z3matchsubsts } @@ -390,7 +390,7 @@ let translate_lit (ctx : context) (l : lit) : Expr.expr = corresponding to the variable [v]. If no such function declaration exists yet, we construct it and add it to the context, thus requiring to return a new context *) -let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : +let find_or_create_funcdecl (ctx : context) (v : typed naked_expr Var.t) : context * FuncDecl.func_decl = match Var.Map.find_opt v ctx.ctx_funcdecl with | Some fd -> ctx, fd @@ -420,7 +420,7 @@ let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : let rec translate_op (ctx : context) (op : operator) - (args : 'm marked_expr list) : context * Expr.expr = + (args : 'm expr list) : context * Expr.expr = match op with | Ternop _top -> let _e1, _e2, _e3 = @@ -628,11 +628,11 @@ let rec translate_op (** [translate_expr] translate the expression [vc] to its corresponding Z3 expression **) -and translate_expr (ctx : context) (vc : 'm marked_expr) : context * Expr.expr = +and translate_expr (ctx : context) (vc : 'm expr) : context * Expr.expr = let translate_match_arm (head : Expr.expr) (ctx : context) - (e : 'm marked_expr * FuncDecl.func_decl list) : context * Expr.expr = + (e : 'm expr * FuncDecl.func_decl list) : context * Expr.expr = let e, accessors = e in match Marked.unmark e with | EAbs (e, _) -> @@ -802,7 +802,7 @@ module Backend = struct let is_model_empty (m : model) : bool = List.length (Z3.Model.get_decls m) = 0 - let translate_expr (ctx : backend_context) (e : 'm marked_expr) = + let translate_expr (ctx : backend_context) (e : 'm expr) = translate_expr ctx e let init_backend () = @@ -810,7 +810,7 @@ module Backend = struct let make_context (decl_ctx : decl_ctx) - (free_vars_typ : (typed expr, typ Marked.pos) Var.Map.t) : backend_context + (free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t) : backend_context = let cfg = (if !Cli.disable_counterexamples then [] else ["model", "true"]) From 15dfef980976128e0d076f4ad27b5fa77504180c Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:37:58 +0200 Subject: [PATCH 20/31] Add a type alias for clarity of Shared_ast.Expr --- compiler/shared_ast/expr.ml | 6 +- compiler/shared_ast/expr.mli | 116 ++++++++++++++++++----------------- 2 files changed, 63 insertions(+), 59 deletions(-) diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index f2083550..f96da1bd 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -18,6 +18,8 @@ open Utils open Definitions +type 'a box = 'a Bindlib.box + (** Functions handling the types of [shared_ast] *) (* Basic block constructors *) @@ -147,8 +149,8 @@ let fold_marks let map (type a) (ctx : 'ctx) - ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) gexpr Bindlib.box) - (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) gexpr Bindlib.box = + ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) gexpr box) + (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) gexpr box = let m = Marked.get_mark e in match Marked.unmark e with | ELit l -> elit l m diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index f0348ac9..a4585a40 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -20,93 +20,95 @@ open Utils open Definitions +type 'a box = 'a Bindlib.box + (** {2 Boxed constructors} *) -val box : ('a, 't) gexpr -> ('a, 't) gexpr Bindlib.box -val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr Bindlib.box +val box : ('a, 't) gexpr -> ('a, 't) gexpr box +val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr box val etuple : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box list -> StructName.t option -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val etupleaccess : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> StructName.t option -> marked_typ list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val einj : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> EnumName.t -> marked_typ list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val ematch : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> + ('a, 't) gexpr box list -> EnumName.t -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val earray : - ('a any, 't) gexpr Bindlib.box list -> + ('a any, 't) gexpr box list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box -val elit : 'a any glit -> 't -> ('a, 't) gexpr Bindlib.box +val elit : 'a any glit -> 't -> ('a, 't) gexpr box val eabs : - (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder Bindlib.box -> + (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder box -> marked_typ list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eapp : - ('a any, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box list -> + ('a any, 't) gexpr box -> + ('a, 't) gexpr box list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eassert : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box -val eop : operator -> 't -> (_ any, 't) gexpr Bindlib.box +val eop : operator -> 't -> (_ any, 't) gexpr box val edefault : - (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box list -> - ('a, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr box list -> + ('a, 't) gexpr box -> + ('a, 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eifthenelse : - ('a any, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> + ('a any, 't) gexpr box -> + ('a, 't) gexpr box -> + ('a, 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eerroronempty : - (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val ecatch : - (lcalc, 't) gexpr Bindlib.box -> + (lcalc, 't) gexpr box -> except -> - (lcalc, 't) gexpr Bindlib.box -> + (lcalc, 't) gexpr box -> 't -> - (lcalc, 't) gexpr Bindlib.box + (lcalc, 't) gexpr box -val eraise : except -> 't -> (lcalc, 't) gexpr Bindlib.box +val eraise : except -> 't -> (lcalc, 't) gexpr box (** Manipulation of marks *) @@ -130,15 +132,15 @@ val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark val untype : - ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr Bindlib.box + ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box (** {2 Traversal functions} *) val map : 'ctx -> - f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box) -> + f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) gexpr box) -> (('a, 't1) naked_gexpr, 't2) Marked.t -> - ('a, 't2) gexpr Bindlib.box + ('a, 't2) gexpr box (** Flat (non-recursive) mapping on expressions. If you want to apply a map transform to an expression, you can save up @@ -161,30 +163,30 @@ val map : val map_top_down : f:(('a, 't1) gexpr -> (('a, 't1) naked_gexpr, 't2) Marked.t) -> ('a, 't1) gexpr -> - ('a, 't2) gexpr Bindlib.box + ('a, 't2) gexpr box (** Recursively applies [f] to the nodes of the expression tree. The type returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) val map_marks : - f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box + f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr box (** {2 Expression building helpers} *) -val make_var : 'a Bindlib.var * 'b -> ('a * 'b) Bindlib.box +val make_var : 'a Bindlib.var * 'b -> ('a * 'b) box val make_abs : ('a, 't) naked_gexpr Var.vars -> - ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr box -> typ Marked.pos list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val make_app : - ((_ any, 'm mark) naked_gexpr as 'e) marked Bindlib.box -> - 'e marked Bindlib.box list -> + ((_ any, 'm mark) naked_gexpr as 'e) marked box -> + 'e marked box list -> 'm mark -> - 'e marked Bindlib.box + 'e marked box val empty_thunked_term : 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) naked_gexpr marked @@ -192,27 +194,27 @@ val empty_thunked_term : val make_let_in : 'e Bindlib.var -> marked_typ -> - 'e anyexpr marked Bindlib.box -> - 'e marked Bindlib.box -> + 'e anyexpr marked box -> + 'e marked box -> Utils.Pos.t -> - 'e marked Bindlib.box + 'e marked box val make_let_in_raw : ('a any, 't) naked_gexpr Bindlib.var -> marked_typ -> - ('a, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr box -> + ('a, 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box (** Version with any mark; to be removed once we use the [mark] type everywhere. *) val make_multiple_let_in : 'e Var.vars -> marked_typ list -> - 'e marked Bindlib.box list -> - 'e marked Bindlib.box -> + 'e marked box list -> + 'e marked box -> Pos.t -> - 'e marked Bindlib.box + 'e marked box val make_default : (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr list -> @@ -236,7 +238,7 @@ val make_default : (** {2 Transformations} *) val remove_logging_calls : - ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked Bindlib.box + ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked box (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) From a9c8bab2b393a19acae1806543d9d3872c737349 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 17:29:00 +0200 Subject: [PATCH 21/31] Same treatment for `typ` and `marked_typ` --- compiler/dcalc/typing.ml | 36 ++++++++++---------- compiler/dcalc/typing.mli | 4 +-- compiler/desugared/ast.ml | 8 ++--- compiler/desugared/ast.mli | 12 +++---- compiler/desugared/desugared_to_scope.ml | 24 ++++++------- compiler/lcalc/ast.ml | 2 +- compiler/lcalc/ast.mli | 5 ++- compiler/lcalc/compile_without_exceptions.ml | 2 +- compiler/lcalc/to_ocaml.ml | 16 ++++----- compiler/lcalc/to_ocaml.mli | 6 ++-- compiler/plugins/api_web.ml | 8 ++--- compiler/plugins/json_schema.ml | 6 ++-- compiler/scalc/ast.ml | 23 +++++++------ compiler/scalc/compile_from_lambda.ml | 32 ++++++++--------- compiler/scalc/print.ml | 6 ++-- compiler/scalc/to_python.ml | 10 +++--- compiler/scopelang/ast.ml | 10 +++--- compiler/scopelang/ast.mli | 6 ++-- compiler/scopelang/dependency.ml | 2 +- compiler/scopelang/dependency.mli | 2 +- compiler/scopelang/print.ml | 4 +-- compiler/scopelang/scope_to_dcalc.ml | 12 +++---- compiler/shared_ast/definitions.ml | 28 +++++++-------- compiler/shared_ast/expr.ml | 10 +++--- compiler/shared_ast/expr.mli | 26 +++++++------- compiler/shared_ast/print.ml | 6 ++-- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/scope.ml | 2 +- compiler/shared_ast/scope.mli | 2 +- compiler/surface/ast.ml | 9 ++--- compiler/surface/desugaring.ml | 20 +++++------ compiler/surface/name_resolution.ml | 20 +++++------ compiler/surface/name_resolution.mli | 12 +++---- compiler/verification/conditions.ml | 6 ++-- compiler/verification/conditions.mli | 2 +- compiler/verification/io.ml | 4 +-- compiler/verification/io.mli | 4 +-- compiler/verification/z3backend.real.ml | 10 +++--- 38 files changed, 200 insertions(+), 199 deletions(-) diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 59797316..794256df 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -32,12 +32,12 @@ module Any = end) () -type unionfind_typ = typ Marked.pos UnionFind.elem -(** We do not reuse {!type: Dcalc.Ast.typ} because we have to include a new +type unionfind_typ = naked_typ Marked.pos UnionFind.elem +(** We do not reuse {!type: Dcalc.Ast.naked_typ} because we have to include a new [TAny] variant. Indeed, error terms can have any type and this has to be captured by the type sytem. *) -and typ = +and naked_typ = | TLit of A.typ_lit | TArrow of unionfind_typ * unionfind_typ | TTuple of unionfind_typ list @@ -47,7 +47,7 @@ and typ = | TArray of unionfind_typ | TAny of Any.t -let rec typ_to_ast (ty : unionfind_typ) : A.marked_typ = +let rec typ_to_ast (ty : unionfind_typ) : A.typ = let ty, pos = UnionFind.get (UnionFind.find ty) in match ty with | TLit l -> A.TLit l, pos @@ -59,7 +59,7 @@ let rec typ_to_ast (ty : unionfind_typ) : A.marked_typ = | TAny _ -> A.TAny, pos | TArray t1 -> A.TArray (typ_to_ast t1), pos -let rec ast_to_typ (ty : A.marked_typ) : unionfind_typ = +let rec ast_to_typ (ty : A.typ) : unionfind_typ = let ty' = match Marked.unmark ty with | A.TLit l -> TLit l @@ -75,23 +75,23 @@ let rec ast_to_typ (ty : A.marked_typ) : unionfind_typ = (** {1 Types and unification} *) -let typ_needs_parens (t : typ Marked.pos UnionFind.elem) : bool = +let typ_needs_parens (t : unionfind_typ) : bool = let t = UnionFind.get (UnionFind.find t) in match Marked.unmark t with TArrow _ | TArray _ -> true | _ -> false let rec format_typ (ctx : A.decl_ctx) (fmt : Format.formatter) - (typ : typ Marked.pos UnionFind.elem) : unit = + (naked_typ : unionfind_typ) : unit = let format_typ = format_typ ctx in let format_typ_with_parens (fmt : Format.formatter) - (t : typ Marked.pos UnionFind.elem) = + (t : unionfind_typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in - let typ = UnionFind.get (UnionFind.find typ) in - match Marked.unmark typ with + let naked_typ = UnionFind.get (UnionFind.find naked_typ) in + match Marked.unmark naked_typ with | TLit l -> Format.fprintf fmt "%a" A.Print.tlit l | TTuple ts -> Format.fprintf fmt "@[(%a)]" @@ -112,8 +112,8 @@ let rec format_typ exception Type_error of A.any_marked_expr - * typ Marked.pos UnionFind.elem - * typ Marked.pos UnionFind.elem + * unionfind_typ + * unionfind_typ type mark = { pos : Pos.t; uf : unionfind_typ } @@ -121,8 +121,8 @@ type mark = { pos : Pos.t; uf : unionfind_typ } let rec unify (ctx : A.decl_ctx) (e : ('a, 'm A.mark) A.gexpr) (* used for error context *) - (t1 : typ Marked.pos UnionFind.elem) - (t2 : typ Marked.pos UnionFind.elem) : unit = + (t1 : unionfind_typ) + (t2 : unionfind_typ) : unit = let unify = unify ctx in (* Cli.debug_format "Unifying %a and %a" (format_typ ctx) t1 (format_typ ctx) t2; *) @@ -209,7 +209,7 @@ let handle_type_error ctx e t1 t2 = This allows us to have a simpler type system, while we argue the syntactic burden of operator annotations helps the programmer visualize the type flow in the code. *) -let op_type (op : A.operator Marked.pos) : typ Marked.pos UnionFind.elem = +let op_type (op : A.operator Marked.pos) : unionfind_typ = let pos = Marked.get_mark op in let bt = UnionFind.make (TLit TBool, pos) in let it = UnionFind.make (TLit TInt, pos) in @@ -276,7 +276,7 @@ let op_type (op : A.operator Marked.pos) : typ Marked.pos UnionFind.elem = (** {1 Double-directed typing} *) -type 'e env = ('e, typ Marked.pos UnionFind.elem) A.Var.Map.t +type 'e env = ('e, unionfind_typ) A.Var.Map.t let add_pos e ty = Marked.mark (A.Expr.pos e) ty let ty (_, { uf; _ }) = uf @@ -470,7 +470,7 @@ let rec typecheck_expr_bottom_up and typecheck_expr_top_down (ctx : A.decl_ctx) (env : 'm Ast.naked_expr env) - (tau : typ Marked.pos UnionFind.elem) + (tau : unionfind_typ) (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) @@ -670,7 +670,7 @@ let infer_type (type m) ctx (e : m Ast.expr) = let check_type (ctx : A.decl_ctx) (e : 'm Ast.expr) - (tau : A.typ Marked.pos) = + (tau : A.typ) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore @@ wrap ctx (typecheck_expr_top_down ctx A.Var.Map.empty (ast_to_typ tau)) e diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 8602c3c4..362c4f29 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -24,9 +24,9 @@ val infer_types : (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) -val infer_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos +val infer_type : decl_ctx -> 'm Ast.expr -> typ (** Gets the outer type of the given expression, using either the existing annotations or inference *) -val check_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos -> unit +val check_type : decl_ctx -> 'm Ast.expr -> typ -> unit val infer_types_program : untyped Ast.program -> typed Ast.program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index f3b001d0..e44b0365 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -114,7 +114,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * marked_typ) option; + rule_parameter : (naked_expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -154,7 +154,7 @@ module Rule = struct | Some _, None -> 1 end -let empty_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule = +let empty_rule (pos : Pos.t) (have_parameter : typ option) : rule = { rule_just = Bindlib.box (ELit (LBool false), pos); rule_cons = Bindlib.box (ELit LEmptyError, pos); @@ -167,7 +167,7 @@ let empty_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule = rule_label = Unlabeled; } -let always_false_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule +let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule = { rule_just = Bindlib.box (ELit (LBool true), pos); @@ -191,7 +191,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : marked_typ; + scope_def_typ : typ; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index bfe030e6..177074bf 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -72,17 +72,17 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * marked_typ) option; + rule_parameter : (naked_expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } module Rule : Set.OrderedType with type t = rule -val empty_rule : Pos.t -> typ Marked.pos option -> rule -val always_false_rule : Pos.t -> typ Marked.pos option -> rule +val empty_rule : Pos.t -> typ option -> rule +val always_false_rule : Pos.t -> typ option -> rule -type assertion = naked_expr Marked.pos Bindlib.box +type assertion = expr Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -92,7 +92,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : typ Marked.pos; + scope_def_typ : typ; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } @@ -115,5 +115,5 @@ type program = { (** {1 Helpers} *) -val locations_used : naked_expr Marked.pos -> LocationSet.t +val locations_used : expr -> LocationSet.t val free_variables : rule RuleMap.t -> Pos.t ScopeDefMap.t diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 2e723a1e..ae845a68 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -31,15 +31,15 @@ type ctx = { } let tag_with_log_entry - (e : Scopelang.Ast.naked_expr Marked.pos) + (e : Scopelang.Ast.expr) (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - Scopelang.Ast.naked_expr Marked.pos = + Scopelang.Ast.expr = ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) -let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : - Scopelang.Ast.naked_expr Marked.pos Bindlib.box = +let rec translate_expr (ctx : ctx) (e : Ast.expr) : + Scopelang.Ast.expr Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> @@ -187,7 +187,7 @@ let rec rule_tree_to_expr (ctx : ctx) (def_pos : Pos.t) (is_func : Ast.naked_expr Var.t option) - (tree : rule_tree) : Scopelang.Ast.naked_expr Marked.pos Bindlib.box = + (tree : rule_tree) : Scopelang.Ast.expr Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r in @@ -195,8 +195,8 @@ let rec rule_tree_to_expr whole rule tree into a function, we need to perform some alpha-renaming of all the expressions *) let substitute_parameter - (e : Ast.naked_expr Marked.pos Bindlib.box) - (rule : Ast.rule) : Ast.naked_expr Marked.pos Bindlib.box = + (e : Ast.expr Bindlib.box) + (rule : Ast.rule) : Ast.expr Bindlib.box = match is_func, rule.Ast.rule_parameter with | Some new_param, Some (old_param, _) -> let binder = Bindlib.bind_var old_param e in @@ -236,8 +236,8 @@ let rec rule_tree_to_expr (fun rule -> substitute_parameter rule.Ast.rule_cons rule) base_rules in - let translate_and_unbox_list (list : Ast.naked_expr Marked.pos Bindlib.box list) : - Scopelang.Ast.naked_expr Marked.pos Bindlib.box list = + let translate_and_unbox_list (list : Ast.expr Bindlib.box list) : + Scopelang.Ast.expr Bindlib.box list = List.map (fun e -> (* There are two levels of boxing here, the outermost is introduced by @@ -304,10 +304,10 @@ let translate_def (ctx : ctx) (def_info : Ast.ScopeDef.t) (def : Ast.rule Ast.RuleMap.t) - (typ : typ Marked.pos) + (typ : typ) (io : Scopelang.Ast.io) ~(is_cond : bool) - ~(is_subscope_var : bool) : Scopelang.Ast.naked_expr Marked.pos = + ~(is_subscope_var : bool) : Scopelang.Ast.expr = (* Here, we have to transform this list of rules into a default tree. *) let is_def_func = match Marked.unmark typ with TArrow (_, _) -> true | _ -> false @@ -319,7 +319,7 @@ let translate_def let all_rules_not_func = Ast.RuleMap.for_all (fun n r -> not (is_rule_func n r)) def in - let is_def_func_param_typ : typ Marked.pos option = + let is_def_func_param_typ : typ option = if is_def_func && all_rules_func then match Marked.unmark typ with | TArrow (t_param, _) -> Some t_param diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 63d46fea..056fb89c 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -28,7 +28,7 @@ let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) let some_constr : EnumConstructor.t = EnumConstructor.fresh ("ESome", Pos.no_pos) -let option_enum_config : (EnumConstructor.t * typ Marked.pos) list = +let option_enum_config : (EnumConstructor.t * typ) list = [none_constr, (TLit TUnit, Pos.no_pos); some_constr, (TAny, Pos.no_pos)] (* FIXME: proper typing in all the constructors below *) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index f2c1e133..5810ee9b 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -14,7 +14,6 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils open Shared_ast (** Abstract syntax tree for the lambda calculus *) @@ -33,7 +32,7 @@ type 'm program = 'm naked_expr Shared_ast.program val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t -val option_enum_config : (EnumConstructor.t * typ Marked.pos) list +val option_enum_config : (EnumConstructor.t * typ) list val make_none : 'm mark -> 'm expr Bindlib.box val make_some : 'm expr Bindlib.box -> 'm expr Bindlib.box @@ -46,7 +45,7 @@ val make_matchopt_with_abs_arms : val make_matchopt : 'm mark -> 'm naked_expr Var.t -> - typ Marked.pos -> + typ -> 'm expr Bindlib.box -> 'm expr Bindlib.box -> 'm expr Bindlib.box -> diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 9702b1f6..7eadc50c 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -120,7 +120,7 @@ let add_var Since positions where there is thunked expressions is exactly where we will put option expressions. Hence, the transformation simply reduce [unit -> 'a] into ['a option] recursivly. There is no polymorphism inside catala. *) -let rec translate_typ (tau : typ Marked.pos) : typ Marked.pos = +let rec translate_typ (tau : typ) : typ = (Fun.flip Marked.same_mark_as) tau begin diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index 9a16842e..dbd18151 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -21,7 +21,7 @@ open String_common module D = Dcalc.Ast let find_struct (s : StructName.t) (ctx : decl_ctx) : - (StructFieldName.t * typ Marked.pos) list = + (StructFieldName.t * typ) list = try StructMap.find s ctx.ctx_structs with Not_found -> let s_name, pos = StructName.get_info s in @@ -30,7 +30,7 @@ let find_struct (s : StructName.t) (ctx : decl_ctx) : s_name let find_enum (en : EnumName.t) (ctx : decl_ctx) : - (EnumConstructor.t * typ Marked.pos) list = + (EnumConstructor.t * typ) list = try EnumMap.find en ctx.ctx_enums with Not_found -> let en_name, pos = EnumName.get_info en in @@ -183,7 +183,7 @@ let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit +let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit = match Marked.unmark ty with | TLit TUnit -> Format.fprintf fmt "embed_unit" @@ -198,11 +198,11 @@ let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit | TArray ty -> Format.fprintf fmt "embed_array (%a)" typ_embedding_name ty | _ -> Format.fprintf fmt "unembeddable" -let typ_needs_parens (e : typ Marked.pos) : bool = +let typ_needs_parens (e : typ) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = +let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = + let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -450,7 +450,7 @@ let rec format_expr let format_struct_embedding (fmt : Format.formatter) ((struct_name, struct_fields) : - StructName.t * (StructFieldName.t * typ Marked.pos) list) = + StructName.t * (StructFieldName.t * typ) list) = if List.length struct_fields = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_struct_name struct_name format_to_module_name (`Sname struct_name) @@ -473,7 +473,7 @@ let format_struct_embedding let format_enum_embedding (fmt : Format.formatter) ((enum_name, enum_cases) : - EnumName.t * (EnumConstructor.t * typ Marked.pos) list) = + EnumName.t * (EnumConstructor.t * typ) list) = if List.length enum_cases = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_to_module_name (`Ename enum_name) format_enum_name enum_name diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index dee24908..a9d46711 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -23,12 +23,12 @@ open Ast val avoid_keywords : string -> string val find_struct : - StructName.t -> decl_ctx -> (StructFieldName.t * typ Marked.pos) list + StructName.t -> decl_ctx -> (StructFieldName.t * typ) list val find_enum : - EnumName.t -> decl_ctx -> (EnumConstructor.t * typ Marked.pos) list + EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list -val typ_needs_parens : typ Marked.pos -> bool +val typ_needs_parens : typ -> bool val needs_parens : 'm expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit val format_enum_cons_name : Format.formatter -> EnumConstructor.t -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index e3e0fc76..a615637c 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -60,8 +60,8 @@ module To_jsoo = struct | TBool -> "bool Js.t" | TDate -> "Js.js_string Js.t") - let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = + let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = + let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -137,7 +137,7 @@ module To_jsoo = struct (type_ordering : Scopelang.Dependency.TVertex.t list) (fmt : Format.formatter) (ctx : decl_ctx) : unit = - let format_prop_or_meth fmt (struct_field_type : typ Marked.pos) = + let format_prop_or_meth fmt (struct_field_type : typ) = match Marked.unmark struct_field_type with | TArrow _ -> Format.fprintf fmt "Js.meth" | _ -> Format.fprintf fmt "Js.readonly_prop" @@ -224,7 +224,7 @@ module To_jsoo = struct in let format_enum_decl fmt - (enum_name, (enum_cons : (EnumConstructor.t * typ Marked.pos) list)) = + (enum_name, (enum_cons : (EnumConstructor.t * typ) list)) = let fmt_enum_name fmt _ = format_enum_name fmt enum_name in let fmt_module_enum_name fmt _ = To_ocaml.format_to_module_name fmt (`Ename enum_name) diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 5f0a9cf6..f933360d 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -69,7 +69,7 @@ module To_json = struct | TDate -> Format.fprintf fmt "\"type\": \"string\",@\n\"format\": \"date\"" | TDuration -> failwith "TODO: tlit duration" - let rec fmt_type fmt (typ : marked_typ) = + let rec fmt_type fmt (typ : typ) = match Marked.unmark typ with | TLit tlit -> fmt_tlit fmt tlit | TStruct sname -> @@ -110,8 +110,8 @@ module To_json = struct | _ -> failwith "unreachable: only structs and enums are collected." in let rec collect_required_type_defs_from_scope_input - (input_struct : StructName.t) : marked_typ list = - let rec collect (acc : marked_typ list) (t : marked_typ) : marked_typ list + (input_struct : StructName.t) : typ list = + let rec collect (acc : typ list) (t : typ) : typ list = match Marked.unmark t with | TStruct s -> diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index 0a9d2157..bc4a4cb3 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -25,26 +25,27 @@ let dead_value = LocalName.fresh ("dead_value", Pos.no_pos) let handle_default = TopLevelName.fresh ("handle_default", Pos.no_pos) let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) -type naked_expr = +type expr = naked_expr Marked.pos +and naked_expr = | EVar of LocalName.t | EFunc of TopLevelName.t - | EStruct of naked_expr Marked.pos list * StructName.t - | EStructFieldAccess of naked_expr Marked.pos * StructFieldName.t * StructName.t - | EInj of naked_expr Marked.pos * EnumConstructor.t * EnumName.t - | EArray of naked_expr Marked.pos list + | EStruct of expr list * StructName.t + | EStructFieldAccess of expr * StructFieldName.t * StructName.t + | EInj of expr * EnumConstructor.t * EnumName.t + | EArray of expr list | ELit of L.lit - | EApp of naked_expr Marked.pos * naked_expr Marked.pos list + | EApp of expr * expr list | EOp of operator type stmt = | SInnerFuncDef of LocalName.t Marked.pos * func - | SLocalDecl of LocalName.t Marked.pos * typ Marked.pos - | SLocalDef of LocalName.t Marked.pos * naked_expr Marked.pos + | SLocalDecl of LocalName.t Marked.pos * typ + | SLocalDef of LocalName.t Marked.pos * expr | STryExcept of block * except * block | SRaise of except - | SIfThenElse of naked_expr Marked.pos * block * block + | SIfThenElse of expr * block * block | SSwitch of - naked_expr Marked.pos + expr * EnumName.t * (block (* Statements corresponding to arm closure body*) * (* Variable instantiated with enum payload *) LocalName.t) @@ -55,7 +56,7 @@ type stmt = and block = stmt Marked.pos list and func = { - func_params : (LocalName.t Marked.pos * typ Marked.pos) list; + func_params : (LocalName.t Marked.pos * typ) list; func_body : block; } diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 9e1ef29a..f7263f21 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -30,15 +30,15 @@ type 'm ctxt = { (* Expressions can spill out side effect, hence this function also returns a list of statements to be prepended before the expression is evaluated *) -let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : - A.block * A.naked_expr Marked.pos = - match Marked.unmark naked_expr with +let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : + A.block * A.expr = + match Marked.unmark expr with | EVar v -> let local_var = try A.EVar (Var.Map.find v ctxt.var_dict) with Not_found -> A.EFunc (Var.Map.find v ctxt.func_dict) in - [], (local_var, Expr.pos naked_expr) + [], (local_var, Expr.pos expr) | ETuple (args, Some s_name) -> let args_stmts, new_args = List.fold_left @@ -49,14 +49,14 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : in let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in - args_stmts, (A.EStruct (new_args, s_name), Expr.pos naked_expr) + args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" | ETupleAccess (e1, num_field, Some s_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let field_name = fst (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) in - e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos naked_expr) + e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) | ETupleAccess (_, _, None, _) -> failwith "Non-struct tuples cannot be compiled to scalc" | EInj (e1, num_cons, e_name, _) -> @@ -64,7 +64,7 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : let cons_name = fst (List.nth (EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) in - e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos naked_expr) + e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos expr) | EApp (f, args) -> let f_stmts, new_f = translate_expr ctxt f in let args_stmts, new_args = @@ -75,7 +75,7 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : ([], []) args in let new_args = List.rev new_args in - f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos naked_expr) + f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos expr) | EArray args -> let args_stmts, new_args = List.fold_left @@ -85,9 +85,9 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : ([], []) args in let new_args = List.rev new_args in - args_stmts, (A.EArray new_args, Expr.pos naked_expr) - | EOp op -> [], (A.EOp op, Expr.pos naked_expr) - | ELit l -> [], (A.ELit l, Expr.pos naked_expr) + args_stmts, (A.EArray new_args, Expr.pos expr) + | EOp op -> [], (A.EOp op, Expr.pos expr) + | ELit l -> [], (A.ELit l, Expr.pos expr) | _ -> let tmp_var = A.LocalName.fresh @@ -100,7 +100,7 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : let v = Marked.unmark (A.LocalName.get_info v) in let tmp_rex = Re.Pcre.regexp "^temp_" in if Re.Pcre.pmatch ~rex:tmp_rex v then v else "temp_" ^ v), - Expr.pos naked_expr ) + Expr.pos expr ) in let ctxt = { @@ -109,11 +109,11 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : context_name = Marked.unmark (A.LocalName.get_info tmp_var); } in - let tmp_stmts = translate_statements ctxt naked_expr in - ( ( A.SLocalDecl ((tmp_var, Expr.pos naked_expr), (TAny, Expr.pos naked_expr)), - Expr.pos naked_expr ) + let tmp_stmts = translate_statements ctxt expr in + ( ( A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), + Expr.pos expr ) :: tmp_stmts, - (A.EVar tmp_var, Expr.pos naked_expr) ) + (A.EVar tmp_var, Expr.pos expr) ) and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 8ad6ef8d..4bf10438 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -18,7 +18,7 @@ open Utils open Shared_ast open Ast -let needs_parens (_e : naked_expr Marked.pos) : bool = false +let needs_parens (_e : expr) : bool = false let format_local_name (fmt : Format.formatter) (v : LocalName.t) : unit = Format.fprintf fmt "%a_%s" LocalName.format_t v @@ -28,9 +28,9 @@ let rec format_expr (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) - (e : naked_expr Marked.pos) : unit = + (e : expr) : unit = let format_expr = format_expr decl_ctx ~debug in - let format_with_parens (fmt : Format.formatter) (e : naked_expr Marked.pos) = + let format_with_parens (fmt : Format.formatter) (e : expr) = if needs_parens e then Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_expr e Print.punctuation ")" diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index d4014ec8..03adca34 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -144,12 +144,12 @@ let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let typ_needs_parens (e : typ Marked.pos) : bool = +let typ_needs_parens (e : typ) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = +let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = let format_typ = format_typ in - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = + let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -232,7 +232,7 @@ let format_toplevel_name (fmt : Format.formatter) (v : TopLevelName.t) : unit = let v_str = Marked.unmark (TopLevelName.get_info v) in format_name_cleaned fmt v_str -let needs_parens (e : naked_expr Marked.pos) : bool = +let needs_parens (e : expr) : bool = match Marked.unmark e with | ELit (LBool _ | LUnit) | EVar _ | EOp _ -> false | _ -> true @@ -262,7 +262,7 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) - (e : naked_expr Marked.pos) : unit = + (e : expr) : unit = match Marked.unmark e with | EVar v -> format_var fmt v | EFunc f -> format_toplevel_name fmt f diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 54121fd0..c7935b6b 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,8 +36,8 @@ Set.Make (struct let compare = Expr.compare_location end) +type expr = (scopelang, Pos.t) gexpr type naked_expr = (scopelang, Pos.t) naked_gexpr -type expr = naked_expr Marked.pos module ExprMap = Map.Make (struct type t = expr @@ -45,7 +45,7 @@ module ExprMap = Map.Make (struct let compare = Expr.compare end) -let rec locations_used (e : naked_expr Marked.pos) : LocationSet.t = +let rec locations_used (e : expr) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty @@ -84,13 +84,13 @@ type io_input = NoInput | OnlyInput | Reentrant type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } type rule = - | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos - | Assertion of naked_expr Marked.pos + | Definition of location Marked.pos * typ * io * expr + | Assertion of expr | Call of ScopeName.t * SubScopeName.t type scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (marked_typ * io) ScopeVarMap.t; + scope_sig : (typ * io) ScopeVarMap.t; scope_decl_rules : rule list; } diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index dc567c9b..83646ab0 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -70,13 +70,13 @@ type io = { (** Characterization of the input/output status of a scope variable. *) type rule = - | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos - | Assertion of naked_expr Marked.pos + | Definition of location Marked.pos * typ * io * expr + | Assertion of expr | Call of ScopeName.t * SubScopeName.t type scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (marked_typ * io) ScopeVarMap.t; + scope_sig : (typ * io) ScopeVarMap.t; scope_decl_rules : rule list; } diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index 0f70fe27..4551ac2e 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -164,7 +164,7 @@ module TTopologicalTraversal = Graph.Topological.Make (TDependencies) module TSCC = Graph.Components.Make (TDependencies) (** Tarjan's stongly connected components algorithm, provided by OCamlGraph *) -let rec get_structs_or_enums_in_type (t : typ Marked.pos) : TVertexSet.t = +let rec get_structs_or_enums_in_type (t : typ) : TVertexSet.t = match Marked.unmark t with | TStruct s -> TVertexSet.singleton (TVertex.Struct s) | TEnum e -> TVertexSet.singleton (TVertex.Enum e) diff --git a/compiler/scopelang/dependency.mli b/compiler/scopelang/dependency.mli index 78eafa4d..3e8f7d39 100644 --- a/compiler/scopelang/dependency.mli +++ b/compiler/scopelang/dependency.mli @@ -49,6 +49,6 @@ module TVertexSet : Set.S with type elt = TVertex.t module TDependencies : Graph.Sig.P with type V.t = TVertex.t and type E.label = Pos.t -val get_structs_or_enums_in_type : typ Marked.pos -> TVertexSet.t +val get_structs_or_enums_in_type : typ -> TVertexSet.t val build_type_graph : struct_ctx -> enum_ctx -> TDependencies.t val check_type_cycles : struct_ctx -> enum_ctx -> TVertex.t list diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index cee49080..42330c22 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -21,7 +21,7 @@ open Ast let struc ctx (fmt : Format.formatter) - ((name, fields) : StructName.t * (StructFieldName.t * typ Marked.pos) list) + ((name, fields) : StructName.t * (StructFieldName.t * typ) list) : unit = Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" Print.keyword "type" StructName.format_t name Print.punctuation "=" Print.punctuation "{" @@ -35,7 +35,7 @@ let struc let enum ctx (fmt : Format.formatter) - ((name, cases) : EnumName.t * (EnumConstructor.t * typ Marked.pos) list) : + ((name, cases) : EnumName.t * (EnumConstructor.t * typ) list) : unit = Format.fprintf fmt "%a %a %a @\n@[ %a@]" Print.keyword "type" EnumName.format_t name Print.punctuation "=" diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 5520d4d0..8b336900 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -19,7 +19,7 @@ open Shared_ast type scope_var_ctx = { scope_var_name : ScopeVar.t; - scope_var_typ : typ; + scope_var_typ : naked_typ; scope_var_io : Ast.io; } @@ -40,9 +40,9 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t + (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; local_vars : (Ast.naked_expr, untyped Dcalc.Ast.naked_expr Var.t) Var.Map.t; } @@ -101,8 +101,8 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (excepts : Ast.naked_expr Marked.pos list) : - Ast.naked_expr Marked.pos list = +let collapse_similar_outcomes (excepts : Ast.expr list) : + Ast.expr list = let cons_map = List.fold_left (fun map -> function @@ -133,7 +133,7 @@ let collapse_similar_outcomes (excepts : Ast.naked_expr Marked.pos list) : in excepts -let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : +let rec translate_expr (ctx : ctx) (e : Ast.expr) : untyped Dcalc.Ast.expr Bindlib.box = Bindlib.box_apply (fun (x : untyped Dcalc.Ast.naked_expr) -> Marked.mark (pos_mark_as e) x) diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index a4fbb511..b13ef68c 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -68,16 +68,16 @@ module StateName : Uid.Id with type info = Uid.MarkedString.info = type typ_lit = TBool | TUnit | TInt | TRat | TMoney | TDate | TDuration -type marked_typ = typ Marked.pos +type typ = naked_typ Marked.pos -and typ = +and naked_typ = | TLit of typ_lit - | TTuple of marked_typ list + | TTuple of typ list | TStruct of StructName.t | TEnum of EnumName.t - | TOption of marked_typ - | TArrow of marked_typ * marked_typ - | TArray of marked_typ + | TOption of typ + | TArrow of typ * typ + | TArray of typ | TAny (** {2 Constants and operators} *) @@ -113,7 +113,7 @@ type binop = | Filter type log_entry = - | VarDef of typ + | VarDef of naked_typ (** During code generation, we need to know the type of the variable being logged for embedding *) | BeginCall @@ -202,7 +202,7 @@ and ('a, 't) naked_gexpr = ('a, 't) naked_gexpr Bindlib.var -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EAbs : - (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * marked_typ list + (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * typ list -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EIfThenElse : ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr @@ -228,10 +228,10 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr list * StructName.t option -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | ETupleAccess : - ('a, 't) gexpr * int * StructName.t option * marked_typ list + ('a, 't) gexpr * int * StructName.t option * typ list -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EInj : - ('a, 't) gexpr * int * EnumName.t * marked_typ list + ('a, 't) gexpr * int * EnumName.t * typ list -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EMatch : ('a, 't) gexpr * ('a, 't) gexpr list * EnumName.t @@ -263,7 +263,7 @@ type 'e anyexpr = 'e constraint 'e = (_ any, _) naked_gexpr (** {2 Markings} *) type untyped = { pos : Pos.t } [@@ocaml.unboxed] -type typed = { pos : Pos.t; ty : marked_typ } +type typed = { pos : Pos.t; ty : typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when @@ -305,7 +305,7 @@ type scope_let_kind = type 'e scope_let = { scope_let_kind : scope_let_kind; - scope_let_typ : marked_typ; + scope_let_typ : typ; scope_let_expr : 'e marked; scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; scope_let_pos : Pos.t; @@ -345,7 +345,7 @@ and 'e scopes = | ScopeDef of 'e scope_def constraint 'e = ('a, 'm mark) naked_gexpr -type struct_ctx = (StructFieldName.t * marked_typ) list StructMap.t -type enum_ctx = (EnumConstructor.t * marked_typ) list EnumMap.t +type struct_ctx = (StructFieldName.t * typ) list StructMap.t +type enum_ctx = (EnumConstructor.t * typ) list EnumMap.t type decl_ctx = { ctx_enums : enum_ctx; ctx_structs : struct_ctx } type 'e program = { decl_ctx : decl_ctx; scopes : 'e scopes } diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index f96da1bd..4c23888c 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -98,9 +98,9 @@ let mark_pos (type m) (m : m mark) : Pos.t = let pos (type m) (x : ('a, m mark) Marked.t) : Pos.t = mark_pos (Marked.get_mark x) -let ty (_, m) : marked_typ = match m with Typed { ty; _ } -> ty +let ty (_, m) : typ = match m with Typed { ty; _ } -> ty -let with_ty (type m) (ty : marked_typ) (x : ('a, m mark) Marked.t) : +let with_ty (type m) (ty : typ) (x : ('a, m mark) Marked.t) : ('a, typed mark) Marked.t = Marked.mark (match Marked.get_mark x with @@ -111,7 +111,7 @@ let with_ty (type m) (ty : marked_typ) (x : ('a, m mark) Marked.t) : let map_mark (type m) (pos_f : Pos.t -> Pos.t) - (ty_f : marked_typ -> marked_typ) + (ty_f : typ -> typ) (m : m mark) : m mark = match m with | Untyped { pos } -> Untyped { pos = pos_f pos } @@ -120,7 +120,7 @@ let map_mark let map_mark2 (type m) (pos_f : Pos.t -> Pos.t -> Pos.t) - (ty_f : typed -> typed -> marked_typ) + (ty_f : typed -> typed -> typ) (m1 : m mark) (m2 : m mark) : m mark = match m1, m2 with @@ -130,7 +130,7 @@ let map_mark2 let fold_marks (type m) (pos_f : Pos.t list -> Pos.t) - (ty_f : typed list -> marked_typ) + (ty_f : typed list -> typ) (ms : m mark list) : m mark = match ms with | [] -> invalid_arg "Dcalc.Ast.fold_mark" diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index a4585a40..f2a77758 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -37,7 +37,7 @@ val etupleaccess : (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> StructName.t option -> - marked_typ list -> + typ list -> 't -> ('a, 't) gexpr box @@ -45,7 +45,7 @@ val einj : (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> EnumName.t -> - marked_typ list -> + typ list -> 't -> ('a, 't) gexpr box @@ -65,7 +65,7 @@ val elit : 'a any glit -> 't -> ('a, 't) gexpr box val eabs : (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder box -> - marked_typ list -> + typ list -> 't -> ('a, 't) gexpr box @@ -115,21 +115,21 @@ val eraise : except -> 't -> (lcalc, 't) gexpr box val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t val pos : ('e, _) naked_gexpr marked -> Pos.t -val ty : (_, typed mark) Marked.t -> marked_typ -val with_ty : marked_typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t +val ty : (_, typed mark) Marked.t -> typ +val with_ty : typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t val map_mark : - (Pos.t -> Pos.t) -> (marked_typ -> marked_typ) -> 'm mark -> 'm mark + (Pos.t -> Pos.t) -> (typ -> typ) -> 'm mark -> 'm mark val map_mark2 : (Pos.t -> Pos.t -> Pos.t) -> - (typed -> typed -> marked_typ) -> + (typed -> typed -> typ) -> 'm mark -> 'm mark -> 'm mark val fold_marks : - (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark + (Pos.t list -> Pos.t) -> (typed list -> typ) -> 'm mark list -> 'm mark val untype : ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box @@ -178,7 +178,7 @@ val make_var : 'a Bindlib.var * 'b -> ('a * 'b) box val make_abs : ('a, 't) naked_gexpr Var.vars -> ('a, 't) gexpr box -> - typ Marked.pos list -> + typ list -> 't -> ('a, 't) gexpr box @@ -193,7 +193,7 @@ val empty_thunked_term : val make_let_in : 'e Bindlib.var -> - marked_typ -> + typ -> 'e anyexpr marked box -> 'e marked box -> Utils.Pos.t -> @@ -201,7 +201,7 @@ val make_let_in : val make_let_in_raw : ('a any, 't) naked_gexpr Bindlib.var -> - marked_typ -> + typ -> ('a, 't) gexpr box -> ('a, 't) gexpr box -> 't -> @@ -210,7 +210,7 @@ val make_let_in_raw : val make_multiple_let_in : 'e Var.vars -> - marked_typ list -> + typ list -> 'e marked box list -> 'e marked box -> Pos.t -> @@ -263,7 +263,7 @@ val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int (** Standard comparison function, suitable for e.g. [Set.Make]. Ignores position information *) -val compare_typ : marked_typ -> marked_typ -> int +val compare_typ : typ -> typ -> int val is_value : (_ any, 'm mark) naked_gexpr marked -> bool val free_vars : 'e marked -> 'e Var.Set.t diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 06835326..9077ecf5 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -18,7 +18,7 @@ open Utils open String_common open Definitions -let typ_needs_parens (ty : marked_typ) : bool = +let typ_needs_parens (ty : typ) : bool = match Marked.unmark ty with TArrow _ | TArray _ -> true | _ -> false let uid_list (fmt : Format.formatter) (infos : Uid.MarkedString.info list) : @@ -74,9 +74,9 @@ let enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : unit = (Utils.Cli.format_with_style [ANSITerminal.magenta]) (Format.asprintf "%a" EnumConstructor.format_t c) -let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : marked_typ) : unit = +let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = let typ = typ ctx in - let typ_with_parens (fmt : Format.formatter) (t : marked_typ) = + let typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" typ t else Format.fprintf fmt "%a" typ t in diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index f5b8882e..e0cc7f51 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -33,7 +33,7 @@ val uid_list : Format.formatter -> Uid.MarkedString.info list -> unit val enum_constructor : Format.formatter -> EnumConstructor.t -> unit val tlit : Format.formatter -> typ_lit -> unit val location : Format.formatter -> 'a glocation -> unit -val typ : decl_ctx -> Format.formatter -> marked_typ -> unit +val typ : decl_ctx -> Format.formatter -> typ -> unit val lit : Format.formatter -> 'a glit -> unit val op_kind : Format.formatter -> op_kind -> unit val binop : Format.formatter -> binop -> unit diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index eb16d8b7..3d889b46 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -117,7 +117,7 @@ let build_typ_from_sig (_ctx : decl_ctx) (scope_input_struct_name : StructName.t) (scope_return_struct_name : StructName.t) - (pos : Pos.t) : typ Marked.pos = + (pos : Pos.t) : typ = let input_typ = Marked.mark pos (TStruct scope_input_struct_name) in let result_typ = Marked.mark pos (TStruct scope_return_struct_name) in Marked.mark pos (TArrow (input_typ, result_typ)) diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index b99150ff..524fa8a7 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -111,7 +111,7 @@ val unfold : 'e marked Bindlib.box val build_typ_from_sig : - decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ Marked.pos + decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ (** [build_typ_from_sig ctx in_struct out_struct pos] builds the arrow type for the specified scope *) diff --git a/compiler/surface/ast.ml b/compiler/surface/ast.ml index 5b95f4cd..85034340 100644 --- a/compiler/surface/ast.ml +++ b/compiler/surface/ast.ml @@ -134,7 +134,8 @@ type func_typ = { nude = true; }] -type typ = Base of base_typ | Func of func_typ +type typ = naked_typ Marked.pos +and naked_typ = Base of base_typ | Func of func_typ [@@deriving visitors { @@ -153,7 +154,7 @@ type typ = Base of base_typ | Func of func_typ type struct_decl_field = { struct_decl_field_name : ident Marked.pos; - struct_decl_field_typ : typ Marked.pos; + struct_decl_field_typ : typ; } [@@deriving visitors @@ -189,7 +190,7 @@ type struct_decl = { type enum_decl_case = { enum_decl_case_name : constructor Marked.pos; - enum_decl_case_typ : typ Marked.pos option; + enum_decl_case_typ : typ option; } [@@deriving visitors @@ -671,7 +672,7 @@ type scope_decl_context_scope = { type scope_decl_context_data = { scope_decl_context_item_name : ident Marked.pos; - scope_decl_context_item_typ : typ Marked.pos; + scope_decl_context_item_typ : typ; scope_decl_context_item_attribute : scope_decl_context_io; scope_decl_context_item_states : ident Marked.pos list; } diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 9403afff..164cb98e 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -125,7 +125,7 @@ let rec translate_expr (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) ((naked_expr, pos) : Ast.expression Marked.pos) : - Desugared.Ast.naked_expr Marked.pos Bindlib.box = + Desugared.Ast.expr Bindlib.box = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in match naked_expr with @@ -637,7 +637,7 @@ let rec translate_expr (translate_expr scope inside_definition_of ctxt predicate) acc in - let make_extr_body (cmp_op : binop) (t : typ Marked.pos) = + let make_extr_body (cmp_op : binop) (t : typ) = let tmp_var = Var.make "tmp" in let tmp = Expr.make_var (tmp_var, Marked.get_mark param') in Expr.make_let_in_raw tmp_var t @@ -785,7 +785,7 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.naked_expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t + Desugared.Ast.expr Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" @@ -924,9 +924,9 @@ and disambiguate_match_and_build_expression this precondition has to be appended to the justifications of each definition in the subscope use. This is what this function does. *) let merge_conditions - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) - (cond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) - (default_pos : Pos.t) : Desugared.Ast.naked_expr Marked.pos Bindlib.box = + (precond : Desugared.Ast.expr Bindlib.box option) + (cond : Desugared.Ast.expr Bindlib.box option) + (default_pos : Pos.t) : Desugared.Ast.expr Bindlib.box = match precond, cond with | Some precond, Some cond -> let op_term = EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) in @@ -949,7 +949,7 @@ let process_default (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) (param_uid : Desugared.Ast.naked_expr Var.t Marked.pos option) - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) (just : Ast.expression Marked.pos option) @@ -987,7 +987,7 @@ let process_default (** Wrapper around {!val: process_default} that performs some name disambiguation *) let process_def - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1076,7 +1076,7 @@ let process_def (** Translates a {!type: Surface.Ast.rule} from the surface language *) let process_rule - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (scope : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1086,7 +1086,7 @@ let process_rule (** Translates assertions *) let process_assert - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index af31feb5..65ac15d3 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -45,14 +45,14 @@ type scope_context = { } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ Marked.pos StructFieldMap.t +type struct_context = typ StructFieldMap.t (** Types of the fields of a struct *) -type enum_context = typ Marked.pos EnumConstructorMap.t +type enum_context = typ EnumConstructorMap.t (** Types of the payloads of the cases of an enum *) type var_sig = { - var_sig_typ : typ Marked.pos; + var_sig_typ : typ; var_sig_is_condition : bool; var_sig_io : Ast.scope_decl_context_io; var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; @@ -100,7 +100,7 @@ let raise_unknown_identifier (msg : string) (ident : ident Marked.pos) = msg (** Gets the type associated to an uid *) -let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ Marked.pos = +let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ = (ScopeVarMap.find uid ctxt.var_typs).var_sig_typ let is_var_cond (ctxt : context) (uid : ScopeVar.t) : bool = @@ -149,7 +149,7 @@ let belongs_to (ctxt : context) (uid : ScopeVar.t) (scope_uid : ScopeName.t) : (** Retrieves the type of a scope definition from the context *) let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : - typ Marked.pos = + typ = match def with | Desugared.Ast.ScopeDef.SubScopeVar (_, x) (* we don't need to look at the subscope prefix because [x] is already the uid @@ -210,7 +210,7 @@ let process_subscope_decl scopes = Scopelang.Ast.ScopeMap.add scope scope_ctxt ctxt.scopes; } -let is_type_cond ((typ, _) : Ast.typ Marked.pos) = +let is_type_cond ((typ, _) : Ast.typ) = match typ with | Ast.Base Ast.Condition | Ast.Func { arg_typ = _; return_typ = Ast.Condition, _ } -> @@ -220,7 +220,7 @@ let is_type_cond ((typ, _) : Ast.typ Marked.pos) = (** Process a basic type (all types except function types) *) let rec process_base_typ (ctxt : context) - ((typ, typ_pos) : Ast.base_typ Marked.pos) : typ Marked.pos = + ((typ, typ_pos) : Ast.base_typ Marked.pos) : typ = match typ with | Ast.Condition -> TLit TBool, typ_pos | Ast.Data (Ast.Collection t) -> @@ -249,9 +249,9 @@ let rec process_base_typ ident))) (** Process a type (function or not) *) -let process_type (ctxt : context) ((typ, typ_pos) : Ast.typ Marked.pos) : - typ Marked.pos = - match typ with +let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : + typ = + match naked_typ with | Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) | Ast.Func { arg_typ; return_typ } -> ( TArrow (process_base_typ ctxt arg_typ, process_base_typ ctxt return_typ), diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index c346b386..d8e2eb39 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -45,14 +45,14 @@ type scope_context = { } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ Marked.pos StructFieldMap.t +type struct_context = typ StructFieldMap.t (** Types of the fields of a struct *) -type enum_context = typ Marked.pos EnumConstructorMap.t +type enum_context = typ EnumConstructorMap.t (** Types of the payloads of the cases of an enum *) type var_sig = { - var_sig_typ : typ Marked.pos; + var_sig_typ : typ; var_sig_is_condition : bool; var_sig_io : Ast.scope_decl_context_io; var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; @@ -94,7 +94,7 @@ val raise_unknown_identifier : string -> ident Marked.pos -> 'a (** Function to call whenever an identifier used somewhere has not been declared in the program previously *) -val get_var_typ : context -> ScopeVar.t -> typ Marked.pos +val get_var_typ : context -> ScopeVar.t -> typ (** Gets the type associated to an uid *) val is_var_cond : context -> ScopeVar.t -> bool @@ -114,11 +114,11 @@ val is_subscope_uid : ScopeName.t -> context -> ident -> bool val belongs_to : context -> ScopeVar.t -> ScopeName.t -> bool (** Checks if the var_uid belongs to the scope scope_uid *) -val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos +val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ (** Retrieves the type of a scope definition from the context *) val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool -val is_type_cond : Ast.typ Marked.pos -> bool +val is_type_cond : Ast.typ -> bool val add_def_local_var : context -> ident -> context * Desugared.Ast.naked_expr Var.t (** Adds a binding to the context *) diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index a25778b3..b8287cc9 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -22,7 +22,7 @@ open Ast (** {1 Helpers and type definitions}*) -type vc_return = typed expr * (typed naked_expr, typ Marked.pos) Var.Map.t +type vc_return = typed expr * (typed naked_expr, typ) Var.Map.t (** The return type of VC generators is the VC expression plus the types of any locally free variable inside that expression. *) @@ -30,7 +30,7 @@ type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; input_vars : typed naked_expr Var.t list; - scope_variables_typs : (typed naked_expr, typ Marked.pos) Var.Map.t; + scope_variables_typs : (typed naked_expr, typ) Var.Map.t; } let conjunction (args : vc_return list) (mark : typed mark) : vc_return = @@ -288,7 +288,7 @@ type verification_condition = { vc_kind : verification_condition_kind; vc_scope : ScopeName.t; vc_variable : typed naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t; + vc_free_vars_typ : (typed naked_expr, typ) Var.Map.t; } let rec generate_verification_conditions_scope_body_expr diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index bba3e625..5bc8f2f4 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -34,7 +34,7 @@ type verification_condition = { vc_kind : verification_condition_kind; vc_scope : ScopeName.t; vc_variable : typed Dcalc.Ast.naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ Marked.pos) Var.Map.t; + vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 070dad6b..4842dd58 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -25,7 +25,7 @@ module type Backend = sig type backend_context val make_context : - decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -50,7 +50,7 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context type vc_encoding diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 125bb7bb..3e392d0b 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -26,7 +26,7 @@ module type Backend = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -53,7 +53,7 @@ module type BackendIO = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> backend_context type vc_encoding diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 6c2b4bb0..fb89e9ec 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -27,7 +27,7 @@ type context = { ctx_decl : decl_ctx; (* The declaration context from the Catala program, containing information to precisely pretty print Catala expressions *) - ctx_var : (typed naked_expr, typ Marked.pos) Var.Map.t; + ctx_var : (typed naked_expr, typ) Var.Map.t; (* A map from Catala variables to their types, needed to create Z3 expressions of the right sort *) ctx_funcdecl : (typed naked_expr, FuncDecl.func_decl) Var.Map.t; @@ -129,7 +129,7 @@ let nb_days_to_date (nb : int) : string = (** [print_z3model_expr] pretty-prints the value [e] given by a Z3 model according to the Catala type [ty], corresponding to [e] **) -let rec print_z3model_expr (ctx : context) (ty : typ Marked.pos) (e : Expr.expr) +let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) : string = let print_lit (ty : typ_lit) = match ty with @@ -263,7 +263,7 @@ let translate_typ_lit (ctx : context) (t : typ_lit) : Sort.sort = | TDuration -> Arithmetic.Integer.mk_sort ctx.ctx_z3 (** [translate_typ] returns the Z3 sort correponding to the Catala type [t] **) -let rec translate_typ (ctx : context) (t : typ) : context * Sort.sort = +let rec translate_typ (ctx : context) (t : naked_typ) : context * Sort.sort = match t with | TLit t -> ctx, translate_typ_lit ctx t | TStruct name -> find_or_create_struct ctx name @@ -286,7 +286,7 @@ and find_or_create_enum (ctx : context) (enum : EnumName.t) : (* Creates a Z3 constructor corresponding to the Catala constructor [c] *) let create_constructor (ctx : context) - (c : EnumConstructor.t * typ Marked.pos) : + (c : EnumConstructor.t * typ) : context * Datatype.Constructor.constructor = let name, ty = c in let name = Marked.unmark (EnumConstructor.get_info name) in @@ -810,7 +810,7 @@ module Backend = struct let make_context (decl_ctx : decl_ctx) - (free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t) : backend_context + (free_vars_typ : (typed naked_expr, typ) Var.Map.t) : backend_context = let cfg = (if !Cli.disable_counterexamples then [] else ["model", "true"]) From e10771c187b1548e9349cb31c732f67bada5e37f Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 19:46:13 +0200 Subject: [PATCH 22/31] Make all supertypes use ('a, 't) gexpr as parameter instead of naked_gexpr --- compiler/dcalc/ast.ml | 2 +- compiler/dcalc/ast.mli | 7 +- compiler/dcalc/interpreter.ml | 18 +++-- compiler/dcalc/interpreter.mli | 4 +- compiler/dcalc/optimizations.ml | 8 +-- compiler/dcalc/typing.ml | 25 +++---- compiler/dcalc/typing.mli | 3 +- compiler/desugared/ast.ml | 8 +-- compiler/desugared/ast.mli | 6 +- compiler/desugared/desugared_to_scope.ml | 15 ++-- compiler/lcalc/ast.ml | 7 +- compiler/lcalc/ast.mli | 13 ++-- compiler/lcalc/closure_conversion.ml | 2 +- compiler/lcalc/compile_with_exceptions.ml | 13 ++-- compiler/lcalc/compile_without_exceptions.ml | 56 +++++++-------- compiler/lcalc/optimizations.ml | 4 +- compiler/lcalc/to_ocaml.ml | 16 ++--- compiler/lcalc/to_ocaml.mli | 9 +-- compiler/plugins/api_web.ml | 4 +- compiler/plugins/json_schema.ml | 5 +- compiler/scalc/ast.ml | 1 + compiler/scalc/compile_from_lambda.ml | 16 ++--- compiler/scalc/print.ml | 8 +-- compiler/scalc/to_python.ml | 6 +- compiler/scopelang/ast.ml | 1 - compiler/scopelang/ast.mli | 1 - compiler/scopelang/print.ml | 14 ++-- compiler/scopelang/scope_to_dcalc.ml | 27 ++++--- compiler/shared_ast/definitions.ml | 68 +++++++++--------- compiler/shared_ast/expr.ml | 20 ++---- compiler/shared_ast/expr.mli | 74 ++++++++------------ compiler/shared_ast/print.ml | 65 ++++++++--------- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/program.ml | 5 +- compiler/shared_ast/program.mli | 14 ++-- compiler/shared_ast/scope.ml | 10 ++- compiler/shared_ast/scope.mli | 41 +++++------ compiler/shared_ast/shared_ast.mld | 2 +- compiler/shared_ast/var.ml | 11 +-- compiler/shared_ast/var.mli | 9 +-- compiler/surface/ast.ml | 1 + compiler/surface/desugaring.ml | 23 +++--- compiler/surface/name_resolution.ml | 10 ++- compiler/surface/name_resolution.mli | 4 +- compiler/verification/conditions.ml | 22 +++--- compiler/verification/conditions.mli | 4 +- compiler/verification/io.ml | 14 ++-- compiler/verification/io.mli | 16 ++--- compiler/verification/z3backend.real.ml | 32 ++++----- 49 files changed, 320 insertions(+), 426 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 010db5c3..89e74c32 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -22,4 +22,4 @@ type lit = dcalc glit type 'm naked_expr = (dcalc, 'm mark) naked_gexpr and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm naked_expr Shared_ast.program +type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index fa8c08fa..4697faa6 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -20,8 +20,5 @@ open Shared_ast type lit = dcalc glit - -type 'm naked_expr = (dcalc, 'm mark) naked_gexpr -and 'm expr = (dcalc, 'm mark) gexpr - -type 'm program = 'm naked_expr Shared_ast.program +type 'm expr = (dcalc, 'm mark) gexpr +type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index a116e878..44ed4259 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -33,10 +33,11 @@ let rec evaluate_operator (ctx : decl_ctx) (op : operator) (pos : Pos.t) - (args : 'm Ast.expr list) : 'm Ast.naked_expr = + (args : 'm Ast.expr list) : (dcalc, 'm mark) naked_gexpr = (* Try to apply [div] and if a [Division_by_zero] exceptions is catched, use [op] to raise multispanned errors. *) - let apply_div_or_raise_err (div : unit -> 'm Ast.naked_expr) : 'm Ast.naked_expr = + let apply_div_or_raise_err (div : unit -> (dcalc, 'm mark) naked_gexpr) : + (dcalc, 'm mark) naked_gexpr = try div () with Division_by_zero -> Errors.raise_multispanned_error @@ -54,8 +55,8 @@ let rec evaluate_operator (* Try to apply [cmp] and if a [UncomparableDurations] exceptions is catched, use [args] to raise multispanned errors. *) let apply_cmp_or_raise_err - (cmp : unit -> 'm Ast.naked_expr) - (args : 'm Ast.expr list) : 'm Ast.naked_expr = + (cmp : unit -> (dcalc, 'm mark) naked_gexpr) + (args : 'm Ast.expr list) : (dcalc, 'm mark) naked_gexpr = try cmp () with Runtime.UncomparableDurations -> Errors.raise_multispanned_error (get_binop_args_pos args) @@ -314,8 +315,7 @@ let rec evaluate_operator "Operator applied to the wrong arguments\n\ (should not happen if the term was well-typed)" -and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr - = +and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = match Marked.unmark e with | EVar _ -> Errors.raise_spanned_error (Expr.pos e) @@ -481,10 +481,8 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr (** {1 API} *) let interpret_program : - 'm. - decl_ctx -> - 'm Ast.expr -> - (Uid.MarkedString.info * 'm Ast.expr) list = + 'm. decl_ctx -> 'm Ast.expr -> (Uid.MarkedString.info * 'm Ast.expr) list + = fun (ctx : decl_ctx) (e : 'm Ast.expr) : (Uid.MarkedString.info * 'm Ast.expr) list -> match evaluate_expr ctx e with diff --git a/compiler/dcalc/interpreter.mli b/compiler/dcalc/interpreter.mli index f5742813..f117c0b4 100644 --- a/compiler/dcalc/interpreter.mli +++ b/compiler/dcalc/interpreter.mli @@ -23,9 +23,7 @@ val evaluate_expr : decl_ctx -> 'm Ast.expr -> 'm Ast.expr (** Evaluates an expression according to the semantics of the default calculus. *) val interpret_program : - decl_ctx -> - 'm Ast.expr -> - (Uid.MarkedString.info * 'm Ast.expr) list + decl_ctx -> 'm Ast.expr -> (Uid.MarkedString.info * 'm Ast.expr) list (** Interprets a program. This function expects an expression typed as a function whose argument are all thunked. The function is executed by providing for each argument a thunked empty default. Returns a list of all diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index 50eaf2e7..fa49f3a8 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -19,7 +19,7 @@ open Shared_ast open Ast type partial_evaluation_ctx = { - var_values : (typed naked_expr, typed expr) Var.Map.t; + var_values : (typed expr, typed expr) Var.Map.t; decl_ctx : decl_ctx; } @@ -190,8 +190,8 @@ let optimize_expr (decl_ctx : decl_ctx) (e : 'm expr) = let rec scope_lets_map (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scope_body_expr : 'm naked_expr scope_body_expr) : - 'm naked_expr scope_body_expr Bindlib.box = + (scope_body_expr : 'm expr scope_body_expr) : + 'm expr scope_body_expr Bindlib.box = match scope_body_expr with | Result e -> Bindlib.box_apply (fun e' -> Result e') (t ctx e) | ScopeLet scope_let -> @@ -212,7 +212,7 @@ let rec scope_lets_map let rec scopes_map (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scopes : 'm naked_expr scopes) : 'm naked_expr scopes Bindlib.box = + (scopes : 'm expr scopes) : 'm expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 794256df..b470423f 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -33,8 +33,8 @@ module Any = () type unionfind_typ = naked_typ Marked.pos UnionFind.elem -(** We do not reuse {!type: Dcalc.Ast.naked_typ} because we have to include a new - [TAny] variant. Indeed, error terms can have any type and this has to be +(** We do not reuse {!type: Dcalc.Ast.naked_typ} because we have to include a + new [TAny] variant. Indeed, error terms can have any type and this has to be captured by the type sytem. *) and naked_typ = @@ -84,9 +84,7 @@ let rec format_typ (fmt : Format.formatter) (naked_typ : unionfind_typ) : unit = let format_typ = format_typ ctx in - let format_typ_with_parens - (fmt : Format.formatter) - (t : unionfind_typ) = + let format_typ_with_parens (fmt : Format.formatter) (t : unionfind_typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -109,11 +107,7 @@ let rec format_typ | TArray t1 -> Format.fprintf fmt "@[%a@ array@]" format_typ t1 | TAny d -> Format.fprintf fmt "any[%d]" (Any.hash d) -exception - Type_error of - A.any_marked_expr - * unionfind_typ - * unionfind_typ +exception Type_error of A.any_marked_expr * unionfind_typ * unionfind_typ type mark = { pos : Pos.t; uf : unionfind_typ } @@ -306,7 +300,7 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) (** Infers the most permissive type from an expression *) let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) - (env : 'm Ast.naked_expr env) + (env : 'm Ast.expr env) (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) e; *) @@ -469,10 +463,10 @@ let rec typecheck_expr_bottom_up (** Checks whether the expression can be typed with the provided type *) and typecheck_expr_top_down (ctx : A.decl_ctx) - (env : 'm Ast.naked_expr env) + (env : 'm Ast.expr env) (tau : unionfind_typ) (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = - (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) tau + (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in @@ -667,10 +661,7 @@ let infer_type (type m) ctx (e : m Ast.expr) = | A.Untyped _ -> A.Expr.ty (Bindlib.unbox (infer_types ctx e)) (** Typechecks an expression given an expected type *) -let check_type - (ctx : A.decl_ctx) - (e : 'm Ast.expr) - (tau : A.typ) = +let check_type (ctx : A.decl_ctx) (e : 'm Ast.expr) (tau : A.typ) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore @@ wrap ctx (typecheck_expr_top_down ctx A.Var.Map.empty (ast_to_typ tau)) e diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 362c4f29..401ecce4 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -19,8 +19,7 @@ open Shared_ast -val infer_types : - decl_ctx -> untyped Ast.expr -> typed Ast.expr Bindlib.box +val infer_types : decl_ctx -> untyped Ast.expr -> typed Ast.expr Bindlib.box (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index e44b0365..a011c5a5 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -94,8 +94,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type naked_expr = (desugared, Pos.t) naked_gexpr -type expr = naked_expr Marked.pos +type expr = (desugared, Pos.t) gexpr module ExprMap = Map.Make (struct type t = expr @@ -114,7 +113,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * typ) option; + rule_parameter : (expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -167,8 +166,7 @@ let empty_rule (pos : Pos.t) (have_parameter : typ option) : rule = rule_label = Unlabeled; } -let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule - = +let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule = { rule_just = Bindlib.box (ELit (LBool true), pos); rule_cons = Bindlib.box (ELit (LBool false), pos); diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index 177074bf..1abd4bf0 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -49,11 +49,9 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {2 Expressions} *) -type naked_expr = (desugared, Pos.t) naked_gexpr +type expr = (desugared, Pos.t) gexpr (** See {!type:Shared_ast.naked_gexpr} for the complete definition *) -and expr = naked_expr Marked.pos - type location = desugared glocation module LocationSet : Set.S with type elt = location Marked.pos @@ -72,7 +70,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * typ) option; + rule_parameter : (expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index ae845a68..685a9957 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -27,14 +27,13 @@ type target_scope_vars = type ctx = { scope_var_mapping : target_scope_vars ScopeVarMap.t; - var_mapping : (Ast.naked_expr, Scopelang.Ast.naked_expr Var.t) Var.Map.t; + var_mapping : (Ast.expr, Scopelang.Ast.expr Var.t) Var.Map.t; } let tag_with_log_entry (e : Scopelang.Ast.expr) (l : log_entry) - (markings : Utils.Uid.MarkedString.info list) : - Scopelang.Ast.expr = + (markings : Utils.Uid.MarkedString.info list) : Scopelang.Ast.expr = ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) @@ -186,7 +185,7 @@ let rec rule_tree_to_expr ~(toplevel : bool) (ctx : ctx) (def_pos : Pos.t) - (is_func : Ast.naked_expr Var.t option) + (is_func : Ast.expr Var.t option) (tree : rule_tree) : Scopelang.Ast.expr Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r @@ -194,9 +193,8 @@ let rec rule_tree_to_expr (* because each rule has its own variable parameter and we want to convert the whole rule tree into a function, we need to perform some alpha-renaming of all the expressions *) - let substitute_parameter - (e : Ast.expr Bindlib.box) - (rule : Ast.rule) : Ast.expr Bindlib.box = + let substitute_parameter (e : Ast.expr Bindlib.box) (rule : Ast.rule) : + Ast.expr Bindlib.box = match is_func, rule.Ast.rule_parameter with | Some new_param, Some (old_param, _) -> let binder = Bindlib.bind_var old_param e in @@ -286,8 +284,7 @@ let rec rule_tree_to_expr that the result returned by the function is not empty *) let default = Bindlib.box_apply - (fun (default : Scopelang.Ast.naked_expr * Pos.t) -> - ErrorOnEmpty default, def_pos) + (fun (default : Scopelang.Ast.expr) -> ErrorOnEmpty default, def_pos) default in Expr.make_abs diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 056fb89c..94c2c761 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -18,11 +18,8 @@ open Utils include Shared_ast type lit = lcalc glit - -type 'm naked_expr = (lcalc, 'm mark) naked_gexpr -and 'm expr = (lcalc, 'm mark) gexpr - -type 'm program = 'm naked_expr Shared_ast.program +type 'm expr = (lcalc, 'm mark) gexpr +type 'm program = 'm expr Shared_ast.program let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 5810ee9b..14979d44 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -21,11 +21,8 @@ open Shared_ast (** {1 Abstract syntax tree} *) type lit = lcalc glit - -type 'm naked_expr = (lcalc, 'm mark) naked_gexpr -and 'm expr = (lcalc, 'm mark) gexpr - -type 'm program = 'm naked_expr Shared_ast.program +type 'm expr = (lcalc, 'm mark) gexpr +type 'm program = 'm expr Shared_ast.program (** {1 Language terms construction}*) @@ -44,7 +41,7 @@ val make_matchopt_with_abs_arms : val make_matchopt : 'm mark -> - 'm naked_expr Var.t -> + 'm expr Var.t -> typ -> 'm expr Bindlib.box -> 'm expr Bindlib.box -> @@ -55,5 +52,5 @@ val make_matchopt : (** {1 Special symbols} *) -val handle_default : untyped naked_expr Var.t -val handle_default_opt : untyped naked_expr Var.t +val handle_default : untyped expr Var.t +val handle_default_opt : untyped expr Var.t diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index f807964b..25127083 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -22,7 +22,7 @@ module D = Dcalc.Ast (** TODO: This version is not yet debugged and ought to be specialized when Lcalc has more structure. *) -type 'm ctx = { name_context : string; globally_bound_vars : 'm naked_expr Var.Set.t } +type 'm ctx = { name_context : string; globally_bound_vars : 'm expr Var.Set.t } (** Returns the expression with closed closures and the set of free variables inside this new expression. Implementation guided by diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index c67b00b1..68fbca43 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -19,7 +19,7 @@ open Shared_ast module D = Dcalc.Ast module A = Ast -type 'm ctx = ('m D.naked_expr, 'm A.naked_expr Var.t) Var.Map.t +type 'm ctx = ('m D.expr, 'm A.expr Var.t) Var.Map.t (** This environment contains a mapping between the variables in Dcalc and their correspondance in Lcalc. *) @@ -51,8 +51,7 @@ let rec translate_default in exceptions -and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : - 'm A.expr Bindlib.box = +and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : 'm A.expr Bindlib.box = match Marked.unmark e with | EVar v -> Expr.make_var (Var.Map.find v ctx, Marked.get_mark e) | ETuple (args, s) -> @@ -112,8 +111,8 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : let rec translate_scope_lets (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scope_lets : 'm D.naked_expr scope_body_expr) : - 'm A.naked_expr scope_body_expr Bindlib.box = + (scope_lets : 'm D.expr scope_body_expr) : + 'm A.expr scope_body_expr Bindlib.box = match scope_lets with | Result e -> Bindlib.box_apply (fun e -> Result e) (translate_expr ctx e) | ScopeLet scope_let -> @@ -140,7 +139,7 @@ let rec translate_scope_lets let rec translate_scopes (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scopes : 'm D.naked_expr scopes) : 'm A.naked_expr scopes Bindlib.box = + (scopes : 'm D.expr scopes) : 'm A.expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -159,7 +158,7 @@ let rec translate_scopes let new_scope_body_expr = Bindlib.bind_var new_scope_input_var new_scope_body_expr in - let new_scope : 'm A.naked_expr scope_body Bindlib.box = + let new_scope : 'm A.expr scope_body Bindlib.box = Bindlib.box_apply (fun new_scope_body_expr -> { diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 7eadc50c..789181a2 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -42,12 +42,12 @@ module A = Ast open Shared_ast -type 'm hoists = ('m A.naked_expr, 'm D.expr) Var.Map.t -(** Hoists definition. It represent bindings between [A.Var.t] and [D.naked_expr]. *) +type 'm hoists = ('m A.expr, 'm D.expr) Var.Map.t +(** Hoists definition. It represent bindings between [A.Var.t] and [D.expr]. *) type 'm info = { - naked_expr : 'm A.expr Bindlib.box; - var : 'm A.naked_expr Bindlib.var; + expr : 'm A.expr Bindlib.box; + var : 'm A.expr Var.t; is_pure : bool; } (** Information about each encontered Dcalc variable is stored inside a context @@ -61,14 +61,14 @@ let pp_info (fmt : Format.formatter) (info : 'm info) = type 'm ctx = { decl_ctx : decl_ctx; - vars : ('m D.naked_expr, 'm info) Var.Map.t; + vars : ('m D.expr, 'm info) Var.Map.t; (** information context about variables in the current scope *) } let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = let pp_binding (fmt : Format.formatter) - ((v, info) : 'm D.naked_expr Var.t * 'm info) = + ((v, info) : 'm D.expr Var.t * 'm info) = Format.fprintf fmt "%a: %a" Print.var v pp_info info in @@ -82,7 +82,7 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = (** [find ~info n ctx] is a warpper to ocaml's Map.find that handle errors in a slightly better way. *) -let find ?(info : string = "none") (n : 'm D.naked_expr Var.t) (ctx : 'm ctx) : +let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : 'm info = (* let _ = Format.asprintf "Searching for variable %a inside context %a" Print.var n pp_ctx ctx |> Cli.debug_print in *) @@ -99,11 +99,11 @@ let find ?(info : string = "none") (n : 'm D.naked_expr Var.t) (ctx : 'm ctx) : debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) let add_var (mark : 'm mark) - (var : 'm D.naked_expr Var.t) + (var : 'm D.expr Var.t) (is_pure : bool) (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in - let naked_expr = Expr.make_var (new_var, mark) in + let expr = Expr.make_var (new_var, mark) in (* Cli.debug_print @@ Format.asprintf "D.%a |-> A.%a" Print.var var Print.var new_var; *) @@ -111,7 +111,7 @@ let add_var ctx with vars = Var.Map.update var - (fun _ -> Some { naked_expr; var = new_var; is_pure }) + (fun _ -> Some { expr; var = new_var; is_pure }) ctx.vars; } @@ -172,7 +172,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, created a variable %a to replace it" Print.var v Print.var v'; *) Expr.make_var (v', pos), Var.Map.singleton v' e - else (find ~info:"should never happend" v ctx).naked_expr, Var.Map.empty + else (find ~info:"should never happend" v ctx).expr, Var.Map.empty | EApp ((EVar v, p), [(ELit LUnit, _)]) -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in @@ -288,8 +288,8 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : Expr.earray es' pos, disjoint_union_maps (Expr.pos e) hoists | EOp op -> Bindlib.box (EOp op, pos), Var.Map.empty -and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) - : 'm A.expr Bindlib.box = +and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) : + 'm A.expr Bindlib.box = let e', hoists = translate_and_hoist ctx e in let hoists = Var.Map.bindings hoists in @@ -306,7 +306,7 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) match hoist with (* Here we have to handle only the cases appearing in hoists, as defined the [translate_and_hoist] function. *) - | EVar v -> (find ~info:"should never happend" v ctx).naked_expr + | EVar v -> (find ~info:"should never happend" v ctx).expr | EDefault (excep, just, cons) -> let excep' = List.map (translate_expr ctx) excep in let just' = translate_expr ctx just in @@ -356,8 +356,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) -let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_expr) : - 'm A.naked_expr scope_body_expr Bindlib.box = +let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : + 'm A.expr scope_body_expr Bindlib.box = match lets with | Result e -> Bindlib.box_apply @@ -373,7 +373,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_ex } -> (* special case : the subscope variable is thunked (context i/o). We remove this thunking. *) - let _, naked_expr = Bindlib.unmbind binder in + let _, expr = Bindlib.unmbind binder in let var_is_pure = true in let var, next = Bindlib.unbind next in @@ -392,13 +392,13 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_ex scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false naked_expr) + (translate_expr ctx ~append_esome:false expr) (Bindlib.bind_var new_var new_next) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = (ErrorOnEmpty _, emark) as naked_expr; + scope_let_expr = (ErrorOnEmpty _, emark) as expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -419,25 +419,25 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_ex scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false naked_expr) + (translate_expr ctx ~append_esome:false expr) (Bindlib.bind_var new_var (translate_scope_let ctx' next)) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_pos = pos; - scope_let_expr = naked_expr; + scope_let_expr = expr; _; } -> Errors.raise_spanned_error pos "Internal Error: found an SubScopeVarDefinition that does not satisfy \ the invariants when translating Dcalc to Lcalc without exceptions: \ @[%a@]" - (Expr.format ctx.decl_ctx) naked_expr + (Expr.format ctx.decl_ctx) expr | ScopeLet { scope_let_kind = kind; scope_let_typ = typ; - scope_let_expr = naked_expr; + scope_let_expr = expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -458,7 +458,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_ex let var, next = Bindlib.unbind next in (* Cli.debug_print @@ Format.asprintf "unbinding %a" Print.var var; *) let vmark = - Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark naked_expr) + Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark expr) in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in @@ -472,13 +472,13 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_ex scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false naked_expr) + (translate_expr ctx ~append_esome:false expr) (Bindlib.bind_var new_var (translate_scope_let ctx' next)) let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : 'm D.naked_expr scope_body) : 'm A.naked_expr scope_body Bindlib.box = + (body : 'm D.expr scope_body) : 'm A.expr scope_body Bindlib.box = match body with | { scope_body_expr = result; @@ -504,8 +504,8 @@ let translate_scope_body }) (Bindlib.bind_var v' (translate_scope_let ctx' lets)) -let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.naked_expr scopes) : - 'm A.naked_expr scopes Bindlib.box = +let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.expr scopes) : + 'm A.expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef { scope_name; scope_body; scope_next } -> diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index 1d737c8a..4a4bd779 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -95,7 +95,6 @@ let rec beta_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = and+ args = List.map (beta_expr ()) args |> Bindlib.box_list in match Marked.unmark e1 with | EAbs (binder, _ts) -> - let (_ : (_, _) Bindlib.mbinder) = binder in Bindlib.msubst binder (List.map fst args |> Array.of_list) | _ -> default_mark @@ EApp (e1, args)) | _ -> visitor_map beta_expr () e @@ -116,8 +115,7 @@ let _beta_optimizations (p : 'm program) : 'm program = in { p with scopes = Bindlib.unbox new_scopes } -let rec peephole_expr (_ : unit) (e : 'm expr) : - 'm expr Bindlib.box = +let rec peephole_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index dbd18151..d7ba239d 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -183,8 +183,7 @@ let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit - = +let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit = match Marked.unmark ty with | TLit TUnit -> Format.fprintf fmt "embed_unit" | TLit TBool -> Format.fprintf fmt "embed_bool" @@ -271,10 +270,8 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) -let rec format_expr - (ctx : decl_ctx) - (fmt : Format.formatter) - (e : 'm expr) : unit = +let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : + unit = let format_expr = format_expr ctx in let format_with_parens (fmt : Format.formatter) (e : 'm expr) = if needs_parens e then Format.fprintf fmt "(%a)" format_expr e @@ -472,8 +469,7 @@ let format_struct_embedding let format_enum_embedding (fmt : Format.formatter) - ((enum_name, enum_cases) : - EnumName.t * (EnumConstructor.t * typ) list) = + ((enum_name, enum_cases) : EnumName.t * (EnumConstructor.t * typ) list) = if List.length enum_cases = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_to_module_name (`Ename enum_name) format_enum_name enum_name @@ -556,7 +552,7 @@ let format_ctx let rec format_scope_body_expr (ctx : decl_ctx) (fmt : Format.formatter) - (scope_lets : 'm Ast.naked_expr scope_body_expr) : unit = + (scope_lets : 'm Ast.expr scope_body_expr) : unit = match scope_lets with | Result e -> format_expr ctx fmt e | ScopeLet scope_let -> @@ -572,7 +568,7 @@ let rec format_scope_body_expr let rec format_scopes (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : 'm Ast.naked_expr scopes) : unit = + (scopes : 'm Ast.expr scopes) : unit = match scopes with | Nil -> () | ScopeDef scope_def -> diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index a9d46711..04e7bcf1 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -21,13 +21,8 @@ open Ast (** Formats a lambda calculus program into a valid OCaml program *) val avoid_keywords : string -> string - -val find_struct : - StructName.t -> decl_ctx -> (StructFieldName.t * typ) list - -val find_enum : - EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list - +val find_struct : StructName.t -> decl_ctx -> (StructFieldName.t * typ) list +val find_enum : EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list val typ_needs_parens : typ -> bool val needs_parens : 'm expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index a615637c..f0517567 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -328,10 +328,10 @@ module To_jsoo = struct Format.fprintf fmt "%a@\n" format_enum_decl (e, find_enum e ctx)) (type_ordering @ scope_structs) - let fmt_input_struct_name fmt (scope_def : 'a naked_expr scope_def) = + let fmt_input_struct_name fmt (scope_def : 'a expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_input_struct - let fmt_output_struct_name fmt (scope_def : 'a naked_expr scope_def) = + let fmt_output_struct_name fmt (scope_def : 'a expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_output_struct let rec format_scopes_to_fun diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index f933360d..409e0e62 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -49,7 +49,7 @@ module To_json = struct Format.fprintf fmt "%s" s let rec find_scope_def (target_name : string) : - 'm naked_expr scopes -> 'm naked_expr scope_def option = function + 'm expr scopes -> 'm expr scope_def option = function | Nil -> None | ScopeDef scope_def -> let name = Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in @@ -111,8 +111,7 @@ module To_json = struct in let rec collect_required_type_defs_from_scope_input (input_struct : StructName.t) : typ list = - let rec collect (acc : typ list) (t : typ) : typ list - = + let rec collect (acc : typ list) (t : typ) : typ list = match Marked.unmark t with | TStruct s -> (* Scope's input is a struct. *) diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index bc4a4cb3..cb8b79bd 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -26,6 +26,7 @@ let handle_default = TopLevelName.fresh ("handle_default", Pos.no_pos) let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) type expr = naked_expr Marked.pos + and naked_expr = | EVar of LocalName.t | EFunc of TopLevelName.t diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index f7263f21..0e8db1d5 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -21,17 +21,16 @@ module L = Lcalc.Ast module D = Dcalc.Ast type 'm ctxt = { - func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t; + func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t; decl_ctx : decl_ctx; - var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t; + var_dict : ('m L.expr, A.LocalName.t) Var.Map.t; inside_definition_of : A.LocalName.t option; context_name : string; } (* Expressions can spill out side effect, hence this function also returns a list of statements to be prepended before the expression is evaluated *) -let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : - A.block * A.expr = +let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : A.block * A.expr = match Marked.unmark expr with | EVar v -> let local_var = @@ -115,8 +114,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : :: tmp_stmts, (A.EVar tmp_var, Expr.pos expr) ) -and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : - A.block = +and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = match Marked.unmark block_expr with | EAssert e -> (* Assertions are always encapsulated in a unit-typed let binding *) @@ -273,9 +271,9 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : let rec translate_scope_body_expr (scope_name : ScopeName.t) (decl_ctx : decl_ctx) - (var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t) - (func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t) - (scope_expr : 'm L.naked_expr scope_body_expr) : A.block = + (var_dict : ('m L.expr, A.LocalName.t) Var.Map.t) + (func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t) + (scope_expr : 'm L.expr scope_body_expr) : A.block = match scope_expr with | Result e -> let block, new_e = diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 4bf10438..54192e74 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -115,11 +115,11 @@ let rec format_statement Format.fprintf fmt "@[%a %a %a@ %a@]" Print.keyword "decl" LocalName.format_t (Marked.unmark name) Print.punctuation ":" (Print.typ decl_ctx) typ - | SLocalDef (name, naked_expr) -> + | SLocalDef (name, expr) -> Format.fprintf fmt "@[%a %a@ %a@]" LocalName.format_t (Marked.unmark name) Print.punctuation "=" (format_expr decl_ctx ~debug) - naked_expr + expr | STryExcept (b_try, except, b_with) -> Format.fprintf fmt "@[%a%a@ %a@]@\n@[%a %a%a@ %a@]" Print.keyword "try" Print.punctuation ":" @@ -143,10 +143,10 @@ let rec format_statement Format.fprintf fmt "@[%a %a@]" Print.keyword "return" (format_expr decl_ctx ~debug) (ret, Marked.get_mark stmt) - | SAssert naked_expr -> + | SAssert expr -> Format.fprintf fmt "@[%a %a@]" Print.keyword "assert" (format_expr decl_ctx ~debug) - (naked_expr, Marked.get_mark stmt) + (expr, Marked.get_mark stmt) | SSwitch (e_switch, enum, arms) -> Format.fprintf fmt "@[%a @[%a@]%a@]%a" Print.keyword "switch" (format_expr decl_ctx ~debug) diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index 03adca34..2fa60715 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -259,10 +259,8 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) -let rec format_expression - (ctx : decl_ctx) - (fmt : Format.formatter) - (e : expr) : unit = +let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) (e : expr) : + unit = match Marked.unmark e with | EVar v -> format_var fmt v | EFunc f -> format_toplevel_name fmt f diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index c7935b6b..222e114f 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -37,7 +37,6 @@ Set.Make (struct end) type expr = (scopelang, Pos.t) gexpr -type naked_expr = (scopelang, Pos.t) naked_gexpr module ExprMap = Map.Make (struct type t = expr diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 83646ab0..aa3f3a1d 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -41,7 +41,6 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type naked_expr = (scopelang, Pos.t) naked_gexpr type expr = (scopelang, Pos.t) gexpr module ExprMap : Map.S with type key = expr diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 42330c22..4c1a641b 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -21,8 +21,7 @@ open Ast let struc ctx (fmt : Format.formatter) - ((name, fields) : StructName.t * (StructFieldName.t * typ) list) - : unit = + ((name, fields) : StructName.t * (StructFieldName.t * typ) list) : unit = Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" Print.keyword "type" StructName.format_t name Print.punctuation "=" Print.punctuation "{" (Format.pp_print_list @@ -35,8 +34,7 @@ let struc let enum ctx (fmt : Format.formatter) - ((name, cases) : EnumName.t * (EnumConstructor.t * typ) list) : - unit = + ((name, cases) : EnumName.t * (EnumConstructor.t * typ) list) : unit = Format.fprintf fmt "%a %a %a @\n@[ %a@]" Print.keyword "type" EnumName.format_t name Print.punctuation "=" (Format.pp_print_list @@ -76,7 +74,7 @@ let scope ?(debug = false) ctx fmt (name, decl) = (Print.typ ctx) typ Print.punctuation "=" (fun fmt e -> match Marked.unmark loc with - | SubScopeVar _ -> Print.naked_expr ctx fmt e + | SubScopeVar _ -> Print.expr ctx fmt e | ScopelangScopeVar v -> ( match Marked.unmark @@ -85,12 +83,12 @@ let scope ?(debug = false) ctx fmt (name, decl) = with | Reentrant -> Format.fprintf fmt "%a@ %a" Print.operator - "reentrant or by default" (Print.naked_expr ~debug ctx) e - | _ -> Format.fprintf fmt "%a" (Print.naked_expr ~debug ctx) e)) + "reentrant or by default" (Print.expr ~debug ctx) e + | _ -> Format.fprintf fmt "%a" (Print.expr ~debug ctx) e)) e | Assertion e -> Format.fprintf fmt "%a %a" Print.keyword "assert" - (Print.naked_expr ~debug ctx) e + (Print.expr ~debug ctx) e | Call (scope_name, subscope_name) -> Format.fprintf fmt "%a %a%a%a%a" Print.keyword "call" ScopeName.format_t scope_name Print.punctuation "[" diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 8b336900..cf03d2d2 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -25,9 +25,9 @@ type scope_var_ctx = { type scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : untyped Dcalc.Ast.naked_expr Var.t; + scope_sig_scope_var : untyped Dcalc.Ast.expr Var.t; (** Var representing the scope *) - scope_sig_input_var : untyped Dcalc.Ast.naked_expr Var.t; + scope_sig_input_var : untyped Dcalc.Ast.expr Var.t; (** Var representing the scope input inside the scope func *) scope_sig_input_struct : StructName.t; (** Scope input *) scope_sig_output_struct : StructName.t; (** Scope output *) @@ -40,11 +40,12 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; + scope_vars : + (untyped Dcalc.Ast.expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t + (untyped Dcalc.Ast.expr Var.t * naked_typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : (Ast.naked_expr, untyped Dcalc.Ast.naked_expr Var.t) Var.Map.t; + local_vars : (Ast.expr, untyped Dcalc.Ast.expr Var.t) Var.Map.t; } let empty_ctx @@ -101,8 +102,7 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (excepts : Ast.expr list) : - Ast.expr list = +let collapse_similar_outcomes (excepts : Ast.expr list) : Ast.expr list = let cons_map = List.fold_left (fun map -> function @@ -135,8 +135,7 @@ let collapse_similar_outcomes (excepts : Ast.expr list) : let rec translate_expr (ctx : ctx) (e : Ast.expr) : untyped Dcalc.Ast.expr Bindlib.box = - Bindlib.box_apply (fun (x : untyped Dcalc.Ast.naked_expr) -> - Marked.mark (pos_mark_as e) x) + Bindlib.box_apply (fun x -> Marked.mark (pos_mark_as e) x) @@ match Marked.unmark e with | EVar v -> Bindlib.box_var (Var.Map.find v ctx.local_vars) @@ -357,8 +356,8 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - (untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box -> - untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box) + (untyped Dcalc.Ast.expr scope_body_expr Bindlib.box -> + untyped Dcalc.Ast.expr scope_body_expr Bindlib.box) * ctx = match rule with | Definition ((ScopelangScopeVar a, var_def_pos), tau, a_io, e) -> @@ -636,7 +635,7 @@ let translate_rules (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) (sigma_return_struct_name : StructName.t) : - untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box * ctx = + untyped Dcalc.Ast.expr scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -673,7 +672,7 @@ let translate_scope_decl (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - untyped Dcalc.Ast.naked_expr scope_body Bindlib.box * struct_ctx = + untyped Dcalc.Ast.expr scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in @@ -850,7 +849,7 @@ let translate_program (prgm : Ast.program) : in (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) - let (scopes, decl_ctx) : untyped Dcalc.Ast.naked_expr scopes Bindlib.box * _ = + let (scopes, decl_ctx) : untyped Dcalc.Ast.expr scopes Bindlib.box * _ = List.fold_right (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index b13ef68c..05e034be 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -178,7 +178,7 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type naked_expr = dcalc naked_gexpr] plus the annotations. + are then defined with [type expr = dcalc gexpr] plus the annotations. A few tips on using this GADT: @@ -187,14 +187,10 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t - For recursive functions, you may need to additionally explicit the generalisation of the variable: [let rec f: type a . a naked_gexpr -> ...] *) -(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} - library, based on higher-order abstract syntax *) and ('a, 't) naked_gexpr = (* Constructors common to all ASTs *) | ELit : 'a glit -> ('a any, 't) naked_gexpr - | EApp : - ('a, 't) gexpr * ('a, 't) gexpr list - -> ('a any, 't) naked_gexpr + | EApp : ('a, 't) gexpr * ('a, 't) gexpr list -> ('a any, 't) naked_gexpr | EOp : operator -> ('a any, 't) naked_gexpr | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr (* All but statement calculus *) @@ -208,7 +204,9 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr (* Early stages *) - | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr + | ELocation : + 'a glocation + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EStruct : StructName.t * ('a, 't) gexpr StructFieldMap.t -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr @@ -219,9 +217,7 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EMatchS : - ('a, 't) gexpr - * EnumName.t - * ('a, 't) gexpr EnumConstructorMap.t + ('a, 't) gexpr * EnumName.t * ('a, 't) gexpr EnumConstructorMap.t -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr (* Lambda-like *) | ETuple : @@ -250,6 +246,16 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr * except * ('a, 't) gexpr -> ((lcalc as 'a), 't) naked_gexpr +type 'a box = 'a Bindlib.box + +type ('e, 'b) binder = (('a, 't) naked_gexpr, 'b) Bindlib.binder + constraint 'e = ('a, 't) gexpr +(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} + library, based on higher-order abstract syntax *) + +type ('e, 'b) mbinder = (('a, 't) naked_gexpr, 'b) Bindlib.mbinder + constraint 'e = ('a, 't) gexpr + (* (\* Statement calculus *\) * | ESVar: LocalName.t -> (scalc as 'a, 't) naked_gexpr * | ESStruct: ('a, 't) gexpr list * StructName.t -> (scalc as 'a, 't) naked_gexpr @@ -257,7 +263,7 @@ and ('a, 't) naked_gexpr = * | ESInj: ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) naked_gexpr * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) naked_gexpr *) -type 'e anyexpr = 'e constraint 'e = (_ any, _) naked_gexpr +type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr (** Shorter alias for functions taking any kind of expression *) (** {2 Markings} *) @@ -268,27 +274,21 @@ type typed = { pos : Pos.t; ty : typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when appropriate. Expected to fill the ['t] parameter of [naked_gexpr] and - [gexpr] (a ['t] annotation different from this type is used in the - middle of the typing processing, but all visible ASTs should otherwise use - this. *) + [gexpr] (a ['t] annotation different from this type is used in the middle of + the typing processing, but all visible ASTs should otherwise use this. *) type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark -type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) naked_gexpr -(** [('a, 't) naked_gexpr marked] is equivalent to [('a, 'm mark) gexpr] but - often more convenient to write since we generally use the type of - expressions ['e = (_, _ mark) naked_gexpr] as type parameter. *) - (** Useful for errors and printing, for example *) -type any_marked_expr = - | AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr +type any_marked_expr = AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr (** {2 Higher-level program structure} *) (** Constructs scopes and programs on top of expressions. The ['e] type - parameter throughout is expected to match instances of the [naked_gexpr] type - defined above. Markings are constrained to the [mark] GADT defined above. - Note that this structure is at the moment only relevant for [dcalc] and - [lcalc], as [scopelang] has its own scope structure, as the name implies. *) + parameter throughout is expected to match instances of the [naked_gexpr] + type defined above. Markings are constrained to the [mark] GADT defined + above. Note that this structure is at the moment only relevant for [dcalc] + and [lcalc], as [scopelang] has its own scope structure, as the name + implies. *) (** This kind annotation signals that the let-binding respects a structural invariant. These invariants concern the shape of the expression in the @@ -306,11 +306,11 @@ type scope_let_kind = type 'e scope_let = { scope_let_kind : scope_let_kind; scope_let_typ : typ; - scope_let_expr : 'e marked; - scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; + scope_let_expr : 'e; + scope_let_next : ('e, 'e scope_body_expr) binder; scope_let_pos : Pos.t; } - constraint 'e = ('a, 'm mark) naked_gexpr + constraint 'e = ('a, 'm mark) gexpr (** This type is parametrized by the expression type so it can be reused in later intermediate representations. *) @@ -318,15 +318,16 @@ type 'e scope_let = { let-binding expression, plus an annotation for the kind of the let-binding that comes from the compilation of a {!module: Scopelang.Ast} statement. *) and 'e scope_body_expr = - | Result of 'e marked + | Result of 'e | ScopeLet of 'e scope_let - constraint 'e = ('a, 'm mark) naked_gexpr + constraint 'e = (_, _ mark) gexpr type 'e scope_body = { scope_body_input_struct : StructName.t; scope_body_output_struct : StructName.t; - scope_body_expr : ('e, 'e scope_body_expr) Bindlib.binder; + scope_body_expr : ('e, 'e scope_body_expr) binder; } + constraint 'e = (_, _ mark) gexpr (** Instead of being a single expression, we give a little more ad-hoc structure to the scope body by decomposing it in an ordered list of let-bindings, and a result expression that uses the let-binded variables. The first binder is @@ -335,15 +336,16 @@ type 'e scope_body = { type 'e scope_def = { scope_name : ScopeName.t; scope_body : 'e scope_body; - scope_next : ('e, 'e scopes) Bindlib.binder; + scope_next : ('e, 'e scopes) binder; } + constraint 'e = (_, _ mark) gexpr (** Finally, we do the same transformation for the whole program for the kinded lets. This permit us to use bindlib variables for scopes names. *) and 'e scopes = | Nil | ScopeDef of 'e scope_def - constraint 'e = ('a, 'm mark) naked_gexpr + constraint 'e = (_, _ mark) gexpr type struct_ctx = (StructFieldName.t * typ) list StructMap.t type enum_ctx = (EnumConstructor.t * typ) list EnumMap.t diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 4c23888c..3c66fa66 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -18,8 +18,6 @@ open Utils open Definitions -type 'a box = 'a Bindlib.box - (** Functions handling the types of [shared_ast] *) (* Basic block constructors *) @@ -108,11 +106,8 @@ let with_ty (type m) (ty : typ) (x : ('a, m mark) Marked.t) : | Typed m -> Typed { m with ty }) (Marked.unmark x) -let map_mark - (type m) - (pos_f : Pos.t -> Pos.t) - (ty_f : typ -> typ) - (m : m mark) : m mark = +let map_mark (type m) (pos_f : Pos.t -> Pos.t) (ty_f : typ -> typ) (m : m mark) + : m mark = match m with | Untyped { pos } -> Untyped { pos = pos_f pos } | Typed { pos; ty } -> Typed { pos = pos_f pos; ty = ty_f ty } @@ -283,7 +278,7 @@ let make_default exceptions just cons mark = (* Tests *) -let is_value (type a) (e : (a, 'm mark) naked_gexpr marked) = +let is_value (type a) (e : (a, _) gexpr) = match Marked.unmark e with | ELit _ | EAbs _ | EOp _ | ERaise _ -> true | _ -> false @@ -532,8 +527,7 @@ let compare_except ex1 ex2 = Stdlib.compare ex1 ex2 (* weird indentation; see https://github.com/ocaml-ppx/ocamlformat/issues/2143 *) -let rec equal_list : - 'a. ('a, 't) gexpr list -> ('a, 't) gexpr list -> bool = +let rec equal_list : 'a. ('a, 't) gexpr list -> ('a, 't) gexpr list -> bool = fun es1 es2 -> try List.for_all2 equal es1 es2 with Invalid_argument _ -> false @@ -683,7 +677,7 @@ let rec compare : type a. (a, _) gexpr -> (a, _) gexpr -> int = | ERaise _, _ -> -1 | _, ERaise _ -> 1 | ECatch _, _ -> . | _, ECatch _ -> . -let rec free_vars : type a. (a, 't) naked_gexpr marked -> (a, 't) naked_gexpr Var.Set.t = +let rec free_vars : type a. (a, 't) gexpr -> (a, 't) gexpr Var.Set.t = fun e -> match Marked.unmark e with | EOp _ | ELit _ | ERaise _ -> Var.Set.empty @@ -731,9 +725,9 @@ let remove_logging_calls e = in f () e -let format ?debug decl_ctx ppf e = Print.naked_expr ?debug decl_ctx ppf e +let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e -let rec size : type a. (a, 't) naked_gexpr marked -> int = +let rec size : type a. (a, 't) gexpr -> int = fun e -> match Marked.unmark e with | EVar _ | ELit _ | EOp _ -> 1 diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index f2a77758..0cb89353 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -20,12 +20,10 @@ open Utils open Definitions -type 'a box = 'a Bindlib.box - (** {2 Boxed constructors} *) val box : ('a, 't) gexpr -> ('a, 't) gexpr box -val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr box +val evar : ('a, 't) gexpr Var.t -> 't -> ('a, 't) gexpr box val etuple : (([< dcalc | lcalc ] as 'a), 't) gexpr box list -> @@ -56,29 +54,20 @@ val ematch : 't -> ('a, 't) gexpr box -val earray : - ('a any, 't) gexpr box list -> - 't -> - ('a, 't) gexpr box - +val earray : ('a any, 't) gexpr box list -> 't -> ('a, 't) gexpr box val elit : 'a any glit -> 't -> ('a, 't) gexpr box val eabs : - (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder box -> + (('a any, 't) gexpr, ('a, 't) gexpr) mbinder box -> typ list -> 't -> ('a, 't) gexpr box val eapp : - ('a any, 't) gexpr box -> - ('a, 't) gexpr box list -> - 't -> - ('a, 't) gexpr box + ('a any, 't) gexpr box -> ('a, 't) gexpr box list -> 't -> ('a, 't) gexpr box val eassert : - (([< dcalc | lcalc ] as 'a), 't) gexpr box -> - 't -> - ('a, 't) gexpr box + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> 't -> ('a, 't) gexpr box val eop : operator -> 't -> (_ any, 't) gexpr box @@ -114,12 +103,10 @@ val eraise : except -> 't -> (lcalc, 't) gexpr box val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t -val pos : ('e, _) naked_gexpr marked -> Pos.t +val pos : ('e, _ mark) gexpr -> Pos.t val ty : (_, typed mark) Marked.t -> typ val with_ty : typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t - -val map_mark : - (Pos.t -> Pos.t) -> (typ -> typ) -> 'm mark -> 'm mark +val map_mark : (Pos.t -> Pos.t) -> (typ -> typ) -> 'm mark -> 'm mark val map_mark2 : (Pos.t -> Pos.t -> Pos.t) -> @@ -131,8 +118,7 @@ val map_mark2 : val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> typ) -> 'm mark list -> 'm mark -val untype : - ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box +val untype : ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box (** {2 Traversal functions} *) @@ -168,39 +154,38 @@ val map_top_down : returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) -val map_marks : - f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr box +val map_marks : f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr box (** {2 Expression building helpers} *) -val make_var : 'a Bindlib.var * 'b -> ('a * 'b) box +val make_var : ('a, 't) gexpr Var.t * 'b -> (('a, 't) naked_gexpr * 'b) box val make_abs : - ('a, 't) naked_gexpr Var.vars -> + ('a, 't) gexpr Var.vars -> ('a, 't) gexpr box -> typ list -> 't -> ('a, 't) gexpr box val make_app : - ((_ any, 'm mark) naked_gexpr as 'e) marked box -> - 'e marked box list -> + ('a any, 'm mark) gexpr box -> + ('a, 'm mark) gexpr box list -> 'm mark -> - 'e marked box + ('a, 'm mark) gexpr box val empty_thunked_term : - 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) naked_gexpr marked + 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) gexpr val make_let_in : - 'e Bindlib.var -> + ('a, 'm mark) gexpr Var.t -> typ -> - 'e anyexpr marked box -> - 'e marked box -> + ('a, 'm mark) gexpr box -> + ('a, 'm mark) gexpr box -> Utils.Pos.t -> - 'e marked box + ('a, 'm mark) gexpr box val make_let_in_raw : - ('a any, 't) naked_gexpr Bindlib.var -> + ('a, 't) gexpr Var.t -> typ -> ('a, 't) gexpr box -> ('a, 't) gexpr box -> @@ -209,12 +194,12 @@ val make_let_in_raw : (** Version with any mark; to be removed once we use the [mark] type everywhere. *) val make_multiple_let_in : - 'e Var.vars -> + ('a, 'm mark) gexpr Var.vars -> typ list -> - 'e marked box list -> - 'e marked box -> + ('a, 'm mark) gexpr box list -> + ('a, 'm mark) gexpr box -> Pos.t -> - 'e marked box + ('a, 'm mark) gexpr box val make_default : (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr list -> @@ -237,8 +222,7 @@ val make_default : (** {2 Transformations} *) -val remove_logging_calls : - ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked box +val remove_logging_calls : ('a any, 't) gexpr -> ('a, 't) gexpr box (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) @@ -246,7 +230,7 @@ val format : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - 'e marked -> + (_, _ mark) gexpr -> unit (** {2 Analysis and tests} *) @@ -264,8 +248,8 @@ val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int information *) val compare_typ : typ -> typ -> int -val is_value : (_ any, 'm mark) naked_gexpr marked -> bool -val free_vars : 'e marked -> 'e Var.Set.t +val is_value : ('a any, 't) gexpr -> bool +val free_vars : ('a any, 't) gexpr -> ('a, 't) gexpr Var.Set.t -val size : (_ any, 't) naked_gexpr marked -> int +val size : ('a, 't) gexpr -> int (** Used by the optimizer to know when to stop *) diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 9077ecf5..8a3f4034 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -211,22 +211,19 @@ let var fmt v = let needs_parens (type a) (e : (a, _) gexpr) : bool = match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false -let rec naked_expr : +let rec expr : 'a. - ?debug:bool -> - decl_ctx -> - Format.formatter -> - ('a, 't) gexpr -> - unit = + ?debug:bool -> decl_ctx -> Format.formatter -> ('a, 't) gexpr -> unit + = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) (e : (a, 't) gexpr) -> - let naked_expr e = naked_expr ~debug ctx e in + let expr e = expr ~debug ctx e in let with_parens fmt e = if needs_parens e then ( punctuation fmt "("; - naked_expr fmt e; + expr fmt e; punctuation fmt ")") - else naked_expr fmt e + else expr fmt e in match Marked.unmark e with | EVar v -> Format.fprintf fmt "%a" var v @@ -234,7 +231,7 @@ let rec naked_expr : Format.fprintf fmt "@[%a%a%a@]" punctuation "(" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt e -> Format.fprintf fmt "%a" naked_expr e)) + (fun fmt e -> Format.fprintf fmt "%a" expr e)) es punctuation ")" | ETuple (es, Some s) -> Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t s @@ -244,35 +241,35 @@ let rec naked_expr : (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t struct_field punctuation "\"" punctuation - "=" naked_expr e)) + "=" expr e)) (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") - (fun fmt e -> Format.fprintf fmt "%a" naked_expr e)) + (fun fmt e -> Format.fprintf fmt "%a" expr e)) es punctuation "]" | ETupleAccess (e1, n, s, _ts) -> ( match s with - | None -> Format.fprintf fmt "%a%a%d" naked_expr e1 punctuation "." n + | None -> Format.fprintf fmt "%a%a%d" expr e1 punctuation "." n | Some s -> - Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 operator "." punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" expr e1 operator "." punctuation "\"" StructFieldName.format_t (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) punctuation "\"") | EInj (e, n, en, _ts) -> Format.fprintf fmt "@[%a@ %a@]" enum_constructor (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) - naked_expr e + expr e | EMatch (e, es, e_name) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - naked_expr e keyword "with" + expr e keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (e, c) -> Format.fprintf fmt "@[%a %a%a@ %a@]" punctuation "|" - enum_constructor c punctuation ":" naked_expr e)) + enum_constructor c punctuation ":" expr e)) (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) | ELit l -> lit fmt l | EApp ((EAbs (binder, taus), _), args) -> @@ -285,8 +282,8 @@ let rec naked_expr : (fun fmt (x, tau, arg) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@]@\n" keyword "let" var x punctuation ":" (typ ctx) tau punctuation "=" - naked_expr arg keyword "in")) - xs_tau_arg naked_expr body + expr arg keyword "in")) + xs_tau_arg expr body | EAbs (binder, taus) -> let xs, body = Bindlib.unmbind binder in let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in @@ -296,44 +293,44 @@ let rec naked_expr : (fun fmt (x, tau) -> Format.fprintf fmt "%a%a%a %a%a" punctuation "(" var x punctuation ":" (typ ctx) tau punctuation ")")) - xs_tau punctuation "→" naked_expr body + xs_tau punctuation "→" expr body | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" binop op with_parens arg1 with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 binop op with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> naked_expr fmt arg1 + | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> expr fmt arg1 | EApp ((EOp (Unop op), _), [arg1]) -> Format.fprintf fmt "@[%a@ %a@]" unop op with_parens arg1 | EApp (f, args) -> - Format.fprintf fmt "@[%a@ %a@]" naked_expr f + Format.fprintf fmt "@[%a@ %a@]" expr f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") with_parens) args | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" naked_expr e1 - keyword "then" naked_expr e2 keyword "else" naked_expr e3 + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" expr e1 + keyword "then" expr e2 keyword "else" expr e3 | EOp (Ternop op) -> Format.fprintf fmt "%a" ternop op | EOp (Binop op) -> Format.fprintf fmt "%a" binop op | EOp (Unop op) -> Format.fprintf fmt "%a" unop op | EDefault (exceptions, just, cons) -> if List.length exceptions = 0 then - Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" naked_expr just - punctuation "⊢" naked_expr cons punctuation "⟩" + Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" expr just + punctuation "⊢" expr cons punctuation "⟩" else Format.fprintf fmt "@[%a%a@ %a@ %a@ %a@ %a%a@]" punctuation "⟨" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",") - naked_expr) - exceptions punctuation "|" naked_expr just punctuation "⊢" naked_expr cons + expr) + exceptions punctuation "|" expr just punctuation "⊢" expr cons punctuation "⟩" | ErrorOnEmpty e' -> Format.fprintf fmt "%a@ %a" operator "error_empty" with_parens e' | EAssert e' -> Format.fprintf fmt "@[%a@ %a%a%a@]" keyword "assert" punctuation "(" - naked_expr e' punctuation ")" + expr e' punctuation ")" | ECatch (e1, exn, e2) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a ->@ %a@]" keyword "try" with_parens e1 keyword "with" except exn with_parens e2 @@ -348,20 +345,20 @@ let rec naked_expr : (fun fmt (field_name, field_expr) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t field_name punctuation "\"" punctuation - "=" naked_expr field_expr)) + "=" expr field_expr)) (StructFieldMap.bindings fields) punctuation "}" | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 punctuation "." punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" expr e1 punctuation "." punctuation "\"" StructFieldName.format_t field punctuation "\"" | EEnumInj (e1, cons, _) -> - Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons naked_expr e1 + Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons expr e1 | EMatchS (e1, _, cases) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - naked_expr e1 keyword "with" + expr e1 keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cons_name, case_expr) -> Format.fprintf fmt "@[%a %a@ %a@ %a@]" punctuation "|" - enum_constructor cons_name punctuation "→" naked_expr case_expr)) + enum_constructor cons_name punctuation "→" expr case_expr)) (EnumConstructorMap.bindings cases) diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index e0cc7f51..5fbd47cb 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -43,7 +43,7 @@ val unop : Format.formatter -> unop -> unit val except : Format.formatter -> except -> unit val var : Format.formatter -> 'e Var.t -> unit -val naked_expr : +val expr : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index 87584316..092111b9 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -22,10 +22,9 @@ let map_exprs ~f ~varf { scopes; decl_ctx } = (fun scopes -> { scopes; decl_ctx }) (Scope.map_exprs ~f ~varf scopes) -let untype : 'm. ('a, 'm mark) naked_gexpr program -> ('a, untyped mark) naked_gexpr program +let untype : 'm. ('a, 'm mark) gexpr program -> ('a, untyped mark) gexpr program = - fun (prg : ('a, 'm mark) naked_gexpr program) -> - Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) + fun prg -> Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) let rec find_scope name vars = function | Nil -> raise Not_found diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index c9ece890..9e7246e7 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -20,19 +20,17 @@ open Definitions (** {2 Transformations} *) val map_exprs : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + f:('expr1 -> 'expr2 box) -> + varf:('expr1 Var.t -> 'expr2 Var.t) -> 'expr1 program -> - 'expr2 program Bindlib.box + 'expr2 program box val untype : - (([< dcalc | lcalc ] as 'a), 'm mark) naked_gexpr program -> - ('a, untyped mark) naked_gexpr program + (([< dcalc | lcalc ] as 'a), 'm mark) gexpr program -> + ('a, untyped mark) gexpr program val to_expr : - (([< dcalc | lcalc ], _) naked_gexpr as 'e) program -> - ScopeName.t -> - 'e marked Bindlib.box + (([< dcalc | lcalc ], _) gexpr as 'e) program -> ScopeName.t -> 'e box (** Usage: [build_whole_program_expr program main_scope] builds an expression corresponding to the main program and returning the main scope as a function. *) diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index 3d889b46..91d5f2ae 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -97,7 +97,7 @@ let get_body_mark scope_body = | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e let rec unfold_body_expr (ctx : decl_ctx) (scope_let : 'e scope_body_expr) : - 'e marked Bindlib.box = + 'e box = match scope_let with | Result e -> Expr.box e | ScopeLet @@ -122,12 +122,10 @@ let build_typ_from_sig let result_typ = Marked.mark pos (TStruct scope_return_struct_name) in Marked.mark pos (TArrow (input_typ, result_typ)) -type 'e scope_name_or_var = - | ScopeName of ScopeName.t - | ScopeVar of 'e Bindlib.var +type 'e scope_name_or_var = ScopeName of ScopeName.t | ScopeVar of 'e Var.t let to_expr (ctx : decl_ctx) (body : 'e scope_body) (mark_scope : 'm mark) : - 'e marked Bindlib.box = + 'e box = let var, body_expr = Bindlib.unbind body.scope_body_expr in let body_expr = unfold_body_expr ctx body_expr in Expr.make_abs [| var |] body_expr @@ -152,7 +150,7 @@ let rec unfold (ctx : decl_ctx) (s : 'e scopes) (mark : 'm mark) - (main_scope : 'naked_expr scope_name_or_var) : 'e marked Bindlib.box = + (main_scope : 'expr scope_name_or_var) : 'e Bindlib.box = match s with | Nil -> ( match main_scope with diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 524fa8a7..bdc22a43 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -23,7 +23,7 @@ open Definitions (** {2 Traversal functions} *) val fold_left_lets : - f:('a -> 'e scope_let -> 'e Bindlib.var -> 'a) -> + f:('a -> 'e scope_let -> 'e Var.t -> 'a) -> init:'a -> 'e scope_body_expr -> 'a @@ -33,8 +33,8 @@ val fold_left_lets : scope lets to be examined. *) val fold_right_lets : - f:('expr1 scope_let -> 'expr1 Bindlib.var -> 'a -> 'a) -> - init:('expr1 marked -> 'a) -> + f:('expr1 scope_let -> 'expr1 Var.t -> 'a -> 'a) -> + init:('expr1 -> 'a) -> 'expr1 scope_body_expr -> 'a (** Usage: @@ -43,13 +43,13 @@ val fold_right_lets : scope lets to be examined (which are before in the program order). *) val map_exprs_in_lets : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + f:('expr1 -> 'expr2 box) -> + varf:('expr1 Var.t -> 'expr2 Var.t) -> 'expr1 scope_body_expr -> - 'expr2 scope_body_expr Bindlib.box + 'expr2 scope_body_expr box val fold_left : - f:('a -> 'expr1 scope_def -> 'expr1 Bindlib.var -> 'a) -> + f:('a -> 'expr1 scope_def -> 'expr1 Var.t -> 'a) -> init:'a -> 'expr1 scopes -> 'a @@ -58,7 +58,7 @@ val fold_left : be examined. *) val fold_right : - f:('expr1 scope_def -> 'expr1 Bindlib.var -> 'a -> 'a) -> + f:('expr1 scope_def -> 'expr1 Var.t -> 'a -> 'a) -> init:'a -> 'expr1 scopes -> 'a @@ -67,20 +67,17 @@ val fold_right : where [scope_var] is the variable bound to the scope in the next scopes to be examined (which are before in the program order). *) -val map : - f:('e scope_def -> 'e scope_def Bindlib.box) -> - 'e scopes -> - 'e scopes Bindlib.box +val map : f:('e scope_def -> 'e scope_def box) -> 'e scopes -> 'e scopes box val map_exprs : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + f:('expr1 -> 'expr2 box) -> + varf:('expr1 Var.t -> 'expr2 Var.t) -> 'expr1 scopes -> - 'expr2 scopes Bindlib.box + 'expr2 scopes box (** This is the main map visitor for all the expressions inside all the scopes of the program. *) -val get_body_mark : (_, 'm mark) naked_gexpr scope_body -> 'm mark +val get_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark (** {2 Conversions} *) @@ -93,22 +90,20 @@ val format : val to_expr : decl_ctx -> - ((_ any, 'm mark) naked_gexpr as 'e) scope_body -> + ('a any, 'm mark) gexpr scope_body -> 'm mark -> - 'e marked Bindlib.box + ('a, 'm mark) gexpr box (** Usage: [to_expr ctx body scope_position] where [scope_position] corresponds to the line of the scope declaration for instance. *) -type 'e scope_name_or_var = - | ScopeName of ScopeName.t - | ScopeVar of 'e Bindlib.var +type 'e scope_name_or_var = ScopeName of ScopeName.t | ScopeVar of 'e Var.t val unfold : decl_ctx -> - ((_ any, 'm mark) naked_gexpr as 'e) scopes -> + ((_, 'm mark) gexpr as 'e) scopes -> 'm mark -> 'e scope_name_or_var -> - 'e marked Bindlib.box + 'e box val build_typ_from_sig : decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld index 2ffe7c39..0c0c31c0 100644 --- a/compiler/shared_ast/shared_ast.mld +++ b/compiler/shared_ast/shared_ast.mld @@ -17,7 +17,7 @@ irrelevant cases, so that e.g. [(dcalc, _) naked_gexpr] doesn't have the [ERaise [ECatch] cases, while [(lcalc, _) naked_gexpr] doesn't have [EDefault]. For example, Lcalc expressions are then defined as -[type 'm naked_expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. +[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.gexpr]. This makes it possible to write a single function that works on the different ASTs, by having it take a [('a, _) naked_gexpr] as input, while retaining a much diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index a5cc424b..1583bd8b 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -18,12 +18,13 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] +(** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e t = 'e anyexpr Bindlib.var -type 'e vars = 'e anyexpr Bindlib.mvar -type 'e binder = ('e, 'e marked) Bindlib.binder +type 'e t = ('a, 't) naked_gexpr Bindlib.var constraint 'e = ('a any, 't) gexpr + +type 'e vars = ('a, 't) naked_gexpr Bindlib.mvar + constraint 'e = ('a any, 't) gexpr let make (name : string) : 'e t = Bindlib.new_var (fun x -> EVar x) name let compare = Bindlib.compare_vars @@ -36,7 +37,7 @@ type 'e var = 'e t (* The purpose of this module is just to lift a type parameter outside of [Set.S] and [Map.S], so that we can have ['e Var.Set.t] for sets of variables - bound to the ['e = ('a, 't) naked_gexpr] expression type. This is made possible by + bound to the ['e = ('a, 't) gexpr] expression type. This is made possible by the fact that [Bindlib.compare_vars] is polymorphic in that parameter; we first hide that parameter inside an existential, then re-add a phantom type outside of the set to ensure consistency. Extracting the elements is then diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 29e0332c..67708ef4 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -18,12 +18,13 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] +(** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e t = 'e anyexpr Bindlib.var -type 'e vars = 'e anyexpr Bindlib.mvar -type 'e binder = ('e, 'e marked) Bindlib.binder +type 'e t = ('a, 't) naked_gexpr Bindlib.var constraint 'e = ('a any, 't) gexpr + +type 'e vars = ('a, 't) naked_gexpr Bindlib.mvar + constraint 'e = ('a any, 't) gexpr val make : string -> 'e t val compare : 'e t -> 'e t -> int diff --git a/compiler/surface/ast.ml b/compiler/surface/ast.ml index 85034340..47dbfdb5 100644 --- a/compiler/surface/ast.ml +++ b/compiler/surface/ast.ml @@ -135,6 +135,7 @@ type func_typ = { }] type typ = naked_typ Marked.pos + and naked_typ = Base of base_typ | Func of func_typ [@@deriving visitors diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 164cb98e..e34ee961 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -116,19 +116,18 @@ let disambiguate_constructor Errors.raise_spanned_error (Marked.get_mark enum) "Enum %s has not been defined before" (Marked.unmark enum)) -(** Usage: [translate_expr scope ctxt naked_expr] +(** Usage: [translate_expr scope ctxt expr] - Translates [naked_expr] into its desugared equivalent. [scope] is used to + Translates [expr] into its desugared equivalent. [scope] is used to disambiguate the scope and subscopes variables than occur in the expression *) let rec translate_expr (scope : ScopeName.t) (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) - ((naked_expr, pos) : Ast.expression Marked.pos) : - Desugared.Ast.expr Bindlib.box = + ((expr, pos) : Ast.expression Marked.pos) : Desugared.Ast.expr Bindlib.box = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in - match naked_expr with + match expr with | Binop ( (Ast.And, _pos_op), ( TestMatchCase (e1_sub, ((constructors, Some binding), pos_pattern)), @@ -785,8 +784,7 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.expr Bindlib.box EnumConstructorMap.t * EnumName.t - = + Desugared.Ast.expr Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" | Some param -> @@ -798,9 +796,8 @@ and disambiguate_match_and_build_expression (e_uid : EnumName.t) (ctxt : Name_resolution.context) (case_body : ('a * Pos.t) Bindlib.box) - (e_binder : - (Desugared.Ast.naked_expr, Desugared.Ast.naked_expr * Pos.t) Bindlib.mbinder - Bindlib.box) : 'c Bindlib.box = + (e_binder : (Desugared.Ast.expr, Desugared.Ast.expr) mbinder Bindlib.box) + : 'c Bindlib.box = Bindlib.box_apply2 (fun e_binder case_body -> Marked.same_mark_as @@ -912,10 +909,10 @@ and disambiguate_match_and_build_expression missing_constructors (cases_d, Some e_uid, curr_index)) in - let naked_expr, e_name, _ = + let expr, e_name, _ = List.fold_left bind_match_cases (EnumConstructorMap.empty, None, 0) cases in - naked_expr, Option.get e_name + expr, Option.get e_name [@@ocamlformat "wrap-comments=false"] (** {1 Translating scope definitions} *) @@ -948,7 +945,7 @@ let process_default (scope : ScopeName.t) (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) - (param_uid : Desugared.Ast.naked_expr Var.t Marked.pos option) + (param_uid : Desugared.Ast.expr Var.t Marked.pos option) (precond : Desugared.Ast.expr Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index 65ac15d3..bf30c464 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -148,8 +148,7 @@ let belongs_to (ctxt : context) (uid : ScopeVar.t) (scope_uid : ScopeName.t) : scope.var_idmap (** Retrieves the type of a scope definition from the context *) -let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : - typ = +let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : typ = match def with | Desugared.Ast.ScopeDef.SubScopeVar (_, x) (* we don't need to look at the subscope prefix because [x] is already the uid @@ -249,8 +248,7 @@ let rec process_base_typ ident))) (** Process a type (function or not) *) -let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : - typ = +let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : typ = match naked_typ with | Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) | Ast.Func { arg_typ; return_typ } -> @@ -321,7 +319,7 @@ let process_item_decl (** Adds a binding to the context *) let add_def_local_var (ctxt : context) (name : ident) : - context * Desugared.Ast.naked_expr Var.t = + context * Desugared.Ast.expr Var.t = let local_var_uid = Var.make name in let ctxt = { diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index d8e2eb39..0479f5a7 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -120,7 +120,7 @@ val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool val is_type_cond : Ast.typ -> bool -val add_def_local_var : context -> ident -> context * Desugared.Ast.naked_expr Var.t +val add_def_local_var : context -> ident -> context * Desugared.Ast.expr Var.t (** Adds a binding to the context *) val get_def_key : diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index b8287cc9..6f9ca9f9 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -22,15 +22,15 @@ open Ast (** {1 Helpers and type definitions}*) -type vc_return = typed expr * (typed naked_expr, typ) Var.Map.t +type vc_return = typed expr * (typed expr, typ) Var.Map.t (** The return type of VC generators is the VC expression plus the types of any locally free variable inside that expression. *) type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; - input_vars : typed naked_expr Var.t list; - scope_variables_typs : (typed naked_expr, typ) Var.Map.t; + input_vars : typed expr Var.t list; + scope_variables_typs : (typed expr, typ) Var.Map.t; } let conjunction (args : vc_return list) (mark : typed mark) : vc_return = @@ -74,8 +74,8 @@ let half_product (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list = variables, or [fun () -> e1] for subscope variables. But what we really want to analyze is only [e1], so we match this outermost structure explicitely and have a clean verification condition generator that only runs on [e1] *) -let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) - : typed expr = +let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) : + typed expr = match Marked.unmark e with | ErrorOnEmpty ( EDefault @@ -200,8 +200,8 @@ let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed expr) : [b] such that if [b] is true, then [e] will never return a conflict error. It also returns a map of all the types of locally free variables inside the expression. *) -let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed expr) - : vc_return = +let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed expr) : + vc_return = let out = (* See the code of [generate_vc_must_not_return_empty] for a list of invariants on which this function relies on. *) @@ -287,13 +287,13 @@ type verification_condition = { (* should have type bool *) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed naked_expr, typ) Var.Map.t; + vc_variable : typed expr Var.t Marked.pos; + vc_free_vars_typ : (typed expr, typ) Var.Map.t; } let rec generate_verification_conditions_scope_body_expr (ctx : ctx) - (scope_body_expr : 'm naked_expr scope_body_expr) : + (scope_body_expr : 'm expr scope_body_expr) : ctx * verification_condition list = match scope_body_expr with | Result _ -> ctx, [] @@ -378,7 +378,7 @@ let rec generate_verification_conditions_scope_body_expr let rec generate_verification_conditions_scopes (decl_ctx : decl_ctx) - (scopes : 'm naked_expr scopes) + (scopes : 'm expr scopes) (s : ScopeName.t option) : verification_condition list = match scopes with | Nil -> [] diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 5bc8f2f4..cd12bf03 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -33,8 +33,8 @@ type verification_condition = { (** This expression should have type [bool]*) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed Dcalc.Ast.naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ) Var.Map.t; + vc_variable : typed Dcalc.Ast.expr Var.t Marked.pos; + vc_free_vars_typ : (typed Dcalc.Ast.expr, typ) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 4842dd58..c0b03c3d 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -24,8 +24,7 @@ module type Backend = sig type backend_context - val make_context : - decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context + val make_context : decl_ctx -> (typed expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -39,9 +38,7 @@ module type Backend = sig val is_model_empty : model -> bool val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding end module type BackendIO = sig @@ -49,15 +46,12 @@ module type BackendIO = sig type backend_context - val make_context : - decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context + val make_context : decl_ctx -> (typed expr, typ) Var.Map.t -> backend_context type vc_encoding val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 3e392d0b..4cd95813 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -25,9 +25,7 @@ module type Backend = sig type backend_context val make_context : - decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> - backend_context + decl_ctx -> (typed Dcalc.Ast.expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -41,9 +39,7 @@ module type Backend = sig val is_model_empty : model -> bool val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding end module type BackendIO = sig @@ -52,16 +48,12 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> - backend_context + decl_ctx -> (typed Dcalc.Ast.expr, typ) Var.Map.t -> backend_context type vc_encoding val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index fb89e9ec..d58bb90d 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -27,20 +27,20 @@ type context = { ctx_decl : decl_ctx; (* The declaration context from the Catala program, containing information to precisely pretty print Catala expressions *) - ctx_var : (typed naked_expr, typ) Var.Map.t; + ctx_var : (typed expr, typ) Var.Map.t; (* A map from Catala variables to their types, needed to create Z3 expressions of the right sort *) - ctx_funcdecl : (typed naked_expr, FuncDecl.func_decl) Var.Map.t; + ctx_funcdecl : (typed expr, FuncDecl.func_decl) Var.Map.t; (* A map from Catala function names (represented as variables) to Z3 function declarations, used to only define once functions in Z3 queries *) - ctx_z3vars : typed naked_expr Var.t StringMap.t; + ctx_z3vars : typed expr Var.t StringMap.t; (* A map from strings, corresponding to Z3 symbol names, to the Catala variable they represent. Used when to pretty-print Z3 models when a counterexample is generated *) ctx_z3datatypes : Sort.sort EnumMap.t; (* A map from Catala enumeration names to the corresponding Z3 sort, from which we can retrieve constructors and accessors *) - ctx_z3matchsubsts : (typed naked_expr, Expr.expr) Var.Map.t; + ctx_z3matchsubsts : (typed expr, Expr.expr) Var.Map.t; (* A map from Catala temporary variables, generated when translating a match, to the corresponding enum accessor call as a Z3 expression *) ctx_z3structs : Sort.sort StructMap.t; @@ -66,14 +66,14 @@ type context = { (** [add_funcdecl] adds the mapping between the Catala variable [v] and the Z3 function declaration [fd] to the context **) let add_funcdecl - (v : typed naked_expr Var.t) + (v : typed expr Var.t) (fd : FuncDecl.func_decl) (ctx : context) : context = { ctx with ctx_funcdecl = Var.Map.add v fd ctx.ctx_funcdecl } (** [add_z3var] adds the mapping between [name] and the Catala variable [v] to the context **) -let add_z3var (name : string) (v : typed naked_expr Var.t) (ctx : context) : context = +let add_z3var (name : string) (v : typed expr Var.t) (ctx : context) : context = { ctx with ctx_z3vars = StringMap.add name v ctx.ctx_z3vars } (** [add_z3enum] adds the mapping between the Catala enumeration [enum] and the @@ -84,7 +84,7 @@ let add_z3enum (enum : EnumName.t) (sort : Sort.sort) (ctx : context) : context (** [add_z3var] adds the mapping between temporary variable [v] and the Z3 expression [e] representing an accessor application to the context **) -let add_z3matchsubst (v : typed naked_expr Var.t) (e : Expr.expr) (ctx : context) : +let add_z3matchsubst (v : typed expr Var.t) (e : Expr.expr) (ctx : context) : context = { ctx with ctx_z3matchsubsts = Var.Map.add v e ctx.ctx_z3matchsubsts } @@ -129,8 +129,7 @@ let nb_days_to_date (nb : int) : string = (** [print_z3model_expr] pretty-prints the value [e] given by a Z3 model according to the Catala type [ty], corresponding to [e] **) -let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) - : string = +let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) : string = let print_lit (ty : typ_lit) = match ty with (* TODO: Print boolean according to current language *) @@ -284,9 +283,7 @@ let rec translate_typ (ctx : context) (t : naked_typ) : context * Sort.sort = and find_or_create_enum (ctx : context) (enum : EnumName.t) : context * Sort.sort = (* Creates a Z3 constructor corresponding to the Catala constructor [c] *) - let create_constructor - (ctx : context) - (c : EnumConstructor.t * typ) : + let create_constructor (ctx : context) (c : EnumConstructor.t * typ) : context * Datatype.Constructor.constructor = let name, ty = c in let name = Marked.unmark (EnumConstructor.get_info name) in @@ -390,7 +387,7 @@ let translate_lit (ctx : context) (l : lit) : Expr.expr = corresponding to the variable [v]. If no such function declaration exists yet, we construct it and add it to the context, thus requiring to return a new context *) -let find_or_create_funcdecl (ctx : context) (v : typed naked_expr Var.t) : +let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : context * FuncDecl.func_decl = match Var.Map.find_opt v ctx.ctx_funcdecl with | Some fd -> ctx, fd @@ -417,10 +414,8 @@ let find_or_create_funcdecl (ctx : context) (v : typed naked_expr Var.t) : (** [translate_op] returns the Z3 expression corresponding to the application of [op] to the arguments [args] **) -let rec translate_op - (ctx : context) - (op : operator) - (args : 'm expr list) : context * Expr.expr = +let rec translate_op (ctx : context) (op : operator) (args : 'm expr list) : + context * Expr.expr = match op with | Ternop _top -> let _e1, _e2, _e3 = @@ -810,8 +805,7 @@ module Backend = struct let make_context (decl_ctx : decl_ctx) - (free_vars_typ : (typed naked_expr, typ) Var.Map.t) : backend_context - = + (free_vars_typ : (typed expr, typ) Var.Map.t) : backend_context = let cfg = (if !Cli.disable_counterexamples then [] else ["model", "true"]) @ ["proof", "false"] From 8f7ba5ccafd6ecc4adf9653cd7161ef3135a6a2f Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:31:32 +0200 Subject: [PATCH 23/31] Rename marked_gexpr -> gexpr, gexpr -> naked_gexpr Since the marked kind is used throughout, this should be more clear --- compiler/dcalc/ast.ml | 4 +- compiler/dcalc/ast.mli | 4 +- compiler/dcalc/typing.ml | 10 +-- compiler/desugared/ast.ml | 2 +- compiler/desugared/ast.mli | 4 +- compiler/lcalc/ast.ml | 4 +- compiler/lcalc/ast.mli | 4 +- compiler/scopelang/ast.ml | 2 +- compiler/scopelang/ast.mli | 4 +- compiler/shared_ast/definitions.ml | 116 +++++++++++++------------- compiler/shared_ast/expr.ml | 16 ++-- compiler/shared_ast/expr.mli | 126 ++++++++++++++--------------- compiler/shared_ast/print.ml | 6 +- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/program.ml | 4 +- compiler/shared_ast/program.mli | 6 +- compiler/shared_ast/scope.mli | 6 +- compiler/shared_ast/shared_ast.mld | 12 +-- compiler/shared_ast/var.ml | 4 +- compiler/shared_ast/var.mli | 2 +- 20 files changed, 169 insertions(+), 169 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index c3678673..1a384d51 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -19,7 +19,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) gexpr -and 'm marked_expr = (dcalc, 'm mark) marked_gexpr +type 'm expr = (dcalc, 'm mark) naked_gexpr +and 'm marked_expr = (dcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index 3cdb3d12..dc817f60 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -21,7 +21,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) gexpr -and 'm marked_expr = (dcalc, 'm mark) marked_gexpr +type 'm expr = (dcalc, 'm mark) naked_gexpr +and 'm marked_expr = (dcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 83e3220c..a467ec5f 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -120,7 +120,7 @@ type mark = { pos : Pos.t; uf : unionfind_typ } (** Raises an error if unification cannot be performed *) let rec unify (ctx : A.decl_ctx) - (e : ('a, 'm A.mark) A.marked_gexpr) (* used for error context *) + (e : ('a, 'm A.mark) A.gexpr) (* used for error context *) (t1 : typ Marked.pos UnionFind.elem) (t2 : typ Marked.pos UnionFind.elem) : unit = let unify = unify ctx in @@ -307,11 +307,11 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) (env : 'm Ast.expr env) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = + (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) e; *) let pos_e = A.Expr.pos e in - let mark (e : (A.dcalc, mark) A.gexpr) uf = + let mark (e : (A.dcalc, mark) A.naked_gexpr) uf = Marked.mark { uf; pos = pos_e } e in let unionfind_make ?(pos = e) t = UnionFind.make (add_pos pos t) in @@ -471,12 +471,12 @@ and typecheck_expr_top_down (ctx : A.decl_ctx) (env : 'm Ast.expr env) (tau : typ Marked.pos UnionFind.elem) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.marked_gexpr Bindlib.box = + (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in - let unify_and_mark (e' : (A.dcalc, mark) A.gexpr) tau' = + let unify_and_mark (e' : (A.dcalc, mark) A.naked_gexpr) tau' = (* This try...with was added because of [tests/test_bool/bad/bad_assert.catala_en] but we shouldn't need it. TODO: debug why it is needed here. *) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 5041d491..91ae6b13 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -94,7 +94,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (desugared, Pos.t) gexpr +type expr = (desugared, Pos.t) naked_gexpr type marked_expr = expr Marked.pos module ExprMap = Map.Make (struct diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index eb09cbcf..d568795b 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -49,8 +49,8 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {2 Expressions} *) -type expr = (desugared, Pos.t) gexpr -(** See {!type:Shared_ast.gexpr} for the complete definition *) +type expr = (desugared, Pos.t) naked_gexpr +(** See {!type:Shared_ast.naked_gexpr} for the complete definition *) and marked_expr = expr Marked.pos diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index e5cf3d12..3e3a5504 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -19,8 +19,8 @@ include Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) gexpr -and 'm marked_expr = (lcalc, 'm mark) marked_gexpr +type 'm expr = (lcalc, 'm mark) naked_gexpr +and 'm marked_expr = (lcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 6d14be0e..40276854 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -23,8 +23,8 @@ open Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) gexpr -and 'm marked_expr = (lcalc, 'm mark) marked_gexpr +type 'm expr = (lcalc, 'm mark) naked_gexpr +and 'm marked_expr = (lcalc, 'm mark) gexpr type 'm program = 'm expr Shared_ast.program diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 1a4683d7..96d5c755 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,7 +36,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (scopelang, Pos.t) gexpr +type expr = (scopelang, Pos.t) naked_gexpr type marked_expr = expr Marked.pos module ExprMap = Map.Make (struct diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 19b67b9f..c79bd0f8 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -41,8 +41,8 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type expr = (scopelang, Pos.t) gexpr -type marked_expr = (scopelang, Pos.t) marked_gexpr +type expr = (scopelang, Pos.t) naked_gexpr +type marked_expr = (scopelang, Pos.t) gexpr module ExprMap : Map.S with type key = marked_expr diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index 1ef1acaf..099cbe39 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -174,90 +174,90 @@ type 'a glocation = ScopeName.t * SubScopeName.t Marked.pos * ScopeVar.t Marked.pos -> [< desugared | scopelang ] glocation -type ('a, 't) marked_gexpr = (('a, 't) gexpr, 't) Marked.t +type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type expr = dcalc gexpr] plus the annotations. + are then defined with [type expr = dcalc naked_gexpr] plus the annotations. A few tips on using this GADT: - To write a function that handles cases from different ASTs, explicit the - type variables: [fun (type a) (x: a gexpr) -> ...] + type variables: [fun (type a) (x: a naked_gexpr) -> ...] - For recursive functions, you may need to additionally explicit the - generalisation of the variable: [let rec f: type a . a gexpr -> ...] *) + generalisation of the variable: [let rec f: type a . a naked_gexpr -> ...] *) (** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} library, based on higher-order abstract syntax *) -and ('a, 't) gexpr = +and ('a, 't) naked_gexpr = (* Constructors common to all ASTs *) - | ELit : 'a glit -> ('a any, 't) gexpr + | ELit : 'a glit -> ('a any, 't) naked_gexpr | EApp : - ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list - -> ('a any, 't) gexpr - | EOp : operator -> ('a any, 't) gexpr - | EArray : ('a, 't) marked_gexpr list -> ('a any, 't) gexpr + ('a, 't) gexpr * ('a, 't) gexpr list + -> ('a any, 't) naked_gexpr + | EOp : operator -> ('a any, 't) naked_gexpr + | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr (* All but statement calculus *) | EVar : - ('a, 't) gexpr Bindlib.var - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) naked_gexpr Bindlib.var + -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EAbs : - (('a, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder * marked_typ list - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr + (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * marked_typ list + -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EIfThenElse : - ('a, 't) marked_gexpr * ('a, 't) marked_gexpr * ('a, 't) marked_gexpr - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr + -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr (* Early stages *) - | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) gexpr + | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EStruct : - StructName.t * ('a, 't) marked_gexpr StructFieldMap.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + StructName.t * ('a, 't) gexpr StructFieldMap.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EStructAccess : - ('a, 't) marked_gexpr * StructFieldName.t * StructName.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + ('a, 't) gexpr * StructFieldName.t * StructName.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EEnumInj : - ('a, 't) marked_gexpr * EnumConstructor.t * EnumName.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + ('a, 't) gexpr * EnumConstructor.t * EnumName.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EMatchS : - ('a, 't) marked_gexpr + ('a, 't) gexpr * EnumName.t - * ('a, 't) marked_gexpr EnumConstructorMap.t - -> (([< desugared | scopelang ] as 'a), 't) gexpr + * ('a, 't) gexpr EnumConstructorMap.t + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr (* Lambda-like *) | ETuple : - ('a, 't) marked_gexpr list * StructName.t option - -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr list * StructName.t option + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | ETupleAccess : - ('a, 't) marked_gexpr * int * StructName.t option * marked_typ list - -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * int * StructName.t option * marked_typ list + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EInj : - ('a, 't) marked_gexpr * int * EnumName.t * marked_typ list - -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * int * EnumName.t * marked_typ list + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EMatch : - ('a, 't) marked_gexpr * ('a, 't) marked_gexpr list * EnumName.t - -> (([< dcalc | lcalc ] as 'a), 't) gexpr - | EAssert : ('a, 't) marked_gexpr -> (([< dcalc | lcalc ] as 'a), 't) gexpr + ('a, 't) gexpr * ('a, 't) gexpr list * EnumName.t + -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr + | EAssert : ('a, 't) gexpr -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr (* Default terms *) | EDefault : - ('a, 't) marked_gexpr list * ('a, 't) marked_gexpr * ('a, 't) marked_gexpr - -> (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr + ('a, 't) gexpr list * ('a, 't) gexpr * ('a, 't) gexpr + -> (([< desugared | scopelang | dcalc ] as 'a), 't) naked_gexpr | ErrorOnEmpty : - ('a, 't) marked_gexpr - -> (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr + ('a, 't) gexpr + -> (([< desugared | scopelang | dcalc ] as 'a), 't) naked_gexpr (* Lambda calculus with exceptions *) - | ERaise : except -> ((lcalc as 'a), 't) gexpr + | ERaise : except -> ((lcalc as 'a), 't) naked_gexpr | ECatch : - ('a, 't) marked_gexpr * except * ('a, 't) marked_gexpr - -> ((lcalc as 'a), 't) gexpr + ('a, 't) gexpr * except * ('a, 't) gexpr + -> ((lcalc as 'a), 't) naked_gexpr (* (\* Statement calculus *\) - * | ESVar: LocalName.t -> (scalc as 'a, 't) gexpr - * | ESStruct: ('a, 't) marked_gexpr list * StructName.t -> (scalc as 'a, 't) gexpr - * | ESStructFieldAccess: ('a, 't) marked_gexpr * StructFieldName.t * StructName.t -> (scalc as 'a, 't) gexpr - * | ESInj: ('a, 't) marked_gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) gexpr - * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) gexpr *) + * | ESVar: LocalName.t -> (scalc as 'a, 't) naked_gexpr + * | ESStruct: ('a, 't) gexpr list * StructName.t -> (scalc as 'a, 't) naked_gexpr + * | ESStructFieldAccess: ('a, 't) gexpr * StructFieldName.t * StructName.t -> (scalc as 'a, 't) naked_gexpr + * | ESInj: ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) naked_gexpr + * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) naked_gexpr *) -type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr +type 'e anyexpr = 'e constraint 'e = (_ any, _) naked_gexpr (** Shorter alias for functions taking any kind of expression *) (** {2 Markings} *) @@ -267,25 +267,25 @@ type typed = { pos : Pos.t; ty : marked_typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when - appropriate. Expected to fill the ['t] parameter of [gexpr] and - [marked_gexpr] (a ['t] annotation different from this type is used in the + appropriate. Expected to fill the ['t] parameter of [naked_gexpr] and + [gexpr] (a ['t] annotation different from this type is used in the middle of the typing processing, but all visible ASTs should otherwise use this. *) type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark -type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) gexpr -(** [('a, 't) gexpr marked] is equivalent to [('a, 'm mark) marked_gexpr] but +type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) naked_gexpr +(** [('a, 't) naked_gexpr marked] is equivalent to [('a, 'm mark) gexpr] but often more convenient to write since we generally use the type of - expressions ['e = (_, _ mark) gexpr] as type parameter. *) + expressions ['e = (_, _ mark) naked_gexpr] as type parameter. *) (** Useful for errors and printing, for example *) type any_marked_expr = - | AnyExpr : (_ any, _ mark) marked_gexpr -> any_marked_expr + | AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr (** {2 Higher-level program structure} *) (** Constructs scopes and programs on top of expressions. The ['e] type - parameter throughout is expected to match instances of the [gexpr] type + parameter throughout is expected to match instances of the [naked_gexpr] type defined above. Markings are constrained to the [mark] GADT defined above. Note that this structure is at the moment only relevant for [dcalc] and [lcalc], as [scopelang] has its own scope structure, as the name implies. *) @@ -310,7 +310,7 @@ type 'e scope_let = { scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; scope_let_pos : Pos.t; } - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = ('a, 'm mark) naked_gexpr (** This type is parametrized by the expression type so it can be reused in later intermediate representations. *) @@ -320,7 +320,7 @@ type 'e scope_let = { and 'e scope_body_expr = | Result of 'e marked | ScopeLet of 'e scope_let - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = ('a, 'm mark) naked_gexpr type 'e scope_body = { scope_body_input_struct : StructName.t; @@ -343,7 +343,7 @@ type 'e scope_def = { and 'e scopes = | Nil | ScopeDef of 'e scope_def - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = ('a, 'm mark) naked_gexpr type struct_ctx = (StructFieldName.t * marked_typ) list StructMap.t type enum_ctx = (EnumConstructor.t * marked_typ) list EnumMap.t diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 19034aa5..1888ece9 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -147,8 +147,8 @@ let fold_marks let map (type a) (ctx : 'ctx) - ~(f : 'ctx -> (a, 'm1) marked_gexpr -> (a, 'm2) marked_gexpr Bindlib.box) - (e : ((a, 'm1) gexpr, 'm2) Marked.t) : (a, 'm2) marked_gexpr Bindlib.box = + ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) gexpr Bindlib.box) + (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) gexpr Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with | ELit l -> elit l m @@ -281,7 +281,7 @@ let make_default exceptions just cons mark = (* Tests *) -let is_value (type a) (e : (a, 'm mark) gexpr marked) = +let is_value (type a) (e : (a, 'm mark) naked_gexpr marked) = match Marked.unmark e with | ELit _ | EAbs _ | EOp _ | ERaise _ -> true | _ -> false @@ -531,11 +531,11 @@ let compare_except ex1 ex2 = Stdlib.compare ex1 ex2 (* weird indentation; see https://github.com/ocaml-ppx/ocamlformat/issues/2143 *) let rec equal_list : - 'a. ('a, 't) marked_gexpr list -> ('a, 't) marked_gexpr list -> bool = + 'a. ('a, 't) gexpr list -> ('a, 't) gexpr list -> bool = fun es1 es2 -> try List.for_all2 equal es1 es2 with Invalid_argument _ -> false -and equal : type a. (a, 't) marked_gexpr -> (a, 't) marked_gexpr -> bool = +and equal : type a. (a, 't) gexpr -> (a, 't) gexpr -> bool = fun e1 e2 -> match Marked.unmark e1, Marked.unmark e2 with | EVar v1, EVar v2 -> Bindlib.eq_vars v1 v2 @@ -584,7 +584,7 @@ and equal : type a. (a, 't) marked_gexpr -> (a, 't) marked_gexpr -> bool = _ ) -> false -let rec compare : type a. (a, _) marked_gexpr -> (a, _) marked_gexpr -> int = +let rec compare : type a. (a, _) gexpr -> (a, _) gexpr -> int = fun e1 e2 -> (* Infix operator to chain comparisons lexicographically. *) let ( @@< ) cmp1 cmpf = match cmp1 with 0 -> cmpf () | n -> n in @@ -681,7 +681,7 @@ let rec compare : type a. (a, _) marked_gexpr -> (a, _) marked_gexpr -> int = | ERaise _, _ -> -1 | _, ERaise _ -> 1 | ECatch _, _ -> . | _, ECatch _ -> . -let rec free_vars : type a. (a, 't) gexpr marked -> (a, 't) gexpr Var.Set.t = +let rec free_vars : type a. (a, 't) naked_gexpr marked -> (a, 't) naked_gexpr Var.Set.t = fun e -> match Marked.unmark e with | EOp _ | ELit _ | ERaise _ -> Var.Set.empty @@ -731,7 +731,7 @@ let remove_logging_calls e = let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e -let rec size : type a. (a, 't) gexpr marked -> int = +let rec size : type a. (a, 't) naked_gexpr marked -> int = fun e -> match Marked.unmark e with | EVar _ | ELit _ | EOp _ -> 1 diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index af6b2c1a..f0348ac9 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -22,97 +22,97 @@ open Definitions (** {2 Boxed constructors} *) -val box : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr Bindlib.box -val evar : ('a, 't) gexpr Bindlib.var -> 't -> ('a, 't) marked_gexpr Bindlib.box +val box : ('a, 't) gexpr -> ('a, 't) gexpr Bindlib.box +val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr Bindlib.box val etuple : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box list -> StructName.t option -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val etupleaccess : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> int -> StructName.t option -> marked_typ list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val einj : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> int -> EnumName.t -> marked_typ list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val ematch : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box list -> EnumName.t -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val earray : - ('a any, 't) marked_gexpr Bindlib.box list -> + ('a any, 't) gexpr Bindlib.box list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box -val elit : 'a any glit -> 't -> ('a, 't) marked_gexpr Bindlib.box +val elit : 'a any glit -> 't -> ('a, 't) gexpr Bindlib.box val eabs : - (('a any, 't) gexpr, ('a, 't) marked_gexpr) Bindlib.mbinder Bindlib.box -> + (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder Bindlib.box -> marked_typ list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eapp : - ('a any, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box list -> + ('a any, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eassert : - (([< dcalc | lcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box -val eop : operator -> 't -> (_ any, 't) marked_gexpr Bindlib.box +val eop : operator -> 't -> (_ any, 't) gexpr Bindlib.box val edefault : - (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr Bindlib.box list -> - ('a, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box list -> + ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eifthenelse : - ('a any, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> + ('a any, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val eerroronempty : - (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val ecatch : - (lcalc, 't) marked_gexpr Bindlib.box -> + (lcalc, 't) gexpr Bindlib.box -> except -> - (lcalc, 't) marked_gexpr Bindlib.box -> + (lcalc, 't) gexpr Bindlib.box -> 't -> - (lcalc, 't) marked_gexpr Bindlib.box + (lcalc, 't) gexpr Bindlib.box -val eraise : except -> 't -> (lcalc, 't) marked_gexpr Bindlib.box +val eraise : except -> 't -> (lcalc, 't) gexpr Bindlib.box (** Manipulation of marks *) val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t -val pos : ('e, _) gexpr marked -> Pos.t +val pos : ('e, _) naked_gexpr marked -> Pos.t val ty : (_, typed mark) Marked.t -> marked_typ val with_ty : marked_typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t @@ -130,15 +130,15 @@ val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark val untype : - ('a, 'm mark) marked_gexpr -> ('a, untyped mark) marked_gexpr Bindlib.box + ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr Bindlib.box (** {2 Traversal functions} *) val map : 'ctx -> - f:('ctx -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box) -> - (('a, 't1) gexpr, 't2) Marked.t -> - ('a, 't2) marked_gexpr Bindlib.box + f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box) -> + (('a, 't1) naked_gexpr, 't2) Marked.t -> + ('a, 't2) gexpr Bindlib.box (** Flat (non-recursive) mapping on expressions. If you want to apply a map transform to an expression, you can save up @@ -159,35 +159,35 @@ val map : around during your map traversal. *) val map_top_down : - f:(('a, 't1) marked_gexpr -> (('a, 't1) gexpr, 't2) Marked.t) -> - ('a, 't1) marked_gexpr -> - ('a, 't2) marked_gexpr Bindlib.box + f:(('a, 't1) gexpr -> (('a, 't1) naked_gexpr, 't2) Marked.t) -> + ('a, 't1) gexpr -> + ('a, 't2) gexpr Bindlib.box (** Recursively applies [f] to the nodes of the expression tree. The type returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) val map_marks : - f:('t1 -> 't2) -> ('a, 't1) marked_gexpr -> ('a, 't2) marked_gexpr Bindlib.box + f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box (** {2 Expression building helpers} *) val make_var : 'a Bindlib.var * 'b -> ('a * 'b) Bindlib.box val make_abs : - ('a, 't) gexpr Var.vars -> - ('a, 't) marked_gexpr Bindlib.box -> + ('a, 't) naked_gexpr Var.vars -> + ('a, 't) gexpr Bindlib.box -> typ Marked.pos list -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box val make_app : - ((_ any, 'm mark) gexpr as 'e) marked Bindlib.box -> + ((_ any, 'm mark) naked_gexpr as 'e) marked Bindlib.box -> 'e marked Bindlib.box list -> 'm mark -> 'e marked Bindlib.box val empty_thunked_term : - 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) gexpr marked + 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) naked_gexpr marked val make_let_in : 'e Bindlib.var -> @@ -198,12 +198,12 @@ val make_let_in : 'e marked Bindlib.box val make_let_in_raw : - ('a any, 't) gexpr Bindlib.var -> + ('a any, 't) naked_gexpr Bindlib.var -> marked_typ -> - ('a, 't) marked_gexpr Bindlib.box -> - ('a, 't) marked_gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr Bindlib.box -> 't -> - ('a, 't) marked_gexpr Bindlib.box + ('a, 't) gexpr Bindlib.box (** Version with any mark; to be removed once we use the [mark] type everywhere. *) val make_multiple_let_in : @@ -215,11 +215,11 @@ val make_multiple_let_in : 'e marked Bindlib.box val make_default : - (([< desugared | scopelang | dcalc ] as 'a), 't) marked_gexpr list -> - ('a, 't) marked_gexpr -> - ('a, 't) marked_gexpr -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr list -> + ('a, 't) gexpr -> + ('a, 't) gexpr -> 't -> - ('a, 't) marked_gexpr + ('a, 't) gexpr (** [make_default ?pos exceptions just cons] builds a term semantically equivalent to [] (the [EDefault] constructor) while avoiding redundant nested constructions. The position is extracted @@ -236,7 +236,7 @@ val make_default : (** {2 Transformations} *) val remove_logging_calls : - ((_ any, 't) gexpr as 'e) marked -> 'e marked Bindlib.box + ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked Bindlib.box (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) @@ -254,16 +254,16 @@ val compare_lit : 'a glit -> 'a glit -> int val equal_location : 'a glocation Marked.pos -> 'a glocation Marked.pos -> bool val compare_location : 'a glocation Marked.pos -> 'a glocation Marked.pos -> int -val equal : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> bool +val equal : ('a, 't) gexpr -> ('a, 't) gexpr -> bool (** Determines if two expressions are equal, omitting their position information *) -val compare : ('a, 't) marked_gexpr -> ('a, 't) marked_gexpr -> int +val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int (** Standard comparison function, suitable for e.g. [Set.Make]. Ignores position information *) val compare_typ : marked_typ -> marked_typ -> int -val is_value : (_ any, 'm mark) gexpr marked -> bool +val is_value : (_ any, 'm mark) naked_gexpr marked -> bool val free_vars : 'e marked -> 'e Var.Set.t -val size : (_ any, 't) gexpr marked -> int +val size : (_ any, 't) naked_gexpr marked -> int (** Used by the optimizer to know when to stop *) diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 1287b6e8..18955fd5 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -208,7 +208,7 @@ let except (fmt : Format.formatter) (exn : except) : unit = let var fmt v = Format.fprintf fmt "%s_%d" (Bindlib.name_of v) (Bindlib.uid_of v) -let needs_parens (type a) (e : (a, _) marked_gexpr) : bool = +let needs_parens (type a) (e : (a, _) gexpr) : bool = match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false let rec expr : @@ -216,10 +216,10 @@ let rec expr : ?debug:bool -> decl_ctx -> Format.formatter -> - ('a, 't) marked_gexpr -> + ('a, 't) gexpr -> unit = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) - (e : (a, 't) marked_gexpr) -> + (e : (a, 't) gexpr) -> let expr e = expr ~debug ctx e in let with_parens fmt e = if needs_parens e then ( diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index ff686081..681e3c1f 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -47,5 +47,5 @@ val expr : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - ('a, 't) marked_gexpr -> + ('a, 't) gexpr -> unit diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index 49e470fc..87584316 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -22,9 +22,9 @@ let map_exprs ~f ~varf { scopes; decl_ctx } = (fun scopes -> { scopes; decl_ctx }) (Scope.map_exprs ~f ~varf scopes) -let untype : 'm. ('a, 'm mark) gexpr program -> ('a, untyped mark) gexpr program +let untype : 'm. ('a, 'm mark) naked_gexpr program -> ('a, untyped mark) naked_gexpr program = - fun (prg : ('a, 'm mark) gexpr program) -> + fun (prg : ('a, 'm mark) naked_gexpr program) -> Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) let rec find_scope name vars = function diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index 08acd682..c9ece890 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -26,11 +26,11 @@ val map_exprs : 'expr2 program Bindlib.box val untype : - (([< dcalc | lcalc ] as 'a), 'm mark) gexpr program -> - ('a, untyped mark) gexpr program + (([< dcalc | lcalc ] as 'a), 'm mark) naked_gexpr program -> + ('a, untyped mark) naked_gexpr program val to_expr : - (([< dcalc | lcalc ], _) gexpr as 'e) program -> + (([< dcalc | lcalc ], _) naked_gexpr as 'e) program -> ScopeName.t -> 'e marked Bindlib.box (** Usage: [build_whole_program_expr program main_scope] builds an expression diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 1d53a22f..b99150ff 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -80,7 +80,7 @@ val map_exprs : (** This is the main map visitor for all the expressions inside all the scopes of the program. *) -val get_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark +val get_body_mark : (_, 'm mark) naked_gexpr scope_body -> 'm mark (** {2 Conversions} *) @@ -93,7 +93,7 @@ val format : val to_expr : decl_ctx -> - ((_ any, 'm mark) gexpr as 'e) scope_body -> + ((_ any, 'm mark) naked_gexpr as 'e) scope_body -> 'm mark -> 'e marked Bindlib.box (** Usage: [to_expr ctx body scope_position] where [scope_position] corresponds @@ -105,7 +105,7 @@ type 'e scope_name_or_var = val unfold : decl_ctx -> - ((_ any, 'm mark) gexpr as 'e) scopes -> + ((_ any, 'm mark) naked_gexpr as 'e) scopes -> 'm mark -> 'e scope_name_or_var -> 'e marked Bindlib.box diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld index f5acfd58..2b50d756 100644 --- a/compiler/shared_ast/shared_ast.mld +++ b/compiler/shared_ast/shared_ast.mld @@ -8,19 +8,19 @@ helpers that are reused in various passes of the compiler. The main module {!modules: Shared_ast.Definitions} is exposed at top-level of the library (so that [open Shared_ast] gives access to the structures). It defines literals, operators, and in particular the type {!types: -Shared_ast.gexpr}. +Shared_ast.naked_gexpr}. -The {!types: Shared_ast.gexpr} type regroups all the cases for the {{: +The {!types: Shared_ast.naked_gexpr} type regroups all the cases for the {{: ../dcalc.html} Dcalc} and {{: ../lcalc.html} Lcalc} ASTs, with unconstrained annotations (used for positions, types, etc.). A GADT is used to eliminate -irrelevant cases, so that e.g. [(dcalc, _) gexpr] doesn't have the [ERaise] and -[ECatch] cases, while [(lcalc, _) gexpr] doesn't have [EDefault]. +irrelevant cases, so that e.g. [(dcalc, _) naked_gexpr] doesn't have the [ERaise] and +[ECatch] cases, while [(lcalc, _) naked_gexpr] doesn't have [EDefault]. For example, Lcalc expressions are then defined as -[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.gexpr]. +[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. This makes it possible to write a single function that works on the different -ASTs, by having it take a [('a, _) gexpr] as input, while retaining a much +ASTs, by having it take a [('a, _) naked_gexpr] as input, while retaining a much stricter policy than polymorphic variants. The module additionally defines the encompassing [scope] and [program] diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index 95bdd989..a5cc424b 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -18,7 +18,7 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [gexpr] +(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] type *) type 'e t = 'e anyexpr Bindlib.var @@ -36,7 +36,7 @@ type 'e var = 'e t (* The purpose of this module is just to lift a type parameter outside of [Set.S] and [Map.S], so that we can have ['e Var.Set.t] for sets of variables - bound to the ['e = ('a, 't) gexpr] expression type. This is made possible by + bound to the ['e = ('a, 't) naked_gexpr] expression type. This is made possible by the fact that [Bindlib.compare_vars] is polymorphic in that parameter; we first hide that parameter inside an existential, then re-add a phantom type outside of the set to ensure consistency. Extracting the elements is then diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 2daca3cc..29e0332c 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -18,7 +18,7 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [gexpr] +(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] type *) type 'e t = 'e anyexpr Bindlib.var From be586100618e5c4a1d43fcc9952b3a83098e4e74 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:35:08 +0200 Subject: [PATCH 24/31] Rename marked_expr -> expr, expr -> naked_expr throughout Since the marked kind is used throughout, this should be more clear --- compiler/dcalc/ast.ml | 6 +- compiler/dcalc/ast.mli | 6 +- compiler/dcalc/interpreter.ml | 22 +++---- compiler/dcalc/interpreter.mli | 6 +- compiler/dcalc/optimizations.ml | 20 +++---- compiler/dcalc/optimizations.mli | 2 +- compiler/dcalc/typing.ml | 18 +++--- compiler/dcalc/typing.mli | 6 +- compiler/desugared/ast.ml | 16 ++--- compiler/desugared/ast.mli | 16 ++--- compiler/desugared/desugared_to_scope.ml | 26 ++++---- compiler/lcalc/ast.ml | 6 +- compiler/lcalc/ast.mli | 32 +++++----- compiler/lcalc/closure_conversion.ml | 6 +- compiler/lcalc/compile_with_exceptions.ml | 26 ++++---- compiler/lcalc/compile_without_exceptions.ml | 62 ++++++++++---------- compiler/lcalc/optimizations.ml | 12 ++-- compiler/lcalc/to_ocaml.ml | 10 ++-- compiler/lcalc/to_ocaml.mli | 2 +- compiler/plugins/api_web.ml | 4 +- compiler/plugins/json_schema.ml | 2 +- compiler/scalc/ast.ml | 22 +++---- compiler/scalc/compile_from_lambda.ml | 44 +++++++------- compiler/scalc/print.ml | 14 ++--- compiler/scalc/to_python.ml | 4 +- compiler/scopelang/ast.ml | 12 ++-- compiler/scopelang/ast.mli | 12 ++-- compiler/scopelang/print.ml | 8 +-- compiler/scopelang/scope_to_dcalc.ml | 40 ++++++------- compiler/shared_ast/definitions.ml | 2 +- compiler/shared_ast/expr.ml | 2 +- compiler/shared_ast/print.ml | 58 +++++++++--------- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/scope.ml | 2 +- compiler/shared_ast/shared_ast.mld | 2 +- compiler/surface/desugaring.ml | 34 +++++------ compiler/surface/name_resolution.ml | 4 +- compiler/surface/name_resolution.mli | 4 +- compiler/verification/conditions.ml | 24 ++++---- compiler/verification/conditions.mli | 6 +- compiler/verification/io.ml | 8 +-- compiler/verification/io.mli | 8 +-- compiler/verification/z3backend.real.ml | 26 ++++---- 43 files changed, 322 insertions(+), 322 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 1a384d51..010db5c3 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -19,7 +19,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) naked_gexpr -and 'm marked_expr = (dcalc, 'm mark) gexpr +type 'm naked_expr = (dcalc, 'm mark) naked_gexpr +and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index dc817f60..fa8c08fa 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -21,7 +21,7 @@ open Shared_ast type lit = dcalc glit -type 'm expr = (dcalc, 'm mark) naked_gexpr -and 'm marked_expr = (dcalc, 'm mark) gexpr +type 'm naked_expr = (dcalc, 'm mark) naked_gexpr +and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index 913ef19f..a116e878 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -22,7 +22,7 @@ module Runtime = Runtime_ocaml.Runtime (** {1 Helpers} *) -let is_empty_error (e : 'm Ast.marked_expr) : bool = +let is_empty_error (e : 'm Ast.expr) : bool = match Marked.unmark e with ELit LEmptyError -> true | _ -> false let log_indent = ref 0 @@ -33,10 +33,10 @@ let rec evaluate_operator (ctx : decl_ctx) (op : operator) (pos : Pos.t) - (args : 'm Ast.marked_expr list) : 'm Ast.expr = + (args : 'm Ast.expr list) : 'm Ast.naked_expr = (* Try to apply [div] and if a [Division_by_zero] exceptions is catched, use [op] to raise multispanned errors. *) - let apply_div_or_raise_err (div : unit -> 'm Ast.expr) : 'm Ast.expr = + let apply_div_or_raise_err (div : unit -> 'm Ast.naked_expr) : 'm Ast.naked_expr = try div () with Division_by_zero -> Errors.raise_multispanned_error @@ -47,15 +47,15 @@ let rec evaluate_operator "division by zero at runtime" in let get_binop_args_pos = function - | (arg0 :: arg1 :: _ : 'm Ast.marked_expr list) -> + | (arg0 :: arg1 :: _ : 'm Ast.expr list) -> [None, Expr.pos arg0; None, Expr.pos arg1] | _ -> assert false in (* Try to apply [cmp] and if a [UncomparableDurations] exceptions is catched, use [args] to raise multispanned errors. *) let apply_cmp_or_raise_err - (cmp : unit -> 'm Ast.expr) - (args : 'm Ast.marked_expr list) : 'm Ast.expr = + (cmp : unit -> 'm Ast.naked_expr) + (args : 'm Ast.expr list) : 'm Ast.naked_expr = try cmp () with Runtime.UncomparableDurations -> Errors.raise_multispanned_error (get_binop_args_pos args) @@ -314,7 +314,7 @@ let rec evaluate_operator "Operator applied to the wrong arguments\n\ (should not happen if the term was well-typed)" -and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr +and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = match Marked.unmark e with | EVar _ -> @@ -483,10 +483,10 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.marked_expr) : 'm Ast.marked_expr let interpret_program : 'm. decl_ctx -> - 'm Ast.marked_expr -> - (Uid.MarkedString.info * 'm Ast.marked_expr) list = - fun (ctx : decl_ctx) (e : 'm Ast.marked_expr) : - (Uid.MarkedString.info * 'm Ast.marked_expr) list -> + 'm Ast.expr -> + (Uid.MarkedString.info * 'm Ast.expr) list = + fun (ctx : decl_ctx) (e : 'm Ast.expr) : + (Uid.MarkedString.info * 'm Ast.expr) list -> match evaluate_expr ctx e with | EAbs (_, [((TStruct s_in, _) as targs)]), mark_e -> begin (* At this point, the interpreter seeks to execute the scope but does not diff --git a/compiler/dcalc/interpreter.mli b/compiler/dcalc/interpreter.mli index bd1125b0..f5742813 100644 --- a/compiler/dcalc/interpreter.mli +++ b/compiler/dcalc/interpreter.mli @@ -19,13 +19,13 @@ open Utils open Shared_ast -val evaluate_expr : decl_ctx -> 'm Ast.marked_expr -> 'm Ast.marked_expr +val evaluate_expr : decl_ctx -> 'm Ast.expr -> 'm Ast.expr (** Evaluates an expression according to the semantics of the default calculus. *) val interpret_program : decl_ctx -> - 'm Ast.marked_expr -> - (Uid.MarkedString.info * 'm Ast.marked_expr) list + 'm Ast.expr -> + (Uid.MarkedString.info * 'm Ast.expr) list (** Interprets a program. This function expects an expression typed as a function whose argument are all thunked. The function is executed by providing for each argument a thunked empty default. Returns a list of all diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index f097f483..50eaf2e7 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -19,12 +19,12 @@ open Shared_ast open Ast type partial_evaluation_ctx = { - var_values : (typed expr, typed marked_expr) Var.Map.t; + var_values : (typed naked_expr, typed expr) Var.Map.t; decl_ctx : decl_ctx; } -let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : - 'm marked_expr Bindlib.box = +let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm expr) : + 'm expr Bindlib.box = let pos = Marked.get_mark e in let rec_helper = partial_evaluation ctx in match Marked.unmark e with @@ -184,14 +184,14 @@ let rec partial_evaluation (ctx : partial_evaluation_ctx) (e : 'm marked_expr) : | ErrorOnEmpty e1 -> Bindlib.box_apply (fun e1 -> ErrorOnEmpty e1, pos) (rec_helper e1) -let optimize_expr (decl_ctx : decl_ctx) (e : 'm marked_expr) = +let optimize_expr (decl_ctx : decl_ctx) (e : 'm expr) = partial_evaluation { var_values = Var.Map.empty; decl_ctx } e let rec scope_lets_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scope_body_expr : 'm expr scope_body_expr) : - 'm expr scope_body_expr Bindlib.box = + (scope_body_expr : 'm naked_expr scope_body_expr) : + 'm naked_expr scope_body_expr Bindlib.box = match scope_body_expr with | Result e -> Bindlib.box_apply (fun e' -> Result e') (t ctx e) | ScopeLet scope_let -> @@ -210,9 +210,9 @@ let rec scope_lets_map new_scope_let_expr new_next let rec scopes_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scopes : 'm expr scopes) : 'm expr scopes Bindlib.box = + (scopes : 'm naked_expr scopes) : 'm naked_expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -241,7 +241,7 @@ let rec scopes_map new_scope_body_expr new_scope_next let program_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) (p : 'm program) : 'm program Bindlib.box = Bindlib.box_apply diff --git a/compiler/dcalc/optimizations.mli b/compiler/dcalc/optimizations.mli index e70ec2c2..6c8cdd0e 100644 --- a/compiler/dcalc/optimizations.mli +++ b/compiler/dcalc/optimizations.mli @@ -20,5 +20,5 @@ open Shared_ast open Ast -val optimize_expr : decl_ctx -> 'm marked_expr -> 'm marked_expr Bindlib.box +val optimize_expr : decl_ctx -> 'm expr -> 'm expr Bindlib.box val optimize_program : 'm program -> untyped program diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index a467ec5f..59797316 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -306,8 +306,8 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) (** Infers the most permissive type from an expression *) let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) - (env : 'm Ast.expr env) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = + (env : 'm Ast.naked_expr env) + (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) e; *) let pos_e = A.Expr.pos e in @@ -469,10 +469,10 @@ let rec typecheck_expr_bottom_up (** Checks whether the expression can be typed with the provided type *) and typecheck_expr_top_down (ctx : A.decl_ctx) - (env : 'm Ast.expr env) + (env : 'm Ast.naked_expr env) (tau : typ Marked.pos UnionFind.elem) - (e : 'm Ast.marked_expr) : (A.dcalc, mark) A.gexpr Bindlib.box = - (* Cli.debug_format "Propagating type %a for expr %a" (format_typ ctx) tau + (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = + (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in @@ -655,13 +655,13 @@ let wrap ctx f e = let get_ty_mark { uf; pos } = A.Typed { ty = typ_to_ast uf; pos } (* Infer the type of an expression *) -let infer_types (ctx : A.decl_ctx) (e : 'm Ast.marked_expr) : - A.typed Ast.marked_expr Bindlib.box = +let infer_types (ctx : A.decl_ctx) (e : 'm Ast.expr) : + A.typed Ast.expr Bindlib.box = A.Expr.map_marks ~f:get_ty_mark @@ Bindlib.unbox @@ wrap ctx (typecheck_expr_bottom_up ctx A.Var.Map.empty) e -let infer_type (type m) ctx (e : m Ast.marked_expr) = +let infer_type (type m) ctx (e : m Ast.expr) = match Marked.get_mark e with | A.Typed { ty; _ } -> ty | A.Untyped _ -> A.Expr.ty (Bindlib.unbox (infer_types ctx e)) @@ -669,7 +669,7 @@ let infer_type (type m) ctx (e : m Ast.marked_expr) = (** Typechecks an expression given an expected type *) let check_type (ctx : A.decl_ctx) - (e : 'm Ast.marked_expr) + (e : 'm Ast.expr) (tau : A.typ Marked.pos) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 691745f5..8602c3c4 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -20,13 +20,13 @@ open Shared_ast val infer_types : - decl_ctx -> untyped Ast.marked_expr -> typed Ast.marked_expr Bindlib.box + decl_ctx -> untyped Ast.expr -> typed Ast.expr Bindlib.box (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) -val infer_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos +val infer_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos (** Gets the outer type of the given expression, using either the existing annotations or inference *) -val check_type : decl_ctx -> 'm Ast.marked_expr -> typ Utils.Marked.pos -> unit +val check_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos -> unit val infer_types_program : untyped Ast.program -> typed Ast.program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 91ae6b13..f3b001d0 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -94,11 +94,11 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (desugared, Pos.t) naked_gexpr -type marked_expr = expr Marked.pos +type naked_expr = (desugared, Pos.t) naked_gexpr +type expr = naked_expr Marked.pos module ExprMap = Map.Make (struct - type t = marked_expr + type t = expr let compare = Expr.compare end) @@ -112,9 +112,9 @@ type label_situation = ExplicitlyLabeled of LabelName.t Marked.pos | Unlabeled type rule = { rule_id : RuleName.t; - rule_just : marked_expr Bindlib.box; - rule_cons : marked_expr Bindlib.box; - rule_parameter : (expr Var.t * marked_typ) option; + rule_just : expr Bindlib.box; + rule_cons : expr Bindlib.box; + rule_parameter : (naked_expr Var.t * marked_typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -181,7 +181,7 @@ let always_false_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule rule_label = Unlabeled; } -type assertion = marked_expr Bindlib.box +type assertion = expr Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -212,7 +212,7 @@ type program = { program_ctx : decl_ctx; } -let rec locations_used (e : marked_expr) : LocationSet.t = +let rec locations_used (e : expr) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index d568795b..bfe030e6 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -49,15 +49,15 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {2 Expressions} *) -type expr = (desugared, Pos.t) naked_gexpr +type naked_expr = (desugared, Pos.t) naked_gexpr (** See {!type:Shared_ast.naked_gexpr} for the complete definition *) -and marked_expr = expr Marked.pos +and expr = naked_expr Marked.pos type location = desugared glocation module LocationSet : Set.S with type elt = location Marked.pos -module ExprMap : Map.S with type key = marked_expr +module ExprMap : Map.S with type key = expr (** {2 Rules and scopes}*) @@ -70,9 +70,9 @@ type label_situation = ExplicitlyLabeled of LabelName.t Marked.pos | Unlabeled type rule = { rule_id : RuleName.t; - rule_just : marked_expr Bindlib.box; - rule_cons : marked_expr Bindlib.box; - rule_parameter : (expr Var.t * marked_typ) option; + rule_just : expr Bindlib.box; + rule_cons : expr Bindlib.box; + rule_parameter : (naked_expr Var.t * marked_typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -82,7 +82,7 @@ module Rule : Set.OrderedType with type t = rule val empty_rule : Pos.t -> typ Marked.pos option -> rule val always_false_rule : Pos.t -> typ Marked.pos option -> rule -type assertion = expr Marked.pos Bindlib.box +type assertion = naked_expr Marked.pos Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -115,5 +115,5 @@ type program = { (** {1 Helpers} *) -val locations_used : expr Marked.pos -> LocationSet.t +val locations_used : naked_expr Marked.pos -> LocationSet.t val free_variables : rule RuleMap.t -> Pos.t ScopeDefMap.t diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 3ef25eeb..2e723a1e 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -27,19 +27,19 @@ type target_scope_vars = type ctx = { scope_var_mapping : target_scope_vars ScopeVarMap.t; - var_mapping : (Ast.expr, Scopelang.Ast.expr Var.t) Var.Map.t; + var_mapping : (Ast.naked_expr, Scopelang.Ast.naked_expr Var.t) Var.Map.t; } let tag_with_log_entry - (e : Scopelang.Ast.expr Marked.pos) + (e : Scopelang.Ast.naked_expr Marked.pos) (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - Scopelang.Ast.expr Marked.pos = + Scopelang.Ast.naked_expr Marked.pos = ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) -let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : - Scopelang.Ast.expr Marked.pos Bindlib.box = +let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : + Scopelang.Ast.naked_expr Marked.pos Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> @@ -186,8 +186,8 @@ let rec rule_tree_to_expr ~(toplevel : bool) (ctx : ctx) (def_pos : Pos.t) - (is_func : Ast.expr Var.t option) - (tree : rule_tree) : Scopelang.Ast.expr Marked.pos Bindlib.box = + (is_func : Ast.naked_expr Var.t option) + (tree : rule_tree) : Scopelang.Ast.naked_expr Marked.pos Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r in @@ -195,8 +195,8 @@ let rec rule_tree_to_expr whole rule tree into a function, we need to perform some alpha-renaming of all the expressions *) let substitute_parameter - (e : Ast.expr Marked.pos Bindlib.box) - (rule : Ast.rule) : Ast.expr Marked.pos Bindlib.box = + (e : Ast.naked_expr Marked.pos Bindlib.box) + (rule : Ast.rule) : Ast.naked_expr Marked.pos Bindlib.box = match is_func, rule.Ast.rule_parameter with | Some new_param, Some (old_param, _) -> let binder = Bindlib.bind_var old_param e in @@ -236,8 +236,8 @@ let rec rule_tree_to_expr (fun rule -> substitute_parameter rule.Ast.rule_cons rule) base_rules in - let translate_and_unbox_list (list : Ast.expr Marked.pos Bindlib.box list) : - Scopelang.Ast.expr Marked.pos Bindlib.box list = + let translate_and_unbox_list (list : Ast.naked_expr Marked.pos Bindlib.box list) : + Scopelang.Ast.naked_expr Marked.pos Bindlib.box list = List.map (fun e -> (* There are two levels of boxing here, the outermost is introduced by @@ -286,7 +286,7 @@ let rec rule_tree_to_expr that the result returned by the function is not empty *) let default = Bindlib.box_apply - (fun (default : Scopelang.Ast.expr * Pos.t) -> + (fun (default : Scopelang.Ast.naked_expr * Pos.t) -> ErrorOnEmpty default, def_pos) default in @@ -307,7 +307,7 @@ let translate_def (typ : typ Marked.pos) (io : Scopelang.Ast.io) ~(is_cond : bool) - ~(is_subscope_var : bool) : Scopelang.Ast.expr Marked.pos = + ~(is_subscope_var : bool) : Scopelang.Ast.naked_expr Marked.pos = (* Here, we have to transform this list of rules into a default tree. *) let is_def_func = match Marked.unmark typ with TArrow (_, _) -> true | _ -> false diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 3e3a5504..63d46fea 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -19,10 +19,10 @@ include Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) naked_gexpr -and 'm marked_expr = (lcalc, 'm mark) gexpr +type 'm naked_expr = (lcalc, 'm mark) naked_gexpr +and 'm expr = (lcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 40276854..f2c1e133 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -23,10 +23,10 @@ open Shared_ast type lit = lcalc glit -type 'm expr = (lcalc, 'm mark) naked_gexpr -and 'm marked_expr = (lcalc, 'm mark) gexpr +type 'm naked_expr = (lcalc, 'm mark) naked_gexpr +and 'm expr = (lcalc, 'm mark) gexpr -type 'm program = 'm expr Shared_ast.program +type 'm program = 'm naked_expr Shared_ast.program (** {1 Language terms construction}*) @@ -34,27 +34,27 @@ val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t val option_enum_config : (EnumConstructor.t * typ Marked.pos) list -val make_none : 'm mark -> 'm marked_expr Bindlib.box -val make_some : 'm marked_expr Bindlib.box -> 'm marked_expr Bindlib.box +val make_none : 'm mark -> 'm expr Bindlib.box +val make_some : 'm expr Bindlib.box -> 'm expr Bindlib.box val make_matchopt_with_abs_arms : - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box val make_matchopt : 'm mark -> - 'm expr Var.t -> + 'm naked_expr Var.t -> typ Marked.pos -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box -> - 'm marked_expr Bindlib.box + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box -> + 'm expr Bindlib.box (** [e' = make_matchopt'' pos v e e_none e_some] Builds the term corresponding to [match e with | None -> fun () -> e_none |Some -> fun v -> e_some]. *) (** {1 Special symbols} *) -val handle_default : untyped expr Var.t -val handle_default_opt : untyped expr Var.t +val handle_default : untyped naked_expr Var.t +val handle_default_opt : untyped naked_expr Var.t diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index a30feb9e..f807964b 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -22,13 +22,13 @@ module D = Dcalc.Ast (** TODO: This version is not yet debugged and ought to be specialized when Lcalc has more structure. *) -type 'm ctx = { name_context : string; globally_bound_vars : 'm expr Var.Set.t } +type 'm ctx = { name_context : string; globally_bound_vars : 'm naked_expr Var.Set.t } (** Returns the expression with closed closures and the set of free variables inside this new expression. Implementation guided by http://gallium.inria.fr/~fpottier/mpri/cours04.pdf#page=9. *) -let closure_conversion_expr (type m) (ctx : m ctx) (e : m marked_expr) : - m marked_expr Bindlib.box = +let closure_conversion_expr (type m) (ctx : m ctx) (e : m expr) : + m expr Bindlib.box = let rec aux e = match Marked.unmark e with | EVar v -> diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index 25e1da7a..c67b00b1 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -19,21 +19,21 @@ open Shared_ast module D = Dcalc.Ast module A = Ast -type 'm ctx = ('m D.expr, 'm A.expr Var.t) Var.Map.t +type 'm ctx = ('m D.naked_expr, 'm A.naked_expr Var.t) Var.Map.t (** This environment contains a mapping between the variables in Dcalc and their correspondance in Lcalc. *) -let thunk_expr (e : 'm A.marked_expr Bindlib.box) (mark : 'm mark) : - 'm A.marked_expr Bindlib.box = +let thunk_expr (e : 'm A.expr Bindlib.box) (mark : 'm mark) : + 'm A.expr Bindlib.box = let dummy_var = Var.make "_" in Expr.make_abs [| dummy_var |] e [TAny, Expr.mark_pos mark] mark let rec translate_default (ctx : 'm ctx) - (exceptions : 'm D.marked_expr list) - (just : 'm D.marked_expr) - (cons : 'm D.marked_expr) - (mark_default : 'm mark) : 'm A.marked_expr Bindlib.box = + (exceptions : 'm D.expr list) + (just : 'm D.expr) + (cons : 'm D.expr) + (mark_default : 'm mark) : 'm A.expr Bindlib.box = let exceptions = List.map (fun except -> thunk_expr (translate_expr ctx except) mark_default) @@ -51,8 +51,8 @@ let rec translate_default in exceptions -and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : - 'm A.marked_expr Bindlib.box = +and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : + 'm A.expr Bindlib.box = match Marked.unmark e with | EVar v -> Expr.make_var (Var.Map.find v ctx, Marked.get_mark e) | ETuple (args, s) -> @@ -112,8 +112,8 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.marked_expr) : let rec translate_scope_lets (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scope_lets : 'm D.expr scope_body_expr) : - 'm A.expr scope_body_expr Bindlib.box = + (scope_lets : 'm D.naked_expr scope_body_expr) : + 'm A.naked_expr scope_body_expr Bindlib.box = match scope_lets with | Result e -> Bindlib.box_apply (fun e -> Result e) (translate_expr ctx e) | ScopeLet scope_let -> @@ -140,7 +140,7 @@ let rec translate_scope_lets let rec translate_scopes (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scopes : 'm D.expr scopes) : 'm A.expr scopes Bindlib.box = + (scopes : 'm D.naked_expr scopes) : 'm A.naked_expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -159,7 +159,7 @@ let rec translate_scopes let new_scope_body_expr = Bindlib.bind_var new_scope_input_var new_scope_body_expr in - let new_scope : 'm A.expr scope_body Bindlib.box = + let new_scope : 'm A.naked_expr scope_body Bindlib.box = Bindlib.box_apply (fun new_scope_body_expr -> { diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index f0d9e914..9702b1f6 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -42,12 +42,12 @@ module A = Ast open Shared_ast -type 'm hoists = ('m A.expr, 'm D.marked_expr) Var.Map.t -(** Hoists definition. It represent bindings between [A.Var.t] and [D.expr]. *) +type 'm hoists = ('m A.naked_expr, 'm D.expr) Var.Map.t +(** Hoists definition. It represent bindings between [A.Var.t] and [D.naked_expr]. *) type 'm info = { - expr : 'm A.marked_expr Bindlib.box; - var : 'm A.expr Bindlib.var; + naked_expr : 'm A.expr Bindlib.box; + var : 'm A.naked_expr Bindlib.var; is_pure : bool; } (** Information about each encontered Dcalc variable is stored inside a context @@ -61,14 +61,14 @@ let pp_info (fmt : Format.formatter) (info : 'm info) = type 'm ctx = { decl_ctx : decl_ctx; - vars : ('m D.expr, 'm info) Var.Map.t; + vars : ('m D.naked_expr, 'm info) Var.Map.t; (** information context about variables in the current scope *) } let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = let pp_binding (fmt : Format.formatter) - ((v, info) : 'm D.expr Var.t * 'm info) = + ((v, info) : 'm D.naked_expr Var.t * 'm info) = Format.fprintf fmt "%a: %a" Print.var v pp_info info in @@ -82,7 +82,7 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = (** [find ~info n ctx] is a warpper to ocaml's Map.find that handle errors in a slightly better way. *) -let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : +let find ?(info : string = "none") (n : 'm D.naked_expr Var.t) (ctx : 'm ctx) : 'm info = (* let _ = Format.asprintf "Searching for variable %a inside context %a" Print.var n pp_ctx ctx |> Cli.debug_print in *) @@ -99,11 +99,11 @@ let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) let add_var (mark : 'm mark) - (var : 'm D.expr Var.t) + (var : 'm D.naked_expr Var.t) (is_pure : bool) (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in - let expr = Expr.make_var (new_var, mark) in + let naked_expr = Expr.make_var (new_var, mark) in (* Cli.debug_print @@ Format.asprintf "D.%a |-> A.%a" Print.var var Print.var new_var; *) @@ -111,7 +111,7 @@ let add_var ctx with vars = Var.Map.update var - (fun _ -> Some { expr; var = new_var; is_pure }) + (fun _ -> Some { naked_expr; var = new_var; is_pure }) ctx.vars; } @@ -155,8 +155,8 @@ let disjoint_union_maps (pos : Pos.t) (cs : ('e, 'a) Var.Map.t list) : the equivalence between the execution of e and the execution of e' are equivalent in an environement where each variable v, where (v, e_v) is in hoists, has the non-empty value in e_v. *) -let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : - 'm A.marked_expr Bindlib.box * 'm hoists = +let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : + 'm A.expr Bindlib.box * 'm hoists = let pos = Marked.get_mark e in match Marked.unmark e with (* empty-producing/using terms. We hoist those. (D.EVar in some cases, @@ -172,7 +172,7 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : (* Cli.debug_print @@ Format.asprintf "Found an unpure variable %a, created a variable %a to replace it" Print.var v Print.var v'; *) Expr.make_var (v', pos), Var.Map.singleton v' e - else (find ~info:"should never happend" v ctx).expr, Var.Map.empty + else (find ~info:"should never happend" v ctx).naked_expr, Var.Map.empty | EApp ((EVar v, p), [(ELit LUnit, _)]) -> if not (find ~info:"search for a variable" v ctx).is_pure then let v' = Var.make (Bindlib.name_of v) in @@ -288,8 +288,8 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.marked_expr) : Expr.earray es' pos, disjoint_union_maps (Expr.pos e) hoists | EOp op -> Bindlib.box (EOp op, pos), Var.Map.empty -and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) - : 'm A.marked_expr Bindlib.box = +and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) + : 'm A.expr Bindlib.box = let e', hoists = translate_and_hoist ctx e in let hoists = Var.Map.bindings hoists in @@ -302,11 +302,11 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) ~init:(if append_esome then A.make_some e' else e') ~f:(fun acc (v, (hoist, mark_hoist)) -> (* Cli.debug_print @@ Format.asprintf "hoist using A.%a" Print.var v; *) - let c' : 'm A.marked_expr Bindlib.box = + let c' : 'm A.expr Bindlib.box = match hoist with (* Here we have to handle only the cases appearing in hoists, as defined the [translate_and_hoist] function. *) - | EVar v -> (find ~info:"should never happend" v ctx).expr + | EVar v -> (find ~info:"should never happend" v ctx).naked_expr | EDefault (excep, just, cons) -> let excep' = List.map (translate_expr ctx) excep in let just' = translate_expr ctx just in @@ -356,8 +356,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.marked_expr) (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) -let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : - 'm A.expr scope_body_expr Bindlib.box = +let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_expr) : + 'm A.naked_expr scope_body_expr Bindlib.box = match lets with | Result e -> Bindlib.box_apply @@ -373,7 +373,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : } -> (* special case : the subscope variable is thunked (context i/o). We remove this thunking. *) - let _, expr = Bindlib.unmbind binder in + let _, naked_expr = Bindlib.unmbind binder in let var_is_pure = true in let var, next = Bindlib.unbind next in @@ -392,13 +392,13 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false expr) + (translate_expr ctx ~append_esome:false naked_expr) (Bindlib.bind_var new_var new_next) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_typ = typ; - scope_let_expr = (ErrorOnEmpty _, emark) as expr; + scope_let_expr = (ErrorOnEmpty _, emark) as naked_expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -419,25 +419,25 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false expr) + (translate_expr ctx ~append_esome:false naked_expr) (Bindlib.bind_var new_var (translate_scope_let ctx' next)) | ScopeLet { scope_let_kind = SubScopeVarDefinition; scope_let_pos = pos; - scope_let_expr = expr; + scope_let_expr = naked_expr; _; } -> Errors.raise_spanned_error pos "Internal Error: found an SubScopeVarDefinition that does not satisfy \ the invariants when translating Dcalc to Lcalc without exceptions: \ @[%a@]" - (Expr.format ctx.decl_ctx) expr + (Expr.format ctx.decl_ctx) naked_expr | ScopeLet { scope_let_kind = kind; scope_let_typ = typ; - scope_let_expr = expr; + scope_let_expr = naked_expr; scope_let_next = next; scope_let_pos = pos; } -> @@ -458,7 +458,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : let var, next = Bindlib.unbind next in (* Cli.debug_print @@ Format.asprintf "unbinding %a" Print.var var; *) let vmark = - Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark expr) + Expr.map_mark (fun _ -> pos) (fun _ -> typ) (Marked.get_mark naked_expr) in let ctx' = add_var vmark var var_is_pure ctx in let new_var = (find ~info:"variable that was just created" var ctx').var in @@ -472,13 +472,13 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : scope_let_next = new_next; scope_let_pos = pos; }) - (translate_expr ctx ~append_esome:false expr) + (translate_expr ctx ~append_esome:false naked_expr) (Bindlib.bind_var new_var (translate_scope_let ctx' next)) let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : 'm D.expr scope_body) : 'm A.expr scope_body Bindlib.box = + (body : 'm D.naked_expr scope_body) : 'm A.naked_expr scope_body Bindlib.box = match body with | { scope_body_expr = result; @@ -504,8 +504,8 @@ let translate_scope_body }) (Bindlib.bind_var v' (translate_scope_let ctx' lets)) -let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.expr scopes) : - 'm A.expr scopes Bindlib.box = +let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.naked_expr scopes) : + 'm A.naked_expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef { scope_name; scope_body; scope_next } -> diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index 25526b48..1d737c8a 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -22,9 +22,9 @@ let ( let+ ) x f = Bindlib.box_apply f x let ( and+ ) x y = Bindlib.box_pair x y let visitor_map - (t : 'a -> 'm marked_expr -> 'm marked_expr Bindlib.box) + (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (e : 'm marked_expr) : 'm marked_expr Bindlib.box = + (e : 'm expr) : 'm expr Bindlib.box = (* calls [t ctx] on every direct childs of [e], then rebuild an abstract syntax tree modified. Used in other transformations. *) let default_mark e' = Marked.same_mark_as e' e in @@ -68,7 +68,7 @@ let visitor_map default_mark @@ ECatch (e1, exn, e2) | ERaise _ | ELit _ | EOp _ -> Bindlib.box e -let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = +let rec iota_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with | EMatch ((EInj (e1, i, n', _ts), _), cases, n) when EnumName.compare n n' = 0 @@ -87,7 +87,7 @@ let rec iota_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = visitor_map iota_expr () e' | _ -> visitor_map iota_expr () e -let rec beta_expr (_ : unit) (e : 'm marked_expr) : 'm marked_expr Bindlib.box = +let rec beta_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = let default_mark e' = Marked.same_mark_as e' e in match Marked.unmark e with | EApp (e1, args) -> ( @@ -116,8 +116,8 @@ let _beta_optimizations (p : 'm program) : 'm program = in { p with scopes = Bindlib.unbox new_scopes } -let rec peephole_expr (_ : unit) (e : 'm marked_expr) : - 'm marked_expr Bindlib.box = +let rec peephole_expr (_ : unit) (e : 'm expr) : + 'm expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index fad64743..9a16842e 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -242,7 +242,7 @@ let format_var (fmt : Format.formatter) (v : 'm Var.t) : unit = Cli.debug_print "lowercase_name: %s " lowercase_name; Format.fprintf fmt "%s_" lowercase_name) -let needs_parens (e : 'm marked_expr) : bool = +let needs_parens (e : 'm expr) : bool = match Marked.unmark e with | EApp ((EAbs (_, _), _), _) | ELit (LBool _ | LUnit) @@ -274,9 +274,9 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) - (e : 'm marked_expr) : unit = + (e : 'm expr) : unit = let format_expr = format_expr ctx in - let format_with_parens (fmt : Format.formatter) (e : 'm marked_expr) = + let format_with_parens (fmt : Format.formatter) (e : 'm expr) = if needs_parens e then Format.fprintf fmt "(%a)" format_expr e else Format.fprintf fmt "%a" format_expr e in @@ -556,7 +556,7 @@ let format_ctx let rec format_scope_body_expr (ctx : decl_ctx) (fmt : Format.formatter) - (scope_lets : 'm Ast.expr scope_body_expr) : unit = + (scope_lets : 'm Ast.naked_expr scope_body_expr) : unit = match scope_lets with | Result e -> format_expr ctx fmt e | ScopeLet scope_let -> @@ -572,7 +572,7 @@ let rec format_scope_body_expr let rec format_scopes (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : 'm Ast.expr scopes) : unit = + (scopes : 'm Ast.naked_expr scopes) : unit = match scopes with | Nil -> () | ScopeDef scope_def -> diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index cf3110cf..dee24908 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -29,7 +29,7 @@ val find_enum : EnumName.t -> decl_ctx -> (EnumConstructor.t * typ Marked.pos) list val typ_needs_parens : typ Marked.pos -> bool -val needs_parens : 'm marked_expr -> bool +val needs_parens : 'm expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit val format_enum_cons_name : Format.formatter -> EnumConstructor.t -> unit val format_struct_name : Format.formatter -> StructName.t -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index 9b56f2bb..e3e0fc76 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -328,10 +328,10 @@ module To_jsoo = struct Format.fprintf fmt "%a@\n" format_enum_decl (e, find_enum e ctx)) (type_ordering @ scope_structs) - let fmt_input_struct_name fmt (scope_def : 'a expr scope_def) = + let fmt_input_struct_name fmt (scope_def : 'a naked_expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_input_struct - let fmt_output_struct_name fmt (scope_def : 'a expr scope_def) = + let fmt_output_struct_name fmt (scope_def : 'a naked_expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_output_struct let rec format_scopes_to_fun diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 3d0f38dd..5f0a9cf6 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -49,7 +49,7 @@ module To_json = struct Format.fprintf fmt "%s" s let rec find_scope_def (target_name : string) : - 'm expr scopes -> 'm expr scope_def option = function + 'm naked_expr scopes -> 'm naked_expr scope_def option = function | Nil -> None | ScopeDef scope_def -> let name = Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index ead57cd4..0a9d2157 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -25,32 +25,32 @@ let dead_value = LocalName.fresh ("dead_value", Pos.no_pos) let handle_default = TopLevelName.fresh ("handle_default", Pos.no_pos) let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) -type expr = +type naked_expr = | EVar of LocalName.t | EFunc of TopLevelName.t - | EStruct of expr Marked.pos list * StructName.t - | EStructFieldAccess of expr Marked.pos * StructFieldName.t * StructName.t - | EInj of expr Marked.pos * EnumConstructor.t * EnumName.t - | EArray of expr Marked.pos list + | EStruct of naked_expr Marked.pos list * StructName.t + | EStructFieldAccess of naked_expr Marked.pos * StructFieldName.t * StructName.t + | EInj of naked_expr Marked.pos * EnumConstructor.t * EnumName.t + | EArray of naked_expr Marked.pos list | ELit of L.lit - | EApp of expr Marked.pos * expr Marked.pos list + | EApp of naked_expr Marked.pos * naked_expr Marked.pos list | EOp of operator type stmt = | SInnerFuncDef of LocalName.t Marked.pos * func | SLocalDecl of LocalName.t Marked.pos * typ Marked.pos - | SLocalDef of LocalName.t Marked.pos * expr Marked.pos + | SLocalDef of LocalName.t Marked.pos * naked_expr Marked.pos | STryExcept of block * except * block | SRaise of except - | SIfThenElse of expr Marked.pos * block * block + | SIfThenElse of naked_expr Marked.pos * block * block | SSwitch of - expr Marked.pos + naked_expr Marked.pos * EnumName.t * (block (* Statements corresponding to arm closure body*) * (* Variable instantiated with enum payload *) LocalName.t) list (** Each block corresponds to one case of the enum *) - | SReturn of expr - | SAssert of expr + | SReturn of naked_expr + | SAssert of naked_expr and block = stmt Marked.pos list diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index b914b345..9e1ef29a 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -21,24 +21,24 @@ module L = Lcalc.Ast module D = Dcalc.Ast type 'm ctxt = { - func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t; + func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t; decl_ctx : decl_ctx; - var_dict : ('m L.expr, A.LocalName.t) Var.Map.t; + var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t; inside_definition_of : A.LocalName.t option; context_name : string; } (* Expressions can spill out side effect, hence this function also returns a list of statements to be prepended before the expression is evaluated *) -let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : - A.block * A.expr Marked.pos = - match Marked.unmark expr with +let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : + A.block * A.naked_expr Marked.pos = + match Marked.unmark naked_expr with | EVar v -> let local_var = try A.EVar (Var.Map.find v ctxt.var_dict) with Not_found -> A.EFunc (Var.Map.find v ctxt.func_dict) in - [], (local_var, Expr.pos expr) + [], (local_var, Expr.pos naked_expr) | ETuple (args, Some s_name) -> let args_stmts, new_args = List.fold_left @@ -49,14 +49,14 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : in let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in - args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) + args_stmts, (A.EStruct (new_args, s_name), Expr.pos naked_expr) | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" | ETupleAccess (e1, num_field, Some s_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let field_name = fst (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) in - e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) + e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos naked_expr) | ETupleAccess (_, _, None, _) -> failwith "Non-struct tuples cannot be compiled to scalc" | EInj (e1, num_cons, e_name, _) -> @@ -64,7 +64,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : let cons_name = fst (List.nth (EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) in - e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos expr) + e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos naked_expr) | EApp (f, args) -> let f_stmts, new_f = translate_expr ctxt f in let args_stmts, new_args = @@ -75,7 +75,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : ([], []) args in let new_args = List.rev new_args in - f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos expr) + f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos naked_expr) | EArray args -> let args_stmts, new_args = List.fold_left @@ -85,9 +85,9 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : ([], []) args in let new_args = List.rev new_args in - args_stmts, (A.EArray new_args, Expr.pos expr) - | EOp op -> [], (A.EOp op, Expr.pos expr) - | ELit l -> [], (A.ELit l, Expr.pos expr) + args_stmts, (A.EArray new_args, Expr.pos naked_expr) + | EOp op -> [], (A.EOp op, Expr.pos naked_expr) + | ELit l -> [], (A.ELit l, Expr.pos naked_expr) | _ -> let tmp_var = A.LocalName.fresh @@ -100,7 +100,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : let v = Marked.unmark (A.LocalName.get_info v) in let tmp_rex = Re.Pcre.regexp "^temp_" in if Re.Pcre.pmatch ~rex:tmp_rex v then v else "temp_" ^ v), - Expr.pos expr ) + Expr.pos naked_expr ) in let ctxt = { @@ -109,13 +109,13 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.marked_expr) : context_name = Marked.unmark (A.LocalName.get_info tmp_var); } in - let tmp_stmts = translate_statements ctxt expr in - ( ( A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), - Expr.pos expr ) + let tmp_stmts = translate_statements ctxt naked_expr in + ( ( A.SLocalDecl ((tmp_var, Expr.pos naked_expr), (TAny, Expr.pos naked_expr)), + Expr.pos naked_expr ) :: tmp_stmts, - (A.EVar tmp_var, Expr.pos expr) ) + (A.EVar tmp_var, Expr.pos naked_expr) ) -and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : +and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = match Marked.unmark block_expr with | EAssert e -> @@ -273,9 +273,9 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.marked_expr) : let rec translate_scope_body_expr (scope_name : ScopeName.t) (decl_ctx : decl_ctx) - (var_dict : ('m L.expr, A.LocalName.t) Var.Map.t) - (func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t) - (scope_expr : 'm L.expr scope_body_expr) : A.block = + (var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t) + (func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t) + (scope_expr : 'm L.naked_expr scope_body_expr) : A.block = match scope_expr with | Result e -> let block, new_e = diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 43cdcf64..8ad6ef8d 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -18,7 +18,7 @@ open Utils open Shared_ast open Ast -let needs_parens (_e : expr Marked.pos) : bool = false +let needs_parens (_e : naked_expr Marked.pos) : bool = false let format_local_name (fmt : Format.formatter) (v : LocalName.t) : unit = Format.fprintf fmt "%a_%s" LocalName.format_t v @@ -28,9 +28,9 @@ let rec format_expr (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) - (e : expr Marked.pos) : unit = + (e : naked_expr Marked.pos) : unit = let format_expr = format_expr decl_ctx ~debug in - let format_with_parens (fmt : Format.formatter) (e : expr Marked.pos) = + let format_with_parens (fmt : Format.formatter) (e : naked_expr Marked.pos) = if needs_parens e then Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_expr e Print.punctuation ")" @@ -115,11 +115,11 @@ let rec format_statement Format.fprintf fmt "@[%a %a %a@ %a@]" Print.keyword "decl" LocalName.format_t (Marked.unmark name) Print.punctuation ":" (Print.typ decl_ctx) typ - | SLocalDef (name, expr) -> + | SLocalDef (name, naked_expr) -> Format.fprintf fmt "@[%a %a@ %a@]" LocalName.format_t (Marked.unmark name) Print.punctuation "=" (format_expr decl_ctx ~debug) - expr + naked_expr | STryExcept (b_try, except, b_with) -> Format.fprintf fmt "@[%a%a@ %a@]@\n@[%a %a%a@ %a@]" Print.keyword "try" Print.punctuation ":" @@ -143,10 +143,10 @@ let rec format_statement Format.fprintf fmt "@[%a %a@]" Print.keyword "return" (format_expr decl_ctx ~debug) (ret, Marked.get_mark stmt) - | SAssert expr -> + | SAssert naked_expr -> Format.fprintf fmt "@[%a %a@]" Print.keyword "assert" (format_expr decl_ctx ~debug) - (expr, Marked.get_mark stmt) + (naked_expr, Marked.get_mark stmt) | SSwitch (e_switch, enum, arms) -> Format.fprintf fmt "@[%a @[%a@]%a@]%a" Print.keyword "switch" (format_expr decl_ctx ~debug) diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index 906e1e43..d4014ec8 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -232,7 +232,7 @@ let format_toplevel_name (fmt : Format.formatter) (v : TopLevelName.t) : unit = let v_str = Marked.unmark (TopLevelName.get_info v) in format_name_cleaned fmt v_str -let needs_parens (e : expr Marked.pos) : bool = +let needs_parens (e : naked_expr Marked.pos) : bool = match Marked.unmark e with | ELit (LBool _ | LUnit) | EVar _ | EOp _ -> false | _ -> true @@ -262,7 +262,7 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) - (e : expr Marked.pos) : unit = + (e : naked_expr Marked.pos) : unit = match Marked.unmark e with | EVar v -> format_var fmt v | EFunc f -> format_toplevel_name fmt f diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 96d5c755..54121fd0 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,16 +36,16 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (scopelang, Pos.t) naked_gexpr -type marked_expr = expr Marked.pos +type naked_expr = (scopelang, Pos.t) naked_gexpr +type expr = naked_expr Marked.pos module ExprMap = Map.Make (struct - type t = marked_expr + type t = expr let compare = Expr.compare end) -let rec locations_used (e : expr Marked.pos) : LocationSet.t = +let rec locations_used (e : naked_expr Marked.pos) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty @@ -84,8 +84,8 @@ type io_input = NoInput | OnlyInput | Reentrant type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } type rule = - | Definition of location Marked.pos * marked_typ * io * expr Marked.pos - | Assertion of expr Marked.pos + | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos + | Assertion of naked_expr Marked.pos | Call of ScopeName.t * SubScopeName.t type scope_decl = { diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index c79bd0f8..dc567c9b 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -41,12 +41,12 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type expr = (scopelang, Pos.t) naked_gexpr -type marked_expr = (scopelang, Pos.t) gexpr +type naked_expr = (scopelang, Pos.t) naked_gexpr +type expr = (scopelang, Pos.t) gexpr -module ExprMap : Map.S with type key = marked_expr +module ExprMap : Map.S with type key = expr -val locations_used : marked_expr -> LocationSet.t +val locations_used : expr -> LocationSet.t (** This type characterizes the three levels of visibility for a given scope variable with regards to the scope's input and possible redefinitions inside @@ -70,8 +70,8 @@ type io = { (** Characterization of the input/output status of a scope variable. *) type rule = - | Definition of location Marked.pos * marked_typ * io * expr Marked.pos - | Assertion of expr Marked.pos + | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos + | Assertion of naked_expr Marked.pos | Call of ScopeName.t * SubScopeName.t type scope_decl = { diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 86e7085d..cee49080 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -76,7 +76,7 @@ let scope ?(debug = false) ctx fmt (name, decl) = (Print.typ ctx) typ Print.punctuation "=" (fun fmt e -> match Marked.unmark loc with - | SubScopeVar _ -> Print.expr ctx fmt e + | SubScopeVar _ -> Print.naked_expr ctx fmt e | ScopelangScopeVar v -> ( match Marked.unmark @@ -85,12 +85,12 @@ let scope ?(debug = false) ctx fmt (name, decl) = with | Reentrant -> Format.fprintf fmt "%a@ %a" Print.operator - "reentrant or by default" (Print.expr ~debug ctx) e - | _ -> Format.fprintf fmt "%a" (Print.expr ~debug ctx) e)) + "reentrant or by default" (Print.naked_expr ~debug ctx) e + | _ -> Format.fprintf fmt "%a" (Print.naked_expr ~debug ctx) e)) e | Assertion e -> Format.fprintf fmt "%a %a" Print.keyword "assert" - (Print.expr ~debug ctx) e + (Print.naked_expr ~debug ctx) e | Call (scope_name, subscope_name) -> Format.fprintf fmt "%a %a%a%a%a" Print.keyword "call" ScopeName.format_t scope_name Print.punctuation "[" diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index c533731c..5520d4d0 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -25,9 +25,9 @@ type scope_var_ctx = { type scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : untyped Dcalc.Ast.expr Var.t; + scope_sig_scope_var : untyped Dcalc.Ast.naked_expr Var.t; (** Var representing the scope *) - scope_sig_input_var : untyped Dcalc.Ast.expr Var.t; + scope_sig_input_var : untyped Dcalc.Ast.naked_expr Var.t; (** Var representing the scope input inside the scope func *) scope_sig_input_struct : StructName.t; (** Scope input *) scope_sig_output_struct : StructName.t; (** Scope output *) @@ -40,11 +40,11 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.expr Var.t * typ * Ast.io) ScopeVarMap.t + (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : (Ast.expr, untyped Dcalc.Ast.expr Var.t) Var.Map.t; + local_vars : (Ast.naked_expr, untyped Dcalc.Ast.naked_expr Var.t) Var.Map.t; } let empty_ctx @@ -66,9 +66,9 @@ let pos_mark (pos : Pos.t) : untyped mark = Untyped { pos } let pos_mark_as e = pos_mark (Marked.get_mark e) let merge_defaults - (caller : untyped Dcalc.Ast.marked_expr Bindlib.box) - (callee : untyped Dcalc.Ast.marked_expr Bindlib.box) : - untyped Dcalc.Ast.marked_expr Bindlib.box = + (caller : untyped Dcalc.Ast.expr Bindlib.box) + (callee : untyped Dcalc.Ast.expr Bindlib.box) : + untyped Dcalc.Ast.expr Bindlib.box = let caller = let m = Marked.get_mark (Bindlib.unbox caller) in Expr.make_app caller [Bindlib.box (ELit LUnit, m)] m @@ -83,10 +83,10 @@ let merge_defaults body let tag_with_log_entry - (e : untyped Dcalc.Ast.marked_expr Bindlib.box) + (e : untyped Dcalc.Ast.expr Bindlib.box) (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - untyped Dcalc.Ast.marked_expr Bindlib.box = + untyped Dcalc.Ast.expr Bindlib.box = Bindlib.box_apply (fun e -> Marked.same_mark_as @@ -101,8 +101,8 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : - Ast.expr Marked.pos list = +let collapse_similar_outcomes (excepts : Ast.naked_expr Marked.pos list) : + Ast.naked_expr Marked.pos list = let cons_map = List.fold_left (fun map -> function @@ -133,9 +133,9 @@ let collapse_similar_outcomes (excepts : Ast.expr Marked.pos list) : in excepts -let rec translate_expr (ctx : ctx) (e : Ast.expr Marked.pos) : - untyped Dcalc.Ast.marked_expr Bindlib.box = - Bindlib.box_apply (fun (x : untyped Dcalc.Ast.expr) -> +let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : + untyped Dcalc.Ast.expr Bindlib.box = + Bindlib.box_apply (fun (x : untyped Dcalc.Ast.naked_expr) -> Marked.mark (pos_mark_as e) x) @@ match Marked.unmark e with @@ -357,8 +357,8 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - (untyped Dcalc.Ast.expr scope_body_expr Bindlib.box -> - untyped Dcalc.Ast.expr scope_body_expr Bindlib.box) + (untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box -> + untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box) * ctx = match rule with | Definition ((ScopelangScopeVar a, var_def_pos), tau, a_io, e) -> @@ -636,7 +636,7 @@ let translate_rules (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) (sigma_return_struct_name : StructName.t) : - untyped Dcalc.Ast.expr scope_body_expr Bindlib.box * ctx = + untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -673,7 +673,7 @@ let translate_scope_decl (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - untyped Dcalc.Ast.expr scope_body Bindlib.box * struct_ctx = + untyped Dcalc.Ast.naked_expr scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in @@ -850,7 +850,7 @@ let translate_program (prgm : Ast.program) : in (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) - let (scopes, decl_ctx) : untyped Dcalc.Ast.expr scopes Bindlib.box * _ = + let (scopes, decl_ctx) : untyped Dcalc.Ast.naked_expr scopes Bindlib.box * _ = List.fold_right (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index 099cbe39..a4fbb511 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -178,7 +178,7 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type expr = dcalc naked_gexpr] plus the annotations. + are then defined with [type naked_expr = dcalc naked_gexpr] plus the annotations. A few tips on using this GADT: diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 1888ece9..f2083550 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -729,7 +729,7 @@ let remove_logging_calls e = in f () e -let format ?debug decl_ctx ppf e = Print.expr ?debug decl_ctx ppf e +let format ?debug decl_ctx ppf e = Print.naked_expr ?debug decl_ctx ppf e let rec size : type a. (a, 't) naked_gexpr marked -> int = fun e -> diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 18955fd5..06835326 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -211,7 +211,7 @@ let var fmt v = let needs_parens (type a) (e : (a, _) gexpr) : bool = match Marked.unmark e with EAbs _ | ETuple (_, Some _) -> true | _ -> false -let rec expr : +let rec naked_expr : 'a. ?debug:bool -> decl_ctx -> @@ -220,13 +220,13 @@ let rec expr : unit = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) (e : (a, 't) gexpr) -> - let expr e = expr ~debug ctx e in + let naked_expr e = naked_expr ~debug ctx e in let with_parens fmt e = if needs_parens e then ( punctuation fmt "("; - expr fmt e; + naked_expr fmt e; punctuation fmt ")") - else expr fmt e + else naked_expr fmt e in match Marked.unmark e with | EVar v -> Format.fprintf fmt "%a" var v @@ -234,7 +234,7 @@ let rec expr : Format.fprintf fmt "@[%a%a%a@]" punctuation "(" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ",@ ") - (fun fmt e -> Format.fprintf fmt "%a" expr e)) + (fun fmt e -> Format.fprintf fmt "%a" naked_expr e)) es punctuation ")" | ETuple (es, Some s) -> Format.fprintf fmt "@[%a@ @[%a%a%a@]@]" StructName.format_t s @@ -244,35 +244,35 @@ let rec expr : (fun fmt (e, struct_field) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t struct_field punctuation "\"" punctuation - "=" expr e)) + "=" naked_expr e)) (List.combine es (List.map fst (StructMap.find s ctx.ctx_structs))) punctuation "}" | EArray es -> Format.fprintf fmt "@[%a%a%a@]" punctuation "[" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt ";@ ") - (fun fmt e -> Format.fprintf fmt "%a" expr e)) + (fun fmt e -> Format.fprintf fmt "%a" naked_expr e)) es punctuation "]" | ETupleAccess (e1, n, s, _ts) -> ( match s with - | None -> Format.fprintf fmt "%a%a%d" expr e1 punctuation "." n + | None -> Format.fprintf fmt "%a%a%d" naked_expr e1 punctuation "." n | Some s -> - Format.fprintf fmt "%a%a%a%a%a" expr e1 operator "." punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 operator "." punctuation "\"" StructFieldName.format_t (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) punctuation "\"") | EInj (e, n, en, _ts) -> Format.fprintf fmt "@[%a@ %a@]" enum_constructor (fst (List.nth (EnumMap.find en ctx.ctx_enums) n)) - expr e + naked_expr e | EMatch (e, es, e_name) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e keyword "with" + naked_expr e keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (e, c) -> Format.fprintf fmt "@[%a %a%a@ %a@]" punctuation "|" - enum_constructor c punctuation ":" expr e)) + enum_constructor c punctuation ":" naked_expr e)) (List.combine es (List.map fst (EnumMap.find e_name ctx.ctx_enums))) | ELit l -> lit fmt l | EApp ((EAbs (binder, taus), _), args) -> @@ -285,8 +285,8 @@ let rec expr : (fun fmt (x, tau, arg) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@ %a@]@\n" keyword "let" var x punctuation ":" (typ ctx) tau punctuation "=" - expr arg keyword "in")) - xs_tau_arg expr body + naked_expr arg keyword "in")) + xs_tau_arg naked_expr body | EAbs (binder, taus) -> let xs, body = Bindlib.unmbind binder in let xs_tau = List.mapi (fun i tau -> xs.(i), tau) taus in @@ -296,44 +296,44 @@ let rec expr : (fun fmt (x, tau) -> Format.fprintf fmt "%a%a%a %a%a" punctuation "(" var x punctuation ":" (typ ctx) tau punctuation ")")) - xs_tau punctuation "→" expr body + xs_tau punctuation "→" naked_expr body | EApp ((EOp (Binop ((Map | Filter) as op)), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" binop op with_parens arg1 with_parens arg2 | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 binop op with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> expr fmt arg1 + | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> naked_expr fmt arg1 | EApp ((EOp (Unop op), _), [arg1]) -> Format.fprintf fmt "@[%a@ %a@]" unop op with_parens arg1 | EApp (f, args) -> - Format.fprintf fmt "@[%a@ %a@]" expr f + Format.fprintf fmt "@[%a@ %a@]" naked_expr f (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@ ") with_parens) args | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" expr e1 - keyword "then" expr e2 keyword "else" expr e3 + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" naked_expr e1 + keyword "then" naked_expr e2 keyword "else" naked_expr e3 | EOp (Ternop op) -> Format.fprintf fmt "%a" ternop op | EOp (Binop op) -> Format.fprintf fmt "%a" binop op | EOp (Unop op) -> Format.fprintf fmt "%a" unop op | EDefault (exceptions, just, cons) -> if List.length exceptions = 0 then - Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" expr just - punctuation "⊢" expr cons punctuation "⟩" + Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" naked_expr just + punctuation "⊢" naked_expr cons punctuation "⟩" else Format.fprintf fmt "@[%a%a@ %a@ %a@ %a@ %a%a@]" punctuation "⟨" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",") - expr) - exceptions punctuation "|" expr just punctuation "⊢" expr cons + naked_expr) + exceptions punctuation "|" naked_expr just punctuation "⊢" naked_expr cons punctuation "⟩" | ErrorOnEmpty e' -> Format.fprintf fmt "%a@ %a" operator "error_empty" with_parens e' | EAssert e' -> Format.fprintf fmt "@[%a@ %a%a%a@]" keyword "assert" punctuation "(" - expr e' punctuation ")" + naked_expr e' punctuation ")" | ECatch (e1, exn, e2) -> Format.fprintf fmt "@[%a@ %a@ %a@ %a ->@ %a@]" keyword "try" with_parens e1 keyword "with" except exn with_parens e2 @@ -348,20 +348,20 @@ let rec expr : (fun fmt (field_name, field_expr) -> Format.fprintf fmt "%a%a%a%a@ %a" punctuation "\"" StructFieldName.format_t field_name punctuation "\"" punctuation - "=" expr field_expr)) + "=" naked_expr field_expr)) (StructFieldMap.bindings fields) punctuation "}" | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" expr e1 punctuation "." punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 punctuation "." punctuation "\"" StructFieldName.format_t field punctuation "\"" | EEnumInj (e1, cons, _) -> - Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons expr e1 + Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons naked_expr e1 | EMatchS (e1, _, cases) -> Format.fprintf fmt "@[%a@ @[%a@]@ %a@ %a@]" keyword "match" - expr e1 keyword "with" + naked_expr e1 keyword "with" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "@\n") (fun fmt (cons_name, case_expr) -> Format.fprintf fmt "@[%a %a@ %a@ %a@]" punctuation "|" - enum_constructor cons_name punctuation "→" expr case_expr)) + enum_constructor cons_name punctuation "→" naked_expr case_expr)) (EnumConstructorMap.bindings cases) diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index 681e3c1f..f5b8882e 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -43,7 +43,7 @@ val unop : Format.formatter -> unop -> unit val except : Format.formatter -> except -> unit val var : Format.formatter -> 'e Var.t -> unit -val expr : +val naked_expr : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index b6517745..eb16d8b7 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -152,7 +152,7 @@ let rec unfold (ctx : decl_ctx) (s : 'e scopes) (mark : 'm mark) - (main_scope : 'expr scope_name_or_var) : 'e marked Bindlib.box = + (main_scope : 'naked_expr scope_name_or_var) : 'e marked Bindlib.box = match s with | Nil -> ( match main_scope with diff --git a/compiler/shared_ast/shared_ast.mld b/compiler/shared_ast/shared_ast.mld index 2b50d756..2ffe7c39 100644 --- a/compiler/shared_ast/shared_ast.mld +++ b/compiler/shared_ast/shared_ast.mld @@ -17,7 +17,7 @@ irrelevant cases, so that e.g. [(dcalc, _) naked_gexpr] doesn't have the [ERaise [ECatch] cases, while [(lcalc, _) naked_gexpr] doesn't have [EDefault]. For example, Lcalc expressions are then defined as -[type 'm expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. +[type 'm naked_expr = (Shared_ast.lcalc, 'm mark) Shared_ast.naked_gexpr]. This makes it possible to write a single function that works on the different ASTs, by having it take a [('a, _) naked_gexpr] as input, while retaining a much diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 1e2d5b5c..9403afff 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -116,19 +116,19 @@ let disambiguate_constructor Errors.raise_spanned_error (Marked.get_mark enum) "Enum %s has not been defined before" (Marked.unmark enum)) -(** Usage: [translate_expr scope ctxt expr] +(** Usage: [translate_expr scope ctxt naked_expr] - Translates [expr] into its desugared equivalent. [scope] is used to + Translates [naked_expr] into its desugared equivalent. [scope] is used to disambiguate the scope and subscopes variables than occur in the expression *) let rec translate_expr (scope : ScopeName.t) (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) - ((expr, pos) : Ast.expression Marked.pos) : - Desugared.Ast.expr Marked.pos Bindlib.box = + ((naked_expr, pos) : Ast.expression Marked.pos) : + Desugared.Ast.naked_expr Marked.pos Bindlib.box = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in - match expr with + match naked_expr with | Binop ( (Ast.And, _pos_op), ( TestMatchCase (e1_sub, ((constructors, Some binding), pos_pattern)), @@ -785,7 +785,7 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t + Desugared.Ast.naked_expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" @@ -799,7 +799,7 @@ and disambiguate_match_and_build_expression (ctxt : Name_resolution.context) (case_body : ('a * Pos.t) Bindlib.box) (e_binder : - (Desugared.Ast.expr, Desugared.Ast.expr * Pos.t) Bindlib.mbinder + (Desugared.Ast.naked_expr, Desugared.Ast.naked_expr * Pos.t) Bindlib.mbinder Bindlib.box) : 'c Bindlib.box = Bindlib.box_apply2 (fun e_binder case_body -> @@ -912,10 +912,10 @@ and disambiguate_match_and_build_expression missing_constructors (cases_d, Some e_uid, curr_index)) in - let expr, e_name, _ = + let naked_expr, e_name, _ = List.fold_left bind_match_cases (EnumConstructorMap.empty, None, 0) cases in - expr, Option.get e_name + naked_expr, Option.get e_name [@@ocamlformat "wrap-comments=false"] (** {1 Translating scope definitions} *) @@ -924,9 +924,9 @@ and disambiguate_match_and_build_expression this precondition has to be appended to the justifications of each definition in the subscope use. This is what this function does. *) let merge_conditions - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (cond : Desugared.Ast.expr Marked.pos Bindlib.box option) - (default_pos : Pos.t) : Desugared.Ast.expr Marked.pos Bindlib.box = + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (cond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (default_pos : Pos.t) : Desugared.Ast.naked_expr Marked.pos Bindlib.box = match precond, cond with | Some precond, Some cond -> let op_term = EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) in @@ -948,8 +948,8 @@ let process_default (scope : ScopeName.t) (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) - (param_uid : Desugared.Ast.expr Var.t Marked.pos option) - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (param_uid : Desugared.Ast.naked_expr Var.t Marked.pos option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) (just : Ast.expression Marked.pos option) @@ -987,7 +987,7 @@ let process_default (** Wrapper around {!val: process_default} that performs some name disambiguation *) let process_def - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1076,7 +1076,7 @@ let process_def (** Translates a {!type: Surface.Ast.rule} from the surface language *) let process_rule - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (scope : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1086,7 +1086,7 @@ let process_rule (** Translates assertions *) let process_assert - (precond : Desugared.Ast.expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index ae8f27f3..af31feb5 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -321,7 +321,7 @@ let process_item_decl (** Adds a binding to the context *) let add_def_local_var (ctxt : context) (name : ident) : - context * Desugared.Ast.expr Var.t = + context * Desugared.Ast.naked_expr Var.t = let local_var_uid = Var.make name in let ctxt = { diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index 59ce3a7d..c346b386 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -120,7 +120,7 @@ val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool val is_type_cond : Ast.typ Marked.pos -> bool -val add_def_local_var : context -> ident -> context * Desugared.Ast.expr Var.t +val add_def_local_var : context -> ident -> context * Desugared.Ast.naked_expr Var.t (** Adds a binding to the context *) val get_def_key : diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index 7bba760a..a25778b3 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -22,15 +22,15 @@ open Ast (** {1 Helpers and type definitions}*) -type vc_return = typed marked_expr * (typed expr, typ Marked.pos) Var.Map.t +type vc_return = typed expr * (typed naked_expr, typ Marked.pos) Var.Map.t (** The return type of VC generators is the VC expression plus the types of any locally free variable inside that expression. *) type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; - input_vars : typed expr Var.t list; - scope_variables_typs : (typed expr, typ Marked.pos) Var.Map.t; + input_vars : typed naked_expr Var.t list; + scope_variables_typs : (typed naked_expr, typ Marked.pos) Var.Map.t; } let conjunction (args : vc_return list) (mark : typed mark) : vc_return = @@ -74,8 +74,8 @@ let half_product (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list = variables, or [fun () -> e1] for subscope variables. But what we really want to analyze is only [e1], so we match this outermost structure explicitely and have a clean verification condition generator that only runs on [e1] *) -let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed marked_expr) - : typed marked_expr = +let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) + : typed expr = match Marked.unmark e with | ErrorOnEmpty ( EDefault @@ -106,7 +106,7 @@ let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed marked_expr) [b] such that if [b] is true, then [e] will never return an empty error. It also returns a map of all the types of locally free variables inside the expression. *) -let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed marked_expr) : +let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed expr) : vc_return = let out = match Marked.unmark e with @@ -200,7 +200,7 @@ let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed marked_expr) : [b] such that if [b] is true, then [e] will never return a conflict error. It also returns a map of all the types of locally free variables inside the expression. *) -let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed marked_expr) +let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed expr) : vc_return = let out = (* See the code of [generate_vc_must_not_return_empty] for a list of invariants on which this @@ -283,17 +283,17 @@ let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed marked_expr) type verification_condition_kind = NoEmptyError | NoOverlappingExceptions type verification_condition = { - vc_guard : typed marked_expr; + vc_guard : typed expr; (* should have type bool *) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed expr Var.t Marked.pos; - vc_free_vars_typ : (typed expr, typ Marked.pos) Var.Map.t; + vc_variable : typed naked_expr Var.t Marked.pos; + vc_free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t; } let rec generate_verification_conditions_scope_body_expr (ctx : ctx) - (scope_body_expr : 'm expr scope_body_expr) : + (scope_body_expr : 'm naked_expr scope_body_expr) : ctx * verification_condition list = match scope_body_expr with | Result _ -> ctx, [] @@ -378,7 +378,7 @@ let rec generate_verification_conditions_scope_body_expr let rec generate_verification_conditions_scopes (decl_ctx : decl_ctx) - (scopes : 'm expr scopes) + (scopes : 'm naked_expr scopes) (s : ScopeName.t option) : verification_condition list = match scopes with | Nil -> [] diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 359c3ae9..bba3e625 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -29,12 +29,12 @@ type verification_condition_kind = a conflict error *) type verification_condition = { - vc_guard : typed Dcalc.Ast.marked_expr; + vc_guard : typed Dcalc.Ast.expr; (** This expression should have type [bool]*) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed Dcalc.Ast.expr Var.t Marked.pos; - vc_free_vars_typ : (typed Dcalc.Ast.expr, typ Marked.pos) Var.Map.t; + vc_variable : typed Dcalc.Ast.naked_expr Var.t Marked.pos; + vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ Marked.pos) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 3a0bc322..070dad6b 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -25,7 +25,7 @@ module type Backend = sig type backend_context val make_context : - decl_ctx -> (typed expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -40,7 +40,7 @@ module type Backend = sig val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding end @@ -50,13 +50,13 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> (typed expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context type vc_encoding val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 13fc8b7d..125bb7bb 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -26,7 +26,7 @@ module type Backend = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding @@ -42,7 +42,7 @@ module type Backend = sig val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding end @@ -53,14 +53,14 @@ module type BackendIO = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> backend_context type vc_encoding val translate_expr : backend_context -> - typed Dcalc.Ast.marked_expr -> + typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 89a3b572..6c2b4bb0 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -27,20 +27,20 @@ type context = { ctx_decl : decl_ctx; (* The declaration context from the Catala program, containing information to precisely pretty print Catala expressions *) - ctx_var : (typed expr, typ Marked.pos) Var.Map.t; + ctx_var : (typed naked_expr, typ Marked.pos) Var.Map.t; (* A map from Catala variables to their types, needed to create Z3 expressions of the right sort *) - ctx_funcdecl : (typed expr, FuncDecl.func_decl) Var.Map.t; + ctx_funcdecl : (typed naked_expr, FuncDecl.func_decl) Var.Map.t; (* A map from Catala function names (represented as variables) to Z3 function declarations, used to only define once functions in Z3 queries *) - ctx_z3vars : typed expr Var.t StringMap.t; + ctx_z3vars : typed naked_expr Var.t StringMap.t; (* A map from strings, corresponding to Z3 symbol names, to the Catala variable they represent. Used when to pretty-print Z3 models when a counterexample is generated *) ctx_z3datatypes : Sort.sort EnumMap.t; (* A map from Catala enumeration names to the corresponding Z3 sort, from which we can retrieve constructors and accessors *) - ctx_z3matchsubsts : (typed expr, Expr.expr) Var.Map.t; + ctx_z3matchsubsts : (typed naked_expr, Expr.expr) Var.Map.t; (* A map from Catala temporary variables, generated when translating a match, to the corresponding enum accessor call as a Z3 expression *) ctx_z3structs : Sort.sort StructMap.t; @@ -66,14 +66,14 @@ type context = { (** [add_funcdecl] adds the mapping between the Catala variable [v] and the Z3 function declaration [fd] to the context **) let add_funcdecl - (v : typed expr Var.t) + (v : typed naked_expr Var.t) (fd : FuncDecl.func_decl) (ctx : context) : context = { ctx with ctx_funcdecl = Var.Map.add v fd ctx.ctx_funcdecl } (** [add_z3var] adds the mapping between [name] and the Catala variable [v] to the context **) -let add_z3var (name : string) (v : typed expr Var.t) (ctx : context) : context = +let add_z3var (name : string) (v : typed naked_expr Var.t) (ctx : context) : context = { ctx with ctx_z3vars = StringMap.add name v ctx.ctx_z3vars } (** [add_z3enum] adds the mapping between the Catala enumeration [enum] and the @@ -84,7 +84,7 @@ let add_z3enum (enum : EnumName.t) (sort : Sort.sort) (ctx : context) : context (** [add_z3var] adds the mapping between temporary variable [v] and the Z3 expression [e] representing an accessor application to the context **) -let add_z3matchsubst (v : typed expr Var.t) (e : Expr.expr) (ctx : context) : +let add_z3matchsubst (v : typed naked_expr Var.t) (e : Expr.expr) (ctx : context) : context = { ctx with ctx_z3matchsubsts = Var.Map.add v e ctx.ctx_z3matchsubsts } @@ -390,7 +390,7 @@ let translate_lit (ctx : context) (l : lit) : Expr.expr = corresponding to the variable [v]. If no such function declaration exists yet, we construct it and add it to the context, thus requiring to return a new context *) -let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : +let find_or_create_funcdecl (ctx : context) (v : typed naked_expr Var.t) : context * FuncDecl.func_decl = match Var.Map.find_opt v ctx.ctx_funcdecl with | Some fd -> ctx, fd @@ -420,7 +420,7 @@ let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : let rec translate_op (ctx : context) (op : operator) - (args : 'm marked_expr list) : context * Expr.expr = + (args : 'm expr list) : context * Expr.expr = match op with | Ternop _top -> let _e1, _e2, _e3 = @@ -628,11 +628,11 @@ let rec translate_op (** [translate_expr] translate the expression [vc] to its corresponding Z3 expression **) -and translate_expr (ctx : context) (vc : 'm marked_expr) : context * Expr.expr = +and translate_expr (ctx : context) (vc : 'm expr) : context * Expr.expr = let translate_match_arm (head : Expr.expr) (ctx : context) - (e : 'm marked_expr * FuncDecl.func_decl list) : context * Expr.expr = + (e : 'm expr * FuncDecl.func_decl list) : context * Expr.expr = let e, accessors = e in match Marked.unmark e with | EAbs (e, _) -> @@ -802,7 +802,7 @@ module Backend = struct let is_model_empty (m : model) : bool = List.length (Z3.Model.get_decls m) = 0 - let translate_expr (ctx : backend_context) (e : 'm marked_expr) = + let translate_expr (ctx : backend_context) (e : 'm expr) = translate_expr ctx e let init_backend () = @@ -810,7 +810,7 @@ module Backend = struct let make_context (decl_ctx : decl_ctx) - (free_vars_typ : (typed expr, typ Marked.pos) Var.Map.t) : backend_context + (free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t) : backend_context = let cfg = (if !Cli.disable_counterexamples then [] else ["model", "true"]) From f09451bf6be8decbba9d3604b3d200f5790bdeda Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 16:37:58 +0200 Subject: [PATCH 25/31] Add a type alias for clarity of Shared_ast.Expr --- compiler/shared_ast/expr.ml | 6 +- compiler/shared_ast/expr.mli | 116 ++++++++++++++++++----------------- 2 files changed, 63 insertions(+), 59 deletions(-) diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index f2083550..f96da1bd 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -18,6 +18,8 @@ open Utils open Definitions +type 'a box = 'a Bindlib.box + (** Functions handling the types of [shared_ast] *) (* Basic block constructors *) @@ -147,8 +149,8 @@ let fold_marks let map (type a) (ctx : 'ctx) - ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) gexpr Bindlib.box) - (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) gexpr Bindlib.box = + ~(f : 'ctx -> (a, 'm1) gexpr -> (a, 'm2) gexpr box) + (e : ((a, 'm1) naked_gexpr, 'm2) Marked.t) : (a, 'm2) gexpr box = let m = Marked.get_mark e in match Marked.unmark e with | ELit l -> elit l m diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index f0348ac9..a4585a40 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -20,93 +20,95 @@ open Utils open Definitions +type 'a box = 'a Bindlib.box + (** {2 Boxed constructors} *) -val box : ('a, 't) gexpr -> ('a, 't) gexpr Bindlib.box -val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr Bindlib.box +val box : ('a, 't) gexpr -> ('a, 't) gexpr box +val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr box val etuple : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box list -> StructName.t option -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val etupleaccess : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> StructName.t option -> marked_typ list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val einj : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> EnumName.t -> marked_typ list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val ematch : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box list -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> + ('a, 't) gexpr box list -> EnumName.t -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val earray : - ('a any, 't) gexpr Bindlib.box list -> + ('a any, 't) gexpr box list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box -val elit : 'a any glit -> 't -> ('a, 't) gexpr Bindlib.box +val elit : 'a any glit -> 't -> ('a, 't) gexpr box val eabs : - (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder Bindlib.box -> + (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder box -> marked_typ list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eapp : - ('a any, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box list -> + ('a any, 't) gexpr box -> + ('a, 't) gexpr box list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eassert : - (([< dcalc | lcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box -val eop : operator -> 't -> (_ any, 't) gexpr Bindlib.box +val eop : operator -> 't -> (_ any, 't) gexpr box val edefault : - (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box list -> - ('a, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr box list -> + ('a, 't) gexpr box -> + ('a, 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eifthenelse : - ('a any, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> + ('a any, 't) gexpr box -> + ('a, 't) gexpr box -> + ('a, 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val eerroronempty : - (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr Bindlib.box -> + (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val ecatch : - (lcalc, 't) gexpr Bindlib.box -> + (lcalc, 't) gexpr box -> except -> - (lcalc, 't) gexpr Bindlib.box -> + (lcalc, 't) gexpr box -> 't -> - (lcalc, 't) gexpr Bindlib.box + (lcalc, 't) gexpr box -val eraise : except -> 't -> (lcalc, 't) gexpr Bindlib.box +val eraise : except -> 't -> (lcalc, 't) gexpr box (** Manipulation of marks *) @@ -130,15 +132,15 @@ val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark val untype : - ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr Bindlib.box + ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box (** {2 Traversal functions} *) val map : 'ctx -> - f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box) -> + f:('ctx -> ('a, 't1) gexpr -> ('a, 't2) gexpr box) -> (('a, 't1) naked_gexpr, 't2) Marked.t -> - ('a, 't2) gexpr Bindlib.box + ('a, 't2) gexpr box (** Flat (non-recursive) mapping on expressions. If you want to apply a map transform to an expression, you can save up @@ -161,30 +163,30 @@ val map : val map_top_down : f:(('a, 't1) gexpr -> (('a, 't1) naked_gexpr, 't2) Marked.t) -> ('a, 't1) gexpr -> - ('a, 't2) gexpr Bindlib.box + ('a, 't2) gexpr box (** Recursively applies [f] to the nodes of the expression tree. The type returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) val map_marks : - f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr Bindlib.box + f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr box (** {2 Expression building helpers} *) -val make_var : 'a Bindlib.var * 'b -> ('a * 'b) Bindlib.box +val make_var : 'a Bindlib.var * 'b -> ('a * 'b) box val make_abs : ('a, 't) naked_gexpr Var.vars -> - ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr box -> typ Marked.pos list -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box val make_app : - ((_ any, 'm mark) naked_gexpr as 'e) marked Bindlib.box -> - 'e marked Bindlib.box list -> + ((_ any, 'm mark) naked_gexpr as 'e) marked box -> + 'e marked box list -> 'm mark -> - 'e marked Bindlib.box + 'e marked box val empty_thunked_term : 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) naked_gexpr marked @@ -192,27 +194,27 @@ val empty_thunked_term : val make_let_in : 'e Bindlib.var -> marked_typ -> - 'e anyexpr marked Bindlib.box -> - 'e marked Bindlib.box -> + 'e anyexpr marked box -> + 'e marked box -> Utils.Pos.t -> - 'e marked Bindlib.box + 'e marked box val make_let_in_raw : ('a any, 't) naked_gexpr Bindlib.var -> marked_typ -> - ('a, 't) gexpr Bindlib.box -> - ('a, 't) gexpr Bindlib.box -> + ('a, 't) gexpr box -> + ('a, 't) gexpr box -> 't -> - ('a, 't) gexpr Bindlib.box + ('a, 't) gexpr box (** Version with any mark; to be removed once we use the [mark] type everywhere. *) val make_multiple_let_in : 'e Var.vars -> marked_typ list -> - 'e marked Bindlib.box list -> - 'e marked Bindlib.box -> + 'e marked box list -> + 'e marked box -> Pos.t -> - 'e marked Bindlib.box + 'e marked box val make_default : (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr list -> @@ -236,7 +238,7 @@ val make_default : (** {2 Transformations} *) val remove_logging_calls : - ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked Bindlib.box + ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked box (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) From 5e9c3d630e6ba1ef616f2e83e9d8dda26480d1c2 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 17:29:00 +0200 Subject: [PATCH 26/31] Same treatment for `typ` and `marked_typ` --- compiler/dcalc/typing.ml | 36 ++++++++++---------- compiler/dcalc/typing.mli | 4 +-- compiler/desugared/ast.ml | 8 ++--- compiler/desugared/ast.mli | 12 +++---- compiler/desugared/desugared_to_scope.ml | 24 ++++++------- compiler/lcalc/ast.ml | 2 +- compiler/lcalc/ast.mli | 5 ++- compiler/lcalc/compile_without_exceptions.ml | 2 +- compiler/lcalc/to_ocaml.ml | 16 ++++----- compiler/lcalc/to_ocaml.mli | 6 ++-- compiler/plugins/api_web.ml | 8 ++--- compiler/plugins/json_schema.ml | 6 ++-- compiler/scalc/ast.ml | 23 +++++++------ compiler/scalc/compile_from_lambda.ml | 32 ++++++++--------- compiler/scalc/print.ml | 6 ++-- compiler/scalc/to_python.ml | 10 +++--- compiler/scopelang/ast.ml | 10 +++--- compiler/scopelang/ast.mli | 6 ++-- compiler/scopelang/dependency.ml | 2 +- compiler/scopelang/dependency.mli | 2 +- compiler/scopelang/print.ml | 4 +-- compiler/scopelang/scope_to_dcalc.ml | 12 +++---- compiler/shared_ast/definitions.ml | 28 +++++++-------- compiler/shared_ast/expr.ml | 10 +++--- compiler/shared_ast/expr.mli | 26 +++++++------- compiler/shared_ast/print.ml | 6 ++-- compiler/shared_ast/print.mli | 2 +- compiler/shared_ast/scope.ml | 2 +- compiler/shared_ast/scope.mli | 2 +- compiler/surface/ast.ml | 9 ++--- compiler/surface/desugaring.ml | 20 +++++------ compiler/surface/name_resolution.ml | 20 +++++------ compiler/surface/name_resolution.mli | 12 +++---- compiler/verification/conditions.ml | 6 ++-- compiler/verification/conditions.mli | 2 +- compiler/verification/io.ml | 4 +-- compiler/verification/io.mli | 4 +-- compiler/verification/z3backend.real.ml | 10 +++--- 38 files changed, 200 insertions(+), 199 deletions(-) diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 59797316..794256df 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -32,12 +32,12 @@ module Any = end) () -type unionfind_typ = typ Marked.pos UnionFind.elem -(** We do not reuse {!type: Dcalc.Ast.typ} because we have to include a new +type unionfind_typ = naked_typ Marked.pos UnionFind.elem +(** We do not reuse {!type: Dcalc.Ast.naked_typ} because we have to include a new [TAny] variant. Indeed, error terms can have any type and this has to be captured by the type sytem. *) -and typ = +and naked_typ = | TLit of A.typ_lit | TArrow of unionfind_typ * unionfind_typ | TTuple of unionfind_typ list @@ -47,7 +47,7 @@ and typ = | TArray of unionfind_typ | TAny of Any.t -let rec typ_to_ast (ty : unionfind_typ) : A.marked_typ = +let rec typ_to_ast (ty : unionfind_typ) : A.typ = let ty, pos = UnionFind.get (UnionFind.find ty) in match ty with | TLit l -> A.TLit l, pos @@ -59,7 +59,7 @@ let rec typ_to_ast (ty : unionfind_typ) : A.marked_typ = | TAny _ -> A.TAny, pos | TArray t1 -> A.TArray (typ_to_ast t1), pos -let rec ast_to_typ (ty : A.marked_typ) : unionfind_typ = +let rec ast_to_typ (ty : A.typ) : unionfind_typ = let ty' = match Marked.unmark ty with | A.TLit l -> TLit l @@ -75,23 +75,23 @@ let rec ast_to_typ (ty : A.marked_typ) : unionfind_typ = (** {1 Types and unification} *) -let typ_needs_parens (t : typ Marked.pos UnionFind.elem) : bool = +let typ_needs_parens (t : unionfind_typ) : bool = let t = UnionFind.get (UnionFind.find t) in match Marked.unmark t with TArrow _ | TArray _ -> true | _ -> false let rec format_typ (ctx : A.decl_ctx) (fmt : Format.formatter) - (typ : typ Marked.pos UnionFind.elem) : unit = + (naked_typ : unionfind_typ) : unit = let format_typ = format_typ ctx in let format_typ_with_parens (fmt : Format.formatter) - (t : typ Marked.pos UnionFind.elem) = + (t : unionfind_typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in - let typ = UnionFind.get (UnionFind.find typ) in - match Marked.unmark typ with + let naked_typ = UnionFind.get (UnionFind.find naked_typ) in + match Marked.unmark naked_typ with | TLit l -> Format.fprintf fmt "%a" A.Print.tlit l | TTuple ts -> Format.fprintf fmt "@[(%a)]" @@ -112,8 +112,8 @@ let rec format_typ exception Type_error of A.any_marked_expr - * typ Marked.pos UnionFind.elem - * typ Marked.pos UnionFind.elem + * unionfind_typ + * unionfind_typ type mark = { pos : Pos.t; uf : unionfind_typ } @@ -121,8 +121,8 @@ type mark = { pos : Pos.t; uf : unionfind_typ } let rec unify (ctx : A.decl_ctx) (e : ('a, 'm A.mark) A.gexpr) (* used for error context *) - (t1 : typ Marked.pos UnionFind.elem) - (t2 : typ Marked.pos UnionFind.elem) : unit = + (t1 : unionfind_typ) + (t2 : unionfind_typ) : unit = let unify = unify ctx in (* Cli.debug_format "Unifying %a and %a" (format_typ ctx) t1 (format_typ ctx) t2; *) @@ -209,7 +209,7 @@ let handle_type_error ctx e t1 t2 = This allows us to have a simpler type system, while we argue the syntactic burden of operator annotations helps the programmer visualize the type flow in the code. *) -let op_type (op : A.operator Marked.pos) : typ Marked.pos UnionFind.elem = +let op_type (op : A.operator Marked.pos) : unionfind_typ = let pos = Marked.get_mark op in let bt = UnionFind.make (TLit TBool, pos) in let it = UnionFind.make (TLit TInt, pos) in @@ -276,7 +276,7 @@ let op_type (op : A.operator Marked.pos) : typ Marked.pos UnionFind.elem = (** {1 Double-directed typing} *) -type 'e env = ('e, typ Marked.pos UnionFind.elem) A.Var.Map.t +type 'e env = ('e, unionfind_typ) A.Var.Map.t let add_pos e ty = Marked.mark (A.Expr.pos e) ty let ty (_, { uf; _ }) = uf @@ -470,7 +470,7 @@ let rec typecheck_expr_bottom_up and typecheck_expr_top_down (ctx : A.decl_ctx) (env : 'm Ast.naked_expr env) - (tau : typ Marked.pos UnionFind.elem) + (tau : unionfind_typ) (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) tau (Expr.format ctx) e; *) @@ -670,7 +670,7 @@ let infer_type (type m) ctx (e : m Ast.expr) = let check_type (ctx : A.decl_ctx) (e : 'm Ast.expr) - (tau : A.typ Marked.pos) = + (tau : A.typ) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore @@ wrap ctx (typecheck_expr_top_down ctx A.Var.Map.empty (ast_to_typ tau)) e diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 8602c3c4..362c4f29 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -24,9 +24,9 @@ val infer_types : (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) -val infer_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos +val infer_type : decl_ctx -> 'm Ast.expr -> typ (** Gets the outer type of the given expression, using either the existing annotations or inference *) -val check_type : decl_ctx -> 'm Ast.expr -> typ Utils.Marked.pos -> unit +val check_type : decl_ctx -> 'm Ast.expr -> typ -> unit val infer_types_program : untyped Ast.program -> typed Ast.program diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index f3b001d0..e44b0365 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -114,7 +114,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * marked_typ) option; + rule_parameter : (naked_expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -154,7 +154,7 @@ module Rule = struct | Some _, None -> 1 end -let empty_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule = +let empty_rule (pos : Pos.t) (have_parameter : typ option) : rule = { rule_just = Bindlib.box (ELit (LBool false), pos); rule_cons = Bindlib.box (ELit LEmptyError, pos); @@ -167,7 +167,7 @@ let empty_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule = rule_label = Unlabeled; } -let always_false_rule (pos : Pos.t) (have_parameter : marked_typ option) : rule +let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule = { rule_just = Bindlib.box (ELit (LBool true), pos); @@ -191,7 +191,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : marked_typ; + scope_def_typ : typ; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index bfe030e6..177074bf 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -72,17 +72,17 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * marked_typ) option; + rule_parameter : (naked_expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } module Rule : Set.OrderedType with type t = rule -val empty_rule : Pos.t -> typ Marked.pos option -> rule -val always_false_rule : Pos.t -> typ Marked.pos option -> rule +val empty_rule : Pos.t -> typ option -> rule +val always_false_rule : Pos.t -> typ option -> rule -type assertion = naked_expr Marked.pos Bindlib.box +type assertion = expr Bindlib.box type variation_typ = Increasing | Decreasing type reference_typ = Decree | Law @@ -92,7 +92,7 @@ type meta_assertion = type scope_def = { scope_def_rules : rule RuleMap.t; - scope_def_typ : typ Marked.pos; + scope_def_typ : typ; scope_def_is_condition : bool; scope_def_io : Scopelang.Ast.io; } @@ -115,5 +115,5 @@ type program = { (** {1 Helpers} *) -val locations_used : naked_expr Marked.pos -> LocationSet.t +val locations_used : expr -> LocationSet.t val free_variables : rule RuleMap.t -> Pos.t ScopeDefMap.t diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 2e723a1e..ae845a68 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -31,15 +31,15 @@ type ctx = { } let tag_with_log_entry - (e : Scopelang.Ast.naked_expr Marked.pos) + (e : Scopelang.Ast.expr) (l : log_entry) (markings : Utils.Uid.MarkedString.info list) : - Scopelang.Ast.naked_expr Marked.pos = + Scopelang.Ast.expr = ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) -let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : - Scopelang.Ast.naked_expr Marked.pos Bindlib.box = +let rec translate_expr (ctx : ctx) (e : Ast.expr) : + Scopelang.Ast.expr Bindlib.box = let m = Marked.get_mark e in match Marked.unmark e with | ELocation (SubScopeVar (s_name, ss_name, s_var)) -> @@ -187,7 +187,7 @@ let rec rule_tree_to_expr (ctx : ctx) (def_pos : Pos.t) (is_func : Ast.naked_expr Var.t option) - (tree : rule_tree) : Scopelang.Ast.naked_expr Marked.pos Bindlib.box = + (tree : rule_tree) : Scopelang.Ast.expr Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r in @@ -195,8 +195,8 @@ let rec rule_tree_to_expr whole rule tree into a function, we need to perform some alpha-renaming of all the expressions *) let substitute_parameter - (e : Ast.naked_expr Marked.pos Bindlib.box) - (rule : Ast.rule) : Ast.naked_expr Marked.pos Bindlib.box = + (e : Ast.expr Bindlib.box) + (rule : Ast.rule) : Ast.expr Bindlib.box = match is_func, rule.Ast.rule_parameter with | Some new_param, Some (old_param, _) -> let binder = Bindlib.bind_var old_param e in @@ -236,8 +236,8 @@ let rec rule_tree_to_expr (fun rule -> substitute_parameter rule.Ast.rule_cons rule) base_rules in - let translate_and_unbox_list (list : Ast.naked_expr Marked.pos Bindlib.box list) : - Scopelang.Ast.naked_expr Marked.pos Bindlib.box list = + let translate_and_unbox_list (list : Ast.expr Bindlib.box list) : + Scopelang.Ast.expr Bindlib.box list = List.map (fun e -> (* There are two levels of boxing here, the outermost is introduced by @@ -304,10 +304,10 @@ let translate_def (ctx : ctx) (def_info : Ast.ScopeDef.t) (def : Ast.rule Ast.RuleMap.t) - (typ : typ Marked.pos) + (typ : typ) (io : Scopelang.Ast.io) ~(is_cond : bool) - ~(is_subscope_var : bool) : Scopelang.Ast.naked_expr Marked.pos = + ~(is_subscope_var : bool) : Scopelang.Ast.expr = (* Here, we have to transform this list of rules into a default tree. *) let is_def_func = match Marked.unmark typ with TArrow (_, _) -> true | _ -> false @@ -319,7 +319,7 @@ let translate_def let all_rules_not_func = Ast.RuleMap.for_all (fun n r -> not (is_rule_func n r)) def in - let is_def_func_param_typ : typ Marked.pos option = + let is_def_func_param_typ : typ option = if is_def_func && all_rules_func then match Marked.unmark typ with | TArrow (t_param, _) -> Some t_param diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 63d46fea..056fb89c 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -28,7 +28,7 @@ let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) let some_constr : EnumConstructor.t = EnumConstructor.fresh ("ESome", Pos.no_pos) -let option_enum_config : (EnumConstructor.t * typ Marked.pos) list = +let option_enum_config : (EnumConstructor.t * typ) list = [none_constr, (TLit TUnit, Pos.no_pos); some_constr, (TAny, Pos.no_pos)] (* FIXME: proper typing in all the constructors below *) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index f2c1e133..5810ee9b 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -14,7 +14,6 @@ License for the specific language governing permissions and limitations under the License. *) -open Utils open Shared_ast (** Abstract syntax tree for the lambda calculus *) @@ -33,7 +32,7 @@ type 'm program = 'm naked_expr Shared_ast.program val option_enum : EnumName.t val none_constr : EnumConstructor.t val some_constr : EnumConstructor.t -val option_enum_config : (EnumConstructor.t * typ Marked.pos) list +val option_enum_config : (EnumConstructor.t * typ) list val make_none : 'm mark -> 'm expr Bindlib.box val make_some : 'm expr Bindlib.box -> 'm expr Bindlib.box @@ -46,7 +45,7 @@ val make_matchopt_with_abs_arms : val make_matchopt : 'm mark -> 'm naked_expr Var.t -> - typ Marked.pos -> + typ -> 'm expr Bindlib.box -> 'm expr Bindlib.box -> 'm expr Bindlib.box -> diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 9702b1f6..7eadc50c 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -120,7 +120,7 @@ let add_var Since positions where there is thunked expressions is exactly where we will put option expressions. Hence, the transformation simply reduce [unit -> 'a] into ['a option] recursivly. There is no polymorphism inside catala. *) -let rec translate_typ (tau : typ Marked.pos) : typ Marked.pos = +let rec translate_typ (tau : typ) : typ = (Fun.flip Marked.same_mark_as) tau begin diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index 9a16842e..dbd18151 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -21,7 +21,7 @@ open String_common module D = Dcalc.Ast let find_struct (s : StructName.t) (ctx : decl_ctx) : - (StructFieldName.t * typ Marked.pos) list = + (StructFieldName.t * typ) list = try StructMap.find s ctx.ctx_structs with Not_found -> let s_name, pos = StructName.get_info s in @@ -30,7 +30,7 @@ let find_struct (s : StructName.t) (ctx : decl_ctx) : s_name let find_enum (en : EnumName.t) (ctx : decl_ctx) : - (EnumConstructor.t * typ Marked.pos) list = + (EnumConstructor.t * typ) list = try EnumMap.find en ctx.ctx_enums with Not_found -> let en_name, pos = EnumName.get_info en in @@ -183,7 +183,7 @@ let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit +let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit = match Marked.unmark ty with | TLit TUnit -> Format.fprintf fmt "embed_unit" @@ -198,11 +198,11 @@ let rec typ_embedding_name (fmt : Format.formatter) (ty : typ Marked.pos) : unit | TArray ty -> Format.fprintf fmt "embed_array (%a)" typ_embedding_name ty | _ -> Format.fprintf fmt "unembeddable" -let typ_needs_parens (e : typ Marked.pos) : bool = +let typ_needs_parens (e : typ) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = +let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = + let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -450,7 +450,7 @@ let rec format_expr let format_struct_embedding (fmt : Format.formatter) ((struct_name, struct_fields) : - StructName.t * (StructFieldName.t * typ Marked.pos) list) = + StructName.t * (StructFieldName.t * typ) list) = if List.length struct_fields = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_struct_name struct_name format_to_module_name (`Sname struct_name) @@ -473,7 +473,7 @@ let format_struct_embedding let format_enum_embedding (fmt : Format.formatter) ((enum_name, enum_cases) : - EnumName.t * (EnumConstructor.t * typ Marked.pos) list) = + EnumName.t * (EnumConstructor.t * typ) list) = if List.length enum_cases = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_to_module_name (`Ename enum_name) format_enum_name enum_name diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index dee24908..a9d46711 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -23,12 +23,12 @@ open Ast val avoid_keywords : string -> string val find_struct : - StructName.t -> decl_ctx -> (StructFieldName.t * typ Marked.pos) list + StructName.t -> decl_ctx -> (StructFieldName.t * typ) list val find_enum : - EnumName.t -> decl_ctx -> (EnumConstructor.t * typ Marked.pos) list + EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list -val typ_needs_parens : typ Marked.pos -> bool +val typ_needs_parens : typ -> bool val needs_parens : 'm expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit val format_enum_cons_name : Format.formatter -> EnumConstructor.t -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index e3e0fc76..a615637c 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -60,8 +60,8 @@ module To_jsoo = struct | TBool -> "bool Js.t" | TDate -> "Js.js_string Js.t") - let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = + let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = + let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -137,7 +137,7 @@ module To_jsoo = struct (type_ordering : Scopelang.Dependency.TVertex.t list) (fmt : Format.formatter) (ctx : decl_ctx) : unit = - let format_prop_or_meth fmt (struct_field_type : typ Marked.pos) = + let format_prop_or_meth fmt (struct_field_type : typ) = match Marked.unmark struct_field_type with | TArrow _ -> Format.fprintf fmt "Js.meth" | _ -> Format.fprintf fmt "Js.readonly_prop" @@ -224,7 +224,7 @@ module To_jsoo = struct in let format_enum_decl fmt - (enum_name, (enum_cons : (EnumConstructor.t * typ Marked.pos) list)) = + (enum_name, (enum_cons : (EnumConstructor.t * typ) list)) = let fmt_enum_name fmt _ = format_enum_name fmt enum_name in let fmt_module_enum_name fmt _ = To_ocaml.format_to_module_name fmt (`Ename enum_name) diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index 5f0a9cf6..f933360d 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -69,7 +69,7 @@ module To_json = struct | TDate -> Format.fprintf fmt "\"type\": \"string\",@\n\"format\": \"date\"" | TDuration -> failwith "TODO: tlit duration" - let rec fmt_type fmt (typ : marked_typ) = + let rec fmt_type fmt (typ : typ) = match Marked.unmark typ with | TLit tlit -> fmt_tlit fmt tlit | TStruct sname -> @@ -110,8 +110,8 @@ module To_json = struct | _ -> failwith "unreachable: only structs and enums are collected." in let rec collect_required_type_defs_from_scope_input - (input_struct : StructName.t) : marked_typ list = - let rec collect (acc : marked_typ list) (t : marked_typ) : marked_typ list + (input_struct : StructName.t) : typ list = + let rec collect (acc : typ list) (t : typ) : typ list = match Marked.unmark t with | TStruct s -> diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index 0a9d2157..bc4a4cb3 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -25,26 +25,27 @@ let dead_value = LocalName.fresh ("dead_value", Pos.no_pos) let handle_default = TopLevelName.fresh ("handle_default", Pos.no_pos) let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) -type naked_expr = +type expr = naked_expr Marked.pos +and naked_expr = | EVar of LocalName.t | EFunc of TopLevelName.t - | EStruct of naked_expr Marked.pos list * StructName.t - | EStructFieldAccess of naked_expr Marked.pos * StructFieldName.t * StructName.t - | EInj of naked_expr Marked.pos * EnumConstructor.t * EnumName.t - | EArray of naked_expr Marked.pos list + | EStruct of expr list * StructName.t + | EStructFieldAccess of expr * StructFieldName.t * StructName.t + | EInj of expr * EnumConstructor.t * EnumName.t + | EArray of expr list | ELit of L.lit - | EApp of naked_expr Marked.pos * naked_expr Marked.pos list + | EApp of expr * expr list | EOp of operator type stmt = | SInnerFuncDef of LocalName.t Marked.pos * func - | SLocalDecl of LocalName.t Marked.pos * typ Marked.pos - | SLocalDef of LocalName.t Marked.pos * naked_expr Marked.pos + | SLocalDecl of LocalName.t Marked.pos * typ + | SLocalDef of LocalName.t Marked.pos * expr | STryExcept of block * except * block | SRaise of except - | SIfThenElse of naked_expr Marked.pos * block * block + | SIfThenElse of expr * block * block | SSwitch of - naked_expr Marked.pos + expr * EnumName.t * (block (* Statements corresponding to arm closure body*) * (* Variable instantiated with enum payload *) LocalName.t) @@ -55,7 +56,7 @@ type stmt = and block = stmt Marked.pos list and func = { - func_params : (LocalName.t Marked.pos * typ Marked.pos) list; + func_params : (LocalName.t Marked.pos * typ) list; func_body : block; } diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index 9e1ef29a..f7263f21 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -30,15 +30,15 @@ type 'm ctxt = { (* Expressions can spill out side effect, hence this function also returns a list of statements to be prepended before the expression is evaluated *) -let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : - A.block * A.naked_expr Marked.pos = - match Marked.unmark naked_expr with +let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : + A.block * A.expr = + match Marked.unmark expr with | EVar v -> let local_var = try A.EVar (Var.Map.find v ctxt.var_dict) with Not_found -> A.EFunc (Var.Map.find v ctxt.func_dict) in - [], (local_var, Expr.pos naked_expr) + [], (local_var, Expr.pos expr) | ETuple (args, Some s_name) -> let args_stmts, new_args = List.fold_left @@ -49,14 +49,14 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : in let new_args = List.rev new_args in let args_stmts = List.rev args_stmts in - args_stmts, (A.EStruct (new_args, s_name), Expr.pos naked_expr) + args_stmts, (A.EStruct (new_args, s_name), Expr.pos expr) | ETuple (_, None) -> failwith "Non-struct tuples cannot be compiled to scalc" | ETupleAccess (e1, num_field, Some s_name, _) -> let e1_stmts, new_e1 = translate_expr ctxt e1 in let field_name = fst (List.nth (StructMap.find s_name ctxt.decl_ctx.ctx_structs) num_field) in - e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos naked_expr) + e1_stmts, (A.EStructFieldAccess (new_e1, field_name, s_name), Expr.pos expr) | ETupleAccess (_, _, None, _) -> failwith "Non-struct tuples cannot be compiled to scalc" | EInj (e1, num_cons, e_name, _) -> @@ -64,7 +64,7 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : let cons_name = fst (List.nth (EnumMap.find e_name ctxt.decl_ctx.ctx_enums) num_cons) in - e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos naked_expr) + e1_stmts, (A.EInj (new_e1, cons_name, e_name), Expr.pos expr) | EApp (f, args) -> let f_stmts, new_f = translate_expr ctxt f in let args_stmts, new_args = @@ -75,7 +75,7 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : ([], []) args in let new_args = List.rev new_args in - f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos naked_expr) + f_stmts @ args_stmts, (A.EApp (new_f, new_args), Expr.pos expr) | EArray args -> let args_stmts, new_args = List.fold_left @@ -85,9 +85,9 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : ([], []) args in let new_args = List.rev new_args in - args_stmts, (A.EArray new_args, Expr.pos naked_expr) - | EOp op -> [], (A.EOp op, Expr.pos naked_expr) - | ELit l -> [], (A.ELit l, Expr.pos naked_expr) + args_stmts, (A.EArray new_args, Expr.pos expr) + | EOp op -> [], (A.EOp op, Expr.pos expr) + | ELit l -> [], (A.ELit l, Expr.pos expr) | _ -> let tmp_var = A.LocalName.fresh @@ -100,7 +100,7 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : let v = Marked.unmark (A.LocalName.get_info v) in let tmp_rex = Re.Pcre.regexp "^temp_" in if Re.Pcre.pmatch ~rex:tmp_rex v then v else "temp_" ^ v), - Expr.pos naked_expr ) + Expr.pos expr ) in let ctxt = { @@ -109,11 +109,11 @@ let rec translate_expr (ctxt : 'm ctxt) (naked_expr : 'm L.expr) : context_name = Marked.unmark (A.LocalName.get_info tmp_var); } in - let tmp_stmts = translate_statements ctxt naked_expr in - ( ( A.SLocalDecl ((tmp_var, Expr.pos naked_expr), (TAny, Expr.pos naked_expr)), - Expr.pos naked_expr ) + let tmp_stmts = translate_statements ctxt expr in + ( ( A.SLocalDecl ((tmp_var, Expr.pos expr), (TAny, Expr.pos expr)), + Expr.pos expr ) :: tmp_stmts, - (A.EVar tmp_var, Expr.pos naked_expr) ) + (A.EVar tmp_var, Expr.pos expr) ) and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = diff --git a/compiler/scalc/print.ml b/compiler/scalc/print.ml index 8ad6ef8d..4bf10438 100644 --- a/compiler/scalc/print.ml +++ b/compiler/scalc/print.ml @@ -18,7 +18,7 @@ open Utils open Shared_ast open Ast -let needs_parens (_e : naked_expr Marked.pos) : bool = false +let needs_parens (_e : expr) : bool = false let format_local_name (fmt : Format.formatter) (v : LocalName.t) : unit = Format.fprintf fmt "%a_%s" LocalName.format_t v @@ -28,9 +28,9 @@ let rec format_expr (decl_ctx : decl_ctx) ?(debug : bool = false) (fmt : Format.formatter) - (e : naked_expr Marked.pos) : unit = + (e : expr) : unit = let format_expr = format_expr decl_ctx ~debug in - let format_with_parens (fmt : Format.formatter) (e : naked_expr Marked.pos) = + let format_with_parens (fmt : Format.formatter) (e : expr) = if needs_parens e then Format.fprintf fmt "%a%a%a" Print.punctuation "(" format_expr e Print.punctuation ")" diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index d4014ec8..03adca34 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -144,12 +144,12 @@ let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let typ_needs_parens (e : typ Marked.pos) : bool = +let typ_needs_parens (e : typ) : bool = match Marked.unmark e with TArrow _ | TArray _ -> true | _ -> false -let rec format_typ (fmt : Format.formatter) (typ : typ Marked.pos) : unit = +let rec format_typ (fmt : Format.formatter) (typ : typ) : unit = let format_typ = format_typ in - let format_typ_with_parens (fmt : Format.formatter) (t : typ Marked.pos) = + let format_typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -232,7 +232,7 @@ let format_toplevel_name (fmt : Format.formatter) (v : TopLevelName.t) : unit = let v_str = Marked.unmark (TopLevelName.get_info v) in format_name_cleaned fmt v_str -let needs_parens (e : naked_expr Marked.pos) : bool = +let needs_parens (e : expr) : bool = match Marked.unmark e with | ELit (LBool _ | LUnit) | EVar _ | EOp _ -> false | _ -> true @@ -262,7 +262,7 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) - (e : naked_expr Marked.pos) : unit = + (e : expr) : unit = match Marked.unmark e with | EVar v -> format_var fmt v | EFunc f -> format_toplevel_name fmt f diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index 54121fd0..c7935b6b 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,8 +36,8 @@ Set.Make (struct let compare = Expr.compare_location end) +type expr = (scopelang, Pos.t) gexpr type naked_expr = (scopelang, Pos.t) naked_gexpr -type expr = naked_expr Marked.pos module ExprMap = Map.Make (struct type t = expr @@ -45,7 +45,7 @@ module ExprMap = Map.Make (struct let compare = Expr.compare end) -let rec locations_used (e : naked_expr Marked.pos) : LocationSet.t = +let rec locations_used (e : expr) : LocationSet.t = match Marked.unmark e with | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty @@ -84,13 +84,13 @@ type io_input = NoInput | OnlyInput | Reentrant type io = { io_output : bool Marked.pos; io_input : io_input Marked.pos } type rule = - | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos - | Assertion of naked_expr Marked.pos + | Definition of location Marked.pos * typ * io * expr + | Assertion of expr | Call of ScopeName.t * SubScopeName.t type scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (marked_typ * io) ScopeVarMap.t; + scope_sig : (typ * io) ScopeVarMap.t; scope_decl_rules : rule list; } diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index dc567c9b..83646ab0 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -70,13 +70,13 @@ type io = { (** Characterization of the input/output status of a scope variable. *) type rule = - | Definition of location Marked.pos * marked_typ * io * naked_expr Marked.pos - | Assertion of naked_expr Marked.pos + | Definition of location Marked.pos * typ * io * expr + | Assertion of expr | Call of ScopeName.t * SubScopeName.t type scope_decl = { scope_decl_name : ScopeName.t; - scope_sig : (marked_typ * io) ScopeVarMap.t; + scope_sig : (typ * io) ScopeVarMap.t; scope_decl_rules : rule list; } diff --git a/compiler/scopelang/dependency.ml b/compiler/scopelang/dependency.ml index 0f70fe27..4551ac2e 100644 --- a/compiler/scopelang/dependency.ml +++ b/compiler/scopelang/dependency.ml @@ -164,7 +164,7 @@ module TTopologicalTraversal = Graph.Topological.Make (TDependencies) module TSCC = Graph.Components.Make (TDependencies) (** Tarjan's stongly connected components algorithm, provided by OCamlGraph *) -let rec get_structs_or_enums_in_type (t : typ Marked.pos) : TVertexSet.t = +let rec get_structs_or_enums_in_type (t : typ) : TVertexSet.t = match Marked.unmark t with | TStruct s -> TVertexSet.singleton (TVertex.Struct s) | TEnum e -> TVertexSet.singleton (TVertex.Enum e) diff --git a/compiler/scopelang/dependency.mli b/compiler/scopelang/dependency.mli index 78eafa4d..3e8f7d39 100644 --- a/compiler/scopelang/dependency.mli +++ b/compiler/scopelang/dependency.mli @@ -49,6 +49,6 @@ module TVertexSet : Set.S with type elt = TVertex.t module TDependencies : Graph.Sig.P with type V.t = TVertex.t and type E.label = Pos.t -val get_structs_or_enums_in_type : typ Marked.pos -> TVertexSet.t +val get_structs_or_enums_in_type : typ -> TVertexSet.t val build_type_graph : struct_ctx -> enum_ctx -> TDependencies.t val check_type_cycles : struct_ctx -> enum_ctx -> TVertex.t list diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index cee49080..42330c22 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -21,7 +21,7 @@ open Ast let struc ctx (fmt : Format.formatter) - ((name, fields) : StructName.t * (StructFieldName.t * typ Marked.pos) list) + ((name, fields) : StructName.t * (StructFieldName.t * typ) list) : unit = Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" Print.keyword "type" StructName.format_t name Print.punctuation "=" Print.punctuation "{" @@ -35,7 +35,7 @@ let struc let enum ctx (fmt : Format.formatter) - ((name, cases) : EnumName.t * (EnumConstructor.t * typ Marked.pos) list) : + ((name, cases) : EnumName.t * (EnumConstructor.t * typ) list) : unit = Format.fprintf fmt "%a %a %a @\n@[ %a@]" Print.keyword "type" EnumName.format_t name Print.punctuation "=" diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 5520d4d0..8b336900 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -19,7 +19,7 @@ open Shared_ast type scope_var_ctx = { scope_var_name : ScopeVar.t; - scope_var_typ : typ; + scope_var_typ : naked_typ; scope_var_io : Ast.io; } @@ -40,9 +40,9 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t; + scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.naked_expr Var.t * typ * Ast.io) ScopeVarMap.t + (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; local_vars : (Ast.naked_expr, untyped Dcalc.Ast.naked_expr Var.t) Var.Map.t; } @@ -101,8 +101,8 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (excepts : Ast.naked_expr Marked.pos list) : - Ast.naked_expr Marked.pos list = +let collapse_similar_outcomes (excepts : Ast.expr list) : + Ast.expr list = let cons_map = List.fold_left (fun map -> function @@ -133,7 +133,7 @@ let collapse_similar_outcomes (excepts : Ast.naked_expr Marked.pos list) : in excepts -let rec translate_expr (ctx : ctx) (e : Ast.naked_expr Marked.pos) : +let rec translate_expr (ctx : ctx) (e : Ast.expr) : untyped Dcalc.Ast.expr Bindlib.box = Bindlib.box_apply (fun (x : untyped Dcalc.Ast.naked_expr) -> Marked.mark (pos_mark_as e) x) diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index a4fbb511..b13ef68c 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -68,16 +68,16 @@ module StateName : Uid.Id with type info = Uid.MarkedString.info = type typ_lit = TBool | TUnit | TInt | TRat | TMoney | TDate | TDuration -type marked_typ = typ Marked.pos +type typ = naked_typ Marked.pos -and typ = +and naked_typ = | TLit of typ_lit - | TTuple of marked_typ list + | TTuple of typ list | TStruct of StructName.t | TEnum of EnumName.t - | TOption of marked_typ - | TArrow of marked_typ * marked_typ - | TArray of marked_typ + | TOption of typ + | TArrow of typ * typ + | TArray of typ | TAny (** {2 Constants and operators} *) @@ -113,7 +113,7 @@ type binop = | Filter type log_entry = - | VarDef of typ + | VarDef of naked_typ (** During code generation, we need to know the type of the variable being logged for embedding *) | BeginCall @@ -202,7 +202,7 @@ and ('a, 't) naked_gexpr = ('a, 't) naked_gexpr Bindlib.var -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EAbs : - (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * marked_typ list + (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * typ list -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr | EIfThenElse : ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr @@ -228,10 +228,10 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr list * StructName.t option -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | ETupleAccess : - ('a, 't) gexpr * int * StructName.t option * marked_typ list + ('a, 't) gexpr * int * StructName.t option * typ list -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EInj : - ('a, 't) gexpr * int * EnumName.t * marked_typ list + ('a, 't) gexpr * int * EnumName.t * typ list -> (([< dcalc | lcalc ] as 'a), 't) naked_gexpr | EMatch : ('a, 't) gexpr * ('a, 't) gexpr list * EnumName.t @@ -263,7 +263,7 @@ type 'e anyexpr = 'e constraint 'e = (_ any, _) naked_gexpr (** {2 Markings} *) type untyped = { pos : Pos.t } [@@ocaml.unboxed] -type typed = { pos : Pos.t; ty : marked_typ } +type typed = { pos : Pos.t; ty : typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when @@ -305,7 +305,7 @@ type scope_let_kind = type 'e scope_let = { scope_let_kind : scope_let_kind; - scope_let_typ : marked_typ; + scope_let_typ : typ; scope_let_expr : 'e marked; scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; scope_let_pos : Pos.t; @@ -345,7 +345,7 @@ and 'e scopes = | ScopeDef of 'e scope_def constraint 'e = ('a, 'm mark) naked_gexpr -type struct_ctx = (StructFieldName.t * marked_typ) list StructMap.t -type enum_ctx = (EnumConstructor.t * marked_typ) list EnumMap.t +type struct_ctx = (StructFieldName.t * typ) list StructMap.t +type enum_ctx = (EnumConstructor.t * typ) list EnumMap.t type decl_ctx = { ctx_enums : enum_ctx; ctx_structs : struct_ctx } type 'e program = { decl_ctx : decl_ctx; scopes : 'e scopes } diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index f96da1bd..4c23888c 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -98,9 +98,9 @@ let mark_pos (type m) (m : m mark) : Pos.t = let pos (type m) (x : ('a, m mark) Marked.t) : Pos.t = mark_pos (Marked.get_mark x) -let ty (_, m) : marked_typ = match m with Typed { ty; _ } -> ty +let ty (_, m) : typ = match m with Typed { ty; _ } -> ty -let with_ty (type m) (ty : marked_typ) (x : ('a, m mark) Marked.t) : +let with_ty (type m) (ty : typ) (x : ('a, m mark) Marked.t) : ('a, typed mark) Marked.t = Marked.mark (match Marked.get_mark x with @@ -111,7 +111,7 @@ let with_ty (type m) (ty : marked_typ) (x : ('a, m mark) Marked.t) : let map_mark (type m) (pos_f : Pos.t -> Pos.t) - (ty_f : marked_typ -> marked_typ) + (ty_f : typ -> typ) (m : m mark) : m mark = match m with | Untyped { pos } -> Untyped { pos = pos_f pos } @@ -120,7 +120,7 @@ let map_mark let map_mark2 (type m) (pos_f : Pos.t -> Pos.t -> Pos.t) - (ty_f : typed -> typed -> marked_typ) + (ty_f : typed -> typed -> typ) (m1 : m mark) (m2 : m mark) : m mark = match m1, m2 with @@ -130,7 +130,7 @@ let map_mark2 let fold_marks (type m) (pos_f : Pos.t list -> Pos.t) - (ty_f : typed list -> marked_typ) + (ty_f : typed list -> typ) (ms : m mark list) : m mark = match ms with | [] -> invalid_arg "Dcalc.Ast.fold_mark" diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index a4585a40..f2a77758 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -37,7 +37,7 @@ val etupleaccess : (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> StructName.t option -> - marked_typ list -> + typ list -> 't -> ('a, 't) gexpr box @@ -45,7 +45,7 @@ val einj : (([< dcalc | lcalc ] as 'a), 't) gexpr box -> int -> EnumName.t -> - marked_typ list -> + typ list -> 't -> ('a, 't) gexpr box @@ -65,7 +65,7 @@ val elit : 'a any glit -> 't -> ('a, 't) gexpr box val eabs : (('a any, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder box -> - marked_typ list -> + typ list -> 't -> ('a, 't) gexpr box @@ -115,21 +115,21 @@ val eraise : except -> 't -> (lcalc, 't) gexpr box val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t val pos : ('e, _) naked_gexpr marked -> Pos.t -val ty : (_, typed mark) Marked.t -> marked_typ -val with_ty : marked_typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t +val ty : (_, typed mark) Marked.t -> typ +val with_ty : typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t val map_mark : - (Pos.t -> Pos.t) -> (marked_typ -> marked_typ) -> 'm mark -> 'm mark + (Pos.t -> Pos.t) -> (typ -> typ) -> 'm mark -> 'm mark val map_mark2 : (Pos.t -> Pos.t -> Pos.t) -> - (typed -> typed -> marked_typ) -> + (typed -> typed -> typ) -> 'm mark -> 'm mark -> 'm mark val fold_marks : - (Pos.t list -> Pos.t) -> (typed list -> marked_typ) -> 'm mark list -> 'm mark + (Pos.t list -> Pos.t) -> (typed list -> typ) -> 'm mark list -> 'm mark val untype : ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box @@ -178,7 +178,7 @@ val make_var : 'a Bindlib.var * 'b -> ('a * 'b) box val make_abs : ('a, 't) naked_gexpr Var.vars -> ('a, 't) gexpr box -> - typ Marked.pos list -> + typ list -> 't -> ('a, 't) gexpr box @@ -193,7 +193,7 @@ val empty_thunked_term : val make_let_in : 'e Bindlib.var -> - marked_typ -> + typ -> 'e anyexpr marked box -> 'e marked box -> Utils.Pos.t -> @@ -201,7 +201,7 @@ val make_let_in : val make_let_in_raw : ('a any, 't) naked_gexpr Bindlib.var -> - marked_typ -> + typ -> ('a, 't) gexpr box -> ('a, 't) gexpr box -> 't -> @@ -210,7 +210,7 @@ val make_let_in_raw : val make_multiple_let_in : 'e Var.vars -> - marked_typ list -> + typ list -> 'e marked box list -> 'e marked box -> Pos.t -> @@ -263,7 +263,7 @@ val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int (** Standard comparison function, suitable for e.g. [Set.Make]. Ignores position information *) -val compare_typ : marked_typ -> marked_typ -> int +val compare_typ : typ -> typ -> int val is_value : (_ any, 'm mark) naked_gexpr marked -> bool val free_vars : 'e marked -> 'e Var.Set.t diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 06835326..9077ecf5 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -18,7 +18,7 @@ open Utils open String_common open Definitions -let typ_needs_parens (ty : marked_typ) : bool = +let typ_needs_parens (ty : typ) : bool = match Marked.unmark ty with TArrow _ | TArray _ -> true | _ -> false let uid_list (fmt : Format.formatter) (infos : Uid.MarkedString.info list) : @@ -74,9 +74,9 @@ let enum_constructor (fmt : Format.formatter) (c : EnumConstructor.t) : unit = (Utils.Cli.format_with_style [ANSITerminal.magenta]) (Format.asprintf "%a" EnumConstructor.format_t c) -let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : marked_typ) : unit = +let rec typ (ctx : decl_ctx) (fmt : Format.formatter) (ty : typ) : unit = let typ = typ ctx in - let typ_with_parens (fmt : Format.formatter) (t : marked_typ) = + let typ_with_parens (fmt : Format.formatter) (t : typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" typ t else Format.fprintf fmt "%a" typ t in diff --git a/compiler/shared_ast/print.mli b/compiler/shared_ast/print.mli index f5b8882e..e0cc7f51 100644 --- a/compiler/shared_ast/print.mli +++ b/compiler/shared_ast/print.mli @@ -33,7 +33,7 @@ val uid_list : Format.formatter -> Uid.MarkedString.info list -> unit val enum_constructor : Format.formatter -> EnumConstructor.t -> unit val tlit : Format.formatter -> typ_lit -> unit val location : Format.formatter -> 'a glocation -> unit -val typ : decl_ctx -> Format.formatter -> marked_typ -> unit +val typ : decl_ctx -> Format.formatter -> typ -> unit val lit : Format.formatter -> 'a glit -> unit val op_kind : Format.formatter -> op_kind -> unit val binop : Format.formatter -> binop -> unit diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index eb16d8b7..3d889b46 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -117,7 +117,7 @@ let build_typ_from_sig (_ctx : decl_ctx) (scope_input_struct_name : StructName.t) (scope_return_struct_name : StructName.t) - (pos : Pos.t) : typ Marked.pos = + (pos : Pos.t) : typ = let input_typ = Marked.mark pos (TStruct scope_input_struct_name) in let result_typ = Marked.mark pos (TStruct scope_return_struct_name) in Marked.mark pos (TArrow (input_typ, result_typ)) diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index b99150ff..524fa8a7 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -111,7 +111,7 @@ val unfold : 'e marked Bindlib.box val build_typ_from_sig : - decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ Marked.pos + decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ (** [build_typ_from_sig ctx in_struct out_struct pos] builds the arrow type for the specified scope *) diff --git a/compiler/surface/ast.ml b/compiler/surface/ast.ml index 5b95f4cd..85034340 100644 --- a/compiler/surface/ast.ml +++ b/compiler/surface/ast.ml @@ -134,7 +134,8 @@ type func_typ = { nude = true; }] -type typ = Base of base_typ | Func of func_typ +type typ = naked_typ Marked.pos +and naked_typ = Base of base_typ | Func of func_typ [@@deriving visitors { @@ -153,7 +154,7 @@ type typ = Base of base_typ | Func of func_typ type struct_decl_field = { struct_decl_field_name : ident Marked.pos; - struct_decl_field_typ : typ Marked.pos; + struct_decl_field_typ : typ; } [@@deriving visitors @@ -189,7 +190,7 @@ type struct_decl = { type enum_decl_case = { enum_decl_case_name : constructor Marked.pos; - enum_decl_case_typ : typ Marked.pos option; + enum_decl_case_typ : typ option; } [@@deriving visitors @@ -671,7 +672,7 @@ type scope_decl_context_scope = { type scope_decl_context_data = { scope_decl_context_item_name : ident Marked.pos; - scope_decl_context_item_typ : typ Marked.pos; + scope_decl_context_item_typ : typ; scope_decl_context_item_attribute : scope_decl_context_io; scope_decl_context_item_states : ident Marked.pos list; } diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 9403afff..164cb98e 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -125,7 +125,7 @@ let rec translate_expr (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) ((naked_expr, pos) : Ast.expression Marked.pos) : - Desugared.Ast.naked_expr Marked.pos Bindlib.box = + Desugared.Ast.expr Bindlib.box = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in match naked_expr with @@ -637,7 +637,7 @@ let rec translate_expr (translate_expr scope inside_definition_of ctxt predicate) acc in - let make_extr_body (cmp_op : binop) (t : typ Marked.pos) = + let make_extr_body (cmp_op : binop) (t : typ) = let tmp_var = Var.make "tmp" in let tmp = Expr.make_var (tmp_var, Marked.get_mark param') in Expr.make_let_in_raw tmp_var t @@ -785,7 +785,7 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.naked_expr Marked.pos Bindlib.box EnumConstructorMap.t * EnumName.t + Desugared.Ast.expr Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" @@ -924,9 +924,9 @@ and disambiguate_match_and_build_expression this precondition has to be appended to the justifications of each definition in the subscope use. This is what this function does. *) let merge_conditions - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) - (cond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) - (default_pos : Pos.t) : Desugared.Ast.naked_expr Marked.pos Bindlib.box = + (precond : Desugared.Ast.expr Bindlib.box option) + (cond : Desugared.Ast.expr Bindlib.box option) + (default_pos : Pos.t) : Desugared.Ast.expr Bindlib.box = match precond, cond with | Some precond, Some cond -> let op_term = EOp (Binop And), Marked.get_mark (Bindlib.unbox cond) in @@ -949,7 +949,7 @@ let process_default (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) (param_uid : Desugared.Ast.naked_expr Var.t Marked.pos option) - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) (just : Ast.expression Marked.pos option) @@ -987,7 +987,7 @@ let process_default (** Wrapper around {!val: process_default} that performs some name disambiguation *) let process_def - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1076,7 +1076,7 @@ let process_def (** Translates a {!type: Surface.Ast.rule} from the surface language *) let process_rule - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (scope : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) @@ -1086,7 +1086,7 @@ let process_rule (** Translates assertions *) let process_assert - (precond : Desugared.Ast.naked_expr Marked.pos Bindlib.box option) + (precond : Desugared.Ast.expr Bindlib.box option) (scope_uid : ScopeName.t) (ctxt : Name_resolution.context) (prgm : Desugared.Ast.program) diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index af31feb5..65ac15d3 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -45,14 +45,14 @@ type scope_context = { } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ Marked.pos StructFieldMap.t +type struct_context = typ StructFieldMap.t (** Types of the fields of a struct *) -type enum_context = typ Marked.pos EnumConstructorMap.t +type enum_context = typ EnumConstructorMap.t (** Types of the payloads of the cases of an enum *) type var_sig = { - var_sig_typ : typ Marked.pos; + var_sig_typ : typ; var_sig_is_condition : bool; var_sig_io : Ast.scope_decl_context_io; var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; @@ -100,7 +100,7 @@ let raise_unknown_identifier (msg : string) (ident : ident Marked.pos) = msg (** Gets the type associated to an uid *) -let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ Marked.pos = +let get_var_typ (ctxt : context) (uid : ScopeVar.t) : typ = (ScopeVarMap.find uid ctxt.var_typs).var_sig_typ let is_var_cond (ctxt : context) (uid : ScopeVar.t) : bool = @@ -149,7 +149,7 @@ let belongs_to (ctxt : context) (uid : ScopeVar.t) (scope_uid : ScopeName.t) : (** Retrieves the type of a scope definition from the context *) let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : - typ Marked.pos = + typ = match def with | Desugared.Ast.ScopeDef.SubScopeVar (_, x) (* we don't need to look at the subscope prefix because [x] is already the uid @@ -210,7 +210,7 @@ let process_subscope_decl scopes = Scopelang.Ast.ScopeMap.add scope scope_ctxt ctxt.scopes; } -let is_type_cond ((typ, _) : Ast.typ Marked.pos) = +let is_type_cond ((typ, _) : Ast.typ) = match typ with | Ast.Base Ast.Condition | Ast.Func { arg_typ = _; return_typ = Ast.Condition, _ } -> @@ -220,7 +220,7 @@ let is_type_cond ((typ, _) : Ast.typ Marked.pos) = (** Process a basic type (all types except function types) *) let rec process_base_typ (ctxt : context) - ((typ, typ_pos) : Ast.base_typ Marked.pos) : typ Marked.pos = + ((typ, typ_pos) : Ast.base_typ Marked.pos) : typ = match typ with | Ast.Condition -> TLit TBool, typ_pos | Ast.Data (Ast.Collection t) -> @@ -249,9 +249,9 @@ let rec process_base_typ ident))) (** Process a type (function or not) *) -let process_type (ctxt : context) ((typ, typ_pos) : Ast.typ Marked.pos) : - typ Marked.pos = - match typ with +let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : + typ = + match naked_typ with | Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) | Ast.Func { arg_typ; return_typ } -> ( TArrow (process_base_typ ctxt arg_typ, process_base_typ ctxt return_typ), diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index c346b386..d8e2eb39 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -45,14 +45,14 @@ type scope_context = { } (** Inside a scope, we distinguish between the variables and the subscopes. *) -type struct_context = typ Marked.pos StructFieldMap.t +type struct_context = typ StructFieldMap.t (** Types of the fields of a struct *) -type enum_context = typ Marked.pos EnumConstructorMap.t +type enum_context = typ EnumConstructorMap.t (** Types of the payloads of the cases of an enum *) type var_sig = { - var_sig_typ : typ Marked.pos; + var_sig_typ : typ; var_sig_is_condition : bool; var_sig_io : Ast.scope_decl_context_io; var_sig_states_idmap : StateName.t Desugared.Ast.IdentMap.t; @@ -94,7 +94,7 @@ val raise_unknown_identifier : string -> ident Marked.pos -> 'a (** Function to call whenever an identifier used somewhere has not been declared in the program previously *) -val get_var_typ : context -> ScopeVar.t -> typ Marked.pos +val get_var_typ : context -> ScopeVar.t -> typ (** Gets the type associated to an uid *) val is_var_cond : context -> ScopeVar.t -> bool @@ -114,11 +114,11 @@ val is_subscope_uid : ScopeName.t -> context -> ident -> bool val belongs_to : context -> ScopeVar.t -> ScopeName.t -> bool (** Checks if the var_uid belongs to the scope scope_uid *) -val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ Marked.pos +val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ (** Retrieves the type of a scope definition from the context *) val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool -val is_type_cond : Ast.typ Marked.pos -> bool +val is_type_cond : Ast.typ -> bool val add_def_local_var : context -> ident -> context * Desugared.Ast.naked_expr Var.t (** Adds a binding to the context *) diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index a25778b3..b8287cc9 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -22,7 +22,7 @@ open Ast (** {1 Helpers and type definitions}*) -type vc_return = typed expr * (typed naked_expr, typ Marked.pos) Var.Map.t +type vc_return = typed expr * (typed naked_expr, typ) Var.Map.t (** The return type of VC generators is the VC expression plus the types of any locally free variable inside that expression. *) @@ -30,7 +30,7 @@ type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; input_vars : typed naked_expr Var.t list; - scope_variables_typs : (typed naked_expr, typ Marked.pos) Var.Map.t; + scope_variables_typs : (typed naked_expr, typ) Var.Map.t; } let conjunction (args : vc_return list) (mark : typed mark) : vc_return = @@ -288,7 +288,7 @@ type verification_condition = { vc_kind : verification_condition_kind; vc_scope : ScopeName.t; vc_variable : typed naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t; + vc_free_vars_typ : (typed naked_expr, typ) Var.Map.t; } let rec generate_verification_conditions_scope_body_expr diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index bba3e625..5bc8f2f4 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -34,7 +34,7 @@ type verification_condition = { vc_kind : verification_condition_kind; vc_scope : ScopeName.t; vc_variable : typed Dcalc.Ast.naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ Marked.pos) Var.Map.t; + vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 070dad6b..4842dd58 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -25,7 +25,7 @@ module type Backend = sig type backend_context val make_context : - decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -50,7 +50,7 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> (typed naked_expr, typ Marked.pos) Var.Map.t -> backend_context + decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context type vc_encoding diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 125bb7bb..3e392d0b 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -26,7 +26,7 @@ module type Backend = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -53,7 +53,7 @@ module type BackendIO = sig val make_context : decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ Utils.Marked.pos) Var.Map.t -> + (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> backend_context type vc_encoding diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index 6c2b4bb0..fb89e9ec 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -27,7 +27,7 @@ type context = { ctx_decl : decl_ctx; (* The declaration context from the Catala program, containing information to precisely pretty print Catala expressions *) - ctx_var : (typed naked_expr, typ Marked.pos) Var.Map.t; + ctx_var : (typed naked_expr, typ) Var.Map.t; (* A map from Catala variables to their types, needed to create Z3 expressions of the right sort *) ctx_funcdecl : (typed naked_expr, FuncDecl.func_decl) Var.Map.t; @@ -129,7 +129,7 @@ let nb_days_to_date (nb : int) : string = (** [print_z3model_expr] pretty-prints the value [e] given by a Z3 model according to the Catala type [ty], corresponding to [e] **) -let rec print_z3model_expr (ctx : context) (ty : typ Marked.pos) (e : Expr.expr) +let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) : string = let print_lit (ty : typ_lit) = match ty with @@ -263,7 +263,7 @@ let translate_typ_lit (ctx : context) (t : typ_lit) : Sort.sort = | TDuration -> Arithmetic.Integer.mk_sort ctx.ctx_z3 (** [translate_typ] returns the Z3 sort correponding to the Catala type [t] **) -let rec translate_typ (ctx : context) (t : typ) : context * Sort.sort = +let rec translate_typ (ctx : context) (t : naked_typ) : context * Sort.sort = match t with | TLit t -> ctx, translate_typ_lit ctx t | TStruct name -> find_or_create_struct ctx name @@ -286,7 +286,7 @@ and find_or_create_enum (ctx : context) (enum : EnumName.t) : (* Creates a Z3 constructor corresponding to the Catala constructor [c] *) let create_constructor (ctx : context) - (c : EnumConstructor.t * typ Marked.pos) : + (c : EnumConstructor.t * typ) : context * Datatype.Constructor.constructor = let name, ty = c in let name = Marked.unmark (EnumConstructor.get_info name) in @@ -810,7 +810,7 @@ module Backend = struct let make_context (decl_ctx : decl_ctx) - (free_vars_typ : (typed naked_expr, typ Marked.pos) Var.Map.t) : backend_context + (free_vars_typ : (typed naked_expr, typ) Var.Map.t) : backend_context = let cfg = (if !Cli.disable_counterexamples then [] else ["model", "true"]) From 7e0d24efd237ff81affc9adbe24e007b694f29d8 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Thu, 25 Aug 2022 19:46:13 +0200 Subject: [PATCH 27/31] Make all supertypes use ('a, 't) gexpr as parameter instead of naked_gexpr --- compiler/dcalc/ast.ml | 2 +- compiler/dcalc/ast.mli | 2 +- compiler/dcalc/interpreter.ml | 12 ++-- compiler/dcalc/interpreter.mli | 4 +- compiler/dcalc/optimizations.ml | 8 +-- compiler/dcalc/typing.ml | 27 +++----- compiler/dcalc/typing.mli | 3 +- compiler/desugared/ast.ml | 5 +- compiler/desugared/ast.mli | 2 +- compiler/desugared/desugared_to_scope.ml | 12 ++-- compiler/lcalc/ast.ml | 2 +- compiler/lcalc/ast.mli | 8 +-- compiler/lcalc/closure_conversion.ml | 2 +- compiler/lcalc/compile_with_exceptions.ml | 13 ++-- compiler/lcalc/compile_without_exceptions.ml | 29 ++++---- compiler/lcalc/optimizations.ml | 3 +- compiler/lcalc/to_ocaml.ml | 16 ++--- compiler/lcalc/to_ocaml.mli | 9 +-- compiler/plugins/api_web.ml | 4 +- compiler/plugins/json_schema.ml | 5 +- compiler/scalc/ast.ml | 1 + compiler/scalc/compile_from_lambda.ml | 16 ++--- compiler/scalc/to_python.ml | 6 +- compiler/scopelang/print.ml | 13 ++-- compiler/scopelang/scope_to_dcalc.ml | 27 ++++---- compiler/shared_ast/definitions.ml | 66 +++++++++--------- compiler/shared_ast/expr.ml | 18 ++--- compiler/shared_ast/expr.mli | 72 ++++++++------------ compiler/shared_ast/print.ml | 30 ++++---- compiler/shared_ast/program.ml | 5 +- compiler/shared_ast/program.mli | 14 ++-- compiler/shared_ast/scope.ml | 10 ++- compiler/shared_ast/scope.mli | 41 +++++------ compiler/shared_ast/var.ml | 11 +-- compiler/shared_ast/var.mli | 9 +-- compiler/surface/ast.ml | 1 + compiler/surface/desugaring.ml | 9 +-- compiler/surface/name_resolution.ml | 10 ++- compiler/surface/name_resolution.mli | 4 +- compiler/verification/conditions.ml | 22 +++--- compiler/verification/conditions.mli | 4 +- compiler/verification/io.ml | 14 ++-- compiler/verification/io.mli | 16 ++--- compiler/verification/z3backend.real.ml | 32 ++++----- 44 files changed, 268 insertions(+), 351 deletions(-) diff --git a/compiler/dcalc/ast.ml b/compiler/dcalc/ast.ml index 010db5c3..89e74c32 100644 --- a/compiler/dcalc/ast.ml +++ b/compiler/dcalc/ast.ml @@ -22,4 +22,4 @@ type lit = dcalc glit type 'm naked_expr = (dcalc, 'm mark) naked_gexpr and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm naked_expr Shared_ast.program +type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/ast.mli b/compiler/dcalc/ast.mli index fa8c08fa..277d78e9 100644 --- a/compiler/dcalc/ast.mli +++ b/compiler/dcalc/ast.mli @@ -24,4 +24,4 @@ type lit = dcalc glit type 'm naked_expr = (dcalc, 'm mark) naked_gexpr and 'm expr = (dcalc, 'm mark) gexpr -type 'm program = 'm naked_expr Shared_ast.program +type 'm program = 'm expr Shared_ast.program diff --git a/compiler/dcalc/interpreter.ml b/compiler/dcalc/interpreter.ml index a116e878..da8a6363 100644 --- a/compiler/dcalc/interpreter.ml +++ b/compiler/dcalc/interpreter.ml @@ -36,7 +36,8 @@ let rec evaluate_operator (args : 'm Ast.expr list) : 'm Ast.naked_expr = (* Try to apply [div] and if a [Division_by_zero] exceptions is catched, use [op] to raise multispanned errors. *) - let apply_div_or_raise_err (div : unit -> 'm Ast.naked_expr) : 'm Ast.naked_expr = + let apply_div_or_raise_err (div : unit -> 'm Ast.naked_expr) : + 'm Ast.naked_expr = try div () with Division_by_zero -> Errors.raise_multispanned_error @@ -314,8 +315,7 @@ let rec evaluate_operator "Operator applied to the wrong arguments\n\ (should not happen if the term was well-typed)" -and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr - = +and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr = match Marked.unmark e with | EVar _ -> Errors.raise_spanned_error (Expr.pos e) @@ -481,10 +481,8 @@ and evaluate_expr (ctx : decl_ctx) (e : 'm Ast.expr) : 'm Ast.expr (** {1 API} *) let interpret_program : - 'm. - decl_ctx -> - 'm Ast.expr -> - (Uid.MarkedString.info * 'm Ast.expr) list = + 'm. decl_ctx -> 'm Ast.expr -> (Uid.MarkedString.info * 'm Ast.expr) list + = fun (ctx : decl_ctx) (e : 'm Ast.expr) : (Uid.MarkedString.info * 'm Ast.expr) list -> match evaluate_expr ctx e with diff --git a/compiler/dcalc/interpreter.mli b/compiler/dcalc/interpreter.mli index f5742813..f117c0b4 100644 --- a/compiler/dcalc/interpreter.mli +++ b/compiler/dcalc/interpreter.mli @@ -23,9 +23,7 @@ val evaluate_expr : decl_ctx -> 'm Ast.expr -> 'm Ast.expr (** Evaluates an expression according to the semantics of the default calculus. *) val interpret_program : - decl_ctx -> - 'm Ast.expr -> - (Uid.MarkedString.info * 'm Ast.expr) list + decl_ctx -> 'm Ast.expr -> (Uid.MarkedString.info * 'm Ast.expr) list (** Interprets a program. This function expects an expression typed as a function whose argument are all thunked. The function is executed by providing for each argument a thunked empty default. Returns a list of all diff --git a/compiler/dcalc/optimizations.ml b/compiler/dcalc/optimizations.ml index 50eaf2e7..fa49f3a8 100644 --- a/compiler/dcalc/optimizations.ml +++ b/compiler/dcalc/optimizations.ml @@ -19,7 +19,7 @@ open Shared_ast open Ast type partial_evaluation_ctx = { - var_values : (typed naked_expr, typed expr) Var.Map.t; + var_values : (typed expr, typed expr) Var.Map.t; decl_ctx : decl_ctx; } @@ -190,8 +190,8 @@ let optimize_expr (decl_ctx : decl_ctx) (e : 'm expr) = let rec scope_lets_map (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scope_body_expr : 'm naked_expr scope_body_expr) : - 'm naked_expr scope_body_expr Bindlib.box = + (scope_body_expr : 'm expr scope_body_expr) : + 'm expr scope_body_expr Bindlib.box = match scope_body_expr with | Result e -> Bindlib.box_apply (fun e' -> Result e') (t ctx e) | ScopeLet scope_let -> @@ -212,7 +212,7 @@ let rec scope_lets_map let rec scopes_map (t : 'a -> 'm expr -> 'm expr Bindlib.box) (ctx : 'a) - (scopes : 'm naked_expr scopes) : 'm naked_expr scopes Bindlib.box = + (scopes : 'm expr scopes) : 'm expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 794256df..1b3bec0f 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -33,8 +33,8 @@ module Any = () type unionfind_typ = naked_typ Marked.pos UnionFind.elem -(** We do not reuse {!type: Dcalc.Ast.naked_typ} because we have to include a new - [TAny] variant. Indeed, error terms can have any type and this has to be +(** We do not reuse {!type: Dcalc.Ast.naked_typ} because we have to include a + new [TAny] variant. Indeed, error terms can have any type and this has to be captured by the type sytem. *) and naked_typ = @@ -84,9 +84,7 @@ let rec format_typ (fmt : Format.formatter) (naked_typ : unionfind_typ) : unit = let format_typ = format_typ ctx in - let format_typ_with_parens - (fmt : Format.formatter) - (t : unionfind_typ) = + let format_typ_with_parens (fmt : Format.formatter) (t : unionfind_typ) = if typ_needs_parens t then Format.fprintf fmt "(%a)" format_typ t else Format.fprintf fmt "%a" format_typ t in @@ -109,11 +107,7 @@ let rec format_typ | TArray t1 -> Format.fprintf fmt "@[%a@ array@]" format_typ t1 | TAny d -> Format.fprintf fmt "any[%d]" (Any.hash d) -exception - Type_error of - A.any_marked_expr - * unionfind_typ - * unionfind_typ +exception Type_error of A.any_marked_expr * unionfind_typ * unionfind_typ type mark = { pos : Pos.t; uf : unionfind_typ } @@ -306,7 +300,7 @@ let box_ty e = Bindlib.unbox (Bindlib.box_apply ty e) (** Infers the most permissive type from an expression *) let rec typecheck_expr_bottom_up (ctx : A.decl_ctx) - (env : 'm Ast.naked_expr env) + (env : 'm Ast.expr env) (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = (* Cli.debug_format "Looking for type of %a" (Expr.format ~debug:true ctx) e; *) @@ -469,11 +463,11 @@ let rec typecheck_expr_bottom_up (** Checks whether the expression can be typed with the provided type *) and typecheck_expr_top_down (ctx : A.decl_ctx) - (env : 'm Ast.naked_expr env) + (env : 'm Ast.expr env) (tau : unionfind_typ) (e : 'm Ast.expr) : (A.dcalc, mark) A.gexpr Bindlib.box = - (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) tau - (Expr.format ctx) e; *) + (* Cli.debug_format "Propagating type %a for naked_expr %a" (format_typ ctx) + tau (Expr.format ctx) e; *) let pos_e = A.Expr.pos e in let mark e = Marked.mark { uf = tau; pos = pos_e } e in let unify_and_mark (e' : (A.dcalc, mark) A.naked_gexpr) tau' = @@ -667,10 +661,7 @@ let infer_type (type m) ctx (e : m Ast.expr) = | A.Untyped _ -> A.Expr.ty (Bindlib.unbox (infer_types ctx e)) (** Typechecks an expression given an expected type *) -let check_type - (ctx : A.decl_ctx) - (e : 'm Ast.expr) - (tau : A.typ) = +let check_type (ctx : A.decl_ctx) (e : 'm Ast.expr) (tau : A.typ) = (* todo: consider using the already inferred type if ['m] = [typed] *) ignore @@ wrap ctx (typecheck_expr_top_down ctx A.Var.Map.empty (ast_to_typ tau)) e diff --git a/compiler/dcalc/typing.mli b/compiler/dcalc/typing.mli index 362c4f29..401ecce4 100644 --- a/compiler/dcalc/typing.mli +++ b/compiler/dcalc/typing.mli @@ -19,8 +19,7 @@ open Shared_ast -val infer_types : - decl_ctx -> untyped Ast.expr -> typed Ast.expr Bindlib.box +val infer_types : decl_ctx -> untyped Ast.expr -> typed Ast.expr Bindlib.box (** Infers types everywhere on the given expression, and adds (or replaces) type annotations on each node *) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index e44b0365..83c323a1 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -114,7 +114,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * typ) option; + rule_parameter : (expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } @@ -167,8 +167,7 @@ let empty_rule (pos : Pos.t) (have_parameter : typ option) : rule = rule_label = Unlabeled; } -let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule - = +let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule = { rule_just = Bindlib.box (ELit (LBool true), pos); rule_cons = Bindlib.box (ELit (LBool false), pos); diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index 177074bf..d606688c 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -72,7 +72,7 @@ type rule = { rule_id : RuleName.t; rule_just : expr Bindlib.box; rule_cons : expr Bindlib.box; - rule_parameter : (naked_expr Var.t * typ) option; + rule_parameter : (expr Var.t * typ) option; rule_exception : exception_situation; rule_label : label_situation; } diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index ae845a68..6f8675c4 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -27,14 +27,13 @@ type target_scope_vars = type ctx = { scope_var_mapping : target_scope_vars ScopeVarMap.t; - var_mapping : (Ast.naked_expr, Scopelang.Ast.naked_expr Var.t) Var.Map.t; + var_mapping : (Ast.expr, Scopelang.Ast.expr Var.t) Var.Map.t; } let tag_with_log_entry (e : Scopelang.Ast.expr) (l : log_entry) - (markings : Utils.Uid.MarkedString.info list) : - Scopelang.Ast.expr = + (markings : Utils.Uid.MarkedString.info list) : Scopelang.Ast.expr = ( EApp ((EOp (Unop (Log (l, markings))), Marked.get_mark e), [e]), Marked.get_mark e ) @@ -186,7 +185,7 @@ let rec rule_tree_to_expr ~(toplevel : bool) (ctx : ctx) (def_pos : Pos.t) - (is_func : Ast.naked_expr Var.t option) + (is_func : Ast.expr Var.t option) (tree : rule_tree) : Scopelang.Ast.expr Bindlib.box = let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r @@ -194,9 +193,8 @@ let rec rule_tree_to_expr (* because each rule has its own variable parameter and we want to convert the whole rule tree into a function, we need to perform some alpha-renaming of all the expressions *) - let substitute_parameter - (e : Ast.expr Bindlib.box) - (rule : Ast.rule) : Ast.expr Bindlib.box = + let substitute_parameter (e : Ast.expr Bindlib.box) (rule : Ast.rule) : + Ast.expr Bindlib.box = match is_func, rule.Ast.rule_parameter with | Some new_param, Some (old_param, _) -> let binder = Bindlib.bind_var old_param e in diff --git a/compiler/lcalc/ast.ml b/compiler/lcalc/ast.ml index 056fb89c..722e0416 100644 --- a/compiler/lcalc/ast.ml +++ b/compiler/lcalc/ast.ml @@ -22,7 +22,7 @@ type lit = lcalc glit type 'm naked_expr = (lcalc, 'm mark) naked_gexpr and 'm expr = (lcalc, 'm mark) gexpr -type 'm program = 'm naked_expr Shared_ast.program +type 'm program = 'm expr Shared_ast.program let option_enum : EnumName.t = EnumName.fresh ("eoption", Pos.no_pos) let none_constr : EnumConstructor.t = EnumConstructor.fresh ("ENone", Pos.no_pos) diff --git a/compiler/lcalc/ast.mli b/compiler/lcalc/ast.mli index 5810ee9b..39385648 100644 --- a/compiler/lcalc/ast.mli +++ b/compiler/lcalc/ast.mli @@ -25,7 +25,7 @@ type lit = lcalc glit type 'm naked_expr = (lcalc, 'm mark) naked_gexpr and 'm expr = (lcalc, 'm mark) gexpr -type 'm program = 'm naked_expr Shared_ast.program +type 'm program = 'm expr Shared_ast.program (** {1 Language terms construction}*) @@ -44,7 +44,7 @@ val make_matchopt_with_abs_arms : val make_matchopt : 'm mark -> - 'm naked_expr Var.t -> + 'm expr Var.t -> typ -> 'm expr Bindlib.box -> 'm expr Bindlib.box -> @@ -55,5 +55,5 @@ val make_matchopt : (** {1 Special symbols} *) -val handle_default : untyped naked_expr Var.t -val handle_default_opt : untyped naked_expr Var.t +val handle_default : untyped expr Var.t +val handle_default_opt : untyped expr Var.t diff --git a/compiler/lcalc/closure_conversion.ml b/compiler/lcalc/closure_conversion.ml index f807964b..25127083 100644 --- a/compiler/lcalc/closure_conversion.ml +++ b/compiler/lcalc/closure_conversion.ml @@ -22,7 +22,7 @@ module D = Dcalc.Ast (** TODO: This version is not yet debugged and ought to be specialized when Lcalc has more structure. *) -type 'm ctx = { name_context : string; globally_bound_vars : 'm naked_expr Var.Set.t } +type 'm ctx = { name_context : string; globally_bound_vars : 'm expr Var.Set.t } (** Returns the expression with closed closures and the set of free variables inside this new expression. Implementation guided by diff --git a/compiler/lcalc/compile_with_exceptions.ml b/compiler/lcalc/compile_with_exceptions.ml index c67b00b1..68fbca43 100644 --- a/compiler/lcalc/compile_with_exceptions.ml +++ b/compiler/lcalc/compile_with_exceptions.ml @@ -19,7 +19,7 @@ open Shared_ast module D = Dcalc.Ast module A = Ast -type 'm ctx = ('m D.naked_expr, 'm A.naked_expr Var.t) Var.Map.t +type 'm ctx = ('m D.expr, 'm A.expr Var.t) Var.Map.t (** This environment contains a mapping between the variables in Dcalc and their correspondance in Lcalc. *) @@ -51,8 +51,7 @@ let rec translate_default in exceptions -and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : - 'm A.expr Bindlib.box = +and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : 'm A.expr Bindlib.box = match Marked.unmark e with | EVar v -> Expr.make_var (Var.Map.find v ctx, Marked.get_mark e) | ETuple (args, s) -> @@ -112,8 +111,8 @@ and translate_expr (ctx : 'm ctx) (e : 'm D.expr) : let rec translate_scope_lets (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scope_lets : 'm D.naked_expr scope_body_expr) : - 'm A.naked_expr scope_body_expr Bindlib.box = + (scope_lets : 'm D.expr scope_body_expr) : + 'm A.expr scope_body_expr Bindlib.box = match scope_lets with | Result e -> Bindlib.box_apply (fun e -> Result e) (translate_expr ctx e) | ScopeLet scope_let -> @@ -140,7 +139,7 @@ let rec translate_scope_lets let rec translate_scopes (decl_ctx : decl_ctx) (ctx : 'm ctx) - (scopes : 'm D.naked_expr scopes) : 'm A.naked_expr scopes Bindlib.box = + (scopes : 'm D.expr scopes) : 'm A.expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef scope_def -> @@ -159,7 +158,7 @@ let rec translate_scopes let new_scope_body_expr = Bindlib.bind_var new_scope_input_var new_scope_body_expr in - let new_scope : 'm A.naked_expr scope_body Bindlib.box = + let new_scope : 'm A.expr scope_body Bindlib.box = Bindlib.box_apply (fun new_scope_body_expr -> { diff --git a/compiler/lcalc/compile_without_exceptions.ml b/compiler/lcalc/compile_without_exceptions.ml index 7eadc50c..7b52d582 100644 --- a/compiler/lcalc/compile_without_exceptions.ml +++ b/compiler/lcalc/compile_without_exceptions.ml @@ -42,12 +42,13 @@ module A = Ast open Shared_ast -type 'm hoists = ('m A.naked_expr, 'm D.expr) Var.Map.t -(** Hoists definition. It represent bindings between [A.Var.t] and [D.naked_expr]. *) +type 'm hoists = ('m A.expr, 'm D.expr) Var.Map.t +(** Hoists definition. It represent bindings between [A.Var.t] and + [D.naked_expr]. *) type 'm info = { naked_expr : 'm A.expr Bindlib.box; - var : 'm A.naked_expr Bindlib.var; + var : 'm A.expr Var.t; is_pure : bool; } (** Information about each encontered Dcalc variable is stored inside a context @@ -61,14 +62,14 @@ let pp_info (fmt : Format.formatter) (info : 'm info) = type 'm ctx = { decl_ctx : decl_ctx; - vars : ('m D.naked_expr, 'm info) Var.Map.t; + vars : ('m D.expr, 'm info) Var.Map.t; (** information context about variables in the current scope *) } let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = let pp_binding (fmt : Format.formatter) - ((v, info) : 'm D.naked_expr Var.t * 'm info) = + ((v, info) : 'm D.expr Var.t * 'm info) = Format.fprintf fmt "%a: %a" Print.var v pp_info info in @@ -82,7 +83,7 @@ let _pp_ctx (fmt : Format.formatter) (ctx : 'm ctx) = (** [find ~info n ctx] is a warpper to ocaml's Map.find that handle errors in a slightly better way. *) -let find ?(info : string = "none") (n : 'm D.naked_expr Var.t) (ctx : 'm ctx) : +let find ?(info : string = "none") (n : 'm D.expr Var.t) (ctx : 'm ctx) : 'm info = (* let _ = Format.asprintf "Searching for variable %a inside context %a" Print.var n pp_ctx ctx |> Cli.debug_print in *) @@ -99,7 +100,7 @@ let find ?(info : string = "none") (n : 'm D.naked_expr Var.t) (ctx : 'm ctx) : debuging purposes as it printing each of the Dcalc/Lcalc variable pairs. *) let add_var (mark : 'm mark) - (var : 'm D.naked_expr Var.t) + (var : 'm D.expr Var.t) (is_pure : bool) (ctx : 'm ctx) : 'm ctx = let new_var = Var.make (Bindlib.name_of var) in @@ -288,8 +289,8 @@ let rec translate_and_hoist (ctx : 'm ctx) (e : 'm D.expr) : Expr.earray es' pos, disjoint_union_maps (Expr.pos e) hoists | EOp op -> Bindlib.box (EOp op, pos), Var.Map.empty -and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) - : 'm A.expr Bindlib.box = +and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) : + 'm A.expr Bindlib.box = let e', hoists = translate_and_hoist ctx e in let hoists = Var.Map.bindings hoists in @@ -356,8 +357,8 @@ and translate_expr ?(append_esome = true) (ctx : 'm ctx) (e : 'm D.expr) (TAny, Expr.mark_pos mark_hoist) c' (A.make_none mark_hoist) acc) -let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_expr) : - 'm A.naked_expr scope_body_expr Bindlib.box = +let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.expr scope_body_expr) : + 'm A.expr scope_body_expr Bindlib.box = match lets with | Result e -> Bindlib.box_apply @@ -478,7 +479,7 @@ let rec translate_scope_let (ctx : 'm ctx) (lets : 'm D.naked_expr scope_body_ex let translate_scope_body (scope_pos : Pos.t) (ctx : 'm ctx) - (body : 'm D.naked_expr scope_body) : 'm A.naked_expr scope_body Bindlib.box = + (body : 'm D.expr scope_body) : 'm A.expr scope_body Bindlib.box = match body with | { scope_body_expr = result; @@ -504,8 +505,8 @@ let translate_scope_body }) (Bindlib.bind_var v' (translate_scope_let ctx' lets)) -let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.naked_expr scopes) : - 'm A.naked_expr scopes Bindlib.box = +let rec translate_scopes (ctx : 'm ctx) (scopes : 'm D.expr scopes) : + 'm A.expr scopes Bindlib.box = match scopes with | Nil -> Bindlib.box Nil | ScopeDef { scope_name; scope_body; scope_next } -> diff --git a/compiler/lcalc/optimizations.ml b/compiler/lcalc/optimizations.ml index 1d737c8a..99178f6d 100644 --- a/compiler/lcalc/optimizations.ml +++ b/compiler/lcalc/optimizations.ml @@ -116,8 +116,7 @@ let _beta_optimizations (p : 'm program) : 'm program = in { p with scopes = Bindlib.unbox new_scopes } -let rec peephole_expr (_ : unit) (e : 'm expr) : - 'm expr Bindlib.box = +let rec peephole_expr (_ : unit) (e : 'm expr) : 'm expr Bindlib.box = let default_mark e' = Marked.mark (Marked.get_mark e) e' in match Marked.unmark e with diff --git a/compiler/lcalc/to_ocaml.ml b/compiler/lcalc/to_ocaml.ml index dbd18151..d7ba239d 100644 --- a/compiler/lcalc/to_ocaml.ml +++ b/compiler/lcalc/to_ocaml.ml @@ -183,8 +183,7 @@ let format_enum_cons_name (fmt : Format.formatter) (v : EnumConstructor.t) : (avoid_keywords (to_ascii (Format.asprintf "%a" EnumConstructor.format_t v))) -let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit - = +let rec typ_embedding_name (fmt : Format.formatter) (ty : typ) : unit = match Marked.unmark ty with | TLit TUnit -> Format.fprintf fmt "embed_unit" | TLit TBool -> Format.fprintf fmt "embed_bool" @@ -271,10 +270,8 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) -let rec format_expr - (ctx : decl_ctx) - (fmt : Format.formatter) - (e : 'm expr) : unit = +let rec format_expr (ctx : decl_ctx) (fmt : Format.formatter) (e : 'm expr) : + unit = let format_expr = format_expr ctx in let format_with_parens (fmt : Format.formatter) (e : 'm expr) = if needs_parens e then Format.fprintf fmt "(%a)" format_expr e @@ -472,8 +469,7 @@ let format_struct_embedding let format_enum_embedding (fmt : Format.formatter) - ((enum_name, enum_cases) : - EnumName.t * (EnumConstructor.t * typ) list) = + ((enum_name, enum_cases) : EnumName.t * (EnumConstructor.t * typ) list) = if List.length enum_cases = 0 then Format.fprintf fmt "let embed_%a (_: %a.t) : runtime_value = Unit@\n@\n" format_to_module_name (`Ename enum_name) format_enum_name enum_name @@ -556,7 +552,7 @@ let format_ctx let rec format_scope_body_expr (ctx : decl_ctx) (fmt : Format.formatter) - (scope_lets : 'm Ast.naked_expr scope_body_expr) : unit = + (scope_lets : 'm Ast.expr scope_body_expr) : unit = match scope_lets with | Result e -> format_expr ctx fmt e | ScopeLet scope_let -> @@ -572,7 +568,7 @@ let rec format_scope_body_expr let rec format_scopes (ctx : decl_ctx) (fmt : Format.formatter) - (scopes : 'm Ast.naked_expr scopes) : unit = + (scopes : 'm Ast.expr scopes) : unit = match scopes with | Nil -> () | ScopeDef scope_def -> diff --git a/compiler/lcalc/to_ocaml.mli b/compiler/lcalc/to_ocaml.mli index a9d46711..04e7bcf1 100644 --- a/compiler/lcalc/to_ocaml.mli +++ b/compiler/lcalc/to_ocaml.mli @@ -21,13 +21,8 @@ open Ast (** Formats a lambda calculus program into a valid OCaml program *) val avoid_keywords : string -> string - -val find_struct : - StructName.t -> decl_ctx -> (StructFieldName.t * typ) list - -val find_enum : - EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list - +val find_struct : StructName.t -> decl_ctx -> (StructFieldName.t * typ) list +val find_enum : EnumName.t -> decl_ctx -> (EnumConstructor.t * typ) list val typ_needs_parens : typ -> bool val needs_parens : 'm expr -> bool val format_enum_name : Format.formatter -> EnumName.t -> unit diff --git a/compiler/plugins/api_web.ml b/compiler/plugins/api_web.ml index a615637c..f0517567 100644 --- a/compiler/plugins/api_web.ml +++ b/compiler/plugins/api_web.ml @@ -328,10 +328,10 @@ module To_jsoo = struct Format.fprintf fmt "%a@\n" format_enum_decl (e, find_enum e ctx)) (type_ordering @ scope_structs) - let fmt_input_struct_name fmt (scope_def : 'a naked_expr scope_def) = + let fmt_input_struct_name fmt (scope_def : 'a expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_input_struct - let fmt_output_struct_name fmt (scope_def : 'a naked_expr scope_def) = + let fmt_output_struct_name fmt (scope_def : 'a expr scope_def) = format_struct_name fmt scope_def.scope_body.scope_body_output_struct let rec format_scopes_to_fun diff --git a/compiler/plugins/json_schema.ml b/compiler/plugins/json_schema.ml index f933360d..409e0e62 100644 --- a/compiler/plugins/json_schema.ml +++ b/compiler/plugins/json_schema.ml @@ -49,7 +49,7 @@ module To_json = struct Format.fprintf fmt "%s" s let rec find_scope_def (target_name : string) : - 'm naked_expr scopes -> 'm naked_expr scope_def option = function + 'm expr scopes -> 'm expr scope_def option = function | Nil -> None | ScopeDef scope_def -> let name = Format.asprintf "%a" ScopeName.format_t scope_def.scope_name in @@ -111,8 +111,7 @@ module To_json = struct in let rec collect_required_type_defs_from_scope_input (input_struct : StructName.t) : typ list = - let rec collect (acc : typ list) (t : typ) : typ list - = + let rec collect (acc : typ list) (t : typ) : typ list = match Marked.unmark t with | TStruct s -> (* Scope's input is a struct. *) diff --git a/compiler/scalc/ast.ml b/compiler/scalc/ast.ml index bc4a4cb3..cb8b79bd 100644 --- a/compiler/scalc/ast.ml +++ b/compiler/scalc/ast.ml @@ -26,6 +26,7 @@ let handle_default = TopLevelName.fresh ("handle_default", Pos.no_pos) let handle_default_opt = TopLevelName.fresh ("handle_default_opt", Pos.no_pos) type expr = naked_expr Marked.pos + and naked_expr = | EVar of LocalName.t | EFunc of TopLevelName.t diff --git a/compiler/scalc/compile_from_lambda.ml b/compiler/scalc/compile_from_lambda.ml index f7263f21..0e8db1d5 100644 --- a/compiler/scalc/compile_from_lambda.ml +++ b/compiler/scalc/compile_from_lambda.ml @@ -21,17 +21,16 @@ module L = Lcalc.Ast module D = Dcalc.Ast type 'm ctxt = { - func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t; + func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t; decl_ctx : decl_ctx; - var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t; + var_dict : ('m L.expr, A.LocalName.t) Var.Map.t; inside_definition_of : A.LocalName.t option; context_name : string; } (* Expressions can spill out side effect, hence this function also returns a list of statements to be prepended before the expression is evaluated *) -let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : - A.block * A.expr = +let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : A.block * A.expr = match Marked.unmark expr with | EVar v -> let local_var = @@ -115,8 +114,7 @@ let rec translate_expr (ctxt : 'm ctxt) (expr : 'm L.expr) : :: tmp_stmts, (A.EVar tmp_var, Expr.pos expr) ) -and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : - A.block = +and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : A.block = match Marked.unmark block_expr with | EAssert e -> (* Assertions are always encapsulated in a unit-typed let binding *) @@ -273,9 +271,9 @@ and translate_statements (ctxt : 'm ctxt) (block_expr : 'm L.expr) : let rec translate_scope_body_expr (scope_name : ScopeName.t) (decl_ctx : decl_ctx) - (var_dict : ('m L.naked_expr, A.LocalName.t) Var.Map.t) - (func_dict : ('m L.naked_expr, A.TopLevelName.t) Var.Map.t) - (scope_expr : 'm L.naked_expr scope_body_expr) : A.block = + (var_dict : ('m L.expr, A.LocalName.t) Var.Map.t) + (func_dict : ('m L.expr, A.TopLevelName.t) Var.Map.t) + (scope_expr : 'm L.expr scope_body_expr) : A.block = match scope_expr with | Result e -> let block, new_e = diff --git a/compiler/scalc/to_python.ml b/compiler/scalc/to_python.ml index 03adca34..2fa60715 100644 --- a/compiler/scalc/to_python.ml +++ b/compiler/scalc/to_python.ml @@ -259,10 +259,8 @@ let format_exception (fmt : Format.formatter) (exc : except Marked.pos) : unit = (Pos.get_end_line pos) (Pos.get_end_column pos) format_string_list (Pos.get_law_info pos) -let rec format_expression - (ctx : decl_ctx) - (fmt : Format.formatter) - (e : expr) : unit = +let rec format_expression (ctx : decl_ctx) (fmt : Format.formatter) (e : expr) : + unit = match Marked.unmark e with | EVar v -> format_var fmt v | EFunc f -> format_toplevel_name fmt f diff --git a/compiler/scopelang/print.ml b/compiler/scopelang/print.ml index 42330c22..2d791364 100644 --- a/compiler/scopelang/print.ml +++ b/compiler/scopelang/print.ml @@ -21,8 +21,7 @@ open Ast let struc ctx (fmt : Format.formatter) - ((name, fields) : StructName.t * (StructFieldName.t * typ) list) - : unit = + ((name, fields) : StructName.t * (StructFieldName.t * typ) list) : unit = Format.fprintf fmt "%a %a %a %a@\n@[ %a@]@\n%a" Print.keyword "type" StructName.format_t name Print.punctuation "=" Print.punctuation "{" (Format.pp_print_list @@ -35,8 +34,7 @@ let struc let enum ctx (fmt : Format.formatter) - ((name, cases) : EnumName.t * (EnumConstructor.t * typ) list) : - unit = + ((name, cases) : EnumName.t * (EnumConstructor.t * typ) list) : unit = Format.fprintf fmt "%a %a %a @\n@[ %a@]" Print.keyword "type" EnumName.format_t name Print.punctuation "=" (Format.pp_print_list @@ -85,12 +83,15 @@ let scope ?(debug = false) ctx fmt (name, decl) = with | Reentrant -> Format.fprintf fmt "%a@ %a" Print.operator - "reentrant or by default" (Print.naked_expr ~debug ctx) e + "reentrant or by default" + (Print.naked_expr ~debug ctx) + e | _ -> Format.fprintf fmt "%a" (Print.naked_expr ~debug ctx) e)) e | Assertion e -> Format.fprintf fmt "%a %a" Print.keyword "assert" - (Print.naked_expr ~debug ctx) e + (Print.naked_expr ~debug ctx) + e | Call (scope_name, subscope_name) -> Format.fprintf fmt "%a %a%a%a%a" Print.keyword "call" ScopeName.format_t scope_name Print.punctuation "[" diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index 8b336900..cf03d2d2 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -25,9 +25,9 @@ type scope_var_ctx = { type scope_sig_ctx = { scope_sig_local_vars : scope_var_ctx list; (** List of scope variables *) - scope_sig_scope_var : untyped Dcalc.Ast.naked_expr Var.t; + scope_sig_scope_var : untyped Dcalc.Ast.expr Var.t; (** Var representing the scope *) - scope_sig_input_var : untyped Dcalc.Ast.naked_expr Var.t; + scope_sig_input_var : untyped Dcalc.Ast.expr Var.t; (** Var representing the scope input inside the scope func *) scope_sig_input_struct : StructName.t; (** Scope input *) scope_sig_output_struct : StructName.t; (** Scope output *) @@ -40,11 +40,12 @@ type ctx = { enums : enum_ctx; scope_name : ScopeName.t; scopes_parameters : scope_sigs_ctx; - scope_vars : (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; + scope_vars : + (untyped Dcalc.Ast.expr Var.t * naked_typ * Ast.io) ScopeVarMap.t; subscope_vars : - (untyped Dcalc.Ast.naked_expr Var.t * naked_typ * Ast.io) ScopeVarMap.t + (untyped Dcalc.Ast.expr Var.t * naked_typ * Ast.io) ScopeVarMap.t Ast.SubScopeMap.t; - local_vars : (Ast.naked_expr, untyped Dcalc.Ast.naked_expr Var.t) Var.Map.t; + local_vars : (Ast.expr, untyped Dcalc.Ast.expr Var.t) Var.Map.t; } let empty_ctx @@ -101,8 +102,7 @@ let tag_with_log_entry NOTE: the choice of the exception that will be triggered and show in the trace is arbitrary (but deterministic). *) -let collapse_similar_outcomes (excepts : Ast.expr list) : - Ast.expr list = +let collapse_similar_outcomes (excepts : Ast.expr list) : Ast.expr list = let cons_map = List.fold_left (fun map -> function @@ -135,8 +135,7 @@ let collapse_similar_outcomes (excepts : Ast.expr list) : let rec translate_expr (ctx : ctx) (e : Ast.expr) : untyped Dcalc.Ast.expr Bindlib.box = - Bindlib.box_apply (fun (x : untyped Dcalc.Ast.naked_expr) -> - Marked.mark (pos_mark_as e) x) + Bindlib.box_apply (fun x -> Marked.mark (pos_mark_as e) x) @@ match Marked.unmark e with | EVar v -> Bindlib.box_var (Var.Map.find v ctx.local_vars) @@ -357,8 +356,8 @@ let translate_rule (ctx : ctx) (rule : Ast.rule) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) : - (untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box -> - untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box) + (untyped Dcalc.Ast.expr scope_body_expr Bindlib.box -> + untyped Dcalc.Ast.expr scope_body_expr Bindlib.box) * ctx = match rule with | Definition ((ScopelangScopeVar a, var_def_pos), tau, a_io, e) -> @@ -636,7 +635,7 @@ let translate_rules (rules : Ast.rule list) ((sigma_name, pos_sigma) : Utils.Uid.MarkedString.info) (sigma_return_struct_name : StructName.t) : - untyped Dcalc.Ast.naked_expr scope_body_expr Bindlib.box * ctx = + untyped Dcalc.Ast.expr scope_body_expr Bindlib.box * ctx = let scope_lets, new_ctx = List.fold_left (fun (scope_lets, ctx) rule -> @@ -673,7 +672,7 @@ let translate_scope_decl (sctx : scope_sigs_ctx) (scope_name : ScopeName.t) (sigma : Ast.scope_decl) : - untyped Dcalc.Ast.naked_expr scope_body Bindlib.box * struct_ctx = + untyped Dcalc.Ast.expr scope_body Bindlib.box * struct_ctx = let sigma_info = ScopeName.get_info sigma.scope_decl_name in let scope_sig = Ast.ScopeMap.find sigma.scope_decl_name sctx in let scope_variables = scope_sig.scope_sig_local_vars in @@ -850,7 +849,7 @@ let translate_program (prgm : Ast.program) : in (* the resulting expression is the list of definitions of all the scopes, ending with the top-level scope. *) - let (scopes, decl_ctx) : untyped Dcalc.Ast.naked_expr scopes Bindlib.box * _ = + let (scopes, decl_ctx) : untyped Dcalc.Ast.expr scopes Bindlib.box * _ = List.fold_right (fun scope_name (scopes, decl_ctx) -> let scope = Ast.ScopeMap.find scope_name prgm.program_scopes in diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index b13ef68c..fecff430 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -178,7 +178,8 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t (** General expressions: groups all expression cases of the different ASTs, and uses a GADT to eliminate irrelevant cases for each one. The ['t] annotations are also totally unconstrained at this point. The dcalc exprs, for example, - are then defined with [type naked_expr = dcalc naked_gexpr] plus the annotations. + are then defined with [type naked_expr = dcalc naked_gexpr] plus the + annotations. A few tips on using this GADT: @@ -187,14 +188,10 @@ type ('a, 't) gexpr = (('a, 't) naked_gexpr, 't) Marked.t - For recursive functions, you may need to additionally explicit the generalisation of the variable: [let rec f: type a . a naked_gexpr -> ...] *) -(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} - library, based on higher-order abstract syntax *) and ('a, 't) naked_gexpr = (* Constructors common to all ASTs *) | ELit : 'a glit -> ('a any, 't) naked_gexpr - | EApp : - ('a, 't) gexpr * ('a, 't) gexpr list - -> ('a any, 't) naked_gexpr + | EApp : ('a, 't) gexpr * ('a, 't) gexpr list -> ('a any, 't) naked_gexpr | EOp : operator -> ('a any, 't) naked_gexpr | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr (* All but statement calculus *) @@ -208,7 +205,9 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr (* Early stages *) - | ELocation : 'a glocation -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr + | ELocation : + 'a glocation + -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EStruct : StructName.t * ('a, 't) gexpr StructFieldMap.t -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr @@ -219,9 +218,7 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr | EMatchS : - ('a, 't) gexpr - * EnumName.t - * ('a, 't) gexpr EnumConstructorMap.t + ('a, 't) gexpr * EnumName.t * ('a, 't) gexpr EnumConstructorMap.t -> (([< desugared | scopelang ] as 'a), 't) naked_gexpr (* Lambda-like *) | ETuple : @@ -250,6 +247,13 @@ and ('a, 't) naked_gexpr = ('a, 't) gexpr * except * ('a, 't) gexpr -> ((lcalc as 'a), 't) naked_gexpr +type 'a box = 'a Bindlib.box + +type ('e, 'b) binder = (('a, 't) naked_gexpr, 'b) Bindlib.binder + constraint 'e = ('a, 't) gexpr +(** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} + library, based on higher-order abstract syntax *) + (* (\* Statement calculus *\) * | ESVar: LocalName.t -> (scalc as 'a, 't) naked_gexpr * | ESStruct: ('a, 't) gexpr list * StructName.t -> (scalc as 'a, 't) naked_gexpr @@ -257,7 +261,7 @@ and ('a, 't) naked_gexpr = * | ESInj: ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) naked_gexpr * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) naked_gexpr *) -type 'e anyexpr = 'e constraint 'e = (_ any, _) naked_gexpr +type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr (** Shorter alias for functions taking any kind of expression *) (** {2 Markings} *) @@ -268,27 +272,21 @@ type typed = { pos : Pos.t; ty : typ } (** The generic type of AST markings. Using a GADT allows functions to be polymorphic in the marking, but still do transformations on types when appropriate. Expected to fill the ['t] parameter of [naked_gexpr] and - [gexpr] (a ['t] annotation different from this type is used in the - middle of the typing processing, but all visible ASTs should otherwise use - this. *) + [gexpr] (a ['t] annotation different from this type is used in the middle of + the typing processing, but all visible ASTs should otherwise use this. *) type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark -type 'e marked = ('e, 'm mark) Marked.t constraint 'e = ('a, 'm mark) naked_gexpr -(** [('a, 't) naked_gexpr marked] is equivalent to [('a, 'm mark) gexpr] but - often more convenient to write since we generally use the type of - expressions ['e = (_, _ mark) naked_gexpr] as type parameter. *) - (** Useful for errors and printing, for example *) -type any_marked_expr = - | AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr +type any_marked_expr = AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr (** {2 Higher-level program structure} *) (** Constructs scopes and programs on top of expressions. The ['e] type - parameter throughout is expected to match instances of the [naked_gexpr] type - defined above. Markings are constrained to the [mark] GADT defined above. - Note that this structure is at the moment only relevant for [dcalc] and - [lcalc], as [scopelang] has its own scope structure, as the name implies. *) + parameter throughout is expected to match instances of the [naked_gexpr] + type defined above. Markings are constrained to the [mark] GADT defined + above. Note that this structure is at the moment only relevant for [dcalc] + and [lcalc], as [scopelang] has its own scope structure, as the name + implies. *) (** This kind annotation signals that the let-binding respects a structural invariant. These invariants concern the shape of the expression in the @@ -306,11 +304,11 @@ type scope_let_kind = type 'e scope_let = { scope_let_kind : scope_let_kind; scope_let_typ : typ; - scope_let_expr : 'e marked; - scope_let_next : ('e, 'e scope_body_expr) Bindlib.binder; + scope_let_expr : 'e; + scope_let_next : ('e, 'e scope_body_expr) binder; scope_let_pos : Pos.t; } - constraint 'e = ('a, 'm mark) naked_gexpr + constraint 'e = ('a, 'm mark) gexpr (** This type is parametrized by the expression type so it can be reused in later intermediate representations. *) @@ -318,15 +316,16 @@ type 'e scope_let = { let-binding expression, plus an annotation for the kind of the let-binding that comes from the compilation of a {!module: Scopelang.Ast} statement. *) and 'e scope_body_expr = - | Result of 'e marked + | Result of 'e | ScopeLet of 'e scope_let - constraint 'e = ('a, 'm mark) naked_gexpr + constraint 'e = (_, _ mark) gexpr type 'e scope_body = { scope_body_input_struct : StructName.t; scope_body_output_struct : StructName.t; - scope_body_expr : ('e, 'e scope_body_expr) Bindlib.binder; + scope_body_expr : ('e, 'e scope_body_expr) binder; } + constraint 'e = (_, _ mark) gexpr (** Instead of being a single expression, we give a little more ad-hoc structure to the scope body by decomposing it in an ordered list of let-bindings, and a result expression that uses the let-binded variables. The first binder is @@ -335,15 +334,16 @@ type 'e scope_body = { type 'e scope_def = { scope_name : ScopeName.t; scope_body : 'e scope_body; - scope_next : ('e, 'e scopes) Bindlib.binder; + scope_next : ('e, 'e scopes) binder; } + constraint 'e = (_, _ mark) gexpr (** Finally, we do the same transformation for the whole program for the kinded lets. This permit us to use bindlib variables for scopes names. *) and 'e scopes = | Nil | ScopeDef of 'e scope_def - constraint 'e = ('a, 'm mark) naked_gexpr + constraint 'e = (_, _ mark) gexpr type struct_ctx = (StructFieldName.t * typ) list StructMap.t type enum_ctx = (EnumConstructor.t * typ) list EnumMap.t diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 4c23888c..5d4d694c 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -18,8 +18,6 @@ open Utils open Definitions -type 'a box = 'a Bindlib.box - (** Functions handling the types of [shared_ast] *) (* Basic block constructors *) @@ -108,11 +106,8 @@ let with_ty (type m) (ty : typ) (x : ('a, m mark) Marked.t) : | Typed m -> Typed { m with ty }) (Marked.unmark x) -let map_mark - (type m) - (pos_f : Pos.t -> Pos.t) - (ty_f : typ -> typ) - (m : m mark) : m mark = +let map_mark (type m) (pos_f : Pos.t -> Pos.t) (ty_f : typ -> typ) (m : m mark) + : m mark = match m with | Untyped { pos } -> Untyped { pos = pos_f pos } | Typed { pos; ty } -> Typed { pos = pos_f pos; ty = ty_f ty } @@ -283,7 +278,7 @@ let make_default exceptions just cons mark = (* Tests *) -let is_value (type a) (e : (a, 'm mark) naked_gexpr marked) = +let is_value (type a) (e : (a, _) gexpr) = match Marked.unmark e with | ELit _ | EAbs _ | EOp _ | ERaise _ -> true | _ -> false @@ -532,8 +527,7 @@ let compare_except ex1 ex2 = Stdlib.compare ex1 ex2 (* weird indentation; see https://github.com/ocaml-ppx/ocamlformat/issues/2143 *) -let rec equal_list : - 'a. ('a, 't) gexpr list -> ('a, 't) gexpr list -> bool = +let rec equal_list : 'a. ('a, 't) gexpr list -> ('a, 't) gexpr list -> bool = fun es1 es2 -> try List.for_all2 equal es1 es2 with Invalid_argument _ -> false @@ -683,7 +677,7 @@ let rec compare : type a. (a, _) gexpr -> (a, _) gexpr -> int = | ERaise _, _ -> -1 | _, ERaise _ -> 1 | ECatch _, _ -> . | _, ECatch _ -> . -let rec free_vars : type a. (a, 't) naked_gexpr marked -> (a, 't) naked_gexpr Var.Set.t = +let rec free_vars : type a. (a, 't) gexpr -> (a, 't) gexpr Var.Set.t = fun e -> match Marked.unmark e with | EOp _ | ELit _ | ERaise _ -> Var.Set.empty @@ -733,7 +727,7 @@ let remove_logging_calls e = let format ?debug decl_ctx ppf e = Print.naked_expr ?debug decl_ctx ppf e -let rec size : type a. (a, 't) naked_gexpr marked -> int = +let rec size : type a. (a, 't) gexpr -> int = fun e -> match Marked.unmark e with | EVar _ | ELit _ | EOp _ -> 1 diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index f2a77758..0fd7eaa4 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -20,12 +20,10 @@ open Utils open Definitions -type 'a box = 'a Bindlib.box - (** {2 Boxed constructors} *) val box : ('a, 't) gexpr -> ('a, 't) gexpr box -val evar : ('a, 't) naked_gexpr Bindlib.var -> 't -> ('a, 't) gexpr box +val evar : ('a, 't) gexpr Var.t -> 't -> ('a, 't) gexpr box val etuple : (([< dcalc | lcalc ] as 'a), 't) gexpr box list -> @@ -56,11 +54,7 @@ val ematch : 't -> ('a, 't) gexpr box -val earray : - ('a any, 't) gexpr box list -> - 't -> - ('a, 't) gexpr box - +val earray : ('a any, 't) gexpr box list -> 't -> ('a, 't) gexpr box val elit : 'a any glit -> 't -> ('a, 't) gexpr box val eabs : @@ -70,15 +64,10 @@ val eabs : ('a, 't) gexpr box val eapp : - ('a any, 't) gexpr box -> - ('a, 't) gexpr box list -> - 't -> - ('a, 't) gexpr box + ('a any, 't) gexpr box -> ('a, 't) gexpr box list -> 't -> ('a, 't) gexpr box val eassert : - (([< dcalc | lcalc ] as 'a), 't) gexpr box -> - 't -> - ('a, 't) gexpr box + (([< dcalc | lcalc ] as 'a), 't) gexpr box -> 't -> ('a, 't) gexpr box val eop : operator -> 't -> (_ any, 't) gexpr box @@ -114,12 +103,10 @@ val eraise : except -> 't -> (lcalc, 't) gexpr box val no_mark : 'm mark -> 'm mark val mark_pos : 'm mark -> Pos.t -val pos : ('e, _) naked_gexpr marked -> Pos.t +val pos : ('e, _ mark) gexpr -> Pos.t val ty : (_, typed mark) Marked.t -> typ val with_ty : typ -> ('a, _ mark) Marked.t -> ('a, typed mark) Marked.t - -val map_mark : - (Pos.t -> Pos.t) -> (typ -> typ) -> 'm mark -> 'm mark +val map_mark : (Pos.t -> Pos.t) -> (typ -> typ) -> 'm mark -> 'm mark val map_mark2 : (Pos.t -> Pos.t -> Pos.t) -> @@ -131,8 +118,7 @@ val map_mark2 : val fold_marks : (Pos.t list -> Pos.t) -> (typed list -> typ) -> 'm mark list -> 'm mark -val untype : - ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box +val untype : ('a, 'm mark) gexpr -> ('a, untyped mark) gexpr box (** {2 Traversal functions} *) @@ -168,39 +154,38 @@ val map_top_down : returned by [f] is hybrid since the mark at top-level has been rewritten, but not yet the marks in the subtrees. *) -val map_marks : - f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr box +val map_marks : f:('t1 -> 't2) -> ('a, 't1) gexpr -> ('a, 't2) gexpr box (** {2 Expression building helpers} *) -val make_var : 'a Bindlib.var * 'b -> ('a * 'b) box +val make_var : ('a, 't) gexpr Var.t * 'b -> (('a, 't) naked_gexpr * 'b) box val make_abs : - ('a, 't) naked_gexpr Var.vars -> + ('a, 't) gexpr Var.vars -> ('a, 't) gexpr box -> typ list -> 't -> ('a, 't) gexpr box val make_app : - ((_ any, 'm mark) naked_gexpr as 'e) marked box -> - 'e marked box list -> + ('a any, 'm mark) gexpr box -> + ('a, 'm mark) gexpr box list -> 'm mark -> - 'e marked box + ('a, 'm mark) gexpr box val empty_thunked_term : - 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) naked_gexpr marked + 'm mark -> ([< dcalc | desugared | scopelang ], 'm mark) gexpr val make_let_in : - 'e Bindlib.var -> + ('a, 'm mark) gexpr Var.t -> typ -> - 'e anyexpr marked box -> - 'e marked box -> + ('a, 'm mark) gexpr box -> + ('a, 'm mark) gexpr box -> Utils.Pos.t -> - 'e marked box + ('a, 'm mark) gexpr box val make_let_in_raw : - ('a any, 't) naked_gexpr Bindlib.var -> + ('a, 't) gexpr Var.t -> typ -> ('a, 't) gexpr box -> ('a, 't) gexpr box -> @@ -209,12 +194,12 @@ val make_let_in_raw : (** Version with any mark; to be removed once we use the [mark] type everywhere. *) val make_multiple_let_in : - 'e Var.vars -> + ('a, 'm mark) gexpr Var.vars -> typ list -> - 'e marked box list -> - 'e marked box -> + ('a, 'm mark) gexpr box list -> + ('a, 'm mark) gexpr box -> Pos.t -> - 'e marked box + ('a, 'm mark) gexpr box val make_default : (([< desugared | scopelang | dcalc ] as 'a), 't) gexpr list -> @@ -237,8 +222,7 @@ val make_default : (** {2 Transformations} *) -val remove_logging_calls : - ((_ any, 't) naked_gexpr as 'e) marked -> 'e marked box +val remove_logging_calls : ('a any, 't) gexpr -> ('a, 't) gexpr box (** Removes all calls to [Log] unary operators in the AST, replacing them by their argument. *) @@ -246,7 +230,7 @@ val format : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - 'e marked -> + (_, _ mark) gexpr -> unit (** {2 Analysis and tests} *) @@ -264,8 +248,8 @@ val compare : ('a, 't) gexpr -> ('a, 't) gexpr -> int information *) val compare_typ : typ -> typ -> int -val is_value : (_ any, 'm mark) naked_gexpr marked -> bool -val free_vars : 'e marked -> 'e Var.Set.t +val is_value : ('a any, 't) gexpr -> bool +val free_vars : ('a any, 't) gexpr -> ('a, 't) gexpr Var.Set.t -val size : (_ any, 't) naked_gexpr marked -> int +val size : ('a, 't) gexpr -> int (** Used by the optimizer to know when to stop *) diff --git a/compiler/shared_ast/print.ml b/compiler/shared_ast/print.ml index 9077ecf5..22714edd 100644 --- a/compiler/shared_ast/print.ml +++ b/compiler/shared_ast/print.ml @@ -213,11 +213,8 @@ let needs_parens (type a) (e : (a, _) gexpr) : bool = let rec naked_expr : 'a. - ?debug:bool -> - decl_ctx -> - Format.formatter -> - ('a, 't) gexpr -> - unit = + ?debug:bool -> decl_ctx -> Format.formatter -> ('a, 't) gexpr -> unit + = fun (type a) ?(debug : bool = false) (ctx : decl_ctx) (fmt : Format.formatter) (e : (a, 't) gexpr) -> let naked_expr e = naked_expr ~debug ctx e in @@ -257,8 +254,8 @@ let rec naked_expr : match s with | None -> Format.fprintf fmt "%a%a%d" naked_expr e1 punctuation "." n | Some s -> - Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 operator "." punctuation "\"" - StructFieldName.format_t + Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 operator "." punctuation + "\"" StructFieldName.format_t (fst (List.nth (StructMap.find s ctx.ctx_structs) n)) punctuation "\"") | EInj (e, n, en, _ts) -> @@ -303,7 +300,8 @@ let rec naked_expr : | EApp ((EOp (Binop op), _), [arg1; arg2]) -> Format.fprintf fmt "@[%a@ %a@ %a@]" with_parens arg1 binop op with_parens arg2 - | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> naked_expr fmt arg1 + | EApp ((EOp (Unop (Log _)), _), [arg1]) when not debug -> + naked_expr fmt arg1 | EApp ((EOp (Unop op), _), [arg1]) -> Format.fprintf fmt "@[%a@ %a@]" unop op with_parens arg1 | EApp (f, args) -> @@ -313,22 +311,22 @@ let rec naked_expr : with_parens) args | EIfThenElse (e1, e2, e3) -> - Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" naked_expr e1 - keyword "then" naked_expr e2 keyword "else" naked_expr e3 + Format.fprintf fmt "@[%a@ %a@ %a@ %a@ %a@ %a@]" keyword "if" + naked_expr e1 keyword "then" naked_expr e2 keyword "else" naked_expr e3 | EOp (Ternop op) -> Format.fprintf fmt "%a" ternop op | EOp (Binop op) -> Format.fprintf fmt "%a" binop op | EOp (Unop op) -> Format.fprintf fmt "%a" unop op | EDefault (exceptions, just, cons) -> if List.length exceptions = 0 then - Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" naked_expr just - punctuation "⊢" naked_expr cons punctuation "⟩" + Format.fprintf fmt "@[%a%a@ %a@ %a%a@]" punctuation "⟨" naked_expr + just punctuation "⊢" naked_expr cons punctuation "⟩" else Format.fprintf fmt "@[%a%a@ %a@ %a@ %a@ %a%a@]" punctuation "⟨" (Format.pp_print_list ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " punctuation ",") naked_expr) - exceptions punctuation "|" naked_expr just punctuation "⊢" naked_expr cons - punctuation "⟩" + exceptions punctuation "|" naked_expr just punctuation "⊢" naked_expr + cons punctuation "⟩" | ErrorOnEmpty e' -> Format.fprintf fmt "%a@ %a" operator "error_empty" with_parens e' | EAssert e' -> @@ -352,8 +350,8 @@ let rec naked_expr : (StructFieldMap.bindings fields) punctuation "}" | EStructAccess (e1, field, _) -> - Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 punctuation "." punctuation "\"" - StructFieldName.format_t field punctuation "\"" + Format.fprintf fmt "%a%a%a%a%a" naked_expr e1 punctuation "." punctuation + "\"" StructFieldName.format_t field punctuation "\"" | EEnumInj (e1, cons, _) -> Format.fprintf fmt "%a@ %a" EnumConstructor.format_t cons naked_expr e1 | EMatchS (e1, _, cases) -> diff --git a/compiler/shared_ast/program.ml b/compiler/shared_ast/program.ml index 87584316..092111b9 100644 --- a/compiler/shared_ast/program.ml +++ b/compiler/shared_ast/program.ml @@ -22,10 +22,9 @@ let map_exprs ~f ~varf { scopes; decl_ctx } = (fun scopes -> { scopes; decl_ctx }) (Scope.map_exprs ~f ~varf scopes) -let untype : 'm. ('a, 'm mark) naked_gexpr program -> ('a, untyped mark) naked_gexpr program +let untype : 'm. ('a, 'm mark) gexpr program -> ('a, untyped mark) gexpr program = - fun (prg : ('a, 'm mark) naked_gexpr program) -> - Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) + fun prg -> Bindlib.unbox (map_exprs ~f:Expr.untype ~varf:Var.translate prg) let rec find_scope name vars = function | Nil -> raise Not_found diff --git a/compiler/shared_ast/program.mli b/compiler/shared_ast/program.mli index c9ece890..9e7246e7 100644 --- a/compiler/shared_ast/program.mli +++ b/compiler/shared_ast/program.mli @@ -20,19 +20,17 @@ open Definitions (** {2 Transformations} *) val map_exprs : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + f:('expr1 -> 'expr2 box) -> + varf:('expr1 Var.t -> 'expr2 Var.t) -> 'expr1 program -> - 'expr2 program Bindlib.box + 'expr2 program box val untype : - (([< dcalc | lcalc ] as 'a), 'm mark) naked_gexpr program -> - ('a, untyped mark) naked_gexpr program + (([< dcalc | lcalc ] as 'a), 'm mark) gexpr program -> + ('a, untyped mark) gexpr program val to_expr : - (([< dcalc | lcalc ], _) naked_gexpr as 'e) program -> - ScopeName.t -> - 'e marked Bindlib.box + (([< dcalc | lcalc ], _) gexpr as 'e) program -> ScopeName.t -> 'e box (** Usage: [build_whole_program_expr program main_scope] builds an expression corresponding to the main program and returning the main scope as a function. *) diff --git a/compiler/shared_ast/scope.ml b/compiler/shared_ast/scope.ml index 3d889b46..91d5f2ae 100644 --- a/compiler/shared_ast/scope.ml +++ b/compiler/shared_ast/scope.ml @@ -97,7 +97,7 @@ let get_body_mark scope_body = | Result e | ScopeLet { scope_let_expr = e; _ } -> Marked.get_mark e let rec unfold_body_expr (ctx : decl_ctx) (scope_let : 'e scope_body_expr) : - 'e marked Bindlib.box = + 'e box = match scope_let with | Result e -> Expr.box e | ScopeLet @@ -122,12 +122,10 @@ let build_typ_from_sig let result_typ = Marked.mark pos (TStruct scope_return_struct_name) in Marked.mark pos (TArrow (input_typ, result_typ)) -type 'e scope_name_or_var = - | ScopeName of ScopeName.t - | ScopeVar of 'e Bindlib.var +type 'e scope_name_or_var = ScopeName of ScopeName.t | ScopeVar of 'e Var.t let to_expr (ctx : decl_ctx) (body : 'e scope_body) (mark_scope : 'm mark) : - 'e marked Bindlib.box = + 'e box = let var, body_expr = Bindlib.unbind body.scope_body_expr in let body_expr = unfold_body_expr ctx body_expr in Expr.make_abs [| var |] body_expr @@ -152,7 +150,7 @@ let rec unfold (ctx : decl_ctx) (s : 'e scopes) (mark : 'm mark) - (main_scope : 'naked_expr scope_name_or_var) : 'e marked Bindlib.box = + (main_scope : 'expr scope_name_or_var) : 'e Bindlib.box = match s with | Nil -> ( match main_scope with diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index 524fa8a7..bdc22a43 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -23,7 +23,7 @@ open Definitions (** {2 Traversal functions} *) val fold_left_lets : - f:('a -> 'e scope_let -> 'e Bindlib.var -> 'a) -> + f:('a -> 'e scope_let -> 'e Var.t -> 'a) -> init:'a -> 'e scope_body_expr -> 'a @@ -33,8 +33,8 @@ val fold_left_lets : scope lets to be examined. *) val fold_right_lets : - f:('expr1 scope_let -> 'expr1 Bindlib.var -> 'a -> 'a) -> - init:('expr1 marked -> 'a) -> + f:('expr1 scope_let -> 'expr1 Var.t -> 'a -> 'a) -> + init:('expr1 -> 'a) -> 'expr1 scope_body_expr -> 'a (** Usage: @@ -43,13 +43,13 @@ val fold_right_lets : scope lets to be examined (which are before in the program order). *) val map_exprs_in_lets : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + f:('expr1 -> 'expr2 box) -> + varf:('expr1 Var.t -> 'expr2 Var.t) -> 'expr1 scope_body_expr -> - 'expr2 scope_body_expr Bindlib.box + 'expr2 scope_body_expr box val fold_left : - f:('a -> 'expr1 scope_def -> 'expr1 Bindlib.var -> 'a) -> + f:('a -> 'expr1 scope_def -> 'expr1 Var.t -> 'a) -> init:'a -> 'expr1 scopes -> 'a @@ -58,7 +58,7 @@ val fold_left : be examined. *) val fold_right : - f:('expr1 scope_def -> 'expr1 Bindlib.var -> 'a -> 'a) -> + f:('expr1 scope_def -> 'expr1 Var.t -> 'a -> 'a) -> init:'a -> 'expr1 scopes -> 'a @@ -67,20 +67,17 @@ val fold_right : where [scope_var] is the variable bound to the scope in the next scopes to be examined (which are before in the program order). *) -val map : - f:('e scope_def -> 'e scope_def Bindlib.box) -> - 'e scopes -> - 'e scopes Bindlib.box +val map : f:('e scope_def -> 'e scope_def box) -> 'e scopes -> 'e scopes box val map_exprs : - f:('expr1 marked -> 'expr2 marked Bindlib.box) -> - varf:('expr1 Bindlib.var -> 'expr2 Bindlib.var) -> + f:('expr1 -> 'expr2 box) -> + varf:('expr1 Var.t -> 'expr2 Var.t) -> 'expr1 scopes -> - 'expr2 scopes Bindlib.box + 'expr2 scopes box (** This is the main map visitor for all the expressions inside all the scopes of the program. *) -val get_body_mark : (_, 'm mark) naked_gexpr scope_body -> 'm mark +val get_body_mark : (_, 'm mark) gexpr scope_body -> 'm mark (** {2 Conversions} *) @@ -93,22 +90,20 @@ val format : val to_expr : decl_ctx -> - ((_ any, 'm mark) naked_gexpr as 'e) scope_body -> + ('a any, 'm mark) gexpr scope_body -> 'm mark -> - 'e marked Bindlib.box + ('a, 'm mark) gexpr box (** Usage: [to_expr ctx body scope_position] where [scope_position] corresponds to the line of the scope declaration for instance. *) -type 'e scope_name_or_var = - | ScopeName of ScopeName.t - | ScopeVar of 'e Bindlib.var +type 'e scope_name_or_var = ScopeName of ScopeName.t | ScopeVar of 'e Var.t val unfold : decl_ctx -> - ((_ any, 'm mark) naked_gexpr as 'e) scopes -> + ((_, 'm mark) gexpr as 'e) scopes -> 'm mark -> 'e scope_name_or_var -> - 'e marked Bindlib.box + 'e box val build_typ_from_sig : decl_ctx -> StructName.t -> StructName.t -> Pos.t -> typ diff --git a/compiler/shared_ast/var.ml b/compiler/shared_ast/var.ml index a5cc424b..1583bd8b 100644 --- a/compiler/shared_ast/var.ml +++ b/compiler/shared_ast/var.ml @@ -18,12 +18,13 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] +(** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e t = 'e anyexpr Bindlib.var -type 'e vars = 'e anyexpr Bindlib.mvar -type 'e binder = ('e, 'e marked) Bindlib.binder +type 'e t = ('a, 't) naked_gexpr Bindlib.var constraint 'e = ('a any, 't) gexpr + +type 'e vars = ('a, 't) naked_gexpr Bindlib.mvar + constraint 'e = ('a any, 't) gexpr let make (name : string) : 'e t = Bindlib.new_var (fun x -> EVar x) name let compare = Bindlib.compare_vars @@ -36,7 +37,7 @@ type 'e var = 'e t (* The purpose of this module is just to lift a type parameter outside of [Set.S] and [Map.S], so that we can have ['e Var.Set.t] for sets of variables - bound to the ['e = ('a, 't) naked_gexpr] expression type. This is made possible by + bound to the ['e = ('a, 't) gexpr] expression type. This is made possible by the fact that [Bindlib.compare_vars] is polymorphic in that parameter; we first hide that parameter inside an existential, then re-add a phantom type outside of the set to ensure consistency. Extracting the elements is then diff --git a/compiler/shared_ast/var.mli b/compiler/shared_ast/var.mli index 29e0332c..67708ef4 100644 --- a/compiler/shared_ast/var.mli +++ b/compiler/shared_ast/var.mli @@ -18,12 +18,13 @@ open Definitions (** {1 Variables and their collections} *) -(** This module provides types and helpers for Bindlib variables on the [naked_gexpr] +(** This module provides types and helpers for Bindlib variables on the [gexpr] type *) -type 'e t = 'e anyexpr Bindlib.var -type 'e vars = 'e anyexpr Bindlib.mvar -type 'e binder = ('e, 'e marked) Bindlib.binder +type 'e t = ('a, 't) naked_gexpr Bindlib.var constraint 'e = ('a any, 't) gexpr + +type 'e vars = ('a, 't) naked_gexpr Bindlib.mvar + constraint 'e = ('a any, 't) gexpr val make : string -> 'e t val compare : 'e t -> 'e t -> int diff --git a/compiler/surface/ast.ml b/compiler/surface/ast.ml index 85034340..47dbfdb5 100644 --- a/compiler/surface/ast.ml +++ b/compiler/surface/ast.ml @@ -135,6 +135,7 @@ type func_typ = { }] type typ = naked_typ Marked.pos + and naked_typ = Base of base_typ | Func of func_typ [@@deriving visitors diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index 164cb98e..bf491b3a 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -785,8 +785,7 @@ and disambiguate_match_and_build_expression (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) (cases : Ast.match_case Marked.pos list) : - Desugared.Ast.expr Bindlib.box EnumConstructorMap.t * EnumName.t - = + Desugared.Ast.expr Bindlib.box EnumConstructorMap.t * EnumName.t = let create_var = function | None -> ctxt, Var.make "_" | Some param -> @@ -799,7 +798,9 @@ and disambiguate_match_and_build_expression (ctxt : Name_resolution.context) (case_body : ('a * Pos.t) Bindlib.box) (e_binder : - (Desugared.Ast.naked_expr, Desugared.Ast.naked_expr * Pos.t) Bindlib.mbinder + ( Desugared.Ast.naked_expr, + Desugared.Ast.naked_expr * Pos.t ) + Bindlib.mbinder Bindlib.box) : 'c Bindlib.box = Bindlib.box_apply2 (fun e_binder case_body -> @@ -948,7 +949,7 @@ let process_default (scope : ScopeName.t) (def_key : Desugared.Ast.ScopeDef.t Marked.pos) (rule_id : Desugared.Ast.RuleName.t) - (param_uid : Desugared.Ast.naked_expr Var.t Marked.pos option) + (param_uid : Desugared.Ast.expr Var.t Marked.pos option) (precond : Desugared.Ast.expr Bindlib.box option) (exception_situation : Desugared.Ast.exception_situation) (label_situation : Desugared.Ast.label_situation) diff --git a/compiler/surface/name_resolution.ml b/compiler/surface/name_resolution.ml index 65ac15d3..bf30c464 100644 --- a/compiler/surface/name_resolution.ml +++ b/compiler/surface/name_resolution.ml @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -148,8 +148,7 @@ let belongs_to (ctxt : context) (uid : ScopeVar.t) (scope_uid : ScopeName.t) : scope.var_idmap (** Retrieves the type of a scope definition from the context *) -let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : - typ = +let get_def_typ (ctxt : context) (def : Desugared.Ast.ScopeDef.t) : typ = match def with | Desugared.Ast.ScopeDef.SubScopeVar (_, x) (* we don't need to look at the subscope prefix because [x] is already the uid @@ -249,8 +248,7 @@ let rec process_base_typ ident))) (** Process a type (function or not) *) -let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : - typ = +let process_type (ctxt : context) ((naked_typ, typ_pos) : Ast.typ) : typ = match naked_typ with | Ast.Base base_typ -> process_base_typ ctxt (base_typ, typ_pos) | Ast.Func { arg_typ; return_typ } -> @@ -321,7 +319,7 @@ let process_item_decl (** Adds a binding to the context *) let add_def_local_var (ctxt : context) (name : ident) : - context * Desugared.Ast.naked_expr Var.t = + context * Desugared.Ast.expr Var.t = let local_var_uid = Var.make name in let ctxt = { diff --git a/compiler/surface/name_resolution.mli b/compiler/surface/name_resolution.mli index d8e2eb39..0479f5a7 100644 --- a/compiler/surface/name_resolution.mli +++ b/compiler/surface/name_resolution.mli @@ -60,7 +60,7 @@ type var_sig = { } type context = { - local_var_idmap : Desugared.Ast.naked_expr Var.t Desugared.Ast.IdentMap.t; + local_var_idmap : Desugared.Ast.expr Var.t Desugared.Ast.IdentMap.t; (** Inside a definition, local variables can be introduced by functions arguments or pattern matching *) scope_idmap : ScopeName.t Desugared.Ast.IdentMap.t; @@ -120,7 +120,7 @@ val get_def_typ : context -> Desugared.Ast.ScopeDef.t -> typ val is_def_cond : context -> Desugared.Ast.ScopeDef.t -> bool val is_type_cond : Ast.typ -> bool -val add_def_local_var : context -> ident -> context * Desugared.Ast.naked_expr Var.t +val add_def_local_var : context -> ident -> context * Desugared.Ast.expr Var.t (** Adds a binding to the context *) val get_def_key : diff --git a/compiler/verification/conditions.ml b/compiler/verification/conditions.ml index b8287cc9..6f9ca9f9 100644 --- a/compiler/verification/conditions.ml +++ b/compiler/verification/conditions.ml @@ -22,15 +22,15 @@ open Ast (** {1 Helpers and type definitions}*) -type vc_return = typed expr * (typed naked_expr, typ) Var.Map.t +type vc_return = typed expr * (typed expr, typ) Var.Map.t (** The return type of VC generators is the VC expression plus the types of any locally free variable inside that expression. *) type ctx = { current_scope_name : ScopeName.t; decl : decl_ctx; - input_vars : typed naked_expr Var.t list; - scope_variables_typs : (typed naked_expr, typ) Var.Map.t; + input_vars : typed expr Var.t list; + scope_variables_typs : (typed expr, typ) Var.Map.t; } let conjunction (args : vc_return list) (mark : typed mark) : vc_return = @@ -74,8 +74,8 @@ let half_product (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list = variables, or [fun () -> e1] for subscope variables. But what we really want to analyze is only [e1], so we match this outermost structure explicitely and have a clean verification condition generator that only runs on [e1] *) -let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) - : typed expr = +let match_and_ignore_outer_reentrant_default (ctx : ctx) (e : typed expr) : + typed expr = match Marked.unmark e with | ErrorOnEmpty ( EDefault @@ -200,8 +200,8 @@ let rec generate_vc_must_not_return_empty (ctx : ctx) (e : typed expr) : [b] such that if [b] is true, then [e] will never return a conflict error. It also returns a map of all the types of locally free variables inside the expression. *) -let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed expr) - : vc_return = +let rec generate_vs_must_not_return_confict (ctx : ctx) (e : typed expr) : + vc_return = let out = (* See the code of [generate_vc_must_not_return_empty] for a list of invariants on which this function relies on. *) @@ -287,13 +287,13 @@ type verification_condition = { (* should have type bool *) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed naked_expr, typ) Var.Map.t; + vc_variable : typed expr Var.t Marked.pos; + vc_free_vars_typ : (typed expr, typ) Var.Map.t; } let rec generate_verification_conditions_scope_body_expr (ctx : ctx) - (scope_body_expr : 'm naked_expr scope_body_expr) : + (scope_body_expr : 'm expr scope_body_expr) : ctx * verification_condition list = match scope_body_expr with | Result _ -> ctx, [] @@ -378,7 +378,7 @@ let rec generate_verification_conditions_scope_body_expr let rec generate_verification_conditions_scopes (decl_ctx : decl_ctx) - (scopes : 'm naked_expr scopes) + (scopes : 'm expr scopes) (s : ScopeName.t option) : verification_condition list = match scopes with | Nil -> [] diff --git a/compiler/verification/conditions.mli b/compiler/verification/conditions.mli index 5bc8f2f4..cd12bf03 100644 --- a/compiler/verification/conditions.mli +++ b/compiler/verification/conditions.mli @@ -33,8 +33,8 @@ type verification_condition = { (** This expression should have type [bool]*) vc_kind : verification_condition_kind; vc_scope : ScopeName.t; - vc_variable : typed Dcalc.Ast.naked_expr Var.t Marked.pos; - vc_free_vars_typ : (typed Dcalc.Ast.naked_expr, typ) Var.Map.t; + vc_variable : typed Dcalc.Ast.expr Var.t Marked.pos; + vc_free_vars_typ : (typed Dcalc.Ast.expr, typ) Var.Map.t; (** Types of the locally free variables in [vc_guard]. The types of other free variables linked to scope variables can be obtained with [Dcalc.Ast.variable_types]. *) diff --git a/compiler/verification/io.ml b/compiler/verification/io.ml index 4842dd58..c0b03c3d 100644 --- a/compiler/verification/io.ml +++ b/compiler/verification/io.ml @@ -24,8 +24,7 @@ module type Backend = sig type backend_context - val make_context : - decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context + val make_context : decl_ctx -> (typed expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -39,9 +38,7 @@ module type Backend = sig val is_model_empty : model -> bool val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding end module type BackendIO = sig @@ -49,15 +46,12 @@ module type BackendIO = sig type backend_context - val make_context : - decl_ctx -> (typed naked_expr, typ) Var.Map.t -> backend_context + val make_context : decl_ctx -> (typed expr, typ) Var.Map.t -> backend_context type vc_encoding val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/io.mli b/compiler/verification/io.mli index 3e392d0b..4cd95813 100644 --- a/compiler/verification/io.mli +++ b/compiler/verification/io.mli @@ -25,9 +25,7 @@ module type Backend = sig type backend_context val make_context : - decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> - backend_context + decl_ctx -> (typed Dcalc.Ast.expr, typ) Var.Map.t -> backend_context type vc_encoding @@ -41,9 +39,7 @@ module type Backend = sig val is_model_empty : model -> bool val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding end module type BackendIO = sig @@ -52,16 +48,12 @@ module type BackendIO = sig type backend_context val make_context : - decl_ctx -> - (typed Dcalc.Ast.naked_expr, typ) Var.Map.t -> - backend_context + decl_ctx -> (typed Dcalc.Ast.expr, typ) Var.Map.t -> backend_context type vc_encoding val translate_expr : - backend_context -> - typed Dcalc.Ast.expr -> - backend_context * vc_encoding + backend_context -> typed Dcalc.Ast.expr -> backend_context * vc_encoding type model diff --git a/compiler/verification/z3backend.real.ml b/compiler/verification/z3backend.real.ml index fb89e9ec..d58bb90d 100644 --- a/compiler/verification/z3backend.real.ml +++ b/compiler/verification/z3backend.real.ml @@ -27,20 +27,20 @@ type context = { ctx_decl : decl_ctx; (* The declaration context from the Catala program, containing information to precisely pretty print Catala expressions *) - ctx_var : (typed naked_expr, typ) Var.Map.t; + ctx_var : (typed expr, typ) Var.Map.t; (* A map from Catala variables to their types, needed to create Z3 expressions of the right sort *) - ctx_funcdecl : (typed naked_expr, FuncDecl.func_decl) Var.Map.t; + ctx_funcdecl : (typed expr, FuncDecl.func_decl) Var.Map.t; (* A map from Catala function names (represented as variables) to Z3 function declarations, used to only define once functions in Z3 queries *) - ctx_z3vars : typed naked_expr Var.t StringMap.t; + ctx_z3vars : typed expr Var.t StringMap.t; (* A map from strings, corresponding to Z3 symbol names, to the Catala variable they represent. Used when to pretty-print Z3 models when a counterexample is generated *) ctx_z3datatypes : Sort.sort EnumMap.t; (* A map from Catala enumeration names to the corresponding Z3 sort, from which we can retrieve constructors and accessors *) - ctx_z3matchsubsts : (typed naked_expr, Expr.expr) Var.Map.t; + ctx_z3matchsubsts : (typed expr, Expr.expr) Var.Map.t; (* A map from Catala temporary variables, generated when translating a match, to the corresponding enum accessor call as a Z3 expression *) ctx_z3structs : Sort.sort StructMap.t; @@ -66,14 +66,14 @@ type context = { (** [add_funcdecl] adds the mapping between the Catala variable [v] and the Z3 function declaration [fd] to the context **) let add_funcdecl - (v : typed naked_expr Var.t) + (v : typed expr Var.t) (fd : FuncDecl.func_decl) (ctx : context) : context = { ctx with ctx_funcdecl = Var.Map.add v fd ctx.ctx_funcdecl } (** [add_z3var] adds the mapping between [name] and the Catala variable [v] to the context **) -let add_z3var (name : string) (v : typed naked_expr Var.t) (ctx : context) : context = +let add_z3var (name : string) (v : typed expr Var.t) (ctx : context) : context = { ctx with ctx_z3vars = StringMap.add name v ctx.ctx_z3vars } (** [add_z3enum] adds the mapping between the Catala enumeration [enum] and the @@ -84,7 +84,7 @@ let add_z3enum (enum : EnumName.t) (sort : Sort.sort) (ctx : context) : context (** [add_z3var] adds the mapping between temporary variable [v] and the Z3 expression [e] representing an accessor application to the context **) -let add_z3matchsubst (v : typed naked_expr Var.t) (e : Expr.expr) (ctx : context) : +let add_z3matchsubst (v : typed expr Var.t) (e : Expr.expr) (ctx : context) : context = { ctx with ctx_z3matchsubsts = Var.Map.add v e ctx.ctx_z3matchsubsts } @@ -129,8 +129,7 @@ let nb_days_to_date (nb : int) : string = (** [print_z3model_expr] pretty-prints the value [e] given by a Z3 model according to the Catala type [ty], corresponding to [e] **) -let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) - : string = +let rec print_z3model_expr (ctx : context) (ty : typ) (e : Expr.expr) : string = let print_lit (ty : typ_lit) = match ty with (* TODO: Print boolean according to current language *) @@ -284,9 +283,7 @@ let rec translate_typ (ctx : context) (t : naked_typ) : context * Sort.sort = and find_or_create_enum (ctx : context) (enum : EnumName.t) : context * Sort.sort = (* Creates a Z3 constructor corresponding to the Catala constructor [c] *) - let create_constructor - (ctx : context) - (c : EnumConstructor.t * typ) : + let create_constructor (ctx : context) (c : EnumConstructor.t * typ) : context * Datatype.Constructor.constructor = let name, ty = c in let name = Marked.unmark (EnumConstructor.get_info name) in @@ -390,7 +387,7 @@ let translate_lit (ctx : context) (l : lit) : Expr.expr = corresponding to the variable [v]. If no such function declaration exists yet, we construct it and add it to the context, thus requiring to return a new context *) -let find_or_create_funcdecl (ctx : context) (v : typed naked_expr Var.t) : +let find_or_create_funcdecl (ctx : context) (v : typed expr Var.t) : context * FuncDecl.func_decl = match Var.Map.find_opt v ctx.ctx_funcdecl with | Some fd -> ctx, fd @@ -417,10 +414,8 @@ let find_or_create_funcdecl (ctx : context) (v : typed naked_expr Var.t) : (** [translate_op] returns the Z3 expression corresponding to the application of [op] to the arguments [args] **) -let rec translate_op - (ctx : context) - (op : operator) - (args : 'm expr list) : context * Expr.expr = +let rec translate_op (ctx : context) (op : operator) (args : 'm expr list) : + context * Expr.expr = match op with | Ternop _top -> let _e1, _e2, _e3 = @@ -810,8 +805,7 @@ module Backend = struct let make_context (decl_ctx : decl_ctx) - (free_vars_typ : (typed naked_expr, typ) Var.Map.t) : backend_context - = + (free_vars_typ : (typed expr, typ) Var.Map.t) : backend_context = let cfg = (if !Cli.disable_counterexamples then [] else ["model", "true"]) @ ["proof", "false"] From 5bda9e98d08f5ed10a98b3ebcf7e5faf60f437b3 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Fri, 26 Aug 2022 11:06:00 +0200 Subject: [PATCH 28/31] Small cleanup Remove unneeded types, e.g. provisions for scalc --- compiler/dcalc/typing.ml | 2 +- compiler/shared_ast/definitions.ml | 31 +++++++++--------------------- compiler/shared_ast/scope.mli | 8 ++++---- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/compiler/dcalc/typing.ml b/compiler/dcalc/typing.ml index 1b3bec0f..6d764771 100644 --- a/compiler/dcalc/typing.ml +++ b/compiler/dcalc/typing.ml @@ -107,7 +107,7 @@ let rec format_typ | TArray t1 -> Format.fprintf fmt "@[%a@ array@]" format_typ t1 | TAny d -> Format.fprintf fmt "any[%d]" (Any.hash d) -exception Type_error of A.any_marked_expr * unionfind_typ * unionfind_typ +exception Type_error of A.any_expr * unionfind_typ * unionfind_typ type mark = { pos : Pos.t; uf : unionfind_typ } diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index fecff430..df91a91d 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -148,8 +148,6 @@ type scopelang = [ `Scopelang ] type dcalc = [ `Dcalc ] type lcalc = [ `Lcalc ] -(* type scalc = [ `Scalc ] *) - type 'a any = [< desugared | scopelang | dcalc | lcalc ] as 'a (** Literals are the same throughout compilation except for the [LEmptyError] @@ -194,16 +192,15 @@ and ('a, 't) naked_gexpr = | EApp : ('a, 't) gexpr * ('a, 't) gexpr list -> ('a any, 't) naked_gexpr | EOp : operator -> ('a any, 't) naked_gexpr | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr - (* All but statement calculus *) | EVar : ('a, 't) naked_gexpr Bindlib.var - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr + -> ('a any, 't) naked_gexpr | EAbs : (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * typ list - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr + -> ('a any, 't) naked_gexpr | EIfThenElse : ('a, 't) gexpr * ('a, 't) gexpr * ('a, 't) gexpr - -> (([< desugared | scopelang | dcalc | lcalc ] as 'a), 't) naked_gexpr + -> ('a any, 't) naked_gexpr (* Early stages *) | ELocation : 'a glocation @@ -254,16 +251,6 @@ type ('e, 'b) binder = (('a, 't) naked_gexpr, 'b) Bindlib.binder (** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} library, based on higher-order abstract syntax *) -(* (\* Statement calculus *\) - * | ESVar: LocalName.t -> (scalc as 'a, 't) naked_gexpr - * | ESStruct: ('a, 't) gexpr list * StructName.t -> (scalc as 'a, 't) naked_gexpr - * | ESStructFieldAccess: ('a, 't) gexpr * StructFieldName.t * StructName.t -> (scalc as 'a, 't) naked_gexpr - * | ESInj: ('a, 't) gexpr * EnumConstructor.t * EnumName.t -> (scalc as 'a, 't) naked_gexpr - * | ESFunc: TopLevelName.t -> (scalc as 'a, 't) naked_gexpr *) - -type 'e anyexpr = 'e constraint 'e = (_ any, _) gexpr -(** Shorter alias for functions taking any kind of expression *) - (** {2 Markings} *) type untyped = { pos : Pos.t } [@@ocaml.unboxed] @@ -277,7 +264,7 @@ type typed = { pos : Pos.t; ty : typ } type _ mark = Untyped : untyped -> untyped mark | Typed : typed -> typed mark (** Useful for errors and printing, for example *) -type any_marked_expr = AnyExpr : (_ any, _ mark) gexpr -> any_marked_expr +type any_expr = AnyExpr : (_ any, _ mark) gexpr -> any_expr (** {2 Higher-level program structure} *) @@ -308,7 +295,7 @@ type 'e scope_let = { scope_let_next : ('e, 'e scope_body_expr) binder; scope_let_pos : Pos.t; } - constraint 'e = ('a, 'm mark) gexpr + constraint 'e = (_ any, _ mark) gexpr (** This type is parametrized by the expression type so it can be reused in later intermediate representations. *) @@ -318,14 +305,14 @@ type 'e scope_let = { and 'e scope_body_expr = | Result of 'e | ScopeLet of 'e scope_let - constraint 'e = (_, _ mark) gexpr + constraint 'e = (_ any, _ mark) gexpr type 'e scope_body = { scope_body_input_struct : StructName.t; scope_body_output_struct : StructName.t; scope_body_expr : ('e, 'e scope_body_expr) binder; } - constraint 'e = (_, _ mark) gexpr + constraint 'e = (_ any, _ mark) gexpr (** Instead of being a single expression, we give a little more ad-hoc structure to the scope body by decomposing it in an ordered list of let-bindings, and a result expression that uses the let-binded variables. The first binder is @@ -336,14 +323,14 @@ type 'e scope_def = { scope_body : 'e scope_body; scope_next : ('e, 'e scopes) binder; } - constraint 'e = (_, _ mark) gexpr + constraint 'e = (_ any, _ mark) gexpr (** Finally, we do the same transformation for the whole program for the kinded lets. This permit us to use bindlib variables for scopes names. *) and 'e scopes = | Nil | ScopeDef of 'e scope_def - constraint 'e = (_, _ mark) gexpr + constraint 'e = (_ any, _ mark) gexpr type struct_ctx = (StructFieldName.t * typ) list StructMap.t type enum_ctx = (EnumConstructor.t * typ) list EnumMap.t diff --git a/compiler/shared_ast/scope.mli b/compiler/shared_ast/scope.mli index bdc22a43..54e3e10f 100644 --- a/compiler/shared_ast/scope.mli +++ b/compiler/shared_ast/scope.mli @@ -85,7 +85,7 @@ val format : ?debug:bool (** [true] for debug printing *) -> decl_ctx -> Format.formatter -> - ScopeName.t * 'e anyexpr scope_body -> + ScopeName.t * 'e scope_body -> unit val to_expr : @@ -112,6 +112,6 @@ val build_typ_from_sig : (** {2 Analysis and tests} *) -val free_vars_body_expr : 'e anyexpr scope_body_expr -> 'e Var.Set.t -val free_vars_body : 'e anyexpr scope_body -> 'e Var.Set.t -val free_vars : 'e anyexpr scopes -> 'e Var.Set.t +val free_vars_body_expr : 'e scope_body_expr -> 'e Var.Set.t +val free_vars_body : 'e scope_body -> 'e Var.Set.t +val free_vars : 'e scopes -> 'e Var.Set.t From 84c78a234f2b0429d9448173cf3d056ea1752e63 Mon Sep 17 00:00:00 2001 From: Louis Gesbert Date: Fri, 26 Aug 2022 15:21:47 +0200 Subject: [PATCH 29/31] Make desugared and scopelang use the `'a mark` type for AST annotations This gives further uniformity in their interfaces and allows more common handling. The next step will be for all the `Expr.make_*` functions to work on expressions annotated with the `'a mark` type, correctly propagating type information when it is present. Then we could even imagine early propagation of type information (without complete inference), which could for example be used for overloaded operator disambiguation. --- compiler/desugared/ast.ml | 13 +- compiler/desugared/ast.mli | 4 +- compiler/desugared/desugared_to_scope.ml | 24 ++- compiler/scopelang/ast.ml | 5 +- compiler/scopelang/ast.mli | 3 +- compiler/scopelang/scope_to_dcalc.ml | 26 +-- compiler/shared_ast/definitions.ml | 8 +- compiler/shared_ast/expr.ml | 3 - compiler/shared_ast/expr.mli | 9 - compiler/surface/desugaring.ml | 227 ++++++++++++----------- 10 files changed, 152 insertions(+), 170 deletions(-) diff --git a/compiler/desugared/ast.ml b/compiler/desugared/ast.ml index 83c323a1..5c6f54b2 100644 --- a/compiler/desugared/ast.ml +++ b/compiler/desugared/ast.ml @@ -94,8 +94,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type naked_expr = (desugared, Pos.t) naked_gexpr -type expr = naked_expr Marked.pos +type expr = (desugared, untyped mark) gexpr module ExprMap = Map.Make (struct type t = expr @@ -156,8 +155,8 @@ end let empty_rule (pos : Pos.t) (have_parameter : typ option) : rule = { - rule_just = Bindlib.box (ELit (LBool false), pos); - rule_cons = Bindlib.box (ELit LEmptyError, pos); + rule_just = Bindlib.box (ELit (LBool false), Untyped { pos }); + rule_cons = Bindlib.box (ELit LEmptyError, Untyped { pos }); rule_parameter = (match have_parameter with | Some typ -> Some (Var.make "dummy", typ) @@ -169,8 +168,8 @@ let empty_rule (pos : Pos.t) (have_parameter : typ option) : rule = let always_false_rule (pos : Pos.t) (have_parameter : typ option) : rule = { - rule_just = Bindlib.box (ELit (LBool true), pos); - rule_cons = Bindlib.box (ELit (LBool false), pos); + rule_just = Bindlib.box (ELit (LBool true), Untyped { pos }); + rule_cons = Bindlib.box (ELit (LBool false), Untyped { pos }); rule_parameter = (match have_parameter with | Some typ -> Some (Var.make "dummy", typ) @@ -213,7 +212,7 @@ type program = { let rec locations_used (e : expr) : LocationSet.t = match Marked.unmark e with - | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) + | ELocation l -> LocationSet.singleton (l, Expr.pos e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty | EAbs (binder, _) -> let _, body = Bindlib.unmbind binder in diff --git a/compiler/desugared/ast.mli b/compiler/desugared/ast.mli index d606688c..a2f31467 100644 --- a/compiler/desugared/ast.mli +++ b/compiler/desugared/ast.mli @@ -49,11 +49,9 @@ module ScopeDefSet : Set.S with type elt = ScopeDef.t (** {2 Expressions} *) -type naked_expr = (desugared, Pos.t) naked_gexpr +type expr = (desugared, untyped mark) gexpr (** See {!type:Shared_ast.naked_gexpr} for the complete definition *) -and expr = naked_expr Marked.pos - type location = desugared glocation module LocationSet : Set.S with type elt = location Marked.pos diff --git a/compiler/desugared/desugared_to_scope.ml b/compiler/desugared/desugared_to_scope.ml index 6f8675c4..ca363f08 100644 --- a/compiler/desugared/desugared_to_scope.ml +++ b/compiler/desugared/desugared_to_scope.ml @@ -187,6 +187,7 @@ let rec rule_tree_to_expr (def_pos : Pos.t) (is_func : Ast.expr Var.t option) (tree : rule_tree) : Scopelang.Ast.expr Bindlib.box = + let emark = Untyped { pos = def_pos } in let exceptions, base_rules = match tree with Leaf r -> [], r | Node (exceptions, r) -> exceptions, r in @@ -254,11 +255,10 @@ let rec rule_tree_to_expr (* Here we insert the logging command that records when a decision is taken for the value of a variable. *) (tag_with_log_entry base_just PosRecordIfTrueBool []) - base_cons def_pos) + base_cons emark) base_just_list base_cons_list) - (ELit (LBool false), def_pos) - (ELit LEmptyError, def_pos) - def_pos) + (ELit (LBool false), emark) + (ELit LEmptyError, emark) emark) (Bindlib.box_list (translate_and_unbox_list base_just_list)) (Bindlib.box_list (translate_and_unbox_list base_cons_list)) in @@ -271,9 +271,8 @@ let rec rule_tree_to_expr let default = Bindlib.box_apply2 (fun exceptions default_containing_base_cases -> - Expr.make_default exceptions - (ELit (LBool true), def_pos) - default_containing_base_cases def_pos) + Expr.make_default exceptions (ELit (LBool true), emark) + default_containing_base_cases emark) exceptions default_containing_base_cases in match is_func, (List.hd base_rules).Ast.rule_parameter with @@ -284,13 +283,12 @@ let rec rule_tree_to_expr that the result returned by the function is not empty *) let default = Bindlib.box_apply - (fun (default : Scopelang.Ast.naked_expr * Pos.t) -> - ErrorOnEmpty default, def_pos) + (fun (default : Scopelang.Ast.expr) -> ErrorOnEmpty default, emark) default in Expr.make_abs [| Var.Map.find new_param ctx.var_mapping |] - default [typ] def_pos + default [typ] emark else default | _ -> (* should not happen *) assert false @@ -332,12 +330,12 @@ let translate_def List.map (fun (_, r) -> ( Some "This definition is a function:", - Marked.get_mark (Bindlib.unbox r.Ast.rule_cons) )) + Expr.pos (Bindlib.unbox r.Ast.rule_cons) )) (Ast.RuleMap.bindings (Ast.RuleMap.filter is_rule_func def)) @ List.map (fun (_, r) -> ( Some "This definition is not a function:", - Marked.get_mark (Bindlib.unbox r.Ast.rule_cons) )) + Expr.pos (Bindlib.unbox r.Ast.rule_cons) )) (Ast.RuleMap.bindings (Ast.RuleMap.filter (fun n r -> not (is_rule_func n r)) def)) in @@ -387,7 +385,7 @@ let translate_def defined as an OnlyInput to a subscope, since the [false] default value will not be provided by the calee scope, it has to be placed in the caller. *) - then ELit LEmptyError, Ast.ScopeDef.get_position def_info + then ELit LEmptyError, Untyped { pos = Ast.ScopeDef.get_position def_info } else Bindlib.unbox (rule_tree_to_expr ~toplevel:true ctx diff --git a/compiler/scopelang/ast.ml b/compiler/scopelang/ast.ml index c7935b6b..b92cca8a 100644 --- a/compiler/scopelang/ast.ml +++ b/compiler/scopelang/ast.ml @@ -36,8 +36,7 @@ Set.Make (struct let compare = Expr.compare_location end) -type expr = (scopelang, Pos.t) gexpr -type naked_expr = (scopelang, Pos.t) naked_gexpr +type expr = (scopelang, untyped mark) gexpr module ExprMap = Map.Make (struct type t = expr @@ -47,7 +46,7 @@ end) let rec locations_used (e : expr) : LocationSet.t = match Marked.unmark e with - | ELocation l -> LocationSet.singleton (l, Marked.get_mark e) + | ELocation l -> LocationSet.singleton (l, Expr.pos e) | EVar _ | ELit _ | EOp _ -> LocationSet.empty | EAbs (binder, _) -> let _, body = Bindlib.unmbind binder in diff --git a/compiler/scopelang/ast.mli b/compiler/scopelang/ast.mli index 83646ab0..e22975f8 100644 --- a/compiler/scopelang/ast.mli +++ b/compiler/scopelang/ast.mli @@ -41,8 +41,7 @@ module LocationSet : Set.S with type elt = location Marked.pos (** {1 Abstract syntax tree} *) -type naked_expr = (scopelang, Pos.t) naked_gexpr -type expr = (scopelang, Pos.t) gexpr +type expr = (scopelang, untyped mark) gexpr module ExprMap : Map.S with type key = expr diff --git a/compiler/scopelang/scope_to_dcalc.ml b/compiler/scopelang/scope_to_dcalc.ml index cf03d2d2..4b696cb6 100644 --- a/compiler/scopelang/scope_to_dcalc.ml +++ b/compiler/scopelang/scope_to_dcalc.ml @@ -135,7 +135,7 @@ let collapse_similar_outcomes (excepts : Ast.expr list) : Ast.expr list = let rec translate_expr (ctx : ctx) (e : Ast.expr) : untyped Dcalc.Ast.expr Bindlib.box = - Bindlib.box_apply (fun x -> Marked.mark (pos_mark_as e) x) + Bindlib.box_apply (fun x -> Marked.same_mark_as x e) @@ match Marked.unmark e with | EVar v -> Bindlib.box_var (Var.Map.find v ctx.local_vars) @@ -154,7 +154,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : struct_sig ([], e_fields) in if StructFieldMap.cardinal remaining_e_fields > 0 then - Errors.raise_spanned_error (Marked.get_mark e) + Errors.raise_spanned_error (Expr.pos e) "The fields \"%a\" do not belong to the structure %a" StructName.format_t struct_name (Format.pp_print_list @@ -172,7 +172,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : try List.assoc field_name (List.mapi (fun i (x, y) -> x, (y, i)) struct_sig) with Not_found -> - Errors.raise_spanned_error (Marked.get_mark e) + Errors.raise_spanned_error (Expr.pos e) "The field \"%a\" does not belong to the structure %a" StructFieldName.format_t field_name StructName.format_t struct_name in @@ -187,7 +187,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : try List.assoc constructor (List.mapi (fun i (x, y) -> x, (y, i)) enum_sig) with Not_found -> - Errors.raise_spanned_error (Marked.get_mark e) + Errors.raise_spanned_error (Expr.pos e) "The constructor \"%a\" does not belong to the enum %a" EnumConstructor.format_t constructor EnumName.format_t enum_name in @@ -203,7 +203,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : let case_e = try EnumConstructorMap.find constructor e_cases with Not_found -> - Errors.raise_spanned_error (Marked.get_mark e) + Errors.raise_spanned_error (Expr.pos e) "The constructor %a of enum %a is missing from this pattern \ matching" EnumConstructor.format_t constructor EnumName.format_t enum_name @@ -213,7 +213,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : enum_sig ([], cases) in if EnumConstructorMap.cardinal remaining_e_cases > 0 then - Errors.raise_spanned_error (Marked.get_mark e) + Errors.raise_spanned_error (Expr.pos e) "Patter matching is incomplete for enum %a: missing cases %a" EnumName.format_t enum_name (Format.pp_print_list @@ -269,13 +269,13 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : | ELocation l, [new_arg] -> [ tag_with_log_entry new_arg (VarDef input_typ) - (markings l @ [Marked.same_mark_as "input" e]); + (markings l @ [Marked.mark (Expr.pos e) "input"]); ] | _ -> new_args in let new_e = Bindlib.box_apply2 - (fun e' u -> EApp (e', u), pos_mark_as e) + (fun e' u -> Marked.same_mark_as (EApp (e', u)) e) e1_func (Bindlib.box_list new_args) in @@ -284,7 +284,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : | ELocation l -> tag_with_log_entry (tag_with_log_entry new_e (VarDef output_typ) - (markings l @ [Marked.same_mark_as "output" e])) + (markings l @ [Marked.mark (Expr.pos e) "output"])) EndCall (markings l) | _ -> new_e in @@ -325,7 +325,7 @@ let rec translate_expr (ctx : ctx) (e : Ast.expr) : with Not_found -> Errors.raise_multispanned_error [ - Some "Incriminated variable usage:", Marked.get_mark e; + Some "Incriminated variable usage:", Expr.pos e; ( Some "Incriminated subscope variable declaration:", Marked.get_mark (ScopeVar.get_info (Marked.unmark a)) ); ( Some "Incriminated subscope declaration:", @@ -616,13 +616,13 @@ let translate_rule ScopeLet { scope_let_next = next; - scope_let_pos = Marked.get_mark e; - scope_let_typ = TLit TUnit, Marked.get_mark e; + scope_let_pos = Expr.pos e; + scope_let_typ = TLit TUnit, Expr.pos e; scope_let_expr = (* To ensure that we throw an error if the value is not defined, we add an check "ErrorOnEmpty" here. *) Marked.same_mark_as - (EAssert (ErrorOnEmpty new_e, pos_mark_as e)) + (EAssert (Marked.same_mark_as (ErrorOnEmpty new_e) e)) new_e; scope_let_kind = Assertion; }) diff --git a/compiler/shared_ast/definitions.ml b/compiler/shared_ast/definitions.ml index df91a91d..8d1e3d4e 100644 --- a/compiler/shared_ast/definitions.ml +++ b/compiler/shared_ast/definitions.ml @@ -147,7 +147,6 @@ type desugared = [ `Desugared ] type scopelang = [ `Scopelang ] type dcalc = [ `Dcalc ] type lcalc = [ `Lcalc ] - type 'a any = [< desugared | scopelang | dcalc | lcalc ] as 'a (** Literals are the same throughout compilation except for the [LEmptyError] @@ -192,9 +191,7 @@ and ('a, 't) naked_gexpr = | EApp : ('a, 't) gexpr * ('a, 't) gexpr list -> ('a any, 't) naked_gexpr | EOp : operator -> ('a any, 't) naked_gexpr | EArray : ('a, 't) gexpr list -> ('a any, 't) naked_gexpr - | EVar : - ('a, 't) naked_gexpr Bindlib.var - -> ('a any, 't) naked_gexpr + | EVar : ('a, 't) naked_gexpr Bindlib.var -> ('a any, 't) naked_gexpr | EAbs : (('a, 't) naked_gexpr, ('a, 't) gexpr) Bindlib.mbinder * typ list -> ('a any, 't) naked_gexpr @@ -251,6 +248,9 @@ type ('e, 'b) binder = (('a, 't) naked_gexpr, 'b) Bindlib.binder (** The expressions use the {{:https://lepigre.fr/ocaml-bindlib/} Bindlib} library, based on higher-order abstract syntax *) +type ('e, 'b) mbinder = (('a, 't) naked_gexpr, 'b) Bindlib.mbinder + constraint 'e = ('a, 't) gexpr + (** {2 Markings} *) type untyped = { pos : Pos.t } [@@ocaml.unboxed] diff --git a/compiler/shared_ast/expr.ml b/compiler/shared_ast/expr.ml index 5d4d694c..618e6dba 100644 --- a/compiler/shared_ast/expr.ml +++ b/compiler/shared_ast/expr.ml @@ -229,9 +229,6 @@ let empty_thunked_term mark = Marked.mark pos (TArrow (Marked.mark pos (TLit TUnit), ty))) mark)) -let make_let_in_raw x tau e1 e2 mark = - make_app (make_abs [| x |] e2 [tau] mark) [e1] mark - let make_let_in x tau e1 e2 pos = let m_e1 = Marked.get_mark (Bindlib.unbox e1) in let m_e2 = Marked.get_mark (Bindlib.unbox e2) in diff --git a/compiler/shared_ast/expr.mli b/compiler/shared_ast/expr.mli index 0fd7eaa4..27346023 100644 --- a/compiler/shared_ast/expr.mli +++ b/compiler/shared_ast/expr.mli @@ -184,15 +184,6 @@ val make_let_in : Utils.Pos.t -> ('a, 'm mark) gexpr box -val make_let_in_raw : - ('a, 't) gexpr Var.t -> - typ -> - ('a, 't) gexpr box -> - ('a, 't) gexpr box -> - 't -> - ('a, 't) gexpr box -(** Version with any mark; to be removed once we use the [mark] type everywhere. *) - val make_multiple_let_in : ('a, 'm mark) gexpr Var.vars -> typ list -> diff --git a/compiler/surface/desugaring.ml b/compiler/surface/desugaring.ml index bf491b3a..d0b11be1 100644 --- a/compiler/surface/desugaring.ml +++ b/compiler/surface/desugaring.ml @@ -124,11 +124,12 @@ let rec translate_expr (scope : ScopeName.t) (inside_definition_of : Desugared.Ast.ScopeDef.t Marked.pos option) (ctxt : Name_resolution.context) - ((naked_expr, pos) : Ast.expression Marked.pos) : - Desugared.Ast.expr Bindlib.box = + (expr : Ast.expression Marked.pos) : Desugared.Ast.expr Bindlib.box = let scope_ctxt = Scopelang.Ast.ScopeMap.find scope ctxt.scopes in let rec_helper = translate_expr scope inside_definition_of ctxt in - match naked_expr with + let pos = Marked.get_mark expr in + let emark = Untyped { pos } in + match Marked.unmark expr with | Binop ( (Ast.And, _pos_op), ( TestMatchCase (e1_sub, ((constructors, Some binding), pos_pattern)), @@ -146,35 +147,35 @@ let rec translate_expr let nop_var = Var.make "_" in Bindlib.unbox (Expr.make_abs [| nop_var |] - (Bindlib.box (ELit (LBool false), pos)) - [tau] pos) + (Bindlib.box (ELit (LBool false), emark)) + [tau] emark) else let ctxt, binding_var = Name_resolution.add_def_local_var ctxt (Marked.unmark binding) in let e2 = translate_expr scope inside_definition_of ctxt e2 in - Bindlib.unbox (Expr.make_abs [| binding_var |] e2 [tau] pos)) + Bindlib.unbox (Expr.make_abs [| binding_var |] e2 [tau] emark)) (EnumMap.find enum_uid ctxt.enums) in Bindlib.box_apply - (fun e1_sub -> EMatchS (e1_sub, enum_uid, cases), pos) + (fun e1_sub -> EMatchS (e1_sub, enum_uid, cases), emark) (translate_expr scope inside_definition_of ctxt e1_sub) | IfThenElse (e_if, e_then, e_else) -> Bindlib.box_apply3 - (fun e_if e_then e_else -> EIfThenElse (e_if, e_then, e_else), pos) + (fun e_if e_then e_else -> EIfThenElse (e_if, e_then, e_else), emark) (rec_helper e_if) (rec_helper e_then) (rec_helper e_else) - | Binop (op, e1, e2) -> + | Binop ((op, pos), e1, e2) -> let op_term = - Marked.same_mark_as (EOp (Binop (translate_binop (Marked.unmark op)))) op + Marked.mark (Untyped { pos }) (EOp (Binop (translate_binop op))) in Bindlib.box_apply2 - (fun e1 e2 -> EApp (op_term, [e1; e2]), pos) + (fun e1 e2 -> EApp (op_term, [e1; e2]), emark) (rec_helper e1) (rec_helper e2) - | Unop (op, e) -> + | Unop ((op, pos), e) -> let op_term = - Marked.same_mark_as (EOp (Unop (translate_unop (Marked.unmark op)))) op + Marked.mark (Untyped { pos }) (EOp (Unop (translate_unop op))) in - Bindlib.box_apply (fun e -> EApp (op_term, [e]), pos) (rec_helper e) + Bindlib.box_apply (fun e -> EApp (op_term, [e]), emark) (rec_helper e) | Literal l -> let untyped_term = match l with @@ -222,7 +223,7 @@ let rec translate_expr "There is an error in this date, it does not correspond to a \ correct calendar day")) in - Bindlib.box (untyped_term, pos) + Bindlib.box (untyped_term, emark) | Ident x -> ( (* first we check whether this is a local var, then we resort to scope-wide variables *) @@ -268,12 +269,12 @@ let rec translate_expr (* we take the last state in the chain *) Some (List.hd (List.rev states))) in - Bindlib.box (ELocation (DesugaredScopeVar ((uid, pos), x_state)), pos) + Bindlib.box (ELocation (DesugaredScopeVar ((uid, pos), x_state)), emark) | None -> Name_resolution.raise_unknown_identifier "for a local or scope-wide variable" (x, pos)) | Some uid -> - Expr.make_var (uid, pos) + Expr.make_var (uid, emark) (* the whole box thing is to accomodate for this case *)) | Dotted (e, c, x) -> ( match Marked.unmark e with @@ -292,7 +293,7 @@ let rec translate_expr ( ELocation (SubScopeVar (subscope_real_uid, (subscope_uid, pos), (subscope_var_uid, pos))), - pos ) + emark ) | _ -> ( (* In this case e.x is the struct field x access of expression e *) let e = translate_expr scope inside_definition_of ctxt e in @@ -316,7 +317,7 @@ let rec translate_expr (StructMap.bindings x_possible_structs) else let s_uid, f_uid = StructMap.choose x_possible_structs in - Bindlib.box_apply (fun e -> EStructAccess (e, f_uid, s_uid), pos) e + Bindlib.box_apply (fun e -> EStructAccess (e, f_uid, s_uid), emark) e | Some c_name -> ( try let c_uid = @@ -324,7 +325,9 @@ let rec translate_expr in try let f_uid = StructMap.find c_uid x_possible_structs in - Bindlib.box_apply (fun e -> EStructAccess (e, f_uid, c_uid), pos) e + Bindlib.box_apply + (fun e -> EStructAccess (e, f_uid, c_uid), emark) + e with Not_found -> Errors.raise_spanned_error pos "Struct %s does not contain field %s" (Marked.unmark c_name) (Marked.unmark x) @@ -333,7 +336,7 @@ let rec translate_expr "Struct %s has not been defined before" (Marked.unmark c_name)))) | FunCall (f, arg) -> Bindlib.box_apply2 - (fun f arg -> EApp (f, [arg]), pos) + (fun f arg -> EApp (f, [arg]), emark) (rec_helper f) (rec_helper arg) | LetIn (x, e1, e2) -> let ctxt, v = Name_resolution.add_def_local_var ctxt (Marked.unmark x) in @@ -341,9 +344,11 @@ let rec translate_expr let fn = Expr.make_abs [| v |] (translate_expr scope inside_definition_of ctxt e2) - [tau] pos + [tau] emark in - Bindlib.box_apply2 (fun fn arg -> EApp (fn, [arg]), pos) fn (rec_helper e1) + Bindlib.box_apply2 + (fun fn arg -> EApp (fn, [arg]), emark) + fn (rec_helper e1) | StructLit (s_name, fields) -> let s_uid = try Desugared.Ast.IdentMap.find (Marked.unmark s_name) ctxt.struct_idmap @@ -370,8 +375,7 @@ let rec translate_expr | Some e_field -> Errors.raise_multispanned_error [ - None, Marked.get_mark f_e; - None, Marked.get_mark (Bindlib.unbox e_field); + None, Marked.get_mark f_e; None, Expr.pos (Bindlib.unbox e_field); ] "The field %a has been defined twice:" StructFieldName.format_t f_uid); @@ -389,20 +393,17 @@ let rec translate_expr expected_s_fields; Bindlib.box_apply - (fun s_fields -> EStruct (s_uid, s_fields), pos) + (fun s_fields -> EStruct (s_uid, s_fields), emark) (LiftStructFieldMap.lift_box s_fields) - | EnumInject (enum, constructor, payload) -> ( + | EnumInject (enum, (constructor, pos_constructor), payload) -> ( let possible_c_uids = - try - Desugared.Ast.IdentMap.find - (Marked.unmark constructor) - ctxt.constructor_idmap + try Desugared.Ast.IdentMap.find constructor ctxt.constructor_idmap with Not_found -> - Errors.raise_spanned_error - (Marked.get_mark constructor) + Errors.raise_spanned_error pos_constructor "The name of this constructor has not been defined before, maybe it \ is a typo?" in + let mark_constructor = Untyped { pos = pos_constructor } in match enum with | None -> @@ -410,8 +411,7 @@ let rec translate_expr (* No constructor name was specified *) EnumMap.cardinal possible_c_uids > 1 then - Errors.raise_spanned_error - (Marked.get_mark constructor) + Errors.raise_spanned_error pos_constructor "This constructor name is ambiguous, it can belong to %a. \ Desambiguate it by prefixing it with the enum name." (Format.pp_print_list @@ -429,10 +429,10 @@ let rec translate_expr ( EEnumInj ( (match payload with | Some e' -> e' - | None -> ELit LUnit, Marked.get_mark constructor), + | None -> ELit LUnit, mark_constructor), c_uid, e_uid ), - pos )) + emark )) (Bindlib.box_opt payload) | Some enum -> ( try @@ -450,15 +450,14 @@ let rec translate_expr ( EEnumInj ( (match payload with | Some e' -> e' - | None -> ELit LUnit, Marked.get_mark constructor), + | None -> ELit LUnit, mark_constructor), c_uid, e_uid ), - pos )) + emark )) (Bindlib.box_opt payload) with Not_found -> Errors.raise_spanned_error pos "Enum %s does not contain case %s" - (Marked.unmark enum) - (Marked.unmark constructor) + (Marked.unmark enum) constructor with Not_found -> Errors.raise_spanned_error (Marked.get_mark enum) "Enum %s has not been defined before" (Marked.unmark enum))) @@ -469,7 +468,7 @@ let rec translate_expr cases in Bindlib.box_apply2 - (fun e1 cases_d -> EMatchS (e1, e_uid, cases_d), pos) + (fun e1 cases_d -> EMatchS (e1, e_uid, cases_d), emark) e1 (LiftEnumConstructorMap.lift_box cases_d) | TestMatchCase (e1, pattern) -> @@ -490,16 +489,17 @@ let rec translate_expr Bindlib.unbox (Expr.make_abs [| nop_var |] (Bindlib.box - (ELit (LBool (EnumConstructor.compare c_uid c_uid' = 0)), pos)) - [tau] pos)) + ( ELit (LBool (EnumConstructor.compare c_uid c_uid' = 0)), + emark )) + [tau] emark)) (EnumMap.find enum_uid ctxt.enums) in Bindlib.box_apply - (fun e -> EMatchS (e, enum_uid, cases), pos) + (fun e -> EMatchS (e, enum_uid, cases), emark) (translate_expr scope inside_definition_of ctxt e1) | ArrayLit es -> Bindlib.box_apply - (fun es -> EArray es, pos) + (fun es -> EArray es, emark) (Bindlib.box_list (List.map rec_helper es)) | CollectionOp ( (((Ast.Filter | Ast.Map) as op'), _pos_op'), @@ -514,7 +514,7 @@ let rec translate_expr Expr.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) [TAny, pos] - pos + emark in Bindlib.box_apply2 (fun f_pred collection -> @@ -524,9 +524,9 @@ let rec translate_expr | Ast.Map -> Binop Map | Ast.Filter -> Binop Filter | _ -> assert false (* should not happen *)), - pos ), + emark ), [f_pred; collection] ), - pos )) + emark )) f_pred collection | CollectionOp ( ( Ast.Aggregate (Ast.AggregateArgExtremum (max_or_min, pred_typ, init)), @@ -557,12 +557,14 @@ let rec translate_expr Expr.make_abs [| param |] (translate_expr scope inside_definition_of ctxt predicate) [TAny, pos] - pos + emark in let f_pred_var = Var.make "predicate" in - let f_pred_var_e = Expr.make_var (f_pred_var, Marked.get_mark predicate) in + let f_pred_var_e = + Expr.make_var (f_pred_var, Untyped { pos = Marked.get_mark predicate }) + in let acc_var = Var.make "acc" in - let acc_var_e = Expr.make_var (acc_var, pos) in + let acc_var_e = Expr.make_var (acc_var, emark) in let item_var = Var.make "item" in let item_var_e = Expr.make_var (item_var, Marked.get_mark (Bindlib.unbox collection)) @@ -572,85 +574,87 @@ let rec translate_expr (fun acc_var_e item_var_e f_pred_var_e -> ( EIfThenElse ( ( EApp - ( (EOp (Binop cmp_op), pos_op'), + ( (EOp (Binop cmp_op), Untyped { pos = pos_op' }), [ - EApp (f_pred_var_e, [acc_var_e]), pos; - EApp (f_pred_var_e, [item_var_e]), pos; + EApp (f_pred_var_e, [acc_var_e]), emark; + EApp (f_pred_var_e, [item_var_e]), emark; ] ), - pos ), + emark ), acc_var_e, item_var_e ), - pos )) + emark )) acc_var_e item_var_e f_pred_var_e in let fold_f = - Expr.make_abs [| acc_var; item_var |] fold_body [TAny, pos; TAny, pos] pos + Expr.make_abs [| acc_var; item_var |] fold_body + [TAny, pos; TAny, pos] + emark in let fold = Bindlib.box_apply3 (fun fold_f collection init -> - EApp ((EOp (Ternop Fold), pos), [fold_f; init; collection]), pos) + EApp ((EOp (Ternop Fold), emark), [fold_f; init; collection]), emark) fold_f collection init in - Expr.make_let_in_raw f_pred_var (TAny, pos) f_pred fold pos + Expr.make_let_in f_pred_var (TAny, pos) f_pred fold pos | CollectionOp (op', param', collection, predicate) -> let ctxt, param = Name_resolution.add_def_local_var ctxt (Marked.unmark param') in let collection = rec_helper collection in + let mark = Untyped { pos = Marked.get_mark op' } in let init = match Marked.unmark op' with | Ast.Map | Ast.Filter | Ast.Aggregate (Ast.AggregateArgExtremum _) -> assert false (* should not happen *) - | Ast.Exists -> Bindlib.box (ELit (LBool false), Marked.get_mark op') - | Ast.Forall -> Bindlib.box (ELit (LBool true), Marked.get_mark op') + | Ast.Exists -> Bindlib.box (ELit (LBool false), mark) + | Ast.Forall -> Bindlib.box (ELit (LBool true), mark) | Ast.Aggregate (Ast.AggregateSum Ast.Integer) -> - Bindlib.box (ELit (LInt (Runtime.integer_of_int 0)), Marked.get_mark op') + Bindlib.box (ELit (LInt (Runtime.integer_of_int 0)), mark) | Ast.Aggregate (Ast.AggregateSum Ast.Decimal) -> - Bindlib.box - (ELit (LRat (Runtime.decimal_of_string "0")), Marked.get_mark op') + Bindlib.box (ELit (LRat (Runtime.decimal_of_string "0")), mark) | Ast.Aggregate (Ast.AggregateSum Ast.Money) -> Bindlib.box ( ELit (LMoney (Runtime.money_of_cents_integer (Runtime.integer_of_int 0))), - Marked.get_mark op' ) + mark ) | Ast.Aggregate (Ast.AggregateSum Ast.Duration) -> - Bindlib.box - ( ELit (LDuration (Runtime.duration_of_numbers 0 0 0)), - Marked.get_mark op' ) + Bindlib.box (ELit (LDuration (Runtime.duration_of_numbers 0 0 0)), mark) | Ast.Aggregate (Ast.AggregateSum t) -> Errors.raise_spanned_error pos "It is impossible to sum two values of type %a together" SurfacePrint.format_primitive_typ t | Ast.Aggregate (Ast.AggregateExtremum (_, _, init)) -> rec_helper init | Ast.Aggregate Ast.AggregateCount -> - Bindlib.box (ELit (LInt (Runtime.integer_of_int 0)), Marked.get_mark op') + Bindlib.box (ELit (LInt (Runtime.integer_of_int 0)), mark) in let acc_var = Var.make "acc" in - let acc = Expr.make_var (acc_var, Marked.get_mark param') in + let acc = + Expr.make_var (acc_var, Untyped { pos = Marked.get_mark param' }) + in let f_body = let make_body (op : binop) = Bindlib.box_apply2 (fun predicate acc -> - EApp ((EOp (Binop op), Marked.get_mark op'), [acc; predicate]), pos) + EApp ((EOp (Binop op), mark), [acc; predicate]), emark) (translate_expr scope inside_definition_of ctxt predicate) acc in let make_extr_body (cmp_op : binop) (t : typ) = let tmp_var = Var.make "tmp" in - let tmp = Expr.make_var (tmp_var, Marked.get_mark param') in - Expr.make_let_in_raw tmp_var t + let tmp = + Expr.make_var (tmp_var, Untyped { pos = Marked.get_mark param' }) + in + Expr.make_let_in tmp_var t (translate_expr scope inside_definition_of ctxt predicate) (Bindlib.box_apply2 (fun acc tmp -> ( EIfThenElse - ( ( EApp - ((EOp (Binop cmp_op), Marked.get_mark op'), [acc; tmp]), - pos ), + ( (EApp ((EOp (Binop cmp_op), mark), [acc; tmp]), emark), acc, tmp ), - pos )) + emark )) acc tmp) pos in @@ -688,15 +692,15 @@ let rec translate_expr ( EIfThenElse ( predicate, ( EApp - ( (EOp (Binop (Add KInt)), Marked.get_mark op'), + ( (EOp (Binop (Add KInt)), mark), [ acc; ( ELit (LInt (Runtime.integer_of_int 1)), Marked.get_mark predicate ); ] ), - pos ), + emark ), acc ), - pos )) + emark )) (translate_expr scope inside_definition_of ctxt predicate) acc in @@ -713,7 +717,7 @@ let rec translate_expr arrays is not always the type of the accumulator; for instance in AggregateCount. *); ] ), - pos )) + emark )) (Bindlib.bind_mvar [| acc_var; param |] f_body) in match Marked.unmark op' with @@ -740,45 +744,45 @@ let rec translate_expr in Bindlib.box_apply3 (fun f collection init -> - EApp ((EOp (Ternop Fold), pos), [f; init; collection]), pos) + EApp ((EOp (Ternop Fold), emark), [f; init; collection]), emark) f collection init | MemCollection (member, collection) -> let param_var = Var.make "collection_member" in - let param = Expr.make_var (param_var, pos) in + let param = Expr.make_var (param_var, emark) in let collection = rec_helper collection in - let init = Bindlib.box (ELit (LBool false), pos) in + let init = Bindlib.box (ELit (LBool false), emark) in let acc_var = Var.make "acc" in - let acc = Expr.make_var (acc_var, pos) in + let acc = Expr.make_var (acc_var, emark) in let f_body = Bindlib.box_apply3 (fun member acc param -> ( EApp - ( (EOp (Binop Or), pos), - [EApp ((EOp (Binop Eq), pos), [member; param]), pos; acc] ), - pos )) + ( (EOp (Binop Or), emark), + [EApp ((EOp (Binop Eq), emark), [member; param]), emark; acc] ), + emark )) (translate_expr scope inside_definition_of ctxt member) acc param in let f = Bindlib.box_apply - (fun binder -> EAbs (binder, [TLit TBool, pos; TAny, pos]), pos) + (fun binder -> EAbs (binder, [TLit TBool, pos; TAny, pos]), emark) (Bindlib.bind_mvar [| acc_var; param_var |] f_body) in Bindlib.box_apply3 (fun f collection init -> - EApp ((EOp (Ternop Fold), pos), [f; init; collection]), pos) + EApp ((EOp (Ternop Fold), emark), [f; init; collection]), emark) f collection init - | Builtin IntToDec -> Bindlib.box (EOp (Unop IntToRat), pos) - | Builtin MoneyToDec -> Bindlib.box (EOp (Unop MoneyToRat), pos) - | Builtin DecToMoney -> Bindlib.box (EOp (Unop RatToMoney), pos) - | Builtin Cardinal -> Bindlib.box (EOp (Unop Length), pos) - | Builtin GetDay -> Bindlib.box (EOp (Unop GetDay), pos) - | Builtin GetMonth -> Bindlib.box (EOp (Unop GetMonth), pos) - | Builtin GetYear -> Bindlib.box (EOp (Unop GetYear), pos) - | Builtin FirstDayOfMonth -> Bindlib.box (EOp (Unop FirstDayOfMonth), pos) - | Builtin LastDayOfMonth -> Bindlib.box (EOp (Unop LastDayOfMonth), pos) - | Builtin RoundMoney -> Bindlib.box (EOp (Unop RoundMoney), pos) - | Builtin RoundDecimal -> Bindlib.box (EOp (Unop RoundDecimal), pos) + | Builtin IntToDec -> Bindlib.box (EOp (Unop IntToRat), emark) + | Builtin MoneyToDec -> Bindlib.box (EOp (Unop MoneyToRat), emark) + | Builtin DecToMoney -> Bindlib.box (EOp (Unop RatToMoney), emark) + | Builtin Cardinal -> Bindlib.box (EOp (Unop Length), emark) + | Builtin GetDay -> Bindlib.box (EOp (Unop GetDay), emark) + | Builtin GetMonth -> Bindlib.box (EOp (Unop GetMonth), emark) + | Builtin GetYear -> Bindlib.box (EOp (Unop GetYear), emark) + | Builtin FirstDayOfMonth -> Bindlib.box (EOp (Unop FirstDayOfMonth), emark) + | Builtin LastDayOfMonth -> Bindlib.box (EOp (Unop LastDayOfMonth), emark) + | Builtin RoundMoney -> Bindlib.box (EOp (Unop RoundMoney), emark) + | Builtin RoundDecimal -> Bindlib.box (EOp (Unop RoundDecimal), emark) and disambiguate_match_and_build_expression (scope : ScopeName.t) @@ -796,12 +800,9 @@ and disambiguate_match_and_build_expression (c_uid : EnumConstructor.t) (e_uid : EnumName.t) (ctxt : Name_resolution.context) - (case_body : ('a * Pos.t) Bindlib.box) - (e_binder : - ( Desugared.Ast.naked_expr, - Desugared.Ast.naked_expr * Pos.t ) - Bindlib.mbinder - Bindlib.box) : 'c Bindlib.box = + (case_body : ('a * untyped mark) Bindlib.box) + (e_binder : (Desugared.Ast.expr, Desugared.Ast.expr) mbinder box) : + 'c Bindlib.box = Bindlib.box_apply2 (fun e_binder case_body -> Marked.same_mark_as @@ -840,7 +841,7 @@ and disambiguate_match_and_build_expression Errors.raise_multispanned_error [ None, Marked.get_mark case.match_case_expr; - None, Marked.get_mark (Bindlib.unbox e_case); + None, Expr.pos (Bindlib.unbox e_case); ] "The constructor %a has been matched twice:" EnumConstructor.format_t c_uid); @@ -937,10 +938,10 @@ let merge_conditions precond cond | Some precond, None -> Bindlib.box_apply - (fun precond -> Marked.unmark precond, default_pos) + (fun precond -> Marked.unmark precond, Untyped { pos = default_pos }) precond | None, Some cond -> cond - | None, None -> Bindlib.box (ELit (LBool true), default_pos) + | None, None -> Bindlib.box (ELit (LBool true), Untyped { pos = default_pos }) (** Translates a surface definition into condition into a desugared {!type: Desugared.Ast.rule} *) @@ -973,11 +974,11 @@ let process_default | TArrow (t_in, _), Some param_uid -> Some (Marked.unmark param_uid, t_in) | TArrow _, None -> Errors.raise_spanned_error - (Marked.get_mark (Bindlib.unbox cons)) + (Expr.pos (Bindlib.unbox cons)) "This definition has a function type but the parameter is missing" | _, Some _ -> Errors.raise_spanned_error - (Marked.get_mark (Bindlib.unbox cons)) + (Expr.pos (Bindlib.unbox cons)) "This definition has a parameter but its type is not a function" | _ -> None); rule_exception = exception_situation; From 1c3d5b9a75978fda388434754e88f2545b983aff Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Mon, 29 Aug 2022 15:46:06 +0200 Subject: [PATCH 30/31] Fix all lines too long problems & update assets --- compiler/literate/html.ml | 4 + compiler/literate/latex.ml | 26 - compiler/literate/literate_common.ml | 25 + compiler/literate/literate_common.mli | 4 + .../decrets_divers.catala_fr | 93 +- .../securite_sociale_D.catala_fr | 14 +- .../securite_sociale_L.catala_fr | 6 +- .../securite_sociale_R.catala_fr | 9 +- .../rozdzial_3.catala_pl | 3 +- examples/tutorial_en/tutorial_en.catala_en | 6 +- examples/us_tax_code/section_121.catala_en | 6 +- french_law/js/french_law.js | 114 +- .../law_source/allocations_familiales.ml | 192 +- french_law/python/src/aides_logement.py | 3961 +++++++++-------- .../python/src/allocations_familiales.py | 46 +- 15 files changed, 2291 insertions(+), 2218 deletions(-) diff --git a/compiler/literate/html.ml b/compiler/literate/html.ml index f8416cb7..5aed9a7f 100644 --- a/compiler/literate/html.ml +++ b/compiler/literate/html.ml @@ -174,6 +174,10 @@ let rec law_structure_to_html let t = pre_html t in if t = "" then () else Format.fprintf fmt "
%s
" t | A.CodeBlock (_, c, metadata) when not print_only_law -> + let start_line = Pos.get_start_line (Marked.get_mark c) - 1 in + let filename = Filename.basename (Pos.get_file (Marked.get_mark c)) in + let block_content = Marked.unmark c in + check_exceeding_lines start_line filename block_content; Format.fprintf fmt "
\n
%s
\n%s\n
" (if metadata then " code-metadata" else "") diff --git a/compiler/literate/latex.ml b/compiler/literate/latex.ml index 2998bae8..6171e484 100644 --- a/compiler/literate/latex.ml +++ b/compiler/literate/latex.ml @@ -184,32 +184,6 @@ codes={\catcode`\$=3\catcode`\^=7} (** {1 Weaving} *) -(** [check_exceeding_lines max_len start_line filename content] prints a warning - message for each lines of [content] exceeding [max_len] characters. *) -let check_exceeding_lines - ?(max_len = 80) - (start_line : int) - (filename : string) - (content : string) = - content - |> String.split_on_char '\n' - |> List.iteri (fun i s -> - if - Uutf.String.fold_utf_8 (fun (acc : int) _ _ -> acc + 1) 0 s > max_len - then ( - Cli.warning_print "The line %s in %s is exceeding %s characters:" - (Cli.with_style - ANSITerminal.[Bold; yellow] - "%d" - (start_line + i + 1)) - (Cli.with_style ANSITerminal.[Bold; magenta] "%s" filename) - (Cli.with_style ANSITerminal.[Bold; red] "%d" max_len); - Cli.warning_print "%s%s" (String.sub s 0 max_len) - (Cli.with_style - ANSITerminal.[red] - "%s" - String.(sub s max_len (length s - max_len))))) - let rec law_structure_to_latex (language : C.backend_lang) (print_only_law : bool) diff --git a/compiler/literate/literate_common.ml b/compiler/literate/literate_common.ml index 83cdf383..68aa6f6d 100644 --- a/compiler/literate/literate_common.ml +++ b/compiler/literate/literate_common.ml @@ -99,3 +99,28 @@ let run_pandoc (s : string) (backend : [ `Html | `Latex ]) : string = Sys.remove tmp_file_in; Sys.remove tmp_file_out; tmp_file_as_string + +let check_exceeding_lines + ?(max_len = 80) + (start_line : int) + (filename : string) + (content : string) = + content + |> String.split_on_char '\n' + |> List.iteri (fun i s -> + let len_s = + Uutf.String.fold_utf_8 (fun (acc : int) _ _ -> acc + 1) 0 s + in + if len_s > max_len then ( + Cli.warning_print "The line %s in %s is exceeding %s characters:" + (Cli.with_style + ANSITerminal.[Bold; yellow] + "%d" + (start_line + i + 1)) + (Cli.with_style ANSITerminal.[Bold; magenta] "%s" filename) + (Cli.with_style ANSITerminal.[Bold; red] "%d" max_len); + Cli.warning_print "%s%s" (String.sub s 0 max_len) + (Cli.with_style + ANSITerminal.[red] + "%s" + String.(sub s max_len (len_s - max_len))))) diff --git a/compiler/literate/literate_common.mli b/compiler/literate/literate_common.mli index edbcbc82..24741079 100644 --- a/compiler/literate/literate_common.mli +++ b/compiler/literate/literate_common.mli @@ -44,3 +44,7 @@ val get_language_extension : Cli.backend_lang -> string val run_pandoc : string -> [ `Html | `Latex ] -> string (** Runs the [pandoc] on a string to pretty-print markdown features into the desired format. *) + +val check_exceeding_lines : ?max_len:int -> int -> string -> string -> unit +(** [check_exceeding_lines ~max_len start_line filename content] prints a + warning message for each lines of [content] exceeding [max_len] characters. *) diff --git a/examples/allocations_familiales/decrets_divers.catala_fr b/examples/allocations_familiales/decrets_divers.catala_fr index 29387d38..56a65ebe 100644 --- a/examples/allocations_familiales/decrets_divers.catala_fr +++ b/examples/allocations_familiales/decrets_divers.catala_fr @@ -246,7 +246,8 @@ A compter de 2021 57,28 € 5,88 % 32 % champ d'application AllocationsFamiliales sous condition résidence = Mayotte: # Premier enfant - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2011-01-01| et date_courante <=@ |2011-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -254,7 +255,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 14,50 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2012-01-01| et date_courante <=@ |2012-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -262,7 +264,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 13,93 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2013-01-01| et date_courante <=@ |2013-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -270,7 +273,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 13,35 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2014-01-01| et date_courante <=@ |2014-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -278,7 +282,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 12,78 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2015-01-01| et date_courante <=@ |2015-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -286,7 +291,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 12,20 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2016-01-01| et date_courante <=@ |2016-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -294,7 +300,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 11,63 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2017-01-01| et date_courante <=@ |2017-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -302,7 +309,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 11,05 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -310,7 +318,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 9,76 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -318,7 +327,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 8,47 % sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| et non avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à @@ -326,7 +336,8 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: alors bmaf.montant *€ 7,17% sinon 0 € - exception mayotte définition montant_initial_base_premier_enfant sous condition + exception mayotte définition montant_initial_base_premier_enfant + sous condition avait_enfant_à_charge_avant_1er_janvier_2012 conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 0 @@ -334,70 +345,80 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: sinon 0 € # Deuxième enfant - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2011-01-01| et date_courante <=@ |2011-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 23,2 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2012-01-01| et date_courante <=@ |2012-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 23,79 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2013-01-01| et date_courante <=@ |2013-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 24,37 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2014-01-01| et date_courante <=@ |2014-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 24,96 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2015-01-01| et date_courante <=@ |2015-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 25,55 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2016-01-01| et date_courante <=@ |2016-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 26,13 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2017-01-01| et date_courante <=@ |2017-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 26,72 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 28,04 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 alors bmaf.montant *€ 29,36 % sinon 0 € - exception mayotte définition montant_initial_base_deuxième_enfant sous condition + exception mayotte définition montant_initial_base_deuxième_enfant + sous condition date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 1 @@ -405,70 +426,80 @@ champ d'application AllocationsFamiliales sous condition résidence = Mayotte: sinon 0 € # Troisième enfant - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2011-01-01| et date_courante <=@ |2011-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 4,63 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2012-01-01| et date_courante <=@ |2012-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 5,39 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2013-01-01| et date_courante <=@ |2013-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 6,15 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2014-01-01| et date_courante <=@ |2014-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 6,90 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2015-01-01| et date_courante <=@ |2015-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 7,66 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2016-01-01| et date_courante <=@ |2016-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 8,42 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2017-01-01| et date_courante <=@ |2017-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 9,18 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2018-01-01| et date_courante <=@ |2018-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 10,89 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2019-01-01| et date_courante <=@ |2019-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 alors bmaf.montant *€ 12,59 % sinon 0 € - exception définition montant_initial_base_troisième_enfant_mayotte sous condition + exception définition montant_initial_base_troisième_enfant_mayotte + sous condition date_courante >=@ |2020-01-01| et date_courante <=@ |2020-12-31| conséquence égal à si nombre de enfants_à_charge_droit_ouvert_prestation_familiale > 2 diff --git a/examples/allocations_familiales/securite_sociale_D.catala_fr b/examples/allocations_familiales/securite_sociale_D.catala_fr index f3b6ace3..646df930 100644 --- a/examples/allocations_familiales/securite_sociale_D.catala_fr +++ b/examples/allocations_familiales/securite_sociale_D.catala_fr @@ -165,7 +165,8 @@ champ d'application AllocationsFamiliales : (ressources_ménage >€ plafond_I_d521_3) et (ressources_ménage <=€ plafond_I_d521_3 +€ allocation *€ 12,0 ) conséquence égal à - (plafond_I_d521_3 +€ allocation *€ 12,0 -€ ressources_ménage) *€ (1,0 /. 12,0) + (plafond_I_d521_3 +€ allocation *€ 12,0 -€ ressources_ménage) *€ + (1,0 /. 12,0) exception définition complément_dégressif de allocation @@ -173,7 +174,8 @@ champ d'application AllocationsFamiliales : (ressources_ménage >€ plafond_II_d521_3) et (ressources_ménage <=€ plafond_II_d521_3 +€ allocation *€ 12,0) conséquence égal à - (plafond_II_d521_3 +€ allocation *€ 12,0 -€ ressources_ménage) *€ (1,0 /. 12,0) + (plafond_II_d521_3 +€ allocation *€ 12,0 -€ ressources_ménage) *€ + (1,0 /. 12,0) # Dans les autres cas, le dépassement est nul définition complément_dégressif de allocations égal à 0 € @@ -210,8 +212,8 @@ de calcul des allocations familiales par enfant ; ```catala # TODO Liane: la syntaxe de la phrase est très ambiguë, on a l'impression que -# c'est la BMAF qui est "par enfant" et pas le montant de l'allocation forfaitaire -# Erreur de rédaction ? Problème juridique ? +# c'est la BMAF qui est "par enfant" et pas le montant de l'allocation +# forfaitaire. Erreur de rédaction ? Problème juridique ? champ d'application AllocationsFamiliales : définition montant_versé_forfaitaire_par_enfant sous condition @@ -320,8 +322,8 @@ l'année civile de référence, par arrêté des ministres chargés de la sécur sociale, du budget et de l'agriculture. ```catala -# Nota : ces montants sont en réalités remis à jour chaque année par des décrets, -# voir decrets_divers.catala_fr +# Nota : ces montants sont en réalités remis à jour chaque année par des +# décrets, voir decrets_divers.catala_fr ``` #### Livre 7 : Régimes divers - Dispositions diverses diff --git a/examples/allocations_familiales/securite_sociale_L.catala_fr b/examples/allocations_familiales/securite_sociale_L.catala_fr index 79a68ab8..21c6a747 100644 --- a/examples/allocations_familiales/securite_sociale_L.catala_fr +++ b/examples/allocations_familiales/securite_sociale_L.catala_fr @@ -397,9 +397,9 @@ Les allocations familiales sont dues, pour tout enfant, à la personne qui a effectivement la charge de celui-ci. ```catala -# TODO Liane: Angle mort, ici c'est marqué "effectivement la charge" mais dans l'article de -# L521-2 il faut charge effective ET permanente. Pourquoi cette différence ? -# Quelles conséquences pratiques ? +# TODO Liane: Angle mort, ici c'est marqué "effectivement la charge" mais dans +# l'article de L521-2 il faut charge effective ET permanente. Pourquoi +# cette différence ? Quelles conséquences pratiques ? # Apparemment en 1987 il y avait encore des exceptions pour certains agents # publics d'outre-mer diff --git a/examples/allocations_familiales/securite_sociale_R.catala_fr b/examples/allocations_familiales/securite_sociale_R.catala_fr index a03e46fb..2cc2d527 100644 --- a/examples/allocations_familiales/securite_sociale_R.catala_fr +++ b/examples/allocations_familiales/securite_sociale_R.catala_fr @@ -13,9 +13,9 @@ ans sous réserve que leur rémunération n'excède pas le plafond fixé au deux alinéa du présent article. ```catala -# Attention: ici la condition de ressources au dessous du plafond est une répétition -# par rapport au texte de L512-3. On ne remet donc pas le code ici correspondant -# à cette limitation. +# Attention: ici la condition de ressources au dessous du plafond est une +# répétition par rapport au texte de L512-3. On ne remet donc pas le code ici +# correspondant à cette limitation. champ d'application PrestationsFamiliales : définition âge_l512_3_2 égal à 20 an @@ -173,7 +173,8 @@ alinéa de l'article R. 521-3. ```catala # Le renvoi ci-dessus ne fait qu'annoncer qu'on va appliquer un système # de décote pour garde alternée au système de majorations. -# Ce renvoi signifie que notre liste enfants_à_charge_droit_ouvert_prestation_familiale +# Ce renvoi signifie que notre liste +# enfants_à_charge_droit_ouvert_prestation_familiale # qui était utilisée pour la prestation de base est la même que la liste # d'enfant utilisée pour le calcul des majorations ``` diff --git a/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl b/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl index c469d4ce..9a11a794 100644 --- a/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl +++ b/examples/polish_taxes/podatek_od_czynnosci_cywilnoprawnych/rozdzial_3.catala_pl @@ -91,7 +91,8 @@ deklaracja zakres PozyczkaLubDepozytNieprawidlowy: zakres PozyczkaLubDepozytNieprawidlowy: definicja podatek wynosi - kwota *$ stawka_podatku # TODO: extract somehow? this exists in every declaration + kwota *$ stawka_podatku # TODO: extract somehow? + # this exists in every declaration zakres PozyczkaLubDepozytNieprawidlowy: definicja stawka_podatku wynosi 0.5% diff --git a/examples/tutorial_en/tutorial_en.catala_en b/examples/tutorial_en/tutorial_en.catala_en index 12bebb5a..00ef5d4c 100644 --- a/examples/tutorial_en/tutorial_en.catala_en +++ b/examples/tutorial_en/tutorial_en.catala_en @@ -600,9 +600,9 @@ scope BasisForFineDetermination : # But then, how to account for the provision of the law that reverts the # mechanism canceling taxes for individuals earning less than $10,000 dollars? - # This is where the "context" concept comes into play. Indeed, we had annotated - # the "income_tax" variable of "NewIncomeTaxComputationFixed" with the - # "context" attribute. "context" is a variant of "input" that exposes the + # This is where the "context" concept comes into play. Indeed, we had + # annotated the "income_tax" variable of "NewIncomeTaxComputationFixed" with + # the "context" attribute. "context" is a variant of "input" that exposes the # variable as an input of the scope. However, it is more permissive than # "input" because it lets you re-define the "context" variable inside its # own scope. Then, you're faced with a choice for the value of "income_tax": diff --git a/examples/us_tax_code/section_121.catala_en b/examples/us_tax_code/section_121.catala_en index 0dc3fc5f..4569c6ec 100644 --- a/examples/us_tax_code/section_121.catala_en +++ b/examples/us_tax_code/section_121.catala_en @@ -205,7 +205,8 @@ scope Section121SinglePerson: else $0 scope Section121TwoPersons: - definition section121a_requirements_met equals section121Person1.requirements_met + definition section121a_requirements_met equals + section121Person1.requirements_met definition income_excluded_from_gross_income_uncapped equals section121Person1.income_excluded_from_gross_income_uncapped @@ -379,7 +380,8 @@ scope Section121TwoPasses under condition definition first_pass.date_of_sale_or_exchange equals match return_type with pattern - -- SingleReturnSurvivingSpouse of single_data: single_data.date_of_spouse_death + -- SingleReturnSurvivingSpouse of single_data: + single_data.date_of_spouse_death -- SingleReturn of return: date_of_sale_or_exchange # does not happen -- JointReturn of return: date_of_sale_or_exchange # does not happen diff --git a/french_law/js/french_law.js b/french_law/js/french_law.js index 68a4b4f7..903533dd 100644 --- a/french_law/js/french_law.js +++ b/french_law/js/french_law.js @@ -5,7 +5,7 @@ get(){var global=this||self;global.globalThis=global;delete Object.prototype._T_}}(Object));(function(globalThis){"use strict";var joo_global_object=globalThis,jsoo_exports=typeof -module==="object"&&module.exports||globalThis,str_38527="38527",num_1133=1133,num_857=857,num_1521=1521,num_2728=2728,str_ligibilit_Pre_abr="\xc3\x89ligibilit\xc3\xa9PrestationsFamiliales",str_logement_foyer="logement_foyer",num_319=319,str_Article_L521_1="Article L521-1",num_794=794,num_1056=1056,num_289=289,str_Paragraphe_2_O_abr="Paragraphe 2 : Ouverture du droit et liquidation.",num_43200=43200.,num_365180284=365180284,str_Changement="Changement",num_775=775,str_26714="26714",num_539=539,str_EMFILE="EMFILE",str_locatif_date_cou_abr="locatif.date_courante",num_163=163,str_SaintMartin="SaintMartin",str_1015="1015",str_Section_1_Seui_abr="Section 1 : Seuils de constitution d'un impay\xc3\xa9",str_Article_1="Article 1",str_559500="559500",str_aide_finale_formule="aide_finale_formule",num_122=122,str_35630="35630",num_3589=3589,num_992015837=992015837,str_Article_31="Article 31",str_50="50",str_Unexpected="Unexpected '",num_299=299,num_181=181,str_EACCES="EACCES",num_305=305,num_862=862,str_Article_19="Article 19",num_607=607,num_128=128,str_Avant="Avant",str_43000="43000",num_1127=1127,str_identifiant="identifiant",str_Oui="Oui",num_683=683,str_Article_D832_26="Article D832-26",num_573=573,num_383=383,num_146=146,str$4=">",num_575=575,num_4105=4105,num_731=731,num_153=153,num_1027=1027,num_297=297,str_EINPROGRESS="EINPROGRESS",num_2050=2050,num_1053=1053,num_1479=1479,str_Article_17="Article 17",str_Section_2_Acce_abr="Section 2 : Accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",num_914=914,str_Chapitre_5_Pre_abr="Chapitre 5 : Prestations familiales et prestations assimil\xc3\xa9es",str_baseMensuelleAll_abr="baseMensuelleAllocationsFamiliales",num_1125=1125,str_35762="35762",num_1779=1779,num_739=739,str_Calcul_du_montan_abr="Calcul du montant de l'allocation logement",num_2011=2011,num_2023=2023,num_1536=1536,num_295=295,str_Article_L841_1="Article L841-1",str_ServicesSociauxA_abr$2="ServicesSociauxAllocationVerseeALaFamille",str_186000="186000",str_Instruction_inte_abr$1="Instruction interminist\xc3\xa9rielle no DSS/SD2B/2020/33 du 18 f\xc3\xa9vrier 2020 relative \xc3\xa0 la revalorisation au 1er avril 2020 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",str_16_25="16.25",str_0_0315="0.0315",str_traitement_aide_abr$6="traitement_aide_finale_diminu\xc3\xa9",num_989=989,num_1769=1769,str_ligibilit_co_abr$2="\xc3\xa9ligibilit\xc3\xa9_commune.date_courante",num_1042=1042,str_40758="40758",num_5025=5025,str_e="e",num_313=313,num_896=896,str_Autre="Autre",num_2603=2603,str_locatif_b_n_fi_abr="locatif.b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s",num_505=505,num_1150=1150,str_Article_L822_2="Article L822-2",str_smic="smic",num_980=980,num_421=421,str_39445="39445",num_1071=1071,num_4925=4925,str_Article_D842_6="Article D842-6",num_1628=1628,num_43=-43,num_2053=2053,num_612=612,str_Neuf="Neuf",str_EROFS="EROFS",str_Article_27="Article 27",str_inf="inf",str_calculetteAidesA_abr$0="calculetteAidesAuLogementGardeAlternee",str_EPIPE="EPIPE",num_4696=4696,num_1815=1815,num_394=394,str_Circulaire_inter_abr="Circulaire interminist\xc3\xa9rielle N\xc2\xb0 DSS/SD2B/2017/352 du 22 d\xc3\xa9cembre 2017 relative \xc3\xa0 la revalorisation au 1er janvier 2018 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",num_685=685,str_41392="41392",num_111=111,num_929=929,num_676=676,str_Location="Location",num_2419=2419,num_967=967,num_898=898,str_240400="240400",str_ENOLCK="ENOLCK",str_Ordonnance_n_9_abr="Ordonnance n\xc2\xb0 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale",num_229=229,str_33500="33500",num_619=619,str_CalculNombrePart_abr$0="CalculNombrePartsAccessionPropri\xc3\xa9t\xc3\xa9",str_Article_D823_9="Article D823-9",str_traitement_aide_abr="traitement_aide_finale_minoration_forfaitaire",str_ERANGE="ERANGE",str_AM="AM",str_abr$0="\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\x01\x02_\0\xda\x01$\x01\xd7\x01\xd7\x01\x02\x02\xda\x01\xd7\x01_\0\x04\x02\x05\x02\xd8\x01_\0\x06\x02_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\x07\x02z\x01\b\x02\t\x02\n\x02\x0b\x02`\0`\0`\0`\0`\0`\0b\0\f\x02\xd7\x01\xf7\x01\r\x02\x0e\x02b\0\x0f\x02}\x01\x80\x01b\0\x10\x02\xdc\x01\x11\x02\xfb\x01\x12\x02\x13\x02\x14\x02b\0y\x01\x15\x02\xc2\x01b\0\x16\x02b\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\x17\x02\xee\x01\x18\x02\xfb\x01\xee\x01\x19\x02c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\x1a\x02\xc5\x01\x1b\x02d\0d\0d\0d\0d\0d\0\x1c\x02\xc2\x01\x1d\x02c\0c\0c\0c\0c\0c\0\x1e\x02\x1f\x02 \x02\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",str_infinity="infinity",str_2_5="2.5",str_Chapitre_IV_Im_abr="Chapitre IV : Impay\xc3\xa9s de d\xc3\xa9penses de logement",num_278=278,str_examples_allocat_abr$0="examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr",str_t="\\t",num_955=955,str_examples_aides_l_abr$10="examples/aides_logement/code_construction_legislatif.catala_fr",num_330=330,num_1057=1057,str_Titre_2_Presta_abr="Titre 2 : Prestations g\xc3\xa9n\xc3\xa9rales d'entretien",num_112=112,num_831=831,str_1000="1000",num_1131=1131,num_563=563,num_4145=4145,num_701=701,num_538=538,str_examples_aides_l_abr$9="examples/aides_logement/code_s\xc3\xa9curit\xc3\xa9_sociale.catala_fr",num_3179=3179,str_Unexpected_s_abr$0="Unexpected '%s' kind for the enumeration 'ElementPrestationsFamiliales.t'",num_599=599,num_1146=1146,num_2753=2753,num_4159=4159,str_Couple="Couple",str_SaintPierreEtMiq_abr="SaintPierreEtMiquelon",num_687=687,str_ESOCKTNOSUPPORT="ESOCKTNOSUPPORT",str_PrestationsFamil_abr="PrestationsFamiliales",str_l_mentPrestat_abr="\xc3\x89l\xc3\xa9mentPrestationsFamiliales",num_110=110,num_464=464,num_679=679,str_214700="214700",num_352=352,num_615=615,str_Calcul_quivalen_abr="Calcul\xc3\x89quivalenceLoyerMinimale",num_1096=1096,num_554=554,str_42926="42926",num_265=265,num_32=-32,num_1709=1709,str_39016="39016",num_847=847,str_AllocationLogeme_abr$0="AllocationLogementFamiliale",num_1023=1023,str_interfaceAllocat_abr="interfaceAllocationsFamiliales",num_561=561,num_769=769,str_AllocationLogeme_abr="AllocationLogementSociale",num_835=835,str_plafond_l512_3_2="plafond_l512_3_2",num_639=639,num_542=542,num_117=117,str_Chapitre_II_De_abr="Chapitre II : Des contributions pour le remboursement de la dette sociale.",str_examples_allocat_abr$5="examples/allocations_familiales/decrets_divers.catala_fr",str_compl_ment_d_g_abr="compl\xc3\xa9ment_d\xc3\xa9gressif",str_Livre_VIII_All_abr="Livre VIII : Allocations aux personnes \xc3\xa2g\xc3\xa9es - Allocation aux adultes handicap\xc3\xa9s - Aides \xc3\xa0 l'emploi pour la garde des jeunes enfants - Protection compl\xc3\xa9mentaire en mati\xc3\xa8re de sant\xc3\xa9",str_accession_propri_abr$5="accession_propri\xc3\xa9t\xc3\xa9.copropri\xc3\xa9t\xc3\xa9",str_240200="240200",str_Assert_failure="Assert_failure",num_778=778,str_Section_1_Sect_abr="Section 1 : Secteur locatif ordinaire",str_568400="568400",str_0_32="0.32",str_40961="40961",num_508=508,str_Non="Non",num_185=185,str_ENOTCONN="ENOTCONN",num_219=219,str_Article_R824_2="Article R824-2",num_1128=1128,num_1e14=1e14,str_D331_76_1="D331_76_1",str_Article_R521_3="Article R521-3",num_1825=1825,num_935=935,num_2022=2022,str_Fatal_error_exc_abr$0="Fatal error: exception %s\n",num_4204=4204,str_34865="34865",num_865=865,str_261800="261800",num_777=777,num_740=740,str_Article_2="Article 2",num_146097=146097,num_256=256,num_558=558,str_Article_L521_3="Article L521-3",str_Article_R822_1="Article R822-1",str_45064="45064",str_taux_francs_vers_abr="taux_francs_vers_euros",str_Archives_l_gisl_abr="Archives l\xc3\xa9gislatives et r\xc3\xa9glementaires",num_2462=2462,num_667=667,num_924=924,str_ENOSPC="ENOSPC",num_3402=3402,str_abattement_d_pe_abr$1="abattement_d\xc3\xa9pense_nette_minimale_d832_10",num_699=699,num_1469=1469,num_1075=1075,str_mensualit_li_abr="mensualit\xc3\xa9_\xc3\xa9ligible",num_2167=2167,str_D_cret_n_2021_abr="D\xc3\xa9cret n\xc2\xb0 2021-1741 du 22 d\xc3\xa9cembre 2021 portant rel\xc3\xa8vement du salaire minimum de croissance",str_ENOENT="ENOENT",num_5022=5022,num_384=384,num_288=288,str_0_0006="0.0006",num_315=315,str_EnfantLePlus_g="EnfantLePlus\xc3\x82g\xc3\xa9",num_259=259,num_841=841,num_437=437,str_EOVERFLOW="EOVERFLOW",num_556=556,str_examples_aides_l_abr$8="examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr",str_228000="228000",str_ENOTEMPTY="ENOTEMPTY",str_Article_13="Article 13",str_calcul_apl_logem_abr$2="calcul_apl_logement_foyer.nombre_personnes_\xc3\xa0_charge",str_35947="35947",str_D331_59_8="D331_59_8",str_Loyer="Loyer",num_3681=3681,num_162=162,num_564=564,num_1986=1986,num_1635=1635,str_brut_horaire="brut_horaire",num_647=647,str_x="x",num_4634=4634,str_Sous_section_1_abr$0="Sous-section 1 : Aides personnelles au logement",str_calculAidePerson_abr$2="calculAidePersonnaliseeLogementAccessionPropriete",num_547=547,str_Article_D755_5="Article D755-5",num_588=588,num_680=680,str_Article_D842_4="Article D842-4",num_4633=4633,str_d="%d",num_314=314,str_Z_of_substring_b_abr="Z.of_substring_base: invalid digit",str_ServicesSociauxA_abr$1="ServicesSociauxAllocationVers\xc3\xa9e\xc3\x80LaFamille",num_810=810,num_3499=3499,num_637=637,num_1900=1900,num_285=285,str_buffer_ml="buffer.ml",num_708=708,str_Prologue_aides_abr="Prologue : aides au logement",str_Secteur_accessio_abr="Secteur accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",str_39590="39590",str_accession_propri_abr$4="accession_propri\xc3\xa9t\xc3\xa9.date_signature_pr\xc3\xaat",str_ENOBUFS="ENOBUFS",num_3405=3405,num_2008=2008,str_0_0179="0.0179",num_1051=1051,num_4057=4057,num_1121=1121,str_245700="245700",num_1474=1474,str_Prologue="Prologue",num_1701=1701,num_451=451,str_calcul_nombre_pa_abr="calcul_nombre_parts.nombre_personnes_\xc3\xa0_charge",str_Metropole="Metropole",num_100=100,num_1021=1021,num_851=851,str_prise_en_compte_abr="prise_en_compte_personne_\xc3\xa0_charge",num_4243=4243,num_702=702,num_420=420,num_5033=5033,num_300=300,str_3="3",str_Partie_r_glemen_abr$0="Partie r\xc3\xa9glementaire - D\xc3\xa9crets simples",num_413=413,str_169="169.",num_0_5=0.5,num_790=790,str_Article_D521_1="Article D521-1",str_conventionn_li_abr="conventionn\xc3\xa9_livre_III_titre_V_chap_III",num_622=622,num_399=399,num_965=965,str_Article_D842_11="Article D842-11",str_Livre_7_R_gim_abr="Livre 7 : R\xc3\xa9gimes divers - Dispositions diverses",num_107=107,num_381=381,num_345=345,str_Article_D842_12="Article D842-12",num_937=937,str_prestations_fami_abr="prestations_familiales",num_690=690,str_est_enfant_le_pl_abr="est_enfant_le_plus_\xc3\xa2g\xc3\xa9",str_26440="26440",num_649=649,str_201700="201700",str_Unix_Unix_error="Unix.Unix_error",num_1139=1139,str_calculAidePerson_abr$0="calculAidePersonnaliseeLogement",num_553=553,str_Stack_overflow="Stack_overflow",num_1655=1655,num_1472=1472,str_condition_2_r823_4="condition_2_r823_4",str_Sous_Section_2_abr="Sous-Section 2 : Conditions d'octroi de l'aide personnalis\xc3\xa9e au logement aux personnes r\xc3\xa9sidant dans un logement-foyer",str_ligibilit_Aid_abr$0="\xc3\x89ligibilit\xc3\xa9AidesPersonnelleLogement",str_static="/static/",num_894=894,num_368=368,str_Not_found="Not_found",num_235=235,str_abr="\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0\x02\x02\x04\x02\0\0\x05\x02\x06\x02\x07\x02\b\x02\t\x02\n\x02\x0b\x02\f\x02\r\x02\x0e\x02\x0f\x02\x10\x02\x11\x02\x12\x02\x13\x02\x14\x02\x15\x02\x16\x02\x17\x02\x18\x02\x19\x02\x1a\x02\x1b\x02\x1c\x02\x1d\x02\x1e\x02\x1f\x02 \x02!\x02\x03\x02",str_1085="1085",num_2538=2538,str_41268="41268",str_calcul_apl_logem_abr$1="calcul_apl_logement_foyer.date_courante",str_examples_allocat_abr$4="examples/allocations_familiales/epilogue.catala_fr",num_695=695,num_1398=1398,str_Mayotte="Mayotte",num_848054398=848054398,str_smic_date_courante="smic.date_courante",num_1841=1841,str_1224="1224",str_calcul_apl_locatif="calcul_apl_locatif",str_accession_propri_abr$10="accession_propri\xc3\xa9t\xc3\xa9.situation_r822_11_13_17",str_calcul_plafond_m_abr$0="calcul_plafond_mensualit\xc3\xa9_d832_10_3",num_1720=1720,num_979=979,str_rmdir="rmdir",num_696=696,num_1069=1069,num_32752=32752,num_4838=4838,str_19100="19100",str_33623="33623",str_ELOOP="ELOOP",str_37478="37478",str_calcul_nombre_parts="calcul_nombre_parts",num_280=280,str_Article_R842_5="Article R842-5",str_Article_23="Article 23",num_1026=1026,num_149=149,str_montant="montant",str_Article_L521_2="Article L521-2",str_examples_allocat_abr="examples/allocations_familiales/../smic/smic.catala_fr",num_675=675,num_3724=3724,str_calculAllocation_abr$0="calculAllocationLogementLocatif",str_false="false",num_849=849,str_37906="37906",str_Invalid_integer="Invalid integer: ",str_PasDeChangement="PasDeChangement",str_ligibilit_abr="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 la prime de d\xc3\xa9m\xc3\xa9nagement",num_875=875,num_106=106,num_346=346,num_186=186,num_0x80=0x80,str_Fatal_error_exc_abr="Fatal error: exception ",str_Chapitre_1er_D_abr="Chapitre 1er : Dispositions relatives aux prestations",str_ligibilit_co_abr$1="\xc3\xa9ligibilit\xc3\xa9_commune",str_0_0234="0.0234",str_43378="43378",num_3538=3538,num_4333=4333,num_913=913,str_calcul_apl_logem_abr$5="calcul_apl_logement_foyer.date_conventionnement",num_2524=2524,num_1054=1054,num_303=303,str_25978="25978",num_5041=5041,str_src_calendar_bui_abr="src/calendar_builder.ml",num_493=493,str_Section_2_R_g_abr="Section 2 : R\xc3\xa8gles de non-cumul",str$16="_",num_1970=1970,num_833=833,str_eligibilitePrime_abr="eligibilitePrimeDeDemenagement",num_517=517,str_compare_functio_abr="compare: functional value",str_0="0.",num_444=444,str_40928="40928",str_19300="19300",num_529348384=529348384,num_1564=1564,num_411=411,num_978=978,str_197700="197700",str_Invalid_argument="Invalid_argument",num_656=656,num_1666=1666,str_EndCall="EndCall([ ",num_823=823,str_0_9="0.9",str_prise_en_charge="prise_en_charge",str_Article_R822_22="Article R822-22",num_1600=1600,str_calcul_aide_pers_abr="calcul_aide_personnalis\xc3\xa9e_logement",str_34301="34301",str_577500="577500",str_ni="%ni",num_324=324,num_4593=4593,num_86400$0=86400.,num_2020=2020,str_PersonneSeule="PersonneSeule",str_ENOMEM="ENOMEM",num_45=-45,num_2098=2098,num_559=559,str_0_0238="0.0238",str_Article_9="Article 9",str_225100="225100",num_3544=3544,str_AutresPersonnes="AutresPersonnes",str_6$0="6",num_495=495,num_1471=1471,num_4974=4974,num_672=672,str_EPROTONOSUPPORT="EPROTONOSUPPORT",str_173600="173600",num_858=858,str_0$1="0",str_Section_3_Loge_abr="Section 3 : Logements-foyers",str_ENETRESET="ENETRESET",str_EINVAL="EINVAL",str_EDOM="EDOM",str_examples_aides_l_abr$1="examples/aides_logement/prologue.catala_fr",str_Article_L161_17_2="Article L161-17-2",str_EFBIG="EFBIG",num_543=543,num_2410=2410,str_eligibiliteAides_abr="eligibiliteAidesPersonnelleLogement",num_248=248,num_322=322,num_1510=1510,num_2007=2007,str_208200="208200",str_Zone1="Zone1",str_R_glement_CE_abr="R\xc3\xa8glement (CE) n\xc2\xb02866/98 du conseil du 31 d\xc3\xa9cembre 1998 concernant les taux de conversion entre l'euro et les monnaies des \xc3\x89tats membres adoptant l'euro",str_Locataire="Locataire",str_37457="37457",num_301=301,num_396=396,str_562800="562800",str_535744="535744",str_235800="235800",num_403=403,num_555=555,num_540=540,num_930=930,str_resetLog="resetLog",num_1760=1760,str_AllocationsFamil_abr="AllocationsFamiliales",str_ge_l512_3_2="\xc3\xa2ge_l512_3_2",num_3268=3268,str_situation_famili_abr="situation_familiale_calcul_apl",str_GardeAlterneeAll_abr="GardeAlterneeAllocataireUnique",num_3475=3475,str_haut="haut",num_631=631,num_2107=2107,num_1644=1644,num_1456=1456,num_1476=1476,num_1024=1024,num_1143=1143,str_204761="204761",str_3_1="3.1",num_726=726,num_802=802,num_133=133,str_35780="35780",str_calculAidePerson_abr="calculAidePersonnaliseeLogementFoyer",num_567=567,num_945=945,num_982=982,num_366=366,num_0xffffff=0xffffff,str_34829="34829",str_locatif="locatif",num_812=812,num_4179=4179,str_Titre_III_Titre_abr="Titre III: Titre III : Dispositions communes relatives au financement",str_36378="36378",str_Calculette_globale="Calculette globale",str_EISCONN="EISCONN",str_z$2="::z",num_286=286,num_1670=1670,num_3370=3370,num_671=671,str_Article_R824_1="Article R824-1",num_1994=1994,num_805=805,num_465=465,num_2010=2010,num_3989=3989,str_Prologue_prest_abr="Prologue : prestations familiales",num_2147483647=2147483647,num_772=772,str_774="774",num_689=689,str_characters=", characters ",num_456=456,num_0x7F=0x7F,str_180100="180100",str_BaseMensuelleAll_abr="BaseMensuelleAllocationsFamiliales",str_819="819",str_prestations_fami_abr$1="prestations_familiales.r\xc3\xa9sidence",str_Chapitre_IV_Ca_abr="Chapitre IV : Calcul des allocations de logement en secteur accession",num_4603=4603,str_AllocationJourna_abr$0="AllocationJournali\xc3\xa8rePresenceParentale",str_ESHUTDOWN="ESHUTDOWN",num_611=611,str_0$0=".0",num_2546=2546,num_4127=4127,str_36733="36733",num_1665=1665,num_977=977,num_4340=4340,str_AllocationFamili_abr="AllocationFamilialesAvril2008",num_693=693,num_855=855,num_535=535,str_AllocationRentre_abr="AllocationRentreeScolaire",num_920=920,str_mensualit_mini_abr="mensualit\xc3\xa9_minimale",str_2$0="2.",num_691=691,num_737=737,str_Concubins="Concubins",str_calcul_plafond_m_abr$1="calcul_plafond_mensualit\xc3\xa9_d842_6_avec_copropri\xc3\xa9t\xc3\xa9",num_816=816,str_SaintBarth_lemy="SaintBarth\xc3\xa9lemy",str_Partie_l_gislative="Partie l\xc3\xa9gislative",num_2003=2003,str_examples_allocat_abr$3="examples/allocations_familiales/securite_sociale_D.catala_fr",str_Article_R823_4="Article R823-4",str_32956="32956",str_294500="294500",str_examples_aides_l_abr$6="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_R.catala_fr",str_locatif_logement_abr$0="locatif.logement_meubl\xc3\xa9_d842_2",str_RessourcesAidesP_abr="RessourcesAidesPersonnelleLogement",num_1035=1035,num_934=934,num_2004=2004,str_Montant_des_plaf_abr="Montant des plafonds de ressources",str_Annexe="Annexe",str_Section_1_B_n_abr="Section 1 : B\xc3\xa9n\xc3\xa9ficiaires",str_3524="3524",str_Article_D832_27="Article D832-27",num_1101=1101,num_3471=3471,str_500="500",str_Zone3="Zone3",str_locatif_type_aide="locatif.type_aide",num_187=187,num_770=770,num_471=471,str_40144="40144",num_2015=2015,str_prise_en_compte="prise_en_compte",num_2629=2629,num_533=533,num_5031=5031,num_4226=4226,num_838=838,num_613=613,num_2075=2075,str_223900="223900",str_ServicesSociauxA_abr$0="ServicesSociauxAllocationVers\xc3\xa9eAuxServicesSociaux",num_138=138,num_1998=1998,str_Livre_VIII_Aid_abr="Livre VIII : Aides personnelles au logement",str_225500="225500",str_caract_ristique_abr$0="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_6",str_38892="38892",str_accession_propri_abr$3="accession_propri\xc3\xa9t\xc3\xa9.mensualit\xc3\xa9_principale",str_nan="nan",str_calculNombrePart_abr$0="calculNombrePartLogementFoyer",num_646=646,str_Impay_D_penseL_abr="Impay\xc3\xa9D\xc3\xa9penseLogement",num_1403=1403,num_3271=3271,num_712=712,str_Calculette_avec_abr="Calculette avec garde altern\xc3\xa9e",str_ECHILD="ECHILD",num_0xdfff=0xdfff,str$3="/",str_4_3="4.3",str_ETOOMANYREFS="ETOOMANYREFS",num_3967=3967,num_2788=2788,num_1017=1017,num_951=951,num_1591=1591,num_1179=1179,str_ENOTDIR="ENOTDIR",str_ETIMEDOUT="ETIMEDOUT",num_2872=2872,num_1073741823=1073741823,num_273=273,str_0_0068="0.0068",str_r="\\r",str_34600="34600",str_calcul_allocatio_abr="calcul_allocation_logement",num_513=513,str_coefficient_pris_abr="coefficient_prise_en_charge",num_206=206,str_src_time_Zone_ml="src/time_Zone.ml",num_734=734,str_Article_D161_2_1_9="Article D161-2-1-9",num_674=674,str_EWOULDBLOCK="EWOULDBLOCK",str_Guyane="Guyane",str_PasDeTravaux="PasDeTravaux",num_311=311,num_255=255,str_Revenu="Revenu",str_Partie_r_glemen_abr="Partie r\xc3\xa9glementaire - D\xc3\xa9crets en Conseil d'Etat",str_droit_ouvert_maj_abr="droit_ouvert_majoration",str_Partie_r_glemen_abr$1="Partie r\xc3\xa9glementaire",num_3133=3133,str_Sous_section_4_abr$0="Sous-section 4 : Prise en compte du patrimoine",str_D_clarations_de_abr="D\xc3\xa9clarations des champs d'application",str_Chapitre_1er_G_abr="Chapitre 1er : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",str_End_of_file="End_of_file",str_calcul_apl_logem_abr$8="calcul_apl_logement_foyer.condition_2_du_832_25",str_Chapitre_V_Cal_abr="Chapitre V : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur logement-foyer",str_calculAllocation_abr$1="calculAllocationLogementFoyer",str_traitement_aide_abr$5="traitement_aide_finale_r\xc3\xa9duction_loyer_solidarit\xc3\xa9",str_Article_24="Article 24",num_3678=3678,str_Failure="Failure",str_267871="267871",num_630=630,num_3814=3814,num_771=771,num_218=218,num_4268=4268,str_167800="167800",num_906=906,str_CalculetteAidesA_abr$0="CalculetteAidesAuLogement",num_664=664,str_ENETDOWN="ENETDOWN",num_684=684,num_715=715,str_abr$2="\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",num_0xdc00=0xdc00,str_389618="389618",str_3$0="3.",num_3225=3225,str_185800="185800",str_0_0201="0.0201",num_1850=1850,num_880=880,str_Sys_error="Sys_error",num_275=275,num_4003=4003,str_Article_D521_2="Article D521-2",num_703=703,num_4230=4230,num_4915=4915,num_60=60.,str_nombre_personnes_abr="nombre_personnes_\xc3\xa0_charge_prises_en_compte",str_Sous_section_4_abr="Sous-section 4 : Assurance vieillesse",str_Printexc_handle_abr="Printexc.handle_uncaught_exception",num_4239=4239,str_Article_D832_24="Article D832-24",str_30500="30500",num_618=618,num_1079=1079,num_3928=3928,num_745=745,str_int_of_string="int_of_string",str_194810="194810",str_Chapitre_Ier_P_abr="Chapitre Ier : Principes g\xc3\xa9n\xc3\xa9raux",str_Article_37="Article 37",str_examples_aides_l_abr$5="examples/aides_logement/arrete_2019-09-27.catala_fr",str_39340="39340",str_z=":z",num_4958=4958,str_name="name",num_103=103,str_Chapitre_2_Mod_abr="Chapitre 2 : Modalit\xc3\xa9s de liquidation et de versement des allocations de logement",num_428=428,num_2506=2506,num_792=792,str_traitement_aide_abr$2="traitement_aide_finale_redevance",num_132=132,str_1_4="1.4",num_698=698,num_803=803,str$10=" ])",str_31797="31797",num_1654=1654,num_839=839,str_19484="19484",num_988=988,str_Article_7="Article 7",str_ENODEV="ENODEV",num_773=773,str_Li="%Li",num_3963=3963,num_864=864,num_591=591,str_r_muneration_me_abr="r\xc3\xa9muneration_mensuelle",num_302=302,num_205=205,str_Article_14="Article 14",str_34570="34570",str_date_de_naissance="date_de_naissance",num_1090=1090,str_base_mensuelle_a_abr="base_mensuelle_allocations_familiales",num_1742=1742,num_2515=2515,num_927=927,num_2380=2380,str_z$1="_z",num_2000=2000,num_1951=1951,str_locatif_g_es_abr="locatif.\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers",num_860=860,num_4042=4042,num_2124=2124,num_3961=3961,num_136=136,str_Titre_IV_Alloc_abr$0="Titre IV : Allocations de logement",num_2763=2763,num_5055=5055,num_959=959,str_InterfaceAllocat_abr="InterfaceAllocationsFamiliales",str_retrieveRawEvents="retrieveRawEvents",num_985=985,num_1077=1077,num_4078=4078,str_Pendant="Pendant",str_a="%a",num_32044=32044,str$9=", ",str_5422="5422",num_2018=2018,str_17012="17012",str_calcul_quivale_abr="calcul_\xc3\xa9quivalence_loyer_minimale.condition_2_du_832_25",num_4574=4574,str_AllocationJourna_abr="AllocationJournalierePresenceParentale",num_1668=1668,str_Chapitre_III_C_abr="Chapitre III : Calcul des aides personnelles au logement en secteur locatif",str_kind_for_the_e_abr$1="' kind for the enumeration 'ElementPrestationsFamiliales.t'",num_682=682,str_Prestations_fami_abr="Prestations familiales",num_467=467,str_src_date_ml="src/date.ml",str_Enfant_Charge="Enfant\xc3\x80Charge",str_calculette="calculette",str_GardeAltern_eAl_abr="GardeAltern\xc3\xa9eAllocataireUnique",str_Article_D823_16="Article D823-16",str_172500="172500",num_4355=4355,str_EADDRINUSE="EADDRINUSE",num_4117=4117,str_n_nombre_parts_d_abr$0="n_nombre_parts_d832_25",num_609=609,num_1832=1832,str_ENOSYS="ENOSYS",str_Apres="Apres",str_locatif_zone="locatif.zone",num_2438=2438,num_4129=4129,num_359=359,str_examples_aides_l_abr$4="examples/aides_logement/../prestations_familiales/prologue.catala_fr",num_2837=2837,num_706=706,num_258=258,str_179800="179800",str$15=" ",num_361=361,str_Secteur_locatif="Secteur locatif",str_Undefined_recurs_abr="Undefined_recursive_module",str_output="output",str_accession_propri_abr$0="accession_propri\xc3\xa9t\xc3\xa9",num_2396=2396,num_776=776,str_base_mensuelle_a_abr$0="base_mensuelle_allocations_familiales.date_courante",str_199900="199900",num_536=536,num_1424=1424,num_976970511=-976970511,str_kind_for_the_e_abr="' kind for the enumeration 'SituationObligationScolaire.t'",str_16g="%.16g",str_220100="220100",num_918=918,num_189=189,str_droit_ouvert_for_abr="droit_ouvert_forfaitaire",num_620=620,str_i="%i",str_0_01="0.01",str_262985="262985",str_409505="409505",num_1669=1669,num_670=670,str_LogementFoyer="LogementFoyer",str_33026="33026",str_139700="139700",str_PrestationAccuei_abr="PrestationAccueilJeuneEnfant",str_Article_L822_4="Article L822-4",num_3965=3965,num_856=856,str_41252="41252",num_1618=1618,str_0_1="0.1",str_Allocation_duca_abr="Allocation\xc3\x89ducationEnfantHandicap\xc3\xa9",str_5399="5399",num_3745=3745,num_123=123,num_570=570,str_calcul_apl_logem_abr$4="calcul_apl_logement_foyer.type_logement_foyer",str_accession_propri_abr$9="accession_propri\xc3\xa9t\xc3\xa9.local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire",num_1671=1671,str_0_0173="0.0173",num_608=608,num_3386=3386,num_768=768,str_Arr_t_du_27_s_abr="Arr\xc3\xaat\xc3\xa9 du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de d\xc3\xa9m\xc3\xa9nagement",num_1573=1573,num_159=159,str_LocationAccession="LocationAccession",str_logement_foyer_d_abr="logement_foyer.date_conventionnement",num_1067=1067,num_577=577,num_5108=5108,str_a_d_j_ouvert_abr="a_d\xc3\xa9j\xc3\xa0_ouvert_droit_aux_allocations_familiales",num_836=836,str_41338="41338",num_0xff=0xff,num_139=139,str_Arr_t_du_19_a_abr="Arr\xc3\xaat\xc3\xa9 du 19 avril 2022 relatif au rel\xc3\xa8vement du salaire minimum de croissance",num_12=-12,num_4640=4640,str_calcul_quivale_abr$2="calcul_\xc3\xa9quivalence_loyer_minimale.ressources_m\xc3\xa9nage_arrondies",num_458=458,str_Article_15="Article 15",str_0_75="0.75",str_Titre_5_Dispos_abr="Titre 5 : Dispositions particuli\xc3\xa8res \xc3\xa0 la Guadeloupe, \xc3\xa0 la Guyane, \xc3\xa0 la Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy et \xc3\xa0 Saint-Martin",str_22355="22355",num_3654863=3654863,str_140800="140800",num_145=145,str_Chapitre_5_All_abr="Chapitre 5 : Allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",num_455=455,num_1997=1997,str_163000="163000",str_0_5="0.5",str_Article_R842_14="Article R842-14",str_fd="fd ",num_641=641,num_3904=3904,num_900=900,num_764=764,num_2571=2571,num_1120=1120,str_194200="194200",num_610=610,str_41751="41751",num_409=409,str_181800="181800",str_41316="41316",str_traitement_aide_abr$1="traitement_aide_finale_contributions_sociales_arrondi",num_4636=4636,num_993=993,str_cat_gorie_calcu_abr="cat\xc3\xa9gorie_calcul_apl",num_338=338,num_3949=3949,str_Prise_en_compte_abr="Prise en compte des ressources pour les aides personnelles au logement",str_757="757",str_coefficents_enfa_abr="coefficents_enfants_garde_altern\xc3\xa9e_pris_en_compte",num_377=377,num_1081=1081,str_B="%B",num_848=848,num_2001=2001,str_Compl_mentFamilial="Compl\xc3\xa9mentFamilial",num_922=922,num_633=633,str_smic_r_sidence="smic.r\xc3\xa9sidence",str_Livre_5_Presta_abr="Livre 5 : Prestations familiales et prestations assimil\xc3\xa9es",num_1018=1018,str_Article_D832_18="Article D832-18",num_108=108,num_2147483648=-2147483648,str_1$0="1",num_2002=2002,str_Chapitre_II_Di_abr="Chapitre II : Dispositions applicables aux ressources",num_1797=1797,num_1678=1678,num_606=606,num_1657=1657,num_890=890,str_Article_R822_7="Article R822-7",str_42605="42605",num_845=845,num_3787=3787,str_VendeurQuandDema_abr="VendeurQuandDemandeurAContratLocationAccession",str_Article_R755_0_2="Article R755-0-2",str_EAGAIN="EAGAIN",str_calculNombrePart_abr="calculNombrePartsAccessionPropriete",num_406=406,str_Not_a_directory=": Not a directory",str_allocationFamili_abr="allocationFamilialesAvril2008",str_b$0="b",num_3317=3317,num_1609=1609,str_Article_D521_3="Article D521-3",num_4849=4849,str_accession_propri_abr$2="accession_propri\xc3\xa9t\xc3\xa9.nombre_personnes_\xc3\xa0_charge",str_CalculAidePerson_abr$2="CalculAidePersonnalis\xc3\xa9eLogement",str_D331_63_64="D331_63_64",str_EDESTADDRREQ="EDESTADDRREQ",num_2012=2012,num_287=287,str_Out_of_memory="Out_of_memory",num_86400=86400,str_42469="42469",str_4="4",str_examples_aides_l_abr$3="examples/aides_logement/code_construction_reglementaire.catala_fr",str_index_out_of_bounds="index out of bounds",num_601=601,num_668=668,str_bigarr02="_bigarr02",str_31264="31264",num_975=975,num_4600=4600,num_881=881,num_0xffffffff=0xffffffff,str_LaR_union="LaR\xc3\xa9union",str_Article_L822_5="Article L822-5",str_981600="981600",num_574=574,num_292=292,num_0xffff=0xffff,str_accession_propri_abr$8="accession_propri\xc3\xa9t\xc3\xa9.type_travaux_logement",num_2009=2009,str_EBUSY="EBUSY",str_ENETUNREACH="ENETUNREACH",num_417088404=417088404,num_222=222,str_17g="%.17g",num_400=400,str_calcul_quivale_abr$1="calcul_\xc3\xa9quivalence_loyer_minimale.n_nombre_parts_d832_25",num_1806=1806,num_3975=3975,str_100="100.",num_3600=3600,num_3277=3277,str_1_25="1.25",num_143=143,str_logement_foyer_t_abr="logement_foyer.type_logement_foyer",str_44729="44729",num_4363=4363,str_ge_minimum_ali_abr="\xc3\xa2ge_minimum_alin\xc3\xa9a_1_l521_3",num_963043957=963043957,num_126=126,str_5="5",num_142=142,num_741=741,str_AllocationSoutie_abr="AllocationSoutienFamilial",num_840=840,str_SousLocataire="SousLocataire",str_34713="34713",num_4197=4197,num_416=416,num_628=628,num_1458=1458,str_Section_1_Calc_abr="Section 1 : Calcul, liquidation et versement des aides",num_124=124,num_1673=1673,str_Article_L512_3="Article L512-3",str_0_98="0.98",num_917=917,str_633129="633129",num_427=427,num_150=150,str_41440="41440",str_ligibilit_Pri_abr="\xc3\x89ligibilit\xc3\xa9PrimeDeD\xc3\xa9m\xc3\xa9nagement",num_135=135,str_Sous_section_2_abr="Sous-section 2 : Calcul de l'aide en secteur locatif",num_1112=1112,num_252=252,str_enfant_le_plus_abr="enfant_le_plus_\xc3\xa2g\xc3\xa9",str_examples_allocat_abr$2="examples/allocations_familiales/prologue.catala_fr",num_5001=5001,str_EPROTOTYPE="EPROTOTYPE",str_CalculAidePerson_abr$1="CalculAidePersonnalis\xc3\xa9eLogementFoyer",str$8=".",str_EINTR="EINTR",num_147=147,num_0xf0=0xf0,str_eligibilitePrest_abr="eligibilitePrestationsFamiliales",str_12="12.",num_1661=1661,num_744=744,num_694=694,str_Guadeloupe="Guadeloupe",num_276=276,num_4083=4083,str_230500="230500",num_116=116,str_enfantLePlusAge="enfantLePlusAge",num_576=576,str_EALREADY="EALREADY",num_365=365,num_627=627,num_515=515,num_294=294,str_traitement_aide_abr$7="traitement_aide_finale_montant_minimal",str_impossible_case="impossible case",num_1073=1073,str_examples_allocat_abr$6="examples/allocations_familiales/securite_sociale_R.catala_fr",num_3087=3087,str_R_gles_diverses="R\xc3\xa8gles diverses",num_2060=2060,num_1080=-1080,num_500=500,num_291=291,str_EAFNOSUPPORT="EAFNOSUPPORT",str_18185="18185",num_969837588=969837588,num_872=872,str_PM="PM",num_1098=1098,str_SaintBarthelemy="SaintBarthelemy",num_638=638,num_1063=1063,str_ENFILE="ENFILE",num_3673=3673,num_1023$0=-1023,num_859=859,str_ressources_m_na_abr="ressources_m\xc3\xa9nage_avec_arrondi",str_ouvertureDroitsR_abr="ouvertureDroitsRetraite",str_ligibilit_ai_abr="\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement",str_204700="204700",str_Article_L755_12="Article L755-12",num_1735=1735,num_1083=1083,str_TravauxPourAcqui_abr="TravauxPourAcquisitionD832_15_1",str_Ancien="Ancien",num_2584=2584,str_lib_read_mll="lib/read.mll",num_541=541,num_870=870,num_853=853,str_1229="1229",num_939=939,str_Article_premier="Article premier",num_501=501,num_3859=3859,num_974=974,num_3322=3322,str_ligibilit_abr$0="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 l'aide personnalis\xc3\xa9e au logement",num_1582=1582,num_1048=1048,num_1788=1788,str$2='"',num_460=460,str_Arr_t_du_14_d_abr="Arr\xc3\xaat\xc3\xa9 du 14 d\xc3\xa9cembre 2020 relatif au montant des plafonds de ressources de certaines prestations familiales et aux tranches du bar\xc3\xa8me applicable au recouvrement des indus et \xc3\xa0 la saisie des prestations",str_examples_aides_l_abr$0="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_L.catala_fr",str_CalculAllocation_abr$1="CalculAllocationLogement",str_3539="3539",str$14="<",num_931=931,str_208500="208500",str_prestations_fami_abr$0="prestations_familiales.date_courante",num_0x800=0x800,str_EPERM="EPERM",num_3409=3409,num_617=617,num_182=182,num_398=398,str_ligibilit="\xc3\xa9ligibilit\xc3\xa9",num_1152=1152,num_0_012=0.012,str_233000="233000",num_719=719,str_calculAidePerson_abr$1="calculAidePersonnaliseeLogementLocatif",str_Article_33="Article 33",num_3679=3679,str_M_tropole="M\xc3\xa9tropole",num_2490=2490,num_842=842,num_5087=5087,str_40696="40696",num_209=209,str_ressources_m_na_abr$0="ressources_m\xc3\xa9nage_arrondies_seuil",num_204=204,str_Article_D815_1="Article D815-1",num_834=834,str_conditions_hors_abr="conditions_hors_\xc3\xa2ge",num_783=783,str_traitement_aide_abr$0="traitement_aide_finale_abattement",num_727=727,str_Dispositions_sp_abr="Dispositions sp\xc3\xa9ciales relatives \xc3\xa0 Mayotte",num_726928360=726928360,num_562=562,str_221100="221100",str$1="([^/]+)",num_165=165,str_Article_39="Article 39",num_700=700,num_0xf=0xf,str_798="798",str_BailleurSocial="BailleurSocial",str_logement_foyer_n_abr="logement_foyer.nombre_personnes_\xc3\xa0_charge",str_montant_initial_abr$0="montant_initial_m\xc3\xa9tropole_majoration",num_125=125,num_372=372,num_4108=4108,num_818=818,num_1092=1092,str_Division_by_zero="Division_by_zero",num_520=520,num_736=736,str_Article_L832_3="Article L832-3",num_430=430,num_708012133=708012133,str_SituationObligat_abr="SituationObligationScolaire",num_589=589,str_AutrePersonne_C_abr="AutrePersonne\xc3\x80Charge",str_44440="44440",num_879=879,num_532=532,str_AllocationJeuneE_abr="AllocationJeuneEnfant",num_566=566,num_2014=2014,num_4195=4195,str_22262="22262",num_552=552,str_Article_D842_17="Article D842-17",num_380=380,num_659=659,str_EADDRNOTAVAIL="EADDRNOTAVAIL",num_503=503,num_697=697,str_Article_L751_1="Article L751-1",num_119=119,num_104=104,str_montant_avec_gar_abr="montant_avec_garde_altern\xc3\xa9e_majoration",str_70="70",num_412=412,str_calculette_sans_abr="calculette_sans_garde_altern\xc3\xa9e",str_Instruction_inte_abr$0="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2022/82 du 28 mars 2022 relative \xc3\xa0 la revalorisation au 1er avril 2022 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",num_321=321,str_version_avril_2008="version_avril_2008",num_468=468,str_38361="38361",num_127686388=127686388,num_714=714,str_locatif_r_ducti_abr="locatif.r\xc3\xa9duction_loyer_solidarit\xc3\xa9",num_1390=1390,num_2013=2013,str_ouverture_droits_abr="ouverture_droits_retraite",num_102=102,num_1464=1464,num_1486=1486,num_4638=4638,str_100000="100000.",str_18261="18261",str_logement_foyer_r_abr="logement_foyer.ressources_m\xc3\xa9nage_arrondies",num_101=101,str_calcul_nombre_pa_abr$1="calcul_nombre_parts.situation_familiale_calcul_apl",num_4778=4778,str_body="body",str_Calcul_des_contr_abr="Calcul des contributions sociales s'appliquant aux aides personnelles au logement",str_Unexpected_s_abr="Unexpected '%s' kind for the enumeration 'Collectivite.t'",num_4760=4760,num_5029=5029,num_1e7=1e7,str_abr$3="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\x03\x02a\0\xdb\x01%\x01\xd8\x01\xd9\x01\x03\x02\xdc\x01\xd8\x01a\0\x03\x02\x03\x02\xd8\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\x03\x02~\x01\x03\x02\x03\x02\x03\x02\x03\x02c\0c\0c\0c\0c\0c\0a\0\x03\x02\xda\x01\xfa\x01\x03\x02\x03\x02a\0\x03\x02|\x01|\x01a\0\x03\x02\xdd\x01\x03\x02\xfd\x01\x03\x02\x03\x02\x03\x02a\0\xff\xff\x03\x02\xc4\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\x03\x02\xf1\x01\x03\x02\xff\x01\xf2\x01\x03\x02d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\x03\x02\xc4\x01\x03\x02e\0e\0e\0e\0e\0e\0\x03\x02\xc6\x01\x03\x02d\0d\0d\0d\0d\0d\0\x03\x02\x03\x02\x03\x02\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",num_4676=4676,num_254=254,str_calcul_apl_logem_abr$7="calcul_apl_logement_foyer.zone",num_407=407,str_accession_propri_abr$1="accession_propri\xc3\xa9t\xc3\xa9.zone",str_6="6.",str_1003="1003",str_ECONNABORTED="ECONNABORTED",str_EFAULT="EFAULT",num_4131=4131,str_Article_L841_2="Article L841-2",str_flags_Open_te_abr=" : flags Open_text and Open_binary are not compatible",num_902=902,str_EDEADLK="EDEADLK",str_EIO="EIO",str_Article_D832_15="Article D832-15",str_Titre_VI_Dispo_abr="Titre VI : Dispositions relatives aux prestations et aux soins - Contr\xc3\xb4le m\xc3\xa9dical - Tutelle aux prestations sociales",str_43248="43248",num_1992=1992,str_examples_aides_l_abr$2="examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr",str$0="\\\\",num_2555=2555,str_Code_de_la_const_abr="Code de la construction et de l'habitation",str_Instruction_inte_abr$2="Instruction interministerielle no DSS/SD2B/2019/261 du 18 d\xc3\xa9cembre 2019 relative \xc3\xa0 la revalorisation au 1er janvier 2020 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",str_Article_38="Article 38",num_2739=2739,num_1045=1045,str_0_04="0.04",num_463=463,str_0_0226="0.0226",str_192500="192500",str_230700="230700",num_926=926,str_0_0463="0.0463",str_217600="217600",str_GardeAlterneePar_abr="GardeAlterneePartageAllocations",num_519=519,str_EHOSTDOWN="EHOSTDOWN",str_abr$1="\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff\x8c\x01\x92\x01\xff\xff\x96\x01\x97\x01\x9a\x01\xa8\x01\xaa\x01\xab\x01\xac\x01\xad\x01\xb5\x01\xb8\x01\xb9\x01\xbb\x01\xbf\x01\xc1\x01\xc3\x01\xc4\x01\xc5\x01\xc8\x01\xcb\x01\xdf\x01\xe1\x01\xe4\x01\xf9\x01\xfb\x01\x02\x02\x04\x02\x0b\x02\f\x02\r\x02\0\0",str_0_55="0.55",num_109=109,str_droit_ouvert="droit_ouvert",str_Champs_d_applica_abr="Champs d'applications",str_ENOTSOCK="ENOTSOCK",num_669=669,str_locatif_nombre_p_abr="locatif.nombre_personnes_\xc3\xa0_charge",num_4250=4250,str_ContributionsSoc_abr="ContributionsSocialesAidesPersonnelleLogement",str_Article_D832_10="Article D832-10",str_Interface_du_pro_abr="Interface du programme",num_944=944,num_97=-97,str_examples_aides_l_abr$7="examples/aides_logement/archives.catala_fr",num_469=469,num_953=953,num_2572=2572,num_1461=1461,num_666=666,num_1455=1455,str_Article_D823_20="Article D823-20",str_ServicesSociauxA_abr="ServicesSociauxAllocationVerseeAuxServicesSociaux",str_d_pense_nette_m_abr="d\xc3\xa9pense_nette_minimale_d832_27",num_195=195,str_218700="218700",str_1="1.",num_3454=3454,num_1015=1015,str_EOPNOTSUPP="EOPNOTSUPP",num_1094=1094,str_DecisionTaken="DecisionTaken(_)",num_3779=3779,num_2038=2038,num_1040=1040,str_45200="45200",str_d_pense_nette_m_abr$0="d\xc3\xa9pense_nette_minimale",num_2440588=2440588,num_844=844,num_728=728,str_Titre_I_Alloca_abr="Titre I : Allocations aux personnes \xc3\xa2g\xc3\xa9es",str_ECONNRESET="ECONNRESET",num_141=141,str_Livre_I_G_n_abr="Livre I : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s - Dispositions communes \xc3\xa0 tout ou partie des r\xc3\xa9gimes de base",num_1189=1189,str_ESPIPE="ESPIPE",num_4329=4329,str_Article_D823_17="Article D823-17",str_Instruction_mini_abr="Instruction minist\xc3\xa9rielle N\xc2\xb0DSS/SD2B/2019/65 du 25 mars 2019 relative \xc3\xa0 la revalorisation au 1er avril 2019 des prestations familiales servies en m\xc3\xa9tropole",num_1553=1553,num_596=596,str_E2BIG="E2BIG",num_2440587_5=2440587.5,str_AllocationLogement="AllocationLogement",str_5186="5186",str_Unexpected_s_abr$1="Unexpected '%s' kind for the enumeration 'SituationObligationScolaire.t'",str_accession_propri_abr="accession_propri\xc3\xa9t\xc3\xa9.date_courante",num_518=518,str_calcul_apl_logem_abr$0="calcul_apl_logement_foyer.situation_familiale_calcul_apl",num_1065=1065,num_155=155,str_142303="142303",num_316=316,str_37778="37778",num_296=296,num_565=565,num_799=799,num_4139=4139,num_4827=4827,num_215=215,str_Article_D832_11="Article D832-11",num_947=947,str_LaReunion="LaReunion",str_Montant_du_salai_abr="Montant du salaire minimum de croissance",str_AgrandirOuRendre_abr="AgrandirOuRendreHabitableD331_63",num_621=621,num_557=557,str_0_3="0.3",str_true="true",str_Chapitre_II_Co_abr="Chapitre II : Conditions g\xc3\xa9n\xc3\xa9rales d'attribution",num_370=370,str_Titre_II_Dispo_abr="Titre II : Dispositions communes aux aides personnelles au logement",num_781=781,str_25116="25116",str_Paragraphe_1_I_abr="Paragraphe 1 : Information et simplification des d\xc3\xa9marches des assur\xc3\xa9s.",num_4168=4168,str_1500="1500",str_is_too_large_fo_abr=" is too large for shifting.",str_237200="237200",num_502=502,str_Map_bal="Map.bal",str_5208="5208",str_0_08="0.08",str_242800="242800",str="@[",str_Titre_III_Aide_abr="Titre III : Aide personnalis\xc3\xa9e au logement",str_Apr_s="Apr\xc3\xa8s",str_Code_de_la_s_cu_abr="Code de la s\xc3\xa9curit\xc3\xa9 sociale",str_42892="42892",num_1694=1694,num_665=665,num_688=688,num_2674=2674,str_ml_z_overflow="ml_z_overflow",num_677=677,str_1_8="1.8",str_contributions_so_abr$0="contributions_sociales.date_courante",num_1411=1411,num_850=850,str_calcul_apl_logem_abr="calcul_apl_logement_foyer.redevance",num_3452=3452,num_309=309,num_3473=3473,num_752863768=-752863768,str_Article_D832_17="Article D832-17",num_904=904,num_360=360,num_705=705,str_202500="202500",num_3336=3336,num_765=765,str_allocationsFamil_abr="allocationsFamiliales",str_Article_10="Article 10",str_Instruction_inte_abr$3="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2021/65 du 19 mars 2021 relative \xc3\xa0 la revalorisation au 1er avril 2021 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",num_167=167,str_582700="582700",num_915=915,str_4986="4986",num_433=433,str_CalculAidePerson_abr$0="CalculAidePersonnalis\xc3\xa9eLogementLocatif",num_197=197,num_531=531,str_abattement_d_pe_abr="abattement_d\xc3\xa9pense_nette_minimale",num_1466=1466,num_3769=3769,str_Sys_blocked_io="Sys_blocked_io",str_b_n_ficie_titr_abr="b\xc3\xa9n\xc3\xa9ficie_titre_personnel_aide_personnelle_logement",str_Articles_valable_abr="Articles valables du 1er octobre 2020 au 1er octobre 2021",str_0_0588="0.0588",str_Chapitre_2_Cha_abr="Chapitre 2 : Champ d'application.",str_Chapitre_2_Cha_abr$0="Chapitre 2 : Champ d'application",num_2570=2570,str_EXDEV="EXDEV",num_362=362,str_49="49",num_1663=1663,num_457=457,num_0xFF=0xFF,str_ligibilit_au_abr$0="\xc3\x89ligibilit\xc3\xa9 aux aides personnelles au logement",str_Article_D842_15="Article D842-15",num_892=892,num_246=246,str_37900="37900",str_u="%u",num_1016=1016,str_Article_L831_1="Article L831-1",str_Chapitre_IV_Ca_abr$0="Chapitre IV : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur accession",str_calcul_quivale_abr$0="calcul_\xc3\xa9quivalence_loyer_minimale",str_logement_foyer_zone="logement_foyer.zone",num_298=298,str_EHOSTUNREACH="EHOSTUNREACH",num_405=405,str_ligibilit_Aid_abr="\xc3\x89ligibilit\xc3\xa9AidePersonnalis\xc3\xa9eLogement",str_19402="19402",str_2="2",num_127=127,num_925=925,num_711=711,str_Article_30="Article 30",str$7="@{",num_4039=4039,str_Montant_de_la_ba_abr="Montant de la base mensuelle des allocations familiales",str_flags_Open_rd_abr=" : flags Open_rdonly and Open_wronly are not compatible",str_0_232="0.232",num_787=787,str_OuvertureDroitsR_abr="OuvertureDroitsRetraite",str_Zone2="Zone2",str_43505="43505",num_4662=4662,str_D_cret_n_2019_abr="D\xc3\xa9cret n\xc2\xb0 2019-1387 du 18 d\xc3\xa9cembre 2019 portant rel\xc3\xa8vement du salaire minimum de croissance",str$13="-",num_5073=5073,num_803994948=803994948,num_336=336,num_603=603,num_1659=1659,str_n_nombre_parts_d_abr="n_nombre_parts_d832_11",num_216=216,str_file_already_abr=" : file already exists",num_397=397,num_4473=4473,str_EffectiveEtPerma_abr="EffectiveEtPermanente",num_987=987,str_calculAllocation_abr$2="calculAllocationLogementAccessionPropriete",str_41481="41481",num_4133=4133,str_0_0045="0.0045",str_Date_d_ouverture_abr="Date d'ouverture des droits \xc3\xa0 la retraite",str_retrieveEvents="retrieveEvents",str_accession_propri_abr$7="accession_propri\xc3\xa9t\xc3\xa9.date_entr\xc3\xa9e_logement",num_1468=1468,num_3994=3994,str_ENOEXEC="ENOEXEC",str_2699="2699",num_2158=2158,num_625=625,num_644=644,num_1462=1462,str_prestationsFamil_abr="prestationsFamiliales",num_3634=3634,str_Infini="Infini",str_b="\\b",str_Article_43="Article 43",str_Martinique="Martinique",num_404=404,str_Titre_IV_Alloc_abr="Titre IV : Allocations de Logement",str_Article_D832_25="Article D832-25",str_EPFNOSUPPORT="EPFNOSUPPORT",num_673=673,num_837=837,num_1037=1037,num_12520=12520,num_1132=1132,str_ENOTTY="ENOTTY",num_942=942,num_916=916,str_ENXIO="ENXIO",num_46=-46,str_Collectivit="Collectivit\xc3\xa9",str_42228="42228",num_401=401,str_Chapitre_1er_A_abr="Chapitre 1er : Allocations familiales",num_981=981,str_Quantification_d_abr="Quantification des impay\xc3\xa9s de d\xc3\xa9pense de logement",str_AllocationEducat_abr="AllocationEducationEnfantHandicape",num_2276=2276,num_2016=2016,str_832200="832200",num_1751=1751,num_1467=1467,num_3363=3363,num_984=984,num_1685=1685,str_AllocationRentr_abr="AllocationRentr\xc3\xa9eScolaire",num_2535=2535,num_963=963,num_1000=1000,str_CalculAllocation_abr$0="CalculAllocationLogementAccessionPropri\xc3\xa9t\xc3\xa9",num_4081=4081,str$12="",str$5="^",num_737456202=737456202,str_Sous_section_2_abr$0="Sous-section 2 : Principes de neutralisation et d'abattement",num_3600$0=3600.,str_Section_2_Prim_abr="Section 2 : Prime de d\xc3\xa9m\xc3\xa9nagement",num_86400000=86400000,num_0x3f=0x3f,str_kind_for_the_e_abr$0="' kind for the enumeration 'Collectivite.t'",num_4281=4281,str_184000="184000",num_334=334,str_251500="251500",num_1419=1419,num_5027=5027,str_Article_16="Article 16",str_Article_D842_9="Article D842-9",num_2302=2302,str_Match_failure="Match_failure",num_4614=4614,num_716=716,num_785=785,num_2021=2021,str_0_085="0.085",str_CalculNombrePart_abr="CalculNombrePartLogementFoyer",str_d_pense_nette_m_abr$1="d\xc3\xa9pense_nette_minimale_d832_10",num_0x00=0x00,str_35130="35130",str_montant_initial_abr="montant_initial_majoration",str$11="+",str_ESRCH="ESRCH",num_1061=1061,str_1057="1057",num_587=587,num_179=179,num_425=425,str_li="%li",str_234600="234600",str_Smic="Smic",str_39051="39051",str_20900="20900",str_calcul_apl_logem_abr$6="calcul_apl_logement_foyer",str_208600="208600",num_373=373,num_2884=2884,num_4465=4465,num_267=267,num_431=431,num_2299161=2299161,str_impayeDepenseLog_abr="impayeDepenseLogement",num_801=801,str_calcul_nombre_pa_abr$0="calcul_nombre_parts.condition_2_du_832_25",str_logement_foyer_r_abr$0="logement_foyer.redevance",num_1086=1086,num_0xe0=0xe0,str_z$0="z",str_20100="20100",str$6="%",num_4959=4959,str_D331_32="D331_32",str_contributions_so_abr="contributions_sociales",str_ENAMETOOLONG="ENAMETOOLONG",num_2400000_5=2400000.5,num_580=580,num_1020=1020,num_250=250,str_EMSGSIZE="EMSGSIZE",str_Secteur_logement_abr="Secteur logement-foyer",str_calcul_apl_logem_abr$3="calcul_apl_logement_foyer.ressources_m\xc3\xa9nage_arrondies",str_Article_L831_2="Article L831-2",str_ECONNREFUSED="ECONNREFUSED",num_115=115,str_Allocations_fami_abr="Allocations familiales",num_624=624,num_1034=1034,num_1080$0=1080,str_locatif_ressourc_abr="locatif.ressources_m\xc3\xa9nage_arrondies",str_0_027="0.027",num_545=545,num_3350=3350,str_ligibilit_co_abr="\xc3\xa9ligibilit\xc3\xa9_commune.m\xc3\xa9nage",str_allocations_fami_abr="allocations_familiales",num_1255=1255,str_examples_allocat_abr$1="examples/allocations_familiales/securite_sociale_L.catala_fr",str_Article_8="Article 8",num_4992=4992,str_Article_R521_1="Article R521-1",num_0x8000=0x8000,num_594=594,num_2019=2019,str_jsError="jsError",num_1055=1055,str_Chapitre_Ier_C_abr="Chapitre Ier : Champ d'application",str_Section_1_Cond_abr="Section 1 : Conditions relatives au b\xc3\xa9n\xc3\xa9ficiaire",str_43074="43074",num_946=946,str_6_55957="6.55957",str_Sous_section_1_abr="Sous-section 1 : Modalit\xc3\xa9s g\xc3\xa9n\xc3\xa9rales de l'appr\xc3\xa9ciation des ressources",str_eligibiliteAideP_abr="eligibiliteAidePersonnaliseeLogement",num_371=371,num_320=320,num_129=129,num_814=814,num_2375=2375,num_2647=2647,num_766=766,str_n$0="\n",str_abattement_d_pe_abr$0="abattement_d\xc3\xa9pense_nette_minimale_d832_27",num_497=497,str_Chapitre_II_Mo_abr="Chapitre II : Modalit\xc3\xa9s de liquidation et de versement de l'aide personnalis\xc3\xa9e au logement",str_3_7="3.7",num_537=537,num_414=414,num_194=194,str_Tous_secteurs="Tous secteurs",num_310=310,str_calcul_plafond_m_abr="calcul_plafond_mensualit\xc3\xa9_d842_6_base",num_1033=1033,num_48=-48,num_2005=2005,num_5153=5153,str_9="9",num_423=423,str_EBADF="EBADF",num_1719=1719,str_1025="1025",str_camlinternalForm_abr="camlinternalFormat.ml",num_3734=3734,num_312=312,num_549=549,str_EMLINK="EMLINK",num_148=148,num_1675=1675,str_132000="132000",num_1502=1502,num_730=730,str_0_0185="0.0185",str_924600="924600",num_713=713,num_2017=2017,num_1124=1124,str_date_naissance="date_naissance",num_317=317,str_Article_R822_2="Article R822-2",str_CalculAidePerson_abr="CalculAidePersonnalis\xc3\xa9eLogementAccessionPropri\xc3\xa9t\xc3\xa9",num_878=878,num_3297=3297,str_Titre_1_Champ_abr="Titre 1 : Champ d'application - G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",num_1141=1141,str_obligation_scolaire="obligation_scolaire",str_EEXIST="EEXIST",num_293=293,num_550=550,num_32082=32082,num_733=733,num_4629=4629,num_121=121,num_961=961,str_prestations_fami_abr$2="prestations_familiales.prestation_courante",num_1999=1999,str_n="\\n",str_ligibilit_co_abr$0="\xc3\xa9ligibilit\xc3\xa9_commune.demandeur",num_544=544,num_3558=3558,num_120=120,str_16="16",str_Article_D832_14="Article D832-14",num_512=512,num_4024=4024,num_0x7ff0=0x7ff0,num_2253=2253,str_eligibiliteAlloc_abr="eligibiliteAllocationLogement",num_928=928,num_861=861,str_montant_forfaita_abr="montant_forfaitaire_charges",num_4186=4186,num_732=732,num_177=177,str_traitement_aide_abr$4="traitement_aide_finale_d\xc3\xa9pense_nette_minimale",num_1470=1470,str_Ascendant="Ascendant",str_0x="0x",str_0_005="0.005",str_Calcul_du_montan_abr$0="Calcul du montant de l'aide personnalis\xc3\xa9e au logement",num_797=797,num_3723=3723,num_499=499,str_D_cret_n_2020_abr="D\xc3\xa9cret n\xc2\xb0 2020-1598 du 16 d\xc3\xa9cembre 2020 portant rel\xc3\xa8vement du salaire minimum de croissance",num_1544=1544,str_locatif_situatio_abr="locatif.situation_familiale_calcul_apl",num_645=645,str_40888="40888",str_0_208="0.208",str_bas="bas",num_957=957,str_210900="210900",str_219900="219900",str_r_gime_outre_me_abr="r\xc3\xa9gime_outre_mer_l751_1",str_Invalid_function_abr="Invalid function call ([ ",str_traitement_aide_abr$3="traitement_aide_finale",num_105=105,str_Instruction_inte_abr="Instruction interminist\xc3\xa9rielle n\xc2\xb0 DSS/SD2B/2018/279 du 17 d\xc3\xa9cembre 2018 relative \xc3\xa0 la revalorisation au 1er janvier 2019 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",num_551=551,str_Article_R512_2="Article R512-2",str_31664="31664",num_1135=1135,num_4403=4403,num_454=454,str_44693="44693",num_1520=1520,str_2710="2710",str_0_45="0.45",num_429=429,str_str_ml="str.ml",str_input="input",str_39839="39839",str_ligibilit_lo_abr="\xc3\xa9ligibilit\xc3\xa9_logement",str_0_2="0.2",num_157=157,num_4162=4162,num_364=364,str_D_cret_n_2018_abr="D\xc3\xa9cret n\xc2\xb0 2018-1173 du 19 d\xc3\xa9cembre 2018 portant rel\xc3\xa8vement du salaire minimum de croissance",num_498=498,str_examples_aides_l_abr="examples/aides_logement/autres_sources.catala_fr",num_283=283,str_Allocation_de_so_abr="Allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",str_calculAllocation_abr="calculAllocationLogement",num_379=379,str_mkdir="mkdir",str_Article_L822_3="Article L822-3",str_logement_foyer_s_abr="logement_foyer.situation_familiale_calcul_apl",str_Chapitre_III_M_abr="Chapitre III : Modalit\xc3\xa9s de liquidation et de versement",num_592=592,num_5021=5021,str_No_such_file_o_abr=": No such file or directory",num_266=266,num_378=378,str_Chapitre_VII_C_abr="Chapitre VII : Calcul des allocations de logement en secteur logement-foyer",str_Titre_5_D_par_abr="Titre 5 : D\xc3\xa9partements d'outre-mer",num_948=948,num_992=992,str_src_printer_ml="src/printer.ml",str_766="766",num_4648=4648,str_CalculetteAidesA_abr="CalculetteAidesAuLogementGardeAltern\xc3\xa9e",str_locatif_colocation="locatif.colocation",str_calculetteAidesA_abr="calculetteAidesAuLogement",str_Section_1_Ouve_abr="Section 1 : Ouverture du droit et liquidation de l'allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",num_151=151,num_5162=5162,num_1137=1137,str_Descendant="Descendant",str_ligibilit_All_abr="\xc3\x89ligibilit\xc3\xa9AllocationLogement",str_D_cret_n_2002_abr="D\xc3\xa9cret n\xc2\xb02002-423 du 29 mars 2002 relatif aux prestations familiales \xc3\xa0 Mayotte",num_919=919,num_626=626,num_600=600,str_ligibilit_apl="\xc3\xa9ligibilit\xc3\xa9_apl",str_Demandeur="Demandeur",str_taux="taux",str_CalculAllocation_abr="CalculAllocationLogementLocatif",str_BeginCall="BeginCall([ ",num_843=843,num_868=868,num_0xFE=0xFE,str_ENOPROTOOPT="ENOPROTOOPT",num_822=822,str_caract_ristique_abr="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_1",num_921=921,str_GardeAltern_ePa_abr="GardeAltern\xc3\xa9ePartageAllocations",num_932=932,str_pilogue="\xc3\x89pilogue",str_943900="943900",str_CalculAllocation_abr$2="CalculAllocationLogementFoyer",num_4995=4995,str_bmaf="bmaf",str_calculEquivalenc_abr="calculEquivalenceLoyerMinimale",num_867=867,num_472=472,str_contributionsSoc_abr="contributionsSocialesAidesPersonnelleLogement",num_2006=2006,str_0_95="0.95",str_ressourcesAidesP_abr="ressourcesAidesPersonnelleLogement",num_363=363,str_Pervasives_do_at_abr="Pervasives.do_at_exit",str_utf8="utf8",str_222300="222300",num_863=863,str_ComplementFamilial="ComplementFamilial",num_1001=1001,str_225000="225000",num_1667=1667,str_locatif_logement_abr="locatif.logement_est_chambre",num_657=657,num_529=529,str_ligibilit_al_abr="\xc3\xa9ligibilit\xc3\xa9_allocation_logement",str_EISDIR="EISDIR",str_0_0283="0.0283",num_854=854,str_logement_foyer_d_abr$0="logement_foyer.date_courante",str_0_16="0.16",str_Article_18="Article 18",num_1460=1460,str_36815="36815",num_643=643,str_accession_propri_abr$6="accession_propri\xc3\xa9t\xc3\xa9.situation_familiale_calcul_apl",num_134=134,num_461=461,num_387=387,str_Section_2_Cond_abr="Section 2 : Conditions relatives aux ressources",num_1495=1495,str_ligibilit_au_abr="\xc3\x89ligibilit\xc3\xa9 aux allocations de logement";function +module==="object"&&module.exports||globalThis,str_38527="38527",num_1133=1133,num_857=857,num_1521=1521,num_2728=2728,str_ligibilit_Pre_abr="\xc3\x89ligibilit\xc3\xa9PrestationsFamiliales",str_logement_foyer="logement_foyer",num_319=319,str_Article_L521_1="Article L521-1",num_794=794,num_1056=1056,num_289=289,str_Paragraphe_2_O_abr="Paragraphe 2 : Ouverture du droit et liquidation.",num_43200=43200.,num_365180284=365180284,str_Changement="Changement",num_775=775,str_26714="26714",num_539=539,str_EMFILE="EMFILE",str_locatif_date_cou_abr="locatif.date_courante",num_163=163,str_SaintMartin="SaintMartin",num_4235=4235,str_1015="1015",str_Section_1_Seui_abr="Section 1 : Seuils de constitution d'un impay\xc3\xa9",str_Article_1="Article 1",str_559500="559500",str_aide_finale_formule="aide_finale_formule",num_122=122,str_35630="35630",num_3589=3589,num_992015837=992015837,str_Article_31="Article 31",str_50="50",str_Unexpected="Unexpected '",num_299=299,num_181=181,str_EACCES="EACCES",num_862=862,num_305=305,str_Article_19="Article 19",num_607=607,num_128=128,str_Avant="Avant",str_43000="43000",num_1127=1127,str_identifiant="identifiant",str_Oui="Oui",num_683=683,str_Article_D832_26="Article D832-26",num_573=573,num_383=383,num_146=146,str$4=">",num_575=575,num_3341=3341,num_4105=4105,num_731=731,num_153=153,num_1027=1027,num_297=297,str_EINPROGRESS="EINPROGRESS",num_1479=1479,str_Article_17="Article 17",str_Section_2_Acce_abr="Section 2 : Accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",num_914=914,str_Chapitre_5_Pre_abr="Chapitre 5 : Prestations familiales et prestations assimil\xc3\xa9es",str_baseMensuelleAll_abr="baseMensuelleAllocationsFamiliales",num_1125=1125,str_35762="35762",num_4605=4605,num_804=804,num_1779=1779,num_739=739,str_Calcul_du_montan_abr="Calcul du montant de l'allocation logement",num_358=358,num_2011=2011,num_2023=2023,num_1536=1536,num_295=295,str_Article_L841_1="Article L841-1",str_ServicesSociauxA_abr$2="ServicesSociauxAllocationVerseeALaFamille",str_186000="186000",str_Instruction_inte_abr$1="Instruction interminist\xc3\xa9rielle no DSS/SD2B/2020/33 du 18 f\xc3\xa9vrier 2020 relative \xc3\xa0 la revalorisation au 1er avril 2020 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",str_16_25="16.25",str_0_0315="0.0315",str_traitement_aide_abr$6="traitement_aide_finale_diminu\xc3\xa9",num_989=989,num_1769=1769,num_1118=1118,str_ligibilit_co_abr$2="\xc3\xa9ligibilit\xc3\xa9_commune.date_courante",num_1042=1042,str_40758="40758",str_e="e",num_313=313,num_896=896,str_Autre="Autre",num_2603=2603,str_locatif_b_n_fi_abr="locatif.b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s",num_505=505,num_1150=1150,str_Article_L822_2="Article L822-2",str_smic="smic",num_980=980,num_421=421,str_39445="39445",num_1071=1071,str_Article_D842_6="Article D842-6",num_1628=1628,num_43=-43,num_2053=2053,num_612=612,str_Neuf="Neuf",str_EROFS="EROFS",str_Article_27="Article 27",str_inf="inf",str_calculetteAidesA_abr$0="calculetteAidesAuLogementGardeAlternee",str_EPIPE="EPIPE",num_394=394,num_1815=1815,str_Circulaire_inter_abr="Circulaire interminist\xc3\xa9rielle N\xc2\xb0 DSS/SD2B/2017/352 du 22 d\xc3\xa9cembre 2017 relative \xc3\xa0 la revalorisation au 1er janvier 2018 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",num_685=685,str_41392="41392",num_111=111,num_929=929,num_676=676,str_Location="Location",num_967=967,num_5167=5167,num_2401=2401,num_898=898,str_240400="240400",num_269=269,str_ENOLCK="ENOLCK",str_Ordonnance_n_9_abr="Ordonnance n\xc2\xb0 96-50 du 24 janvier 1996 relative au remboursement de la dette sociale",num_229=229,str_33500="33500",num_619=619,str_CalculNombrePart_abr$0="CalculNombrePartsAccessionPropri\xc3\xa9t\xc3\xa9",str_Article_D823_9="Article D823-9",str_traitement_aide_abr="traitement_aide_finale_minoration_forfaitaire",str_ERANGE="ERANGE",str_AM="AM",str_abr$0="\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\xff\xff\x03\0\0\0\x86\0\xff\xff\x03\0\xff\xff\x86\0E\x01\x92\x019\0\xff\xffE\x01\x92\x01\xff\xff\xff\xff\xff\xff\xff\xff}\0\x8a\0\xff\xff\0\0\xff\xff\0\0\x03\0\xa9\0\x86\0\xae\0\xff\xff\0\0\n\x01E\x01\x92\x01\f\x01\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x05\0s\0\0\0}\0\x81\0\x05\0\xec\x01\x88\0\xff\x01&\0\xff\xff\n\0\x88\0f\0:\0\0\0k\0f\0\xff\xff\x0b\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1d\0&\0\0\0o\0\xd0\0\xe9\0\xff\0\f\x01\x0f\0\x11\0<\0\x0b\0\n\0\0\0\x14\0\x18\0\x1f\0 \0\"\0\x16\0\x1a\0\0\0\x0e\0\x1b\0!\0\x12\0\x17\0\0\0\x10\0\x13\0#\0(\0$\0&\0\0\0)\0*\0+\0,\0-\0.\0:\0R\0\x0b\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0\r\0'\0?\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0U\0\x8c\0<\0\r\0\x8f\0\x90\0\x91\x000\0\x93\x000\0\x94\0'\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001\x001\x001\x001\x001\x001\x001\x001\x001\x001\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0A\0'\0\x95\0\x96\0\x9c\0?\0\x9d\x003\0\x9e\x003\0\x9f\x002\x003\x003\x003\x003\x003\x003\x003\x003\x003\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x005\x005\x005\x005\x005\x005\x005\x005\x005\x005\0\x9b\x002\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa1\0\xa2\0\x9b\0[\0A\0\0\x007\x007\x007\x007\x007\x007\x007\x007\x007\x007\x009\0D\0f\0k\0s\0\x83\0\x85\0\x85\0}\0\x8a\0\x85\0\xa3\0^\0\xa5\0D\0\xa6\0\xa7\0\xa8\0\xab\0o\0\xac\0\xad\0\xce\0\xcb\0\xcf\0\xd2\0\xd3\0:\0R\0\x85\0\xd4\0\xd5\0\xd6\0\xd7\0\xd9\0\x8c\0\xda\0a\0\xdb\0\xdc\0w\0\xdd\0\xde\0\xdf\0\x85\0[\0\xcb\0\"\x01>\x01\xe9\0\x98\0\x01\x01P\x01\xf7\0<\0\xfb\x006\x01:\x01Q\x01D\0)\x01R\x01S\x01\x06\x01\x1a\x01D\0w\0\x1e\x01\x0f\x01D\0^\0\x0f\x01T\x01U\x01V\x01G\x01X\x01D\0\xcb\x002\x01G\x01D\0Y\x01D\0D\0G\0G\0G\0G\0G\0G\0G\0G\0G\0G\0a\0L\x01w\0Z\x01?\0\x01\x01\\\x01G\0G\0G\0G\0G\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0\x98\0L\x01]\x01_\x01a\x01b\x01-\x01N\0N\0N\0N\0N\0N\0c\x01\x98\0d\x01G\0G\0G\0G\0G\0G\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\xb4\0\x14\x01L\x01A\0\x14\x01e\x01f\x01h\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0i\x01j\x01-\x01$\x01k\x01l\x01m\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0n\x01\x1a\x01y\x01\x9d\x01\x1e\x01\x9e\x01\x14\x01P\0P\0P\0P\0P\0P\0[\0\x9f\x01>\x01O\0O\0O\0O\0O\0O\0\xf7\0\xa0\x01\xfb\0\xa1\x01:\x01D\0V\0V\0V\0V\0V\0V\0V\0V\0V\0V\0^\0P\0P\0P\0P\0P\0P\0V\0V\0V\0V\0V\0V\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0$\x01)\x01a\0\xa2\x01\xa3\x01w\0\x01\x01W\0W\0W\0W\0W\0W\0\xa5\x016\x01\x98\0V\0V\0V\0V\0V\0V\0\x06\x01\xa6\x01\xa7\x01\xa8\x01\x0f\x01\xa9\x01X\0X\0X\0X\0X\0X\0X\0X\0X\0X\x002\x01W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0_\0\x85\x01\xaa\x01\xab\x01\x9a\x01\x85\x01\xac\x01Y\0Y\0Y\0Y\0Y\0Y\0_\0\xb0\0\xad\x01X\0X\0X\0X\0X\0X\0-\x01\xae\x01\xaf\x01\xb0\0\xb0\x01\x9a\x01\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0\xb0\0z\x01Y\0Y\0Y\0Y\0Y\0Y\0\x94\x01\xb1\x01\x14\x01\xb2\x01b\0\x94\x01\xb3\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xd8\x01\xc1\x01_\0\x9a\x01\xd8\x01\xcd\x01b\0\xde\x01_\0\xcd\x01\xe5\x01\x01\x02_\0\xda\x01$\x01\xd7\x01\xd7\x01\x02\x02\xda\x01\xd7\x01_\0\x04\x02\x05\x02\xd8\x01_\0\x06\x02_\0_\0`\0`\0`\0`\0`\0`\0`\0`\0`\0`\0\xd7\x01\x07\x02z\x01\b\x02\t\x02\n\x02\x0b\x02`\0`\0`\0`\0`\0`\0b\0\f\x02\xd7\x01\xf7\x01\r\x02\x0e\x02b\0\x0f\x02}\x01\x80\x01b\0\x10\x02\xdc\x01\x11\x02\xfb\x01\x12\x02\x13\x02\x14\x02b\0y\x01\x15\x02\xc2\x01b\0\x16\x02b\0b\0`\0`\0`\0`\0`\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xe7\x01\x17\x02\xee\x01\x18\x02\xfb\x01\xee\x01\x19\x02c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xf3\x01}\x01\x80\x01\xe0\x01\x1a\x02\xc5\x01\x1b\x02d\0d\0d\0d\0d\0d\0\x1c\x02\xc2\x01\x1d\x02c\0c\0c\0c\0c\0c\0\x1e\x02\x1f\x02 \x02\xc8\x01\xe7\x01\x85\x01e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xff\xffd\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xff\xff\xff\xff\xc5\x01\xb0\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb9\0\xff\xffe\0e\0e\0e\0e\0e\0\xc8\x01\xe0\x01\xff\xff\xb9\0\xcd\x01z\x01\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xb9\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xbf\0\xc0\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc0\0\xc1\x01\xf7\x01\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc0\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc6\0\xc7\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xe2\0\xc7\0}\x01\x80\x01\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xc7\0\xcc\0\xc2\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe7\x01\xff\xff\xff\xff\xc7\0\xdc\x01\xee\x01\xfb\x01\xff\xff\xc7\0\xf3\x01\xff\xff\xcc\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xcd\0\xe1\0\xff\xff\xe1\0\xff\xff\xe0\x01\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xe1\0\xcd\0\xc5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcc\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xff\xff\xff\xff\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xe4\0\xff\xff\xe4\0\xff\xff\xe3\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xe6\0\xff\xff\xe3\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xb9\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xe8\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xed\0\xff\xffM\x01\xff\xffM\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01q\x01\xff\xffM\x01\xff\xff\xff\xff\xc0\0\xff\xff\xff\xff\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0M\x01\xff\xff\xff\xff\xff\xff\xed\0\xc7\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xed\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xff\xff\xf2\0\xff\xff\xff\xff\xf0\0\xff\xff\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xf2\0\xed\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xff\xff\xff\xff\xff\xff\xff\xff\xf5\0\xff\xff\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0B\x01B\x01\xff\xff\xff\xffB\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01O\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xffO\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xffB\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01B\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf2\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01p\x01\xff\xffp\x01\xff\xffB\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01p\x01\xff\xff\xff\xffB\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01B\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffB\x01\xff\xff\xff\xffr\x01\xff\xff\xff\xffB\x01\xff\xff\xff\xffs\x01\xff\xffs\x01\xff\xffB\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\xff\xffr\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01u\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01w\x01\xff\xff~\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\x81\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x7f\x01\x9b\x01\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff~\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01~\x01\xff\xff\xff\xffB\x01~\x01\x81\x01~\x01~\x01\xff\xff\x81\x01\xff\xff\xff\xff\x9b\x01\xff\xff\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\xff\xff\xff\xff\x81\x01\xff\xff\x81\x01\x81\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\xff\xff\xff\xff\xff\xff\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xff\xff\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\xb8\x01\x8a\x01\xb8\x01\xff\xff\xff\xff\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb8\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xb9\x01\xff\xff\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8a\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8d\x01\xff\xff\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\x9c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x01\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\x8f\x01\xff\xff\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\x8f\x01\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\xff\xff\xc6\x01\xba\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xc6\x01\xff\xff\xff\xff\x8f\x01\xc6\x01\xff\xff\xc6\x01\xc6\x01\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xff\xff\xff\xff\xff\xff\xff\xff\xbb\x01\xff\xff\xbb\x01\xff\xff\xba\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbd\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xbf\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xc7\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x01\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xff\xff\xff\xff\xc9\x01\xff\xff\xc9\x01\xc9\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xff\xff\xff\xff\xff\xff\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd2\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xd5\x01\xff\xff\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd2\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",str_infinity="infinity",str_2_5="2.5",num_4608=4608,str_Chapitre_IV_Im_abr="Chapitre IV : Impay\xc3\xa9s de d\xc3\xa9penses de logement",num_278=278,str_examples_allocat_abr$0="examples/allocations_familiales/../base_mensuelle_allocations_familiales/bmaf.catala_fr",str_t="\\t",num_4008=4008,num_955=955,str_examples_aides_l_abr$10="examples/aides_logement/code_construction_legislatif.catala_fr",num_385=385,num_330=330,num_1057=1057,str_Titre_2_Presta_abr="Titre 2 : Prestations g\xc3\xa9n\xc3\xa9rales d'entretien",num_112=112,num_831=831,str_1000="1000",num_1131=1131,num_5113=5113,num_563=563,num_701=701,num_538=538,str_examples_aides_l_abr$9="examples/aides_logement/code_s\xc3\xa9curit\xc3\xa9_sociale.catala_fr",num_3179=3179,str_Unexpected_s_abr$0="Unexpected '%s' kind for the enumeration 'ElementPrestationsFamiliales.t'",num_599=599,num_1146=1146,num_2753=2753,num_4159=4159,str_Couple="Couple",str_SaintPierreEtMiq_abr="SaintPierreEtMiquelon",num_687=687,str_ESOCKTNOSUPPORT="ESOCKTNOSUPPORT",str_PrestationsFamil_abr="PrestationsFamiliales",str_l_mentPrestat_abr="\xc3\x89l\xc3\xa9mentPrestationsFamiliales",num_110=110,num_464=464,num_679=679,str_214700="214700",num_615=615,str_Calcul_quivalen_abr="Calcul\xc3\x89quivalenceLoyerMinimale",num_1096=1096,num_554=554,str_42926="42926",num_32=-32,num_4408=4408,num_1709=1709,num_4047=4047,str_39016="39016",num_847=847,str_AllocationLogeme_abr$0="AllocationLogementFamiliale",num_1023=1023,str_interfaceAllocat_abr="interfaceAllocationsFamiliales",num_561=561,num_769=769,str_AllocationLogeme_abr="AllocationLogementSociale",num_1043=1043,num_2443=2443,num_835=835,str_plafond_l512_3_2="plafond_l512_3_2",num_639=639,num_542=542,num_117=117,str_Chapitre_II_De_abr="Chapitre II : Des contributions pour le remboursement de la dette sociale.",str_examples_allocat_abr$5="examples/allocations_familiales/decrets_divers.catala_fr",str_compl_ment_d_g_abr="compl\xc3\xa9ment_d\xc3\xa9gressif",str_Livre_VIII_All_abr="Livre VIII : Allocations aux personnes \xc3\xa2g\xc3\xa9es - Allocation aux adultes handicap\xc3\xa9s - Aides \xc3\xa0 l'emploi pour la garde des jeunes enfants - Protection compl\xc3\xa9mentaire en mati\xc3\xa8re de sant\xc3\xa9",str_accession_propri_abr$5="accession_propri\xc3\xa9t\xc3\xa9.copropri\xc3\xa9t\xc3\xa9",str_240200="240200",str_Assert_failure="Assert_failure",num_778=778,str_Section_1_Sect_abr="Section 1 : Secteur locatif ordinaire",str_568400="568400",str_0_32="0.32",str_40961="40961",num_350=350,num_508=508,str_Non="Non",num_185=185,str_ENOTCONN="ENOTCONN",num_219=219,str_Article_R824_2="Article R824-2",num_1128=1128,num_1e14=1e14,str_D331_76_1="D331_76_1",str_Article_R521_3="Article R521-3",num_1825=1825,num_935=935,num_2022=2022,str_Fatal_error_exc_abr$0="Fatal error: exception %s\n",num_4204=4204,num_4286=4286,str_34865="34865",num_865=865,str_261800="261800",num_777=777,num_740=740,str_Article_2="Article 2",num_146097=146097,num_256=256,num_4598=4598,num_558=558,str_Article_L521_3="Article L521-3",str_Article_R822_1="Article R822-1",str_45064="45064",str_taux_francs_vers_abr="taux_francs_vers_euros",str_Archives_l_gisl_abr="Archives l\xc3\xa9gislatives et r\xc3\xa9glementaires",num_667=667,num_924=924,str_ENOSPC="ENOSPC",str_abattement_d_pe_abr$1="abattement_d\xc3\xa9pense_nette_minimale_d832_10",num_699=699,num_1469=1469,num_1075=1075,str_mensualit_li_abr="mensualit\xc3\xa9_\xc3\xa9ligible",str_D_cret_n_2021_abr="D\xc3\xa9cret n\xc2\xb0 2021-1741 du 22 d\xc3\xa9cembre 2021 portant rel\xc3\xa8vement du salaire minimum de croissance",num_4681=4681,str_ENOENT="ENOENT",num_288=288,str_0_0006="0.0006",num_315=315,str_EnfantLePlus_g="EnfantLePlus\xc3\x82g\xc3\xa9",num_841=841,str_EOVERFLOW="EOVERFLOW",num_556=556,str_examples_aides_l_abr$8="examples/aides_logement/../prestations_familiales/../smic/smic.catala_fr",num_5026=5026,str_228000="228000",str_ENOTEMPTY="ENOTEMPTY",str_Article_13="Article 13",str_calcul_apl_logem_abr$2="calcul_apl_logement_foyer.nombre_personnes_\xc3\xa0_charge",str_35947="35947",str_D331_59_8="D331_59_8",str_Loyer="Loyer",num_162=162,num_564=564,num_1986=1986,num_1635=1635,str_brut_horaire="brut_horaire",num_647=647,str_x="x",num_4634=4634,str_Sous_section_1_abr$0="Sous-section 1 : Aides personnelles au logement",str_calculAidePerson_abr$2="calculAidePersonnaliseeLogementAccessionPropriete",num_547=547,str_Article_D755_5="Article D755-5",num_588=588,num_4579=4579,num_680=680,str_Article_D842_4="Article D842-4",str_d="%d",num_314=314,str_Z_of_substring_b_abr="Z.of_substring_base: invalid digit",str_ServicesSociauxA_abr$1="ServicesSociauxAllocationVers\xc3\xa9e\xc3\x80LaFamille",num_3499=3499,num_637=637,num_1900=1900,num_3391=3391,num_285=285,str_buffer_ml="buffer.ml",num_708=708,str_Prologue_aides_abr="Prologue : aides au logement",str_Secteur_accessio_abr="Secteur accession \xc3\xa0 la propri\xc3\xa9t\xc3\xa9",str_39590="39590",str_accession_propri_abr$4="accession_propri\xc3\xa9t\xc3\xa9.date_signature_pr\xc3\xaat",str_ENOBUFS="ENOBUFS",num_2056=2056,num_2008=2008,str_0_0179="0.0179",num_1051=1051,num_3476=3476,num_1121=1121,str_245700="245700",num_1474=1474,str_Prologue="Prologue",num_1701=1701,str_calcul_nombre_pa_abr="calcul_nombre_parts.nombre_personnes_\xc3\xa0_charge",str_Metropole="Metropole",num_100=100,num_851=851,str_prise_en_compte_abr="prise_en_compte_personne_\xc3\xa0_charge",num_702=702,num_420=420,num_300=300,str_3="3",str_Partie_r_glemen_abr$0="Partie r\xc3\xa9glementaire - D\xc3\xa9crets simples",num_4086=4086,num_413=413,str_169="169.",num_0_5=0.5,num_790=790,str_Article_D521_1="Article D521-1",str_conventionn_li_abr="conventionn\xc3\xa9_livre_III_titre_V_chap_III",num_622=622,num_399=399,num_374=374,num_965=965,str_Article_D842_11="Article D842-11",str_Livre_7_R_gim_abr="Livre 7 : R\xc3\xa9gimes divers - Dispositions diverses",num_2163=2163,num_107=107,num_381=381,str_Article_D842_12="Article D842-12",num_937=937,str_prestations_fami_abr="prestations_familiales",num_690=690,str_est_enfant_le_pl_abr="est_enfant_le_plus_\xc3\xa2g\xc3\xa9",str_26440="26440",num_649=649,str_201700="201700",str_Unix_Unix_error="Unix.Unix_error",num_1139=1139,num_3355=3355,str_calculAidePerson_abr$0="calculAidePersonnaliseeLogement",num_3970=3970,num_553=553,str_Stack_overflow="Stack_overflow",num_1655=1655,num_4150=4150,num_1472=1472,str_condition_2_r823_4="condition_2_r823_4",str_Sous_Section_2_abr="Sous-Section 2 : Conditions d'octroi de l'aide personnalis\xc3\xa9e au logement aux personnes r\xc3\xa9sidant dans un logement-foyer",str_ligibilit_Aid_abr$0="\xc3\x89ligibilit\xc3\xa9AidesPersonnelleLogement",num_4843=4843,str_static="/static/",num_4641=4641,num_894=894,num_368=368,str_Not_found="Not_found",num_235=235,str_abr="\x01\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\x009\0<\0\0\0<\0\0\0\0\0A\0\0\0A\0\0\0\0\0F\0\0\0\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0T\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0^\0\0\0\0\0a\0\xff\xff\xff\xffa\0\xff\xff\xff\xff\xff\xff\xff\xffh\0\0\0\0\0\0\0\0\0m\0\0\0\0\0\0\0q\0\0\0\0\0\0\0u\0\0\0\0\0\0\0y\0\0\0\0\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\x8a\0\0\0\x8e\0\0\0\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x9a\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xb2\0\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xbb\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc2\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xc9\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xeb\0\0\0\0\0\0\0\xef\0\0\0\0\0\xff\xff\0\0\xf4\0\0\0\0\0\xff\xff\0\0\xf9\0\0\0\0\0\0\0\xfd\0\0\0\0\0\0\0\xff\xff\0\0\x03\x01\0\0\0\0\0\0\0\0\b\x01\0\0\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\x11\x01\0\0\0\0\0\0\0\0\x16\x01\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\0\0 \x01\0\0\0\0\0\0\xff\xff\0\0&\x01\0\0\0\0\0\0\0\0+\x01\0\0\0\0\0\0/\x01\0\0\0\0\0\0\0\x004\x01\0\0\0\0\0\x008\x01\0\0\0\0\0\0<\x01\0\0\0\0\0\0@\x01\0\0\0\0\0\0C\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0y\x01}\x01\0\0\0\0\x80\x01\xff\xff\xff\xff\x80\x01\xff\xff\xff\xff\xff\xff\xff\xff\x87\x01\0\0\0\0\0\0\0\0\x8c\x01\0\0\0\0\xff\xff\0\0\x90\x01\0\0\0\0\xff\xff\0\0\xff\xff\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xc1\x01\xc5\x01\0\0\0\0\xc8\x01\xff\xff\xff\xff\xc8\x01\xff\xff\xff\xff\xff\xff\xff\xff\xcf\x01\0\0\0\0\0\0\0\0\xd4\x01\0\0\0\0\xff\xff\0\0\xff\xff\xff\xff\0\0\xff\xff\0\0\xdc\x01\0\0\xff\xff\0\0\xe2\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xe9\x01\0\0\0\0\0\0\0\0\xff\xff\0\0\xf0\x01\0\0\0\0\0\0\0\0\xf5\x01\0\0\0\0\0\0\xf9\x01\0\0\0\0\0\0\xfc\x01\0\0\0\0\0\0\xff\xff\0\0\x02\x02\x04\x02\0\0\x05\x02\x06\x02\x07\x02\b\x02\t\x02\n\x02\x0b\x02\f\x02\r\x02\x0e\x02\x0f\x02\x10\x02\x11\x02\x12\x02\x13\x02\x14\x02\x15\x02\x16\x02\x17\x02\x18\x02\x19\x02\x1a\x02\x1b\x02\x1c\x02\x1d\x02\x1e\x02\x1f\x02 \x02!\x02\x03\x02",str_1085="1085",str_41268="41268",str_calcul_apl_logem_abr$1="calcul_apl_logement_foyer.date_courante",str_examples_allocat_abr$4="examples/allocations_familiales/epilogue.catala_fr",num_695=695,num_1398=1398,str_Mayotte="Mayotte",num_848054398=848054398,str_smic_date_courante="smic.date_courante",num_260=260,num_1841=1841,str_1224="1224",str_calcul_apl_locatif="calcul_apl_locatif",str_accession_propri_abr$10="accession_propri\xc3\xa9t\xc3\xa9.situation_r822_11_13_17",str_calcul_plafond_m_abr$0="calcul_plafond_mensualit\xc3\xa9_d832_10_3",num_1720=1720,num_979=979,str_rmdir="rmdir",num_696=696,num_1069=1069,num_32752=32752,str_19100="19100",str_33623="33623",str_ELOOP="ELOOP",str_37478="37478",str_calcul_nombre_parts="calcul_nombre_parts",num_280=280,str_Article_R842_5="Article R842-5",str_Article_23="Article 23",num_1026=1026,num_149=149,num_5006=5006,str_montant="montant",str_Article_L521_2="Article L521-2",str_examples_allocat_abr="examples/allocations_familiales/../smic/smic.catala_fr",num_675=675,num_3724=3724,str_calculAllocation_abr$0="calculAllocationLogementLocatif",str_false="false",num_849=849,str_37906="37906",str_Invalid_integer="Invalid integer: ",str_PasDeChangement="PasDeChangement",str_ligibilit_abr="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 la prime de d\xc3\xa9m\xc3\xa9nagement",num_875=875,num_106=106,num_346=346,num_186=186,num_0x80=0x80,str_Fatal_error_exc_abr="Fatal error: exception ",str_Chapitre_1er_D_abr="Chapitre 1er : Dispositions relatives aux prestations",str_ligibilit_co_abr$1="\xc3\xa9ligibilit\xc3\xa9_commune",str_0_0234="0.0234",str_43378="43378",num_913=913,str_calcul_apl_logem_abr$5="calcul_apl_logement_foyer.date_conventionnement",num_2524=2524,num_1054=1054,num_303=303,str_25978="25978",str_src_calendar_bui_abr="src/calendar_builder.ml",num_493=493,str_Section_2_R_g_abr="Section 2 : R\xc3\xa8gles de non-cumul",str$16="_",num_1970=1970,num_833=833,str_eligibilitePrime_abr="eligibilitePrimeDeDemenagement",num_517=517,str_compare_functio_abr="compare: functional value",str_0="0.",num_444=444,str_40928="40928",str_19300="19300",num_529348384=529348384,num_1564=1564,num_411=411,num_978=978,num_2039=2039,str_197700="197700",str_Invalid_argument="Invalid_argument",num_656=656,num_4832=4832,num_1666=1666,str_EndCall="EndCall([ ",num_823=823,str_0_9="0.9",str_prise_en_charge="prise_en_charge",str_Article_R822_22="Article R822-22",num_3563=3563,num_5092=5092,num_1600=1600,str_calcul_aide_pers_abr="calcul_aide_personnalis\xc3\xa9e_logement",str_34301="34301",num_4368=4368,str_577500="577500",str_ni="%ni",num_324=324,num_86400$0=86400.,num_5046=5046,num_2020=2020,str_PersonneSeule="PersonneSeule",str_ENOMEM="ENOMEM",num_45=-45,num_559=559,str_0_0238="0.0238",num_4113=4113,str_Article_9="Article 9",str_225100="225100",num_3544=3544,str_AutresPersonnes="AutresPersonnes",num_3457=3457,num_2495=2495,str_6$0="6",num_495=495,num_1471=1471,num_672=672,str_EPROTONOSUPPORT="EPROTONOSUPPORT",str_173600="173600",num_858=858,str_0$1="0",str_Section_3_Loge_abr="Section 3 : Logements-foyers",str_ENETRESET="ENETRESET",str_EINVAL="EINVAL",num_3792=3792,str_EDOM="EDOM",str_examples_aides_l_abr$1="examples/aides_logement/prologue.catala_fr",str_Article_L161_17_2="Article L161-17-2",str_EFBIG="EFBIG",num_543=543,str_eligibiliteAides_abr="eligibiliteAidesPersonnelleLogement",num_248=248,num_341=341,num_322=322,num_1510=1510,num_2007=2007,str_208200="208200",str_Zone1="Zone1",str_R_glement_CE_abr="R\xc3\xa8glement (CE) n\xc2\xb02866/98 du conseil du 31 d\xc3\xa9cembre 1998 concernant les taux de conversion entre l'euro et les monnaies des \xc3\x89tats membres adoptant l'euro",str_Locataire="Locataire",num_301=301,str_37457="37457",num_396=396,str_562800="562800",str_535744="535744",str_235800="235800",num_403=403,num_555=555,num_540=540,num_930=930,str_resetLog="resetLog",num_1760=1760,str_AllocationsFamil_abr="AllocationsFamiliales",str_ge_l512_3_2="\xc3\xa2ge_l512_3_2",num_3268=3268,str_situation_famili_abr="situation_familiale_calcul_apl",str_GardeAlterneeAll_abr="GardeAlterneeAllocataireUnique",str_haut="haut",num_631=631,num_4334=4334,num_1644=1644,num_1456=1456,num_4645=4645,num_1476=1476,num_1024=1024,num_1143=1143,str_204761="204761",str_3_1="3.1",num_726=726,num_5078=5078,num_3972=3972,num_133=133,str_35780="35780",str_calculAidePerson_abr="calculAidePersonnaliseeLogementFoyer",num_4470=4470,num_567=567,num_945=945,num_982=982,num_366=366,num_0xffffff=0xffffff,str_34829="34829",str_locatif="locatif",num_812=812,num_4179=4179,str_Titre_III_Titre_abr="Titre III: Titre III : Dispositions communes relatives au financement",str_36378="36378",str_Calculette_globale="Calculette globale",str_EISCONN="EISCONN",str_z$2="::z",num_286=286,num_1670=1670,num_671=671,str_Article_R824_1="Article R824-1",num_1994=1994,num_805=805,num_2010=2010,num_4619=4619,str_Prologue_prest_abr="Prologue : prestations familiales",num_2147483647=2147483647,num_772=772,str_774="774",num_689=689,str_characters=", characters ",num_456=456,num_0x7F=0x7F,str_180100="180100",str_BaseMensuelleAll_abr="BaseMensuelleAllocationsFamiliales",str_819="819",str_prestations_fami_abr$1="prestations_familiales.r\xc3\xa9sidence",str_Chapitre_IV_Ca_abr="Chapitre IV : Calcul des allocations de logement en secteur accession",str_AllocationJourna_abr$0="AllocationJournali\xc3\xa8rePresenceParentale",num_2385=2385,num_2063=2063,str_ESHUTDOWN="ESHUTDOWN",num_611=611,str_0$0=".0",num_2546=2546,num_4127=4127,str_36733="36733",num_1665=1665,num_977=977,num_4340=4340,str_AllocationFamili_abr="AllocationFamilialesAvril2008",num_693=693,num_5000=5000,num_855=855,num_535=535,str_AllocationRentre_abr="AllocationRentreeScolaire",num_920=920,str_mensualit_mini_abr="mensualit\xc3\xa9_minimale",str_2$0="2.",num_691=691,num_2129=2129,num_737=737,str_Concubins="Concubins",num_5036=5036,str_calcul_plafond_m_abr$1="calcul_plafond_mensualit\xc3\xa9_d842_6_avec_copropri\xc3\xa9t\xc3\xa9",num_816=816,str_SaintBarth_lemy="SaintBarth\xc3\xa9lemy",str_Partie_l_gislative="Partie l\xc3\xa9gislative",num_2003=2003,str_examples_allocat_abr$3="examples/allocations_familiales/securite_sociale_D.catala_fr",str_Article_R823_4="Article R823-4",str_32956="32956",str_294500="294500",str_examples_aides_l_abr$6="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_R.catala_fr",str_locatif_logement_abr$0="locatif.logement_meubl\xc3\xa9_d842_2",str_RessourcesAidesP_abr="RessourcesAidesPersonnelleLogement",num_1035=1035,num_934=934,num_2004=2004,str_Montant_des_plaf_abr="Montant des plafonds de ressources",str_Annexe="Annexe",str_Section_1_B_n_abr="Section 1 : B\xc3\xa9n\xc3\xa9ficiaires",num_3375=3375,str_3524="3524",str_Article_D832_27="Article D832-27",num_1101=1101,str_500="500",str_Zone3="Zone3",str_locatif_type_aide="locatif.type_aide",num_187=187,num_770=770,num_471=471,str_40144="40144",num_2015=2015,str_prise_en_compte="prise_en_compte",num_2629=2629,num_5060=5060,num_533=533,num_4226=4226,num_838=838,num_3784=3784,num_613=613,str_223900="223900",str_ServicesSociauxA_abr$0="ServicesSociauxAllocationVers\xc3\xa9eAuxServicesSociaux",num_138=138,num_1998=1998,str_Livre_VIII_Aid_abr="Livre VIII : Aides personnelles au logement",str_225500="225500",str_caract_ristique_abr$0="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_6",str_38892="38892",str_accession_propri_abr$3="accession_propri\xc3\xa9t\xc3\xa9.mensualit\xc3\xa9_principale",str_nan="nan",str_calculNombrePart_abr$0="calculNombrePartLogementFoyer",num_646=646,str_Impay_D_penseL_abr="Impay\xc3\xa9D\xc3\xa9penseLogement",num_1403=1403,num_3271=3271,str_Calculette_avec_abr="Calculette avec garde altern\xc3\xa9e",str_ECHILD="ECHILD",num_0xdfff=0xdfff,str$3="/",str_4_3="4.3",str_ETOOMANYREFS="ETOOMANYREFS",num_2788=2788,num_1017=1017,num_951=951,num_1591=1591,num_1179=1179,str_ENOTDIR="ENOTDIR",str_ETIMEDOUT="ETIMEDOUT",num_2872=2872,num_1073741823=1073741823,num_273=273,str_0_0068="0.0068",str_r="\\r",str_34600="34600",str_calcul_allocatio_abr="calcul_allocation_logement",num_513=513,str_coefficient_pris_abr="coefficient_prise_en_charge",num_206=206,str_src_time_Zone_ml="src/time_Zone.ml",num_734=734,str_Article_D161_2_1_9="Article D161-2-1-9",num_674=674,num_3282=3282,str_EWOULDBLOCK="EWOULDBLOCK",str_Guyane="Guyane",str_PasDeTravaux="PasDeTravaux",num_311=311,num_255=255,num_3407=3407,str_Revenu="Revenu",str_Partie_r_glemen_abr="Partie r\xc3\xa9glementaire - D\xc3\xa9crets en Conseil d'Etat",str_droit_ouvert_maj_abr="droit_ouvert_majoration",str_Partie_r_glemen_abr$1="Partie r\xc3\xa9glementaire",num_3133=3133,str_Sous_section_4_abr$0="Sous-section 4 : Prise en compte du patrimoine",str_D_clarations_de_abr="D\xc3\xa9clarations des champs d'application",str_Chapitre_1er_G_abr="Chapitre 1er : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",str_End_of_file="End_of_file",str_calcul_apl_logem_abr$8="calcul_apl_logement_foyer.condition_2_du_832_25",str_Chapitre_V_Cal_abr="Chapitre V : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur logement-foyer",str_calculAllocation_abr$1="calculAllocationLogementFoyer",str_traitement_aide_abr$5="traitement_aide_finale_r\xc3\xa9duction_loyer_solidarit\xc3\xa9",str_Article_24="Article 24",num_3678=3678,str_Failure="Failure",str_267871="267871",num_630=630,num_3814=3814,num_771=771,num_4268=4268,num_3980=3980,str_167800="167800",num_906=906,str_CalculetteAidesA_abr$0="CalculetteAidesAuLogement",num_664=664,str_ENETDOWN="ENETDOWN",num_684=684,num_715=715,str_abr$2="\xff\xff\xff\xff\xff\xff\x11\0\xff\xff\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x13\0\x13\0\x13\0\x13\0\x13\0\x13\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\t\0\xff\xff\t\0\xff\xff\xff\xff\x0e\0\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\0\x04\0\x04\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\0\0\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\x03\0\x05\0\x05\0\x05\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\x03\0\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x02\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\0\xff\xff\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\x07\0\x07\0\xff\xff\x12\0\x12\0\x12\0\x12\0\x12\0\x12\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\b\0\xff\xff\b\0\xff\xff\b\0\xff\xff\xff\xff\r\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\t\0\xff\xff\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\0\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\0\0\xff\xff\0\0\xff\xff\0\0\xff\xff\xff\xff\x06\0\xff\xff\xff\xff\xff\xff\x01\0\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\x04\0\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",num_0xdc00=0xdc00,str_389618="389618",str_3$0="3.",num_3225=3225,str_185800="185800",str_0_0201="0.0201",num_1850=1850,num_880=880,str_Sys_error="Sys_error",num_2112=2112,num_3683=3683,str_Article_D521_2="Article D521-2",num_703=703,num_60=60.,str_nombre_personnes_abr="nombre_personnes_\xc3\xa0_charge_prises_en_compte",str_Sous_section_4_abr="Sous-section 4 : Assurance vieillesse",str_Printexc_handle_abr="Printexc.handle_uncaught_exception",num_4239=4239,str_Article_D832_24="Article D832-24",str_30500="30500",num_618=618,num_1079=1079,num_745=745,str_int_of_string="int_of_string",str_194810="194810",str_Chapitre_Ier_P_abr="Chapitre Ier : Principes g\xc3\xa9n\xc3\xa9raux",str_Article_37="Article 37",str_examples_aides_l_abr$5="examples/aides_logement/arrete_2019-09-27.catala_fr",str_39340="39340",str_z=":z",num_2172=2172,str_name="name",num_3327=3327,num_103=103,num_447=447,num_4173=4173,str_Chapitre_2_Mod_abr="Chapitre 2 : Modalit\xc3\xa9s de liquidation et de versement des allocations de logement",num_428=428,num_792=792,str_traitement_aide_abr$2="traitement_aide_finale_redevance",num_132=132,str_1_4="1.4",num_803=803,num_698=698,str$10=" ])",str_31797="31797",num_4920=4920,num_1654=1654,num_839=839,str_19484="19484",num_988=988,str_Article_7="Article 7",str_ENODEV="ENODEV",num_773=773,str_Li="%Li",num_864=864,num_3686=3686,num_591=591,str_r_muneration_me_abr="r\xc3\xa9muneration_mensuelle",num_302=302,num_205=205,str_Article_14="Article 14",str_34570="34570",str_date_de_naissance="date_de_naissance",num_1090=1090,str_base_mensuelle_a_abr="base_mensuelle_allocations_familiales",num_1742=1742,num_927=927,num_2380=2380,str_z$1="_z",num_2000=2000,num_1951=1951,str_locatif_g_es_abr="locatif.\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers",num_860=860,num_136=136,str_Titre_IV_Alloc_abr$0="Titre IV : Allocations de logement",num_2763=2763,num_5034=5034,num_959=959,str_InterfaceAllocat_abr="InterfaceAllocationsFamiliales",str_retrieveRawEvents="retrieveRawEvents",num_985=985,num_1077=1077,str_Pendant="Pendant",str_a="%a",num_32044=32044,str$9=", ",str_5422="5422",num_199=199,num_2018=2018,str_17012="17012",str_calcul_quivale_abr="calcul_\xc3\xa9quivalence_loyer_minimale.condition_2_du_832_25",str_AllocationJourna_abr="AllocationJournalierePresenceParentale",num_1668=1668,str_Chapitre_III_C_abr="Chapitre III : Calcul des aides personnelles au logement en secteur locatif",str_kind_for_the_e_abr$1="' kind for the enumeration 'ElementPrestationsFamiliales.t'",num_682=682,str_Prestations_fami_abr="Prestations familiales",num_467=467,str_src_date_ml="src/date.ml",str_Enfant_Charge="Enfant\xc3\x80Charge",str_calculette="calculette",str_GardeAltern_eAl_abr="GardeAltern\xc3\xa9eAllocataireUnique",str_Article_D823_16="Article D823-16",str_172500="172500",num_4355=4355,str_EADDRINUSE="EADDRINUSE",num_4117=4117,str_n_nombre_parts_d_abr$0="n_nombre_parts_d832_25",num_4134=4134,num_609=609,num_1832=1832,str_ENOSYS="ENOSYS",str_Apres="Apres",str_locatif_zone="locatif.zone",num_359=359,str_examples_aides_l_abr$4="examples/aides_logement/../prestations_familiales/prologue.catala_fr",num_2837=2837,num_258=258,num_706=706,str_179800="179800",str$15=" ",num_361=361,str_Secteur_locatif="Secteur locatif",str_Undefined_recurs_abr="Undefined_recursive_module",str_output="output",str_accession_propri_abr$0="accession_propri\xc3\xa9t\xc3\xa9",num_776=776,str_base_mensuelle_a_abr$0="base_mensuelle_allocations_familiales.date_courante",str_199900="199900",num_536=536,num_1424=1424,num_976970511=-976970511,str_kind_for_the_e_abr="' kind for the enumeration 'SituationObligationScolaire.t'",str_16g="%.16g",str_220100="220100",num_918=918,num_189=189,str_droit_ouvert_for_abr="droit_ouvert_forfaitaire",num_620=620,str_i="%i",str_0_01="0.01",str_262985="262985",str_409505="409505",num_1669=1669,num_670=670,str_LogementFoyer="LogementFoyer",str_33026="33026",str_139700="139700",str_PrestationAccuei_abr="PrestationAccueilJeuneEnfant",str_Article_L822_4="Article L822-4",num_856=856,str_41252="41252",num_1618=1618,str_0_1="0.1",str_Allocation_duca_abr="Allocation\xc3\x89ducationEnfantHandicap\xc3\xa9",num_382=382,str_5399="5399",num_4200=4200,num_123=123,num_4667=4667,num_570=570,str_calcul_apl_logem_abr$4="calcul_apl_logement_foyer.type_logement_foyer",str_accession_propri_abr$9="accession_propri\xc3\xa9t\xc3\xa9.local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire",num_1671=1671,str_0_0173="0.0173",num_608=608,num_768=768,str_Arr_t_du_27_s_abr="Arr\xc3\xaat\xc3\xa9 du 27 septembre 2019 relatif au calcul des aides personnelles au logement et de la prime de d\xc3\xa9m\xc3\xa9nagement",num_1573=1573,num_159=159,str_LocationAccession="LocationAccession",str_logement_foyer_d_abr="logement_foyer.date_conventionnement",num_1067=1067,num_183=183,num_577=577,str_a_d_j_ouvert_abr="a_d\xc3\xa9j\xc3\xa0_ouvert_droit_aux_allocations_familiales",num_836=836,str_41338="41338",num_0xff=0xff,num_139=139,str_Arr_t_du_19_a_abr="Arr\xc3\xaat\xc3\xa9 du 19 avril 2022 relatif au rel\xc3\xa8vement du salaire minimum de croissance",num_12=-12,num_4167=4167,str_calcul_quivale_abr$2="calcul_\xc3\xa9quivalence_loyer_minimale.ressources_m\xc3\xa9nage_arrondies",num_458=458,str_Article_15="Article 15",str_0_75="0.75",str_Titre_5_Dispos_abr="Titre 5 : Dispositions particuli\xc3\xa8res \xc3\xa0 la Guadeloupe, \xc3\xa0 la Guyane, \xc3\xa0 la Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy et \xc3\xa0 Saint-Martin",str_22355="22355",num_3654863=3654863,str_140800="140800",num_145=145,str_Chapitre_5_All_abr="Chapitre 5 : Allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",num_455=455,num_1997=1997,str_163000="163000",str_0_5="0.5",str_Article_R842_14="Article R842-14",str_fd="fd ",num_641=641,num_3904=3904,num_900=900,num_764=764,num_2571=2571,num_1120=1120,str_194200="194200",num_610=610,str_41751="41751",str_181800="181800",str_41316="41316",str_traitement_aide_abr$1="traitement_aide_finale_contributions_sociales_arrondi",num_3750=3750,num_993=993,str_cat_gorie_calcu_abr="cat\xc3\xa9gorie_calcul_apl",num_3949=3949,str_Prise_en_compte_abr="Prise en compte des ressources pour les aides personnelles au logement",str_757="757",str_coefficents_enfa_abr="coefficents_enfants_garde_altern\xc3\xa9e_pris_en_compte",num_377=377,num_1081=1081,str_B="%B",num_848=848,num_2001=2001,str_Compl_mentFamilial="Compl\xc3\xa9mentFamilial",num_922=922,num_633=633,str_smic_r_sidence="smic.r\xc3\xa9sidence",str_Livre_5_Presta_abr="Livre 5 : Prestations familiales et prestations assimil\xc3\xa9es",num_1018=1018,str_Article_D832_18="Article D832-18",num_108=108,num_2147483648=-2147483648,str_1$0="1",num_2002=2002,num_4997=4997,str_Chapitre_II_Di_abr="Chapitre II : Dispositions applicables aux ressources",num_1797=1797,num_1678=1678,num_606=606,num_1657=1657,num_890=890,str_Article_R822_7="Article R822-7",str_42605="42605",num_845=845,str_VendeurQuandDema_abr="VendeurQuandDemandeurAContratLocationAccession",str_Article_R755_0_2="Article R755-0-2",str_EAGAIN="EAGAIN",str_calculNombrePart_abr="calculNombrePartsAccessionPropriete",num_406=406,str_Not_a_directory=": Not a directory",num_4132=4132,str_allocationFamili_abr="allocationFamilialesAvril2008",str_b$0="b",num_3317=3317,num_1609=1609,str_Article_D521_3="Article D521-3",str_accession_propri_abr$2="accession_propri\xc3\xa9t\xc3\xa9.nombre_personnes_\xc3\xa0_charge",str_CalculAidePerson_abr$2="CalculAidePersonnalis\xc3\xa9eLogement",str_D331_63_64="D331_63_64",str_EDESTADDRREQ="EDESTADDRREQ",num_2012=2012,num_287=287,num_3968=3968,str_Out_of_memory="Out_of_memory",num_86400=86400,str_42469="42469",str_4="4",str_examples_aides_l_abr$3="examples/aides_logement/code_construction_reglementaire.catala_fr",str_index_out_of_bounds="index out of bounds",num_4765=4765,num_601=601,num_668=668,str_bigarr02="_bigarr02",str_31264="31264",num_975=975,num_881=881,num_0xffffffff=0xffffffff,str_LaR_union="LaR\xc3\xa9union",num_4248=4248,str_Article_L822_5="Article L822-5",num_2103=2103,str_981600="981600",num_574=574,num_292=292,num_0xffff=0xffff,str_accession_propri_abr$8="accession_propri\xc3\xa9t\xc3\xa9.type_travaux_logement",num_2009=2009,str_EBUSY="EBUSY",str_ENETUNREACH="ENETUNREACH",num_417088404=417088404,num_222=222,str_17g="%.17g",num_400=400,str_calcul_quivale_abr$1="calcul_\xc3\xa9quivalence_loyer_minimale.n_nombre_parts_d832_25",num_1806=1806,str_100="100.",num_3600=3600,str_1_25="1.25",num_143=143,num_3302=3302,num_4783=4783,str_logement_foyer_t_abr="logement_foyer.type_logement_foyer",str_44729="44729",str_ge_minimum_ali_abr="\xc3\xa2ge_minimum_alin\xc3\xa9a_1_l521_3",num_963043957=963043957,num_2281=2281,num_126=126,str_5="5",num_142=142,num_741=741,str_AllocationSoutie_abr="AllocationSoutienFamilial",num_840=840,str_SousLocataire="SousLocataire",str_34713="34713",num_4197=4197,num_2080=2080,num_628=628,num_1458=1458,str_Section_1_Calc_abr="Section 1 : Calcul, liquidation et versement des aides",num_124=124,num_1673=1673,str_Article_L512_3="Article L512-3",str_0_98="0.98",num_422=422,num_917=917,str_633129="633129",num_427=427,num_150=150,str_41440="41440",str_ligibilit_Pri_abr="\xc3\x89ligibilit\xc3\xa9PrimeDeD\xc3\xa9m\xc3\xa9nagement",num_135=135,str_Sous_section_2_abr="Sous-section 2 : Calcul de l'aide en secteur locatif",num_252=252,str_enfant_le_plus_abr="enfant_le_plus_\xc3\xa2g\xc3\xa9",str_examples_allocat_abr$2="examples/allocations_familiales/prologue.catala_fr",str_EPROTOTYPE="EPROTOTYPE",str_CalculAidePerson_abr$1="CalculAidePersonnalis\xc3\xa9eLogementFoyer",str$8=".",str_EINTR="EINTR",num_147=147,num_0xf0=0xf0,str_eligibilitePrest_abr="eligibilitePrestationsFamiliales",str_12="12.",num_1661=1661,num_744=744,num_694=694,str_Guadeloupe="Guadeloupe",num_4062=4062,num_276=276,num_4083=4083,str_230500="230500",num_116=116,str_enfantLePlusAge="enfantLePlusAge",num_576=576,str_EALREADY="EALREADY",num_365=365,num_627=627,num_515=515,num_3954=3954,num_294=294,str_traitement_aide_abr$7="traitement_aide_finale_montant_minimal",str_impossible_case="impossible case",num_1073=1073,str_examples_allocat_abr$6="examples/allocations_familiales/securite_sociale_R.catala_fr",num_3087=3087,str_R_gles_diverses="R\xc3\xa8gles diverses",num_1080=-1080,num_500=500,str_EAFNOSUPPORT="EAFNOSUPPORT",str_18185="18185",num_969837588=969837588,num_872=872,num_5032=5032,str_PM="PM",num_1098=1098,str_SaintBarthelemy="SaintBarthelemy",num_638=638,num_1063=1063,str_ENFILE="ENFILE",num_1023$0=-1023,num_859=859,str_ressources_m_na_abr="ressources_m\xc3\xa9nage_avec_arrondi",str_ouvertureDroitsR_abr="ouvertureDroitsRetraite",str_ligibilit_ai_abr="\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement",str_204700="204700",str_Article_L755_12="Article L755-12",num_1735=1735,num_1083=1083,str_TravauxPourAcqui_abr="TravauxPourAcquisitionD832_15_1",str_Ancien="Ancien",num_2584=2584,str_lib_read_mll="lib/read.mll",num_541=541,num_870=870,num_853=853,str_1229="1229",num_3728=3728,num_939=939,str_Article_premier="Article premier",num_501=501,num_3859=3859,num_974=974,str_ligibilit_abr$0="\xc3\x89ligibilit\xc3\xa9 \xc3\xa0 l'aide personnalis\xc3\xa9e au logement",num_1582=1582,num_1048=1048,num_1788=1788,str$2='"',num_460=460,str_Arr_t_du_14_d_abr="Arr\xc3\xaat\xc3\xa9 du 14 d\xc3\xa9cembre 2020 relatif au montant des plafonds de ressources de certaines prestations familiales et aux tranches du bar\xc3\xa8me applicable au recouvrement des indus et \xc3\xa0 la saisie des prestations",str_examples_aides_l_abr$0="examples/aides_logement/../prestations_familiales/s\xc3\xa9curit\xc3\xa9_sociale_L.catala_fr",str_CalculAllocation_abr$1="CalculAllocationLogement",str_3539="3539",str$14="<",num_931=931,str_208500="208500",str_prestations_fami_abr$0="prestations_familiales.date_courante",num_0x800=0x800,str_EPERM="EPERM",num_3409=3409,num_617=617,num_182=182,num_398=398,str_ligibilit="\xc3\xa9ligibilit\xc3\xa9",num_1152=1152,num_0_012=0.012,str_233000="233000",num_719=719,str_calculAidePerson_abr$1="calculAidePersonnaliseeLogementLocatif",str_Article_33="Article 33",num_3679=3679,str_M_tropole="M\xc3\xa9tropole",num_842=842,str_40696="40696",num_209=209,str_ressources_m_na_abr$0="ressources_m\xc3\xa9nage_arrondies_seuil",num_204=204,str_Article_D815_1="Article D815-1",num_834=834,str_conditions_hors_abr="conditions_hors_\xc3\xa2ge",num_783=783,str_traitement_aide_abr$0="traitement_aide_finale_abattement",num_727=727,str_Dispositions_sp_abr="Dispositions sp\xc3\xa9ciales relatives \xc3\xa0 Mayotte",num_726928360=726928360,num_562=562,str_221100="221100",str$1="([^/]+)",num_165=165,str_Article_39="Article 39",num_700=700,num_4701=4701,num_0xf=0xf,num_3933=3933,num_2424=2424,str_798="798",str_BailleurSocial="BailleurSocial",str_logement_foyer_n_abr="logement_foyer.nombre_personnes_\xc3\xa0_charge",str_montant_initial_abr$0="montant_initial_m\xc3\xa9tropole_majoration",num_125=125,num_372=372,num_818=818,num_1092=1092,str_Division_by_zero="Division_by_zero",num_520=520,num_736=736,str_Article_L832_3="Article L832-3",num_708012133=708012133,str_SituationObligat_abr="SituationObligationScolaire",num_589=589,str_AutrePersonne_C_abr="AutrePersonne\xc3\x80Charge",str_44440="44440",num_879=879,num_532=532,str_AllocationJeuneE_abr="AllocationJeuneEnfant",num_566=566,num_2014=2014,num_1059=1059,str_22262="22262",num_552=552,str_Article_D842_17="Article D842-17",num_659=659,str_EADDRNOTAVAIL="EADDRNOTAVAIL",num_697=697,str_Article_L751_1="Article L751-1",num_503=503,num_119=119,num_104=104,str_montant_avec_gar_abr="montant_avec_garde_altern\xc3\xa9e_majoration",str_70="70",num_412=412,num_3478=3478,str_calculette_sans_abr="calculette_sans_garde_altern\xc3\xa9e",str_Instruction_inte_abr$0="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2022/82 du 28 mars 2022 relative \xc3\xa0 la revalorisation au 1er avril 2022 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",num_321=321,str_version_avril_2008="version_avril_2008",num_468=468,num_279=279,str_38361="38361",num_127686388=127686388,num_714=714,str_locatif_r_ducti_abr="locatif.r\xc3\xa9duction_loyer_solidarit\xc3\xa9",num_1390=1390,num_439=439,num_2013=2013,str_ouverture_droits_abr="ouverture_droits_retraite",num_102=102,num_1464=1464,num_1486=1486,num_4638=4638,str_100000="100000.",num_5038=5038,str_18261="18261",str_logement_foyer_r_abr="logement_foyer.ressources_m\xc3\xa9nage_arrondies",num_101=101,str_calcul_nombre_pa_abr$1="calcul_nombre_parts.situation_familiale_calcul_apl",str_body="body",str_Calcul_des_contr_abr="Calcul des contributions sociales s'appliquant aux aides personnelles au logement",str_Unexpected_s_abr="Unexpected '%s' kind for the enumeration 'Collectivite.t'",num_1e7=1e7,str_abr$3="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\x03\0\x03\0\x86\0\0\0\x03\0\0\0\x86\0E\x01\x92\x01\xff\xff\0\0E\x01\x92\x01\0\0\0\0\0\0\0\0\x7f\0\x8b\0\0\0\x03\0\0\0\f\0\x03\0\xaa\0\x86\0\xaf\0\0\0\x07\0\x0b\x01E\x01\x92\x01\x0e\x01\r\x001\0\x05\0\n\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\x008\0v\0\x06\0\x81\0\x82\x009\0\xed\x01\x89\0\0\x021\0\0\x000\0\x8a\0j\0>\0\x0e\0n\0i\0\0\x001\0\x0f\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x0b\0\x1e\x000\0\b\0r\0\xd1\0\xec\0\0\x01\r\x01\x1d\0\x16\0\xff\xff0\x000\0\x11\0\x15\0\x19\0 \0!\0#\0\x17\0\x1b\0\x10\0\x1f\0\x1c\0\"\0\x13\0\x18\0\x12\0\x1a\0\x14\0$\0)\0%\x000\0\t\0*\0+\0,\0-\0.\0/\0=\0U\x000\0&\0'\0'\0'\0'\0'\0'\0'\0'\0'\x001\0C\0'\0'\0'\0'\0'\0'\0'\0'\0'\0'\0V\0\x8f\0\xff\xff(\0\x90\0\x91\0\x92\x007\0\x94\x007\0\x95\x000\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\x002\0\xff\xff0\0\x96\0\x97\0\xa1\0B\0\x9e\x005\0\x9f\x005\0\xa0\x003\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\x004\0\xa5\x003\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xa2\0\xa3\0\xa6\0]\0\xff\xff\x02\x006\x006\x006\x006\x006\x006\x006\x006\x006\x006\0\xff\xffM\0g\0l\0t\0\x84\0\x86\0\x87\0\x80\0\x8b\0\x86\0\xa4\0]\0\xab\0M\0\xa7\0\xa8\0\xa9\0\xac\0p\0\xad\0\xae\0\xd2\0\xe2\0\xd0\0\xd3\0\xd4\0;\0S\0\x86\0\xd5\0\xd6\0\xd7\0\xd8\0\xda\0\x8d\0\xdb\0]\0\xdc\0\xdd\0{\0\xde\0\xdf\0\xe0\0\x88\0_\0\xe1\0#\x01A\x01\xea\0\x9b\0\x05\x01a\x01\xfa\0\xff\xff\xfe\x009\x01=\x01_\x01M\0,\x01\\\x01X\x01\t\x01\x1d\x01L\0|\0!\x01\x12\x01K\0b\0\x13\x01U\x01V\x01W\x01x\x01Y\x01J\0\xe1\x005\x01y\x01I\0Z\x01H\0G\0N\0N\0N\0N\0N\0N\0N\0N\0N\0N\0b\0q\x01z\0[\x01@\0\x04\x01]\x01N\0N\0N\0N\0N\0N\0O\0O\0O\0O\0O\0O\0O\0O\0O\0O\0\x9c\0p\x01^\x01`\x01b\x01c\x011\x01O\0O\0O\0O\0O\0O\0d\x01\x9d\0e\x01N\0N\0N\0N\0N\0N\0\xb7\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\x18\x01p\x01\xff\xff\x19\x01f\x01g\x01i\x01O\0O\0O\0O\0O\0O\0P\0P\0P\0P\0P\0P\0P\0P\0P\0P\0j\x01k\x010\x01(\x01l\x01m\x01n\x01P\0P\0P\0P\0P\0P\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0Q\0o\x01\x1b\x01\xff\xff\xab\x01\x1f\x01\xaa\x01\x17\x01Q\0Q\0Q\0Q\0Q\0Q\0\\\0\xa8\x01?\x01P\0P\0P\0P\0P\0P\0\xf8\0\xa5\x01\xfc\0\xa2\x01;\x01E\0W\0W\0W\0W\0W\0W\0W\0W\0W\0W\0\xff\xffQ\0Q\0Q\0Q\0Q\0Q\0W\0W\0W\0W\0W\0W\0X\0X\0X\0X\0X\0X\0X\0X\0X\0X\0'\x01*\x01\xff\xff\xa3\x01\xa4\x01x\0\x02\x01X\0X\0X\0X\0X\0X\0\xa6\x017\x01\x99\0W\0W\0W\0W\0W\0W\0\x07\x01\xa7\x01\xa4\x01\xa9\x01\x10\x01\xa4\x01Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\0Y\x003\x01X\0X\0X\0X\0X\0X\0Y\0Y\0Y\0Y\0Y\0Y\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0Z\0a\0\x89\x01\xa4\x01\xac\x01\xb9\x01\x88\x01\xad\x01Z\0Z\0Z\0Z\0Z\0Z\0a\0\xb3\0\xae\x01Y\0Y\0Y\0Y\0Y\0Y\0.\x01\xaf\x01\xb0\x01\xb4\0\xa4\x01\xb8\x01\xb5\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0|\x01Z\0Z\0Z\0Z\0Z\0Z\0\xc0\x01\xb2\x01\x15\x01\xb3\x01a\0\xc1\x01\xb4\x01\xb5\x01\xb6\x01\xb7\x01\xa4\x01\xd8\x01\xff\xffa\0\xb8\x01\xd8\x01\xd1\x01a\0\xdf\x01a\0\xd0\x01\xe6\x01\x03\x02a\0\xdb\x01%\x01\xd8\x01\xd9\x01\x03\x02\xdc\x01\xd8\x01a\0\x03\x02\x03\x02\xd8\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0c\0c\0c\0c\0\xd8\x01\x03\x02~\x01\x03\x02\x03\x02\x03\x02\x03\x02c\0c\0c\0c\0c\0c\0a\0\x03\x02\xda\x01\xfa\x01\x03\x02\x03\x02a\0\x03\x02|\x01|\x01a\0\x03\x02\xdd\x01\x03\x02\xfd\x01\x03\x02\x03\x02\x03\x02a\0\xff\xff\x03\x02\xc4\x01a\0\x03\x02a\0`\0c\0c\0c\0c\0c\0c\0d\0d\0d\0d\0d\0d\0d\0d\0d\0d\0\xeb\x01\x03\x02\xf1\x01\x03\x02\xff\x01\xf2\x01\x03\x02d\0d\0d\0d\0d\0d\0e\0e\0e\0e\0e\0e\0e\0e\0e\0e\0\xf6\x01\x81\x01\x81\x01\xe4\x01\x03\x02\xc4\x01\x03\x02e\0e\0e\0e\0e\0e\0\x03\x02\xc6\x01\x03\x02d\0d\0d\0d\0d\0d\0\x03\x02\x03\x02\x03\x02\xc4\x01\xea\x01\x86\x01a\0a\0a\0a\0a\0a\0a\0a\0a\0a\0\0\0e\0e\0e\0e\0e\0e\0a\0a\0a\0a\0a\0a\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\xb6\0\0\0\0\0\xc9\x01\xb1\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xb8\0\xbc\0\0\0a\0a\0a\0a\0a\0a\0\xc9\x01\xe3\x01\0\0\xbf\0\xce\x01{\x01\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbd\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xbe\0\xc3\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc6\0\xff\xff\xf8\x01\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc4\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xc5\0\xca\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xcd\0\xff\xff\xff\xff\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe2\0\xc3\x01\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\x01\0\0\0\0\xce\0\xdd\x01\xef\x01\xfe\x01\0\0\xcf\0\xf4\x01\0\0\xe1\0\xcb\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xcc\0\xe8\0\0\0\xe8\0\0\0\xe1\x01\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xd9\0\xff\xff\0\0\0\0\0\0\0\0\xe1\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\xe3\0\0\0\0\0\0\0\0\0\xff\xff\0\0\0\0\xe6\0\0\0\xe6\0\0\0\xe4\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\xe5\0\0\0\xe4\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xba\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\xe7\0\0\0\0\0\0\0\0\0\0\0\xf1\0\0\0q\x01\0\0M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01\0\0p\x01\0\0\0\0\xc1\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0p\x01\0\0\0\0\0\0\xf0\0\xc8\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\0\0\xf6\0\0\0\0\0\xf0\0\0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xee\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\0\0\0\0\0\0\0\0\xf5\0\0\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0\xf5\0E\x01F\x01\0\0\0\0E\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\x01\0\0N\x01\0\0\0\0\0\0\0\0h\x01I\x01\0\0\0\0\0\0\0\0O\x01\0\0G\x01L\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01M\x01\0\0\0\0H\x01\0\0\0\0\0\0\0\0\0\0\xf3\0\0\0\0\0\0\0\0\0\0\0\0\0P\x01w\x01\0\0w\x01\0\0Q\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\0\0J\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01r\x01S\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0R\x01\0\0\0\0s\x01\0\0\0\0T\x01\0\0\0\0u\x01\0\0u\x01\0\0K\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01\0\0s\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01t\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01v\x01\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\xb9\x01\0\0\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\x82\x01\xb8\x01\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\0\0\0\0D\x01\x80\x01\x80\x01\x80\x01\x7f\x01\0\0\x80\x01\0\0\0\0\xb8\x01\0\0\0\0\0\0\0\0\x80\x01\0\0\0\0\0\0\x80\x01\0\0\x80\x01\x7f\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\0\0\0\0\0\0\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\x83\x01\0\0\0\0\0\0\0\0\0\0\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\0\0\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x84\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\xbf\x01\x8e\x01\xbf\x01\0\0\0\0\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\0\0\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x80\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\0\0\0\0\0\0\0\0\x8d\x01\0\0\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x8d\x01\x92\x01\x93\x01\0\0\0\0\x92\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\x92\x01\0\0\x99\x01\0\0\0\0\0\0\0\0\xb1\x01\x96\x01\0\0\0\0\0\0\xc8\x01\x9c\x01\0\0\x94\x01\x9a\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\x9b\x01\0\0\0\0\x95\x01\0\0\0\0\0\0\0\0\0\0\0\0\x8b\x01\0\0\0\0\0\0\0\0\0\0\x9d\x01\0\0\0\0\0\0\0\0\x9e\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xba\x01\xc8\x01\0\0\x97\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\xbb\x01\0\0\xa0\x01\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\x9f\x01\xc8\x01\0\0\xc8\x01\xc7\x01\0\0\xa1\x01\0\0\0\0\0\0\0\0\0\0\0\0\x98\x01\0\0\0\0\0\0\0\0\xbd\x01\0\0\xbd\x01\0\0\xbb\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbc\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xbe\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\xca\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\x91\x01\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\0\0\0\0\0\0\xc8\x01\0\0\xc8\x01\xc7\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\0\0\0\0\0\0\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\xcb\x01\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xcc\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\0\0\xd6\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xc8\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\xd5\x01\0\0\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\xd5\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd3\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",num_254=254,str_calcul_apl_logem_abr$7="calcul_apl_logement_foyer.zone",num_407=407,str_accession_propri_abr$1="accession_propri\xc3\xa9t\xc3\xa9.zone",str_6="6.",str_1003="1003",str_ECONNABORTED="ECONNABORTED",str_EFAULT="EFAULT",str_Article_L841_2="Article L841-2",str_flags_Open_te_abr=" : flags Open_text and Open_binary are not compatible",num_902=902,str_EDEADLK="EDEADLK",str_EIO="EIO",str_Article_D832_15="Article D832-15",str_Titre_VI_Dispo_abr="Titre VI : Dispositions relatives aux prestations et aux soins - Contr\xc3\xb4le m\xc3\xa9dical - Tutelle aux prestations sociales",str_43248="43248",num_1992=1992,str_examples_aides_l_abr$2="examples/aides_logement/../base_mensuelle_allocations_familiales/bmaf.catala_fr",str$0="\\\\",num_2555=2555,str_Code_de_la_const_abr="Code de la construction et de l'habitation",str_Instruction_inte_abr$2="Instruction interministerielle no DSS/SD2B/2019/261 du 18 d\xc3\xa9cembre 2019 relative \xc3\xa0 la revalorisation au 1er janvier 2020 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 La R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",str_Article_38="Article 38",num_2739=2739,num_188=188,num_1045=1045,str_0_04="0.04",num_463=463,str_0_0226="0.0226",num_270=270,str_192500="192500",str_230700="230700",num_926=926,str_0_0463="0.0463",str_217600="217600",str_GardeAlterneePar_abr="GardeAlterneePartageAllocations",num_519=519,str_EHOSTDOWN="EHOSTDOWN",str_abr$1="\0\0\xec\xff\xed\xff\x03\0\xef\xff\x10\0\xf2\xff\xf3\xff\xf4\xff\xf5\xff\0\0\x1f\0\xf9\xffU\0\x01\0\0\0\0\0\x01\0\0\0\x01\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x01\0\x04\0\xfd\xff\x0b\0\xfc\xff\x03\0\x01\0\x03\0\x02\0\x03\0\0\0\xfb\xff\x15\0a\0\n\0\x16\0\x14\0\x10\0\x16\0\f\0\b\0\xfa\xffw\0\x81\0\x8b\0\xa1\0\xab\0\xb5\0\xc1\0\xd1\0\xf0\xff\x0b\0&\0\xfc\xffA\0\xfe\xff\xff\xffn\0\xfc\xff\xa3\0\xfe\xff\xff\xff\xea\0\xf7\xff\xf8\xff0\x01\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xffG\x01~\x01\x95\x01\xf9\xff'\0\xfd\xff\xfe\xff&\0\xbb\x01\xd2\x01\xf8\x01\x0f\x02\xff\xff\xdc\0\xfd\xff\xff\xff\xf5\0'\x02m\x02\x0e\x01X\x02\xa4\x02\xbb\x02\xe1\x02\r\0\xfc\xff\xfd\xff\xfe\xff\xff\xff\x0e\0\xfd\xff\xfe\xff\xff\xff\x1e\0\xfd\xff\xfe\xff\xff\xff\x0f\0\xfd\xff\xfe\xff\xff\xff\x11\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\x13\0\xfc\xff\xfd\xff\xfe\xff\x0f\0\xff\xff\x10\0\xff\xff\b\x01\x05\0\xfd\xff\x17\0\xfe\xff\x14\0\xff\xff.\0\xfd\xff\xfe\xff*\x004\x005\0\xff\xff5\x000\0[\0\\\0\xff\xff\x1b\x01\xfa\xff\xfb\xff\x89\0h\0Y\0X\0j\0\xff\xff\x8f\0\x89\0\xb1\0\xfe\xff\xb7\0\xa8\0\xa6\0\xb7\0\x02\0\xfd\xff\xb1\0\xac\0\xbb\0\x04\0\xfc\xff5\x02\xfb\xff\xfc\xff\xfd\xffg\x01\xff\xff\xf8\x02\xfe\xff\x06\x03\x1e\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff(\x032\x03J\x03\xfc\xff\xfd\xff\xfe\xff\xff\xff=\x03T\x03l\x03\xf9\xff\xfa\xff\xfb\xff\xf4\0x\x03\x8e\x03\xb3\0\xc2\0\x0f\0\xff\xff\xbe\0\xbc\0\xbb\0\xc1\0\xb7\0\xb3\0\xfe\xff\xbf\0\xc9\0\xc8\0\xc4\0\xcb\0\xc1\0\xbd\0\xfd\xff\x9d\x03_\x03\xae\x03\xc4\x03\xce\x03\xd8\x03\xe4\x03\xef\x03<\0\xfd\xff\xfe\xff\xff\xff\f\x04\xfc\xff\xfd\xffW\x04\xff\xff\x91\x04\xfc\xff\xfd\xff\xdd\x04\xff\xff\xe5\0\xfd\xff\xfe\xff\xff\xff\xe7\0\xfd\xff\xfe\xff\xff\xff\x02\0\xff\xff\x12\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\"\x01\xfd\xff\xfe\xff\xff\xff\0\0\xff\xff\x03\0\xfe\xff\xff\xff&\x01\xfc\xff\xfd\xff\xfe\xff\xff\xffx\x01\xfb\xff\xfc\xff\xfd\xff\xfe\xff\xff\xff\xd0\0\xfd\xff\xfe\xff\xff\xff\xd3\0\xfd\xff\xfe\xff\xff\xff\xbd\0\xff\xff\x8f\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff\r\x01\xfd\xff\xfe\xff\xff\xff_\x01\xfc\xff\xfd\xff\xfe\xff\xff\xff2\x01\xfd\xff\xfe\xff\xff\xff\x1a\x01\xfd\xff\xfe\xff\xff\xff\xe9\0\xfd\xff\xfe\xff\xff\xff\xde\0\xfd\xff\xfe\xff\xff\xffO\x05\xed\xff\xee\xff\n\0\xf0\xff,\x01\xf3\xff\xf4\xff\xf5\xff\xf6\xff=\x01\x02\x04\xf9\xff-\x05\xd1\0\xe4\0\xd3\0\xe8\0\xe1\0\xdf\0\xf0\0\xff\xff\xeb\0\xea\0\b\x01\xfe\xff\x04\x01\x17\x01\xfd\xff6\x01\xfc\xff\x1f\x01\x1d\x01 \x01'\x011\x01-\x01\xfb\xff9\x01R\x01P\x01N\x01T\x01J\x01V\x01\xfa\xffn\x05\f\x04{\x05\x9b\x05\xa5\x05\xb1\x05\xbb\x05\xc5\x05\xf1\xff\xc7\x01M\x02\xfd\xff\xff\xff\x9a\x02\xde\x05\xd1\x05\x9b\x02\xef\x055\x06L\x06r\x06\x10\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x98\x06\xfc\xff\xfd\xff\xe3\x06\xff\xffU\x07\xf4\xff\xf5\xff\x0b\0\xf7\xffL\x02\xfa\xff\xfb\xff\xfc\xff\xfd\xff\xfe\xff\x1f\x02\xf3\x053\x07d\x01s\x01h\x01\x85\x01v\x01\x9a\x01\xab\x01\xff\xff\xad\x01\xb0\x01\xbf\x01\xb9\x01\xbb\x01\xfd\x01\xe6\x01\xe6\x01\xea\x01\xf7\x01\xed\x01\xea\x01\t\x02\x13\x02\x13\x02\x0f\x02\x15\x02\x0b\x02\x07\x02\x8e\x06\x98\x06t\x07\xaa\x07\xb4\x07\xbe\x07\xc8\x07\xd2\x07\xf8\xffx\x02\xa7\x02\xfd\xff\xff\xff\xd8\x02R\x07\xdc\x07\xec\x02\xf4\x07:\bQ\bw\bL\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x9d\b\xfc\xff\xfd\xff\xe8\b\xff\xff\x87\x02x\x02\xfd\xffd\x02\xfe\xff\xb6\x02\xff\xff\x0b\x02\xff\xff\xcc\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff.\x02\xff\xff\xb2\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\x17\0\xff\xff\xb7\x02\xfc\xff\xfd\xff\xfe\xff\xff\xff\xbb\x02\xfd\xff\xfe\xff\xff\xffy\x02\xfd\xff\xfe\xff\xff\xff\xb8\x02\xfc\xff\xfd\xff\xfe\xff\x13\0\xff\xff\x8c\x01\x92\x01\xff\xff\x96\x01\x97\x01\x9a\x01\xa8\x01\xaa\x01\xab\x01\xac\x01\xad\x01\xb5\x01\xb8\x01\xb9\x01\xbb\x01\xbf\x01\xc1\x01\xc3\x01\xc4\x01\xc5\x01\xc8\x01\xcb\x01\xdf\x01\xe1\x01\xe4\x01\xf9\x01\xfb\x01\x02\x02\x04\x02\x0b\x02\f\x02\r\x02\0\0",str_0_55="0.55",num_109=109,str_droit_ouvert="droit_ouvert",str_Champs_d_applica_abr="Champs d'applications",num_479=479,str_ENOTSOCK="ENOTSOCK",num_669=669,str_locatif_nombre_p_abr="locatif.nombre_personnes_\xc3\xa0_charge",num_4250=4250,str_ContributionsSoc_abr="ContributionsSocialesAidesPersonnelleLogement",str_Article_D832_10="Article D832-10",str_Interface_du_pro_abr="Interface du programme",num_944=944,num_97=-97,str_examples_aides_l_abr$7="examples/aides_logement/archives.catala_fr",num_4138=4138,num_469=469,num_953=953,num_2572=2572,num_1461=1461,num_666=666,num_1455=1455,str_Article_D823_20="Article D823-20",str_ServicesSociauxA_abr="ServicesSociauxAllocationVerseeAuxServicesSociaux",str_d_pense_nette_m_abr="d\xc3\xa9pense_nette_minimale_d832_27",num_195=195,str_218700="218700",str_1="1.",num_3454=3454,num_4930=4930,num_1015=1015,str_EOPNOTSUPP="EOPNOTSUPP",num_1094=1094,str_DecisionTaken="DecisionTaken(_)",num_1040=1040,str_45200="45200",str_d_pense_nette_m_abr$0="d\xc3\xa9pense_nette_minimale",num_2440588=2440588,num_844=844,num_728=728,str_Titre_I_Alloca_abr="Titre I : Allocations aux personnes \xc3\xa2g\xc3\xa9es",str_ECONNRESET="ECONNRESET",num_141=141,str_Livre_I_G_n_abr="Livre I : G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s - Dispositions communes \xc3\xa0 tout ou partie des r\xc3\xa9gimes de base",num_1189=1189,str_ESPIPE="ESPIPE",num_4338=4338,str_Article_D823_17="Article D823-17",str_Instruction_mini_abr="Instruction minist\xc3\xa9rielle N\xc2\xb0DSS/SD2B/2019/65 du 25 mars 2019 relative \xc3\xa0 la revalorisation au 1er avril 2019 des prestations familiales servies en m\xc3\xa9tropole",num_1553=1553,num_596=596,str_E2BIG="E2BIG",num_4643=4643,num_2440587_5=2440587.5,str_AllocationLogement="AllocationLogement",str_5186="5186",num_4478=4478,str_Unexpected_s_abr$1="Unexpected '%s' kind for the enumeration 'SituationObligationScolaire.t'",str_accession_propri_abr="accession_propri\xc3\xa9t\xc3\xa9.date_courante",num_518=518,str_calcul_apl_logem_abr$0="calcul_apl_logement_foyer.situation_familiale_calcul_apl",num_1065=1065,num_155=155,str_142303="142303",num_316=316,str_37778="37778",num_296=296,num_565=565,num_4964=4964,num_799=799,num_4139=4139,num_215=215,str_Article_D832_11="Article D832-11",num_947=947,str_LaReunion="LaReunion",str_Montant_du_salai_abr="Montant du salaire minimum de croissance",str_AgrandirOuRendre_abr="AgrandirOuRendreHabitableD331_63",num_621=621,num_557=557,str_0_3="0.3",str_true="true",str_Chapitre_II_Co_abr="Chapitre II : Conditions g\xc3\xa9n\xc3\xa9rales d'attribution",num_370=370,num_2520=2520,num_3543=3543,str_Titre_II_Dispo_abr="Titre II : Dispositions communes aux aides personnelles au logement",num_781=781,str_25116="25116",str_Paragraphe_1_I_abr="Paragraphe 1 : Information et simplification des d\xc3\xa9marches des assur\xc3\xa9s.",str_1500="1500",str_is_too_large_fo_abr=" is too large for shifting.",str_237200="237200",num_502=502,str_Map_bal="Map.bal",str_5208="5208",str_0_08="0.08",str_242800="242800",str="@[",str_Titre_III_Aide_abr="Titre III : Aide personnalis\xc3\xa9e au logement",str_Apr_s="Apr\xc3\xa8s",str_Code_de_la_s_cu_abr="Code de la s\xc3\xa9curit\xc3\xa9 sociale",str_42892="42892",num_5030=5030,num_1694=1694,num_665=665,num_688=688,num_2674=2674,str_ml_z_overflow="ml_z_overflow",num_677=677,str_1_8="1.8",str_contributions_so_abr$0="contributions_sociales.date_courante",num_1411=1411,num_850=850,str_calcul_apl_logem_abr="calcul_apl_logement_foyer.redevance",num_309=309,num_4029=4029,num_752863768=-752863768,str_Article_D832_17="Article D832-17",num_904=904,num_360=360,num_705=705,str_202500="202500",num_765=765,str_allocationsFamil_abr="allocationsFamiliales",str_Article_10="Article 10",str_Instruction_inte_abr$3="Instruction interminist\xc3\xa9rielle n\xc2\xb0DSS/2B/2021/65 du 19 mars 2021 relative \xc3\xa0 la revalorisation au 1er avril 2021 des prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et dans le d\xc3\xa9partement de Mayotte",num_167=167,str_582700="582700",num_915=915,str_4986="4986",num_4136=4136,num_433=433,str_CalculAidePerson_abr$0="CalculAidePersonnalis\xc3\xa9eLogementLocatif",num_531=531,str_abattement_d_pe_abr="abattement_d\xc3\xa9pense_nette_minimale",num_1466=1466,num_3769=3769,str_Sys_blocked_io="Sys_blocked_io",str_b_n_ficie_titr_abr="b\xc3\xa9n\xc3\xa9ficie_titre_personnel_aide_personnelle_logement",str_Articles_valable_abr="Articles valables du 1er octobre 2020 au 1er octobre 2021",str_0_0588="0.0588",num_3410=3410,str_Chapitre_2_Cha_abr="Chapitre 2 : Champ d'application.",str_Chapitre_2_Cha_abr$0="Chapitre 2 : Champ d'application",num_2570=2570,str_EXDEV="EXDEV",str_49="49",num_1663=1663,num_457=457,num_0xFF=0xFF,str_ligibilit_au_abr$0="\xc3\x89ligibilit\xc3\xa9 aux aides personnelles au logement",str_Article_D842_15="Article D842-15",num_892=892,num_246=246,num_3480=3480,num_2467=2467,str_37900="37900",str_u="%u",num_1016=1016,str_Article_L831_1="Article L831-1",str_Chapitre_IV_Ca_abr$0="Chapitre IV : Calcul de l'aide personnalis\xc3\xa9e au logement en secteur accession",str_calcul_quivale_abr$0="calcul_\xc3\xa9quivalence_loyer_minimale",str_logement_foyer_zone="logement_foyer.zone",num_298=298,num_2307=2307,str_EHOSTUNREACH="EHOSTUNREACH",num_405=405,str_ligibilit_Aid_abr="\xc3\x89ligibilit\xc3\xa9AidePersonnalis\xc3\xa9eLogement",str_19402="19402",str_2="2",num_127=127,num_925=925,num_711=711,str_Article_30="Article 30",str$7="@{",num_4039=4039,str_Montant_de_la_ba_abr="Montant de la base mensuelle des allocations familiales",str_flags_Open_rd_abr=" : flags Open_rdonly and Open_wronly are not compatible",str_0_232="0.232",num_787=787,str_OuvertureDroitsR_abr="OuvertureDroitsRetraite",str_Zone2="Zone2",str_43505="43505",str_D_cret_n_2019_abr="D\xc3\xa9cret n\xc2\xb0 2019-1387 du 18 d\xc3\xa9cembre 2019 portant rel\xc3\xa8vement du salaire minimum de croissance",str$13="-",num_803994948=803994948,num_336=336,num_603=603,num_1659=1659,str_n_nombre_parts_d_abr="n_nombre_parts_d832_11",str_file_already_abr=" : file already exists",num_397=397,str_EffectiveEtPerma_abr="EffectiveEtPermanente",num_4639=4639,num_987=987,num_3684=3684,str_calculAllocation_abr$2="calculAllocationLogementAccessionPropriete",str_41481="41481",str_0_0045="0.0045",str_Date_d_ouverture_abr="Date d'ouverture des droits \xc3\xa0 la retraite",str_retrieveEvents="retrieveEvents",str_accession_propri_abr$7="accession_propri\xc3\xa9t\xc3\xa9.date_entr\xc3\xa9e_logement",num_1468=1468,num_3994=3994,str_ENOEXEC="ENOEXEC",str_2699="2699",num_625=625,num_644=644,num_1462=1462,str_prestationsFamil_abr="prestationsFamiliales",num_3634=3634,str_Infini="Infini",str_b="\\b",num_2415=2415,str_Article_43="Article 43",str_Martinique="Martinique",num_404=404,str_Titre_IV_Alloc_abr="Titre IV : Allocations de Logement",str_Article_D832_25="Article D832-25",str_EPFNOSUPPORT="EPFNOSUPPORT",num_487=487,num_673=673,num_837=837,num_12520=12520,num_1132=1132,str_ENOTTY="ENOTTY",num_942=942,num_916=916,str_ENXIO="ENXIO",num_46=-46,str_Collectivit="Collectivit\xc3\xa9",num_401=401,str_42228="42228",str_Chapitre_1er_A_abr="Chapitre 1er : Allocations familiales",num_981=981,str_Quantification_d_abr="Quantification des impay\xc3\xa9s de d\xc3\xa9pense de logement",str_AllocationEducat_abr="AllocationEducationEnfantHandicape",num_2016=2016,str_832200="832200",num_1751=1751,num_1467=1467,num_3363=3363,num_984=984,num_1685=1685,str_AllocationRentr_abr="AllocationRentr\xc3\xa9eScolaire",num_2535=2535,num_963=963,num_1000=1000,str_CalculAllocation_abr$0="CalculAllocationLogementAccessionPropri\xc3\xa9t\xc3\xa9",str$12="",str$5="^",num_737456202=737456202,str_Sous_section_2_abr$0="Sous-section 2 : Principes de neutralisation et d'abattement",num_3600$0=3600.,str_Section_2_Prim_abr="Section 2 : Prime de d\xc3\xa9m\xc3\xa9nagement",num_86400000=86400000,num_0x3f=0x3f,str_kind_for_the_e_abr$0="' kind for the enumeration 'Collectivite.t'",str_184000="184000",num_334=334,str_251500="251500",num_1419=1419,num_5027=5027,str_Article_16="Article 16",str_Article_D842_9="Article D842-9",str_Match_failure="Match_failure",num_3966=3966,num_716=716,num_785=785,num_2021=2021,str_0_085="0.085",str_CalculNombrePart_abr="CalculNombrePartLogementFoyer",str_d_pense_nette_m_abr$1="d\xc3\xa9pense_nette_minimale_d832_10",num_0x00=0x00,str_35130="35130",str_montant_initial_abr="montant_initial_majoration",str$11="+",str_ESRCH="ESRCH",num_1061=1061,str_1057="1057",num_587=587,num_4963=4963,num_425=425,str_li="%li",str_234600="234600",str_Smic="Smic",num_2543=2543,str_39051="39051",str_20900="20900",str_calcul_apl_logem_abr$6="calcul_apl_logement_foyer",str_208600="208600",num_2884=2884,num_267=267,num_431=431,num_2299161=2299161,str_impayeDepenseLog_abr="impayeDepenseLogement",num_801=801,str_calcul_nombre_pa_abr$0="calcul_nombre_parts.condition_2_du_832_25",str_logement_foyer_r_abr$0="logement_foyer.redevance",num_1086=1086,num_0xe0=0xe0,str_z$0="z",str_20100="20100",str$6="%",str_D331_32="D331_32",str_contributions_so_abr="contributions_sociales",str_ENAMETOOLONG="ENAMETOOLONG",num_2400000_5=2400000.5,num_580=580,num_1020=1020,num_250=250,str_EMSGSIZE="EMSGSIZE",str_Secteur_logement_abr="Secteur logement-foyer",str_calcul_apl_logem_abr$3="calcul_apl_logement_foyer.ressources_m\xc3\xa9nage_arrondies",str_Article_L831_2="Article L831-2",str_ECONNREFUSED="ECONNREFUSED",num_115=115,str_Allocations_fami_abr="Allocations familiales",num_624=624,num_1034=1034,str_locatif_ressourc_abr="locatif.ressources_m\xc3\xa9nage_arrondies",str_0_027="0.027",num_545=545,str_ligibilit_co_abr="\xc3\xa9ligibilit\xc3\xa9_commune.m\xc3\xa9nage",str_allocations_fami_abr="allocations_familiales",num_1255=1255,str_examples_allocat_abr$1="examples/allocations_familiales/securite_sociale_L.catala_fr",str_Article_8="Article 8",str_Article_R521_1="Article R521-1",num_0x8000=0x8000,num_594=594,num_2019=2019,str_jsError="jsError",num_1055=1055,str_Chapitre_Ier_C_abr="Chapitre Ier : Champ d'application",str_Section_1_Cond_abr="Section 1 : Conditions relatives au b\xc3\xa9n\xc3\xa9ficiaire",str_43074="43074",num_946=946,num_5158=5158,str_6_55957="6.55957",str_Sous_section_1_abr="Sous-section 1 : Modalit\xc3\xa9s g\xc3\xa9n\xc3\xa9rales de l'appr\xc3\xa9ciation des ressources",num_4979=4979,str_eligibiliteAideP_abr="eligibiliteAidePersonnaliseeLogement",num_371=371,num_320=320,num_129=129,num_814=814,num_2647=2647,num_766=766,str_n$0="\n",str_abattement_d_pe_abr$0="abattement_d\xc3\xa9pense_nette_minimale_d832_27",num_497=497,str_Chapitre_II_Mo_abr="Chapitre II : Modalit\xc3\xa9s de liquidation et de versement de l'aide personnalis\xc3\xa9e au logement",str_3_7="3.7",num_537=537,num_414=414,num_194=194,str_Tous_secteurs="Tous secteurs",num_310=310,str_calcul_plafond_m_abr="calcul_plafond_mensualit\xc3\xa9_d842_6_base",num_1033=1033,num_48=-48,num_2005=2005,str_9="9",str_EBADF="EBADF",num_4653=4653,num_1719=1719,str_1025="1025",str_camlinternalForm_abr="camlinternalFormat.ml",num_312=312,num_549=549,str_EMLINK="EMLINK",num_148=148,num_1675=1675,str_132000="132000",num_1502=1502,num_730=730,str_0_0185="0.0185",str_924600="924600",num_713=713,num_2017=2017,num_1124=1124,str_date_naissance="date_naissance",num_317=317,str_Article_R822_2="Article R822-2",str_CalculAidePerson_abr="CalculAidePersonnalis\xc3\xa9eLogementAccessionPropri\xc3\xa9t\xc3\xa9",num_878=878,str_Titre_1_Champ_abr="Titre 1 : Champ d'application - G\xc3\xa9n\xc3\xa9ralit\xc3\xa9s",num_1141=1141,str_obligation_scolaire="obligation_scolaire",str_EEXIST="EEXIST",num_293=293,num_550=550,num_32082=32082,num_733=733,num_121=121,num_961=961,str_prestations_fami_abr$2="prestations_familiales.prestation_courante",num_1999=1999,str_n="\\n",str_ligibilit_co_abr$0="\xc3\xa9ligibilit\xc3\xa9_commune.demandeur",num_544=544,num_120=120,str_16="16",str_Article_D832_14="Article D832-14",num_512=512,num_0x7ff0=0x7ff0,str_eligibiliteAlloc_abr="eligibiliteAllocationLogement",num_928=928,num_861=861,str_montant_forfaita_abr="montant_forfaitaire_charges",num_4186=4186,num_732=732,num_4854=4854,num_177=177,str_traitement_aide_abr$4="traitement_aide_finale_d\xc3\xa9pense_nette_minimale",num_1470=1470,str_Ascendant="Ascendant",str_0x="0x",str_0_005="0.005",str_Calcul_du_montan_abr$0="Calcul du montant de l'aide personnalis\xc3\xa9e au logement",num_797=797,num_499=499,str_D_cret_n_2020_abr="D\xc3\xa9cret n\xc2\xb0 2020-1598 du 16 d\xc3\xa9cembre 2020 portant rel\xc3\xa8vement du salaire minimum de croissance",num_1544=1544,str_locatif_situatio_abr="locatif.situation_familiale_calcul_apl",num_645=645,str_40888="40888",str_0_208="0.208",str_bas="bas",num_957=957,str_210900="210900",str_219900="219900",str_r_gime_outre_me_abr="r\xc3\xa9gime_outre_mer_l751_1",str_Invalid_function_abr="Invalid function call ([ ",str_traitement_aide_abr$3="traitement_aide_finale",num_105=105,str_Instruction_inte_abr="Instruction interminist\xc3\xa9rielle n\xc2\xb0 DSS/SD2B/2018/279 du 17 d\xc3\xa9cembre 2018 relative \xc3\xa0 la revalorisation au 1er janvier 2019 des plafonds de ressources d\xe2\x80\x99attribution de certaines prestations familiales servies en m\xc3\xa9tropole, en Guadeloupe, en Guyane, en Martinique, \xc3\xa0 la R\xc3\xa9union, \xc3\xa0 Saint-Barth\xc3\xa9lemy, \xc3\xa0 Saint-Martin et \xc3\xa0 Mayotte",num_551=551,str_Article_R512_2="Article R512-2",str_31664="31664",num_1135=1135,num_454=454,str_44693="44693",num_1520=1520,str_2710="2710",str_0_45="0.45",num_429=429,str_str_ml="str.ml",str_input="input",str_39839="39839",str_ligibilit_lo_abr="\xc3\xa9ligibilit\xc3\xa9_logement",str_0_2="0.2",num_157=157,num_364=364,str_D_cret_n_2018_abr="D\xc3\xa9cret n\xc2\xb0 2018-1173 du 19 d\xc3\xa9cembre 2018 portant rel\xc3\xa8vement du salaire minimum de croissance",num_390=390,num_498=498,str_examples_aides_l_abr="examples/aides_logement/autres_sources.catala_fr",str_Allocation_de_so_abr="Allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",str_calculAllocation_abr="calculAllocationLogement",num_379=379,str_mkdir="mkdir",str_Article_L822_3="Article L822-3",str_logement_foyer_s_abr="logement_foyer.situation_familiale_calcul_apl",str_Chapitre_III_M_abr="Chapitre III : Modalit\xc3\xa9s de liquidation et de versement",num_592=592,str_No_such_file_o_abr=": No such file or directory",num_378=378,str_Chapitre_VII_C_abr="Chapitre VII : Calcul des allocations de logement en secteur logement-foyer",str_Titre_5_D_par_abr="Titre 5 : D\xc3\xa9partements d'outre-mer",num_948=948,num_992=992,str_src_printer_ml="src/printer.ml",str_766="766",str_CalculetteAidesA_abr="CalculetteAidesAuLogementGardeAltern\xc3\xa9e",str_locatif_colocation="locatif.colocation",str_calculetteAidesA_abr="calculetteAidesAuLogement",str_Section_1_Ouve_abr="Section 1 : Ouverture du droit et liquidation de l'allocation de solidarit\xc3\xa9 aux personnes \xc3\xa2g\xc3\xa9es",num_151=151,num_1137=1137,str_Descendant="Descendant",str_ligibilit_All_abr="\xc3\x89ligibilit\xc3\xa9AllocationLogement",str_D_cret_n_2002_abr="D\xc3\xa9cret n\xc2\xb02002-423 du 29 mars 2002 relatif aux prestations familiales \xc3\xa0 Mayotte",num_220=220,num_919=919,num_626=626,num_600=600,str_ligibilit_apl="\xc3\xa9ligibilit\xc3\xa9_apl",str_Demandeur="Demandeur",str_taux="taux",str_CalculAllocation_abr="CalculAllocationLogementLocatif",str_BeginCall="BeginCall([ ",num_843=843,num_868=868,num_0xFE=0xFE,str_ENOPROTOOPT="ENOPROTOOPT",num_332=332,num_822=822,str_caract_ristique_abr="caract\xc3\xa9ristiques_pr\xc3\xaat_l831_1_1",num_921=921,str_GardeAltern_ePa_abr="GardeAltern\xc3\xa9ePartageAllocations",num_932=932,str_pilogue="\xc3\x89pilogue",str_943900="943900",str_CalculAllocation_abr$2="CalculAllocationLogementFoyer",str_bmaf="bmaf",str_calculEquivalenc_abr="calculEquivalenceLoyerMinimale",num_867=867,str_contributionsSoc_abr="contributionsSocialesAidesPersonnelleLogement",num_2006=2006,str_0_95="0.95",str_ressourcesAidesP_abr="ressourcesAidesPersonnelleLogement",num_363=363,str_Pervasives_do_at_abr="Pervasives.do_at_exit",str_utf8="utf8",str_222300="222300",num_863=863,str_ComplementFamilial="ComplementFamilial",num_1001=1001,str_225000="225000",num_1667=1667,str_locatif_logement_abr="locatif.logement_est_chambre",num_657=657,num_529=529,str_ligibilit_al_abr="\xc3\xa9ligibilit\xc3\xa9_allocation_logement",str_EISDIR="EISDIR",str_0_0283="0.0283",num_217=217,num_854=854,str_logement_foyer_d_abr$0="logement_foyer.date_courante",str_0_16="0.16",str_Article_18="Article 18",num_3739=3739,num_1460=1460,str_36815="36815",num_643=643,str_accession_propri_abr$6="accession_propri\xc3\xa9t\xc3\xa9.situation_familiale_calcul_apl",num_134=134,num_461=461,num_2511=2511,str_Section_2_Cond_abr="Section 2 : Conditions relatives aux ressources",num_1495=1495,str_ligibilit_au_abr="\xc3\x89ligibilit\xc3\xa9 aux allocations de logement";function caml_array_blit(a1,i1,a2,i2,len){if(i2<=i1)for(var j=1;j<=len;j++)a2[i2+j]=a1[i1+j];else for(var @@ -1294,7 +1294,7 @@ caml_call5(f,a0,a1,a2,a3,a4){return f.length==5?f(a0,a1,a2,a3,a4):caml_call_gen( caml_call6(f,a0,a1,a2,a3,a4,a5){return f.length==6?f(a0,a1,a2,a3,a4,a5):caml_call_gen(f,[a0,a1,a2,a3,a4,a5])}function caml_call7(f,a0,a1,a2,a3,a4,a5,a6){return f.length==7?f(a0,a1,a2,a3,a4,a5,a6):caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])}caml_fs_init();var Out_of_memory=[num_248,caml_string_of_jsbytes(str_Out_of_memory),-1],Sys_error=[num_248,caml_string_of_jsbytes(str_Sys_error),-2],Failure=[num_248,caml_string_of_jsbytes(str_Failure),-3],Invalid_argument=[num_248,caml_string_of_jsbytes(str_Invalid_argument),-4],Division_by_zero=[num_248,caml_string_of_jsbytes(str_Division_by_zero),-6],Not_found=[num_248,caml_string_of_jsbytes(str_Not_found),-7],Match_failure=[num_248,caml_string_of_jsbytes(str_Match_failure),-8],Stack_overflow=[num_248,caml_string_of_jsbytes(str_Stack_overflow),-9],Assert_failure=[num_248,caml_string_of_jsbytes(str_Assert_failure),-11],Undefined_recursive_module=[num_248,caml_string_of_jsbytes(str_Undefined_recurs_abr),num_12],partial=[4,0,0,0,[12,45,[4,0,0,0,0]]],dK=[0,[11,caml_string_of_jsbytes('File "'),[2,0,[11,caml_string_of_jsbytes('", line '),[4,0,0,0,[11,caml_string_of_jsbytes(str_characters),[4,0,0,0,[12,45,[4,0,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]]]]]]]],caml_string_of_jsbytes('File "%s", line %d, characters %d-%d: %s')],kc=[0,0,0],partial$0=[4,0,0,0,[12,46,0]],bbv=[0,caml_string_of_jsbytes("eventsManager"),caml_string_of_jsbytes("computeAllocationsFamiliales"),caml_string_of_jsbytes("computeAidesAuLogement")];caml_register_global(11,Undefined_recursive_module,str_Undefined_recurs_abr);caml_register_global(10,Assert_failure,str_Assert_failure);caml_register_global(9,[num_248,caml_string_of_jsbytes(str_Sys_blocked_io),-10],str_Sys_blocked_io);caml_register_global(8,Stack_overflow,str_Stack_overflow);caml_register_global(7,Match_failure,str_Match_failure);caml_register_global(6,Not_found,str_Not_found);caml_register_global(5,Division_by_zero,str_Division_by_zero);caml_register_global(4,[num_248,caml_string_of_jsbytes(str_End_of_file),-5],str_End_of_file);caml_register_global(3,Invalid_argument,str_Invalid_argument);caml_register_global(2,Failure,str_Failure);caml_register_global(1,Sys_error,str_Sys_error);caml_register_global(0,Out_of_memory,str_Out_of_memory);var -B=caml_string_of_jsbytes("output_substring"),w=caml_string_of_jsbytes("%.12g"),v=caml_string_of_jsbytes(str$8),t=caml_string_of_jsbytes(str_true),u=caml_string_of_jsbytes(str_false),g=caml_string_of_jsbytes("Stdlib.Exit"),l=caml_int64_create_lo_mi_hi(0,0,num_32752),n=caml_int64_create_lo_mi_hi(0,0,65520),p=caml_int64_create_lo_mi_hi(1,0,num_32752),I=caml_string_of_jsbytes(str$0),J=caml_string_of_jsbytes("\\'"),K=caml_string_of_jsbytes(str_b),L=caml_string_of_jsbytes(str_t),M=caml_string_of_jsbytes(str_n),N=caml_string_of_jsbytes(str_r),H=caml_string_of_jsbytes("Char.chr"),Z=caml_string_of_jsbytes("nth"),_=caml_string_of_jsbytes("List.nth"),X=caml_string_of_jsbytes("tl"),V=caml_string_of_jsbytes("hd"),an=caml_string_of_jsbytes("String.blit / Bytes.blit_string"),al=caml_string_of_jsbytes("Bytes.blit"),ai=caml_string_of_jsbytes("String.sub / Bytes.sub"),ax=caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"),at=caml_string_of_jsbytes(str$12),ar=caml_string_of_jsbytes("String.concat"),aE=caml_string_of_jsbytes("Array.blit"),aC=caml_string_of_jsbytes("Array.sub"),aN=caml_string_of_jsbytes("Map.remove_min_elt"),aO=[0,0,0,0],aP=[0,caml_string_of_jsbytes("map.ml"),num_400,10],aQ=[0,0,0],aJ=caml_string_of_jsbytes(str_Map_bal),aK=caml_string_of_jsbytes(str_Map_bal),aL=caml_string_of_jsbytes(str_Map_bal),aM=caml_string_of_jsbytes(str_Map_bal),aX=caml_string_of_jsbytes("Stdlib.Queue.Empty"),a1=caml_string_of_jsbytes("CamlinternalLazy.Undefined"),bd=caml_string_of_jsbytes("Buffer.add_substring/add_subbytes"),ba=caml_string_of_jsbytes("Buffer.add: cannot grow buffer"),a$=[0,caml_string_of_jsbytes(str_buffer_ml),93,2],a_=[0,caml_string_of_jsbytes(str_buffer_ml),94,2],a7=caml_string_of_jsbytes("Buffer.sub"),bv=caml_string_of_jsbytes("%c"),bw=caml_string_of_jsbytes("%s"),bx=caml_string_of_jsbytes(str_i),by=caml_string_of_jsbytes(str_li),bz=caml_string_of_jsbytes(str_ni),bA=caml_string_of_jsbytes(str_Li),bB=caml_string_of_jsbytes("%f"),bC=caml_string_of_jsbytes(str_B),bD=caml_string_of_jsbytes("%{"),bE=caml_string_of_jsbytes("%}"),bF=caml_string_of_jsbytes("%("),bG=caml_string_of_jsbytes("%)"),bH=caml_string_of_jsbytes(str_a),bI=caml_string_of_jsbytes("%t"),bJ=caml_string_of_jsbytes("%?"),bK=caml_string_of_jsbytes("%r"),bL=caml_string_of_jsbytes("%_r"),bP=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_850,23],b0=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_814,21],bS=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),815,21],b1=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_818,21],bT=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),819,21],b2=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_822,19],bU=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_823,19],b3=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),826,22],bV=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),827,22],b4=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_831,30],bW=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),832,30],bY=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_836,26],bQ=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_837,26],bZ=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),846,28],bR=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_847,28],bX=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_851,23],dk=caml_string_of_jsbytes(str_u),di=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1558,4],dj=caml_string_of_jsbytes("Printf: bad conversion %["),dl=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1626,39],dm=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1649,31],dn=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1650,31],dp=caml_string_of_jsbytes("Printf: bad conversion %_"),dr=caml_string_of_jsbytes(str$7),ds=caml_string_of_jsbytes(str),du=caml_string_of_jsbytes(str$7),dv=caml_string_of_jsbytes(str),dz=[0,[11,caml_string_of_jsbytes("invalid box description "),[3,0,0]],caml_string_of_jsbytes("invalid box description %S")],dx=caml_string_of_jsbytes(str$12),dy=[0,0,4],dA=caml_string_of_jsbytes(str$12),dB=caml_string_of_jsbytes(str_b$0),dC=caml_string_of_jsbytes("h"),dD=caml_string_of_jsbytes("hov"),dE=caml_string_of_jsbytes("hv"),dF=caml_string_of_jsbytes("v"),dc=caml_string_of_jsbytes(str_nan),da=caml_string_of_jsbytes("neg_infinity"),db=caml_string_of_jsbytes(str_infinity),c$=caml_string_of_jsbytes(str$8),c4=[0,num_103],cR=caml_string_of_jsbytes("%+nd"),cS=caml_string_of_jsbytes("% nd"),cU=caml_string_of_jsbytes("%+ni"),cV=caml_string_of_jsbytes("% ni"),cW=caml_string_of_jsbytes("%nx"),cX=caml_string_of_jsbytes("%#nx"),cY=caml_string_of_jsbytes("%nX"),cZ=caml_string_of_jsbytes("%#nX"),c0=caml_string_of_jsbytes("%no"),c1=caml_string_of_jsbytes("%#no"),cQ=caml_string_of_jsbytes("%nd"),cT=caml_string_of_jsbytes(str_ni),c2=caml_string_of_jsbytes("%nu"),cE=caml_string_of_jsbytes("%+ld"),cF=caml_string_of_jsbytes("% ld"),cH=caml_string_of_jsbytes("%+li"),cI=caml_string_of_jsbytes("% li"),cJ=caml_string_of_jsbytes("%lx"),cK=caml_string_of_jsbytes("%#lx"),cL=caml_string_of_jsbytes("%lX"),cM=caml_string_of_jsbytes("%#lX"),cN=caml_string_of_jsbytes("%lo"),cO=caml_string_of_jsbytes("%#lo"),cD=caml_string_of_jsbytes("%ld"),cG=caml_string_of_jsbytes(str_li),cP=caml_string_of_jsbytes("%lu"),cr=caml_string_of_jsbytes("%+Ld"),cs=caml_string_of_jsbytes("% Ld"),cu=caml_string_of_jsbytes("%+Li"),cv=caml_string_of_jsbytes("% Li"),cw=caml_string_of_jsbytes("%Lx"),cx=caml_string_of_jsbytes("%#Lx"),cy=caml_string_of_jsbytes("%LX"),cz=caml_string_of_jsbytes("%#LX"),cA=caml_string_of_jsbytes("%Lo"),cB=caml_string_of_jsbytes("%#Lo"),cq=caml_string_of_jsbytes("%Ld"),ct=caml_string_of_jsbytes(str_Li),cC=caml_string_of_jsbytes("%Lu"),ce=caml_string_of_jsbytes("%+d"),cf=caml_string_of_jsbytes("% d"),ch=caml_string_of_jsbytes("%+i"),ci=caml_string_of_jsbytes("% i"),cj=caml_string_of_jsbytes("%x"),ck=caml_string_of_jsbytes("%#x"),cl=caml_string_of_jsbytes("%X"),cm=caml_string_of_jsbytes("%#X"),cn=caml_string_of_jsbytes("%o"),co=caml_string_of_jsbytes("%#o"),cd=caml_string_of_jsbytes(str_d),cg=caml_string_of_jsbytes(str_i),cp=caml_string_of_jsbytes(str_u),bm=caml_string_of_jsbytes("@]"),bn=caml_string_of_jsbytes("@}"),bo=caml_string_of_jsbytes("@?"),bp=caml_string_of_jsbytes("@\n"),bq=caml_string_of_jsbytes("@."),br=caml_string_of_jsbytes("@@"),bs=caml_string_of_jsbytes("@%"),bt=caml_string_of_jsbytes("@"),b5=caml_string_of_jsbytes("CamlinternalFormat.Type_mismatch"),dQ=caml_string_of_jsbytes(str$12),dR=[0,[11,caml_string_of_jsbytes(str$9),[2,0,[2,0,0]]],caml_string_of_jsbytes(", %s%s")],eh=[0,[11,caml_string_of_jsbytes(str_Fatal_error_exc_abr),[2,0,[12,10,0]]],caml_string_of_jsbytes(str_Fatal_error_exc_abr$0)],ei=[0,[11,caml_string_of_jsbytes("Fatal error in uncaught exception handler: exception "),[2,0,[12,10,0]]],caml_string_of_jsbytes("Fatal error in uncaught exception handler: exception %s\n")],eg=caml_string_of_jsbytes("Fatal error: out of memory in uncaught exception handler"),ee=[0,[11,caml_string_of_jsbytes(str_Fatal_error_exc_abr),[2,0,[12,10,0]]],caml_string_of_jsbytes(str_Fatal_error_exc_abr$0)],d_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],d2=caml_string_of_jsbytes("Raised at"),d3=caml_string_of_jsbytes("Re-raised at"),d4=caml_string_of_jsbytes("Raised by primitive operation at"),d5=caml_string_of_jsbytes("Called from"),d6=caml_string_of_jsbytes(" (inlined)"),d8=caml_string_of_jsbytes(str$12),d7=[0,[2,0,[12,32,[2,0,[11,caml_string_of_jsbytes(' in file "'),[2,0,[12,34,[2,0,[11,caml_string_of_jsbytes(", line "),[4,0,0,0,[11,caml_string_of_jsbytes(str_characters),partial]]]]]]]]]],caml_string_of_jsbytes('%s %s in file "%s"%s, line %d, characters %d-%d')],d9=[0,[2,0,[11,caml_string_of_jsbytes(" unknown location"),0]],caml_string_of_jsbytes("%s unknown location")],dW=caml_string_of_jsbytes("Out of memory"),dX=caml_string_of_jsbytes("Stack overflow"),dY=caml_string_of_jsbytes("Pattern matching failed"),dZ=caml_string_of_jsbytes("Assertion failed"),d0=caml_string_of_jsbytes("Undefined recursive module"),dS=[0,[12,40,[2,0,[2,0,[12,41,0]]]],caml_string_of_jsbytes("(%s%s)")],dT=caml_string_of_jsbytes(str$12),dU=caml_string_of_jsbytes(str$12),dV=[0,[12,40,[2,0,[12,41,0]]],caml_string_of_jsbytes("(%s)")],dO=[0,[4,0,0,0,0],caml_string_of_jsbytes(str_d)],dM=[0,[3,0,0],caml_string_of_jsbytes("%S")],dN=caml_string_of_jsbytes(str$16),eb=[0,caml_string_of_jsbytes(str$12),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file not found)"),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file appears to be corrupt)"),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file has wrong magic number)"),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)")],el=caml_string_of_jsbytes("Fun.Finally_raised: "),ej=caml_string_of_jsbytes("Stdlib.Fun.Finally_raised"),em=caml_string_of_jsbytes(str_x),bbH=caml_string_of_jsbytes("OCAMLRUNPARAM"),bbF=caml_string_of_jsbytes("CAMLRUNPARAM"),en=caml_string_of_jsbytes(str$12),fk=[3,0,3],fl=caml_string_of_jsbytes(str$8),ff=caml_string_of_jsbytes(str$4),fg=caml_string_of_jsbytes("<\/"),fh=caml_string_of_jsbytes(str$12),fb=caml_string_of_jsbytes(str$4),fc=caml_string_of_jsbytes(str$14),fd=caml_string_of_jsbytes(str$12),e9=caml_string_of_jsbytes("\n"),e5=caml_string_of_jsbytes(str$12),e6=caml_string_of_jsbytes(str$12),e7=caml_string_of_jsbytes(str$12),e8=caml_string_of_jsbytes(str$12),eS=[0,caml_string_of_jsbytes(str$12)],eK=caml_string_of_jsbytes(str$12),eL=caml_string_of_jsbytes(str$12),eM=caml_string_of_jsbytes(str$12),eN=caml_string_of_jsbytes(str$12),eH=[0,caml_string_of_jsbytes(str$12),0,caml_string_of_jsbytes(str$12)],eE=caml_string_of_jsbytes(str$12),ew=caml_string_of_jsbytes("Stdlib.Format.String_tag"),fQ=caml_string_of_jsbytes(str$12),f1=caml_string_of_jsbytes(str_E2BIG),f3=caml_string_of_jsbytes(str_EACCES),f4=caml_string_of_jsbytes(str_EAGAIN),f5=caml_string_of_jsbytes(str_EBADF),f6=caml_string_of_jsbytes(str_EBUSY),f7=caml_string_of_jsbytes(str_ECHILD),f8=caml_string_of_jsbytes(str_EDEADLK),f9=caml_string_of_jsbytes(str_EDOM),f_=caml_string_of_jsbytes(str_EEXIST),f$=caml_string_of_jsbytes(str_EFAULT),ga=caml_string_of_jsbytes(str_EFBIG),gb=caml_string_of_jsbytes(str_EINTR),gc=caml_string_of_jsbytes(str_EINVAL),gd=caml_string_of_jsbytes(str_EIO),ge=caml_string_of_jsbytes(str_EISDIR),gf=caml_string_of_jsbytes(str_EMFILE),gg=caml_string_of_jsbytes(str_EMLINK),gh=caml_string_of_jsbytes(str_ENAMETOOLONG),gi=caml_string_of_jsbytes(str_ENFILE),gj=caml_string_of_jsbytes(str_ENODEV),gk=caml_string_of_jsbytes(str_ENOENT),gl=caml_string_of_jsbytes(str_ENOEXEC),gm=caml_string_of_jsbytes(str_ENOLCK),gn=caml_string_of_jsbytes(str_ENOMEM),go=caml_string_of_jsbytes(str_ENOSPC),gp=caml_string_of_jsbytes(str_ENOSYS),gq=caml_string_of_jsbytes(str_ENOTDIR),gr=caml_string_of_jsbytes(str_ENOTEMPTY),gs=caml_string_of_jsbytes(str_ENOTTY),gt=caml_string_of_jsbytes(str_ENXIO),gu=caml_string_of_jsbytes(str_EPERM),gv=caml_string_of_jsbytes(str_EPIPE),gw=caml_string_of_jsbytes(str_ERANGE),gx=caml_string_of_jsbytes(str_EROFS),gy=caml_string_of_jsbytes(str_ESPIPE),gz=caml_string_of_jsbytes(str_ESRCH),gA=caml_string_of_jsbytes(str_EXDEV),gB=caml_string_of_jsbytes(str_EWOULDBLOCK),gC=caml_string_of_jsbytes(str_EINPROGRESS),gD=caml_string_of_jsbytes(str_EALREADY),gE=caml_string_of_jsbytes(str_ENOTSOCK),gF=caml_string_of_jsbytes(str_EDESTADDRREQ),gG=caml_string_of_jsbytes(str_EMSGSIZE),gH=caml_string_of_jsbytes(str_EPROTOTYPE),gI=caml_string_of_jsbytes(str_ENOPROTOOPT),gJ=caml_string_of_jsbytes(str_EPROTONOSUPPORT),gK=caml_string_of_jsbytes(str_ESOCKTNOSUPPORT),gL=caml_string_of_jsbytes(str_EOPNOTSUPP),gM=caml_string_of_jsbytes(str_EPFNOSUPPORT),gN=caml_string_of_jsbytes(str_EAFNOSUPPORT),gO=caml_string_of_jsbytes(str_EADDRINUSE),gP=caml_string_of_jsbytes(str_EADDRNOTAVAIL),gQ=caml_string_of_jsbytes(str_ENETDOWN),gR=caml_string_of_jsbytes(str_ENETUNREACH),gS=caml_string_of_jsbytes(str_ENETRESET),gT=caml_string_of_jsbytes(str_ECONNABORTED),gU=caml_string_of_jsbytes(str_ECONNRESET),gV=caml_string_of_jsbytes(str_ENOBUFS),gW=caml_string_of_jsbytes(str_EISCONN),gX=caml_string_of_jsbytes(str_ENOTCONN),gY=caml_string_of_jsbytes(str_ESHUTDOWN),gZ=caml_string_of_jsbytes(str_ETOOMANYREFS),g0=caml_string_of_jsbytes(str_ETIMEDOUT),g1=caml_string_of_jsbytes(str_ECONNREFUSED),g2=caml_string_of_jsbytes(str_EHOSTDOWN),g3=caml_string_of_jsbytes(str_EHOSTUNREACH),g4=caml_string_of_jsbytes(str_ELOOP),g5=caml_string_of_jsbytes(str_EOVERFLOW),g6=[0,[11,caml_string_of_jsbytes("EUNKNOWNERR "),[4,0,0,0,0]],caml_string_of_jsbytes("EUNKNOWNERR %d")],f2=[0,[11,caml_string_of_jsbytes("Unix.Unix_error(Unix."),[2,0,[11,caml_string_of_jsbytes(str$9),[3,0,[11,caml_string_of_jsbytes(str$9),[3,0,[12,41,0]]]]]]],caml_string_of_jsbytes("Unix.Unix_error(Unix.%s, %S, %S)")],fW=caml_string_of_jsbytes(str_Unix_Unix_error),fY=caml_string_of_jsbytes(str$12),fZ=caml_string_of_jsbytes(str$12),f0=caml_string_of_jsbytes(str_Unix_Unix_error),g7=caml_string_of_jsbytes("0.0.0.0"),g8=caml_string_of_jsbytes("127.0.0.1"),bbE=caml_string_of_jsbytes("::"),bbD=caml_string_of_jsbytes("::1"),hB=caml_string_of_jsbytes(str$12),hE=caml_string_of_jsbytes(str$12),hW=caml_string_of_jsbytes("Str.matched_group"),hO=[0,92],hQ=caml_string_of_jsbytes("\\( group not closed by \\)"),hP=[0,caml_string_of_jsbytes(str_str_ml),521,10],hR=caml_string_of_jsbytes("[ class not closed by ]"),hS=caml_string_of_jsbytes("spurious \\) in regular expression"),hJ=caml_string_of_jsbytes("too many r* or r+ where r is nullable"),hK=caml_string_of_jsbytes(str$12),hL=caml_string_of_jsbytes(str$12),hG=[0,caml_string_of_jsbytes(str_str_ml),214,11],ia=[0,caml_string_of_jsbytes(str_src_time_Zone_ml),52,4],h$=[0,caml_string_of_jsbytes(str_src_time_Zone_ml),58,34],h9=caml_string_of_jsbytes("Not a valid time zone"),k9=caml_string_of_jsbytes("Not a month"),k7=caml_string_of_jsbytes("Not a day"),k4=caml_string_of_jsbytes("from_business: bad week"),k5=caml_string_of_jsbytes("from_business: bad date"),jR=[0,caml_string_of_jsbytes(str_src_date_ml),num_119,4],jQ=[0,caml_string_of_jsbytes(str_src_date_ml),num_122,4],jI=[0,-4713,12,31],jJ=[0,num_3268,1,23],jK=[0,num_1582,10,14],jL=[0,num_1582,10,5],jC=caml_string_of_jsbytes("Date.Out_of_bounds"),jE=caml_string_of_jsbytes("Date.Undefined"),ko=caml_string_of_jsbytes("Date.Period.Not_computable"),kA=[0,31,59,90,num_120,num_151,num_181,212,243,num_273,304,num_334,num_365],lc=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),num_429,6],lb=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),230,4],la=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),num_167,6],k$=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),67,4],mM=caml_string_of_jsbytes("seconds_since_1970"),mJ=caml_string_of_jsbytes("second"),mH=caml_string_of_jsbytes("minute"),mF=caml_string_of_jsbytes("hour"),mB=caml_string_of_jsbytes("date"),mx=caml_string_of_jsbytes("Cannot create the "),mo=caml_string_of_jsbytes("%j (year not provided)"),ma=caml_string_of_jsbytes("%:"),l$=caml_string_of_jsbytes("%::::"),mv=[0,caml_string_of_jsbytes(str_src_printer_ml),402,6],mb=caml_string_of_jsbytes(str_z$0),mc=caml_string_of_jsbytes(":::z"),md=caml_string_of_jsbytes(str_z$2),me=caml_string_of_jsbytes(str_z),mf=[0,caml_string_of_jsbytes(str_src_printer_ml),509,12],mg=caml_string_of_jsbytes("am"),mh=caml_string_of_jsbytes("pm"),mi=caml_string_of_jsbytes(str$2),mj=caml_string_of_jsbytes(str$2),mk=caml_string_of_jsbytes("%P"),ml=caml_string_of_jsbytes("%V"),mm=caml_string_of_jsbytes("%W"),mn=caml_string_of_jsbytes("%j"),mu=caml_string_of_jsbytes("%w"),l_=caml_string_of_jsbytes(str$6),mp=caml_string_of_jsbytes(str_AM),mq=caml_string_of_jsbytes(str_PM),mr=caml_string_of_jsbytes(str$2),ms=caml_string_of_jsbytes(str$2),mt=caml_string_of_jsbytes("%p"),mw=[0,caml_string_of_jsbytes(str_src_printer_ml),num_513,6],l6=caml_string_of_jsbytes("[\\+-]"),l7=caml_string_of_jsbytes(str$11),l8=caml_string_of_jsbytes(str$13),l9=[0,caml_string_of_jsbytes(str_src_printer_ml),num_396,8],l4=caml_string_of_jsbytes(" (either week or year is not provided)"),l5=caml_string_of_jsbytes("[0-9][0-9]\\(\\.[0-9]*\\)?"),l2=[0,caml_string_of_jsbytes(str_src_printer_ml),num_283,6],l1=caml_string_of_jsbytes("z\\|:z\\|::z"),lX=caml_string_of_jsbytes(str_z$2),lY=caml_string_of_jsbytes(str_z),lZ=caml_string_of_jsbytes(str_z$0),l0=[0,caml_string_of_jsbytes(str_src_printer_ml),num_278,13],lW=caml_string_of_jsbytes(str$6),l3=[0,caml_string_of_jsbytes(str_src_printer_ml),num_297,6],lV=caml_string_of_jsbytes(str_AM),lU=caml_string_of_jsbytes(str_PM),lL=caml_string_of_jsbytes(" does not match the format "),lJ=caml_string_of_jsbytes("bad format: "),lH=[0,caml_string_of_jsbytes(str_src_printer_ml),81,2],ls=caml_string_of_jsbytes("January"),lt=caml_string_of_jsbytes("February"),lu=caml_string_of_jsbytes("March"),lv=caml_string_of_jsbytes("April"),lw=caml_string_of_jsbytes("May"),lx=caml_string_of_jsbytes("June"),ly=caml_string_of_jsbytes("July"),lz=caml_string_of_jsbytes("August"),lA=caml_string_of_jsbytes("September"),lB=caml_string_of_jsbytes("October"),lC=caml_string_of_jsbytes("November"),lD=caml_string_of_jsbytes("December"),lj=caml_string_of_jsbytes("Sunday"),lk=caml_string_of_jsbytes("Monday"),ll=caml_string_of_jsbytes("Tuesday"),lm=caml_string_of_jsbytes("Wednesday"),ln=caml_string_of_jsbytes("Thursday"),lo=caml_string_of_jsbytes("Friday"),lp=caml_string_of_jsbytes("Saturday"),lN=caml_string_of_jsbytes("%b"),lO=caml_string_of_jsbytes(str_B),lP=caml_string_of_jsbytes("%A"),lR=caml_string_of_jsbytes("[a-zA-Z]+"),mD=caml_string_of_jsbytes(str_i),m3=caml_int64_create_lo_mi_hi(1,0,0),mO=caml_string_of_jsbytes("Z.Overflow"),mP=caml_string_of_jsbytes(str_ml_z_overflow),nm=caml_string_of_jsbytes(str$12),nn=caml_string_of_jsbytes("+inf"),no=caml_string_of_jsbytes("-inf"),np=caml_string_of_jsbytes(str_inf),nq=caml_string_of_jsbytes("undef"),ns=[0,caml_string_of_jsbytes("q.ml"),486,25],nr=caml_string_of_jsbytes("Q.of_string: invalid digit"),ng=caml_string_of_jsbytes(str_impossible_case),nf=caml_string_of_jsbytes(str_impossible_case),od=[0,caml_string_of_jsbytes(str_lib_read_mll),72,32],oa=[0,caml_string_of_jsbytes(str_lib_read_mll),72,32],n$=caml_string_of_jsbytes(str$12),n2=caml_string_of_jsbytes("NaN value not allowed in standard JSON"),n3=[0,[8,[0,0,3],0,[0,16],0],caml_string_of_jsbytes(str_16g)],n5=[0,[8,[0,0,3],0,[0,17],0],caml_string_of_jsbytes(str_17g)],n4=caml_string_of_jsbytes(str_0$0),n0=caml_string_of_jsbytes("Infinity value not allowed in standard JSON"),n1=caml_string_of_jsbytes("-Infinity value not allowed in standard JSON"),nW=caml_string_of_jsbytes("NaN"),nX=[0,[8,[0,0,3],0,[0,16],0],caml_string_of_jsbytes(str_16g)],nZ=[0,[8,[0,0,3],0,[0,17],0],caml_string_of_jsbytes(str_17g)],nY=caml_string_of_jsbytes(str_0$0),nU=caml_string_of_jsbytes("Infinity"),nV=caml_string_of_jsbytes("-Infinity"),nP=caml_string_of_jsbytes(str_true),nQ=caml_string_of_jsbytes(str_false),nN=caml_string_of_jsbytes("null"),nF=caml_string_of_jsbytes(str_b),nG=caml_string_of_jsbytes(str_t),nH=caml_string_of_jsbytes(str_n),nI=caml_string_of_jsbytes("\\f"),nJ=caml_string_of_jsbytes(str_r),nK=caml_string_of_jsbytes('\\"'),nE=caml_string_of_jsbytes(str$0),nD=[0,[11,caml_string_of_jsbytes("src="),[3,0,[11,caml_string_of_jsbytes(" start="),[4,3,0,0,[11,caml_string_of_jsbytes(" len="),[4,3,0,0,[12,10,[10,0]]]]]]]],caml_string_of_jsbytes("src=%S start=%i len=%i\n%!")],nB=caml_string_of_jsbytes("\\u00"),nw=[0,caml_string_of_jsbytes(str_lib_read_mll),72,32],nt=caml_string_of_jsbytes("Yojson.Json_error"),ny=[0,caml_string_of_jsbytes(str_abr$1),caml_string_of_jsbytes(str_abr$2),caml_string_of_jsbytes(str_abr),caml_string_of_jsbytes(str_abr$3),caml_string_of_jsbytes(str_abr$0),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12)],oc=[0,caml_string_of_jsbytes(str_abr$1),caml_string_of_jsbytes(str_abr$2),caml_string_of_jsbytes(str_abr),caml_string_of_jsbytes(str_abr$3),caml_string_of_jsbytes(str_abr$0),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12)],of=[0,caml_string_of_jsbytes(str_abr$1),caml_string_of_jsbytes(str_abr$2),caml_string_of_jsbytes(str_abr),caml_string_of_jsbytes(str_abr$3),caml_string_of_jsbytes(str_abr$0),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12)],pY=caml_string_of_jsbytes("unreachable due to the [is_subscope_call] test"),p0=caml_string_of_jsbytes("unreachable due to the [is_subscope_input_var_def] test"),p1=caml_string_of_jsbytes("]"),p2=caml_string_of_jsbytes("["),p3=caml_string_of_jsbytes(" ]): expected variable definition (function output), found: "),p4=caml_string_of_jsbytes(str$9),p5=caml_string_of_jsbytes(str_Invalid_function_abr),p6=caml_string_of_jsbytes(" ]): expected variable definition (function output), found: end of tokens"),p7=caml_string_of_jsbytes(str$9),p8=caml_string_of_jsbytes(str_Invalid_function_abr),pZ=caml_string_of_jsbytes("Unexpected event: "),p_=caml_string_of_jsbytes("Missing function output variable definition."),p9=caml_string_of_jsbytes("Invalid start of function call."),pX=caml_string_of_jsbytes(str_input),pW=caml_string_of_jsbytes(str_output),p$=[0,[11,caml_string_of_jsbytes("An error occurred while parsing raw events: "),[2,0,[12,10,0]]],caml_string_of_jsbytes("An error occurred while parsing raw events: %s\n")],pM=caml_string_of_jsbytes(str$10),pN=caml_string_of_jsbytes(str$9),pO=[0,[11,caml_string_of_jsbytes(str_BeginCall),0],caml_string_of_jsbytes(str_BeginCall)],pP=caml_string_of_jsbytes(str$10),pQ=caml_string_of_jsbytes(str$9),pR=[0,[11,caml_string_of_jsbytes(str_EndCall),0],caml_string_of_jsbytes(str_EndCall)],pS=caml_string_of_jsbytes(str$9),pT=[0,[11,caml_string_of_jsbytes("VariableDefinition([ "),[2,0,[11,caml_string_of_jsbytes(" ], "),[2,0,[12,41,0]]]]],caml_string_of_jsbytes("VariableDefinition([ %s ], %s)")],pU=[0,[11,caml_string_of_jsbytes(str_DecisionTaken),0],caml_string_of_jsbytes(str_DecisionTaken)],pm=[0,num_976970511,caml_string_of_jsbytes("VarComputation")],pn=[0,num_976970511,caml_string_of_jsbytes("FunCall")],po=caml_string_of_jsbytes(str_body),pp=caml_string_of_jsbytes("inputs"),pq=caml_string_of_jsbytes(str_name),pr=[0,num_976970511,caml_string_of_jsbytes("SubScopeCall")],ps=caml_string_of_jsbytes("fun_calls"),pt=caml_string_of_jsbytes("value"),pu=caml_string_of_jsbytes(str_name),pv=caml_string_of_jsbytes("pos"),pw=caml_string_of_jsbytes(str_output),px=caml_string_of_jsbytes(str_body),py=caml_string_of_jsbytes(str_input),pz=caml_string_of_jsbytes("fun_name"),o1=[0,num_848054398,[0,[0,num_976970511,caml_string_of_jsbytes("Unit")],0]],o2=[0,num_848054398,[0,[0,num_976970511,caml_string_of_jsbytes("Unembeddable")],0]],o3=[0,num_976970511,caml_string_of_jsbytes("Bool")],o4=[0,num_976970511,caml_string_of_jsbytes("Money")],o5=[0,num_976970511,caml_string_of_jsbytes("Integer")],o6=[0,num_976970511,caml_string_of_jsbytes("Decimal")],o7=[0,num_976970511,caml_string_of_jsbytes("Date")],o8=[0,num_976970511,caml_string_of_jsbytes("Duration")],o9=[0,num_976970511,caml_string_of_jsbytes("Enum")],o_=[0,num_976970511,caml_string_of_jsbytes("Struct")],o$=[0,num_976970511,caml_string_of_jsbytes("Array")],oX=[0,[12,44,[17,[0,caml_string_of_jsbytes("@ "),1,0],0]],caml_string_of_jsbytes(",@ ")],oW=[0,[4,0,0,0,[12,32,[2,0,0]]],caml_string_of_jsbytes("%d %s")],oT=caml_string_of_jsbytes("days"),oU=caml_string_of_jsbytes("months"),oV=caml_string_of_jsbytes("years"),oY=[0,[15,0],caml_string_of_jsbytes(str_a)],oZ=caml_string_of_jsbytes("empty duration"),ol=caml_string_of_jsbytes("law_headings"),om=caml_string_of_jsbytes("end_column"),on=caml_string_of_jsbytes("end_line"),oo=caml_string_of_jsbytes("start_column"),op=caml_string_of_jsbytes("start_line"),oq=caml_string_of_jsbytes("filename"),or=caml_string_of_jsbytes("Runtime_ocaml.Runtime.EmptyError"),ot=caml_string_of_jsbytes("Runtime_ocaml.Runtime.AssertionFailed"),ov=caml_string_of_jsbytes("Runtime_ocaml.Runtime.ConflictError"),ox=caml_string_of_jsbytes("Runtime_ocaml.Runtime.UncomparableDurations"),oz=caml_string_of_jsbytes("Runtime_ocaml.Runtime.ImpossibleDate"),oB=caml_string_of_jsbytes("Runtime_ocaml.Runtime.NoValueProvided"),qD=caml_string_of_jsbytes("Jsoo_runtime.Error.Exn"),qF=caml_string_of_jsbytes(str_jsError),q6=[0,[2,0,[11,caml_string_of_jsbytes(" in file "),[2,0,[11,caml_string_of_jsbytes(", position "),[4,0,0,0,[12,58,[4,0,0,0,[11,caml_string_of_jsbytes("--"),[4,0,0,0,[12,58,partial$0]]]]]]]]]],caml_string_of_jsbytes("%s in file %s, position %d:%d--%d:%d.")],q7=caml_string_of_jsbytes("No rule applies in the given context to give a value to the variable"),q8=caml_string_of_jsbytes("A conflict happend between two rules giving a value to the variable"),q9=caml_string_of_jsbytes("A failure happened in the assertion"),qY=caml_string_of_jsbytes("Begin call"),qZ=caml_string_of_jsbytes("End call"),q0=caml_string_of_jsbytes("Variable definition"),q1=caml_string_of_jsbytes("Decision taken"),qW=caml_string_of_jsbytes(str$12),qS=caml_string_of_jsbytes("date_of_jsoo: invalid date"),qO=[0,caml_string_of_jsbytes(str_retrieveRawEvents),caml_string_of_jsbytes(str_retrieveEvents),caml_string_of_jsbytes(str_resetLog)],qP=[0,caml_string_of_jsbytes(str_retrieveRawEvents),caml_string_of_jsbytes(str_resetLog),caml_string_of_jsbytes(str_retrieveEvents)],Fs=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),89,14,89,29,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),num_100,18,num_100,64,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fm=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),86,14,86,53,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),85,14,85,50,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),88,14,88,46,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),87,14,87,54,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E1=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),96,18,96,72,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),92,18,92,67,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),num_116,14,num_116,30,[0,caml_string_of_jsbytes("Article L131-1"),[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]]],EN=[0,0],EO=[1,0],EP=[2,0],ER=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),75,11,75,27,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),75,11,75,27,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],ES=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("enfants_\xc3\xa0_charge"),0]],EX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EY=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.personne_charge_effective_permanente_est_parent"),0]],ET=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),85,10,85,57,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],E3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E4=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.personne_charge_effective_permanente_remplit_titre_I"),0]],EZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),86,10,86,62,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],E7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E8=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.ressources_m\xc3\xa9nage"),0]],E5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),87,10,87,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],E$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fa=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.r\xc3\xa9sidence"),0]],E9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),88,10,88,19,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fe=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.date_courante"),0]],Fb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),91,10,91,23,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fi=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.enfants_\xc3\xa0_charge"),0]],Ff=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),94,10,94,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fo=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.avait_enfant_\xc3\xa0_charge_avant_1er_janvier_2012"),0]],Fj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_115,10,num_115,54,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fp=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes(str_allocations_fami_abr),[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),0]]],Fq=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes(str_allocations_fami_abr),[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),0]]],Ft=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),79,10,79,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),79,10,79,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fu=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("i_montant_vers\xc3\xa9"),0]],EH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),44,14,44,27,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],EG=caml_string_of_jsbytes(str_0$1),EC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_181,14,num_181,62,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ex=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),[0,caml_string_of_jsbytes(str_input),0]]],Ey=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),0]],Ez=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),[0,caml_string_of_jsbytes(str_output),0]]],EA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),0]],EB=caml_string_of_jsbytes(str_0$1),Et=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_187,14,num_187,61,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ep=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),38,14,38,38,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],Ek=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),[0,caml_string_of_jsbytes(str_input),0]]],El=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),0]],Em=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),[0,caml_string_of_jsbytes(str_output),0]]],En=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),0]],Ej=caml_string_of_jsbytes(str_0$1),Eo=caml_string_of_jsbytes(str_0$1),Ef=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),36,14,36,32,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],Ee=caml_string_of_jsbytes(str_0$1),Ea=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_187,5,num_187,43,[0,caml_string_of_jsbytes("Article R521-4"),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],D1=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_input),0]]],D2=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],D3=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_output),0]]],D4=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],D5=caml_string_of_jsbytes(str_1),D_=caml_string_of_jsbytes(str_0_5),D$=caml_string_of_jsbytes(str_0),D6=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),[0,caml_string_of_jsbytes(str_input),0]]],D7=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),0]],D8=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),[0,caml_string_of_jsbytes(str_output),0]]],D9=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),0]],Eb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_128,11,num_128,49,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],D0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_128,11,num_128,49,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_125,14,num_125,46,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DP=caml_string_of_jsbytes(str_12),DQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_275,5,277,41,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DM=caml_string_of_jsbytes(str_12),DN=caml_string_of_jsbytes(str_1),DO=caml_string_of_jsbytes(str_12),DR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DK=caml_string_of_jsbytes(str_12),DL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_265,5,num_267,42,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DH=caml_string_of_jsbytes(str_12),DI=caml_string_of_jsbytes(str_1),DJ=caml_string_of_jsbytes(str_12),DS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_283,14,num_283,55,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DF=caml_string_of_jsbytes(str_0$1),Du=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],Dv=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Dw=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],Dx=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Dy=caml_string_of_jsbytes(str_1$0),Dz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),376,5,num_380,57,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Dt=caml_string_of_jsbytes("0.0369"),DA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Dm=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],Dn=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Do=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],Dp=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Dq=caml_string_of_jsbytes(str_1$0),Dr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),386,5,389,58,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Dl=caml_string_of_jsbytes("0.0567"),Ds=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Dk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),22,14,22,40,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Dg=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],Dh=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),0]],Di=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],Dj=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),0]],DC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Df=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C$=caml_string_of_jsbytes(str_1$0),Da=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),353,5,354,69,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Db=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C8=[8,0],C9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_151,24,num_151,44,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],C_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Dc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),18,14,18,34,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],C3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_197,14,num_197,39,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],CY=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),[0,caml_string_of_jsbytes(str_input),0]]],CZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),0]],C0=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),[0,caml_string_of_jsbytes(str_output),0]]],C1=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),0]],C2=caml_string_of_jsbytes(str_1$0),CX=caml_string_of_jsbytes(str_0$1),CO=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],CP=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CQ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],CR=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),60,5,60,38,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],CN=caml_string_of_jsbytes(str_0_16),CT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CH=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],CI=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CJ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],CK=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_101,5,num_101,38,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],CG=caml_string_of_jsbytes(str_0_08),CM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],CB=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CC=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],CD=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_138,5,num_138,38,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Cz=caml_string_of_jsbytes(str_0_04),CF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ct=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],Cu=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Cv=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],Cw=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Cx=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),27,5,27,44,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],Cs=caml_string_of_jsbytes(str_0$1),Cy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Cr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Co=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_128,14,num_128,41,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Cm=caml_string_of_jsbytes(str_0),Cn=caml_string_of_jsbytes(str_0),Ce=[8,0],Cf=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_338,5,num_338,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Cb=caml_string_of_jsbytes(str_1$0),Cc=caml_string_of_jsbytes(str_0_232),Cd=caml_string_of_jsbytes(str_0$1),Cg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],B_=[8,0],B$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_345,5,num_345,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],B7=caml_string_of_jsbytes(str_1$0),B8=caml_string_of_jsbytes("0.2379"),B9=caml_string_of_jsbytes(str_0$1),Ca=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],B4=[8,0],B5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_352,5,num_352,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],B1=caml_string_of_jsbytes(str_1$0),B2=caml_string_of_jsbytes("0.2437"),B3=caml_string_of_jsbytes(str_0$1),B6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BY=[8,0],BZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_359,5,num_359,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BV=caml_string_of_jsbytes(str_1$0),BW=caml_string_of_jsbytes("0.2496"),BX=caml_string_of_jsbytes(str_0$1),B0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BS=[8,0],BT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_366,5,num_366,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BP=caml_string_of_jsbytes(str_1$0),BQ=caml_string_of_jsbytes("0.2555"),BR=caml_string_of_jsbytes(str_0$1),BU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BM=[8,0],BN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_373,5,num_373,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BJ=caml_string_of_jsbytes(str_1$0),BK=caml_string_of_jsbytes("0.2613"),BL=caml_string_of_jsbytes(str_0$1),BO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BG=[8,0],BH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_380,5,num_380,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BD=caml_string_of_jsbytes(str_1$0),BE=caml_string_of_jsbytes("0.2672"),BF=caml_string_of_jsbytes(str_0$1),BI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BA=[8,0],BB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_387,5,num_387,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Bx=caml_string_of_jsbytes(str_1$0),By=caml_string_of_jsbytes("0.2804"),Bz=caml_string_of_jsbytes(str_0$1),BC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bu=[8,0],Bv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_394,5,num_394,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Br=caml_string_of_jsbytes(str_1$0),Bs=caml_string_of_jsbytes("0.2936"),Bt=caml_string_of_jsbytes(str_0$1),Bw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bo=[8,0],Bp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_401,5,num_401,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Bl=caml_string_of_jsbytes(str_1$0),Bm=caml_string_of_jsbytes("0.3068"),Bn=caml_string_of_jsbytes(str_0$1),Bq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ch=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bj=[8,0],Bk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_177,14,num_177,50,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Bg=caml_string_of_jsbytes(str_1$0),Bh=caml_string_of_jsbytes(str_0_32),Bi=caml_string_of_jsbytes(str_0$1),Ci=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),38,14,38,50,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ba=caml_string_of_jsbytes(str_1$0),Bb=caml_string_of_jsbytes(str_0_32),Bc=caml_string_of_jsbytes(str_0$1),Be=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),79,14,79,50,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],A7=caml_string_of_jsbytes(str_1$0),A8=caml_string_of_jsbytes(str_0_16),A9=caml_string_of_jsbytes(str_0$1),A$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_117,14,num_117,50,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],A2=caml_string_of_jsbytes(str_1$0),A3=caml_string_of_jsbytes(str_0_08),A4=caml_string_of_jsbytes(str_0$1),A6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bf=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),43,14,43,59,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AT=caml_string_of_jsbytes(str_2),AU=caml_string_of_jsbytes(str_2),AV=caml_string_of_jsbytes("0.41"),AW=caml_string_of_jsbytes(str_0$1),AY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),84,14,84,59,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AN=caml_string_of_jsbytes(str_2),AO=caml_string_of_jsbytes(str_2),AP=caml_string_of_jsbytes("0.205"),AQ=caml_string_of_jsbytes(str_0$1),AS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_122,14,num_122,59,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AH=caml_string_of_jsbytes(str_2),AI=caml_string_of_jsbytes(str_2),AJ=caml_string_of_jsbytes("0.1025"),AK=caml_string_of_jsbytes(str_0$1),AM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_218,5,num_218,43,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AB=caml_string_of_jsbytes("0.20234"),AD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Az=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),232,5,233,46,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ay=caml_string_of_jsbytes("0.10117"),AA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Aw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_246,5,num_246,43,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Av=caml_string_of_jsbytes("0.05059"),Ax=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],An=caml_string_of_jsbytes(str_12),Ao=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),173,5,174,68,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ak=caml_string_of_jsbytes(str_12),Al=caml_string_of_jsbytes(str_1),Am=caml_string_of_jsbytes(str_12),Ap=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ai=caml_string_of_jsbytes(str_12),Aj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_165,5,166,68,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Af=caml_string_of_jsbytes(str_12),Ag=caml_string_of_jsbytes(str_1),Ah=caml_string_of_jsbytes(str_12),Aq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ar=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ae=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_179,14,num_179,34,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ad=caml_string_of_jsbytes(str_0$1),As=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ac=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],z5=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_input),0]]],z6=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z7=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_output),0]]],z8=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_315,5,318,21,[0,caml_string_of_jsbytes(str_Article_L521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],z_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zW=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),[0,caml_string_of_jsbytes(str_input),0]]],zX=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),0]],zY=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),[0,caml_string_of_jsbytes(str_output),0]]],zZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),0]],z0=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_input),0]]],z1=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z2=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_output),0]]],z3=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_300,5,num_302,21,[0,caml_string_of_jsbytes(str_Article_L521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],z$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Aa=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zL=[8,0],zM=caml_string_of_jsbytes(str_1$0),zN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_159,6,num_159,71,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zJ=caml_string_of_jsbytes(str_1$0),zK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_409,5,410,72,[0,caml_string_of_jsbytes(str_Article_L755_12),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],zP=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zH=caml_string_of_jsbytes(str_2),zI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_101,5,num_101,70,[0,caml_string_of_jsbytes(str_Article_L521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],zR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zy=[8,0],zz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_250,5,251,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zv=caml_string_of_jsbytes(str_0$1),zw=caml_string_of_jsbytes("0.145"),zx=caml_string_of_jsbytes(str_0$1),zA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zs=[8,0],zt=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_258,5,num_259,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zp=caml_string_of_jsbytes(str_0$1),zq=caml_string_of_jsbytes("0.1393"),zr=caml_string_of_jsbytes(str_0$1),zu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zm=[8,0],zn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_266,5,num_267,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zj=caml_string_of_jsbytes(str_0$1),zk=caml_string_of_jsbytes("0.1335"),zl=caml_string_of_jsbytes(str_0$1),zo=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zg=[8,0],zh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),274,5,num_275,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zd=caml_string_of_jsbytes(str_0$1),ze=caml_string_of_jsbytes("0.1278"),zf=caml_string_of_jsbytes(str_0$1),zi=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],za=[8,0],zb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),282,5,num_283,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],y9=caml_string_of_jsbytes(str_0$1),y_=caml_string_of_jsbytes("0.122"),y$=caml_string_of_jsbytes(str_0$1),zc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],y6=[8,0],y7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),290,5,num_291,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],y3=caml_string_of_jsbytes(str_0$1),y4=caml_string_of_jsbytes("0.1163"),y5=caml_string_of_jsbytes(str_0$1),y8=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],y0=[8,0],y1=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_298,5,num_299,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yX=caml_string_of_jsbytes(str_0$1),yY=caml_string_of_jsbytes("0.1105"),yZ=caml_string_of_jsbytes(str_0$1),y2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yU=[8,0],yV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),306,5,307,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yR=caml_string_of_jsbytes(str_0$1),yS=caml_string_of_jsbytes("0.0976"),yT=caml_string_of_jsbytes(str_0$1),yW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yO=[8,0],yP=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_314,5,num_315,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yL=caml_string_of_jsbytes(str_0$1),yM=caml_string_of_jsbytes("0.0847"),yN=caml_string_of_jsbytes(str_0$1),yQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yI=[8,0],yJ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_322,5,323,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yF=caml_string_of_jsbytes(str_0$1),yG=caml_string_of_jsbytes("0.0717"),yH=caml_string_of_jsbytes(str_0$1),yK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yC=[8,0],yD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_330,5,num_330,49,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yz=caml_string_of_jsbytes(str_0$1),yA=caml_string_of_jsbytes("5728"),yB=caml_string_of_jsbytes(str_0$1),yE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yx=[8,0],yy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_167,14,num_167,49,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yu=caml_string_of_jsbytes(str_0$1),yv=caml_string_of_jsbytes(str_0_0588),yw=caml_string_of_jsbytes(str_0$1),zC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yr=caml_string_of_jsbytes(str_1$0),ys=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_362,5,num_363,71,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],yq=caml_string_of_jsbytes(str_0_0588),yt=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_359,29,num_359,64,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],yo=caml_string_of_jsbytes(str_0$1),yk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_142,14,num_142,34,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],yd=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_input),0]]],ye=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],yf=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_output),0]]],yg=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],yh=caml_string_of_jsbytes(str_1),yi=caml_string_of_jsbytes(str_0_5),yj=caml_string_of_jsbytes(str_0),yc=caml_string_of_jsbytes(str_0),x_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_162,14,num_162,34,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],x3=[8,0],x4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_409,5,num_409,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],x0=caml_string_of_jsbytes(str_2),x1=caml_string_of_jsbytes(str_0_0463),x2=caml_string_of_jsbytes(str_0$1),x5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xX=[8,0],xY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_416,5,num_416,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xU=caml_string_of_jsbytes(str_2),xV=caml_string_of_jsbytes("0.0539"),xW=caml_string_of_jsbytes(str_0$1),xZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xR=[8,0],xS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_423,5,num_423,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xO=caml_string_of_jsbytes(str_2),xP=caml_string_of_jsbytes("0.0615"),xQ=caml_string_of_jsbytes(str_0$1),xT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xL=[8,0],xM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_430,5,num_430,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xI=caml_string_of_jsbytes(str_2),xJ=caml_string_of_jsbytes("0.069"),xK=caml_string_of_jsbytes(str_0$1),xN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xF=[8,0],xG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_437,5,num_437,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xC=caml_string_of_jsbytes(str_2),xD=caml_string_of_jsbytes("0.0766"),xE=caml_string_of_jsbytes(str_0$1),xH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xz=[8,0],xA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_444,5,num_444,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xw=caml_string_of_jsbytes(str_2),xx=caml_string_of_jsbytes("0.0842"),xy=caml_string_of_jsbytes(str_0$1),xB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xt=[8,0],xu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_451,5,num_451,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xq=caml_string_of_jsbytes(str_2),xr=caml_string_of_jsbytes("0.0918"),xs=caml_string_of_jsbytes(str_0$1),xv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xn=[8,0],xo=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_458,5,num_458,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xk=caml_string_of_jsbytes(str_2),xl=caml_string_of_jsbytes("0.1089"),xm=caml_string_of_jsbytes(str_0$1),xp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xh=[8,0],xi=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_465,5,num_465,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xe=caml_string_of_jsbytes(str_2),xf=caml_string_of_jsbytes("0.1259"),xg=caml_string_of_jsbytes(str_0$1),xj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xb=[8,0],xc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_472,5,num_472,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],w_=caml_string_of_jsbytes(str_2),w$=caml_string_of_jsbytes("0.143"),xa=caml_string_of_jsbytes(str_0$1),xd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],x6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],w9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_186,14,num_186,59,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],w6=caml_string_of_jsbytes(str_2),w7=caml_string_of_jsbytes(str_0_16),w8=caml_string_of_jsbytes(str_0$1),w2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_195,14,num_195,67,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],wY=caml_string_of_jsbytes(str_3),wZ=caml_string_of_jsbytes(str_3),w0=caml_string_of_jsbytes(str_0_0463),w1=caml_string_of_jsbytes(str_0$1),wR=caml_string_of_jsbytes(str_1$0),wS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_423,6,424,72,[0,caml_string_of_jsbytes(str_Article_L755_12),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wM=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),[0,caml_string_of_jsbytes(str_input),0]]],wN=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],wO=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),[0,caml_string_of_jsbytes(str_output),0]]],wP=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],wQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_119,5,num_126,59,[0,caml_string_of_jsbytes(str_Article_L521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wE=caml_string_of_jsbytes(str_1$0),wF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_429,5,num_430,71,[0,caml_string_of_jsbytes(str_Article_L755_12),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),30,9,30,32,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],wH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ww=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),23,5,23,69,[0,caml_string_of_jsbytes(str_Circulaire_inter_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],wu=caml_string_of_jsbytes(str_562800),wv=caml_string_of_jsbytes("5628600"),wx=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ws=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),56,5,56,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],wq=caml_string_of_jsbytes(str_568400),wr=caml_string_of_jsbytes("5684900"),wt=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wo=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),89,5,89,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$2),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],wm=caml_string_of_jsbytes(str_577500),wn=caml_string_of_jsbytes("5775900"),wp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_116,5,num_116,69,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_Arr_t_du_14_d_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]]],wi=caml_string_of_jsbytes(str_582700),wj=caml_string_of_jsbytes("5827900"),wl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_301,14,num_301,30,[0,caml_string_of_jsbytes(str_Article_D521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wf=caml_string_of_jsbytes(str_559500),wg=caml_string_of_jsbytes("5595000"),v$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),30,5,30,69,[0,caml_string_of_jsbytes(str_Circulaire_inter_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],v9=caml_string_of_jsbytes(str_562800),v_=caml_string_of_jsbytes("7877000"),wa=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],v7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),63,5,63,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],v5=caml_string_of_jsbytes(str_568400),v6=caml_string_of_jsbytes("7955800"),v8=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],v3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),96,5,96,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$2),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],v1=caml_string_of_jsbytes(str_577500),v2=caml_string_of_jsbytes("8083100"),v4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_132,5,num_132,69,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_Arr_t_du_14_d_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]]],vX=caml_string_of_jsbytes(str_582700),vY=caml_string_of_jsbytes("8155800"),v0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_311,14,num_311,31,[0,caml_string_of_jsbytes(str_Article_D521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vU=caml_string_of_jsbytes(str_559500),vV=caml_string_of_jsbytes("7830000"),vQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),33,14,33,36,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],vR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_148,11,num_148,33,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vP=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_148,11,num_148,33,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),75,14,75,64,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vI=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_input),0]]],vJ=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],vK=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_output),0]]],vL=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],vD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),83,19,83,69,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_146,11,num_146,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),56,14,56,41,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_146,11,num_146,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_146,11,num_146,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),32,14,32,40,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],vq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_157,14,num_157,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vm=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_153,14,num_153,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vl=[1,0],vh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_155,14,num_155,50,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_159,14,num_159,32,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),64,14,64,44,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],u6=caml_string_of_jsbytes(str_3),u2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_291,14,num_291,35,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],u1=caml_string_of_jsbytes(str_3),uW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_259,5,260,56,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uV=[1,0],uX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),270,5,271,48,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uP=[0,0],uR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_219,5,num_219,70,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uN=[0,0],uS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_209,5,num_209,69,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uL=[0,0],uT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_189,5,num_189,60,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uJ=[0,0],uU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_215,5,num_215,70,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uD=[1,0],uF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_254,5,num_255,56,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uA=[2,0],uC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),264,5,num_265,48,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uv=[0,0],ux=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_205,5,num_205,69,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ut=[0,0],uy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],us=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_185,5,num_185,60,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ur=[0,0],uz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uH=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],uZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("versement"),0]],u3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_145,11,num_145,32,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_145,11,num_145,32,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u4=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_enfants_l521_1"),0]],u8=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_147,11,num_147,41,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_147,11,num_147,41,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u9=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_enfants_alin\xc3\xa9a_2_l521_3"),0]],u_=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_version_avril_2008),[0,caml_string_of_jsbytes(str_AllocationFamili_abr),0]]],u$=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_version_avril_2008),[0,caml_string_of_jsbytes(str_AllocationFamili_abr),0]]],vc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_142,3,num_142,7,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vd=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("bmaf.date_courante"),0]],va=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),5,10,5,23,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],ve=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_bmaf),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],vf=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_bmaf),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],vi=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_139,3,num_139,25,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vj=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$0),0]],vg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),62,10,62,23,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_139,3,num_139,25,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vo=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$2),0]],vk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),63,10,63,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_139,3,num_139,25,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vs=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$1),0]],vp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),64,10,64,19,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vt=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),0]]],vu=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),0]]],vx=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_141,3,num_141,21,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vy=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("enfant_le_plus_\xc3\xa2g\xc3\xa9.enfants"),0]],vv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),79,10,79,17,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vz=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_enfant_le_plus_abr),[0,caml_string_of_jsbytes(str_EnfantLePlus_g),0]]],vA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_enfant_le_plus_abr),[0,caml_string_of_jsbytes(str_EnfantLePlus_g),0]]],vG=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],vN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),95,11,95,61,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),95,11,95,61,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vO=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("enfants_\xc3\xa0_charge_droit_ouvert_prestation_familiale"),0]],vS=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),0]],wc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wd=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("plafond_II_d521_3"),0]],wz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],we=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("plafond_I_d521_3"),0]],wI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wJ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("droit_ouvert_compl\xc3\xa9ment"),0]],wW=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),0]],w3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_117,11,num_117,64,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_117,11,num_117,64,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],w4=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_quatri\xc3\xa8me_enfant_et_plus_mayotte"),0]],x7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],w5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],x8=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_troisi\xc3\xa8me_enfant_mayotte"),0]],x$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_110,11,num_110,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],x9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_110,11,num_110,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ya=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_total_enfants"),0]],yl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_109,11,num_109,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_109,11,num_109,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ym=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_moyen_enfants"),0]],zD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zE=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_premier_enfant"),0]],zS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zT=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("droit_ouvert_base"),0]],Ab=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],At=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),0]],AE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Au=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AF=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_forfaitaire_par_enfant"),0]],AZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A0=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_troisi\xc3\xa8me_enfant_et_plus"),0]],Cj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A1=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ck=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_deuxi\xc3\xa8me_enfant"),0]],Cp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_108,11,num_108,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Cl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_108,11,num_108,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Cq=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("rapport_enfants_total_moyen"),0]],CV=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),0]],C4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_122,11,num_122,36,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_122,11,num_122,36,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C5=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_forfaitaire"),0]],Dd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],De=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base"),0]],DD=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),0]],DU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DV=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_forfaitaire"),0]],DY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_111,11,num_111,43,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_111,11,num_111,43,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_avec_garde_altern\xc3\xa9e_base"),0]],Ec=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),0]],Eg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_112,11,num_112,29,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ed=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_112,11,num_112,29,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Eh=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_base"),0]],Eq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_129,11,num_129,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ei=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_129,11,num_129,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Er=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_majoration"),0]],Eu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_133,11,num_133,58,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Es=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_133,11,num_133,58,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ev=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_base_compl\xc3\xa9ment_pour_base_et_majoration"),0]],ED=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_135,11,num_135,59,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ew=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_135,11,num_135,59,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],EE=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_base_et_majoration"),0]],EI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_100,10,num_100,23,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],EF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_100,10,num_100,23,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],EJ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9"),0]],EK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),231,5,num_235,6,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uk=[0,caml_string_of_jsbytes("examples/allocations_familiales/autres_codes.catala_fr"),24,5,24,63,[0,caml_string_of_jsbytes("Article L821-3"),[0,caml_string_of_jsbytes(str_Sous_section_1_abr$0),[0,caml_string_of_jsbytes(str_Section_2_R_g_abr),[0,caml_string_of_jsbytes(str_Chapitre_Ier_P_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ul=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ug=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),60,5,62,64,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uf=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),49,5,50,50,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ui=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],um=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ue=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],un=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ud=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),68,5,71,57,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ua=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ub=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_216,18,num_216,41,[0,caml_string_of_jsbytes(str_Article_R755_0_2),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],t3=caml_string_of_jsbytes(str_169),t4=caml_string_of_jsbytes(str_0_55),t6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),59,11,59,27,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),31,14,31,30,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],t0=caml_string_of_jsbytes(str_169),t1=caml_string_of_jsbytes(str_0_55),tP=[0,0],tR=[1,0],tS=[2,0],tT=[3,0],tU=[4,0],tV=[5,0],tQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),357,5,num_362,30,[0,caml_string_of_jsbytes(str_Article_L751_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_G_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],tW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),68,14,68,28,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),69,14,69,32,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),21,14,21,26,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],tB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),60,10,60,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),60,10,60,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tC=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_l512_3_2),0]],tF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),65,3,65,7,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tG=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic_date_courante),0]],tD=[0,caml_string_of_jsbytes(str_examples_allocat_abr),9,10,9,23,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],tJ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),65,3,65,7,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tK=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic_r_sidence),0]],tH=[0,caml_string_of_jsbytes(str_examples_allocat_abr),10,10,10,19,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],tL=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],tM=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],tX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tY=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_r_gime_outre_me_abr),0]],t7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),59,11,59,27,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),59,11,59,27,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t8=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_plafond_l512_3_2),0]],uc=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],uo=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],tu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),28,5,29,34,[0,caml_string_of_jsbytes(str_Instruction_mini_abr),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tt=caml_string_of_jsbytes(str_41316),tv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),48,5,49,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$1),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tq=caml_string_of_jsbytes(str_41440),ts=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],to=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),64,5,65,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$3),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tn=caml_string_of_jsbytes(str_41481),tp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),82,5,83,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$0),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tk=caml_string_of_jsbytes(str_42228),tm=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tx=[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),[0,caml_string_of_jsbytes(str_montant),0]],s8=[6,0],s_=[0,0],s$=[1,0],ta=[2,0],tb=[3,0],tc=[4,0],td=[5,0],te=[7,0],s9=[0,caml_string_of_jsbytes(str_examples_allocat_abr),29,5,38,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],s7=caml_string_of_jsbytes(str_1003),tf=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],s4=[8,0],s5=[0,caml_string_of_jsbytes(str_examples_allocat_abr),47,5,49,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],s3=caml_string_of_jsbytes(str_757),s6=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sT=[6,0],sV=[0,0],sW=[1,0],sX=[2,0],sY=[3,0],sZ=[4,0],s0=[5,0],s1=[7,0],sU=[0,caml_string_of_jsbytes(str_examples_allocat_abr),68,5,77,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sS=caml_string_of_jsbytes(str_1015),s2=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sP=[8,0],sQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr),86,5,88,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sO=caml_string_of_jsbytes(str_766),sR=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sE=[6,0],sG=[0,0],sH=[1,0],sI=[2,0],sJ=[3,0],sK=[4,0],sL=[5,0],sM=[7,0],sF=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_107,5,num_116,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sD=caml_string_of_jsbytes(str_1025),sN=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sA=[8,0],sB=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_125,5,num_127,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sz=caml_string_of_jsbytes(str_774),sC=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sp=[6,0],sr=[0,0],ss=[1,0],st=[2,0],su=[3,0],sv=[4,0],sw=[5,0],sx=[7,0],sq=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_146,5,num_155,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],so=caml_string_of_jsbytes(str_1057),sy=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sl=[8,0],sm=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_165,5,num_167,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sk=caml_string_of_jsbytes(str_798),sn=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sa=[6,0],sc=[0,0],sd=[1,0],se=[2,0],sf=[3,0],sg=[4,0],sh=[5,0],si=[7,0],sb=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_186,5,num_195,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],r$=caml_string_of_jsbytes(str_1085),sj=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],r8=[8,0],r9=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_204,5,num_206,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],r7=caml_string_of_jsbytes(str_819),r_=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],tg=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],r6=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],th=[0,caml_string_of_jsbytes(str_Smic),[0,caml_string_of_jsbytes(str_brut_horaire),0]],r2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),12,14,12,25,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],rY=[2,0],rZ=caml_string_of_jsbytes(str_0$1),r0=[1,0],r1=caml_string_of_jsbytes("-1"),r3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),80,10,80,21,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],rX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),80,10,80,21,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],r4=[0,caml_string_of_jsbytes(str_EnfantLePlus_g),[0,caml_string_of_jsbytes("le_plus_\xc3\xa2g\xc3\xa9"),0]],rT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),78,14,78,41,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],rU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),76,10,76,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],rS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),76,10,76,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],rV=[0,caml_string_of_jsbytes(str_AllocationFamili_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],rJ=caml_string_of_jsbytes(str_b_n_ficie_titr_abr),rK=caml_string_of_jsbytes(str_a_d_j_ouvert_abr),rL=caml_string_of_jsbytes(str_prise_en_charge),rM=caml_string_of_jsbytes(str_date_de_naissance),rN=caml_string_of_jsbytes(str_r_muneration_me_abr),rO=caml_string_of_jsbytes(str_obligation_scolaire),rP=caml_string_of_jsbytes(str_identifiant),rQ=[0,caml_string_of_jsbytes("Enfant"),0],ry=caml_string_of_jsbytes(str_Guadeloupe),rA=caml_string_of_jsbytes(str_Guyane),rB=caml_string_of_jsbytes(str_Martinique),rC=caml_string_of_jsbytes(str_LaR_union),rD=caml_string_of_jsbytes(str_SaintBarth_lemy),rE=caml_string_of_jsbytes(str_SaintMartin),rF=caml_string_of_jsbytes(str_M_tropole),rG=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),rH=caml_string_of_jsbytes(str_Mayotte),rz=[0,caml_string_of_jsbytes(str_Collectivit),0],ro=caml_string_of_jsbytes(str_PrestationAccuei_abr),rq=caml_string_of_jsbytes(str_AllocationsFamil_abr),rr=caml_string_of_jsbytes(str_Compl_mentFamilial),rs=caml_string_of_jsbytes(str_AllocationLogement),rt=caml_string_of_jsbytes(str_Allocation_duca_abr),ru=caml_string_of_jsbytes(str_AllocationSoutie_abr),rv=caml_string_of_jsbytes(str_AllocationRentr_abr),rw=caml_string_of_jsbytes(str_AllocationJourna_abr$0),rp=[0,caml_string_of_jsbytes(str_l_mentPrestat_abr),0],rj=caml_string_of_jsbytes("Compl\xc3\xa8te"),rl=caml_string_of_jsbytes("Partag\xc3\xa9e"),rm=caml_string_of_jsbytes("Z\xc3\xa9ro"),rk=[0,caml_string_of_jsbytes("PriseEnCompte"),0],re=caml_string_of_jsbytes(str_Avant),rg=caml_string_of_jsbytes(str_Pendant),rh=caml_string_of_jsbytes(str_Apr_s),rf=[0,caml_string_of_jsbytes(str_SituationObligat_abr),0],q_=caml_string_of_jsbytes(str_GardeAltern_ePa_abr),ra=caml_string_of_jsbytes(str_GardeAltern_eAl_abr),rb=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),rc=caml_string_of_jsbytes(str_ServicesSociauxA_abr$1),rd=caml_string_of_jsbytes(str_ServicesSociauxA_abr$0),q$=[0,caml_string_of_jsbytes("PriseEnCharge"),0],Gz=caml_string_of_jsbytes(str$12),F8=caml_string_of_jsbytes(str_Guadeloupe),F9=caml_string_of_jsbytes(str_Guyane),F_=caml_string_of_jsbytes(str_LaReunion),F$=caml_string_of_jsbytes(str_Martinique),Ga=caml_string_of_jsbytes(str_Mayotte),Gb=caml_string_of_jsbytes(str_Metropole),Gc=caml_string_of_jsbytes(str_SaintBarthelemy),Gd=caml_string_of_jsbytes(str_SaintMartin),Ge=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),Gg=[7,0],Gh=[5,0],Gi=[4,0],Gj=[6,0],Gk=[8,0],Gl=[2,0],Gm=[3,0],Gn=[1,0],Go=[0,0],Gf=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$0),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr)],FQ=caml_string_of_jsbytes(str_AllocationEducat_abr),FR=caml_string_of_jsbytes(str_AllocationJourna_abr),FS=caml_string_of_jsbytes(str_AllocationLogement),FT=caml_string_of_jsbytes(str_AllocationRentre_abr),FU=caml_string_of_jsbytes(str_AllocationSoutie_abr),FV=caml_string_of_jsbytes(str_AllocationsFamil_abr),FW=caml_string_of_jsbytes(str_ComplementFamilial),FX=caml_string_of_jsbytes(str_PrestationAccuei_abr),FZ=[0,0],F0=[2,0],F1=[1,0],F2=[5,0],F3=[6,0],F4=[3,0],F5=[7,0],F6=[4,0],FY=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$1),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$0)],FJ=caml_string_of_jsbytes(str_Apres),FK=caml_string_of_jsbytes(str_Avant),FL=caml_string_of_jsbytes(str_Pendant),FN=[1,0],FO=[0,0],FP=[2,0],FM=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$1)],Fy=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),Fz=caml_string_of_jsbytes(str_GardeAlterneeAll_abr),FA=caml_string_of_jsbytes(str_GardeAlterneePar_abr),FB=caml_string_of_jsbytes(str_ServicesSociauxA_abr$2),FC=caml_string_of_jsbytes(str_ServicesSociauxA_abr),FE=[4,0],FF=[3,0],FG=[0,0],FH=[1,0],FI=[2,0],FD=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PriseEnCharge.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PriseEnCharge.t'")],Fv=[0,caml_string_of_jsbytes(str_allocationsFamil_abr),caml_string_of_jsbytes(str_baseMensuelleAll_abr),caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_allocationFamili_abr),caml_string_of_jsbytes(str_interfaceAllocat_abr),caml_string_of_jsbytes(str_prestationsFamil_abr),caml_string_of_jsbytes(str_enfantLePlusAge)],Fw=[0,caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_prestationsFamil_abr),caml_string_of_jsbytes(str_interfaceAllocat_abr),caml_string_of_jsbytes(str_enfantLePlusAge),caml_string_of_jsbytes(str_baseMensuelleAll_abr),caml_string_of_jsbytes(str_allocationsFamil_abr),caml_string_of_jsbytes(str_allocationFamili_abr)],GH=caml_string_of_jsbytes("AllocationsFamilialesLib"),a8K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_235,14,num_235,25,[0,caml_string_of_jsbytes("Conseil d'\xc3\x89tat, 5\xc3\xa8me - 4\xc3\xa8me chambres r\xc3\xa9unies, 21/07/2017, 398563"),0]],a8D=caml_string_of_jsbytes(str_0$1),a8E=caml_string_of_jsbytes(str_0$1),a8J=caml_string_of_jsbytes(str_0),a8F=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a8G=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a8H=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a8I=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a8z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1150,14,num_1150,63,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1179,14,num_1179,25,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1146,5,num_1146,70,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1143,14,num_1143,58,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1141,14,num_1141,54,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8d=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1139,14,num_1139,51,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a79=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1137,14,num_1137,59,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a75=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1135,14,num_1135,38,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a71=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1133,14,num_1133,34,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1131,14,num_1131,31,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1152,14,num_1152,48,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1120,11,num_1120,45,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1120,11,num_1120,45,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7V=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("m\xc3\xa9nage_sans_enfants_garde_altern\xc3\xa9e"),0]],a7Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7Z=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.m\xc3\xa9nage"),0]],a7W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1033,10,num_1033,16,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a72=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a73=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.demandeur"),0]],a70=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1034,10,num_1034,19,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a76=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a77=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.date_courante"),0]],a74=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1035,10,num_1035,23,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7$=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.ressources_m\xc3\xa9nage_prises_en_compte"),0]],a78=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1040,10,num_1040,44,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8a=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8b=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8f=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.m\xc3\xa9nage"),0]],a8c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1033,10,num_1033,16,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8j=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.demandeur"),0]],a8g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1034,10,num_1034,19,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8n=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.date_courante"),0]],a8k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1035,10,num_1035,23,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8r=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.ressources_m\xc3\xa9nage_prises_en_compte"),0]],a8o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1040,10,num_1040,44,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8s=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette_sans_abr),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8t=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette_sans_abr),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1127,10,num_1127,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1127,10,num_1127,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8x=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_ligibilit),0]],a8A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1121,11,num_1121,60,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1121,11,num_1121,60,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8B=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],a8L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1128,10,num_1128,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1128,10,num_1128,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8M=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("aide_finale"),0]],a7O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1063,14,num_1063,33,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a7N=caml_string_of_jsbytes(str_0$1),a7F=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7H=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7I=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7J=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7K=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7L=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7M=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1080$0,14,num_1080$0,36,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a7t=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7u=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7v=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7w=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7x=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7y=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7A=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1056,10,num_1056,32,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1056,10,num_1056,32,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1042,14,num_1042,25,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a7l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1101,14,num_1101,63,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1096,14,num_1096,62,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1092,14,num_1092,53,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a69=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1086,5,num_1086,65,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a65=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1081,14,num_1081,68,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a61=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1077,14,num_1077,66,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1051,14,num_1051,58,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a6W=[0,0],a6S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1073,14,num_1073,64,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1053,14,num_1053,50,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a6J=[2,0],a6K=[1,0],a6L=[2,0],a6F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1098,14,num_1098,54,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1094,14,num_1094,45,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1090,14,num_1090,66,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1083,14,num_1083,60,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1079,14,num_1079,58,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1075,14,num_1075,56,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1069,14,num_1069,67,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1065,14,num_1065,63,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a59=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1061,14,num_1061,60,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a53=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1037,5,num_1037,74,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a5Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1067,14,num_1067,55,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1063,14,num_1063,52,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1071,14,num_1071,59,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5T=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.date_courante"),0]],a5Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_396,10,num_396,23,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5X=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.m\xc3\xa9nage"),0]],a5U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_397,10,num_397,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a50=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a51=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.demandeur"),0]],a5Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_398,10,num_398,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a54=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a55=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.b\xc3\xa9n\xc3\xa9ficie_aide_personnalis\xc3\xa9e_logement"),0]],a52=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_399,10,num_399,47,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a56=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_al_abr),[0,caml_string_of_jsbytes(str_ligibilit_All_abr),0]]],a57=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_al_abr),[0,caml_string_of_jsbytes(str_ligibilit_All_abr),0]]],a5_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1042,3,num_1042,42,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5$=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.m\xc3\xa9nage"),0]],a58=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_359,10,num_359,16,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a6c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1042,3,num_1042,42,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6d=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.demandeur"),0]],a6a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_360,10,num_360,19,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a6g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1042,3,num_1042,42,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6h=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],a6e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_361,17,num_361,30,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a6i=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_ai_abr),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),0]]],a6j=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_ai_abr),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),0]]],a6m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6n=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.mode_occupation"),0]],a6k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_974,10,num_974,25,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6r=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],a6o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_975,10,num_975,27,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6v=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.situation_familiale"),0]],a6s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_978,10,num_978,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6z=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.nombre_personnes_\xc3\xa0_charge"),0]],a6w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_979,10,num_979,35,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6D=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.zone"),0]],a6A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_980,10,num_980,14,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6G=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6H=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.date_courante"),0]],a6E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_981,10,num_981,23,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6O=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.type_aide"),0]],a6I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_982,10,num_982,19,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6P=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_allocatio_abr),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),0]]],a6Q=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_allocatio_abr),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),0]]],a6T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6U=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.mode_occupation"),0]],a6R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_726,10,num_726,25,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6Z=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.type_aide"),0]],a6V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_727,10,num_727,19,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a62=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a63=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],a60=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_728,10,num_728,27,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a66=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a67=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.situation_familiale"),0]],a64=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_731,10,num_731,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6$=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.nombre_personnes_\xc3\xa0_charge"),0]],a68=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_732,10,num_732,35,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a7c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7d=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.zone"),0]],a7a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_733,10,num_733,14,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a7g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7h=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],a7e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_734,10,num_734,23,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a7i=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_aide_pers_abr),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),0]]],a7j=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_aide_pers_abr),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),0]]],a7m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1057,10,num_1057,59,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1057,10,num_1057,59,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7n=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],a7q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1054,10,num_1054,21,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1054,10,num_1054,21,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7r=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit),0]],a7D=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1055,10,num_1055,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1055,10,num_1055,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7Q=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],a5M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1398,14,num_1398,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1403,14,num_1403,36,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5w=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a5x=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a5y=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a5z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a5A=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],a5B=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5C=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],a5D=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5E=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],a5F=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],a5H=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_993,10,num_993,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_993,10,num_993,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1742,14,num_1742,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5n=[1,0],a5o=[1,0],a5p=[1,0],a5j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1735,14,num_1735,44,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1720,14,num_1720,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4_=caml_string_of_jsbytes(str_0$1),a4$=caml_string_of_jsbytes(str_0$1),a5a=caml_string_of_jsbytes(str_0$1),a5b=caml_string_of_jsbytes(str_0$1),a5c=caml_string_of_jsbytes(str_0$1),a5d=caml_string_of_jsbytes(str_0$1),a5e=caml_string_of_jsbytes(str_0$1),a46=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1701,14,num_1701,32,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a42=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1719,14,num_1719,31,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1709,5,num_1709,69,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1694,14,num_1694,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1665,14,num_1665,26,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1671,14,num_1671,52,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1659,14,num_1659,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1668,14,num_1668,35,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1685,14,num_1685,67,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1654,14,num_1654,49,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1678,14,num_1678,37,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4p=caml_string_of_jsbytes(str_0$1),a4q=caml_string_of_jsbytes(str_0$1),a4r=caml_string_of_jsbytes(str_0$1),a4j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1832,14,num_1832,64,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4f=[3,0],a4g=[3,0],a4h=[3,0],a4i=[3,0],a4b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1669,14,num_1669,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a39=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1666,14,num_1666,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a35=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1673,14,num_1673,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a31=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1661,14,num_1661,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1655,14,num_1655,56,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1825,14,num_1825,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3P=caml_string_of_jsbytes(str_0$1),a3Q=caml_string_of_jsbytes(str_0$1),a3R=caml_string_of_jsbytes(str_0$1),a3S=caml_string_of_jsbytes(str_0$1),a3L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1850,14,num_1850,50,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3H=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1841,14,num_1841,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3D=[3,0],a3E=[3,0],a3F=[3,0],a3G=[3,0],a3x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1806,14,num_1806,45,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1760,14,num_1760,57,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3q=caml_string_of_jsbytes(str_0$1),a3r=caml_string_of_jsbytes(str_0$1),a3s=caml_string_of_jsbytes(str_0$1),a3m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1797,14,num_1797,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1788,14,num_1788,73,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1769,14,num_1769,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3b=[3,0],a3c=[3,0],a3d=[3,0],a29=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1779,14,num_1779,53,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a25=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1815,14,num_1815,57,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a21=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1751,14,num_1751,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2Y=caml_string_of_jsbytes(str_0$1),a2Z=caml_string_of_jsbytes(str_0$1),a20=caml_string_of_jsbytes(str_0$1),a2U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1670,14,num_1670,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1667,14,num_1667,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1675,14,num_1675,64,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1663,14,num_1663,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1657,14,num_1657,61,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),86,14,86,44,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],a2u=[0,0],a2v=[1,0],a2w=[1,0],a2x=[1,0],a2y=[0,0],a2z=[1,0],a2q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5001,14,num_5001,31,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2n=caml_string_of_jsbytes(str_100),a2o=caml_string_of_jsbytes(str_49),a2p=caml_string_of_jsbytes(str_0_01),a2j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1390,14,num_1390,34,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2e=[0,0],a2f=[2,0],a2g=[1,0],a2h=[0,0],a2i=[1,0],a2k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_984,11,num_984,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2d=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_984,11,num_984,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2l=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_cat_gorie_calcu_abr),0]],a2r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_977,10,num_977,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_977,10,num_977,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2s=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_ressources_m_na_abr),0]],a2B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_985,11,num_985,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_985,11,num_985,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2C=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_situation_famili_abr),0]],a2F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.ressources_m\xc3\xa9nage_arrondies_base"),0]],a2D=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_831,10,num_831,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2K=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$2),0]],a2H=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_834,10,num_834,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2O=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$6),0]],a2L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_835,10,num_835,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2S=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$1),0]],a2P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_836,10,num_836,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2W=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr),0]],a2T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_837,10,num_837,23,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a22=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a23=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$3),0]],a2X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_838,10,num_838,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a26=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a27=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$10),0]],a24=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_839,10,num_839,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$4),0]],a28=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_840,10,num_840,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3g=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$8),0]],a3a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_841,10,num_841,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3k=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$9),0]],a3h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_842,10,num_842,49,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3n=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3o=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$7),0]],a3l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_843,10,num_843,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3v=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.charges_mensuelles_pr\xc3\xaat"),0]],a3p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_844,10,num_844,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$5),0]],a3w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_845,10,num_845,21,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3A=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),0]]],a3B=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),0]]],a3I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3J=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_t_abr),0]],a3C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_913,10,num_913,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3N=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr),0]],a3K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_914,10,num_914,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3V=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr$0),0]],a3O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_915,10,num_915,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3Z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr),0]],a3W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_916,10,num_916,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a32=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a33=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_n_abr),0]],a30=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_917,10,num_917,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a36=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a37=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_s_abr),0]],a34=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_918,10,num_918,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_zone),0]],a38=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_919,10,num_919,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4d=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr$0),0]],a4a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_920,10,num_920,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4l=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("logement_foyer.cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16"),0]],a4e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_921,10,num_921,45,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4m=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),0]]],a4n=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),0]]],a4t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4u=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("locatif.loyer_principal"),0]],a4o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_764,10,num_764,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4y=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_ressourc_abr),0]],a4v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_765,10,num_765,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4C=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_b_n_fi_abr),0]],a4z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_766,10,num_766,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_date_cou_abr),0]],a4D=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_768,10,num_768,23,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4K=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_nombre_p_abr),0]],a4H=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_769,10,num_769,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4O=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_situatio_abr),0]],a4L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_770,10,num_770,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4S=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_zone),0]],a4P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_771,10,num_771,14,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4W=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_logement_abr),0]],a4T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_772,10,num_772,30,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a40=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_g_es_abr),0]],a4X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_773,10,num_773,66,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a43=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a44=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_type_aide),0]],a41=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_775,10,num_775,19,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a47=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a48=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_colocation),0]],a45=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_776,10,num_776,20,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5h=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_r_ducti_abr),0]],a49=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_777,10,num_777,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5l=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_logement_abr$0),0]],a5i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_778,10,num_778,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5s=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("locatif.changement_logement_d842_4"),0]],a5m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_781,10,num_781,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5t=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAllocation_abr),0]]],a5u=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAllocation_abr),0]]],a5K=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a5N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_992,10,num_992,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_992,10,num_992,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5O=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],a19=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1112,5,num_1112,73,[0,caml_string_of_jsbytes("Article L841-3"),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a18=[2,0],a1_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a16=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1125,5,num_1128,28,[0,caml_string_of_jsbytes("Article L841-4"),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a15=[0,0],a17=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a14=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1021,14,num_1021,25,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a10=[0,0],a11=[0,0],a12=[1,0],a13=[2,0],a1Q=caml_string_of_jsbytes(str_0$1),a1R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),990,5,994,29,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1L=caml_string_of_jsbytes(str_1$0),a1J=caml_string_of_jsbytes(str_1$0),a1K=caml_string_of_jsbytes(str_0$1),a1M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_967,5,num_978,12,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1D=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_input),0]]],a1E=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],a1F=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_output),0]]],a1G=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],a1H=caml_string_of_jsbytes(str_1$0),a1B=caml_string_of_jsbytes(str_1$0),a1C=caml_string_of_jsbytes(str_0$1),a1I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),950,5,num_951,72,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1t=[2,0],a1z=[0,0],a1u=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_input),0]]],a1v=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1w=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_output),0]]],a1x=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1y=caml_string_of_jsbytes(str_1$0),a1r=caml_string_of_jsbytes(str_0$1),a1s=caml_string_of_jsbytes(str_0$1),a1A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_913,5,936,29,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1j=[2,0],a1p=[0,0],a1k=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_input),0]]],a1l=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1m=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_output),0]]],a1n=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1o=caml_string_of_jsbytes(str_1$0),a1h=caml_string_of_jsbytes(str_1$0),a1i=caml_string_of_jsbytes(str_0$1),a1q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),882,5,num_902,11,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1c=[0,0],a1d=[1,0],a1e=[3,0],a1f=[4,0],a1g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_863,5,num_867,52,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a09=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_833,14,num_833,25,[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],a08=[0,0],a07=[2,0],a03=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_431,14,num_431,56,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_433,14,num_433,63,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4959,9,num_4959,55,[0,caml_string_of_jsbytes(str_Article_R842_14),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0V=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_surface"),0]],a0Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4958,9,num_4958,68,[0,caml_string_of_jsbytes(str_Article_R842_14),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0S=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_r\xc3\xa9sidence_principale"),0]],a0N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_429,14,num_429,47,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_428,14,num_428,43,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_427,14,num_427,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4556,5,4561,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4539,5,4544,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4522,5,4529,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4492,5,4494,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_425,14,num_425,46,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0l=[6,0],a0h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_421,14,num_421,56,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0g=[1,0],a0c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_420,14,num_420,50,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4363,14,num_4363,28,[0,caml_string_of_jsbytes("Article D841-1"),[0,caml_string_of_jsbytes("Chapitre 1 : Champ d'application"),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZ$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_404,11,num_404,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_404,11,num_404,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0a=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("dur\xc3\xa9e_l841_1_3"),0]],a0d=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_406,3,num_406,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0e=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$0),0]],a0b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),45,10,45,23,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],a0i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_406,3,num_406,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0j=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$2),0]],a0f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),46,10,46,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],a0n=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_406,3,num_406,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0o=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$1),0]],a0k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),47,10,47,19,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],a0p=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),0]]],a0q=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),0]]],a0C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0D=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("condition_accession_propri\xc3\xa9t\xc3\xa9"),0]],a0G=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0H=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr),0]],a0E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_287,10,num_287,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0L=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$0),0]],a0I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_288,10,num_288,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0P=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$2),0]],a0M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_289,17,num_289,30,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0W=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],a0X=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],a00=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_414,10,num_414,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_414,10,num_414,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a01=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],a04=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_413,10,num_413,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a02=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_413,10,num_413,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a05=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_nombre_personnes_abr),0]],a0_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_411,10,num_411,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a06=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_411,10,num_411,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0$=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_dispositions_communes"),0]],a1X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1Y=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement_familiale"),0]],a2a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2b=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_l841_2"),0]],aZ4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_587,5,num_589,36,[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],aZ5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_381,14,num_381,56,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_383,14,num_383,63,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3885,5,3890,30,[0,caml_string_of_jsbytes("Article R832-21"),[0,caml_string_of_jsbytes("Sous-Section 1 : Conditions d'assimilation des logements-foyers aux logements \xc3\xa0 usage locatif"),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aZM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZH=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],aZI=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),0]],aZJ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aZK=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),0]],aZG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_697,5,num_700,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_680,5,num_683,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_637,5,num_646,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZA=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),[0,caml_string_of_jsbytes(str_input),0]]],aZB=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),0]],aZC=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),[0,caml_string_of_jsbytes(str_output),0]]],aZD=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),0]],aZz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),616,5,num_619,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_379,14,num_379,47,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_378,14,num_378,43,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_377,14,num_377,40,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),735,5,748,30,[0,caml_string_of_jsbytes(str_Article_L831_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_716,5,721,30,[0,caml_string_of_jsbytes(str_Article_L831_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_712,31,num_712,54,[0,caml_string_of_jsbytes(str_Article_L831_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_366,11,num_366,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_366,11,num_366,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_366,11,num_366,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3213,5,3216,46,[0,caml_string_of_jsbytes("Article R832-7"),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aY2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3178,5,3180,47,[0,caml_string_of_jsbytes("Article R832-5"),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aY3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY6=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),0]],aY_=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),0]],aZh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZi=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes("condition_logement_pr\xc3\xaat"),0]],aZl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_368,3,num_368,22,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZm=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr),0]],aZj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_287,10,num_287,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_368,3,num_368,22,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZq=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$0),0]],aZn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_288,10,num_288,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_368,3,num_368,22,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZu=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$2),0]],aZr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_289,17,num_289,30,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZv=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aZw=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aZS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZT=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes("condition_logement_bailleur"),0]],aZW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_372,10,num_372,59,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_372,10,num_372,59,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZX=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],aZ0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_371,10,num_371,52,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_371,10,num_371,52,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ1=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_nombre_personnes_abr),0]],aZ6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ7=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit),0]],aYU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2302,14,num_2302,40,[0,caml_string_of_jsbytes("Article D823-22"),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aYP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_559,5,num_562,43,[0,caml_string_of_jsbytes("Article L823-8"),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aYQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4355,14,num_4355,29,[0,caml_string_of_jsbytes("Article 45"),[0,caml_string_of_jsbytes("Chapitre VIII : Prime de d\xc3\xa9m\xc3\xa9nagement"),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aYH=caml_string_of_jsbytes(str_1$0),aYD=caml_string_of_jsbytes(str_1$0),aYB=caml_string_of_jsbytes(str_3),aYC=caml_string_of_jsbytes(str_0$1),aYE=caml_string_of_jsbytes(str_0_2),aYF=caml_string_of_jsbytes(str_3),aYG=caml_string_of_jsbytes(str_0$1),aYJ=caml_string_of_jsbytes(str_0$1),aYI=caml_string_of_jsbytes("2.4"),aYw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),2262,6,2272,77,[0,caml_string_of_jsbytes(str_Article_D823_20),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aYx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_469,14,num_469,43,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_468,14,num_468,39,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_467,14,num_467,36,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_471,14,num_471,65,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX7=caml_string_of_jsbytes(str_1$0),aX5=caml_string_of_jsbytes(str_3),aX6=caml_string_of_jsbytes(str_0$1),aX8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2253,5,2258,77,[0,caml_string_of_jsbytes(str_Article_D823_20),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aX9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2276,14,num_2276,47,[0,caml_string_of_jsbytes(str_Article_D823_20),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aX1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_457,11,num_457,44,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aXZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_457,11,num_457,44,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX2=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("d\xc3\xa9lai_apr\xc3\xa8s_emm\xc3\xa9nagement_l823_8_2"),0]],aX_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX$=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("condition_rang_enfant"),0]],aYc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_461,3,num_461,40,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYd=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr$0),0]],aYa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),5,10,5,23,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],aYe=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],aYf=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],aYi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_460,3,num_460,18,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYj=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_apl.m\xc3\xa9nage"),0]],aYg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_287,10,num_287,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_460,3,num_460,18,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYn=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_apl.demandeur"),0]],aYk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_288,10,num_288,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_460,3,num_460,18,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYr=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_apl.date_courante"),0]],aYo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_289,17,num_289,30,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYs=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_ligibilit_apl),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aYt=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_ligibilit_apl),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aYy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYz=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("condition_p\xc3\xa9riode_d\xc3\xa9m\xc3\xa9nagement"),0]],aYL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_458,11,num_458,26,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_458,11,num_458,26,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYM=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("plafond_d823_22"),0]],aYR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYS=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_ligibilit_lo_abr),0]],aYV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_464,10,num_464,36,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_464,10,num_464,36,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYW=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("montant_prime_d\xc3\xa9m\xc3\xa9nagement"),0]],aXV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1419,14,num_1419,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1424,14,num_1424,36,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],aXG=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXH=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],aXI=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],aXK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXL=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],aXM=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXN=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],aXO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXP=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],aXQ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_745,10,num_745,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_745,10,num_745,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1536,14,num_1536,44,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1521,14,num_1521,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXo=caml_string_of_jsbytes(str_0$1),aXp=caml_string_of_jsbytes(str_0$1),aXq=caml_string_of_jsbytes(str_0$1),aXr=caml_string_of_jsbytes(str_0$1),aXs=caml_string_of_jsbytes(str_0$1),aXt=caml_string_of_jsbytes(str_0$1),aXu=caml_string_of_jsbytes(str_0$1),aXk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1502,14,num_1502,32,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1520,14,num_1520,31,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1510,5,num_1510,69,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aW_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1495,14,num_1495,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aW6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1466,14,num_1466,26,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aW2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1472,14,num_1472,52,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1460,14,num_1460,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1469,14,num_1469,35,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1486,14,num_1486,67,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1455,14,num_1455,49,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1479,14,num_1479,37,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWF=caml_string_of_jsbytes(str_0$1),aWG=caml_string_of_jsbytes(str_0$1),aWH=caml_string_of_jsbytes(str_0$1),aWz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1628,14,num_1628,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWv=caml_string_of_jsbytes(str_0$1),aWw=caml_string_of_jsbytes(str_0$1),aWx=caml_string_of_jsbytes(str_0$1),aWy=caml_string_of_jsbytes(str_0$1),aWr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1470,14,num_1470,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1467,14,num_1467,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1474,14,num_1474,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1462,14,num_1462,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1456,14,num_1456,56,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aV9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1644,14,num_1644,50,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aV5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1635,14,num_1635,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aV1=[3,0],aV2=[3,0],aV3=[3,0],aV4=[3,0],aVV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1471,14,num_1471,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1618,14,num_1618,53,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVO=[0,0],aVP=[0,0],aVQ=[0,0],aVK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1609,14,num_1609,43,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVH=[0,0],aVI=[0,0],aVJ=[0,0],aVD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1468,14,num_1468,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1600,14,num_1600,57,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1591,14,num_1591,45,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1582,14,num_1582,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1573,14,num_1573,73,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1564,14,num_1564,53,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1553,14,num_1553,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVc=[2,0],aVd=[2,0],aVe=[2,0],aU_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1476,14,num_1476,64,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aU6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1464,14,num_1464,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aU2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1458,14,num_1458,61,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1544,14,num_1544,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUV=caml_string_of_jsbytes(str_0$1),aUW=caml_string_of_jsbytes(str_0$1),aUX=caml_string_of_jsbytes(str_0$1),aUR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),76,14,76,44,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aUL=[0,0],aUM=[1,0],aUN=[1,0],aUO=[1,0],aUP=[0,0],aUQ=[1,0],aUH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2167,14,num_2167,31,[0,caml_string_of_jsbytes(str_Article_D823_17),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aUE=caml_string_of_jsbytes(str_100),aUF=caml_string_of_jsbytes(str_49),aUG=caml_string_of_jsbytes(str_0_01),aUA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1411,14,num_1411,34,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUv=[0,0],aUw=[2,0],aUx=[1,0],aUy=[0,0],aUz=[1,0],aUB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_736,11,num_736,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_736,11,num_736,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_cat_gorie_calcu_abr),0]],aUI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_730,10,num_730,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_730,10,num_730,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_ressources_m_na_abr),0]],aUS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_737,11,num_737,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_737,11,num_737,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_situation_famili_abr),0]],aUZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$3),0]],aUU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_664,10,num_664,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.ressources_m\xc3\xa9nage_arrondies"),0]],aU1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_665,10,num_665,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU8=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$2),0]],aU5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_666,10,num_666,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$6),0]],aU9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_667,10,num_667,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVh=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$8),0]],aVb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_668,10,num_668,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$4),0]],aVi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_669,10,num_669,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$9),0]],aVm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_670,10,num_670,49,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVt=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$7),0]],aVq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_671,10,num_671,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVx=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$5),0]],aVu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_672,10,num_672,21,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$10),0]],aVy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_673,10,num_673,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$1),0]],aVC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_674,10,num_674,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVM=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.type_pr\xc3\xaat"),0]],aVG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_675,10,num_675,19,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.anciennet\xc3\xa9_logement"),0]],aVN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_676,10,num_676,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr),0]],aVU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_677,10,num_677,23,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVY=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),0]]],aVZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),0]]],aV6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aV7=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_t_abr),0]],aV0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_606,10,num_606,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aV_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aV$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr),0]],aV8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_607,10,num_607,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWd=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr),0]],aWa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_608,10,num_608,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWh=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_n_abr),0]],aWe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_609,10,num_609,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_s_abr),0]],aWi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_610,10,num_610,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_zone),0]],aWm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_611,10,num_611,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWt=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr$0),0]],aWq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_612,10,num_612,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr$0),0]],aWu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_613,10,num_613,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aWD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aWJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("locatif.loyer_principal_base"),0]],aWE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_529,10,num_529,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_ressourc_abr),0]],aWL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_532,10,num_532,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWS=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_b_n_fi_abr),0]],aWP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_533,10,num_533,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWW=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_date_cou_abr),0]],aWT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_535,10,num_535,23,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_nombre_p_abr),0]],aWX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_536,10,num_536,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_situatio_abr),0]],aW1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_537,10,num_537,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW8=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_zone),0]],aW5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_538,10,num_538,14,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_logement_abr),0]],aW9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_539,10,num_539,30,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXe=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_g_es_abr),0]],aXb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_540,10,num_540,66,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_type_aide),0]],aXf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_542,10,num_542,19,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXm=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_colocation),0]],aXj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_543,10,num_543,20,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXx=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_r_ducti_abr),0]],aXn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_544,10,num_544,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_logement_abr$0),0]],aXy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_545,10,num_545,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],aXD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],aXT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],aXW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_744,10,num_744,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_744,10,num_744,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],aUq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4696,14,num_4696,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aUm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],aUn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aUo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],aUp=caml_string_of_jsbytes(str_0$1),aUr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_881,10,num_881,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aUk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_881,10,num_881,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aUh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4676,14,num_4676,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aT8=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_input),0]]],aT9=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],aT_=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_output),0]]],aT$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],aUa=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],aUb=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],aUc=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],aUd=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],aUe=caml_string_of_jsbytes(str_50),aUf=caml_string_of_jsbytes(str_0$1),aUg=caml_string_of_jsbytes(str_0$1),aUi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_880,10,num_880,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aT7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_880,10,num_880,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aT4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4662,14,num_4662,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTV=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],aTW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aTX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],aTY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aTZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_input),0]]],aT0=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],aT1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_output),0]]],aT2=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],aT3=caml_string_of_jsbytes(str_0$1),aT5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_879,10,num_879,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_879,10,num_879,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4574,14,num_4574,33,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4838,14,num_4838,47,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTI=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],aTJ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],aTK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aTL=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],aTM=caml_string_of_jsbytes(str_0$1),aTO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_860,11,num_860,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_860,11,num_860,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4603,14,num_4603,41,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4629,14,num_4629,33,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4614,14,num_4614,33,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4861,7,4864,45,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_856,11,num_856,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4849,14,num_4849,50,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4600,14,num_4600,62,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("calcul_apl_logement_foyer.n_nombre_parts_d832_25"),0]],aTh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4593,14,num_4593,61,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$8),0]],aTe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_894,14,num_894,49,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTd=caml_string_of_jsbytes(str_0$1),aS$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_904,14,num_904,53,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_902,14,num_902,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_900,14,num_900,70,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_898,14,num_898,65,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_896,14,num_896,67,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_892,14,num_892,61,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_890,14,num_890,59,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSM=[3,0],aSG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4636,14,num_4636,70,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4633,14,num_4633,69,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4634,14,num_4634,75,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4778,5,num_4778,44,[0,caml_string_of_jsbytes(str_Article_D842_9),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aSm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aSo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSp=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aSq=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSr=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aSs=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_851,11,num_851,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4760,14,num_4760,39,[0,caml_string_of_jsbytes(str_Article_D842_9),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSg=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aSh=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSi=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aSj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4925,5,num_4925,28,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_833,10,num_833,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4915,14,num_4915,41,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aR9=caml_string_of_jsbytes(str_100),aR_=caml_string_of_jsbytes(str_0_01),aR$=caml_string_of_jsbytes("4999"),aR4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4139,24,num_4139,56,[0,caml_string_of_jsbytes(str_Article_37),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aRV=caml_string_of_jsbytes(str_0_75),aRW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],aRX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aRY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],aRZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR0=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],aR1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR2=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],aR3=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_854,10,num_854,26,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4083,14,num_4083,46,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aRQ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],aRR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aRS=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],aRT=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_854,10,num_854,26,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_854,10,num_854,26,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4827,15,num_4827,37,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aRN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_859,11,num_859,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_859,11,num_859,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4886,6,4892,6,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aRI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4904,5,4905,59,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aRG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3087,5,num_3087,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aQQ=caml_string_of_jsbytes(str_0$1),aQR=caml_string_of_jsbytes("158700"),aQS=caml_string_of_jsbytes("191300"),aQT=caml_string_of_jsbytes(str_1$0),aQU=caml_string_of_jsbytes("205500"),aQV=caml_string_of_jsbytes(str_2),aQW=caml_string_of_jsbytes("211300"),aQX=caml_string_of_jsbytes(str_3),aQY=caml_string_of_jsbytes("217100"),aQZ=caml_string_of_jsbytes(str_4),aQ0=caml_string_of_jsbytes("222900"),aQ1=caml_string_of_jsbytes(str_5),aQ2=caml_string_of_jsbytes(str_228000),aQ3=caml_string_of_jsbytes(str_5),aQ4=caml_string_of_jsbytes("19800"),aQ5=caml_string_of_jsbytes(str_228000),aQ6=caml_string_of_jsbytes(str_0$1),aQ7=caml_string_of_jsbytes("139300"),aQ8=caml_string_of_jsbytes("170600"),aQ9=caml_string_of_jsbytes(str_1$0),aQ_=caml_string_of_jsbytes("184700"),aQ$=caml_string_of_jsbytes(str_2),aRa=caml_string_of_jsbytes("191200"),aRb=caml_string_of_jsbytes(str_3),aRc=caml_string_of_jsbytes(str_197700),aRd=caml_string_of_jsbytes(str_4),aRe=caml_string_of_jsbytes("204200"),aRf=caml_string_of_jsbytes(str_5),aRg=caml_string_of_jsbytes(str_218700),aRh=caml_string_of_jsbytes(str_5),aRi=caml_string_of_jsbytes(str_19100),aRj=caml_string_of_jsbytes(str_218700),aRk=caml_string_of_jsbytes(str_0$1),aRl=caml_string_of_jsbytes("130600"),aRm=caml_string_of_jsbytes("158400"),aRn=caml_string_of_jsbytes(str_1$0),aRo=caml_string_of_jsbytes("172600"),aRp=caml_string_of_jsbytes(str_2),aRq=caml_string_of_jsbytes(str_179800),aRr=caml_string_of_jsbytes(str_3),aRs=caml_string_of_jsbytes("187000"),aRt=caml_string_of_jsbytes(str_4),aRu=caml_string_of_jsbytes(str_194200),aRv=caml_string_of_jsbytes(str_5),aRw=caml_string_of_jsbytes(str_208600),aRx=caml_string_of_jsbytes(str_5),aRy=caml_string_of_jsbytes("18200"),aRz=caml_string_of_jsbytes(str_208600),aRB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aQO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3133,5,num_3133,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aP4=caml_string_of_jsbytes(str_0$1),aP5=caml_string_of_jsbytes("160400"),aP6=caml_string_of_jsbytes("193400"),aP7=caml_string_of_jsbytes(str_1$0),aP8=caml_string_of_jsbytes("207800"),aP9=caml_string_of_jsbytes(str_2),aP_=caml_string_of_jsbytes("213700"),aP$=caml_string_of_jsbytes(str_3),aQa=caml_string_of_jsbytes("219600"),aQb=caml_string_of_jsbytes(str_4),aQc=caml_string_of_jsbytes(str_225500),aQd=caml_string_of_jsbytes(str_5),aQe=caml_string_of_jsbytes(str_230500),aQf=caml_string_of_jsbytes(str_5),aQg=caml_string_of_jsbytes("20000"),aQh=caml_string_of_jsbytes(str_230500),aQi=caml_string_of_jsbytes(str_0$1),aQj=caml_string_of_jsbytes(str_140800),aQk=caml_string_of_jsbytes(str_172500),aQl=caml_string_of_jsbytes(str_1$0),aQm=caml_string_of_jsbytes("186700"),aQn=caml_string_of_jsbytes(str_2),aQo=caml_string_of_jsbytes("193300"),aQp=caml_string_of_jsbytes(str_3),aQq=caml_string_of_jsbytes(str_199900),aQr=caml_string_of_jsbytes(str_4),aQs=caml_string_of_jsbytes("206500"),aQt=caml_string_of_jsbytes(str_5),aQu=caml_string_of_jsbytes(str_221100),aQv=caml_string_of_jsbytes(str_5),aQw=caml_string_of_jsbytes(str_19300),aQx=caml_string_of_jsbytes(str_221100),aQy=caml_string_of_jsbytes(str_0$1),aQz=caml_string_of_jsbytes(str_132000),aQA=caml_string_of_jsbytes(str_180100),aQB=caml_string_of_jsbytes(str_1$0),aQC=caml_string_of_jsbytes("174500"),aQD=caml_string_of_jsbytes(str_2),aQE=caml_string_of_jsbytes(str_181800),aQF=caml_string_of_jsbytes(str_3),aQG=caml_string_of_jsbytes("189100"),aQH=caml_string_of_jsbytes(str_4),aQI=caml_string_of_jsbytes(str_194200),aQJ=caml_string_of_jsbytes(str_5),aQK=caml_string_of_jsbytes(str_210900),aQL=caml_string_of_jsbytes(str_5),aQM=caml_string_of_jsbytes("18400"),aQN=caml_string_of_jsbytes(str_210900),aQP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aP2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3179,5,num_3179,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aPg=caml_string_of_jsbytes(str_0$1),aPh=caml_string_of_jsbytes("163300"),aPi=caml_string_of_jsbytes("196900"),aPj=caml_string_of_jsbytes(str_1$0),aPk=caml_string_of_jsbytes("211600"),aPl=caml_string_of_jsbytes(str_2),aPm=caml_string_of_jsbytes(str_217600),aPn=caml_string_of_jsbytes(str_3),aPo=caml_string_of_jsbytes("223600"),aPp=caml_string_of_jsbytes(str_4),aPq=caml_string_of_jsbytes("229600"),aPr=caml_string_of_jsbytes(str_5),aPs=caml_string_of_jsbytes(str_234600),aPt=caml_string_of_jsbytes(str_5),aPu=caml_string_of_jsbytes("20400"),aPv=caml_string_of_jsbytes(str_234600),aPw=caml_string_of_jsbytes(str_0$1),aPx=caml_string_of_jsbytes("143300"),aPy=caml_string_of_jsbytes("175600"),aPz=caml_string_of_jsbytes(str_1$0),aPA=caml_string_of_jsbytes("190100"),aPB=caml_string_of_jsbytes(str_2),aPC=caml_string_of_jsbytes("196600"),aPD=caml_string_of_jsbytes(str_3),aPE=caml_string_of_jsbytes("203500"),aPF=caml_string_of_jsbytes(str_4),aPG=caml_string_of_jsbytes("210200"),aPH=caml_string_of_jsbytes(str_5),aPI=caml_string_of_jsbytes(str_225100),aPJ=caml_string_of_jsbytes(str_5),aPK=caml_string_of_jsbytes("19600"),aPL=caml_string_of_jsbytes(str_225100),aPM=caml_string_of_jsbytes(str_0$1),aPN=caml_string_of_jsbytes("134400"),aPO=caml_string_of_jsbytes(str_163000),aPP=caml_string_of_jsbytes(str_1$0),aPQ=caml_string_of_jsbytes("177700"),aPR=caml_string_of_jsbytes(str_2),aPS=caml_string_of_jsbytes("185100"),aPT=caml_string_of_jsbytes(str_3),aPU=caml_string_of_jsbytes(str_192500),aPV=caml_string_of_jsbytes(str_4),aPW=caml_string_of_jsbytes(str_199900),aPX=caml_string_of_jsbytes(str_5),aPY=caml_string_of_jsbytes(str_214700),aPZ=caml_string_of_jsbytes(str_5),aP0=caml_string_of_jsbytes("18700"),aP1=caml_string_of_jsbytes(str_214700),aP3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aPe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3225,5,num_3225,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aOu=caml_string_of_jsbytes(str_0$1),aOv=caml_string_of_jsbytes("167200"),aOw=caml_string_of_jsbytes("201600"),aOx=caml_string_of_jsbytes(str_1$0),aOy=caml_string_of_jsbytes("216700"),aOz=caml_string_of_jsbytes(str_2),aOA=caml_string_of_jsbytes("222800"),aOB=caml_string_of_jsbytes(str_3),aOC=caml_string_of_jsbytes("229000"),aOD=caml_string_of_jsbytes(str_4),aOE=caml_string_of_jsbytes("235100"),aOF=caml_string_of_jsbytes(str_5),aOG=caml_string_of_jsbytes(str_240200),aOH=caml_string_of_jsbytes(str_5),aOI=caml_string_of_jsbytes(str_20900),aOJ=caml_string_of_jsbytes(str_240200),aOK=caml_string_of_jsbytes(str_0$1),aOL=caml_string_of_jsbytes("146700"),aOM=caml_string_of_jsbytes(str_179800),aON=caml_string_of_jsbytes(str_1$0),aOO=caml_string_of_jsbytes("194700"),aOP=caml_string_of_jsbytes(str_2),aOQ=caml_string_of_jsbytes("201500"),aOR=caml_string_of_jsbytes(str_3),aOS=caml_string_of_jsbytes("208400"),aOT=caml_string_of_jsbytes(str_4),aOU=caml_string_of_jsbytes("215200"),aOV=caml_string_of_jsbytes(str_5),aOW=caml_string_of_jsbytes(str_230500),aOX=caml_string_of_jsbytes(str_5),aOY=caml_string_of_jsbytes(str_20100),aOZ=caml_string_of_jsbytes(str_230500),aO0=caml_string_of_jsbytes(str_0$1),aO1=caml_string_of_jsbytes("137600"),aO2=caml_string_of_jsbytes("166900"),aO3=caml_string_of_jsbytes(str_1$0),aO4=caml_string_of_jsbytes("182000"),aO5=caml_string_of_jsbytes(str_2),aO6=caml_string_of_jsbytes("189500"),aO7=caml_string_of_jsbytes(str_3),aO8=caml_string_of_jsbytes("197100"),aO9=caml_string_of_jsbytes(str_4),aO_=caml_string_of_jsbytes(str_204700),aO$=caml_string_of_jsbytes(str_5),aPa=caml_string_of_jsbytes(str_219900),aPb=caml_string_of_jsbytes(str_5),aPc=caml_string_of_jsbytes(str_19100),aPd=caml_string_of_jsbytes(str_219900),aPf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aOs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3271,5,num_3271,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aNI=caml_string_of_jsbytes(str_0$1),aNJ=caml_string_of_jsbytes("167400"),aNK=caml_string_of_jsbytes("201800"),aNL=caml_string_of_jsbytes(str_1$0),aNM=caml_string_of_jsbytes("216900"),aNN=caml_string_of_jsbytes(str_2),aNO=caml_string_of_jsbytes("223000"),aNP=caml_string_of_jsbytes(str_3),aNQ=caml_string_of_jsbytes("229200"),aNR=caml_string_of_jsbytes(str_4),aNS=caml_string_of_jsbytes("235300"),aNT=caml_string_of_jsbytes(str_5),aNU=caml_string_of_jsbytes(str_240400),aNV=caml_string_of_jsbytes(str_5),aNW=caml_string_of_jsbytes(str_20900),aNX=caml_string_of_jsbytes(str_240400),aNY=caml_string_of_jsbytes(str_0$1),aNZ=caml_string_of_jsbytes("146800"),aN0=caml_string_of_jsbytes("180000"),aN1=caml_string_of_jsbytes(str_1$0),aN2=caml_string_of_jsbytes("194900"),aN3=caml_string_of_jsbytes(str_2),aN4=caml_string_of_jsbytes(str_201700),aN5=caml_string_of_jsbytes(str_3),aN6=caml_string_of_jsbytes(str_208600),aN7=caml_string_of_jsbytes(str_4),aN8=caml_string_of_jsbytes("215400"),aN9=caml_string_of_jsbytes(str_5),aN_=caml_string_of_jsbytes(str_230700),aN$=caml_string_of_jsbytes(str_5),aOa=caml_string_of_jsbytes(str_20100),aOb=caml_string_of_jsbytes(str_230700),aOc=caml_string_of_jsbytes(str_0$1),aOd=caml_string_of_jsbytes("137700"),aOe=caml_string_of_jsbytes("167100"),aOf=caml_string_of_jsbytes(str_1$0),aOg=caml_string_of_jsbytes("182200"),aOh=caml_string_of_jsbytes(str_2),aOi=caml_string_of_jsbytes("189700"),aOj=caml_string_of_jsbytes(str_3),aOk=caml_string_of_jsbytes("197300"),aOl=caml_string_of_jsbytes(str_4),aOm=caml_string_of_jsbytes("204900"),aOn=caml_string_of_jsbytes(str_5),aOo=caml_string_of_jsbytes(str_220100),aOp=caml_string_of_jsbytes(str_5),aOq=caml_string_of_jsbytes(str_19100),aOr=caml_string_of_jsbytes(str_220100),aOt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aNG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3317,5,num_3317,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aMW=caml_string_of_jsbytes(str_0$1),aMX=caml_string_of_jsbytes("169100"),aMY=caml_string_of_jsbytes("203800"),aMZ=caml_string_of_jsbytes(str_1$0),aM0=caml_string_of_jsbytes("219100"),aM1=caml_string_of_jsbytes(str_2),aM2=caml_string_of_jsbytes("225200"),aM3=caml_string_of_jsbytes(str_3),aM4=caml_string_of_jsbytes("231500"),aM5=caml_string_of_jsbytes(str_4),aM6=caml_string_of_jsbytes("237700"),aM7=caml_string_of_jsbytes(str_5),aM8=caml_string_of_jsbytes(str_242800),aM9=caml_string_of_jsbytes(str_5),aM_=caml_string_of_jsbytes("21100"),aM$=caml_string_of_jsbytes(str_242800),aNa=caml_string_of_jsbytes(str_0$1),aNb=caml_string_of_jsbytes("148300"),aNc=caml_string_of_jsbytes(str_181800),aNd=caml_string_of_jsbytes(str_1$0),aNe=caml_string_of_jsbytes("196800"),aNf=caml_string_of_jsbytes(str_2),aNg=caml_string_of_jsbytes("203700"),aNh=caml_string_of_jsbytes(str_3),aNi=caml_string_of_jsbytes("210700"),aNj=caml_string_of_jsbytes(str_4),aNk=caml_string_of_jsbytes(str_217600),aNl=caml_string_of_jsbytes(str_5),aNm=caml_string_of_jsbytes(str_233000),aNn=caml_string_of_jsbytes(str_5),aNo=caml_string_of_jsbytes("20300"),aNp=caml_string_of_jsbytes(str_233000),aNq=caml_string_of_jsbytes(str_0$1),aNr=caml_string_of_jsbytes("139100"),aNs=caml_string_of_jsbytes("168800"),aNt=caml_string_of_jsbytes(str_1$0),aNu=caml_string_of_jsbytes(str_184000),aNv=caml_string_of_jsbytes(str_2),aNw=caml_string_of_jsbytes("191600"),aNx=caml_string_of_jsbytes(str_3),aNy=caml_string_of_jsbytes("199300"),aNz=caml_string_of_jsbytes(str_4),aNA=caml_string_of_jsbytes("206900"),aNB=caml_string_of_jsbytes(str_5),aNC=caml_string_of_jsbytes(str_222300),aND=caml_string_of_jsbytes(str_5),aNE=caml_string_of_jsbytes(str_19300),aNF=caml_string_of_jsbytes(str_222300),aNH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aMU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3363,5,num_3363,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aL_=caml_string_of_jsbytes(str_0$1),aL$=caml_string_of_jsbytes("171100"),aMa=caml_string_of_jsbytes("206200"),aMb=caml_string_of_jsbytes(str_1$0),aMc=caml_string_of_jsbytes("221700"),aMd=caml_string_of_jsbytes(str_2),aMe=caml_string_of_jsbytes("227900"),aMf=caml_string_of_jsbytes(str_3),aMg=caml_string_of_jsbytes("234300"),aMh=caml_string_of_jsbytes(str_4),aMi=caml_string_of_jsbytes("240600"),aMj=caml_string_of_jsbytes(str_5),aMk=caml_string_of_jsbytes(str_245700),aMl=caml_string_of_jsbytes(str_5),aMm=caml_string_of_jsbytes("21400"),aMn=caml_string_of_jsbytes(str_245700),aMo=caml_string_of_jsbytes(str_0$1),aMp=caml_string_of_jsbytes("150100"),aMq=caml_string_of_jsbytes(str_184000),aMr=caml_string_of_jsbytes(str_1$0),aMs=caml_string_of_jsbytes("199200"),aMt=caml_string_of_jsbytes(str_2),aMu=caml_string_of_jsbytes("206100"),aMv=caml_string_of_jsbytes(str_3),aMw=caml_string_of_jsbytes("213200"),aMx=caml_string_of_jsbytes(str_4),aMy=caml_string_of_jsbytes("220200"),aMz=caml_string_of_jsbytes(str_5),aMA=caml_string_of_jsbytes(str_235800),aMB=caml_string_of_jsbytes(str_5),aMC=caml_string_of_jsbytes("20500"),aMD=caml_string_of_jsbytes(str_235800),aME=caml_string_of_jsbytes(str_0$1),aMF=caml_string_of_jsbytes(str_140800),aMG=caml_string_of_jsbytes("170800"),aMH=caml_string_of_jsbytes(str_1$0),aMI=caml_string_of_jsbytes("186200"),aMJ=caml_string_of_jsbytes(str_2),aMK=caml_string_of_jsbytes("193900"),aML=caml_string_of_jsbytes(str_3),aMM=caml_string_of_jsbytes(str_201700),aMN=caml_string_of_jsbytes(str_4),aMO=caml_string_of_jsbytes("209400"),aMP=caml_string_of_jsbytes(str_5),aMQ=caml_string_of_jsbytes(str_225000),aMR=caml_string_of_jsbytes(str_5),aMS=caml_string_of_jsbytes("19500"),aMT=caml_string_of_jsbytes(str_225000),aMV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aL8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3409,5,num_3409,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aLm=caml_string_of_jsbytes(str_0$1),aLn=caml_string_of_jsbytes("26084"),aLo=caml_string_of_jsbytes("31435"),aLp=caml_string_of_jsbytes(str_1$0),aLq=caml_string_of_jsbytes("33798"),aLr=caml_string_of_jsbytes(str_2),aLs=caml_string_of_jsbytes("34743"),aLt=caml_string_of_jsbytes(str_3),aLu=caml_string_of_jsbytes("35719"),aLv=caml_string_of_jsbytes(str_4),aLw=caml_string_of_jsbytes("36679"),aLx=caml_string_of_jsbytes(str_5),aLy=caml_string_of_jsbytes(str_37457),aLz=caml_string_of_jsbytes(str_5),aLA=caml_string_of_jsbytes("3262"),aLB=caml_string_of_jsbytes(str_37457),aLC=caml_string_of_jsbytes(str_0$1),aLD=caml_string_of_jsbytes("22883"),aLE=caml_string_of_jsbytes("28051"),aLF=caml_string_of_jsbytes(str_1$0),aLG=caml_string_of_jsbytes("30368"),aLH=caml_string_of_jsbytes(str_2),aLI=caml_string_of_jsbytes("31420"),aLJ=caml_string_of_jsbytes(str_3),aLK=caml_string_of_jsbytes("32502"),aLL=caml_string_of_jsbytes(str_4),aLM=caml_string_of_jsbytes("33569"),aLN=caml_string_of_jsbytes(str_5),aLO=caml_string_of_jsbytes(str_35947),aLP=caml_string_of_jsbytes(str_5),aLQ=caml_string_of_jsbytes("3125"),aLR=caml_string_of_jsbytes(str_35947),aLS=caml_string_of_jsbytes(str_0$1),aLT=caml_string_of_jsbytes("21465"),aLU=caml_string_of_jsbytes("26038"),aLV=caml_string_of_jsbytes(str_1$0),aLW=caml_string_of_jsbytes("28386"),aLX=caml_string_of_jsbytes(str_2),aLY=caml_string_of_jsbytes("29560"),aLZ=caml_string_of_jsbytes(str_3),aL0=caml_string_of_jsbytes("30749"),aL1=caml_string_of_jsbytes(str_4),aL2=caml_string_of_jsbytes("31923"),aL3=caml_string_of_jsbytes(str_5),aL4=caml_string_of_jsbytes(str_34301),aL5=caml_string_of_jsbytes(str_5),aL6=caml_string_of_jsbytes("2973"),aL7=caml_string_of_jsbytes(str_34301),aL9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aLk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3454,5,num_3454,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aKA=caml_string_of_jsbytes(str_0$1),aKB=caml_string_of_jsbytes("26397"),aKC=caml_string_of_jsbytes("31812"),aKD=caml_string_of_jsbytes(str_1$0),aKE=caml_string_of_jsbytes("34204"),aKF=caml_string_of_jsbytes(str_2),aKG=caml_string_of_jsbytes("35160"),aKH=caml_string_of_jsbytes(str_3),aKI=caml_string_of_jsbytes("36148"),aKJ=caml_string_of_jsbytes(str_4),aKK=caml_string_of_jsbytes("37119"),aKL=caml_string_of_jsbytes(str_5),aKM=caml_string_of_jsbytes(str_37906),aKN=caml_string_of_jsbytes(str_5),aKO=caml_string_of_jsbytes("3301"),aKP=caml_string_of_jsbytes(str_37906),aKQ=caml_string_of_jsbytes(str_0$1),aKR=caml_string_of_jsbytes("23158"),aKS=caml_string_of_jsbytes("28388"),aKT=caml_string_of_jsbytes(str_1$0),aKU=caml_string_of_jsbytes("30732"),aKV=caml_string_of_jsbytes(str_2),aKW=caml_string_of_jsbytes(str_31797),aKX=caml_string_of_jsbytes(str_3),aKY=caml_string_of_jsbytes("32892"),aKZ=caml_string_of_jsbytes(str_4),aK0=caml_string_of_jsbytes("33972"),aK1=caml_string_of_jsbytes(str_5),aK2=caml_string_of_jsbytes(str_36378),aK3=caml_string_of_jsbytes(str_5),aK4=caml_string_of_jsbytes("3163"),aK5=caml_string_of_jsbytes(str_36378),aK6=caml_string_of_jsbytes(str_0$1),aK7=caml_string_of_jsbytes("21723"),aK8=caml_string_of_jsbytes("26350"),aK9=caml_string_of_jsbytes(str_1$0),aK_=caml_string_of_jsbytes("28727"),aK$=caml_string_of_jsbytes(str_2),aLa=caml_string_of_jsbytes("29915"),aLb=caml_string_of_jsbytes(str_3),aLc=caml_string_of_jsbytes("31118"),aLd=caml_string_of_jsbytes(str_4),aLe=caml_string_of_jsbytes("32306"),aLf=caml_string_of_jsbytes(str_5),aLg=caml_string_of_jsbytes(str_34713),aLh=caml_string_of_jsbytes(str_5),aLi=caml_string_of_jsbytes("3009"),aLj=caml_string_of_jsbytes(str_34713),aLl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aKy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3499,5,num_3499,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aJO=caml_string_of_jsbytes(str_0$1),aJP=caml_string_of_jsbytes(str_26714),aJQ=caml_string_of_jsbytes("32194"),aJR=caml_string_of_jsbytes(str_1$0),aJS=caml_string_of_jsbytes("34614"),aJT=caml_string_of_jsbytes(str_2),aJU=caml_string_of_jsbytes("35582"),aJV=caml_string_of_jsbytes(str_3),aJW=caml_string_of_jsbytes("36582"),aJX=caml_string_of_jsbytes(str_4),aJY=caml_string_of_jsbytes("37564"),aJZ=caml_string_of_jsbytes(str_5),aJ0=caml_string_of_jsbytes(str_38361),aJ1=caml_string_of_jsbytes(str_5),aJ2=caml_string_of_jsbytes("3341"),aJ3=caml_string_of_jsbytes(str_38361),aJ4=caml_string_of_jsbytes(str_0$1),aJ5=caml_string_of_jsbytes("23436"),aJ6=caml_string_of_jsbytes("28729"),aJ7=caml_string_of_jsbytes(str_1$0),aJ8=caml_string_of_jsbytes("31101"),aJ9=caml_string_of_jsbytes(str_2),aJ_=caml_string_of_jsbytes("32179"),aJ$=caml_string_of_jsbytes(str_3),aKa=caml_string_of_jsbytes("33287"),aKb=caml_string_of_jsbytes(str_4),aKc=caml_string_of_jsbytes("34380"),aKd=caml_string_of_jsbytes(str_5),aKe=caml_string_of_jsbytes(str_36815),aKf=caml_string_of_jsbytes(str_5),aKg=caml_string_of_jsbytes("3201"),aKh=caml_string_of_jsbytes(str_36815),aKi=caml_string_of_jsbytes(str_0$1),aKj=caml_string_of_jsbytes("21984"),aKk=caml_string_of_jsbytes("26666"),aKl=caml_string_of_jsbytes(str_1$0),aKm=caml_string_of_jsbytes("29072"),aKn=caml_string_of_jsbytes(str_2),aKo=caml_string_of_jsbytes("30274"),aKp=caml_string_of_jsbytes(str_3),aKq=caml_string_of_jsbytes("31491"),aKr=caml_string_of_jsbytes(str_4),aKs=caml_string_of_jsbytes("32694"),aKt=caml_string_of_jsbytes(str_5),aKu=caml_string_of_jsbytes(str_35130),aKv=caml_string_of_jsbytes(str_5),aKw=caml_string_of_jsbytes("3045"),aKx=caml_string_of_jsbytes(str_35130),aKz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aJM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3544,5,num_3544,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aI2=caml_string_of_jsbytes(str_0$1),aI3=caml_string_of_jsbytes("27195"),aI4=caml_string_of_jsbytes("32773"),aI5=caml_string_of_jsbytes(str_1$0),aI6=caml_string_of_jsbytes("35237"),aI7=caml_string_of_jsbytes(str_2),aI8=caml_string_of_jsbytes("36222"),aI9=caml_string_of_jsbytes(str_3),aI_=caml_string_of_jsbytes("37240"),aI$=caml_string_of_jsbytes(str_4),aJa=caml_string_of_jsbytes("38240"),aJb=caml_string_of_jsbytes(str_5),aJc=caml_string_of_jsbytes(str_39051),aJd=caml_string_of_jsbytes(str_5),aJe=caml_string_of_jsbytes("3401"),aJf=caml_string_of_jsbytes(str_39051),aJg=caml_string_of_jsbytes(str_0$1),aJh=caml_string_of_jsbytes("23858"),aJi=caml_string_of_jsbytes("29246"),aJj=caml_string_of_jsbytes(str_1$0),aJk=caml_string_of_jsbytes("31661"),aJl=caml_string_of_jsbytes(str_2),aJm=caml_string_of_jsbytes("32758"),aJn=caml_string_of_jsbytes(str_3),aJo=caml_string_of_jsbytes("33886"),aJp=caml_string_of_jsbytes(str_4),aJq=caml_string_of_jsbytes("34999"),aJr=caml_string_of_jsbytes(str_5),aJs=caml_string_of_jsbytes(str_37478),aJt=caml_string_of_jsbytes(str_5),aJu=caml_string_of_jsbytes("3259"),aJv=caml_string_of_jsbytes(str_37478),aJw=caml_string_of_jsbytes(str_0$1),aJx=caml_string_of_jsbytes("22380"),aJy=caml_string_of_jsbytes("27146"),aJz=caml_string_of_jsbytes(str_1$0),aJA=caml_string_of_jsbytes("29595"),aJB=caml_string_of_jsbytes(str_2),aJC=caml_string_of_jsbytes("30819"),aJD=caml_string_of_jsbytes(str_3),aJE=caml_string_of_jsbytes("32058"),aJF=caml_string_of_jsbytes(str_4),aJG=caml_string_of_jsbytes("33282"),aJH=caml_string_of_jsbytes(str_5),aJI=caml_string_of_jsbytes(str_35762),aJJ=caml_string_of_jsbytes(str_5),aJK=caml_string_of_jsbytes("3100"),aJL=caml_string_of_jsbytes(str_35762),aJN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aI0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3589,5,num_3589,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aIe=caml_string_of_jsbytes(str_0$1),aIf=caml_string_of_jsbytes("27956"),aIg=caml_string_of_jsbytes("33691"),aIh=caml_string_of_jsbytes(str_1$0),aIi=caml_string_of_jsbytes("36224"),aIj=caml_string_of_jsbytes(str_2),aIk=caml_string_of_jsbytes("37236"),aIl=caml_string_of_jsbytes(str_3),aIm=caml_string_of_jsbytes("38283"),aIn=caml_string_of_jsbytes(str_4),aIo=caml_string_of_jsbytes("39311"),aIp=caml_string_of_jsbytes(str_5),aIq=caml_string_of_jsbytes(str_40144),aIr=caml_string_of_jsbytes(str_5),aIs=caml_string_of_jsbytes("3496"),aIt=caml_string_of_jsbytes(str_40144),aIu=caml_string_of_jsbytes(str_0$1),aIv=caml_string_of_jsbytes("24526"),aIw=caml_string_of_jsbytes("30065"),aIx=caml_string_of_jsbytes(str_1$0),aIy=caml_string_of_jsbytes("32548"),aIz=caml_string_of_jsbytes(str_2),aIA=caml_string_of_jsbytes("33675"),aIB=caml_string_of_jsbytes(str_3),aIC=caml_string_of_jsbytes(str_34865),aID=caml_string_of_jsbytes(str_4),aIE=caml_string_of_jsbytes("35979"),aIF=caml_string_of_jsbytes(str_5),aIG=caml_string_of_jsbytes(str_38527),aIH=caml_string_of_jsbytes(str_5),aII=caml_string_of_jsbytes("3350"),aIJ=caml_string_of_jsbytes(str_38527),aIK=caml_string_of_jsbytes(str_0$1),aIL=caml_string_of_jsbytes("23007"),aIM=caml_string_of_jsbytes("27906"),aIN=caml_string_of_jsbytes(str_1$0),aIO=caml_string_of_jsbytes("30424"),aIP=caml_string_of_jsbytes(str_2),aIQ=caml_string_of_jsbytes("31682"),aIR=caml_string_of_jsbytes(str_3),aIS=caml_string_of_jsbytes(str_32956),aIT=caml_string_of_jsbytes(str_4),aIU=caml_string_of_jsbytes("34214"),aIV=caml_string_of_jsbytes(str_5),aIW=caml_string_of_jsbytes(str_36733),aIX=caml_string_of_jsbytes(str_5),aIY=caml_string_of_jsbytes("3187"),aIZ=caml_string_of_jsbytes(str_36733),aI1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aIc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3634,5,num_3634,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aHs=caml_string_of_jsbytes(str_0$1),aHt=caml_string_of_jsbytes("28728"),aHu=caml_string_of_jsbytes("34621"),aHv=caml_string_of_jsbytes(str_1$0),aHw=caml_string_of_jsbytes("37224"),aHx=caml_string_of_jsbytes(str_2),aHy=caml_string_of_jsbytes("38264"),aHz=caml_string_of_jsbytes(str_3),aHA=caml_string_of_jsbytes(str_39340),aHB=caml_string_of_jsbytes(str_4),aHC=caml_string_of_jsbytes("40396"),aHD=caml_string_of_jsbytes(str_5),aHE=caml_string_of_jsbytes(str_41252),aHF=caml_string_of_jsbytes(str_5),aHG=caml_string_of_jsbytes("3592"),aHH=caml_string_of_jsbytes(str_41252),aHI=caml_string_of_jsbytes(str_0$1),aHJ=caml_string_of_jsbytes("25203"),aHK=caml_string_of_jsbytes("30895"),aHL=caml_string_of_jsbytes(str_1$0),aHM=caml_string_of_jsbytes("33446"),aHN=caml_string_of_jsbytes(str_2),aHO=caml_string_of_jsbytes("34604"),aHP=caml_string_of_jsbytes(str_3),aHQ=caml_string_of_jsbytes("35796"),aHR=caml_string_of_jsbytes(str_4),aHS=caml_string_of_jsbytes("36972"),aHT=caml_string_of_jsbytes(str_5),aHU=caml_string_of_jsbytes(str_39590),aHV=caml_string_of_jsbytes(str_5),aHW=caml_string_of_jsbytes("3442"),aHX=caml_string_of_jsbytes(str_39590),aHY=caml_string_of_jsbytes(str_0$1),aHZ=caml_string_of_jsbytes("23642"),aH0=caml_string_of_jsbytes("28676"),aH1=caml_string_of_jsbytes(str_1$0),aH2=caml_string_of_jsbytes(str_31264),aH3=caml_string_of_jsbytes(str_2),aH4=caml_string_of_jsbytes("32556"),aH5=caml_string_of_jsbytes(str_3),aH6=caml_string_of_jsbytes("33866"),aH7=caml_string_of_jsbytes(str_4),aH8=caml_string_of_jsbytes("35158"),aH9=caml_string_of_jsbytes(str_5),aH_=caml_string_of_jsbytes(str_37778),aH$=caml_string_of_jsbytes(str_5),aIa=caml_string_of_jsbytes("3275"),aIb=caml_string_of_jsbytes(str_37778),aId=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aHq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3679,5,num_3679,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aGG=caml_string_of_jsbytes(str_0$1),aGH=caml_string_of_jsbytes("29575"),aGI=caml_string_of_jsbytes("35642"),aGJ=caml_string_of_jsbytes(str_1$0),aGK=caml_string_of_jsbytes("38322"),aGL=caml_string_of_jsbytes(str_2),aGM=caml_string_of_jsbytes("39393"),aGN=caml_string_of_jsbytes(str_3),aGO=caml_string_of_jsbytes("40501"),aGP=caml_string_of_jsbytes(str_4),aGQ=caml_string_of_jsbytes("41588"),aGR=caml_string_of_jsbytes(str_5),aGS=caml_string_of_jsbytes(str_42469),aGT=caml_string_of_jsbytes(str_5),aGU=caml_string_of_jsbytes("3698"),aGV=caml_string_of_jsbytes(str_42469),aGW=caml_string_of_jsbytes(str_0$1),aGX=caml_string_of_jsbytes("25946"),aGY=caml_string_of_jsbytes("31806"),aGZ=caml_string_of_jsbytes(str_1$0),aG0=caml_string_of_jsbytes("34433"),aG1=caml_string_of_jsbytes(str_2),aG2=caml_string_of_jsbytes("35625"),aG3=caml_string_of_jsbytes(str_3),aG4=caml_string_of_jsbytes("36852"),aG5=caml_string_of_jsbytes(str_4),aG6=caml_string_of_jsbytes("38063"),aG7=caml_string_of_jsbytes(str_5),aG8=caml_string_of_jsbytes(str_40758),aG9=caml_string_of_jsbytes(str_5),aG_=caml_string_of_jsbytes("3544"),aG$=caml_string_of_jsbytes(str_40758),aHa=caml_string_of_jsbytes(str_0$1),aHb=caml_string_of_jsbytes("24339"),aHc=caml_string_of_jsbytes("29522"),aHd=caml_string_of_jsbytes(str_1$0),aHe=caml_string_of_jsbytes("32186"),aHf=caml_string_of_jsbytes(str_2),aHg=caml_string_of_jsbytes("33516"),aHh=caml_string_of_jsbytes(str_3),aHi=caml_string_of_jsbytes(str_34865),aHj=caml_string_of_jsbytes(str_4),aHk=caml_string_of_jsbytes("36195"),aHl=caml_string_of_jsbytes(str_5),aHm=caml_string_of_jsbytes(str_38892),aHn=caml_string_of_jsbytes(str_5),aHo=caml_string_of_jsbytes("3372"),aHp=caml_string_of_jsbytes(str_38892),aHr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aGE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3724,5,num_3724,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aFU=caml_string_of_jsbytes(str_0$1),aFV=caml_string_of_jsbytes("29670"),aFW=caml_string_of_jsbytes("35757"),aFX=caml_string_of_jsbytes(str_1$0),aFY=caml_string_of_jsbytes("38445"),aFZ=caml_string_of_jsbytes(str_2),aF0=caml_string_of_jsbytes("39519"),aF1=caml_string_of_jsbytes(str_3),aF2=caml_string_of_jsbytes("40601"),aF3=caml_string_of_jsbytes(str_4),aF4=caml_string_of_jsbytes("41721"),aF5=caml_string_of_jsbytes(str_5),aF6=caml_string_of_jsbytes(str_42605),aF7=caml_string_of_jsbytes(str_5),aF8=caml_string_of_jsbytes("3710"),aF9=caml_string_of_jsbytes(str_42605),aF_=caml_string_of_jsbytes(str_0$1),aF$=caml_string_of_jsbytes("26029"),aGa=caml_string_of_jsbytes("31908"),aGb=caml_string_of_jsbytes(str_1$0),aGc=caml_string_of_jsbytes("34643"),aGd=caml_string_of_jsbytes(str_2),aGe=caml_string_of_jsbytes("35739"),aGf=caml_string_of_jsbytes(str_3),aGg=caml_string_of_jsbytes("36970"),aGh=caml_string_of_jsbytes(str_4),aGi=caml_string_of_jsbytes("38185"),aGj=caml_string_of_jsbytes(str_5),aGk=caml_string_of_jsbytes(str_40888),aGl=caml_string_of_jsbytes(str_5),aGm=caml_string_of_jsbytes("3555"),aGn=caml_string_of_jsbytes(str_40888),aGo=caml_string_of_jsbytes(str_0$1),aGp=caml_string_of_jsbytes("24417"),aGq=caml_string_of_jsbytes("29616"),aGr=caml_string_of_jsbytes(str_1$0),aGs=caml_string_of_jsbytes("32289"),aGt=caml_string_of_jsbytes(str_2),aGu=caml_string_of_jsbytes(str_33623),aGv=caml_string_of_jsbytes(str_3),aGw=caml_string_of_jsbytes("34977"),aGx=caml_string_of_jsbytes(str_4),aGy=caml_string_of_jsbytes("36311"),aGz=caml_string_of_jsbytes(str_5),aGA=caml_string_of_jsbytes(str_39016),aGB=caml_string_of_jsbytes(str_5),aGC=caml_string_of_jsbytes("3383"),aGD=caml_string_of_jsbytes(str_39016),aGF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aFS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3769,5,num_3769,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aE8=caml_string_of_jsbytes(str_0$1),aE9=caml_string_of_jsbytes("29996"),aE_=caml_string_of_jsbytes("36149"),aE$=caml_string_of_jsbytes(str_1$0),aFa=caml_string_of_jsbytes("38868"),aFb=caml_string_of_jsbytes(str_2),aFc=caml_string_of_jsbytes("39954"),aFd=caml_string_of_jsbytes(str_3),aFe=caml_string_of_jsbytes("41078"),aFf=caml_string_of_jsbytes(str_4),aFg=caml_string_of_jsbytes("42180"),aFh=caml_string_of_jsbytes(str_5),aFi=caml_string_of_jsbytes(str_43074),aFj=caml_string_of_jsbytes(str_5),aFk=caml_string_of_jsbytes("3751"),aFl=caml_string_of_jsbytes(str_43074),aFm=caml_string_of_jsbytes(str_0$1),aFn=caml_string_of_jsbytes("26315"),aFo=caml_string_of_jsbytes("32259"),aFp=caml_string_of_jsbytes(str_1$0),aFq=caml_string_of_jsbytes("34923"),aFr=caml_string_of_jsbytes(str_2),aFs=caml_string_of_jsbytes("36132"),aFt=caml_string_of_jsbytes(str_3),aFu=caml_string_of_jsbytes("37373"),aFv=caml_string_of_jsbytes(str_4),aFw=caml_string_of_jsbytes("38605"),aFx=caml_string_of_jsbytes(str_5),aFy=caml_string_of_jsbytes(str_41338),aFz=caml_string_of_jsbytes(str_5),aFA=caml_string_of_jsbytes("3594"),aFB=caml_string_of_jsbytes(str_41338),aFC=caml_string_of_jsbytes(str_0$1),aFD=caml_string_of_jsbytes("24686"),aFE=caml_string_of_jsbytes("29942"),aFF=caml_string_of_jsbytes(str_1$0),aFG=caml_string_of_jsbytes("32644"),aFH=caml_string_of_jsbytes(str_2),aFI=caml_string_of_jsbytes("33993"),aFJ=caml_string_of_jsbytes(str_3),aFK=caml_string_of_jsbytes("35362"),aFL=caml_string_of_jsbytes(str_4),aFM=caml_string_of_jsbytes("36710"),aFN=caml_string_of_jsbytes(str_5),aFO=caml_string_of_jsbytes(str_39445),aFP=caml_string_of_jsbytes(str_5),aFQ=caml_string_of_jsbytes("3420"),aFR=caml_string_of_jsbytes(str_39445),aFT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aE6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3814,5,num_3814,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aEk=caml_string_of_jsbytes(str_0$1),aEl=caml_string_of_jsbytes("30296"),aEm=caml_string_of_jsbytes("36510"),aEn=caml_string_of_jsbytes(str_1$0),aEo=caml_string_of_jsbytes("39257"),aEp=caml_string_of_jsbytes(str_2),aEq=caml_string_of_jsbytes("40354"),aEr=caml_string_of_jsbytes(str_3),aEs=caml_string_of_jsbytes("41489"),aEt=caml_string_of_jsbytes(str_4),aEu=caml_string_of_jsbytes("42602"),aEv=caml_string_of_jsbytes(str_5),aEw=caml_string_of_jsbytes(str_43505),aEx=caml_string_of_jsbytes(str_5),aEy=caml_string_of_jsbytes("3789"),aEz=caml_string_of_jsbytes(str_43505),aEA=caml_string_of_jsbytes(str_0$1),aEB=caml_string_of_jsbytes("26578"),aEC=caml_string_of_jsbytes("32582"),aED=caml_string_of_jsbytes(str_1$0),aEE=caml_string_of_jsbytes("35272"),aEF=caml_string_of_jsbytes(str_2),aEG=caml_string_of_jsbytes("36493"),aEH=caml_string_of_jsbytes(str_3),aEI=caml_string_of_jsbytes("37751"),aEJ=caml_string_of_jsbytes(str_4),aEK=caml_string_of_jsbytes("38991"),aEL=caml_string_of_jsbytes(str_5),aEM=caml_string_of_jsbytes(str_41751),aEN=caml_string_of_jsbytes(str_5),aEO=caml_string_of_jsbytes("3630"),aEP=caml_string_of_jsbytes(str_41751),aEQ=caml_string_of_jsbytes(str_0$1),aER=caml_string_of_jsbytes("24933"),aES=caml_string_of_jsbytes("30241"),aET=caml_string_of_jsbytes(str_1$0),aEU=caml_string_of_jsbytes("32970"),aEV=caml_string_of_jsbytes(str_2),aEW=caml_string_of_jsbytes("34333"),aEX=caml_string_of_jsbytes(str_3),aEY=caml_string_of_jsbytes("35716"),aEZ=caml_string_of_jsbytes(str_4),aE0=caml_string_of_jsbytes("37077"),aE1=caml_string_of_jsbytes(str_5),aE2=caml_string_of_jsbytes(str_39839),aE3=caml_string_of_jsbytes(str_5),aE4=caml_string_of_jsbytes("3454"),aE5=caml_string_of_jsbytes(str_39839),aE7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aEi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3859,5,num_3859,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aDy=caml_string_of_jsbytes(str_0$1),aDz=caml_string_of_jsbytes("30947"),aDA=caml_string_of_jsbytes("37295"),aDB=caml_string_of_jsbytes(str_1$0),aDC=caml_string_of_jsbytes("40101"),aDD=caml_string_of_jsbytes(str_2),aDE=caml_string_of_jsbytes("41222"),aDF=caml_string_of_jsbytes(str_3),aDG=caml_string_of_jsbytes("42381"),aDH=caml_string_of_jsbytes(str_4),aDI=caml_string_of_jsbytes("43518"),aDJ=caml_string_of_jsbytes(str_5),aDK=caml_string_of_jsbytes(str_44440),aDL=caml_string_of_jsbytes(str_5),aDM=caml_string_of_jsbytes("3870"),aDN=caml_string_of_jsbytes(str_44440),aDO=caml_string_of_jsbytes(str_0$1),aDP=caml_string_of_jsbytes("27149"),aDQ=caml_string_of_jsbytes("33283"),aDR=caml_string_of_jsbytes(str_1$0),aDS=caml_string_of_jsbytes("36030"),aDT=caml_string_of_jsbytes(str_2),aDU=caml_string_of_jsbytes("37278"),aDV=caml_string_of_jsbytes(str_3),aDW=caml_string_of_jsbytes("38563"),aDX=caml_string_of_jsbytes(str_4),aDY=caml_string_of_jsbytes("39829"),aDZ=caml_string_of_jsbytes(str_5),aD0=caml_string_of_jsbytes("42649"),aD1=caml_string_of_jsbytes(str_5),aD2=caml_string_of_jsbytes("3708"),aD3=caml_string_of_jsbytes("42659"),aD4=caml_string_of_jsbytes(str_0$1),aD5=caml_string_of_jsbytes("25469"),aD6=caml_string_of_jsbytes("30891"),aD7=caml_string_of_jsbytes(str_1$0),aD8=caml_string_of_jsbytes("33679"),aD9=caml_string_of_jsbytes(str_2),aD_=caml_string_of_jsbytes("35071"),aD$=caml_string_of_jsbytes(str_3),aEa=caml_string_of_jsbytes("36484"),aEb=caml_string_of_jsbytes(str_4),aEc=caml_string_of_jsbytes("37874"),aEd=caml_string_of_jsbytes(str_5),aEe=caml_string_of_jsbytes(str_40696),aEf=caml_string_of_jsbytes(str_5),aEg=caml_string_of_jsbytes("3528"),aEh=caml_string_of_jsbytes(str_40696),aEj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aDw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3904,5,num_3904,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aCM=caml_string_of_jsbytes(str_0$1),aCN=caml_string_of_jsbytes("31123"),aCO=caml_string_of_jsbytes("37508"),aCP=caml_string_of_jsbytes(str_1$0),aCQ=caml_string_of_jsbytes("40330"),aCR=caml_string_of_jsbytes(str_2),aCS=caml_string_of_jsbytes("41457"),aCT=caml_string_of_jsbytes(str_3),aCU=caml_string_of_jsbytes("42623"),aCV=caml_string_of_jsbytes(str_4),aCW=caml_string_of_jsbytes("43766"),aCX=caml_string_of_jsbytes(str_5),aCY=caml_string_of_jsbytes(str_44693),aCZ=caml_string_of_jsbytes(str_5),aC0=caml_string_of_jsbytes("3892"),aC1=caml_string_of_jsbytes(str_44693),aC2=caml_string_of_jsbytes(str_0$1),aC3=caml_string_of_jsbytes("27304"),aC4=caml_string_of_jsbytes("33473"),aC5=caml_string_of_jsbytes(str_1$0),aC6=caml_string_of_jsbytes("36235"),aC7=caml_string_of_jsbytes(str_2),aC8=caml_string_of_jsbytes("37490"),aC9=caml_string_of_jsbytes(str_3),aC_=caml_string_of_jsbytes("38783"),aC$=caml_string_of_jsbytes(str_4),aDa=caml_string_of_jsbytes("40056"),aDb=caml_string_of_jsbytes(str_5),aDc=caml_string_of_jsbytes(str_42892),aDd=caml_string_of_jsbytes(str_5),aDe=caml_string_of_jsbytes("3729"),aDf=caml_string_of_jsbytes(str_42892),aDg=caml_string_of_jsbytes(str_0$1),aDh=caml_string_of_jsbytes("25614"),aDi=caml_string_of_jsbytes("31067"),aDj=caml_string_of_jsbytes(str_1$0),aDk=caml_string_of_jsbytes("33871"),aDl=caml_string_of_jsbytes(str_2),aDm=caml_string_of_jsbytes("35271"),aDn=caml_string_of_jsbytes(str_3),aDo=caml_string_of_jsbytes("36692"),aDp=caml_string_of_jsbytes(str_4),aDq=caml_string_of_jsbytes("38090"),aDr=caml_string_of_jsbytes(str_5),aDs=caml_string_of_jsbytes(str_40928),aDt=caml_string_of_jsbytes(str_5),aDu=caml_string_of_jsbytes("3548"),aDv=caml_string_of_jsbytes(str_40928),aDx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aCK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3949,5,num_3949,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aB0=caml_string_of_jsbytes(str_0$1),aB1=caml_string_of_jsbytes("31148"),aB2=caml_string_of_jsbytes("37538"),aB3=caml_string_of_jsbytes(str_1$0),aB4=caml_string_of_jsbytes("40362"),aB5=caml_string_of_jsbytes(str_2),aB6=caml_string_of_jsbytes("41490"),aB7=caml_string_of_jsbytes(str_3),aB8=caml_string_of_jsbytes("42657"),aB9=caml_string_of_jsbytes(str_4),aB_=caml_string_of_jsbytes("43801"),aB$=caml_string_of_jsbytes(str_5),aCa=caml_string_of_jsbytes(str_44729),aCb=caml_string_of_jsbytes(str_5),aCc=caml_string_of_jsbytes("3895"),aCd=caml_string_of_jsbytes(str_44729),aCe=caml_string_of_jsbytes(str_0$1),aCf=caml_string_of_jsbytes("27326"),aCg=caml_string_of_jsbytes(str_33500),aCh=caml_string_of_jsbytes(str_1$0),aCi=caml_string_of_jsbytes("36264"),aCj=caml_string_of_jsbytes(str_2),aCk=caml_string_of_jsbytes("37520"),aCl=caml_string_of_jsbytes(str_3),aCm=caml_string_of_jsbytes("38814"),aCn=caml_string_of_jsbytes(str_4),aCo=caml_string_of_jsbytes("40088"),aCp=caml_string_of_jsbytes(str_5),aCq=caml_string_of_jsbytes(str_42926),aCr=caml_string_of_jsbytes(str_5),aCs=caml_string_of_jsbytes("3732"),aCt=caml_string_of_jsbytes(str_42926),aCu=caml_string_of_jsbytes(str_0$1),aCv=caml_string_of_jsbytes("25634"),aCw=caml_string_of_jsbytes("31092"),aCx=caml_string_of_jsbytes(str_1$0),aCy=caml_string_of_jsbytes("33898"),aCz=caml_string_of_jsbytes(str_2),aCA=caml_string_of_jsbytes("35299"),aCB=caml_string_of_jsbytes(str_3),aCC=caml_string_of_jsbytes("36721"),aCD=caml_string_of_jsbytes(str_4),aCE=caml_string_of_jsbytes("38120"),aCF=caml_string_of_jsbytes(str_5),aCG=caml_string_of_jsbytes(str_40961),aCH=caml_string_of_jsbytes(str_5),aCI=caml_string_of_jsbytes("3551"),aCJ=caml_string_of_jsbytes(str_40961),aCL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aBY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3994,5,num_3994,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aBc=caml_string_of_jsbytes(str_0$1),aBd=caml_string_of_jsbytes("31382"),aBe=caml_string_of_jsbytes("37820"),aBf=caml_string_of_jsbytes(str_1$0),aBg=caml_string_of_jsbytes("40665"),aBh=caml_string_of_jsbytes(str_2),aBi=caml_string_of_jsbytes("41801"),aBj=caml_string_of_jsbytes(str_3),aBk=caml_string_of_jsbytes("42977"),aBl=caml_string_of_jsbytes(str_4),aBm=caml_string_of_jsbytes("44130"),aBn=caml_string_of_jsbytes(str_5),aBo=caml_string_of_jsbytes(str_45064),aBp=caml_string_of_jsbytes(str_5),aBq=caml_string_of_jsbytes("3924"),aBr=caml_string_of_jsbytes(str_45064),aBs=caml_string_of_jsbytes(str_0$1),aBt=caml_string_of_jsbytes("27531"),aBu=caml_string_of_jsbytes("33751"),aBv=caml_string_of_jsbytes(str_1$0),aBw=caml_string_of_jsbytes("36536"),aBx=caml_string_of_jsbytes(str_2),aBy=caml_string_of_jsbytes("37801"),aBz=caml_string_of_jsbytes(str_3),aBA=caml_string_of_jsbytes("39105"),aBB=caml_string_of_jsbytes(str_4),aBC=caml_string_of_jsbytes("40389"),aBD=caml_string_of_jsbytes(str_5),aBE=caml_string_of_jsbytes(str_43248),aBF=caml_string_of_jsbytes(str_5),aBG=caml_string_of_jsbytes("3760"),aBH=caml_string_of_jsbytes(str_43248),aBI=caml_string_of_jsbytes(str_0$1),aBJ=caml_string_of_jsbytes("25826"),aBK=caml_string_of_jsbytes("31325"),aBL=caml_string_of_jsbytes(str_1$0),aBM=caml_string_of_jsbytes("34152"),aBN=caml_string_of_jsbytes(str_2),aBO=caml_string_of_jsbytes("35564"),aBP=caml_string_of_jsbytes(str_3),aBQ=caml_string_of_jsbytes("36996"),aBR=caml_string_of_jsbytes(str_4),aBS=caml_string_of_jsbytes("38406"),aBT=caml_string_of_jsbytes(str_5),aBU=caml_string_of_jsbytes(str_41268),aBV=caml_string_of_jsbytes(str_5),aBW=caml_string_of_jsbytes("3578"),aBX=caml_string_of_jsbytes(str_41268),aBZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aBa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4039,5,num_4039,33,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aAq=caml_string_of_jsbytes(str_0$1),aAr=caml_string_of_jsbytes("31476"),aAs=caml_string_of_jsbytes("37933"),aAt=caml_string_of_jsbytes(str_1$0),aAu=caml_string_of_jsbytes("40787"),aAv=caml_string_of_jsbytes(str_2),aAw=caml_string_of_jsbytes("41927"),aAx=caml_string_of_jsbytes(str_3),aAy=caml_string_of_jsbytes("43106"),aAz=caml_string_of_jsbytes(str_4),aAA=caml_string_of_jsbytes("44262"),aAB=caml_string_of_jsbytes(str_5),aAC=caml_string_of_jsbytes(str_45200),aAD=caml_string_of_jsbytes(str_5),aAE=caml_string_of_jsbytes("3936"),aAF=caml_string_of_jsbytes(str_45200),aAG=caml_string_of_jsbytes(str_0$1),aAH=caml_string_of_jsbytes("27614"),aAI=caml_string_of_jsbytes("33853"),aAJ=caml_string_of_jsbytes(str_1$0),aAK=caml_string_of_jsbytes("36646"),aAL=caml_string_of_jsbytes(str_2),aAM=caml_string_of_jsbytes("37915"),aAN=caml_string_of_jsbytes(str_3),aAO=caml_string_of_jsbytes("39222"),aAP=caml_string_of_jsbytes(str_4),aAQ=caml_string_of_jsbytes("40510"),aAR=caml_string_of_jsbytes(str_5),aAS=caml_string_of_jsbytes(str_43378),aAT=caml_string_of_jsbytes(str_5),aAU=caml_string_of_jsbytes("3771"),aAV=caml_string_of_jsbytes(str_43378),aAW=caml_string_of_jsbytes(str_0$1),aAX=caml_string_of_jsbytes("25904"),aAY=caml_string_of_jsbytes("31419"),aAZ=caml_string_of_jsbytes(str_1$0),aA0=caml_string_of_jsbytes("34255"),aA1=caml_string_of_jsbytes(str_2),aA2=caml_string_of_jsbytes("35670"),aA3=caml_string_of_jsbytes(str_3),aA4=caml_string_of_jsbytes("37107"),aA5=caml_string_of_jsbytes(str_4),aA6=caml_string_of_jsbytes("38521"),aA7=caml_string_of_jsbytes(str_5),aA8=caml_string_of_jsbytes(str_41392),aA9=caml_string_of_jsbytes(str_5),aA_=caml_string_of_jsbytes("3588"),aA$=caml_string_of_jsbytes(str_41392),aBb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4648,14,num_4648,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aAk=caml_string_of_jsbytes(str_0$1),aAl=caml_string_of_jsbytes(str_0$1),aAn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_878,10,num_878,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_878,10,num_878,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4159,5,num_4159,16,[0,caml_string_of_jsbytes(str_Article_37),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aAc=caml_string_of_jsbytes(str_1229),aAd=caml_string_of_jsbytes(str_2710),aAe=caml_string_of_jsbytes(str_5422),aAg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_848,11,num_848,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4105,14,num_4105,41,[0,caml_string_of_jsbytes("Article 34"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],az9=caml_string_of_jsbytes(str_0$1),az_=caml_string_of_jsbytes(str_5422),az$=caml_string_of_jsbytes(str_1229),aAa=caml_string_of_jsbytes(str_5422),az3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_906,14,num_906,50,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4640,14,num_4640,64,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],azT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4638,14,num_4638,59,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],azP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4197,14,num_4197,33,[0,caml_string_of_jsbytes(str_Article_39),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azO=caml_string_of_jsbytes(str_16_25),azK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4186,14,num_4186,33,[0,caml_string_of_jsbytes(str_Article_38),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azJ=caml_string_of_jsbytes(str_0_0234),azF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4204,14,num_4204,41,[0,caml_string_of_jsbytes(str_Article_39),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azE=caml_string_of_jsbytes("390000"),azA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4179,14,num_4179,41,[0,caml_string_of_jsbytes(str_Article_38),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azz=caml_string_of_jsbytes(str_1500),azv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4127,14,num_4127,41,[0,caml_string_of_jsbytes("Article 36"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azu=caml_string_of_jsbytes(str_1000),azq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_278,14,num_278,36,[0,caml_string_of_jsbytes(str_Article_premier),[0,caml_string_of_jsbytes(str_R_glement_CE_abr),0]]],azo=caml_string_of_jsbytes(str_6_55957),azp=caml_string_of_jsbytes(str_1),azk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4117,14,num_4117,40,[0,caml_string_of_jsbytes("Article 35"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azj=caml_string_of_jsbytes(str_500),azl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_855,11,num_855,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_855,11,num_855,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_6"),0]],azr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_858,11,num_858,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_858,11,num_858,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azs=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_taux_francs_vers_abr),0]],azw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_861,11,num_861,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_861,11,num_861,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azx=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_minimal_aide_d842_6"),0]],azB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_862,11,num_862,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_862,11,num_862,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_11"),0]],azG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_863,11,num_863,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_863,11,num_863,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azH=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_12"),0]],azL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_864,11,num_864,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_864,11,num_864,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azM=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("coefficient_d842_11"),0]],azQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_865,11,num_865,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_865,11,num_865,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("coefficient_d842_12"),0]],azU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_867,3,num_867,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azV=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],azS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_656,10,num_656,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],azY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_867,3,num_867,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],azW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_657,10,num_657,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],az0=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],az1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],az4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_870,3,num_870,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],az5=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],az2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],az6=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],az7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],aAh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_848,11,num_848,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],az8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_848,11,num_848,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAi=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_montant_forfaita_abr),0]],aAo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aRD=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aRJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("seuil_minimal_ressources_m\xc3\xa9nage"),0]],aRO=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],aR7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_833,10,num_833,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aR8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_833,10,num_833,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSe=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_ressources_m_na_abr$0),0]],aSv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_851,11,num_851,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_851,11,num_851,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSw=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("plafond_mensualit\xc3\xa9_d842_6"),0]],aSz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_872,3,num_872,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSA=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],aSx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_872,3,num_872,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSE=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],aSB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_872,3,num_872,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSI=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],aSF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSJ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aSK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aSO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSP=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$4),0]],aSL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_606,10,num_606,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aST=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$5),0]],aSQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_607,10,num_607,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$3),0]],aSU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_608,10,num_608,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aS0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$2),0]],aSY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_609,10,num_609,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aS4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS5=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$0),0]],aS2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_610,10,num_610,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aS8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS9=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$7),0]],aS6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_611,10,num_611,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aTa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTb=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$1),0]],aS_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_612,10,num_612,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aTf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTg=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr),0]],aTc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_613,10,num_613,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aTn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aTo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aTt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_856,11,num_856,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_856,11,num_856,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("seuil_minimal_d\xc3\xa9pense_nette_minimale"),0]],aTx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_847,11,num_847,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_847,11,num_847,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTy=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_mensualit_li_abr),0]],aTB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_849,11,num_849,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_849,11,num_849,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_mensualit_mini_abr),0]],aTF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_850,11,num_850,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_850,11,num_850,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_coefficient_pris_abr),0]],aTP=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],aTS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_875,10,num_875,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_875,10,num_875,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTT=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],aT6=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],aUj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],aUs=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aze=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5108,14,num_5108,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ay$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aza=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],azb=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],azc=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],azd=caml_string_of_jsbytes(str_0$1),azf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_948,10,num_948,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ay_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_948,10,num_948,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ay7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5087,14,num_5087,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),[0,caml_string_of_jsbytes(str_input),0]]],ayX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),0]],ayY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),[0,caml_string_of_jsbytes(str_output),0]]],ayZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),0]],ay0=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],ay1=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],ay2=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],ay3=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],ay4=caml_string_of_jsbytes(str_50),ay5=caml_string_of_jsbytes(str_0$1),ay6=caml_string_of_jsbytes(str_0$1),ay8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_947,10,num_947,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_947,10,num_947,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5073,14,num_5073,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayO=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_input),0]]],ayP=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],ayQ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_output),0]]],ayR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],ayT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_946,10,num_946,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_946,10,num_946,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5055,14,num_5055,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayA=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],ayB=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],ayC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],ayD=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],ayE=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_input),0]]],ayF=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],ayG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_output),0]]],ayH=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],ayI=caml_string_of_jsbytes(str_0$1),ayJ=caml_string_of_jsbytes(str_0$1),ayL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_945,10,num_945,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_945,10,num_945,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4974,14,num_4974,33,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ays=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5162,14,num_5162,47,[0,caml_string_of_jsbytes(str_Article_D842_17),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],ayk=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aym=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],ayo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayp=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],ayq=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayr=caml_string_of_jsbytes(str_0$1),ayt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_925,11,num_925,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_925,11,num_925,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5033,14,num_5033,27,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5153,14,num_5153,36,[0,caml_string_of_jsbytes(str_Article_D842_17),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_924,11,num_924,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aya=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_924,11,num_924,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4995,14,num_4995,41,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ax3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5031,14,num_5031,70,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5021,14,num_5021,69,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5022,14,num_5022,75,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5041,14,num_5041,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axP=caml_string_of_jsbytes(str_0$1),axQ=caml_string_of_jsbytes(str_0$1),axS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_944,10,num_944,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_944,10,num_944,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4268,6,num_4268,79,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axI=caml_string_of_jsbytes("8414"),axJ=caml_string_of_jsbytes("13100"),axL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),4303,6,4304,38,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axE=caml_string_of_jsbytes("20640"),axF=caml_string_of_jsbytes("32073"),axH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),4321,6,4322,24,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axz=caml_string_of_jsbytes(str_17012),axA=caml_string_of_jsbytes(str_26440),axC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),4285,6,4286,46,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axw=caml_string_of_jsbytes(str_17012),axx=caml_string_of_jsbytes(str_26440),axD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4226,14,num_4226,41,[0,caml_string_of_jsbytes("Article 40"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axo=caml_string_of_jsbytes(str_0$1),axp=caml_string_of_jsbytes(str_5422),axq=caml_string_of_jsbytes(str_1229),axr=caml_string_of_jsbytes(str_5422),axi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4992,14,num_4992,61,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axk=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$8),0]],axf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_955,14,num_955,49,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_965,14,num_965,53,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_963,14,num_963,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_961,14,num_961,70,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_959,14,num_959,65,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_957,14,num_957,67,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_953,14,num_953,61,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_951,14,num_951,59,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_967,14,num_967,50,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5027,14,num_5027,64,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],awz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5025,14,num_5025,59,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],awv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5029,14,num_5029,55,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],awr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4340,14,num_4340,51,[0,caml_string_of_jsbytes("Article 44"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],awq=caml_string_of_jsbytes(str_1500),awm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4239,14,num_4239,41,[0,caml_string_of_jsbytes("Article 41"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],awl=caml_string_of_jsbytes(str_500),awh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4250,14,num_4250,42,[0,caml_string_of_jsbytes("Article 42"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],awg=caml_string_of_jsbytes(str_1000),awi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_926,11,num_926,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_926,11,num_926,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("montant_minimal_aide_d842_15"),0]],awn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_927,11,num_927,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_927,11,num_927,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_15"),0]],aws=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_928,11,num_928,48,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_928,11,num_928,48,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awt=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("montant_minimal_d\xc3\xa9pense_nette_d842_17"),0]],aww=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_934,3,num_934,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awx=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$0),0]],awu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_599,10,num_599,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_934,3,num_934,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awB=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],awy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_600,10,num_600,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_934,3,num_934,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awF=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],awC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_601,10,num_601,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],awH=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],awK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_937,3,num_937,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awL=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],awI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awM=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],awN=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],awQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$4),0]],awO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_606,10,num_606,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awV=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$5),0]],awS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_607,10,num_607,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$3),0]],awW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_608,10,num_608,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aw2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw3=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$2),0]],aw0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_609,10,num_609,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aw6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$0),0]],aw4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_610,10,num_610,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aw_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$7),0]],aw8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_611,10,num_611,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],axc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axd=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$1),0]],axa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_612,10,num_612,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],axg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axh=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr),0]],axe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_613,10,num_613,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],axl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],axm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],axt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_931,10,num_931,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_931,10,num_931,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_montant_forfaita_abr),0]],axM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axN=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("\xc3\xa9quivalence_loyer"),0]],axT=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],axW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_939,3,num_939,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],axU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ax0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_939,3,num_939,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],axY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ax4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_939,3,num_939,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax5=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],ax2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ax6=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ax7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ax_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_929,10,num_929,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_929,10,num_929,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_coefficient_pris_abr),0]],ayd=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_932,10,num_932,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aye=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_932,10,num_932,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayh=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("loyer_minimal"),0]],ayu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],ayx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_942,10,num_942,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_942,10,num_942,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayy=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],ayM=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],ayU=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),0]],ay9=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],azg=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],awa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4465,24,num_4465,43,[0,caml_string_of_jsbytes(str_Article_D842_4),[0,caml_string_of_jsbytes(str_Section_1_Sect_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],av$=caml_string_of_jsbytes(str_0$1),awb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_785,10,num_785,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_822,14,num_822,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4473,24,num_4473,46,[0,caml_string_of_jsbytes(str_Article_D842_4),[0,caml_string_of_jsbytes(str_Section_1_Sect_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],av6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_787,10,num_787,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_823,14,num_823,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],av1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],av2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],av3=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],av7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_787,10,num_787,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_787,10,num_787,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_818,14,num_818,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_816,14,num_816,59,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_814,14,num_814,43,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_812,14,num_812,42,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),808,5,809,63,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_805,14,num_805,53,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_803,14,num_803,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_801,14,num_801,63,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_799,14,num_799,58,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_797,14,num_797,46,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_794,14,num_794,78,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_792,14,num_792,60,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],au_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_790,14,num_790,48,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],au$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ava=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.loyer_principal_base"),0]],au9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_529,10,num_529,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ave=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.ressources_m\xc3\xa9nage_arrondies"),0]],avb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_532,10,num_532,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avi=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),0]],avf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_533,10,num_533,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.date_courante"),0]],avj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_535,10,num_535,23,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avq=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.nombre_personnes_\xc3\xa0_charge"),0]],avn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_536,10,num_536,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.situation_familiale_calcul_apl"),0]],avr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_537,10,num_537,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avy=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.zone"),0]],avv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_538,10,num_538,14,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.logement_est_chambre"),0]],avz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_539,10,num_539,30,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),0]],avD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_540,10,num_540,66,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.type_aide"),0]],avH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_542,10,num_542,19,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avO=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.colocation"),0]],avL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_543,10,num_543,20,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avS=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.r\xc3\xa9duction_loyer_solidarit\xc3\xa9"),0]],avP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_544,10,num_544,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.logement_meubl\xc3\xa9_d842_2"),0]],avT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_545,10,num_545,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_calcul_apl_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],avY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_calcul_apl_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],av8=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],awc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_785,10,num_785,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_785,10,num_785,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awd=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],au2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),58,5,61,21,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],au3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),47,5,48,78,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],au4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),67,5,70,85,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$6),62,18,62,41,[0,caml_string_of_jsbytes(str_Article_R755_0_2),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auN=caml_string_of_jsbytes(str_169),auO=caml_string_of_jsbytes(str_0_55),auQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),42,11,42,27,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$6),31,14,31,30,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auK=caml_string_of_jsbytes(str_169),auL=caml_string_of_jsbytes(str_0_55),auz=[0,0],auB=[1,0],auC=[2,0],auD=[3,0],auE=[4,0],auF=[5,0],auA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),num_104,5,num_109,30,[0,caml_string_of_jsbytes(str_Article_L751_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_G_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],aus=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),51,14,51,28,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),52,14,52,32,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$6),21,14,21,26,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],aul=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),43,10,43,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),43,10,43,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],aum=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_ge_l512_3_2),0]],aup=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),48,3,48,7,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auq=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic_date_courante),0]],aun=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),9,10,9,23,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],aut=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),48,3,48,7,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auu=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic_r_sidence),0]],aur=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),10,10,10,19,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],auv=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],auw=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],auH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],aux=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auI=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_r_gime_outre_me_abr),0]],auR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),42,11,42,27,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),42,11,42,27,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auS=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_plafond_l512_3_2),0]],auY=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],au7=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],aud=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_404,14,num_404,32,[0,caml_string_of_jsbytes(str_Article_R822_7),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aub=caml_string_of_jsbytes(str_12),auc=caml_string_of_jsbytes(str_0$1),at8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_849,6,852,35,[0,caml_string_of_jsbytes("Article R822-20"),[0,caml_string_of_jsbytes("Sous-section 3 : Montant forfaitaire de ressources applicable aux \xc3\xa9tudiants"),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],at9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_508,10,num_508,37,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_124,14,num_124,41,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],at3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_457,14,num_457,32,[0,caml_string_of_jsbytes("Article R822-8"),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],at2=caml_string_of_jsbytes(str_0$1),atW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_413,14,num_413,65,[0,caml_string_of_jsbytes(str_Article_R822_7),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_519,14,num_519,33,[0,caml_string_of_jsbytes("Article R822-10"),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atJ=caml_string_of_jsbytes(str_0$1),atK=caml_string_of_jsbytes(str_0$1),atP=caml_string_of_jsbytes(str_2),atQ=caml_string_of_jsbytes("90100"),atR=caml_string_of_jsbytes("135000"),atL=caml_string_of_jsbytes(str_0$1),atM=caml_string_of_jsbytes(str_0$1),atN=caml_string_of_jsbytes(str_0$1),atO=caml_string_of_jsbytes(str_0$1),atF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_129,14,num_129,62,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atE=caml_string_of_jsbytes(str_0$1),atA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_503,51,num_503,57,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),11,14,11,41,[0,caml_string_of_jsbytes("Article 3"),[0,caml_string_of_jsbytes(str_Chapitre_II_Di_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],atv=caml_string_of_jsbytes("9500"),atr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),21,14,21,41,[0,caml_string_of_jsbytes("Article 4"),[0,caml_string_of_jsbytes(str_Chapitre_II_Di_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],atq=caml_string_of_jsbytes("258900"),atm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_493,46,num_493,52,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_495,10,num_495,15,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_495,10,num_495,15,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ato=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_ressources_m_na_abr$0),0]],ats=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_499,11,num_499,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_499,11,num_499,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],att=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_r_822_8"),0]],atx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_501,11,num_501,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_501,11,num_501,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aty=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_r_822_7"),0]],atB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_503,11,num_503,42,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_503,11,num_503,42,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atC=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("ressources_forfaitaires_r822_20"),0]],atG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_497,11,num_497,59,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_497,11,num_497,59,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atH=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("ressources_personnes_vivant_habituellement_foyer"),0]],atT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_502,11,num_502,30,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_502,11,num_502,30,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atU=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("abattement_r_822_10"),0]],atX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_505,3,num_505,40,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atY=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr$0),0]],atV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),5,10,5,23,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],atZ=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],at0=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],at4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_498,11,num_498,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_498,11,num_498,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at5=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("abattement_r_822_8"),0]],at_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_508,10,num_508,37,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_508,10,num_508,37,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at$=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("ressources_prises_en_compte"),0]],aue=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_500,11,num_500,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aua=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_500,11,num_500,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],auf=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("abattement_r_822_7"),0]],aug=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_142,13,num_143,74,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],auh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_142,13,num_143,74,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_334,14,num_334,56,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_336,14,num_336,63,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as7=caml_string_of_jsbytes(str_0),as8=caml_string_of_jsbytes(str_0),as3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1132,14,num_1132,49,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asZ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),[0,caml_string_of_jsbytes(str_input),0]]],as0=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),0]],as1=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),[0,caml_string_of_jsbytes(str_output),0]]],as2=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),0]],asT=caml_string_of_jsbytes(str_1_25),asS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1208,4,1214,49,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asN=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_input),0]]],asO=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],asP=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_output),0]]],asQ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],asR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1189,5,num_1189,44,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1144,5,1147,44,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asE=[0,0],asF=caml_string_of_jsbytes(str_1_25),asD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1168,5,1184,10,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_330,5,332,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ass=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_163,14,num_163,31,[0,caml_string_of_jsbytes("Article L351-8"),[0,caml_string_of_jsbytes("Section 5 : Taux et montant de la pension"),[0,caml_string_of_jsbytes("Chapitre 1er : Ouverture du droit, liquidation et calcul des pensions de retraite"),[0,caml_string_of_jsbytes("Titre V : Assurance vieillesse - Assurance veuvage"),[0,caml_string_of_jsbytes("Livre III : Dispositions relatives aux assurances sociales et \xc3\xa0 diverses cat\xc3\xa9gories de personnes rattach\xc3\xa9es au r\xc3\xa9gime g\xc3\xa9n\xc3\xa9rale"),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],asm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),72,5,73,52,[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],asn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),65,5,68,52,[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],aso=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ask=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_286,18,num_286,75,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],asc=caml_string_of_jsbytes(str_0$1),ase=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar$=[4,0],asa=[5,0],asb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_267,18,269,45,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ar_=caml_string_of_jsbytes(str_0$1),asf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_939,5,num_939,59,[0,caml_string_of_jsbytes(str_Article_R822_22),[0,caml_string_of_jsbytes(str_Sous_section_4_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],asg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_250,33,num_250,58,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ar7=caml_string_of_jsbytes(str_0$1),ar3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_125,14,num_125,32,[0,caml_string_of_jsbytes(str_Article_L161_17_2),[0,caml_string_of_jsbytes(str_Paragraphe_1_I_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],arY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_384,18,num_384,44,[0,caml_string_of_jsbytes("Article L822-10"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arQ=caml_string_of_jsbytes(str_0),arP=caml_string_of_jsbytes(str_0),arO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),171,5,num_177,66,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),156,5,158,30,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_125,5,131,33,[0,caml_string_of_jsbytes(str_Article_L822_2),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),203,5,208,39,[0,caml_string_of_jsbytes(str_Article_L822_4),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_197,5,198,34,[0,caml_string_of_jsbytes(str_Article_L822_4),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ary=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),329,5,num_330,35,[0,caml_string_of_jsbytes(str_Article_D815_1),[0,caml_string_of_jsbytes(str_Section_1_Ouve_abr),[0,caml_string_of_jsbytes(str_Chapitre_5_All_abr),[0,caml_string_of_jsbytes(str_Titre_I_Alloca_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_All_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],arx=caml_string_of_jsbytes("999840"),arz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_334,5,335,35,[0,caml_string_of_jsbytes(str_Article_D815_1),[0,caml_string_of_jsbytes(str_Section_1_Ouve_abr),[0,caml_string_of_jsbytes(str_Chapitre_5_All_abr),[0,caml_string_of_jsbytes(str_Titre_I_Alloca_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_All_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],aru=caml_string_of_jsbytes("1041840"),arw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ars=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),339,5,340,35,[0,caml_string_of_jsbytes(str_Article_D815_1),[0,caml_string_of_jsbytes(str_Section_1_Ouve_abr),[0,caml_string_of_jsbytes(str_Chapitre_5_All_abr),[0,caml_string_of_jsbytes(str_Titre_I_Alloca_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_All_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],arr=caml_string_of_jsbytes("1083840"),art=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),33,5,34,34,[0,caml_string_of_jsbytes(str_Allocation_de_so_abr),[0,caml_string_of_jsbytes('Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation \xc3\xa0 compter du 1er janvier 2022"'),0]]],aro=caml_string_of_jsbytes("1100144"),arq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),70,5,71,34,[0,caml_string_of_jsbytes(str_Allocation_de_so_abr),[0,caml_string_of_jsbytes('Circulaire de la CNAV 2021-1 du 11/01/2021 "Revalorisation \xc3\xa0 compter du 1er janvier 2021"'),0]]],arl=caml_string_of_jsbytes("1088175"),arn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_107,5,num_110,67,[0,caml_string_of_jsbytes(str_Article_L822_2),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_246,14,num_246,40,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aq7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_123,14,num_123,61,[0,caml_string_of_jsbytes(str_Article_L161_17_2),[0,caml_string_of_jsbytes(str_Paragraphe_1_I_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],aq1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),46,5,46,41,[0,caml_string_of_jsbytes("Article L821-2"),[0,caml_string_of_jsbytes(str_Sous_section_1_abr$0),[0,caml_string_of_jsbytes(str_Section_2_R_g_abr),[0,caml_string_of_jsbytes(str_Chapitre_Ier_P_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aq2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqE=caml_string_of_jsbytes(str_1$0),aqQ=caml_string_of_jsbytes(str_2),aqR=caml_string_of_jsbytes(str_2),aqS=caml_string_of_jsbytes(str_2),aqT=caml_string_of_jsbytes(str_1$0),aqU=caml_string_of_jsbytes(str_2),aqF=caml_string_of_jsbytes(str_9),aqG=caml_string_of_jsbytes(str_9),aqL=caml_string_of_jsbytes(str_16),aqM=caml_string_of_jsbytes(str_16),aqN=caml_string_of_jsbytes(str_16),aqO=caml_string_of_jsbytes(str_9),aqP=caml_string_of_jsbytes(str_16),aqH=caml_string_of_jsbytes(str_70),aqI=caml_string_of_jsbytes("8"),aqJ=caml_string_of_jsbytes(str_70),aqK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1030,5,1058,65,[0,caml_string_of_jsbytes("Article R822-25"),[0,caml_string_of_jsbytes("Section 3 : Conditions relatives au logement"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aqV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_345,18,num_345,67,[0,caml_string_of_jsbytes("Article L822-8"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aqz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_359,18,num_359,61,[0,caml_string_of_jsbytes("Article L822-9"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aqt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_146,14,num_146,43,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aqj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_922,14,num_922,37,[0,caml_string_of_jsbytes(str_Article_R822_22),[0,caml_string_of_jsbytes(str_Sous_section_4_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aqi=caml_string_of_jsbytes("3000000"),aqe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_106,14,num_106,41,[0,caml_string_of_jsbytes(str_Article_R822_1),[0,caml_string_of_jsbytes(str_Section_1_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aqd=caml_string_of_jsbytes(str_0_1),ap$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_105,14,num_105,42,[0,caml_string_of_jsbytes(str_Article_R822_1),[0,caml_string_of_jsbytes(str_Section_1_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ap_=caml_string_of_jsbytes(str_0_1),ap6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_301,11,num_301,48,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_292,11,num_292,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_292,11,num_292,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_292,11,num_292,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap4=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_pr\xc3\xaat"),0]],ap7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_301,11,num_301,48,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_301,11,num_301,48,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap8=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_peuplement_logement_l822_10"),0]],aqa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_311,11,num_311,39,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_311,11,num_311,39,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqb=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("seuil_l822_3_parts_propri\xc3\xa9t\xc3\xa9"),0]],aqf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_312,11,num_312,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_312,11,num_312,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqg=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("seuil_l822_3_parts_usufruit"),0]],aqk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_313,11,num_313,34,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_313,11,num_313,34,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aql=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("seuil_l822_5_patrimoine"),0]],aqo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_310,11,num_310,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_310,11,num_310,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqp=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("usufruit_ou_propri\xc3\xa9t\xc3\xa9_famille"),0]],aqu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqv=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_non_ouverture_l822_9_decence_logement"),0]],aqA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqB=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_non_ouverture_l822_8"),0]],aqX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqY=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_surface"),0]],aq4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq5=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_r\xc3\xa9sidence_principale"),0]],aq8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_319,3,num_319,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq9=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("ouverture_droits_retraite.date_naissance_assur\xc3\xa9"),0]],aq6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1001,10,num_1001,31,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq_=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ouverture_droits_abr),[0,caml_string_of_jsbytes(str_OuvertureDroitsR_abr),0]]],aq$=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ouverture_droits_abr),[0,caml_string_of_jsbytes(str_OuvertureDroitsR_abr),0]]],arc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_309,11,num_309,37,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ara=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_309,11,num_309,37,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ard=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("patrimoine_total_demandeur"),0]],ari=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],are=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arj=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_nationalit\xc3\xa9"),0]],arA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ark=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arB=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("plafond_individuel_l815_9_s\xc3\xa9cu"),0]],arI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arJ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_location_tiers"),0]],arU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arV=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_mode_occupation"),0]],ar0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar1=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_ouverture_l822_10_peuplement_logement"),0]],ar4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_316,11,num_316,29,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_316,11,num_316,29,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar5=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("\xc3\xa2ge_l161_17_2_s\xc3\xa9cu"),0]],ash=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asi=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("patrimoine_pris_en_compte"),0]],asp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asq=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_lo_abr),0]],ast=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_315,11,num_315,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_315,11,num_315,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asu=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("\xc3\xa2ge_l351_8_1_s\xc3\xa9cu"),0]],asz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asA=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ligibilit),0]],asI=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],asX=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),0]],as4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_305,11,num_305,46,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_305,11,num_305,46,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as5=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("personnes_\xc3\xa0_charge_prises_en_compte"),0]],as_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_322,10,num_322,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_322,10,num_322,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as$=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],atc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_321,10,num_321,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ata=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_321,10,num_321,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atd=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_nombre_personnes_abr),0]],atf=caml_string_of_jsbytes(str_0_2),ate=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_182,13,num_182,48,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],atj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_182,13,num_182,48,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ath=caml_string_of_jsbytes(str_0_2),atg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_181,13,num_181,49,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ati=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_181,13,num_181,49,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],apX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3370,14,num_3370,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apS=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],apT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],apU=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],apV=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],apW=caml_string_of_jsbytes(str_0$1),apY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_716,10,num_716,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_716,10,num_716,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3277,14,num_3277,33,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apM=caml_string_of_jsbytes(str_0$1),apN=caml_string_of_jsbytes(str_0$1),apI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3350,14,num_3350,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apx=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],apy=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],apz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],apA=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],apB=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],apC=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],apD=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],apE=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],apF=caml_string_of_jsbytes(str_50),apG=caml_string_of_jsbytes(str_0$1),apH=caml_string_of_jsbytes(str_0$1),apJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_715,10,num_715,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_715,10,num_715,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3405,14,num_3405,49,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apr=caml_string_of_jsbytes(str_0_95),aps=caml_string_of_jsbytes(str_0_95),apn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3297,14,num_3297,33,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3336,14,num_3336,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ao$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],apa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],apb=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],apc=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],apd=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],ape=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),0]],apf=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],apg=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),0]],aph=caml_string_of_jsbytes(str_0$1),api=caml_string_of_jsbytes(str_0$1),apk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_714,10,num_714,20,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_714,10,num_714,20,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3402,14,num_3402,49,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ao4=caml_string_of_jsbytes(str_100),ao5=caml_string_of_jsbytes(str_100),ao6=caml_string_of_jsbytes(str_0_005),aoZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3618,5,3630,77,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoX=caml_string_of_jsbytes(str_12),aoY=caml_string_of_jsbytes(str_0),ao0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3673,5,num_3673,75,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_444,14,num_444,42,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],aoO=caml_string_of_jsbytes(str_0_75),aoQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2584,14,num_2584,42,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aoM=caml_string_of_jsbytes(str_0_75),aoR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3745,14,num_3745,55,[0,caml_string_of_jsbytes(str_Article_D832_17),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aoE=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),0]],aoF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aoG=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),0]],aoH=caml_string_of_jsbytes(str_0$1),aoJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_691,11,num_691,52,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_691,11,num_691,52,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3386,14,num_3386,49,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoy=caml_string_of_jsbytes(str_0_95),aos=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3681,14,num_3681,70,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3678,14,num_3678,69,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aok=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3679,14,num_3679,75,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aof=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3558,5,num_3558,44,[0,caml_string_of_jsbytes(str_Article_D832_14),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],an_=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],an$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aoa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],aob=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],aoc=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],aod=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aoe=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],aog=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_682,10,num_682,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],an8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3538,14,num_3538,42,[0,caml_string_of_jsbytes(str_Article_D832_14),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],an5=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],an6=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],an7=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],anZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3723,5,num_3723,41,[0,caml_string_of_jsbytes(str_Article_D832_17),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_690,11,num_690,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3734,14,num_3734,44,[0,caml_string_of_jsbytes(str_Article_D832_17),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_690,11,num_690,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_690,11,num_690,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3471,14,num_3471,36,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],anP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_610,5,num_613,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],anx=caml_string_of_jsbytes(str_0$1),any=caml_string_of_jsbytes(str_208500),anz=caml_string_of_jsbytes(str_251500),anA=caml_string_of_jsbytes(str_1$0),anB=caml_string_of_jsbytes(str_43000),anC=caml_string_of_jsbytes(str_294500),anD=caml_string_of_jsbytes(str_0$1),anE=caml_string_of_jsbytes(str_186000),anF=caml_string_of_jsbytes(str_223900),anG=caml_string_of_jsbytes(str_1$0),anH=caml_string_of_jsbytes(str_37900),anI=caml_string_of_jsbytes(str_261800),anJ=caml_string_of_jsbytes(str_0$1),anK=caml_string_of_jsbytes(str_173600),anL=caml_string_of_jsbytes(str_208200),anM=caml_string_of_jsbytes(str_1$0),anN=caml_string_of_jsbytes("35600"),anO=caml_string_of_jsbytes(str_242800),anQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),654,5,num_657,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],and=caml_string_of_jsbytes(str_0$1),ane=caml_string_of_jsbytes(str_167800),anf=caml_string_of_jsbytes(str_202500),ang=caml_string_of_jsbytes(str_1$0),anh=caml_string_of_jsbytes("37400"),ani=caml_string_of_jsbytes(str_237200),anj=caml_string_of_jsbytes(str_0$1),ank=caml_string_of_jsbytes("146900"),anl=caml_string_of_jsbytes(str_180100),anm=caml_string_of_jsbytes(str_1$0),ann=caml_string_of_jsbytes(str_30500),ano=caml_string_of_jsbytes("210600"),anp=caml_string_of_jsbytes(str_0$1),anq=caml_string_of_jsbytes(str_139700),anr=caml_string_of_jsbytes("167600"),ans=caml_string_of_jsbytes(str_1$0),ant=caml_string_of_jsbytes("27900"),anu=caml_string_of_jsbytes("195500"),anw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_699,5,num_701,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],amV=caml_string_of_jsbytes(str_0$1),amW=caml_string_of_jsbytes(str_184000),amX=caml_string_of_jsbytes("220000"),amY=caml_string_of_jsbytes(str_1$0),amZ=caml_string_of_jsbytes("38000"),am0=caml_string_of_jsbytes("260000"),am1=caml_string_of_jsbytes(str_0$1),am2=caml_string_of_jsbytes("164200"),am3=caml_string_of_jsbytes(str_197700),am4=caml_string_of_jsbytes(str_1$0),am5=caml_string_of_jsbytes(str_33500),am6=caml_string_of_jsbytes("231200"),am7=caml_string_of_jsbytes(str_0$1),am8=caml_string_of_jsbytes("153200"),am9=caml_string_of_jsbytes("183700"),am_=caml_string_of_jsbytes(str_1$0),am$=caml_string_of_jsbytes(str_30500),ana=caml_string_of_jsbytes("214200"),anc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],amT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),742,5,num_744,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],amB=caml_string_of_jsbytes(str_0$1),amC=caml_string_of_jsbytes("148100"),amD=caml_string_of_jsbytes("178700"),amE=caml_string_of_jsbytes(str_1$0),amF=caml_string_of_jsbytes("30600"),amG=caml_string_of_jsbytes("209300"),amH=caml_string_of_jsbytes(str_0$1),amI=caml_string_of_jsbytes(str_132000),amJ=caml_string_of_jsbytes("158900"),amK=caml_string_of_jsbytes(str_1$0),amL=caml_string_of_jsbytes("26900"),amM=caml_string_of_jsbytes(str_185800),amN=caml_string_of_jsbytes(str_0$1),amO=caml_string_of_jsbytes("123300"),amP=caml_string_of_jsbytes("147900"),amQ=caml_string_of_jsbytes(str_1$0),amR=caml_string_of_jsbytes("24600"),amS=caml_string_of_jsbytes(str_172500),amU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],amz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),793,5,796,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],amh=caml_string_of_jsbytes(str_0$1),ami=caml_string_of_jsbytes(str_208500),amj=caml_string_of_jsbytes(str_251500),amk=caml_string_of_jsbytes(str_1$0),aml=caml_string_of_jsbytes(str_43000),amm=caml_string_of_jsbytes(str_294500),amn=caml_string_of_jsbytes(str_0$1),amo=caml_string_of_jsbytes(str_186000),amp=caml_string_of_jsbytes(str_223900),amq=caml_string_of_jsbytes(str_1$0),amr=caml_string_of_jsbytes(str_37900),ams=caml_string_of_jsbytes(str_261800),amt=caml_string_of_jsbytes(str_0$1),amu=caml_string_of_jsbytes(str_173600),amv=caml_string_of_jsbytes(str_208200),amw=caml_string_of_jsbytes(str_1$0),amx=caml_string_of_jsbytes(str_34600),amy=caml_string_of_jsbytes(str_242800),amA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],amf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_837,5,num_843,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],alZ=caml_string_of_jsbytes(str_0$1),al0=caml_string_of_jsbytes(str_167800),al1=caml_string_of_jsbytes(str_202500),al2=caml_string_of_jsbytes(str_1$0),al3=caml_string_of_jsbytes("34700"),al4=caml_string_of_jsbytes(str_237200),al5=caml_string_of_jsbytes(str_0$1),al6=caml_string_of_jsbytes("149600"),al7=caml_string_of_jsbytes(str_223900),al8=caml_string_of_jsbytes(str_1$0),al9=caml_string_of_jsbytes(str_37900),al_=caml_string_of_jsbytes(str_261800),al$=caml_string_of_jsbytes(str_0$1),ama=caml_string_of_jsbytes(str_139700),amb=caml_string_of_jsbytes(str_208200),amc=caml_string_of_jsbytes(str_1$0),amd=caml_string_of_jsbytes(str_34600),ame=caml_string_of_jsbytes(str_242800),amg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),884,5,num_890,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],alR=caml_string_of_jsbytes(str_0$1),alS=caml_string_of_jsbytes("86900"),alT=caml_string_of_jsbytes("97100"),alU=caml_string_of_jsbytes(str_1$0),alV=caml_string_of_jsbytes("10200"),alW=caml_string_of_jsbytes("107300"),alY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_916,5,num_919,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],alx=caml_string_of_jsbytes(str_0$1),aly=caml_string_of_jsbytes("198100"),alz=caml_string_of_jsbytes("239000"),alA=caml_string_of_jsbytes(str_1$0),alB=caml_string_of_jsbytes("40900"),alC=caml_string_of_jsbytes("279900"),alD=caml_string_of_jsbytes(str_0$1),alE=caml_string_of_jsbytes("176800"),alF=caml_string_of_jsbytes("212800"),alG=caml_string_of_jsbytes(str_1$0),alH=caml_string_of_jsbytes("36000"),alI=caml_string_of_jsbytes("248800"),alJ=caml_string_of_jsbytes(str_0$1),alK=caml_string_of_jsbytes("165000"),alL=caml_string_of_jsbytes("197900"),alM=caml_string_of_jsbytes(str_1$0),alN=caml_string_of_jsbytes("32900"),alO=caml_string_of_jsbytes("230800"),alQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),960,5,num_963,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ald=caml_string_of_jsbytes(str_0$1),ale=caml_string_of_jsbytes("159500"),alf=caml_string_of_jsbytes(str_192500),alg=caml_string_of_jsbytes(str_1$0),alh=caml_string_of_jsbytes("33000"),ali=caml_string_of_jsbytes(str_225500),alj=caml_string_of_jsbytes(str_0$1),alk=caml_string_of_jsbytes("142200"),all=caml_string_of_jsbytes("171200"),alm=caml_string_of_jsbytes(str_1$0),aln=caml_string_of_jsbytes("29000"),alo=caml_string_of_jsbytes("200200"),alp=caml_string_of_jsbytes(str_0$1),alq=caml_string_of_jsbytes("132800"),alr=caml_string_of_jsbytes("159300"),als=caml_string_of_jsbytes(str_1$0),alt=caml_string_of_jsbytes("26500"),alu=caml_string_of_jsbytes(str_185800),alw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1005,5,1008,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],akV=caml_string_of_jsbytes(str_0$1),akW=caml_string_of_jsbytes("200100"),akX=caml_string_of_jsbytes("141400"),akY=caml_string_of_jsbytes(str_1$0),akZ=caml_string_of_jsbytes("41300"),ak0=caml_string_of_jsbytes("282700"),ak1=caml_string_of_jsbytes(str_0$1),ak2=caml_string_of_jsbytes("178600"),ak3=caml_string_of_jsbytes("215000"),ak4=caml_string_of_jsbytes(str_1$0),ak5=caml_string_of_jsbytes("36400"),ak6=caml_string_of_jsbytes("251400"),ak7=caml_string_of_jsbytes(str_0$1),ak8=caml_string_of_jsbytes("166700"),ak9=caml_string_of_jsbytes(str_199900),ak_=caml_string_of_jsbytes(str_1$0),ak$=caml_string_of_jsbytes("33200"),ala=caml_string_of_jsbytes("233100"),alc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],akT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1049,5,1052,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],akB=caml_string_of_jsbytes(str_0$1),akC=caml_string_of_jsbytes("161100"),akD=caml_string_of_jsbytes("194400"),akE=caml_string_of_jsbytes(str_1$0),akF=caml_string_of_jsbytes("33300"),akG=caml_string_of_jsbytes("227700"),akH=caml_string_of_jsbytes(str_0$1),akI=caml_string_of_jsbytes("143600"),akJ=caml_string_of_jsbytes("172900"),akK=caml_string_of_jsbytes(str_1$0),akL=caml_string_of_jsbytes("29300"),akM=caml_string_of_jsbytes("202200"),akN=caml_string_of_jsbytes(str_0$1),akO=caml_string_of_jsbytes("134100"),akP=caml_string_of_jsbytes("160900"),akQ=caml_string_of_jsbytes(str_1$0),akR=caml_string_of_jsbytes("26800"),akS=caml_string_of_jsbytes("187700"),akU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],akz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1096,5,1099,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],akh=caml_string_of_jsbytes(str_0$1),aki=caml_string_of_jsbytes(str_202500),akj=caml_string_of_jsbytes("244300"),akk=caml_string_of_jsbytes(str_1$0),akl=caml_string_of_jsbytes("41800"),akm=caml_string_of_jsbytes("286100"),akn=caml_string_of_jsbytes(str_0$1),ako=caml_string_of_jsbytes("180700"),akp=caml_string_of_jsbytes("217500"),akq=caml_string_of_jsbytes(str_1$0),akr=caml_string_of_jsbytes("36800"),aks=caml_string_of_jsbytes("254300"),akt=caml_string_of_jsbytes(str_0$1),aku=caml_string_of_jsbytes("168700"),akv=caml_string_of_jsbytes("202300"),akw=caml_string_of_jsbytes(str_1$0),akx=caml_string_of_jsbytes("33600"),aky=caml_string_of_jsbytes("235900"),akA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],akf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1139,5,1142,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ajZ=caml_string_of_jsbytes(str_0$1),aj0=caml_string_of_jsbytes("30871"),aj1=caml_string_of_jsbytes("37243"),aj2=caml_string_of_jsbytes(str_1$0),aj3=caml_string_of_jsbytes("6372"),aj4=caml_string_of_jsbytes("43615"),aj5=caml_string_of_jsbytes(str_0$1),aj6=caml_string_of_jsbytes("27548"),aj7=caml_string_of_jsbytes("33148"),aj8=caml_string_of_jsbytes(str_1$0),aj9=caml_string_of_jsbytes("5610"),aj_=caml_string_of_jsbytes("38768"),aj$=caml_string_of_jsbytes(str_0$1),aka=caml_string_of_jsbytes("25718"),akb=caml_string_of_jsbytes("30840"),akc=caml_string_of_jsbytes(str_1$0),akd=caml_string_of_jsbytes("5122"),ake=caml_string_of_jsbytes("35962"),akg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ajX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1185,5,1188,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ajF=caml_string_of_jsbytes(str_0$1),ajG=caml_string_of_jsbytes(str_163000),ajH=caml_string_of_jsbytes("196700"),ajI=caml_string_of_jsbytes(str_1$0),ajJ=caml_string_of_jsbytes("33700"),ajK=caml_string_of_jsbytes("230400"),ajL=caml_string_of_jsbytes(str_0$1),ajM=caml_string_of_jsbytes("145300"),ajN=caml_string_of_jsbytes("175000"),ajO=caml_string_of_jsbytes(str_1$0),ajP=caml_string_of_jsbytes("29700"),ajQ=caml_string_of_jsbytes(str_204700),ajR=caml_string_of_jsbytes(str_0$1),ajS=caml_string_of_jsbytes("135700"),ajT=caml_string_of_jsbytes("162800"),ajU=caml_string_of_jsbytes(str_1$0),ajV=caml_string_of_jsbytes("27100"),ajW=caml_string_of_jsbytes("189900"),ajY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ajD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1228,5,1231,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ajl=caml_string_of_jsbytes(str_0$1),ajm=caml_string_of_jsbytes("24849"),ajn=caml_string_of_jsbytes("29987"),ajo=caml_string_of_jsbytes(str_1$0),ajp=caml_string_of_jsbytes("5138"),ajq=caml_string_of_jsbytes("35125"),ajr=caml_string_of_jsbytes(str_0$1),ajs=caml_string_of_jsbytes("22151"),ajt=caml_string_of_jsbytes("26679"),aju=caml_string_of_jsbytes(str_1$0),ajv=caml_string_of_jsbytes("4528"),ajw=caml_string_of_jsbytes("31207"),ajx=caml_string_of_jsbytes(str_0$1),ajy=caml_string_of_jsbytes("20687"),ajz=caml_string_of_jsbytes("24818"),ajA=caml_string_of_jsbytes(str_1$0),ajB=caml_string_of_jsbytes("4131"),ajC=caml_string_of_jsbytes("28949"),ajE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ajj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1273,5,1276,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ai3=caml_string_of_jsbytes(str_0$1),ai4=caml_string_of_jsbytes("31241"),ai5=caml_string_of_jsbytes("37689"),ai6=caml_string_of_jsbytes(str_1$0),ai7=caml_string_of_jsbytes("6448"),ai8=caml_string_of_jsbytes("44137"),ai9=caml_string_of_jsbytes(str_0$1),ai_=caml_string_of_jsbytes("27879"),ai$=caml_string_of_jsbytes("33556"),aja=caml_string_of_jsbytes(str_1$0),ajb=caml_string_of_jsbytes("5677"),ajc=caml_string_of_jsbytes("39233"),ajd=caml_string_of_jsbytes(str_0$1),aje=caml_string_of_jsbytes("26027"),ajf=caml_string_of_jsbytes("31210"),ajg=caml_string_of_jsbytes(str_1$0),ajh=caml_string_of_jsbytes("5183"),aji=caml_string_of_jsbytes("36393"),ajk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ai1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1317,5,1320,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aiJ=caml_string_of_jsbytes(str_0$1),aiK=caml_string_of_jsbytes("25147"),aiL=caml_string_of_jsbytes("30347"),aiM=caml_string_of_jsbytes(str_1$0),aiN=caml_string_of_jsbytes("5200"),aiO=caml_string_of_jsbytes("35547"),aiP=caml_string_of_jsbytes(str_0$1),aiQ=caml_string_of_jsbytes("22417"),aiR=caml_string_of_jsbytes("26999"),aiS=caml_string_of_jsbytes(str_1$0),aiT=caml_string_of_jsbytes("4582"),aiU=caml_string_of_jsbytes("31581"),aiV=caml_string_of_jsbytes(str_0$1),aiW=caml_string_of_jsbytes("20935"),aiX=caml_string_of_jsbytes(str_25116),aiY=caml_string_of_jsbytes(str_1$0),aiZ=caml_string_of_jsbytes("4181"),ai0=caml_string_of_jsbytes("29297"),ai2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aiH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1362,5,1365,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aip=caml_string_of_jsbytes(str_0$1),aiq=caml_string_of_jsbytes("31616"),air=caml_string_of_jsbytes("38141"),ais=caml_string_of_jsbytes(str_1$0),ait=caml_string_of_jsbytes("6525"),aiu=caml_string_of_jsbytes("44666"),aiv=caml_string_of_jsbytes(str_0$1),aiw=caml_string_of_jsbytes("28214"),aix=caml_string_of_jsbytes("33959"),aiy=caml_string_of_jsbytes(str_1$0),aiz=caml_string_of_jsbytes("5745"),aiA=caml_string_of_jsbytes("39704"),aiB=caml_string_of_jsbytes(str_0$1),aiC=caml_string_of_jsbytes("26339"),aiD=caml_string_of_jsbytes("31584"),aiE=caml_string_of_jsbytes(str_1$0),aiF=caml_string_of_jsbytes("5245"),aiG=caml_string_of_jsbytes("36829"),aiI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ain=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1406,5,1409,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ah7=caml_string_of_jsbytes(str_0$1),ah8=caml_string_of_jsbytes("25449"),ah9=caml_string_of_jsbytes("30711"),ah_=caml_string_of_jsbytes(str_1$0),ah$=caml_string_of_jsbytes("5262"),aia=caml_string_of_jsbytes("35973"),aib=caml_string_of_jsbytes(str_0$1),aic=caml_string_of_jsbytes("22686"),aid=caml_string_of_jsbytes("27323"),aie=caml_string_of_jsbytes(str_1$0),aif=caml_string_of_jsbytes("4637"),aig=caml_string_of_jsbytes("31960"),aih=caml_string_of_jsbytes(str_0$1),aii=caml_string_of_jsbytes("21186"),aij=caml_string_of_jsbytes("25417"),aik=caml_string_of_jsbytes(str_1$0),ail=caml_string_of_jsbytes("4231"),aim=caml_string_of_jsbytes("26948"),aio=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ah5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1451,5,1454,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ahN=caml_string_of_jsbytes(str_0$1),ahO=caml_string_of_jsbytes("32185"),ahP=caml_string_of_jsbytes("38827"),ahQ=caml_string_of_jsbytes(str_1$0),ahR=caml_string_of_jsbytes("6642"),ahS=caml_string_of_jsbytes("45469"),ahT=caml_string_of_jsbytes(str_0$1),ahU=caml_string_of_jsbytes("28722"),ahV=caml_string_of_jsbytes(str_34570),ahW=caml_string_of_jsbytes(str_1$0),ahX=caml_string_of_jsbytes("5848"),ahY=caml_string_of_jsbytes("40418"),ahZ=caml_string_of_jsbytes(str_0$1),ah0=caml_string_of_jsbytes("26813"),ah1=caml_string_of_jsbytes("32152"),ah2=caml_string_of_jsbytes(str_1$0),ah3=caml_string_of_jsbytes("5339"),ah4=caml_string_of_jsbytes("37491"),ah6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ahL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1495,5,1498,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aht=caml_string_of_jsbytes(str_0$1),ahu=caml_string_of_jsbytes("25907"),ahv=caml_string_of_jsbytes(str_31264),ahw=caml_string_of_jsbytes(str_1$0),ahx=caml_string_of_jsbytes("5357"),ahy=caml_string_of_jsbytes("36621"),ahz=caml_string_of_jsbytes(str_0$1),ahA=caml_string_of_jsbytes("23094"),ahB=caml_string_of_jsbytes("27814"),ahC=caml_string_of_jsbytes(str_1$0),ahD=caml_string_of_jsbytes("4720"),ahE=caml_string_of_jsbytes("32534"),ahF=caml_string_of_jsbytes(str_0$1),ahG=caml_string_of_jsbytes("21567"),ahH=caml_string_of_jsbytes("25874"),ahI=caml_string_of_jsbytes(str_1$0),ahJ=caml_string_of_jsbytes("4307"),ahK=caml_string_of_jsbytes("30881"),ahM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ahr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1540,5,1543,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ag$=caml_string_of_jsbytes(str_0$1),aha=caml_string_of_jsbytes(str_33026),ahb=caml_string_of_jsbytes("39914"),ahc=caml_string_of_jsbytes(str_1$0),ahd=caml_string_of_jsbytes("6828"),ahe=caml_string_of_jsbytes("46742"),ahf=caml_string_of_jsbytes(str_0$1),ahg=caml_string_of_jsbytes("29526"),ahh=caml_string_of_jsbytes("35538"),ahi=caml_string_of_jsbytes(str_1$0),ahj=caml_string_of_jsbytes("6012"),ahk=caml_string_of_jsbytes("41550"),ahl=caml_string_of_jsbytes(str_0$1),ahm=caml_string_of_jsbytes("27564"),ahn=caml_string_of_jsbytes("33052"),aho=caml_string_of_jsbytes(str_1$0),ahp=caml_string_of_jsbytes("5488"),ahq=caml_string_of_jsbytes("38541"),ahs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ag9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1584,5,1587,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],agR=caml_string_of_jsbytes(str_0$1),agS=caml_string_of_jsbytes("26632"),agT=caml_string_of_jsbytes("32139"),agU=caml_string_of_jsbytes(str_1$0),agV=caml_string_of_jsbytes("5507"),agW=caml_string_of_jsbytes("37646"),agX=caml_string_of_jsbytes(str_0$1),agY=caml_string_of_jsbytes("23741"),agZ=caml_string_of_jsbytes("28593"),ag0=caml_string_of_jsbytes(str_1$0),ag1=caml_string_of_jsbytes("4852"),ag2=caml_string_of_jsbytes("33445"),ag3=caml_string_of_jsbytes(str_0$1),ag4=caml_string_of_jsbytes("22171"),ag5=caml_string_of_jsbytes("36598"),ag6=caml_string_of_jsbytes(str_1$0),ag7=caml_string_of_jsbytes("4428"),ag8=caml_string_of_jsbytes("31026"),ag_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],agP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1629,5,1632,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],agx=caml_string_of_jsbytes(str_0$1),agy=caml_string_of_jsbytes("33999"),agz=caml_string_of_jsbytes("41016"),agA=caml_string_of_jsbytes(str_1$0),agB=caml_string_of_jsbytes("7016"),agC=caml_string_of_jsbytes("48032"),agD=caml_string_of_jsbytes(str_0$1),agE=caml_string_of_jsbytes("30341"),agF=caml_string_of_jsbytes("36519"),agG=caml_string_of_jsbytes(str_1$0),agH=caml_string_of_jsbytes("6178"),agI=caml_string_of_jsbytes("42697"),agJ=caml_string_of_jsbytes(str_0$1),agK=caml_string_of_jsbytes("28325"),agL=caml_string_of_jsbytes("33964"),agM=caml_string_of_jsbytes(str_1$0),agN=caml_string_of_jsbytes("5639"),agO=caml_string_of_jsbytes("39605"),agQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],agv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1673,5,1676,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],agd=caml_string_of_jsbytes(str_0$1),age=caml_string_of_jsbytes("27367"),agf=caml_string_of_jsbytes(str_33026),agg=caml_string_of_jsbytes(str_1$0),agh=caml_string_of_jsbytes("5659"),agi=caml_string_of_jsbytes("38685"),agj=caml_string_of_jsbytes(str_0$1),agk=caml_string_of_jsbytes("24396"),agl=caml_string_of_jsbytes("29382"),agm=caml_string_of_jsbytes(str_1$0),agn=caml_string_of_jsbytes(str_4986),ago=caml_string_of_jsbytes("34368"),agp=caml_string_of_jsbytes(str_0$1),agq=caml_string_of_jsbytes("22783"),agr=caml_string_of_jsbytes("27332"),ags=caml_string_of_jsbytes(str_1$0),agt=caml_string_of_jsbytes("4550"),agu=caml_string_of_jsbytes("31882"),agw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],agb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1718,5,1721,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],afV=caml_string_of_jsbytes(str_0$1),afW=caml_string_of_jsbytes("35002"),afX=caml_string_of_jsbytes("42226"),afY=caml_string_of_jsbytes(str_1$0),afZ=caml_string_of_jsbytes("7223"),af0=caml_string_of_jsbytes("49449"),af1=caml_string_of_jsbytes(str_0$1),af2=caml_string_of_jsbytes("31236"),af3=caml_string_of_jsbytes("37596"),af4=caml_string_of_jsbytes(str_1$0),af5=caml_string_of_jsbytes("6360"),af6=caml_string_of_jsbytes("43957"),af7=caml_string_of_jsbytes(str_0$1),af8=caml_string_of_jsbytes("29161"),af9=caml_string_of_jsbytes("34966"),af_=caml_string_of_jsbytes(str_1$0),af$=caml_string_of_jsbytes("5805"),aga=caml_string_of_jsbytes("40773"),agc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],afT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1762,5,1765,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],afB=caml_string_of_jsbytes(str_0$1),afC=caml_string_of_jsbytes("28174"),afD=caml_string_of_jsbytes("34000"),afE=caml_string_of_jsbytes(str_1$0),afF=caml_string_of_jsbytes("5826"),afG=caml_string_of_jsbytes("39826"),afH=caml_string_of_jsbytes(str_0$1),afI=caml_string_of_jsbytes(str_25116),afJ=caml_string_of_jsbytes("30249"),afK=caml_string_of_jsbytes(str_1$0),afL=caml_string_of_jsbytes("5133"),afM=caml_string_of_jsbytes("35382"),afN=caml_string_of_jsbytes(str_0$1),afO=caml_string_of_jsbytes("23455"),afP=caml_string_of_jsbytes("28138"),afQ=caml_string_of_jsbytes(str_1$0),afR=caml_string_of_jsbytes("4684"),afS=caml_string_of_jsbytes("32823"),afU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],afz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1807,5,1810,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],afh=caml_string_of_jsbytes(str_0$1),afi=caml_string_of_jsbytes("35114"),afj=caml_string_of_jsbytes("42361"),afk=caml_string_of_jsbytes(str_1$0),afl=caml_string_of_jsbytes("7246"),afm=caml_string_of_jsbytes("49607"),afn=caml_string_of_jsbytes(str_0$1),afo=caml_string_of_jsbytes("31336"),afp=caml_string_of_jsbytes("37716"),afq=caml_string_of_jsbytes(str_1$0),afr=caml_string_of_jsbytes("6380"),afs=caml_string_of_jsbytes("44098"),aft=caml_string_of_jsbytes(str_0$1),afu=caml_string_of_jsbytes("29254"),afv=caml_string_of_jsbytes("35078"),afw=caml_string_of_jsbytes(str_1$0),afx=caml_string_of_jsbytes("5824"),afy=caml_string_of_jsbytes("40903"),afA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aff=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1851,5,1854,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aeZ=caml_string_of_jsbytes(str_0$1),ae0=caml_string_of_jsbytes("28264"),ae1=caml_string_of_jsbytes("34109"),ae2=caml_string_of_jsbytes(str_1$0),ae3=caml_string_of_jsbytes("5845"),ae4=caml_string_of_jsbytes("39953"),ae5=caml_string_of_jsbytes(str_0$1),ae6=caml_string_of_jsbytes("25196"),ae7=caml_string_of_jsbytes("30346"),ae8=caml_string_of_jsbytes(str_1$0),ae9=caml_string_of_jsbytes("5149"),ae_=caml_string_of_jsbytes("35495"),ae$=caml_string_of_jsbytes(str_0$1),afa=caml_string_of_jsbytes("23530"),afb=caml_string_of_jsbytes("28228"),afc=caml_string_of_jsbytes(str_1$0),afd=caml_string_of_jsbytes("4699"),afe=caml_string_of_jsbytes("32928"),afg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aeX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1896,5,1899,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aeF=caml_string_of_jsbytes(str_0$1),aeG=caml_string_of_jsbytes("35500"),aeH=caml_string_of_jsbytes("42827"),aeI=caml_string_of_jsbytes(str_1$0),aeJ=caml_string_of_jsbytes("7326"),aeK=caml_string_of_jsbytes("50153"),aeL=caml_string_of_jsbytes(str_0$1),aeM=caml_string_of_jsbytes("31681"),aeN=caml_string_of_jsbytes("38131"),aeO=caml_string_of_jsbytes(str_1$0),aeP=caml_string_of_jsbytes("6450"),aeQ=caml_string_of_jsbytes("44583"),aeR=caml_string_of_jsbytes(str_0$1),aeS=caml_string_of_jsbytes("29576"),aeT=caml_string_of_jsbytes("35464"),aeU=caml_string_of_jsbytes(str_1$0),aeV=caml_string_of_jsbytes("5888"),aeW=caml_string_of_jsbytes("41353"),aeY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aeD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1940,5,1943,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ael=caml_string_of_jsbytes(str_0$1),aem=caml_string_of_jsbytes("28575"),aen=caml_string_of_jsbytes("34484"),aeo=caml_string_of_jsbytes(str_1$0),aep=caml_string_of_jsbytes("5909"),aeq=caml_string_of_jsbytes("40392"),aer=caml_string_of_jsbytes(str_0$1),aes=caml_string_of_jsbytes("25473"),aet=caml_string_of_jsbytes("30680"),aeu=caml_string_of_jsbytes(str_1$0),aev=caml_string_of_jsbytes("5206"),aew=caml_string_of_jsbytes("35885"),aex=caml_string_of_jsbytes(str_0$1),aey=caml_string_of_jsbytes("23789"),aez=caml_string_of_jsbytes("28539"),aeA=caml_string_of_jsbytes(str_1$0),aeB=caml_string_of_jsbytes("4751"),aeC=caml_string_of_jsbytes("33290"),aeE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aej=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1985,5,1988,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ad3=caml_string_of_jsbytes(str_0$1),ad4=caml_string_of_jsbytes("35855"),ad5=caml_string_of_jsbytes("43255"),ad6=caml_string_of_jsbytes(str_1$0),ad7=caml_string_of_jsbytes("7399"),ad8=caml_string_of_jsbytes("50655"),ad9=caml_string_of_jsbytes(str_0$1),ad_=caml_string_of_jsbytes("31998"),ad$=caml_string_of_jsbytes("38512"),aea=caml_string_of_jsbytes(str_1$0),aeb=caml_string_of_jsbytes("6515"),aec=caml_string_of_jsbytes("45029"),aed=caml_string_of_jsbytes(str_0$1),aee=caml_string_of_jsbytes("29872"),aef=caml_string_of_jsbytes("35819"),aeg=caml_string_of_jsbytes(str_1$0),aeh=caml_string_of_jsbytes("5947"),aei=caml_string_of_jsbytes("41767"),aek=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ad1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2030,5,2033,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],adJ=caml_string_of_jsbytes(str_0$1),adK=caml_string_of_jsbytes("28861"),adL=caml_string_of_jsbytes(str_34829),adM=caml_string_of_jsbytes(str_1$0),adN=caml_string_of_jsbytes("5968"),adO=caml_string_of_jsbytes("40796"),adP=caml_string_of_jsbytes(str_0$1),adQ=caml_string_of_jsbytes("25728"),adR=caml_string_of_jsbytes("30987"),adS=caml_string_of_jsbytes(str_1$0),adT=caml_string_of_jsbytes("5258"),adU=caml_string_of_jsbytes("36244"),adV=caml_string_of_jsbytes(str_0$1),adW=caml_string_of_jsbytes("24027"),adX=caml_string_of_jsbytes("28824"),adY=caml_string_of_jsbytes(str_1$0),adZ=caml_string_of_jsbytes("4799"),ad0=caml_string_of_jsbytes(str_33623),ad2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],adH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2075,5,2078,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],adp=caml_string_of_jsbytes(str_0$1),adq=caml_string_of_jsbytes("36626"),adr=caml_string_of_jsbytes("44185"),ads=caml_string_of_jsbytes(str_1$0),adt=caml_string_of_jsbytes("7558"),adu=caml_string_of_jsbytes("51744"),adv=caml_string_of_jsbytes(str_0$1),adw=caml_string_of_jsbytes("32686"),adx=caml_string_of_jsbytes(str_39340),ady=caml_string_of_jsbytes(str_1$0),adz=caml_string_of_jsbytes("6655"),adA=caml_string_of_jsbytes("45997"),adB=caml_string_of_jsbytes(str_0$1),adC=caml_string_of_jsbytes("30514"),adD=caml_string_of_jsbytes("36589"),adE=caml_string_of_jsbytes(str_1$0),adF=caml_string_of_jsbytes("6075"),adG=caml_string_of_jsbytes("42665"),adI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],adn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2119,5,2122,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ac7=caml_string_of_jsbytes(str_0$1),ac8=caml_string_of_jsbytes("29482"),ac9=caml_string_of_jsbytes("35578"),ac_=caml_string_of_jsbytes(str_1$0),ac$=caml_string_of_jsbytes("6096"),ada=caml_string_of_jsbytes("41673"),adb=caml_string_of_jsbytes(str_0$1),adc=caml_string_of_jsbytes("26281"),add=caml_string_of_jsbytes("31653"),ade=caml_string_of_jsbytes(str_1$0),adf=caml_string_of_jsbytes("5371"),adg=caml_string_of_jsbytes("37023"),adh=caml_string_of_jsbytes(str_0$1),adi=caml_string_of_jsbytes("24544"),adj=caml_string_of_jsbytes("29444"),adk=caml_string_of_jsbytes(str_1$0),adl=caml_string_of_jsbytes("4902"),adm=caml_string_of_jsbytes("34346"),ado=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ac5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2164,5,num_2167,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],acN=caml_string_of_jsbytes(str_0$1),acO=caml_string_of_jsbytes("36835"),acP=caml_string_of_jsbytes("44437"),acQ=caml_string_of_jsbytes(str_1$0),acR=caml_string_of_jsbytes("7601"),acS=caml_string_of_jsbytes("52039"),acT=caml_string_of_jsbytes(str_0$1),acU=caml_string_of_jsbytes("32872"),acV=caml_string_of_jsbytes("39564"),acW=caml_string_of_jsbytes(str_1$0),acX=caml_string_of_jsbytes("6693"),acY=caml_string_of_jsbytes("46259"),acZ=caml_string_of_jsbytes(str_0$1),ac0=caml_string_of_jsbytes("30688"),ac1=caml_string_of_jsbytes("36798"),ac2=caml_string_of_jsbytes(str_1$0),ac3=caml_string_of_jsbytes("6110"),ac4=caml_string_of_jsbytes("42908"),ac6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],acL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2208,5,2211,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],act=caml_string_of_jsbytes(str_0$1),acu=caml_string_of_jsbytes("29650"),acv=caml_string_of_jsbytes("35781"),acw=caml_string_of_jsbytes(str_1$0),acx=caml_string_of_jsbytes("6131"),acy=caml_string_of_jsbytes("41911"),acz=caml_string_of_jsbytes(str_0$1),acA=caml_string_of_jsbytes("26431"),acB=caml_string_of_jsbytes("31833"),acC=caml_string_of_jsbytes(str_1$0),acD=caml_string_of_jsbytes("5402"),acE=caml_string_of_jsbytes("37234"),acF=caml_string_of_jsbytes(str_0$1),acG=caml_string_of_jsbytes("24684"),acH=caml_string_of_jsbytes("29612"),acI=caml_string_of_jsbytes(str_1$0),acJ=caml_string_of_jsbytes("4930"),acK=caml_string_of_jsbytes("34542"),acM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],acr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2253,5,2256,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ab$=caml_string_of_jsbytes(str_0$1),aca=caml_string_of_jsbytes("36864"),acb=caml_string_of_jsbytes("44473"),acc=caml_string_of_jsbytes(str_1$0),acd=caml_string_of_jsbytes("7607"),ace=caml_string_of_jsbytes("52081"),acf=caml_string_of_jsbytes(str_0$1),acg=caml_string_of_jsbytes("32898"),ach=caml_string_of_jsbytes("39596"),aci=caml_string_of_jsbytes(str_1$0),acj=caml_string_of_jsbytes("6698"),ack=caml_string_of_jsbytes("46296"),acl=caml_string_of_jsbytes(str_0$1),acm=caml_string_of_jsbytes("30713"),acn=caml_string_of_jsbytes("36827"),aco=caml_string_of_jsbytes(str_1$0),acp=caml_string_of_jsbytes("6115"),acq=caml_string_of_jsbytes("42942"),acs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ab9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2297,5,2300,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],abR=caml_string_of_jsbytes(str_0$1),abS=caml_string_of_jsbytes("29674"),abT=caml_string_of_jsbytes("35810"),abU=caml_string_of_jsbytes(str_1$0),abV=caml_string_of_jsbytes("6136"),abW=caml_string_of_jsbytes("41945"),abX=caml_string_of_jsbytes(str_0$1),abY=caml_string_of_jsbytes("26452"),abZ=caml_string_of_jsbytes("31858"),ab0=caml_string_of_jsbytes(str_1$0),ab1=caml_string_of_jsbytes("5406"),ab2=caml_string_of_jsbytes("37264"),ab3=caml_string_of_jsbytes(str_0$1),ab4=caml_string_of_jsbytes("24704"),ab5=caml_string_of_jsbytes("29636"),ab6=caml_string_of_jsbytes(str_1$0),ab7=caml_string_of_jsbytes("4934"),ab8=caml_string_of_jsbytes(str_34570),ab_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],abP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2342,5,2345,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],abx=caml_string_of_jsbytes(str_0$1),aby=caml_string_of_jsbytes("37140"),abz=caml_string_of_jsbytes("44807"),abA=caml_string_of_jsbytes(str_1$0),abB=caml_string_of_jsbytes("7664"),abC=caml_string_of_jsbytes("52472"),abD=caml_string_of_jsbytes(str_0$1),abE=caml_string_of_jsbytes("33145"),abF=caml_string_of_jsbytes("39893"),abG=caml_string_of_jsbytes(str_1$0),abH=caml_string_of_jsbytes("6748"),abI=caml_string_of_jsbytes("46643"),abJ=caml_string_of_jsbytes(str_0$1),abK=caml_string_of_jsbytes("30943"),abL=caml_string_of_jsbytes("37103"),abM=caml_string_of_jsbytes(str_1$0),abN=caml_string_of_jsbytes("6161"),abO=caml_string_of_jsbytes("43264"),abQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],abv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2386,5,2389,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],abd=caml_string_of_jsbytes(str_0$1),abe=caml_string_of_jsbytes("29897"),abf=caml_string_of_jsbytes("36079"),abg=caml_string_of_jsbytes(str_1$0),abh=caml_string_of_jsbytes("6182"),abi=caml_string_of_jsbytes("42260"),abj=caml_string_of_jsbytes(str_0$1),abk=caml_string_of_jsbytes("26650"),abl=caml_string_of_jsbytes("32097"),abm=caml_string_of_jsbytes(str_1$0),abn=caml_string_of_jsbytes("5447"),abo=caml_string_of_jsbytes("37543"),abp=caml_string_of_jsbytes(str_0$1),abq=caml_string_of_jsbytes("24889"),abr=caml_string_of_jsbytes("29858"),abs=caml_string_of_jsbytes(str_1$0),abt=caml_string_of_jsbytes("4971"),abu=caml_string_of_jsbytes(str_34829),abw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],abb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2431,5,2433,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aaV=caml_string_of_jsbytes(str_0$1),aaW=caml_string_of_jsbytes("37252"),aaX=caml_string_of_jsbytes("44941"),aaY=caml_string_of_jsbytes(str_1$0),aaZ=caml_string_of_jsbytes("7687"),aa0=caml_string_of_jsbytes("52629"),aa1=caml_string_of_jsbytes(str_0$1),aa2=caml_string_of_jsbytes("33244"),aa3=caml_string_of_jsbytes("40013"),aa4=caml_string_of_jsbytes(str_1$0),aa5=caml_string_of_jsbytes("6768"),aa6=caml_string_of_jsbytes("46783"),aa7=caml_string_of_jsbytes(str_0$1),aa8=caml_string_of_jsbytes("31036"),aa9=caml_string_of_jsbytes("37215"),aa_=caml_string_of_jsbytes(str_1$0),aa$=caml_string_of_jsbytes("6179"),aba=caml_string_of_jsbytes("43394"),abc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2474,5,2476,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aaB=caml_string_of_jsbytes(str_0$1),aaC=caml_string_of_jsbytes("29986"),aaD=caml_string_of_jsbytes("36187"),aaE=caml_string_of_jsbytes(str_1$0),aaF=caml_string_of_jsbytes("6201"),aaG=caml_string_of_jsbytes("42386"),aaH=caml_string_of_jsbytes(str_0$1),aaI=caml_string_of_jsbytes("26730"),aaJ=caml_string_of_jsbytes("32193"),aaK=caml_string_of_jsbytes(str_1$0),aaL=caml_string_of_jsbytes("5463"),aaM=caml_string_of_jsbytes("37656"),aaN=caml_string_of_jsbytes(str_0$1),aaO=caml_string_of_jsbytes("24964"),aaP=caml_string_of_jsbytes("29948"),aaQ=caml_string_of_jsbytes(str_1$0),aaR=caml_string_of_jsbytes(str_4986),aaS=caml_string_of_jsbytes("34934"),aaU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3787,5,num_3787,28,[0,caml_string_of_jsbytes(str_Article_D832_18),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aax=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_693,11,num_693,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aav=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3779,14,num_3779,44,[0,caml_string_of_jsbytes(str_Article_D832_18),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aar=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3322,14,num_3322,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aap=caml_string_of_jsbytes(str_0$1),aaq=caml_string_of_jsbytes(str_0$1),aas=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_713,10,num_713,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aao=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_713,10,num_713,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2603,7,num_2603,18,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aag=caml_string_of_jsbytes(str_1229),aah=caml_string_of_jsbytes(str_2710),aai=caml_string_of_jsbytes(str_5422),aak=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aae=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_464,7,num_464,18,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],aab=caml_string_of_jsbytes(str_1224),aac=caml_string_of_jsbytes(str_2699),aad=caml_string_of_jsbytes(str_5399),aaf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aal=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2524,29,num_2524,64,[0,caml_string_of_jsbytes(str_Article_19),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$8=caml_string_of_jsbytes(str_1229),$9=caml_string_of_jsbytes(str_5422),$$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_429,29,num_429,64,[0,caml_string_of_jsbytes(str_Article_19),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],$4=caml_string_of_jsbytes(str_1224),$5=caml_string_of_jsbytes(str_5399),$7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_719,14,num_719,50,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2629,14,num_2629,50,[0,caml_string_of_jsbytes("Article 25"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$P=caml_string_of_jsbytes(str_0_0226),$Q=caml_string_of_jsbytes(str_0_0234),$R=caml_string_of_jsbytes("0.0172"),$S=caml_string_of_jsbytes(str_0_0226),$T=caml_string_of_jsbytes(str_0_0234),$J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3475,14,num_3475,64,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],$F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3473,14,num_3473,59,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],$B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_275,14,num_275,36,[0,caml_string_of_jsbytes(str_Article_premier),[0,caml_string_of_jsbytes(str_R_glement_CE_abr),0]]],$z=caml_string_of_jsbytes(str_6_55957),$A=caml_string_of_jsbytes(str_1),$v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2572,14,num_2572,47,[0,caml_string_of_jsbytes(str_Article_23),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$u=caml_string_of_jsbytes("0.416"),$q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2571,14,num_2571,47,[0,caml_string_of_jsbytes(str_Article_23),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$p=caml_string_of_jsbytes(str_0_208),$l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2570,14,num_2570,47,[0,caml_string_of_jsbytes(str_Article_23),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$k=caml_string_of_jsbytes("560085"),$g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2647,14,num_2647,48,[0,caml_string_of_jsbytes("Article 26"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$f=caml_string_of_jsbytes(str_16_25),$b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2555,15,num_2555,49,[0,caml_string_of_jsbytes("Article 22"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$a=caml_string_of_jsbytes("2211133"),_8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2546,14,num_2546,42,[0,caml_string_of_jsbytes("Article 21"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],_7=caml_string_of_jsbytes(str_1000),_3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2535,14,num_2535,41,[0,caml_string_of_jsbytes("Article 20"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],_2=caml_string_of_jsbytes(str_500),_4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_695,11,num_695,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_695,11,num_695,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_5=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_10"),0]],_9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_696,11,num_696,39,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_696,11,num_696,39,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],__=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_minimal_aide_d832_10"),0]],$c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_698,11,num_698,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_698,11,num_698,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$d=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_11"),0]],$h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_699,11,num_699,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_699,11,num_699,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$i=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_18"),0]],$m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_700,11,num_700,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_700,11,num_700,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$n=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_limite_tranches_d832_15_1"),0]],$r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_701,11,num_701,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_701,11,num_701,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$s=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("taux_tranche_inf\xc3\xa9rieure_d832_15_1"),0]],$w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_702,11,num_702,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_702,11,num_702,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$x=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("taux_tranche_sup\xc3\xa9rieure_d832_15_1"),0]],$C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_703,11,num_703,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_703,11,num_703,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$D=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_taux_francs_vers_abr),0]],$G=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_705,3,num_705,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$H=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],$E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_656,10,num_656,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_705,3,num_705,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$L=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],$I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_657,10,num_657,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$M=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],$N=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],$V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_697,11,num_697,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_697,11,num_697,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$W=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_17_3"),0]],$Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_708,3,num_708,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],$X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],$1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],$2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],aam=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aan=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_charges_d832_10"),0]],aat=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aay=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_693,11,num_693,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aau=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_693,11,num_693,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("ressources_m\xc3\xa9nage_avec_d832_18"),0]],anS=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],anV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_685,11,num_685,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_685,11,num_685,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anW=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr),0]],an2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),0]],aoh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_682,10,num_682,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],an3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_682,10,num_682,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("plafond_mensualit\xc3\xa9_d832_10_3_base"),0]],aol=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_706,3,num_706,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aom=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],aoj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aop=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_706,3,num_706,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],aon=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aot=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_706,3,num_706,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aou=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],aor=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aov=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aow=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aoA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_687,10,num_687,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aox=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_687,10,num_687,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_10_formule"),0]],aoK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),0]],aoS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("plafond_mensualit\xc3\xa9_d832_10_3_copropri\xc3\xa9taires"),0]],ao1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_mensualit_mini_abr),0]],ao8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_688,10,num_688,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_688,10,num_688,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_10_arrondi"),0]],apl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],apo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_679,10,num_679,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_679,10,num_679,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],app=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_mensualit_li_abr),0]],apu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_689,10,num_689,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_689,10,num_689,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apv=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_10_seuil"),0]],apK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],apP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_711,10,num_711,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_711,10,num_711,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apQ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],apZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],_X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4024,14,num_4024,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_S=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],_T=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],_U=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],_V=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],_W=caml_string_of_jsbytes(str_0$1),_Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_646,10,num_646,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_646,10,num_646,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3928,14,num_3928,33,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_M=caml_string_of_jsbytes(str_0$1),_N=caml_string_of_jsbytes(str_0$1),_I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4003,14,num_4003,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_x=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],_y=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],_z=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],_A=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],_B=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],_C=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],_D=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],_E=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],_F=caml_string_of_jsbytes(str_50),_G=caml_string_of_jsbytes(str_0$1),_H=caml_string_of_jsbytes(str_0$1),_J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_645,10,num_645,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_645,10,num_645,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4168,5,num_4168,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_q=caml_string_of_jsbytes(str_0_9),_r=caml_string_of_jsbytes(str_0_9),_t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_639,10,num_639,15,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4081,14,num_4081,49,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_n=caml_string_of_jsbytes(str_0_95),_o=caml_string_of_jsbytes(str_0_95),_j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3989,14,num_3989,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Z$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],_a=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],_b=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],_c=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],_d=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],_e=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),0]],_f=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],_g=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),0]],_h=caml_string_of_jsbytes(str_0$1),_i=caml_string_of_jsbytes(str_0$1),_k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_644,10,num_644,20,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_644,10,num_644,20,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4162,5,num_4162,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Z3=caml_string_of_jsbytes(str_100),Z4=caml_string_of_jsbytes(str_100),Z5=caml_string_of_jsbytes(str_0_005),Z7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_638,10,num_638,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4078,14,num_4078,49,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZZ=caml_string_of_jsbytes(str_100),Z0=caml_string_of_jsbytes(str_100),Z1=caml_string_of_jsbytes(str_0_005),ZV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3961,14,num_3961,40,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4333,14,num_4333,55,[0,caml_string_of_jsbytes(str_Article_D832_27),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZM=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],ZN=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),0]],ZO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],ZP=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),0]],ZQ=caml_string_of_jsbytes(str_0$1),ZS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_622,11,num_622,52,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_622,11,num_622,52,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4145,5,num_4145,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZG=caml_string_of_jsbytes(str_0_9),ZI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_637,10,num_637,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4057,14,num_4057,49,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZC=caml_string_of_jsbytes(str_0$1),ZD=caml_string_of_jsbytes(str_0$1),ZE=caml_string_of_jsbytes(str_0_95),Zw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3967,14,num_3967,70,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3963,14,num_3963,69,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3965,14,num_3965,75,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4329,14,num_4329,44,[0,caml_string_of_jsbytes(str_Article_D832_27),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_624,11,num_624,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_624,11,num_624,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4133,14,num_4133,36,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_619,19,num_619,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3949,14,num_3949,40,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Y9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2763,14,num_2763,48,[0,caml_string_of_jsbytes(str_Article_30),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Y7=caml_string_of_jsbytes("2142091"),Y8=caml_string_of_jsbytes("1339340"),Y3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2884,14,num_2884,41,[0,caml_string_of_jsbytes("Article 32"),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Y1=caml_string_of_jsbytes(str_1500),Y2=caml_string_of_jsbytes("2668"),YV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4129,14,num_4129,64,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4127,14,num_4127,59,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4131,14,num_4131,55,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3975,14,num_3975,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YH=caml_string_of_jsbytes(str_0$1),YI=caml_string_of_jsbytes(str_0$1),YK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_643,10,num_643,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_643,10,num_643,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2674,14,num_2674,48,[0,caml_string_of_jsbytes(str_Article_27),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],X4=caml_string_of_jsbytes(str_0$1),X5=caml_string_of_jsbytes("44630"),X6=caml_string_of_jsbytes("52321"),X7=caml_string_of_jsbytes(str_1$0),X8=caml_string_of_jsbytes("55788"),X9=caml_string_of_jsbytes(str_2),X_=caml_string_of_jsbytes("59704"),X$=caml_string_of_jsbytes(str_3),Ya=caml_string_of_jsbytes("63635"),Yb=caml_string_of_jsbytes(str_4),Yc=caml_string_of_jsbytes("7119"),Yd=caml_string_of_jsbytes("68637"),Ye=caml_string_of_jsbytes(str_0$1),Yf=caml_string_of_jsbytes("40814"),Yg=caml_string_of_jsbytes("47632"),Yh=caml_string_of_jsbytes(str_1$0),Yi=caml_string_of_jsbytes("50787"),Yj=caml_string_of_jsbytes(str_2),Yk=caml_string_of_jsbytes("54365"),Yl=caml_string_of_jsbytes(str_3),Ym=caml_string_of_jsbytes("57929"),Yn=caml_string_of_jsbytes(str_4),Yo=caml_string_of_jsbytes("6434"),Yp=caml_string_of_jsbytes("61727"),Yq=caml_string_of_jsbytes(str_0$1),Yr=caml_string_of_jsbytes("38740"),Ys=caml_string_of_jsbytes("45057"),Yt=caml_string_of_jsbytes(str_1$0),Yu=caml_string_of_jsbytes("47802"),Yv=caml_string_of_jsbytes(str_2),Yw=caml_string_of_jsbytes("50957"),Yx=caml_string_of_jsbytes(str_3),Yy=caml_string_of_jsbytes("54110"),Yz=caml_string_of_jsbytes(str_4),YA=caml_string_of_jsbytes("5971"),YB=caml_string_of_jsbytes("57657"),YD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],X2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_501,14,num_501,48,[0,caml_string_of_jsbytes(str_Article_27),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Xs=caml_string_of_jsbytes(str_0$1),Xt=caml_string_of_jsbytes("44443"),Xu=caml_string_of_jsbytes("52101"),Xv=caml_string_of_jsbytes(str_1$0),Xw=caml_string_of_jsbytes("55555"),Xx=caml_string_of_jsbytes(str_2),Xy=caml_string_of_jsbytes("59454"),Xz=caml_string_of_jsbytes(str_3),XA=caml_string_of_jsbytes("63369"),XB=caml_string_of_jsbytes(str_4),XC=caml_string_of_jsbytes("7089"),XD=caml_string_of_jsbytes("68350"),XE=caml_string_of_jsbytes(str_0$1),XF=caml_string_of_jsbytes("40643"),XG=caml_string_of_jsbytes("47433"),XH=caml_string_of_jsbytes(str_1$0),XI=caml_string_of_jsbytes("50575"),XJ=caml_string_of_jsbytes(str_2),XK=caml_string_of_jsbytes("54138"),XL=caml_string_of_jsbytes(str_3),XM=caml_string_of_jsbytes("57687"),XN=caml_string_of_jsbytes(str_4),XO=caml_string_of_jsbytes("6407"),XP=caml_string_of_jsbytes("61469"),XQ=caml_string_of_jsbytes(str_0$1),XR=caml_string_of_jsbytes("38578"),XS=caml_string_of_jsbytes("44869"),XT=caml_string_of_jsbytes(str_1$0),XU=caml_string_of_jsbytes("47602"),XV=caml_string_of_jsbytes(str_2),XW=caml_string_of_jsbytes("50744"),XX=caml_string_of_jsbytes(str_3),XY=caml_string_of_jsbytes("53884"),XZ=caml_string_of_jsbytes(str_4),X0=caml_string_of_jsbytes("5946"),X1=caml_string_of_jsbytes("57416"),X3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_649,14,num_649,50,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4042,14,num_4042,35,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Xi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_615,12,num_615,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2739,14,num_2739,42,[0,caml_string_of_jsbytes("Article 29"),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Xc=caml_string_of_jsbytes(str_1000),W_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2728,14,num_2728,41,[0,caml_string_of_jsbytes("Article 28"),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],W9=caml_string_of_jsbytes(str_500),W5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2753,14,num_2753,35,[0,caml_string_of_jsbytes(str_Article_30),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],W4=caml_string_of_jsbytes("121726"),W6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_618,10,num_618,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],W3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_618,10,num_618,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],W7=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_r_d832_25"),0]],W$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_625,11,num_625,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],W8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_625,11,num_625,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_24"),0]],Xe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_627,11,num_627,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_627,11,num_627,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xf=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("montant_minimal_aide_d823_24"),0]],Xj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_615,12,num_615,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_615,12,num_615,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xk=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("condition_2_du_832_25"),0]],Xn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_633,3,num_633,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xo=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],Xl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Xp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],Xq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],YE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("plafond_\xc3\xa9quivalence_loyer_\xc3\xa9ligible"),0]],YL=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],YO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_630,3,num_630,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YP=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$0),0]],YM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_599,10,num_599,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_630,3,num_630,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],YQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_600,10,num_600,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_630,3,num_630,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],YU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_601,10,num_601,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YY=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],YZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],Y4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_626,11,num_626,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_626,11,num_626,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y5=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_27"),0]],Y_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_617,10,num_617,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_617,10,num_617,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_25"),0]],Zc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_620,10,num_620,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Za=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_620,10,num_620,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zd=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("\xc3\xa9quivalence_loyer_\xc3\xa9ligible"),0]],Zh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_619,19,num_619,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ze=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_619,19,num_619,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr$0),0]],Zm=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),0]],Zp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_631,3,num_631,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],Zn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_631,3,num_631,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zu=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],Zr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_631,3,num_631,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zy=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],Zv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ZA=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ZJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_637,10,num_637,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_637,10,num_637,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_25_formule"),0]],ZT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),0]],ZW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_628,10,num_628,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_628,10,num_628,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("\xc3\xa9quivalence_loyer_minimale"),0]],Z8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_638,10,num_638,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_638,10,num_638,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_25_arrondi"),0]],_l=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],_u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_639,10,num_639,15,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_639,10,num_639,15,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_v=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_25_seuil"),0]],_K=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],_P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_641,10,num_641,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_641,10,num_641,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_Q=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],_Z=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],WS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1986,14,num_1986,33,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WQ=caml_string_of_jsbytes(str_0$1),WR=caml_string_of_jsbytes(str_0$1),WM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2124,14,num_2124,39,[0,caml_string_of_jsbytes(str_Article_D823_17),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WK=caml_string_of_jsbytes(str_0$1),WL=caml_string_of_jsbytes(str_0$1),WG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2107,14,num_2107,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),[0,caml_string_of_jsbytes(str_input),0]]],WC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),0]],WD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),[0,caml_string_of_jsbytes(str_output),0]]],WE=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),0]],WF=caml_string_of_jsbytes(str_0$1),WH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_577,10,num_577,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_577,10,num_577,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2158,14,num_2158,42,[0,caml_string_of_jsbytes(str_Article_D823_17),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Wt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_802,14,num_802,36,[0,caml_string_of_jsbytes(str_Article_L832_3),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],Wn=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],Wo=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],Wp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],Wq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],Wr=caml_string_of_jsbytes(str_0$1),Ws=caml_string_of_jsbytes(str_0$1),Wu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_576,10,num_576,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_576,10,num_576,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_287,14,num_287,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Wf=caml_string_of_jsbytes(str_100000),Wg=caml_string_of_jsbytes(str_100000),Wi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],We=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_412,14,num_412,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Wc=caml_string_of_jsbytes(str_100000),Wd=caml_string_of_jsbytes(str_100000),Wj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],V_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2075,14,num_2075,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],VZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],V0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],V1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],V2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],V3=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],V4=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],V5=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],V6=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],V7=caml_string_of_jsbytes(str_50),V8=caml_string_of_jsbytes(str_0$1),V9=caml_string_of_jsbytes(str_0$1),V$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_575,10,num_575,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_575,10,num_575,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_280,14,num_280,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],VH=caml_string_of_jsbytes(str_0_45),VI=caml_string_of_jsbytes(str_0),VJ=caml_string_of_jsbytes(str_0_45),VK=caml_string_of_jsbytes(str_0_75),VL=caml_string_of_jsbytes(str_0_0045),VM=caml_string_of_jsbytes(str_0_0045),VN=caml_string_of_jsbytes(str_0_75),VO=caml_string_of_jsbytes(str_0_75),VP=caml_string_of_jsbytes(str_0_0068),VQ=caml_string_of_jsbytes(str_0_3),VR=caml_string_of_jsbytes(str_0_0045),VS=caml_string_of_jsbytes(str_0),VU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_405,14,num_405,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Vu=caml_string_of_jsbytes(str_0_45),Vv=caml_string_of_jsbytes(str_0),Vw=caml_string_of_jsbytes(str_0_45),Vx=caml_string_of_jsbytes(str_0_75),Vy=caml_string_of_jsbytes(str_0_0045),Vz=caml_string_of_jsbytes(str_0_0045),VA=caml_string_of_jsbytes(str_0_75),VB=caml_string_of_jsbytes(str_0_75),VC=caml_string_of_jsbytes(str_0_0068),VD=caml_string_of_jsbytes(str_0_3),VE=caml_string_of_jsbytes(str_0_0045),VF=caml_string_of_jsbytes(str_0),VV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2060,14,num_2060,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Vk=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),[0,caml_string_of_jsbytes(str_input),0]]],Vl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),0]],Vm=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),[0,caml_string_of_jsbytes(str_output),0]]],Vn=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),0]],Vo=caml_string_of_jsbytes(str_0$1),Vp=caml_string_of_jsbytes(str_0$1),Vr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_574,10,num_574,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_574,10,num_574,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ve=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_256,14,num_256,28,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Vc=caml_string_of_jsbytes(str_100),Vd=caml_string_of_jsbytes(str_100),Vf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_379,14,num_379,28,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],U$=caml_string_of_jsbytes(str_100),Va=caml_string_of_jsbytes(str_100),Vg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_301,14,num_301,36,[0,caml_string_of_jsbytes(str_Article_13),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],U2=caml_string_of_jsbytes(str_3539),U3=caml_string_of_jsbytes(str_0_085),U4=caml_string_of_jsbytes(str_0_085),U5=caml_string_of_jsbytes(str_3539),U7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_177,14,num_177,36,[0,caml_string_of_jsbytes(str_Article_13),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],UW=caml_string_of_jsbytes(str_3524),UX=caml_string_of_jsbytes(str_0_085),UY=caml_string_of_jsbytes(str_0_085),UZ=caml_string_of_jsbytes(str_3524),U1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2050,5,num_2050,50,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],US=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_573,10,num_573,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2038,14,num_2038,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],UP=caml_string_of_jsbytes(str_0$1),UT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_573,10,num_573,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_573,10,num_573,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2004,14,num_2004,28,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],UH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_252,14,num_252,42,[0,caml_string_of_jsbytes(str_Article_10),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],UE=caml_string_of_jsbytes("3.4"),UF=caml_string_of_jsbytes(str_2_5),UG=caml_string_of_jsbytes(str_2_5),UA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_258,14,num_258,41,[0,caml_string_of_jsbytes(str_Article_10),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Ux=caml_string_of_jsbytes("4."),Uy=caml_string_of_jsbytes(str_3_1),Uz=caml_string_of_jsbytes(str_3_1),Ut=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4403,14,num_4403,29,[0,caml_string_of_jsbytes("Article D842-2"),[0,caml_string_of_jsbytes(str_Section_1_Sect_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Ur=caml_string_of_jsbytes(str_3$0),Us=caml_string_of_jsbytes(str_2$0),Ul=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_566,29,num_566,64,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Ui=caml_string_of_jsbytes(str_1229),Uj=caml_string_of_jsbytes(str_2710),Uk=caml_string_of_jsbytes(str_5422),Um=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ug=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_394,29,num_394,64,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Ud=caml_string_of_jsbytes(str_1224),Ue=caml_string_of_jsbytes(str_2699),Uf=caml_string_of_jsbytes(str_5399),Uh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Un=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ua=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_229,29,num_229,64,[0,caml_string_of_jsbytes(str_Article_9),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],T_=caml_string_of_jsbytes(str_1229),T$=caml_string_of_jsbytes(str_5422),Ub=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_163,29,num_163,64,[0,caml_string_of_jsbytes(str_Article_9),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],T6=caml_string_of_jsbytes(str_1224),T7=caml_string_of_jsbytes(str_5399),T9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TZ=caml_string_of_jsbytes(str_0$1),T0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),523,5,524,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],TW=caml_string_of_jsbytes(str_22355),TX=caml_string_of_jsbytes(str_19484),TY=caml_string_of_jsbytes(str_18261),T1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TT=caml_string_of_jsbytes(str_0$1),TU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_532,5,num_533,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],TQ=caml_string_of_jsbytes("26962"),TR=caml_string_of_jsbytes("23848"),TS=caml_string_of_jsbytes("22136"),TV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TN=caml_string_of_jsbytes(str_1$0),TO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_541,5,num_541,35,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],TE=caml_string_of_jsbytes(str_1$0),TF=caml_string_of_jsbytes("4421"),TG=caml_string_of_jsbytes("30473"),TH=caml_string_of_jsbytes(str_1$0),TI=caml_string_of_jsbytes("3906"),TJ=caml_string_of_jsbytes("26835"),TK=caml_string_of_jsbytes(str_1$0),TL=caml_string_of_jsbytes("3557"),TM=caml_string_of_jsbytes("24821"),TP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TB=caml_string_of_jsbytes(str_0$1),TC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),350,5,351,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Ty=caml_string_of_jsbytes(str_22262),Tz=caml_string_of_jsbytes(str_19402),TA=caml_string_of_jsbytes(str_18185),TD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tv=caml_string_of_jsbytes(str_0$1),Tw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_359,5,num_360,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Ts=caml_string_of_jsbytes("26849"),Tt=caml_string_of_jsbytes("23748"),Tu=caml_string_of_jsbytes("22044"),Tx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tp=caml_string_of_jsbytes(str_1$0),Tq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_368,5,num_368,35,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Tg=caml_string_of_jsbytes(str_1$0),Th=caml_string_of_jsbytes("4403"),Ti=caml_string_of_jsbytes("30345"),Tj=caml_string_of_jsbytes(str_1$0),Tk=caml_string_of_jsbytes("3890"),Tl=caml_string_of_jsbytes("26723"),Tm=caml_string_of_jsbytes(str_1$0),Tn=caml_string_of_jsbytes("3542"),To=caml_string_of_jsbytes("24717"),Tr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_194,5,num_194,61,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],S$=caml_string_of_jsbytes(str_22355),Ta=caml_string_of_jsbytes(str_19484),Tb=caml_string_of_jsbytes(str_18261),Td=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],S9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_128,5,num_128,61,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],S6=caml_string_of_jsbytes(str_22262),S7=caml_string_of_jsbytes(str_19402),S8=caml_string_of_jsbytes(str_18185),S_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Te=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],S3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_187,14,num_187,37,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],S0=caml_string_of_jsbytes("26826"),S1=caml_string_of_jsbytes("23380"),S2=caml_string_of_jsbytes("21913"),S4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_121,14,num_121,37,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],SV=caml_string_of_jsbytes(str_26714),SW=caml_string_of_jsbytes("23282"),SX=caml_string_of_jsbytes("21821"),SZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],S5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SR=caml_string_of_jsbytes(str_0$1),SS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_102,5,num_103,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],SO=caml_string_of_jsbytes("29807"),SP=caml_string_of_jsbytes(str_25978),SQ=caml_string_of_jsbytes("24348"),ST=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SL=caml_string_of_jsbytes(str_0$1),SM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_112,5,113,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],SI=caml_string_of_jsbytes("35949"),SJ=caml_string_of_jsbytes(str_31797),SK=caml_string_of_jsbytes("29515"),SN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SF=caml_string_of_jsbytes(str_1$0),SG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_122,5,num_122,35,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Sw=caml_string_of_jsbytes(str_1$0),Sx=caml_string_of_jsbytes("5895"),Sy=caml_string_of_jsbytes("40630"),Sz=caml_string_of_jsbytes(str_1$0),SA=caml_string_of_jsbytes(str_5208),SB=caml_string_of_jsbytes(str_35780),SC=caml_string_of_jsbytes(str_1$0),SD=caml_string_of_jsbytes("4743"),SE=caml_string_of_jsbytes("33094"),SH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],St=caml_string_of_jsbytes(str_0$1),Su=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),37,5,38,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Sq=caml_string_of_jsbytes("29682"),Sr=caml_string_of_jsbytes("25859"),Ss=caml_string_of_jsbytes("24246"),Sv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Sn=caml_string_of_jsbytes(str_0$1),So=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),47,5,48,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Sk=caml_string_of_jsbytes("35799"),Sl=caml_string_of_jsbytes(str_31664),Sm=caml_string_of_jsbytes("29392"),Sp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Sh=caml_string_of_jsbytes(str_1$0),Si=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),57,5,57,35,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],R_=caml_string_of_jsbytes(str_1$0),R$=caml_string_of_jsbytes("5870"),Sa=caml_string_of_jsbytes("40460"),Sb=caml_string_of_jsbytes(str_1$0),Sc=caml_string_of_jsbytes(str_5186),Sd=caml_string_of_jsbytes(str_35630),Se=caml_string_of_jsbytes(str_1$0),Sf=caml_string_of_jsbytes("4723"),Sg=caml_string_of_jsbytes(str_32956),Sj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_285,14,num_285,42,[0,caml_string_of_jsbytes("Article 12"),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],R3=caml_string_of_jsbytes(str_0$1),R4=caml_string_of_jsbytes(str_1000),R5=caml_string_of_jsbytes(str_1000),RY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_429,14,num_429,29,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],RS=caml_string_of_jsbytes(str_0$1),RT=caml_string_of_jsbytes(str_25978),RU=caml_string_of_jsbytes(str_31797),RV=caml_string_of_jsbytes(str_1$0),RW=caml_string_of_jsbytes(str_5208),RX=caml_string_of_jsbytes(str_35780),RZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_305,14,num_305,29,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],RK=caml_string_of_jsbytes(str_0$1),RL=caml_string_of_jsbytes("25869"),RM=caml_string_of_jsbytes(str_31664),RN=caml_string_of_jsbytes(str_1$0),RO=caml_string_of_jsbytes(str_5186),RP=caml_string_of_jsbytes(str_35630),RR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_463,14,num_463,44,[0,caml_string_of_jsbytes(str_Article_15),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Rn=caml_string_of_jsbytes(str_0$1),Ro=caml_string_of_jsbytes("487000"),Rp=caml_string_of_jsbytes("697700"),Rq=caml_string_of_jsbytes(str_1$0),Rr=caml_string_of_jsbytes(str_832200),Rs=caml_string_of_jsbytes(str_2),Rt=caml_string_of_jsbytes("850900"),Ru=caml_string_of_jsbytes(str_3),Rv=caml_string_of_jsbytes("883400"),Rw=caml_string_of_jsbytes(str_4),Rx=caml_string_of_jsbytes("916300"),Ry=caml_string_of_jsbytes(str_5),Rz=caml_string_of_jsbytes("948800"),RA=caml_string_of_jsbytes(str_6$0),RB=caml_string_of_jsbytes(str_981600),RC=caml_string_of_jsbytes(str_6$0),RD=caml_string_of_jsbytes("32300"),RE=caml_string_of_jsbytes(str_981600),RG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Rl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_592,14,num_592,44,[0,caml_string_of_jsbytes(str_Article_15),[0,caml_string_of_jsbytes("Articles valables du 1er janvier 2022 au 1er juillet 2022"),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]],Q5=caml_string_of_jsbytes(str_0$1),Q6=caml_string_of_jsbytes("468300"),Q7=caml_string_of_jsbytes("670900"),Q8=caml_string_of_jsbytes(str_1$0),Q9=caml_string_of_jsbytes("800200"),Q_=caml_string_of_jsbytes(str_2),Q$=caml_string_of_jsbytes("819200"),Ra=caml_string_of_jsbytes(str_3),Rb=caml_string_of_jsbytes("849500"),Rc=caml_string_of_jsbytes(str_4),Rd=caml_string_of_jsbytes("881100"),Re=caml_string_of_jsbytes(str_5),Rf=caml_string_of_jsbytes("912400"),Rg=caml_string_of_jsbytes(str_6$0),Rh=caml_string_of_jsbytes(str_943900),Ri=caml_string_of_jsbytes(str_6$0),Rj=caml_string_of_jsbytes("31100"),Rk=caml_string_of_jsbytes(str_943900),Rm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Q3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_647,14,num_647,44,[0,caml_string_of_jsbytes(str_Article_15),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes("Articles valables du 1er janvier 2020 au 1er janvier 2022"),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],QL=caml_string_of_jsbytes(str_0$1),QM=caml_string_of_jsbytes("458800"),QN=caml_string_of_jsbytes("657200"),QO=caml_string_of_jsbytes(str_1$0),QP=caml_string_of_jsbytes("783900"),QQ=caml_string_of_jsbytes(str_2),QR=caml_string_of_jsbytes("801500"),QS=caml_string_of_jsbytes(str_3),QT=caml_string_of_jsbytes(str_832200),QU=caml_string_of_jsbytes(str_4),QV=caml_string_of_jsbytes("863100"),QW=caml_string_of_jsbytes(str_5),QX=caml_string_of_jsbytes("893800"),QY=caml_string_of_jsbytes(str_6$0),QZ=caml_string_of_jsbytes(str_924600),Q0=caml_string_of_jsbytes(str_6$0),Q1=caml_string_of_jsbytes(str_30500),Q2=caml_string_of_jsbytes(str_924600),Q4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],QF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_222,14,num_222,40,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Qn=caml_string_of_jsbytes(str_0$1),Qo=caml_string_of_jsbytes(str_0_0283),Qp=caml_string_of_jsbytes(str_0_0315),Qq=caml_string_of_jsbytes(str_1$0),Qr=caml_string_of_jsbytes(str_0_027),Qs=caml_string_of_jsbytes(str_2),Qt=caml_string_of_jsbytes(str_0_0238),Qu=caml_string_of_jsbytes(str_3),Qv=caml_string_of_jsbytes(str_0_0201),Qw=caml_string_of_jsbytes(str_4),Qx=caml_string_of_jsbytes(str_0_0185),Qy=caml_string_of_jsbytes(str_5),Qz=caml_string_of_jsbytes(str_0_0179),QA=caml_string_of_jsbytes(str_6$0),QB=caml_string_of_jsbytes(str_0_0173),QC=caml_string_of_jsbytes(str_6$0),QD=caml_string_of_jsbytes(str_0_0006),QE=caml_string_of_jsbytes(str_0_0173),QG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Qm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_346,14,num_346,40,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],P6=caml_string_of_jsbytes(str_0$1),P7=caml_string_of_jsbytes(str_0_0283),P8=caml_string_of_jsbytes(str_0_0315),P9=caml_string_of_jsbytes(str_1$0),P_=caml_string_of_jsbytes(str_0_027),P$=caml_string_of_jsbytes(str_2),Qa=caml_string_of_jsbytes(str_0_0238),Qb=caml_string_of_jsbytes(str_3),Qc=caml_string_of_jsbytes(str_0_0201),Qd=caml_string_of_jsbytes(str_4),Qe=caml_string_of_jsbytes(str_0_0185),Qf=caml_string_of_jsbytes(str_5),Qg=caml_string_of_jsbytes(str_0_0179),Qh=caml_string_of_jsbytes(str_6$0),Qi=caml_string_of_jsbytes(str_0_0173),Qj=caml_string_of_jsbytes(str_6$0),Qk=caml_string_of_jsbytes(str_0_0006),Ql=caml_string_of_jsbytes(str_0_0173),QH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],P0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_580,14,num_580,50,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_273,14,num_273,41,[0,caml_string_of_jsbytes("Article 11"),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],PV=caml_string_of_jsbytes(str_500),PR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2098,14,num_2098,29,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],PQ=caml_string_of_jsbytes(str_0_98),PS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_553,11,num_553,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_553,11,num_553,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("fraction_l832_3"),0]],PX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_556,11,num_556,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_556,11,num_556,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PY=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d823_16"),0]],P1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_567,3,num_567,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],P2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],PZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],P3=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],P4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],QI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],P5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],QJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_composition_familiale"),0]],RH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],QK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RI=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("abattement_forfaitaire_d823_17"),0]],R0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("loyer_r\xc3\xa9f\xc3\xa9rence"),0]],R7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_557,11,num_557,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_557,11,num_557,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R8=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("montant_minimal_aide_d823_16"),0]],T3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("plafond_loyer_d823_16_2"),0]],Uo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Up=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_charges_d823_16"),0]],Uu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_531,10,num_531,31,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_531,10,num_531,31,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uv=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("loyer_principal_avec_r\xc3\xa9duction_meubl\xc3\xa9"),0]],UB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_555,11,num_555,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_555,11,num_555,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("plafond_suppression_d823_16"),0]],UI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_554,11,num_554,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_554,11,num_554,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("plafond_d\xc3\xa9gressivit\xc3\xa9_d823_16"),0]],UM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_547,11,num_547,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_547,11,num_547,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UN=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("loyer_\xc3\xa9ligible"),0]],UU=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),0]],U8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("participation_minimale"),0]],Vh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("rapport_loyers"),0]],Vs=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],VW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_loyer_\xc3\xa9ligible_formule"),0]],Wa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],Wk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_loyer_\xc3\xa9ligible_arrondi"),0]],Wv=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),0]],Wy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_559,11,num_559,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ww=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_559,11,num_559,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_prise_compte_ressources"),0]],WI=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],WN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_565,10,num_565,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_565,10,num_565,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("participation_personnelle"),0]],WT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_570,10,num_570,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_570,10,num_570,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WU=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],WW=caml_string_of_jsbytes(str_2_5),WV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2053,13,num_2053,76,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],W1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2053,13,num_2053,76,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WY=caml_string_of_jsbytes(str_0_9),WZ=caml_string_of_jsbytes(str_0_98),WX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_810,13,num_810,63,[0,caml_string_of_jsbytes(str_Article_L832_3),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],W0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_810,13,num_810,63,[0,caml_string_of_jsbytes(str_Article_L832_3),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],PC=[6,0],PE=[0,0],PF=[1,0],PG=[2,0],PH=[3,0],PI=[4,0],PJ=[5,0],PK=[7,0],PD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),29,5,38,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],PB=caml_string_of_jsbytes(str_1003),PL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],Py=[8,0],Pz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),47,5,49,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],Px=caml_string_of_jsbytes(str_757),PA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],Pn=[6,0],Pp=[0,0],Pq=[1,0],Pr=[2,0],Ps=[3,0],Pt=[4,0],Pu=[5,0],Pv=[7,0],Po=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),68,5,77,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],Pm=caml_string_of_jsbytes(str_1015),Pw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],Pj=[8,0],Pk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),86,5,88,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],Pi=caml_string_of_jsbytes(str_766),Pl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],O_=[6,0],Pa=[0,0],Pb=[1,0],Pc=[2,0],Pd=[3,0],Pe=[4,0],Pf=[5,0],Pg=[7,0],O$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_107,5,num_116,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],O9=caml_string_of_jsbytes(str_1025),Ph=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],O6=[8,0],O7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_125,5,num_127,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],O5=caml_string_of_jsbytes(str_774),O8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OV=[6,0],OX=[0,0],OY=[1,0],OZ=[2,0],O0=[3,0],O1=[4,0],O2=[5,0],O3=[7,0],OW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_146,5,num_155,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OU=caml_string_of_jsbytes(str_1057),O4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OR=[8,0],OS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_165,5,num_167,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OQ=caml_string_of_jsbytes(str_798),OT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OG=[6,0],OI=[0,0],OJ=[1,0],OK=[2,0],OL=[3,0],OM=[4,0],ON=[5,0],OO=[7,0],OH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_186,5,num_195,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OF=caml_string_of_jsbytes(str_1085),OP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OC=[8,0],OD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_204,5,num_206,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OB=caml_string_of_jsbytes(str_819),OE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],PM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],PN=[0,caml_string_of_jsbytes(str_Smic),[0,caml_string_of_jsbytes(str_brut_horaire),0]],Ov=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),28,5,29,34,[0,caml_string_of_jsbytes(str_Instruction_mini_abr),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Ou=caml_string_of_jsbytes(str_41316),Ow=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Os=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),48,5,49,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$1),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Or=caml_string_of_jsbytes(str_41440),Ot=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Op=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),64,5,65,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$3),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Oo=caml_string_of_jsbytes(str_41481),Oq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Om=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),82,5,83,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$0),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Ol=caml_string_of_jsbytes(str_42228),On=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Ox=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Ok=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Oy=[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),[0,caml_string_of_jsbytes(str_montant),0]],Oe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2438,14,num_2438,28,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Od=caml_string_of_jsbytes(str_0$1),Of=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Oc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2375,14,num_2375,28,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Ob=caml_string_of_jsbytes(str_0$1),Og=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],N7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2396,20,num_2396,51,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],N4=caml_string_of_jsbytes(str_0$1),N5=caml_string_of_jsbytes(str_0$1),N6=caml_string_of_jsbytes(str_2$0),N8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],N3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2380,20,num_2380,55,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],N0=caml_string_of_jsbytes(str_0$1),N1=caml_string_of_jsbytes(str_0$1),N2=caml_string_of_jsbytes(str_2$0),N9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2490,7,num_2490,51,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NT=caml_string_of_jsbytes(str_6),NU=caml_string_of_jsbytes(str_1),NV=caml_string_of_jsbytes(str_2$0),NW=caml_string_of_jsbytes(str_0$1),NY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2462,7,num_2462,42,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NO=caml_string_of_jsbytes(str_6),NP=caml_string_of_jsbytes(str_1),NQ=caml_string_of_jsbytes(str_2$0),NR=caml_string_of_jsbytes(str_0$1),NZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2419,14,num_2419,36,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2515,14,num_2515,36,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NG=caml_string_of_jsbytes(str_12),NI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2506,14,num_2506,36,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2410,14,num_2410,36,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2538,14,num_2538,36,[0,caml_string_of_jsbytes("Article R824-3"),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Nq=[0,0],Nr=[1,0],Ns=[1,0],Nt=[0,0],Nu=[0,0],Nw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1016,11,num_1016,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Np=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1016,11,num_1016,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nx=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("mode_occupation_impay\xc3\xa9"),0]],ND=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Ny=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NE=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("d\xc3\xa9pense_logement_brute"),0]],NL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NM=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("d\xc3\xa9pense_logement_nette"),0]],N_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],N$=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("seuil_impay\xc3\xa9_d\xc3\xa9pense_de_logement"),0]],Oh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Oa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Oi=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("montant_impay\xc3\xa9"),0]],Nk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_119,5,num_119,43,[0,caml_string_of_jsbytes(str_Article_L161_17_2),[0,caml_string_of_jsbytes(str_Paragraphe_1_I_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Ni=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_256,5,num_256,42,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Ng=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_266,5,num_267,43,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nd=caml_string_of_jsbytes("1952"),Ne=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_276,5,num_276,48,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Na=caml_string_of_jsbytes("1953"),Nb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_285,5,num_285,48,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],M9=caml_string_of_jsbytes("1954"),M_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_294,5,num_294,48,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],M$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],M8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nn=[0,caml_string_of_jsbytes(str_OuvertureDroitsR_abr),[0,caml_string_of_jsbytes("\xc3\xa2ge_ouverture_droit"),0]],M4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3452,14,num_3452,36,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],MQ=caml_string_of_jsbytes(str_0$1),MR=caml_string_of_jsbytes(str_1_4),MS=caml_string_of_jsbytes(str_1_8),MT=caml_string_of_jsbytes(str_1$0),MU=caml_string_of_jsbytes(str_2_5),MV=caml_string_of_jsbytes(str_2),MW=caml_string_of_jsbytes(str_3$0),MX=caml_string_of_jsbytes(str_3),MY=caml_string_of_jsbytes(str_3_7),MZ=caml_string_of_jsbytes(str_4),M0=caml_string_of_jsbytes(str_4_3),M1=caml_string_of_jsbytes(str_4),M2=caml_string_of_jsbytes(str_0_5),M3=caml_string_of_jsbytes(str_4_3),M5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_659,10,num_659,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],MP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_659,10,num_659,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],M6=[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr),0]],MK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4195,5,num_4195,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Mw=caml_string_of_jsbytes(str_0$1),Mx=caml_string_of_jsbytes("1.2"),My=caml_string_of_jsbytes("1.5"),Mz=caml_string_of_jsbytes(str_1$0),MA=caml_string_of_jsbytes(str_2_5),MB=caml_string_of_jsbytes(str_2),MC=caml_string_of_jsbytes(str_3$0),MD=caml_string_of_jsbytes(str_3),ME=caml_string_of_jsbytes(str_3_7),MF=caml_string_of_jsbytes(str_4),MG=caml_string_of_jsbytes(str_4_3),MH=caml_string_of_jsbytes(str_4),MI=caml_string_of_jsbytes(str_0_5),MJ=caml_string_of_jsbytes(str_4_3),ML=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_603,10,num_603,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Mv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4108,14,num_4108,36,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Mh=caml_string_of_jsbytes(str_0$1),Mi=caml_string_of_jsbytes(str_1_4),Mj=caml_string_of_jsbytes(str_1_8),Mk=caml_string_of_jsbytes(str_1$0),Ml=caml_string_of_jsbytes(str_2_5),Mm=caml_string_of_jsbytes(str_2),Mn=caml_string_of_jsbytes(str_3$0),Mo=caml_string_of_jsbytes(str_3),Mp=caml_string_of_jsbytes(str_3_7),Mq=caml_string_of_jsbytes(str_4),Mr=caml_string_of_jsbytes(str_4_3),Ms=caml_string_of_jsbytes(str_4),Mt=caml_string_of_jsbytes(str_0_5),Mu=caml_string_of_jsbytes(str_4_3),MM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_603,10,num_603,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Mg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_603,10,num_603,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],MN=[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr$0),0]],Mb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4281,5,num_4281,26,[0,caml_string_of_jsbytes(str_Article_D832_26),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Ma=caml_string_of_jsbytes(str_0),L_=caml_string_of_jsbytes(str_12),L$=caml_string_of_jsbytes(str_0),Mc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_596,10,num_596,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4243,14,num_4243,21,[0,caml_string_of_jsbytes(str_Article_D832_26),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],L8=caml_string_of_jsbytes(str_0),L6=caml_string_of_jsbytes(str_12),L7=caml_string_of_jsbytes(str_0),L2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4230,14,num_4230,50,[0,caml_string_of_jsbytes(str_Article_D832_26),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],L1=[1,0],LW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2837,5,num_2837,26,[0,caml_string_of_jsbytes(str_Article_31),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],LH=caml_string_of_jsbytes("0.328"),LI=caml_string_of_jsbytes(str_409505),LJ=[1,0],LK=caml_string_of_jsbytes(str_0_232),LL=caml_string_of_jsbytes(str_262985),LM=caml_string_of_jsbytes(str_409505),LN=caml_string_of_jsbytes(str_0_208),LO=caml_string_of_jsbytes(str_204761),LP=caml_string_of_jsbytes(str_262985),LQ=caml_string_of_jsbytes("0.024"),LR=caml_string_of_jsbytes(str_142303),LS=caml_string_of_jsbytes(str_204761),LT=caml_string_of_jsbytes(str_0),LU=caml_string_of_jsbytes(str_0$1),LV=caml_string_of_jsbytes(str_142303),LX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_591,11,num_591,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],LG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2788,14,num_2788,38,[0,caml_string_of_jsbytes(str_Article_31),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Lo=caml_string_of_jsbytes("0.48"),Lp=caml_string_of_jsbytes(str_633129),Lq=[1,0],Lr=caml_string_of_jsbytes(str_0_32),Ls=caml_string_of_jsbytes(str_535744),Lt=caml_string_of_jsbytes(str_633129),Lu=caml_string_of_jsbytes("0.264"),Lv=caml_string_of_jsbytes(str_389618),Lw=caml_string_of_jsbytes(str_535744),Lx=caml_string_of_jsbytes("0.216"),Ly=caml_string_of_jsbytes(str_267871),Lz=caml_string_of_jsbytes(str_389618),LA=caml_string_of_jsbytes("0.104"),LB=caml_string_of_jsbytes(str_194810),LC=caml_string_of_jsbytes(str_267871),LD=caml_string_of_jsbytes(str_0_04),LE=caml_string_of_jsbytes(str_0$1),LF=caml_string_of_jsbytes(str_194810),Lk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2872,14,num_2872,41,[0,caml_string_of_jsbytes(str_Article_31),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Li=caml_string_of_jsbytes("7632"),Lj=caml_string_of_jsbytes("4557"),Ll=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_594,11,num_594,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Lh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_594,11,num_594,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Lm=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_26"),0]],LY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_591,11,num_591,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ln=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_591,11,num_591,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],LZ=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes("tranches_revenus_d832_26"),0]],L3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_592,11,num_592,47,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_592,11,num_592,47,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L4=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes("tranches_revenus_d832_26_multipli\xc3\xa9es"),0]],Md=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_596,10,num_596,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_596,10,num_596,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Me=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes(str_montant),0]],Lc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_100,5,num_100,35,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_II_De_abr),[0,caml_string_of_jsbytes(str_Ordonnance_n_9_abr),0]]]],Ld=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_520,10,num_520,17,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Lb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_520,10,num_520,17,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_138,39,num_138,69,[0,caml_string_of_jsbytes(str_Article_19),[0,caml_string_of_jsbytes(str_Chapitre_II_De_abr),[0,caml_string_of_jsbytes(str_Ordonnance_n_9_abr),0]]]],K9=caml_string_of_jsbytes(str_0_005),K4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),37,9,37,20,[0,caml_string_of_jsbytes("Article L136-1-3"),[0,caml_string_of_jsbytes("Section 1 : De la contribution sociale sur les revenus d'activit\xc3\xa9 et sur les revenus de remplacement"),[0,caml_string_of_jsbytes("Chapitre 6 : Contribution sociale g\xc3\xa9n\xc3\xa9ralis\xc3\xa9e"),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],K5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K7=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes("exon\xc3\xa9r\xc3\xa9_csg"),0]],K$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_517,11,num_517,20,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_517,11,num_517,20,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],La=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes("taux_crds"),0]],Le=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],Lf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_104,13,num_104,24,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_II_De_abr),[0,caml_string_of_jsbytes(str_Ordonnance_n_9_abr),0]]]],KT=caml_string_of_jsbytes("enfant_\xc3\xa0_na\xc3\xaetre_apr\xc3\xa8s_quatri\xc3\xa8me_mois_grossesse"),KU=caml_string_of_jsbytes("condition_rattach\xc3\xa9_foyer_fiscal_parent_ifi"),KV=caml_string_of_jsbytes("situation_familiale"),KW=caml_string_of_jsbytes("nombre_autres_occupants_logement"),KX=caml_string_of_jsbytes("personnes_\xc3\xa0_charge"),KY=caml_string_of_jsbytes("logement"),KZ=caml_string_of_jsbytes("prestations_re\xc3\xa7ues"),K0=[0,caml_string_of_jsbytes("M\xc3\xa9nage"),0],KI=caml_string_of_jsbytes("zone"),KJ=caml_string_of_jsbytes("surface_m_carr\xc3\xa9s"),KK=caml_string_of_jsbytes("logement_decent_l89_462"),KL=caml_string_of_jsbytes("usufruit"),KM=caml_string_of_jsbytes("lou\xc3\xa9_ou_sous_lou\xc3\xa9_\xc3\xa0_des_tiers"),KN=caml_string_of_jsbytes("propri\xc3\xa9taire"),KO=caml_string_of_jsbytes("mode_occupation"),KP=caml_string_of_jsbytes("est_ehpad_ou_maison_autonomie_l313_12_asf"),KQ=caml_string_of_jsbytes("r\xc3\xa9sidence_principale"),KR=[0,caml_string_of_jsbytes("Logement"),0],KC=caml_string_of_jsbytes(str_Locataire),KE=caml_string_of_jsbytes("R\xc3\xa9sidentLogementFoyer"),KF=caml_string_of_jsbytes("AccessionPropri\xc3\xa9t\xc3\xa9LocalUsageExclusifHabitation"),KG=caml_string_of_jsbytes(str_SousLocataire),KH=caml_string_of_jsbytes(str_LocationAccession),KD=[0,caml_string_of_jsbytes("ModeOccupation"),0],Ks=caml_string_of_jsbytes("changement_logement_d842_4"),Kt=caml_string_of_jsbytes("logement_meubl\xc3\xa9_d842_2"),Ku=caml_string_of_jsbytes("\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),Kv=caml_string_of_jsbytes("colocation"),Kw=caml_string_of_jsbytes("logement_est_chambre"),Kx=caml_string_of_jsbytes("b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),Ky=caml_string_of_jsbytes("loyer_principal"),Kz=caml_string_of_jsbytes("bailleur"),KA=[0,caml_string_of_jsbytes(str_Location),0],Km=caml_string_of_jsbytes("personne_h\xc3\xa9berg\xc3\xa9e_centre_soin_l_L162_22_3_s\xc3\xa9curit\xc3\xa9_sociale"),Kn=caml_string_of_jsbytes("patrimoine"),Ko=caml_string_of_jsbytes("nationalit\xc3\xa9"),Kp=caml_string_of_jsbytes(str_date_naissance),Kq=[0,caml_string_of_jsbytes(str_Demandeur),0],Ki=caml_string_of_jsbytes(str_Enfant_Charge),Kk=caml_string_of_jsbytes(str_AutrePersonne_C_abr),Kj=[0,caml_string_of_jsbytes("Personne\xc3\x80Charge"),0],J7=caml_string_of_jsbytes("pr\xc3\xaat"),J8=caml_string_of_jsbytes("anciennet\xc3\xa9_logement"),J9=caml_string_of_jsbytes("situation_r822_11_13_17"),J_=caml_string_of_jsbytes("copropri\xc3\xa9t\xc3\xa9"),J$=caml_string_of_jsbytes("local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire"),Ka=caml_string_of_jsbytes("type_travaux_logement_r842_5"),Kb=caml_string_of_jsbytes("type_travaux_logement_d832_15"),Kc=caml_string_of_jsbytes("date_entr\xc3\xa9e_logement"),Kd=caml_string_of_jsbytes("charges_mensuelles_pr\xc3\xaat"),Ke=caml_string_of_jsbytes("mensualit\xc3\xa9_principale"),Kf=caml_string_of_jsbytes("logement_situ\xc3\xa9_commune_d\xc3\xa9s\xc3\xa9quilibre_l831_2"),Kg=[0,caml_string_of_jsbytes("Propri\xc3\xa9taire"),0],J3=caml_string_of_jsbytes(str_Changement),J5=caml_string_of_jsbytes(str_PasDeChangement),J4=[0,caml_string_of_jsbytes("ChangementLogementD842_4"),0],JZ=caml_string_of_jsbytes("Fran\xc3\xa7aise"),J1=caml_string_of_jsbytes("\xc3\x89trang\xc3\xa8re"),J0=[0,caml_string_of_jsbytes("Nationalit\xc3\xa9"),0],JW=caml_string_of_jsbytes(str_Non),JY=caml_string_of_jsbytes(str_Oui),JX=[0,caml_string_of_jsbytes("Lou\xc3\xa9OuSousLou\xc3\xa9\xc3\x80DesTiers"),0],JS=caml_string_of_jsbytes(str_BailleurSocial),JU=caml_string_of_jsbytes("BailleurPriv\xc3\xa9AvecConventionnementSocial"),JV=caml_string_of_jsbytes("BailleurPriv\xc3\xa9"),JT=[0,caml_string_of_jsbytes("TypeBailleur"),0],JK=caml_string_of_jsbytes("situation_garde_altern\xc3\xa9e"),JL=caml_string_of_jsbytes(str_obligation_scolaire),JM=caml_string_of_jsbytes(str_r_muneration_me_abr),JN=caml_string_of_jsbytes(str_date_de_naissance),JO=caml_string_of_jsbytes(str_a_d_j_ouvert_abr),JP=caml_string_of_jsbytes(str_b_n_ficie_titr_abr),JQ=caml_string_of_jsbytes(str_identifiant),JR=[0,caml_string_of_jsbytes(str_Enfant_Charge),0],JC=caml_string_of_jsbytes(str_b_n_ficie_titr_abr),JD=caml_string_of_jsbytes(str_a_d_j_ouvert_abr),JE=caml_string_of_jsbytes(str_prise_en_charge),JF=caml_string_of_jsbytes(str_date_de_naissance),JG=caml_string_of_jsbytes(str_r_muneration_me_abr),JH=caml_string_of_jsbytes(str_obligation_scolaire),JI=caml_string_of_jsbytes(str_identifiant),JJ=[0,caml_string_of_jsbytes("EnfantPrestationsFamiliales"),0],Jt=caml_string_of_jsbytes("cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16"),Ju=caml_string_of_jsbytes("redevance"),Jv=caml_string_of_jsbytes("construit_application_loi_1957_12_III"),Jw=caml_string_of_jsbytes("date_conventionnement"),Jx=caml_string_of_jsbytes(str_conventionn_li_abr),Jy=caml_string_of_jsbytes("remplit_conditions_r832_21"),Jz=caml_string_of_jsbytes("type"),JA=[0,caml_string_of_jsbytes(str_LogementFoyer),0],Jl=caml_string_of_jsbytes("titulaire_allocation_personne_\xc3\xa2g\xc3\xa9e"),Jm=caml_string_of_jsbytes("b\xc3\xa9n\xc3\xa9ficiaire_l161_19_l351_8_l643_3_s\xc3\xa9cu"),Jn=caml_string_of_jsbytes("incapacit\xc3\xa9_80_pourcent_ou_restriction_emploi"),Jo=caml_string_of_jsbytes("parent\xc3\xa9"),Jp=caml_string_of_jsbytes("ascendant_descendant_collat\xc3\xa9ral_deuxi\xc3\xa8me_troisi\xc3\xa8me_degr\xc3\xa9"),Jq=caml_string_of_jsbytes("ressources"),Jr=caml_string_of_jsbytes(str_date_naissance),Js=[0,caml_string_of_jsbytes(str_AutrePersonne_C_abr),0],Jh=caml_string_of_jsbytes(str_taux),Ji=caml_string_of_jsbytes(str_bas),Jj=caml_string_of_jsbytes(str_haut),Jk=[0,caml_string_of_jsbytes("TrancheRevenuD\xc3\xa9cimal"),0],Jc=caml_string_of_jsbytes(str_taux),Jd=caml_string_of_jsbytes(str_bas),Je=caml_string_of_jsbytes(str_haut),Jf=[0,caml_string_of_jsbytes("TrancheRevenu"),0],I_=caml_string_of_jsbytes(str_Neuf),Ja=caml_string_of_jsbytes(str_Ancien),I$=[0,caml_string_of_jsbytes("NeufOuAncien"),0],I5=caml_string_of_jsbytes("titulaire_pr\xc3\xaat"),I6=caml_string_of_jsbytes("date_signature"),I7=caml_string_of_jsbytes("type_pr\xc3\xaat"),I8=[0,caml_string_of_jsbytes("Pr\xc3\xaat"),0],I1=caml_string_of_jsbytes("ancienne_allocation_logement"),I2=caml_string_of_jsbytes("ancien_loyer_principal"),I3=[0,caml_string_of_jsbytes("InfosChangementLogementD842_4"),0],IZ=caml_string_of_jsbytes("satisfait_conditions_l512_2_code_s\xc3\xa9curit\xc3\xa9_sociale"),I0=[0,caml_string_of_jsbytes("Conditions\xc3\x89trangers"),0],IW=caml_string_of_jsbytes("ne_produisant_pas_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),IX=caml_string_of_jsbytes("produisant_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),IY=[0,caml_string_of_jsbytes("Patrimoine"),0],IT=caml_string_of_jsbytes("conforme_article_l442_1"),IU=caml_string_of_jsbytes("date_naissance_personne_sous_location"),IV=[0,caml_string_of_jsbytes("PersonneSousLocation"),0],IR=caml_string_of_jsbytes("conventionn\xc3\xa9_livre_III_titre_II_chap_I_sec_3"),IS=[0,caml_string_of_jsbytes("ConventionANHA"),0],IO=caml_string_of_jsbytes("r\xc3\xa9duction_loyer_solidarit\xc3\xa9_per\xc3\xa7ue"),IP=caml_string_of_jsbytes(str_conventionn_li_abr),IQ=[0,caml_string_of_jsbytes("ConventionBailleurSocial"),0],IF=caml_string_of_jsbytes(str_PrestationAccuei_abr),IH=caml_string_of_jsbytes(str_AllocationsFamil_abr),II=caml_string_of_jsbytes(str_Compl_mentFamilial),IJ=caml_string_of_jsbytes(str_AllocationLogement),IK=caml_string_of_jsbytes(str_Allocation_duca_abr),IL=caml_string_of_jsbytes(str_AllocationSoutie_abr),IM=caml_string_of_jsbytes(str_AllocationRentr_abr),IN=caml_string_of_jsbytes(str_AllocationJourna_abr$0),IG=[0,caml_string_of_jsbytes(str_l_mentPrestat_abr),0],IA=caml_string_of_jsbytes(str_Avant),IC=caml_string_of_jsbytes(str_Pendant),ID=caml_string_of_jsbytes(str_Apr_s),IB=[0,caml_string_of_jsbytes(str_SituationObligat_abr),0],It=caml_string_of_jsbytes(str_GardeAltern_ePa_abr),Iv=caml_string_of_jsbytes(str_GardeAltern_eAl_abr),Iw=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),Ix=caml_string_of_jsbytes(str_ServicesSociauxA_abr$1),Iy=caml_string_of_jsbytes(str_ServicesSociauxA_abr$0),Iu=[0,caml_string_of_jsbytes("PriseEnChargeEnfant"),0],Ij=caml_string_of_jsbytes(str_Guadeloupe),Il=caml_string_of_jsbytes(str_Guyane),Im=caml_string_of_jsbytes(str_Martinique),In=caml_string_of_jsbytes(str_LaR_union),Io=caml_string_of_jsbytes(str_SaintBarth_lemy),Ip=caml_string_of_jsbytes(str_SaintMartin),Iq=caml_string_of_jsbytes(str_M_tropole),Ir=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),Is=caml_string_of_jsbytes(str_Mayotte),Ik=[0,caml_string_of_jsbytes(str_Collectivit),0],If=caml_string_of_jsbytes(str_PersonneSeule),Ih=caml_string_of_jsbytes(str_Couple),Ig=[0,caml_string_of_jsbytes("SituationFamilialeCalculAPL"),0],H$=caml_string_of_jsbytes("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUS"),Ib=caml_string_of_jsbytes("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUSR\xc3\xa9habilit\xc3\xa9e"),Ic=caml_string_of_jsbytes("Personnes\xc3\x82g\xc3\xa9esSelon3DeD842_16"),Id=caml_string_of_jsbytes(str_AutresPersonnes),Ia=[0,caml_string_of_jsbytes("Cat\xc3\xa9gorie\xc3\x89quivalenceLoyerAllocationLogementFoyer"),0],H5=caml_string_of_jsbytes("LogementPersonnes\xc3\x82g\xc3\xa9esOuHandicap\xc3\xa9es"),H7=caml_string_of_jsbytes("R\xc3\xa9sidenceSociale"),H8=caml_string_of_jsbytes("FoyerJeunesTrvailleursOuMigrantsConventionn\xc3\xa9L353_2Avant1995"),H9=caml_string_of_jsbytes(str_Autre),H6=[0,caml_string_of_jsbytes("TypeLogementFoyer"),0],HX=caml_string_of_jsbytes("C\xc3\xa9libataire"),HZ=caml_string_of_jsbytes("Mari\xc3\xa9s"),H0=caml_string_of_jsbytes("Pacs\xc3\xa9s"),H1=caml_string_of_jsbytes(str_Concubins),H2=caml_string_of_jsbytes("C\xc3\xa9libataireS\xc3\xa9par\xc3\xa9DeFait"),H3=caml_string_of_jsbytes("ConcubinageDontS\xc3\xa9par\xc3\xa9DeFait"),HY=[0,caml_string_of_jsbytes("SituationFamiliale"),0],HS=caml_string_of_jsbytes("AidePersonnalis\xc3\xa9eLogement"),HU=caml_string_of_jsbytes(str_AllocationLogeme_abr$0),HV=caml_string_of_jsbytes(str_AllocationLogeme_abr),HT=[0,caml_string_of_jsbytes("TypeAidesPersonnelleLogement"),0],HN=caml_string_of_jsbytes("Pas\xc3\x89ligible"),HP=caml_string_of_jsbytes(str_AllocationLogeme_abr$0),HQ=caml_string_of_jsbytes(str_AllocationLogeme_abr),HO=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),0],HJ=caml_string_of_jsbytes("Impay\xc3\xa9Loyer"),HL=caml_string_of_jsbytes("Impay\xc3\xa9Pr\xc3\xaat"),HK=[0,caml_string_of_jsbytes("ModeOccupationImpay\xc3\xa9"),0],HE=caml_string_of_jsbytes("TotalAnnuel\xc3\x89ch\xc3\xa9ances"),HG=caml_string_of_jsbytes("Mensualit\xc3\xa9"),HH=caml_string_of_jsbytes(str_Loyer),HF=[0,caml_string_of_jsbytes("D\xc3\xa9penseLogement"),0],Hz=caml_string_of_jsbytes(str_Location),HB=caml_string_of_jsbytes("AccessionPropri\xc3\xa9t\xc3\xa9"),HC=caml_string_of_jsbytes(str_LogementFoyer),HA=[0,caml_string_of_jsbytes("Cat\xc3\xa9gorieCalculAPL"),0],Hu=caml_string_of_jsbytes(str_Zone1),Hw=caml_string_of_jsbytes(str_Zone2),Hx=caml_string_of_jsbytes(str_Zone3),Hv=[0,caml_string_of_jsbytes("ZoneDHabitation"),0],Hp=caml_string_of_jsbytes(str_Ascendant),Hr=caml_string_of_jsbytes(str_Descendant),Hs=caml_string_of_jsbytes("Collat\xc3\xa9ralDeuxi\xc3\xa8meTroisi\xc3\xa8meDegr\xc3\xa9"),Hq=[0,caml_string_of_jsbytes("Parent\xc3\xa9"),0],Hm=caml_string_of_jsbytes("PasDeGardeAltern\xc3\xa9e"),Ho=caml_string_of_jsbytes("GardeAltern\xc3\xa9eCoefficientPriseEnCharge"),Hn=[0,caml_string_of_jsbytes("SituationGardeAltern\xc3\xa9e"),0],Hj=caml_string_of_jsbytes("DemandeurOuConjointOuParentOuViaPartsSoci\xc3\xa9t\xc3\xa9s"),Hl=caml_string_of_jsbytes(str_Autre),Hk=[0,caml_string_of_jsbytes("ParentOuAutre"),0],Hb=caml_string_of_jsbytes(str_AllocationsFamil_abr),Hd=caml_string_of_jsbytes(str_Compl_mentFamilial),He=caml_string_of_jsbytes(str_AllocationJeuneE_abr),Hf=caml_string_of_jsbytes(str_AllocationSoutie_abr),Hg=caml_string_of_jsbytes("AllocationSoutienEnfantHandicap\xc3\xa9"),Hh=caml_string_of_jsbytes("AllocationAdulteHandicap\xc3\xa9"),Hc=[0,caml_string_of_jsbytes("PrestationRe\xc3\xa7ue"),0],G9=caml_string_of_jsbytes(str_Revenu),G$=caml_string_of_jsbytes(str_Infini),G_=[0,caml_string_of_jsbytes("LimiteTrancheD\xc3\xa9cimal"),0],G6=caml_string_of_jsbytes(str_Revenu),G8=caml_string_of_jsbytes(str_Infini),G7=[0,caml_string_of_jsbytes("LimiteTranche"),0],G3=caml_string_of_jsbytes(str_Oui),G5=caml_string_of_jsbytes(str_Non),G4=[0,caml_string_of_jsbytes("Am\xc3\xa9lior\xc3\xa9ParOccupant"),0],GY=caml_string_of_jsbytes("ObjectifD\xc3\xa9cenceLogement"),G0=caml_string_of_jsbytes("Pr\xc3\xa9vuDansListeR321_15"),G1=caml_string_of_jsbytes(str_AgrandirOuRendre_abr),G2=caml_string_of_jsbytes(str_PasDeTravaux),GZ=[0,caml_string_of_jsbytes("TypeTravauxLogementR842_5"),0],GT=caml_string_of_jsbytes(str_TravauxPourAcqui_abr),GV=caml_string_of_jsbytes("TravauxSurLogementD\xc3\xa9j\xc3\xa0AcquisD832_15_2"),GW=caml_string_of_jsbytes(str_PasDeTravaux),GU=[0,caml_string_of_jsbytes("TypeTravauxLogementD832_15"),0],GP=caml_string_of_jsbytes(str_Demandeur),GR=caml_string_of_jsbytes(str_VendeurQuandDema_abr),GQ=[0,caml_string_of_jsbytes("TitulairePr\xc3\xaat"),0],GJ=caml_string_of_jsbytes(str_D331_32),GL=caml_string_of_jsbytes(str_D331_63_64),GM=caml_string_of_jsbytes(str_D331_59_8),GN=caml_string_of_jsbytes(str_D331_76_1),GO=caml_string_of_jsbytes(str_Autre),GK=[0,caml_string_of_jsbytes("TypePr\xc3\xaat"),0],ba7=caml_string_of_jsbytes(str$12),baF=caml_string_of_jsbytes("The function 'n_nombre_parts_d832_25_in' translation isn't yet supported..."),baG=caml_string_of_jsbytes("The function 'condition_2_du_832_25_in' translation isn't yet supported..."),baD=caml_string_of_jsbytes("The function 'condition_logement_surface_in' translation isn't yet supported..."),baE=caml_string_of_jsbytes("The function 'condition_logement_residence_principale_in' translation isn't yet supported..."),baw=caml_string_of_jsbytes("AccessionProprieteLocalUsageExclusifHabitation"),bax=caml_string_of_jsbytes(str_Locataire),bay=caml_string_of_jsbytes(str_LocationAccession),baz=caml_string_of_jsbytes("ResidentLogementFoyer"),baA=caml_string_of_jsbytes(str_SousLocataire),baB=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ModeOccupation.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ModeOccupation.t'")],baq=caml_string_of_jsbytes("AutrePersonneACharge"),bar=caml_string_of_jsbytes("EnfantACharge"),bas=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PersonneACharge.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PersonneACharge.t'")],bak=caml_string_of_jsbytes(str_Changement),bal=caml_string_of_jsbytes(str_PasDeChangement),ban=[1,0],bam=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ChangementLogementD8424.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ChangementLogementD8424.t'")],baf=caml_string_of_jsbytes("Etrangere"),bag=caml_string_of_jsbytes("Francaise"),bai=[0,0],bah=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'Nationalite.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'Nationalite.t'")],bab=caml_string_of_jsbytes(str_Non),bac=caml_string_of_jsbytes(str_Oui),bae=[0,0],bad=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'LoueOuSousLoueADesTiers.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'LoueOuSousLoueADesTiers.t'")],a$8=caml_string_of_jsbytes("BailleurPrive"),a$9=caml_string_of_jsbytes("BailleurPriveAvecConventionnementSocial"),a$_=caml_string_of_jsbytes(str_BailleurSocial),baa=[2,0],a$$=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeBailleur.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeBailleur.t'")],a$3=caml_string_of_jsbytes("MoinsDeTroisEnfants"),a$4=caml_string_of_jsbytes("PlusDeTroisEnfants"),a$6=[0,0],a$5=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'")],a$Z=caml_string_of_jsbytes(str_Ancien),a$0=caml_string_of_jsbytes(str_Neuf),a$2=[0,0],a$1=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'NeufOuAncien.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'NeufOuAncien.t'")],a$H=caml_string_of_jsbytes(str_AllocationEducat_abr),a$I=caml_string_of_jsbytes(str_AllocationJourna_abr),a$J=caml_string_of_jsbytes(str_AllocationLogement),a$K=caml_string_of_jsbytes(str_AllocationRentre_abr),a$L=caml_string_of_jsbytes(str_AllocationSoutie_abr),a$M=caml_string_of_jsbytes(str_AllocationsFamil_abr),a$N=caml_string_of_jsbytes(str_ComplementFamilial),a$O=caml_string_of_jsbytes(str_PrestationAccuei_abr),a$Q=[0,0],a$R=[2,0],a$S=[1,0],a$T=[5,0],a$U=[6,0],a$V=[3,0],a$W=[7,0],a$X=[4,0],a$P=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$1),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$0)],a$A=caml_string_of_jsbytes(str_Apres),a$B=caml_string_of_jsbytes(str_Avant),a$C=caml_string_of_jsbytes(str_Pendant),a$E=[1,0],a$F=[0,0],a$G=[2,0],a$D=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$1)],a$o=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),a$p=caml_string_of_jsbytes(str_GardeAlterneeAll_abr),a$q=caml_string_of_jsbytes(str_GardeAlterneePar_abr),a$r=caml_string_of_jsbytes(str_ServicesSociauxA_abr$2),a$s=caml_string_of_jsbytes(str_ServicesSociauxA_abr),a$u=[4,0],a$v=[3,0],a$w=[0,0],a$x=[1,0],a$y=[2,0],a$t=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PriseEnChargeEnfant.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PriseEnChargeEnfant.t'")],a_7=caml_string_of_jsbytes(str_Guadeloupe),a_8=caml_string_of_jsbytes(str_Guyane),a_9=caml_string_of_jsbytes(str_LaReunion),a__=caml_string_of_jsbytes(str_Martinique),a_$=caml_string_of_jsbytes(str_Mayotte),a$a=caml_string_of_jsbytes(str_Metropole),a$b=caml_string_of_jsbytes(str_SaintBarthelemy),a$c=caml_string_of_jsbytes(str_SaintMartin),a$d=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),a$f=[7,0],a$g=[5,0],a$h=[4,0],a$i=[6,0],a$j=[8,0],a$k=[2,0],a$l=[3,0],a$m=[1,0],a$n=[0,0],a$e=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$0),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr)],a_1=caml_string_of_jsbytes(str_Couple),a_2=caml_string_of_jsbytes(str_PersonneSeule),a_4=[0,0],a_5=[1,0],a_3=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'SituationFamilialeCalculAPL.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'SituationFamilialeCalculAPL.t'")],a_R=caml_string_of_jsbytes(str_AutresPersonnes),a_S=caml_string_of_jsbytes("EtudiantLogeEnChambreCROUS"),a_T=caml_string_of_jsbytes("EtudiantLogeEnChambreCROUSRehabilitee"),a_U=caml_string_of_jsbytes("PersonnesAgeesSelon3DeD842_16"),a_W=[2,0],a_X=[1,0],a_Y=[0,0],a_Z=[3,0],a_V=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'")],a_H=caml_string_of_jsbytes(str_Autre),a_I=caml_string_of_jsbytes("FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995"),a_J=caml_string_of_jsbytes("LogementPersonnesAgeesOuHandicapees"),a_K=caml_string_of_jsbytes("ResidenceSociale"),a_M=[1,0],a_N=[0,0],a_O=[2,0],a_P=[3,0],a_L=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeLogementFoyer.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeLogementFoyer.t'")],a_u=caml_string_of_jsbytes("Celibataire"),a_v=caml_string_of_jsbytes("CelibataireSepareDeFait"),a_w=caml_string_of_jsbytes("ConcubinageDontSepareDeFait"),a_x=caml_string_of_jsbytes(str_Concubins),a_y=caml_string_of_jsbytes("Maries"),a_z=caml_string_of_jsbytes("Pacses"),a_B=[2,0],a_C=[3,0],a_D=[5,0],a_E=[4,0],a_F=[0,0],a_A=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'SituationFamiliale.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'SituationFamiliale.t'")],a_m=caml_string_of_jsbytes("AidePersonnaliseeLogement"),a_n=caml_string_of_jsbytes(str_AllocationLogeme_abr$0),a_o=caml_string_of_jsbytes(str_AllocationLogeme_abr),a_q=[2,0],a_r=[1,0],a_s=[0,0],a_p=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeAidesPersonnelleLogement.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeAidesPersonnelleLogement.t'")],a_h=caml_string_of_jsbytes(str_Loyer),a_i=caml_string_of_jsbytes("Mensualite"),a_j=caml_string_of_jsbytes("TotalAnnuelEcheances"),a_k=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'DepenseLogement.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'DepenseLogement.t'")],a_a=caml_string_of_jsbytes("Bailleur"),a_b=caml_string_of_jsbytes("Beneficiaire"),a_c=caml_string_of_jsbytes("EtablissementHabilite"),a_e=[2,0],a_f=[1,0],a_g=[0,0],a_d=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'VersementA.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'VersementA.t'")],a98=caml_string_of_jsbytes(str_Non),a99=caml_string_of_jsbytes("OuiAvecLoyerOuCharges"),a9$=[1,0],a9_=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'")],a91=caml_string_of_jsbytes(str_Zone1),a92=caml_string_of_jsbytes(str_Zone2),a93=caml_string_of_jsbytes(str_Zone3),a95=[2,0],a96=[1,0],a97=[0,0],a94=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ZoneDHabitation.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ZoneDHabitation.t'")],a9U=caml_string_of_jsbytes("ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse"),a9V=caml_string_of_jsbytes("AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse"),a9W=caml_string_of_jsbytes("DateDeNaissance"),a9Y=[1,0],a9Z=[2,0],a9X=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'")],a9N=caml_string_of_jsbytes(str_Ascendant),a9O=caml_string_of_jsbytes("CollateralDeuxiemeTroisiemeDegre"),a9P=caml_string_of_jsbytes(str_Descendant),a9R=[1,0],a9S=[2,0],a9T=[0,0],a9Q=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'Parente.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'Parente.t'")],a9J=caml_string_of_jsbytes("GardeAlterneeCoefficientPriseEnCharge"),a9K=caml_string_of_jsbytes("PasDeGardeAlternee"),a9M=[0,0],a9L=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'SituationGardeAlternee.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'SituationGardeAlternee.t'")],a9F=caml_string_of_jsbytes(str_Autre),a9G=caml_string_of_jsbytes("DemandeurOuConjointOuParentOuViaPartsSocietes"),a9I=[1,0],a9H=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ParentOuAutre.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ParentOuAutre.t'")],a9r=caml_string_of_jsbytes("AllocationAdulteHandicape"),a9s=caml_string_of_jsbytes(str_AllocationJeuneE_abr),a9t=caml_string_of_jsbytes("AllocationSoutienEnfantHandicape"),a9u=caml_string_of_jsbytes(str_AllocationSoutie_abr),a9v=caml_string_of_jsbytes(str_AllocationsFamil_abr),a9w=caml_string_of_jsbytes(str_ComplementFamilial),a9y=[1,0],a9z=[0,0],a9A=[3,0],a9B=[4,0],a9C=[2,0],a9D=[5,0],a9x=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PrestationRecue.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PrestationRecue.t'")],a9m=caml_string_of_jsbytes(str_Non),a9n=caml_string_of_jsbytes(str_Oui),a9p=[0,0],a9q=[1,0],a9o=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'AmelioreParOccupant.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'AmelioreParOccupant.t'")],a9d=caml_string_of_jsbytes(str_AgrandirOuRendre_abr),a9e=caml_string_of_jsbytes("ObjectifDecenceLogement"),a9f=caml_string_of_jsbytes(str_PasDeTravaux),a9g=caml_string_of_jsbytes("PrevuDansListeR321_15"),a9i=[1,0],a9j=[3,0],a9k=[0,0],a9l=[2,0],a9h=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeTravauxLogementR8425.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementR8425.t'")],a87=caml_string_of_jsbytes(str_PasDeTravaux),a88=caml_string_of_jsbytes(str_TravauxPourAcqui_abr),a89=caml_string_of_jsbytes("TravauxSurLogementDejaAcquisD832_15_2"),a8$=[1,0],a9a=[0,0],a9b=[2,0],a8_=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeTravauxLogementD83215.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementD83215.t'")],a81=caml_string_of_jsbytes(str_Demandeur),a82=caml_string_of_jsbytes(str_VendeurQuandDema_abr),a84=[1,0],a85=[0,0],a83=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TitulairePret.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TitulairePret.t'")],a8Q=caml_string_of_jsbytes(str_Autre),a8R=caml_string_of_jsbytes(str_D331_32),a8S=caml_string_of_jsbytes(str_D331_59_8),a8T=caml_string_of_jsbytes(str_D331_63_64),a8U=caml_string_of_jsbytes(str_D331_76_1),a8W=[3,0],a8X=[1,0],a8Y=[2,0],a8Z=[0,0],a80=[4,0],a8V=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypePret.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypePret.t'")],a8N=[0,caml_string_of_jsbytes(str_calculAidePerson_abr$2),caml_string_of_jsbytes(str_calculAllocation_abr$0),caml_string_of_jsbytes(str_eligibiliteAides_abr),caml_string_of_jsbytes(str_ressourcesAidesP_abr),caml_string_of_jsbytes(str_eligibilitePrest_abr),caml_string_of_jsbytes(str_baseMensuelleAll_abr),caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_contributionsSoc_abr),caml_string_of_jsbytes(str_calculAidePerson_abr),caml_string_of_jsbytes(str_eligibiliteAideP_abr),caml_string_of_jsbytes(str_calculNombrePart_abr),caml_string_of_jsbytes(str_calculAllocation_abr$1),caml_string_of_jsbytes(str_calculetteAidesA_abr),caml_string_of_jsbytes(str_calculNombrePart_abr$0),caml_string_of_jsbytes(str_calculAidePerson_abr$0),caml_string_of_jsbytes(str_ouvertureDroitsR_abr),caml_string_of_jsbytes(str_impayeDepenseLog_abr),caml_string_of_jsbytes(str_eligibilitePrime_abr),caml_string_of_jsbytes(str_calculetteAidesA_abr$0),caml_string_of_jsbytes(str_calculAllocation_abr$2),caml_string_of_jsbytes(str_eligibiliteAlloc_abr),caml_string_of_jsbytes(str_calculAidePerson_abr$1),caml_string_of_jsbytes(str_calculEquivalenc_abr),caml_string_of_jsbytes(str_calculAllocation_abr)],a8O=[0,caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_ressourcesAidesP_abr),caml_string_of_jsbytes(str_ouvertureDroitsR_abr),caml_string_of_jsbytes(str_impayeDepenseLog_abr),caml_string_of_jsbytes(str_eligibilitePrime_abr),caml_string_of_jsbytes(str_eligibilitePrest_abr),caml_string_of_jsbytes(str_eligibiliteAlloc_abr),caml_string_of_jsbytes(str_eligibiliteAides_abr),caml_string_of_jsbytes(str_eligibiliteAideP_abr),caml_string_of_jsbytes(str_contributionsSoc_abr),caml_string_of_jsbytes(str_calculetteAidesA_abr$0),caml_string_of_jsbytes(str_calculetteAidesA_abr),caml_string_of_jsbytes(str_calculNombrePart_abr),caml_string_of_jsbytes(str_calculNombrePart_abr$0),caml_string_of_jsbytes(str_calculEquivalenc_abr),caml_string_of_jsbytes(str_calculAllocation_abr$0),caml_string_of_jsbytes(str_calculAllocation_abr$1),caml_string_of_jsbytes(str_calculAllocation_abr$2),caml_string_of_jsbytes(str_calculAllocation_abr),caml_string_of_jsbytes(str_calculAidePerson_abr$1),caml_string_of_jsbytes(str_calculAidePerson_abr),caml_string_of_jsbytes(str_calculAidePerson_abr$2),caml_string_of_jsbytes(str_calculAidePerson_abr$0),caml_string_of_jsbytes(str_baseMensuelleAll_abr)],bbu=caml_string_of_jsbytes("AidesLogementLib"),bby=caml_string_of_jsbytes(str$12);function +B=caml_string_of_jsbytes("output_substring"),w=caml_string_of_jsbytes("%.12g"),v=caml_string_of_jsbytes(str$8),t=caml_string_of_jsbytes(str_true),u=caml_string_of_jsbytes(str_false),g=caml_string_of_jsbytes("Stdlib.Exit"),l=caml_int64_create_lo_mi_hi(0,0,num_32752),n=caml_int64_create_lo_mi_hi(0,0,65520),p=caml_int64_create_lo_mi_hi(1,0,num_32752),I=caml_string_of_jsbytes(str$0),J=caml_string_of_jsbytes("\\'"),K=caml_string_of_jsbytes(str_b),L=caml_string_of_jsbytes(str_t),M=caml_string_of_jsbytes(str_n),N=caml_string_of_jsbytes(str_r),H=caml_string_of_jsbytes("Char.chr"),Z=caml_string_of_jsbytes("nth"),_=caml_string_of_jsbytes("List.nth"),X=caml_string_of_jsbytes("tl"),V=caml_string_of_jsbytes("hd"),an=caml_string_of_jsbytes("String.blit / Bytes.blit_string"),al=caml_string_of_jsbytes("Bytes.blit"),ai=caml_string_of_jsbytes("String.sub / Bytes.sub"),ax=caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"),at=caml_string_of_jsbytes(str$12),ar=caml_string_of_jsbytes("String.concat"),aE=caml_string_of_jsbytes("Array.blit"),aC=caml_string_of_jsbytes("Array.sub"),aN=caml_string_of_jsbytes("Map.remove_min_elt"),aO=[0,0,0,0],aP=[0,caml_string_of_jsbytes("map.ml"),num_400,10],aQ=[0,0,0],aJ=caml_string_of_jsbytes(str_Map_bal),aK=caml_string_of_jsbytes(str_Map_bal),aL=caml_string_of_jsbytes(str_Map_bal),aM=caml_string_of_jsbytes(str_Map_bal),aX=caml_string_of_jsbytes("Stdlib.Queue.Empty"),a1=caml_string_of_jsbytes("CamlinternalLazy.Undefined"),bd=caml_string_of_jsbytes("Buffer.add_substring/add_subbytes"),ba=caml_string_of_jsbytes("Buffer.add: cannot grow buffer"),a$=[0,caml_string_of_jsbytes(str_buffer_ml),93,2],a_=[0,caml_string_of_jsbytes(str_buffer_ml),94,2],a7=caml_string_of_jsbytes("Buffer.sub"),bv=caml_string_of_jsbytes("%c"),bw=caml_string_of_jsbytes("%s"),bx=caml_string_of_jsbytes(str_i),by=caml_string_of_jsbytes(str_li),bz=caml_string_of_jsbytes(str_ni),bA=caml_string_of_jsbytes(str_Li),bB=caml_string_of_jsbytes("%f"),bC=caml_string_of_jsbytes(str_B),bD=caml_string_of_jsbytes("%{"),bE=caml_string_of_jsbytes("%}"),bF=caml_string_of_jsbytes("%("),bG=caml_string_of_jsbytes("%)"),bH=caml_string_of_jsbytes(str_a),bI=caml_string_of_jsbytes("%t"),bJ=caml_string_of_jsbytes("%?"),bK=caml_string_of_jsbytes("%r"),bL=caml_string_of_jsbytes("%_r"),bP=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_850,23],b0=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_814,21],bS=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),815,21],b1=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_818,21],bT=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),819,21],b2=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_822,19],bU=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_823,19],b3=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),826,22],bV=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),827,22],b4=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_831,30],bW=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),832,30],bY=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_836,26],bQ=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_837,26],bZ=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),846,28],bR=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_847,28],bX=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),num_851,23],dk=caml_string_of_jsbytes(str_u),di=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1558,4],dj=caml_string_of_jsbytes("Printf: bad conversion %["),dl=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1626,39],dm=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1649,31],dn=[0,caml_string_of_jsbytes(str_camlinternalForm_abr),1650,31],dp=caml_string_of_jsbytes("Printf: bad conversion %_"),dr=caml_string_of_jsbytes(str$7),ds=caml_string_of_jsbytes(str),du=caml_string_of_jsbytes(str$7),dv=caml_string_of_jsbytes(str),dz=[0,[11,caml_string_of_jsbytes("invalid box description "),[3,0,0]],caml_string_of_jsbytes("invalid box description %S")],dx=caml_string_of_jsbytes(str$12),dy=[0,0,4],dA=caml_string_of_jsbytes(str$12),dB=caml_string_of_jsbytes(str_b$0),dC=caml_string_of_jsbytes("h"),dD=caml_string_of_jsbytes("hov"),dE=caml_string_of_jsbytes("hv"),dF=caml_string_of_jsbytes("v"),dc=caml_string_of_jsbytes(str_nan),da=caml_string_of_jsbytes("neg_infinity"),db=caml_string_of_jsbytes(str_infinity),c$=caml_string_of_jsbytes(str$8),c4=[0,num_103],cR=caml_string_of_jsbytes("%+nd"),cS=caml_string_of_jsbytes("% nd"),cU=caml_string_of_jsbytes("%+ni"),cV=caml_string_of_jsbytes("% ni"),cW=caml_string_of_jsbytes("%nx"),cX=caml_string_of_jsbytes("%#nx"),cY=caml_string_of_jsbytes("%nX"),cZ=caml_string_of_jsbytes("%#nX"),c0=caml_string_of_jsbytes("%no"),c1=caml_string_of_jsbytes("%#no"),cQ=caml_string_of_jsbytes("%nd"),cT=caml_string_of_jsbytes(str_ni),c2=caml_string_of_jsbytes("%nu"),cE=caml_string_of_jsbytes("%+ld"),cF=caml_string_of_jsbytes("% ld"),cH=caml_string_of_jsbytes("%+li"),cI=caml_string_of_jsbytes("% li"),cJ=caml_string_of_jsbytes("%lx"),cK=caml_string_of_jsbytes("%#lx"),cL=caml_string_of_jsbytes("%lX"),cM=caml_string_of_jsbytes("%#lX"),cN=caml_string_of_jsbytes("%lo"),cO=caml_string_of_jsbytes("%#lo"),cD=caml_string_of_jsbytes("%ld"),cG=caml_string_of_jsbytes(str_li),cP=caml_string_of_jsbytes("%lu"),cr=caml_string_of_jsbytes("%+Ld"),cs=caml_string_of_jsbytes("% Ld"),cu=caml_string_of_jsbytes("%+Li"),cv=caml_string_of_jsbytes("% Li"),cw=caml_string_of_jsbytes("%Lx"),cx=caml_string_of_jsbytes("%#Lx"),cy=caml_string_of_jsbytes("%LX"),cz=caml_string_of_jsbytes("%#LX"),cA=caml_string_of_jsbytes("%Lo"),cB=caml_string_of_jsbytes("%#Lo"),cq=caml_string_of_jsbytes("%Ld"),ct=caml_string_of_jsbytes(str_Li),cC=caml_string_of_jsbytes("%Lu"),ce=caml_string_of_jsbytes("%+d"),cf=caml_string_of_jsbytes("% d"),ch=caml_string_of_jsbytes("%+i"),ci=caml_string_of_jsbytes("% i"),cj=caml_string_of_jsbytes("%x"),ck=caml_string_of_jsbytes("%#x"),cl=caml_string_of_jsbytes("%X"),cm=caml_string_of_jsbytes("%#X"),cn=caml_string_of_jsbytes("%o"),co=caml_string_of_jsbytes("%#o"),cd=caml_string_of_jsbytes(str_d),cg=caml_string_of_jsbytes(str_i),cp=caml_string_of_jsbytes(str_u),bm=caml_string_of_jsbytes("@]"),bn=caml_string_of_jsbytes("@}"),bo=caml_string_of_jsbytes("@?"),bp=caml_string_of_jsbytes("@\n"),bq=caml_string_of_jsbytes("@."),br=caml_string_of_jsbytes("@@"),bs=caml_string_of_jsbytes("@%"),bt=caml_string_of_jsbytes("@"),b5=caml_string_of_jsbytes("CamlinternalFormat.Type_mismatch"),dQ=caml_string_of_jsbytes(str$12),dR=[0,[11,caml_string_of_jsbytes(str$9),[2,0,[2,0,0]]],caml_string_of_jsbytes(", %s%s")],eh=[0,[11,caml_string_of_jsbytes(str_Fatal_error_exc_abr),[2,0,[12,10,0]]],caml_string_of_jsbytes(str_Fatal_error_exc_abr$0)],ei=[0,[11,caml_string_of_jsbytes("Fatal error in uncaught exception handler: exception "),[2,0,[12,10,0]]],caml_string_of_jsbytes("Fatal error in uncaught exception handler: exception %s\n")],eg=caml_string_of_jsbytes("Fatal error: out of memory in uncaught exception handler"),ee=[0,[11,caml_string_of_jsbytes(str_Fatal_error_exc_abr),[2,0,[12,10,0]]],caml_string_of_jsbytes(str_Fatal_error_exc_abr$0)],d_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")],d2=caml_string_of_jsbytes("Raised at"),d3=caml_string_of_jsbytes("Re-raised at"),d4=caml_string_of_jsbytes("Raised by primitive operation at"),d5=caml_string_of_jsbytes("Called from"),d6=caml_string_of_jsbytes(" (inlined)"),d8=caml_string_of_jsbytes(str$12),d7=[0,[2,0,[12,32,[2,0,[11,caml_string_of_jsbytes(' in file "'),[2,0,[12,34,[2,0,[11,caml_string_of_jsbytes(", line "),[4,0,0,0,[11,caml_string_of_jsbytes(str_characters),partial]]]]]]]]]],caml_string_of_jsbytes('%s %s in file "%s"%s, line %d, characters %d-%d')],d9=[0,[2,0,[11,caml_string_of_jsbytes(" unknown location"),0]],caml_string_of_jsbytes("%s unknown location")],dW=caml_string_of_jsbytes("Out of memory"),dX=caml_string_of_jsbytes("Stack overflow"),dY=caml_string_of_jsbytes("Pattern matching failed"),dZ=caml_string_of_jsbytes("Assertion failed"),d0=caml_string_of_jsbytes("Undefined recursive module"),dS=[0,[12,40,[2,0,[2,0,[12,41,0]]]],caml_string_of_jsbytes("(%s%s)")],dT=caml_string_of_jsbytes(str$12),dU=caml_string_of_jsbytes(str$12),dV=[0,[12,40,[2,0,[12,41,0]]],caml_string_of_jsbytes("(%s)")],dO=[0,[4,0,0,0,0],caml_string_of_jsbytes(str_d)],dM=[0,[3,0,0],caml_string_of_jsbytes("%S")],dN=caml_string_of_jsbytes(str$16),eb=[0,caml_string_of_jsbytes(str$12),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file not found)"),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file appears to be corrupt)"),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file has wrong magic number)"),caml_string_of_jsbytes("(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)")],el=caml_string_of_jsbytes("Fun.Finally_raised: "),ej=caml_string_of_jsbytes("Stdlib.Fun.Finally_raised"),em=caml_string_of_jsbytes(str_x),bbH=caml_string_of_jsbytes("OCAMLRUNPARAM"),bbF=caml_string_of_jsbytes("CAMLRUNPARAM"),en=caml_string_of_jsbytes(str$12),fk=[3,0,3],fl=caml_string_of_jsbytes(str$8),ff=caml_string_of_jsbytes(str$4),fg=caml_string_of_jsbytes("<\/"),fh=caml_string_of_jsbytes(str$12),fb=caml_string_of_jsbytes(str$4),fc=caml_string_of_jsbytes(str$14),fd=caml_string_of_jsbytes(str$12),e9=caml_string_of_jsbytes("\n"),e5=caml_string_of_jsbytes(str$12),e6=caml_string_of_jsbytes(str$12),e7=caml_string_of_jsbytes(str$12),e8=caml_string_of_jsbytes(str$12),eS=[0,caml_string_of_jsbytes(str$12)],eK=caml_string_of_jsbytes(str$12),eL=caml_string_of_jsbytes(str$12),eM=caml_string_of_jsbytes(str$12),eN=caml_string_of_jsbytes(str$12),eH=[0,caml_string_of_jsbytes(str$12),0,caml_string_of_jsbytes(str$12)],eE=caml_string_of_jsbytes(str$12),ew=caml_string_of_jsbytes("Stdlib.Format.String_tag"),fQ=caml_string_of_jsbytes(str$12),f1=caml_string_of_jsbytes(str_E2BIG),f3=caml_string_of_jsbytes(str_EACCES),f4=caml_string_of_jsbytes(str_EAGAIN),f5=caml_string_of_jsbytes(str_EBADF),f6=caml_string_of_jsbytes(str_EBUSY),f7=caml_string_of_jsbytes(str_ECHILD),f8=caml_string_of_jsbytes(str_EDEADLK),f9=caml_string_of_jsbytes(str_EDOM),f_=caml_string_of_jsbytes(str_EEXIST),f$=caml_string_of_jsbytes(str_EFAULT),ga=caml_string_of_jsbytes(str_EFBIG),gb=caml_string_of_jsbytes(str_EINTR),gc=caml_string_of_jsbytes(str_EINVAL),gd=caml_string_of_jsbytes(str_EIO),ge=caml_string_of_jsbytes(str_EISDIR),gf=caml_string_of_jsbytes(str_EMFILE),gg=caml_string_of_jsbytes(str_EMLINK),gh=caml_string_of_jsbytes(str_ENAMETOOLONG),gi=caml_string_of_jsbytes(str_ENFILE),gj=caml_string_of_jsbytes(str_ENODEV),gk=caml_string_of_jsbytes(str_ENOENT),gl=caml_string_of_jsbytes(str_ENOEXEC),gm=caml_string_of_jsbytes(str_ENOLCK),gn=caml_string_of_jsbytes(str_ENOMEM),go=caml_string_of_jsbytes(str_ENOSPC),gp=caml_string_of_jsbytes(str_ENOSYS),gq=caml_string_of_jsbytes(str_ENOTDIR),gr=caml_string_of_jsbytes(str_ENOTEMPTY),gs=caml_string_of_jsbytes(str_ENOTTY),gt=caml_string_of_jsbytes(str_ENXIO),gu=caml_string_of_jsbytes(str_EPERM),gv=caml_string_of_jsbytes(str_EPIPE),gw=caml_string_of_jsbytes(str_ERANGE),gx=caml_string_of_jsbytes(str_EROFS),gy=caml_string_of_jsbytes(str_ESPIPE),gz=caml_string_of_jsbytes(str_ESRCH),gA=caml_string_of_jsbytes(str_EXDEV),gB=caml_string_of_jsbytes(str_EWOULDBLOCK),gC=caml_string_of_jsbytes(str_EINPROGRESS),gD=caml_string_of_jsbytes(str_EALREADY),gE=caml_string_of_jsbytes(str_ENOTSOCK),gF=caml_string_of_jsbytes(str_EDESTADDRREQ),gG=caml_string_of_jsbytes(str_EMSGSIZE),gH=caml_string_of_jsbytes(str_EPROTOTYPE),gI=caml_string_of_jsbytes(str_ENOPROTOOPT),gJ=caml_string_of_jsbytes(str_EPROTONOSUPPORT),gK=caml_string_of_jsbytes(str_ESOCKTNOSUPPORT),gL=caml_string_of_jsbytes(str_EOPNOTSUPP),gM=caml_string_of_jsbytes(str_EPFNOSUPPORT),gN=caml_string_of_jsbytes(str_EAFNOSUPPORT),gO=caml_string_of_jsbytes(str_EADDRINUSE),gP=caml_string_of_jsbytes(str_EADDRNOTAVAIL),gQ=caml_string_of_jsbytes(str_ENETDOWN),gR=caml_string_of_jsbytes(str_ENETUNREACH),gS=caml_string_of_jsbytes(str_ENETRESET),gT=caml_string_of_jsbytes(str_ECONNABORTED),gU=caml_string_of_jsbytes(str_ECONNRESET),gV=caml_string_of_jsbytes(str_ENOBUFS),gW=caml_string_of_jsbytes(str_EISCONN),gX=caml_string_of_jsbytes(str_ENOTCONN),gY=caml_string_of_jsbytes(str_ESHUTDOWN),gZ=caml_string_of_jsbytes(str_ETOOMANYREFS),g0=caml_string_of_jsbytes(str_ETIMEDOUT),g1=caml_string_of_jsbytes(str_ECONNREFUSED),g2=caml_string_of_jsbytes(str_EHOSTDOWN),g3=caml_string_of_jsbytes(str_EHOSTUNREACH),g4=caml_string_of_jsbytes(str_ELOOP),g5=caml_string_of_jsbytes(str_EOVERFLOW),g6=[0,[11,caml_string_of_jsbytes("EUNKNOWNERR "),[4,0,0,0,0]],caml_string_of_jsbytes("EUNKNOWNERR %d")],f2=[0,[11,caml_string_of_jsbytes("Unix.Unix_error(Unix."),[2,0,[11,caml_string_of_jsbytes(str$9),[3,0,[11,caml_string_of_jsbytes(str$9),[3,0,[12,41,0]]]]]]],caml_string_of_jsbytes("Unix.Unix_error(Unix.%s, %S, %S)")],fW=caml_string_of_jsbytes(str_Unix_Unix_error),fY=caml_string_of_jsbytes(str$12),fZ=caml_string_of_jsbytes(str$12),f0=caml_string_of_jsbytes(str_Unix_Unix_error),g7=caml_string_of_jsbytes("0.0.0.0"),g8=caml_string_of_jsbytes("127.0.0.1"),bbE=caml_string_of_jsbytes("::"),bbD=caml_string_of_jsbytes("::1"),hB=caml_string_of_jsbytes(str$12),hE=caml_string_of_jsbytes(str$12),hW=caml_string_of_jsbytes("Str.matched_group"),hO=[0,92],hQ=caml_string_of_jsbytes("\\( group not closed by \\)"),hP=[0,caml_string_of_jsbytes(str_str_ml),521,10],hR=caml_string_of_jsbytes("[ class not closed by ]"),hS=caml_string_of_jsbytes("spurious \\) in regular expression"),hJ=caml_string_of_jsbytes("too many r* or r+ where r is nullable"),hK=caml_string_of_jsbytes(str$12),hL=caml_string_of_jsbytes(str$12),hG=[0,caml_string_of_jsbytes(str_str_ml),214,11],ia=[0,caml_string_of_jsbytes(str_src_time_Zone_ml),52,4],h$=[0,caml_string_of_jsbytes(str_src_time_Zone_ml),58,34],h9=caml_string_of_jsbytes("Not a valid time zone"),k9=caml_string_of_jsbytes("Not a month"),k7=caml_string_of_jsbytes("Not a day"),k4=caml_string_of_jsbytes("from_business: bad week"),k5=caml_string_of_jsbytes("from_business: bad date"),jR=[0,caml_string_of_jsbytes(str_src_date_ml),num_119,4],jQ=[0,caml_string_of_jsbytes(str_src_date_ml),num_122,4],jI=[0,-4713,12,31],jJ=[0,num_3268,1,23],jK=[0,num_1582,10,14],jL=[0,num_1582,10,5],jC=caml_string_of_jsbytes("Date.Out_of_bounds"),jE=caml_string_of_jsbytes("Date.Undefined"),ko=caml_string_of_jsbytes("Date.Period.Not_computable"),kA=[0,31,59,90,num_120,num_151,num_181,212,243,num_273,304,num_334,num_365],lc=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),num_429,6],lb=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),230,4],la=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),num_167,6],k$=[0,caml_string_of_jsbytes(str_src_calendar_bui_abr),67,4],mM=caml_string_of_jsbytes("seconds_since_1970"),mJ=caml_string_of_jsbytes("second"),mH=caml_string_of_jsbytes("minute"),mF=caml_string_of_jsbytes("hour"),mB=caml_string_of_jsbytes("date"),mx=caml_string_of_jsbytes("Cannot create the "),mo=caml_string_of_jsbytes("%j (year not provided)"),ma=caml_string_of_jsbytes("%:"),l$=caml_string_of_jsbytes("%::::"),mv=[0,caml_string_of_jsbytes(str_src_printer_ml),402,6],mb=caml_string_of_jsbytes(str_z$0),mc=caml_string_of_jsbytes(":::z"),md=caml_string_of_jsbytes(str_z$2),me=caml_string_of_jsbytes(str_z),mf=[0,caml_string_of_jsbytes(str_src_printer_ml),509,12],mg=caml_string_of_jsbytes("am"),mh=caml_string_of_jsbytes("pm"),mi=caml_string_of_jsbytes(str$2),mj=caml_string_of_jsbytes(str$2),mk=caml_string_of_jsbytes("%P"),ml=caml_string_of_jsbytes("%V"),mm=caml_string_of_jsbytes("%W"),mn=caml_string_of_jsbytes("%j"),mu=caml_string_of_jsbytes("%w"),l_=caml_string_of_jsbytes(str$6),mp=caml_string_of_jsbytes(str_AM),mq=caml_string_of_jsbytes(str_PM),mr=caml_string_of_jsbytes(str$2),ms=caml_string_of_jsbytes(str$2),mt=caml_string_of_jsbytes("%p"),mw=[0,caml_string_of_jsbytes(str_src_printer_ml),num_513,6],l6=caml_string_of_jsbytes("[\\+-]"),l7=caml_string_of_jsbytes(str$11),l8=caml_string_of_jsbytes(str$13),l9=[0,caml_string_of_jsbytes(str_src_printer_ml),num_396,8],l4=caml_string_of_jsbytes(" (either week or year is not provided)"),l5=caml_string_of_jsbytes("[0-9][0-9]\\(\\.[0-9]*\\)?"),l2=[0,caml_string_of_jsbytes(str_src_printer_ml),283,6],l1=caml_string_of_jsbytes("z\\|:z\\|::z"),lX=caml_string_of_jsbytes(str_z$2),lY=caml_string_of_jsbytes(str_z),lZ=caml_string_of_jsbytes(str_z$0),l0=[0,caml_string_of_jsbytes(str_src_printer_ml),num_278,13],lW=caml_string_of_jsbytes(str$6),l3=[0,caml_string_of_jsbytes(str_src_printer_ml),num_297,6],lV=caml_string_of_jsbytes(str_AM),lU=caml_string_of_jsbytes(str_PM),lL=caml_string_of_jsbytes(" does not match the format "),lJ=caml_string_of_jsbytes("bad format: "),lH=[0,caml_string_of_jsbytes(str_src_printer_ml),81,2],ls=caml_string_of_jsbytes("January"),lt=caml_string_of_jsbytes("February"),lu=caml_string_of_jsbytes("March"),lv=caml_string_of_jsbytes("April"),lw=caml_string_of_jsbytes("May"),lx=caml_string_of_jsbytes("June"),ly=caml_string_of_jsbytes("July"),lz=caml_string_of_jsbytes("August"),lA=caml_string_of_jsbytes("September"),lB=caml_string_of_jsbytes("October"),lC=caml_string_of_jsbytes("November"),lD=caml_string_of_jsbytes("December"),lj=caml_string_of_jsbytes("Sunday"),lk=caml_string_of_jsbytes("Monday"),ll=caml_string_of_jsbytes("Tuesday"),lm=caml_string_of_jsbytes("Wednesday"),ln=caml_string_of_jsbytes("Thursday"),lo=caml_string_of_jsbytes("Friday"),lp=caml_string_of_jsbytes("Saturday"),lN=caml_string_of_jsbytes("%b"),lO=caml_string_of_jsbytes(str_B),lP=caml_string_of_jsbytes("%A"),lR=caml_string_of_jsbytes("[a-zA-Z]+"),mD=caml_string_of_jsbytes(str_i),m3=caml_int64_create_lo_mi_hi(1,0,0),mO=caml_string_of_jsbytes("Z.Overflow"),mP=caml_string_of_jsbytes(str_ml_z_overflow),nm=caml_string_of_jsbytes(str$12),nn=caml_string_of_jsbytes("+inf"),no=caml_string_of_jsbytes("-inf"),np=caml_string_of_jsbytes(str_inf),nq=caml_string_of_jsbytes("undef"),ns=[0,caml_string_of_jsbytes("q.ml"),486,25],nr=caml_string_of_jsbytes("Q.of_string: invalid digit"),ng=caml_string_of_jsbytes(str_impossible_case),nf=caml_string_of_jsbytes(str_impossible_case),od=[0,caml_string_of_jsbytes(str_lib_read_mll),72,32],oa=[0,caml_string_of_jsbytes(str_lib_read_mll),72,32],n$=caml_string_of_jsbytes(str$12),n2=caml_string_of_jsbytes("NaN value not allowed in standard JSON"),n3=[0,[8,[0,0,3],0,[0,16],0],caml_string_of_jsbytes(str_16g)],n5=[0,[8,[0,0,3],0,[0,17],0],caml_string_of_jsbytes(str_17g)],n4=caml_string_of_jsbytes(str_0$0),n0=caml_string_of_jsbytes("Infinity value not allowed in standard JSON"),n1=caml_string_of_jsbytes("-Infinity value not allowed in standard JSON"),nW=caml_string_of_jsbytes("NaN"),nX=[0,[8,[0,0,3],0,[0,16],0],caml_string_of_jsbytes(str_16g)],nZ=[0,[8,[0,0,3],0,[0,17],0],caml_string_of_jsbytes(str_17g)],nY=caml_string_of_jsbytes(str_0$0),nU=caml_string_of_jsbytes("Infinity"),nV=caml_string_of_jsbytes("-Infinity"),nP=caml_string_of_jsbytes(str_true),nQ=caml_string_of_jsbytes(str_false),nN=caml_string_of_jsbytes("null"),nF=caml_string_of_jsbytes(str_b),nG=caml_string_of_jsbytes(str_t),nH=caml_string_of_jsbytes(str_n),nI=caml_string_of_jsbytes("\\f"),nJ=caml_string_of_jsbytes(str_r),nK=caml_string_of_jsbytes('\\"'),nE=caml_string_of_jsbytes(str$0),nD=[0,[11,caml_string_of_jsbytes("src="),[3,0,[11,caml_string_of_jsbytes(" start="),[4,3,0,0,[11,caml_string_of_jsbytes(" len="),[4,3,0,0,[12,10,[10,0]]]]]]]],caml_string_of_jsbytes("src=%S start=%i len=%i\n%!")],nB=caml_string_of_jsbytes("\\u00"),nw=[0,caml_string_of_jsbytes(str_lib_read_mll),72,32],nt=caml_string_of_jsbytes("Yojson.Json_error"),ny=[0,caml_string_of_jsbytes(str_abr$1),caml_string_of_jsbytes(str_abr$2),caml_string_of_jsbytes(str_abr),caml_string_of_jsbytes(str_abr$3),caml_string_of_jsbytes(str_abr$0),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12)],oc=[0,caml_string_of_jsbytes(str_abr$1),caml_string_of_jsbytes(str_abr$2),caml_string_of_jsbytes(str_abr),caml_string_of_jsbytes(str_abr$3),caml_string_of_jsbytes(str_abr$0),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12)],of=[0,caml_string_of_jsbytes(str_abr$1),caml_string_of_jsbytes(str_abr$2),caml_string_of_jsbytes(str_abr),caml_string_of_jsbytes(str_abr$3),caml_string_of_jsbytes(str_abr$0),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12),caml_string_of_jsbytes(str$12)],pY=caml_string_of_jsbytes("unreachable due to the [is_subscope_call] test"),p0=caml_string_of_jsbytes("unreachable due to the [is_subscope_input_var_def] test"),p1=caml_string_of_jsbytes("]"),p2=caml_string_of_jsbytes("["),p3=caml_string_of_jsbytes(" ]): expected variable definition (function output), found: "),p4=caml_string_of_jsbytes(str$9),p5=caml_string_of_jsbytes(str_Invalid_function_abr),p6=caml_string_of_jsbytes(" ]): expected variable definition (function output), found: end of tokens"),p7=caml_string_of_jsbytes(str$9),p8=caml_string_of_jsbytes(str_Invalid_function_abr),pZ=caml_string_of_jsbytes("Unexpected event: "),p_=caml_string_of_jsbytes("Missing function output variable definition."),p9=caml_string_of_jsbytes("Invalid start of function call."),pX=caml_string_of_jsbytes(str_input),pW=caml_string_of_jsbytes(str_output),p$=[0,[11,caml_string_of_jsbytes("An error occurred while parsing raw events: "),[2,0,[12,10,0]]],caml_string_of_jsbytes("An error occurred while parsing raw events: %s\n")],pM=caml_string_of_jsbytes(str$10),pN=caml_string_of_jsbytes(str$9),pO=[0,[11,caml_string_of_jsbytes(str_BeginCall),0],caml_string_of_jsbytes(str_BeginCall)],pP=caml_string_of_jsbytes(str$10),pQ=caml_string_of_jsbytes(str$9),pR=[0,[11,caml_string_of_jsbytes(str_EndCall),0],caml_string_of_jsbytes(str_EndCall)],pS=caml_string_of_jsbytes(str$9),pT=[0,[11,caml_string_of_jsbytes("VariableDefinition([ "),[2,0,[11,caml_string_of_jsbytes(" ], "),[2,0,[12,41,0]]]]],caml_string_of_jsbytes("VariableDefinition([ %s ], %s)")],pU=[0,[11,caml_string_of_jsbytes(str_DecisionTaken),0],caml_string_of_jsbytes(str_DecisionTaken)],pm=[0,num_976970511,caml_string_of_jsbytes("VarComputation")],pn=[0,num_976970511,caml_string_of_jsbytes("FunCall")],po=caml_string_of_jsbytes(str_body),pp=caml_string_of_jsbytes("inputs"),pq=caml_string_of_jsbytes(str_name),pr=[0,num_976970511,caml_string_of_jsbytes("SubScopeCall")],ps=caml_string_of_jsbytes("fun_calls"),pt=caml_string_of_jsbytes("value"),pu=caml_string_of_jsbytes(str_name),pv=caml_string_of_jsbytes("pos"),pw=caml_string_of_jsbytes(str_output),px=caml_string_of_jsbytes(str_body),py=caml_string_of_jsbytes(str_input),pz=caml_string_of_jsbytes("fun_name"),o1=[0,num_848054398,[0,[0,num_976970511,caml_string_of_jsbytes("Unit")],0]],o2=[0,num_848054398,[0,[0,num_976970511,caml_string_of_jsbytes("Unembeddable")],0]],o3=[0,num_976970511,caml_string_of_jsbytes("Bool")],o4=[0,num_976970511,caml_string_of_jsbytes("Money")],o5=[0,num_976970511,caml_string_of_jsbytes("Integer")],o6=[0,num_976970511,caml_string_of_jsbytes("Decimal")],o7=[0,num_976970511,caml_string_of_jsbytes("Date")],o8=[0,num_976970511,caml_string_of_jsbytes("Duration")],o9=[0,num_976970511,caml_string_of_jsbytes("Enum")],o_=[0,num_976970511,caml_string_of_jsbytes("Struct")],o$=[0,num_976970511,caml_string_of_jsbytes("Array")],oX=[0,[12,44,[17,[0,caml_string_of_jsbytes("@ "),1,0],0]],caml_string_of_jsbytes(",@ ")],oW=[0,[4,0,0,0,[12,32,[2,0,0]]],caml_string_of_jsbytes("%d %s")],oT=caml_string_of_jsbytes("days"),oU=caml_string_of_jsbytes("months"),oV=caml_string_of_jsbytes("years"),oY=[0,[15,0],caml_string_of_jsbytes(str_a)],oZ=caml_string_of_jsbytes("empty duration"),ol=caml_string_of_jsbytes("law_headings"),om=caml_string_of_jsbytes("end_column"),on=caml_string_of_jsbytes("end_line"),oo=caml_string_of_jsbytes("start_column"),op=caml_string_of_jsbytes("start_line"),oq=caml_string_of_jsbytes("filename"),or=caml_string_of_jsbytes("Runtime_ocaml.Runtime.EmptyError"),ot=caml_string_of_jsbytes("Runtime_ocaml.Runtime.AssertionFailed"),ov=caml_string_of_jsbytes("Runtime_ocaml.Runtime.ConflictError"),ox=caml_string_of_jsbytes("Runtime_ocaml.Runtime.UncomparableDurations"),oz=caml_string_of_jsbytes("Runtime_ocaml.Runtime.ImpossibleDate"),oB=caml_string_of_jsbytes("Runtime_ocaml.Runtime.NoValueProvided"),qD=caml_string_of_jsbytes("Jsoo_runtime.Error.Exn"),qF=caml_string_of_jsbytes(str_jsError),q6=[0,[2,0,[11,caml_string_of_jsbytes(" in file "),[2,0,[11,caml_string_of_jsbytes(", position "),[4,0,0,0,[12,58,[4,0,0,0,[11,caml_string_of_jsbytes("--"),[4,0,0,0,[12,58,partial$0]]]]]]]]]],caml_string_of_jsbytes("%s in file %s, position %d:%d--%d:%d.")],q7=caml_string_of_jsbytes("No rule applies in the given context to give a value to the variable"),q8=caml_string_of_jsbytes("A conflict happend between two rules giving a value to the variable"),q9=caml_string_of_jsbytes("A failure happened in the assertion"),qY=caml_string_of_jsbytes("Begin call"),qZ=caml_string_of_jsbytes("End call"),q0=caml_string_of_jsbytes("Variable definition"),q1=caml_string_of_jsbytes("Decision taken"),qW=caml_string_of_jsbytes(str$12),qS=caml_string_of_jsbytes("date_of_jsoo: invalid date"),qO=[0,caml_string_of_jsbytes(str_retrieveRawEvents),caml_string_of_jsbytes(str_retrieveEvents),caml_string_of_jsbytes(str_resetLog)],qP=[0,caml_string_of_jsbytes(str_retrieveRawEvents),caml_string_of_jsbytes(str_resetLog),caml_string_of_jsbytes(str_retrieveEvents)],Fs=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),89,14,89,29,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),num_100,18,num_100,64,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fm=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),86,14,86,53,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),85,14,85,50,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),88,14,88,46,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),87,14,87,54,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E1=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),96,18,96,72,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),92,18,92,67,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),num_116,14,num_116,30,[0,caml_string_of_jsbytes("Article L131-1"),[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]]],EN=[0,0],EO=[1,0],EP=[2,0],ER=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),75,11,75,27,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),75,11,75,27,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],ES=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("enfants_\xc3\xa0_charge"),0]],EX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],EY=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.personne_charge_effective_permanente_est_parent"),0]],ET=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),85,10,85,57,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],E3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E4=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.personne_charge_effective_permanente_remplit_titre_I"),0]],EZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),86,10,86,62,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],E7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],E8=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.ressources_m\xc3\xa9nage"),0]],E5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),87,10,87,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],E$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fa=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.r\xc3\xa9sidence"),0]],E9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),88,10,88,19,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fe=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.date_courante"),0]],Fb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),91,10,91,23,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fi=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.enfants_\xc3\xa0_charge"),0]],Ff=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),94,10,94,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),76,3,76,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fo=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("allocations_familiales.avait_enfant_\xc3\xa0_charge_avant_1er_janvier_2012"),0]],Fj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_115,10,num_115,54,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Fp=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes(str_allocations_fami_abr),[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),0]]],Fq=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes(str_allocations_fami_abr),[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),0]]],Ft=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),79,10,79,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),79,10,79,25,[0,caml_string_of_jsbytes(str_Interface_du_pro_abr),[0,caml_string_of_jsbytes(str_pilogue),0]]],Fu=[0,caml_string_of_jsbytes(str_InterfaceAllocat_abr),[0,caml_string_of_jsbytes("i_montant_vers\xc3\xa9"),0]],EH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),44,14,44,27,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],EG=caml_string_of_jsbytes(str_0$1),EC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_183,14,num_183,62,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ex=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),[0,caml_string_of_jsbytes(str_input),0]]],Ey=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),0]],Ez=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),[0,caml_string_of_jsbytes(str_output),0]]],EA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),0]],EB=caml_string_of_jsbytes(str_0$1),Et=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_189,14,num_189,61,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ep=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),38,14,38,38,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],Ek=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),[0,caml_string_of_jsbytes(str_input),0]]],El=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),0]],Em=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),[0,caml_string_of_jsbytes(str_output),0]]],En=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),0]],Ej=caml_string_of_jsbytes(str_0$1),Eo=caml_string_of_jsbytes(str_0$1),Ef=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),36,14,36,32,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],Ee=caml_string_of_jsbytes(str_0$1),Ea=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_188,5,num_188,43,[0,caml_string_of_jsbytes("Article R521-4"),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],D1=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_input),0]]],D2=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],D3=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_output),0]]],D4=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],D5=caml_string_of_jsbytes(str_1),D_=caml_string_of_jsbytes(str_0_5),D$=caml_string_of_jsbytes(str_0),D6=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),[0,caml_string_of_jsbytes(str_input),0]]],D7=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),0]],D8=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),[0,caml_string_of_jsbytes(str_output),0]]],D9=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),0]],Eb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_128,11,num_128,49,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],D0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_128,11,num_128,49,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_125,14,num_125,46,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DQ=caml_string_of_jsbytes(str_12),DR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_267,5,num_269,42,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DN=caml_string_of_jsbytes(str_12),DO=caml_string_of_jsbytes(str_1),DP=caml_string_of_jsbytes(str_12),DS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DK=caml_string_of_jsbytes(str_12),DL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),277,5,num_279,41,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DH=caml_string_of_jsbytes(str_12),DI=caml_string_of_jsbytes(str_1),DJ=caml_string_of_jsbytes(str_12),DM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_285,14,num_285,55,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],DF=caml_string_of_jsbytes(str_0$1),Du=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],Dv=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Dw=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],Dx=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Dy=caml_string_of_jsbytes(str_1$0),Dz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_378,5,num_382,57,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Dt=caml_string_of_jsbytes("0.0369"),DA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Dm=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],Dn=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Do=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],Dp=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Dq=caml_string_of_jsbytes(str_1$0),Dr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),388,5,391,58,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Dl=caml_string_of_jsbytes("0.0567"),Ds=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Dk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),22,14,22,40,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Dg=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],Dh=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),0]],Di=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],Dj=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),0]],DC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Df=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_127,11,num_127,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C$=caml_string_of_jsbytes(str_1$0),Da=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),355,5,356,69,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Db=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C8=[8,0],C9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_151,24,num_151,44,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],C_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Dc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),18,14,18,34,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],C3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_199,14,num_199,39,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],CY=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),[0,caml_string_of_jsbytes(str_input),0]]],CZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),0]],C0=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),[0,caml_string_of_jsbytes(str_output),0]]],C1=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),0]],C2=caml_string_of_jsbytes(str_1$0),CX=caml_string_of_jsbytes(str_0$1),CO=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],CP=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CQ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],CR=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),60,5,60,38,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],CN=caml_string_of_jsbytes(str_0_16),CT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CH=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],CI=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CJ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],CK=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_101,5,num_101,38,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],CG=caml_string_of_jsbytes(str_0_08),CM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],CB=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CC=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],CD=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],CE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_138,5,num_138,38,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Cz=caml_string_of_jsbytes(str_0_04),CF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ct=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_input),0]]],Cu=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Cv=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),[0,caml_string_of_jsbytes(str_output),0]]],Cw=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],Cx=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),27,5,27,44,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],Cs=caml_string_of_jsbytes(str_0$1),Cy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Cr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_126,11,num_126,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Co=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_128,14,num_128,41,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Cm=caml_string_of_jsbytes(str_0),Cn=caml_string_of_jsbytes(str_0),Ce=[8,0],Cf=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_350,5,num_350,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Cb=caml_string_of_jsbytes(str_1$0),Cc=caml_string_of_jsbytes(str_0_232),Cd=caml_string_of_jsbytes(str_0$1),Cg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],B_=[8,0],B$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_358,5,num_358,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],B7=caml_string_of_jsbytes(str_1$0),B8=caml_string_of_jsbytes("0.2379"),B9=caml_string_of_jsbytes(str_0$1),Ca=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],B4=[8,0],B5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_366,5,num_366,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],B1=caml_string_of_jsbytes(str_1$0),B2=caml_string_of_jsbytes("0.2437"),B3=caml_string_of_jsbytes(str_0$1),B6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BY=[8,0],BZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_374,5,num_374,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BV=caml_string_of_jsbytes(str_1$0),BW=caml_string_of_jsbytes("0.2496"),BX=caml_string_of_jsbytes(str_0$1),B0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BS=[8,0],BT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_382,5,num_382,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BP=caml_string_of_jsbytes(str_1$0),BQ=caml_string_of_jsbytes("0.2555"),BR=caml_string_of_jsbytes(str_0$1),BU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BM=[8,0],BN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_390,5,num_390,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BJ=caml_string_of_jsbytes(str_1$0),BK=caml_string_of_jsbytes("0.2613"),BL=caml_string_of_jsbytes(str_0$1),BO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BG=[8,0],BH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_398,5,num_398,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],BD=caml_string_of_jsbytes(str_1$0),BE=caml_string_of_jsbytes("0.2672"),BF=caml_string_of_jsbytes(str_0$1),BI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],BA=[8,0],BB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_406,5,num_406,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Bx=caml_string_of_jsbytes(str_1$0),By=caml_string_of_jsbytes("0.2804"),Bz=caml_string_of_jsbytes(str_0$1),BC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bu=[8,0],Bv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_414,5,num_414,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Br=caml_string_of_jsbytes(str_1$0),Bs=caml_string_of_jsbytes("0.2936"),Bt=caml_string_of_jsbytes(str_0$1),Bw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bo=[8,0],Bp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_422,5,num_422,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Bl=caml_string_of_jsbytes(str_1$0),Bm=caml_string_of_jsbytes("0.3068"),Bn=caml_string_of_jsbytes(str_0$1),Bq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ch=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bj=[8,0],Bk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_177,14,num_177,50,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],Bg=caml_string_of_jsbytes(str_1$0),Bh=caml_string_of_jsbytes(str_0_32),Bi=caml_string_of_jsbytes(str_0$1),Ci=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),38,14,38,50,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ba=caml_string_of_jsbytes(str_1$0),Bb=caml_string_of_jsbytes(str_0_32),Bc=caml_string_of_jsbytes(str_0$1),Be=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),79,14,79,50,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],A7=caml_string_of_jsbytes(str_1$0),A8=caml_string_of_jsbytes(str_0_16),A9=caml_string_of_jsbytes(str_0$1),A$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_117,14,num_117,50,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],A2=caml_string_of_jsbytes(str_1$0),A3=caml_string_of_jsbytes(str_0_08),A4=caml_string_of_jsbytes(str_0$1),A6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Bf=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),43,14,43,59,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AT=caml_string_of_jsbytes(str_2),AU=caml_string_of_jsbytes(str_2),AV=caml_string_of_jsbytes("0.41"),AW=caml_string_of_jsbytes(str_0$1),AY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),84,14,84,59,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AN=caml_string_of_jsbytes(str_2),AO=caml_string_of_jsbytes(str_2),AP=caml_string_of_jsbytes("0.205"),AQ=caml_string_of_jsbytes(str_0$1),AS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_122,14,num_122,59,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AH=caml_string_of_jsbytes(str_2),AI=caml_string_of_jsbytes(str_2),AJ=caml_string_of_jsbytes("0.1025"),AK=caml_string_of_jsbytes(str_0$1),AM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_220,5,num_220,43,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],AB=caml_string_of_jsbytes("0.20234"),AD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Az=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),234,5,num_235,46,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ay=caml_string_of_jsbytes("0.10117"),AA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Aw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_248,5,num_248,43,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Av=caml_string_of_jsbytes("0.05059"),Ax=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ao=caml_string_of_jsbytes(str_12),Ap=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_165,5,166,68,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Al=caml_string_of_jsbytes(str_12),Am=caml_string_of_jsbytes(str_1),An=caml_string_of_jsbytes(str_12),Aq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ai=caml_string_of_jsbytes(str_12),Aj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),174,5,175,68,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Af=caml_string_of_jsbytes(str_12),Ag=caml_string_of_jsbytes(str_1),Ah=caml_string_of_jsbytes(str_12),Ak=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ar=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ae=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_181,14,num_181,34,[0,caml_string_of_jsbytes(str_Article_D521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],Ad=caml_string_of_jsbytes(str_0$1),As=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ac=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_134,11,num_134,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],z5=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_input),0]]],z6=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z7=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_output),0]]],z8=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_315,5,318,21,[0,caml_string_of_jsbytes(str_Article_L521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],z_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zW=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),[0,caml_string_of_jsbytes(str_input),0]]],zX=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),0]],zY=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),[0,caml_string_of_jsbytes(str_output),0]]],zZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),0]],z0=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_input),0]]],z1=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z2=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),[0,caml_string_of_jsbytes(str_output),0]]],z3=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],z4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_300,5,num_302,21,[0,caml_string_of_jsbytes(str_Article_L521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],z$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Aa=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_125,11,num_125,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zL=[8,0],zM=caml_string_of_jsbytes(str_1$0),zN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_159,6,num_159,71,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zJ=caml_string_of_jsbytes(str_1$0),zK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),409,5,410,72,[0,caml_string_of_jsbytes(str_Article_L755_12),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],zP=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zH=caml_string_of_jsbytes(str_2),zI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_101,5,num_101,70,[0,caml_string_of_jsbytes(str_Article_L521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],zR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zy=[8,0],zz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),251,5,num_252,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zv=caml_string_of_jsbytes(str_0$1),zw=caml_string_of_jsbytes("0.145"),zx=caml_string_of_jsbytes(str_0$1),zA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zs=[8,0],zt=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_260,5,261,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zp=caml_string_of_jsbytes(str_0$1),zq=caml_string_of_jsbytes("0.1393"),zr=caml_string_of_jsbytes(str_0$1),zu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zm=[8,0],zn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_269,5,num_270,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zj=caml_string_of_jsbytes(str_0$1),zk=caml_string_of_jsbytes("0.1335"),zl=caml_string_of_jsbytes(str_0$1),zo=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zg=[8,0],zh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_278,5,num_279,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],zd=caml_string_of_jsbytes(str_0$1),ze=caml_string_of_jsbytes("0.1278"),zf=caml_string_of_jsbytes(str_0$1),zi=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],za=[8,0],zb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_287,5,num_288,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],y9=caml_string_of_jsbytes(str_0$1),y_=caml_string_of_jsbytes("0.122"),y$=caml_string_of_jsbytes(str_0$1),zc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],y6=[8,0],y7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_296,5,num_297,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],y3=caml_string_of_jsbytes(str_0$1),y4=caml_string_of_jsbytes("0.1163"),y5=caml_string_of_jsbytes(str_0$1),y8=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],y0=[8,0],y1=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_305,5,306,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yX=caml_string_of_jsbytes(str_0$1),yY=caml_string_of_jsbytes("0.1105"),yZ=caml_string_of_jsbytes(str_0$1),y2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yU=[8,0],yV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_314,5,num_315,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yR=caml_string_of_jsbytes(str_0$1),yS=caml_string_of_jsbytes("0.0976"),yT=caml_string_of_jsbytes(str_0$1),yW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yO=[8,0],yP=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),323,5,num_324,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yL=caml_string_of_jsbytes(str_0$1),yM=caml_string_of_jsbytes("0.0847"),yN=caml_string_of_jsbytes(str_0$1),yQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yI=[8,0],yJ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_332,5,333,53,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yF=caml_string_of_jsbytes(str_0$1),yG=caml_string_of_jsbytes("0.0717"),yH=caml_string_of_jsbytes(str_0$1),yK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yC=[8,0],yD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_341,5,num_341,49,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yz=caml_string_of_jsbytes(str_0$1),yA=caml_string_of_jsbytes("5728"),yB=caml_string_of_jsbytes(str_0$1),yE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yx=[8,0],yy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_167,14,num_167,49,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],yu=caml_string_of_jsbytes(str_0$1),yv=caml_string_of_jsbytes(str_0_0588),yw=caml_string_of_jsbytes(str_0$1),zC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yr=caml_string_of_jsbytes(str_1$0),ys=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_364,5,num_365,71,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],yq=caml_string_of_jsbytes(str_0_0588),yt=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_361,29,num_361,64,[0,caml_string_of_jsbytes(str_Article_D755_5),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],yo=caml_string_of_jsbytes(str_0$1),yk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_142,14,num_142,34,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],yd=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_input),0]]],ye=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],yf=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),[0,caml_string_of_jsbytes(str_output),0]]],yg=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],yh=caml_string_of_jsbytes(str_1),yi=caml_string_of_jsbytes(str_0_5),yj=caml_string_of_jsbytes(str_0),yc=caml_string_of_jsbytes(str_0),x_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_162,14,num_162,34,[0,caml_string_of_jsbytes(str_Article_R521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],x3=[8,0],x4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_431,5,num_431,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],x0=caml_string_of_jsbytes(str_2),x1=caml_string_of_jsbytes(str_0_0463),x2=caml_string_of_jsbytes(str_0$1),x5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xX=[8,0],xY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_439,5,num_439,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xU=caml_string_of_jsbytes(str_2),xV=caml_string_of_jsbytes("0.0539"),xW=caml_string_of_jsbytes(str_0$1),xZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xR=[8,0],xS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_447,5,num_447,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xO=caml_string_of_jsbytes(str_2),xP=caml_string_of_jsbytes("0.0615"),xQ=caml_string_of_jsbytes(str_0$1),xT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xL=[8,0],xM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_455,5,num_455,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xI=caml_string_of_jsbytes(str_2),xJ=caml_string_of_jsbytes("0.069"),xK=caml_string_of_jsbytes(str_0$1),xN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xF=[8,0],xG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_463,5,num_463,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xC=caml_string_of_jsbytes(str_2),xD=caml_string_of_jsbytes("0.0766"),xE=caml_string_of_jsbytes(str_0$1),xH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xz=[8,0],xA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_471,5,num_471,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xw=caml_string_of_jsbytes(str_2),xx=caml_string_of_jsbytes("0.0842"),xy=caml_string_of_jsbytes(str_0$1),xB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xt=[8,0],xu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_479,5,num_479,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xq=caml_string_of_jsbytes(str_2),xr=caml_string_of_jsbytes("0.0918"),xs=caml_string_of_jsbytes(str_0$1),xv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xn=[8,0],xo=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_487,5,num_487,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xk=caml_string_of_jsbytes(str_2),xl=caml_string_of_jsbytes("0.1089"),xm=caml_string_of_jsbytes(str_0$1),xp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xh=[8,0],xi=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_495,5,num_495,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],xe=caml_string_of_jsbytes(str_2),xf=caml_string_of_jsbytes("0.1259"),xg=caml_string_of_jsbytes(str_0$1),xj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],xb=[8,0],xc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_503,5,num_503,69,[0,caml_string_of_jsbytes(str_Annexe),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],w_=caml_string_of_jsbytes(str_2),w$=caml_string_of_jsbytes("0.143"),xa=caml_string_of_jsbytes(str_0$1),xd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],x6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],w9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_186,14,num_186,59,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],w6=caml_string_of_jsbytes(str_2),w7=caml_string_of_jsbytes(str_0_16),w8=caml_string_of_jsbytes(str_0$1),w2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_195,14,num_195,67,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_D_cret_n_2002_abr),[0,caml_string_of_jsbytes(str_Dispositions_sp_abr),0]]]],wY=caml_string_of_jsbytes(str_3),wZ=caml_string_of_jsbytes(str_3),w0=caml_string_of_jsbytes(str_0_0463),w1=caml_string_of_jsbytes(str_0$1),wR=caml_string_of_jsbytes(str_1$0),wS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),423,6,424,72,[0,caml_string_of_jsbytes(str_Article_L755_12),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wM=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),[0,caml_string_of_jsbytes(str_input),0]]],wN=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],wO=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),[0,caml_string_of_jsbytes(str_output),0]]],wP=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],wQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_119,5,num_126,59,[0,caml_string_of_jsbytes(str_Article_L521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wL=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wV=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_120,11,num_120,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wE=caml_string_of_jsbytes(str_1$0),wF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_429,5,430,71,[0,caml_string_of_jsbytes(str_Article_L755_12),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),30,9,30,32,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],wH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ww=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),23,5,23,69,[0,caml_string_of_jsbytes(str_Circulaire_inter_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],wu=caml_string_of_jsbytes(str_562800),wv=caml_string_of_jsbytes("5628600"),wx=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ws=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),56,5,56,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],wq=caml_string_of_jsbytes(str_568400),wr=caml_string_of_jsbytes("5684900"),wt=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wo=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),89,5,89,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$2),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],wm=caml_string_of_jsbytes(str_577500),wn=caml_string_of_jsbytes("5775900"),wp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_116,5,num_116,69,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_Arr_t_du_14_d_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]]],wi=caml_string_of_jsbytes(str_582700),wj=caml_string_of_jsbytes("5827900"),wl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_303,14,num_303,30,[0,caml_string_of_jsbytes(str_Article_D521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],wf=caml_string_of_jsbytes(str_559500),wg=caml_string_of_jsbytes("5595000"),v$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),30,5,30,69,[0,caml_string_of_jsbytes(str_Circulaire_inter_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],v9=caml_string_of_jsbytes(str_562800),v_=caml_string_of_jsbytes("7877000"),wa=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],v7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),63,5,63,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],v5=caml_string_of_jsbytes(str_568400),v6=caml_string_of_jsbytes("7955800"),v8=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],v3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),96,5,96,69,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$2),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]],v1=caml_string_of_jsbytes(str_577500),v2=caml_string_of_jsbytes("8083100"),v4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$5),num_132,5,num_132,69,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_Arr_t_du_14_d_abr),[0,caml_string_of_jsbytes(str_Montant_des_plaf_abr),0]]]],vX=caml_string_of_jsbytes(str_582700),vY=caml_string_of_jsbytes("8155800"),v0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_313,14,num_313,31,[0,caml_string_of_jsbytes(str_Article_D521_3),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vU=caml_string_of_jsbytes(str_559500),vV=caml_string_of_jsbytes("7830000"),vQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),33,14,33,36,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],vR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_148,11,num_148,33,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vP=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_148,11,num_148,33,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),75,14,75,64,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vI=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_input),0]]],vJ=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],vK=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_output),0]]],vL=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],vD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),83,19,83,69,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_146,11,num_146,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),56,14,56,41,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],vF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_146,11,num_146,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_146,11,num_146,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),32,14,32,40,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],vq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_157,14,num_157,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vm=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_153,14,num_153,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vl=[1,0],vh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_155,14,num_155,50,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_159,14,num_159,32,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),64,14,64,44,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],u6=caml_string_of_jsbytes(str_3),u2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$3),num_293,14,num_293,35,[0,caml_string_of_jsbytes(str_Article_D521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],u1=caml_string_of_jsbytes(str_3),uW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),259,5,num_260,56,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uV=[1,0],uX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_270,5,271,48,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uP=[0,0],uR=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_219,5,num_219,70,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uN=[0,0],uS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uM=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_209,5,num_209,69,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uL=[0,0],uT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_189,5,num_189,60,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uJ=[0,0],uU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),98,11,98,20,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_215,5,num_215,70,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uD=[1,0],uF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_254,5,num_255,56,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uA=[2,0],uC=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),264,5,265,48,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uv=[0,0],ux=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_205,5,num_205,69,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ut=[0,0],uy=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],us=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),num_185,5,num_185,60,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ur=[0,0],uz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),97,11,97,26,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uH=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prise_en_compte),0]],uZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("versement"),0]],u3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_145,11,num_145,32,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u0=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_145,11,num_145,32,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u4=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_enfants_l521_1"),0]],u8=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_147,11,num_147,41,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_147,11,num_147,41,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],u9=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_enfants_alin\xc3\xa9a_2_l521_3"),0]],u_=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_version_avril_2008),[0,caml_string_of_jsbytes(str_AllocationFamili_abr),0]]],u$=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_version_avril_2008),[0,caml_string_of_jsbytes(str_AllocationFamili_abr),0]]],vc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_142,3,num_142,7,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vd=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("bmaf.date_courante"),0]],va=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),5,10,5,23,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],ve=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_bmaf),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],vf=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_bmaf),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],vi=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_139,3,num_139,25,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vj=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$0),0]],vg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),62,10,62,23,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_139,3,num_139,25,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vo=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$2),0]],vk=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),63,10,63,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_139,3,num_139,25,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vs=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$1),0]],vp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),64,10,64,19,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vt=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),0]]],vu=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),0]]],vx=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_141,3,num_141,21,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vy=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("enfant_le_plus_\xc3\xa2g\xc3\xa9.enfants"),0]],vv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),79,10,79,17,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vz=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_enfant_le_plus_abr),[0,caml_string_of_jsbytes(str_EnfantLePlus_g),0]]],vA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_enfant_le_plus_abr),[0,caml_string_of_jsbytes(str_EnfantLePlus_g),0]]],vG=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],vN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),95,11,95,61,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vH=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),95,11,95,61,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vO=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("enfants_\xc3\xa0_charge_droit_ouvert_prestation_familiale"),0]],vS=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_est_enfant_le_pl_abr),0]],wc=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],vT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_150,11,num_150,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wd=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("plafond_II_d521_3"),0]],wz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],we=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_149,11,num_149,27,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wA=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("plafond_I_d521_3"),0]],wI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_132,11,num_132,34,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wJ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("droit_ouvert_compl\xc3\xa9ment"),0]],wW=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_for_abr),0]],w3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_117,11,num_117,64,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],wX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_117,11,num_117,64,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],w4=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_quatri\xc3\xa8me_enfant_et_plus_mayotte"),0]],x7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],w5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_116,11,num_116,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],x8=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_troisi\xc3\xa8me_enfant_mayotte"),0]],x$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_110,11,num_110,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],x9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_110,11,num_110,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ya=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_total_enfants"),0]],yl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_109,11,num_109,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yb=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_109,11,num_109,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ym=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("nombre_moyen_enfants"),0]],zD=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],yn=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_105,11,num_105,46,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zE=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_premier_enfant"),0]],zS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_103,11,num_103,28,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],zT=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("droit_ouvert_base"),0]],Ab=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert_maj_abr),0]],At=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_compl_ment_d_g_abr),0]],AE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Au=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_121,11,num_121,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AF=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_forfaitaire_par_enfant"),0]],AZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],AG=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_107,11,num_107,56,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A0=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_troisi\xc3\xa8me_enfant_et_plus"),0]],Cj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],A1=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_106,11,num_106,47,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ck=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base_deuxi\xc3\xa8me_enfant"),0]],Cp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_108,11,num_108,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Cl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_108,11,num_108,38,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Cq=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("rapport_enfants_total_moyen"),0]],CV=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr$0),0]],C4=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_122,11,num_122,36,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],CW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_122,11,num_122,36,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C5=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_forfaitaire"),0]],Dd=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],C6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_104,11,num_104,31,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],De=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_initial_base"),0]],DD=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_initial_abr),0]],DU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_136,11,num_136,52,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DV=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_forfaitaire"),0]],DY=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_111,11,num_111,43,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_111,11,num_111,43,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],DZ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_avec_garde_altern\xc3\xa9e_base"),0]],Ec=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes(str_montant_avec_gar_abr),0]],Eg=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_112,11,num_112,29,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ed=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_112,11,num_112,29,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Eh=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_base"),0]],Eq=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_129,11,num_129,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ei=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_129,11,num_129,35,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Er=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_majoration"),0]],Eu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_133,11,num_133,58,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Es=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_133,11,num_133,58,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ev=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_base_compl\xc3\xa9ment_pour_base_et_majoration"),0]],ED=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_135,11,num_135,59,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],Ew=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_135,11,num_135,59,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],EE=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9_compl\xc3\xa9ment_pour_base_et_majoration"),0]],EI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_100,10,num_100,23,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],EF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),num_100,10,num_100,23,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],EJ=[0,caml_string_of_jsbytes(str_AllocationsFamil_abr),[0,caml_string_of_jsbytes("montant_vers\xc3\xa9"),0]],EK=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),231,5,num_235,6,[0,caml_string_of_jsbytes(str_Article_L521_2),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uk=[0,caml_string_of_jsbytes("examples/allocations_familiales/autres_codes.catala_fr"),24,5,24,63,[0,caml_string_of_jsbytes("Article L821-3"),[0,caml_string_of_jsbytes(str_Sous_section_1_abr$0),[0,caml_string_of_jsbytes(str_Section_2_R_g_abr),[0,caml_string_of_jsbytes(str_Chapitre_Ier_P_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ul=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ug=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),60,5,62,64,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],uh=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uf=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),49,5,50,50,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ui=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],uj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],um=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ue=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],un=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ud=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),57,10,57,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t$=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),68,5,71,57,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],ua=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t_=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],ub=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t9=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),58,10,58,29,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t5=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),num_217,18,num_217,41,[0,caml_string_of_jsbytes(str_Article_R755_0_2),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],t3=caml_string_of_jsbytes(str_169),t4=caml_string_of_jsbytes(str_0_55),t6=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),59,11,59,27,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),31,14,31,30,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],t0=caml_string_of_jsbytes(str_169),t1=caml_string_of_jsbytes(str_0_55),tP=[0,0],tR=[1,0],tS=[2,0],tT=[3,0],tU=[4,0],tV=[5,0],tQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$1),357,5,362,30,[0,caml_string_of_jsbytes(str_Article_L751_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_G_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],tW=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tO=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tI=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),68,14,68,28,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tE=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),69,14,69,32,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tA=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),21,14,21,26,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],tB=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),60,10,60,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tz=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),60,10,60,22,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tC=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_ge_l512_3_2),0]],tF=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),65,3,65,7,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tG=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic_date_courante),0]],tD=[0,caml_string_of_jsbytes(str_examples_allocat_abr),9,10,9,23,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],tJ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),65,3,65,7,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tK=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic_r_sidence),0]],tH=[0,caml_string_of_jsbytes(str_examples_allocat_abr),10,10,10,19,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],tL=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],tM=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],tX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tN=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),61,10,61,33,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tY=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_r_gime_outre_me_abr),0]],t7=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),59,11,59,27,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],tZ=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),59,11,59,27,[0,caml_string_of_jsbytes(str_Prestations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],t8=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_plafond_l512_3_2),0]],uc=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],uo=[0,caml_string_of_jsbytes(str_PrestationsFamil_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],tu=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),28,5,29,34,[0,caml_string_of_jsbytes(str_Instruction_mini_abr),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tt=caml_string_of_jsbytes(str_41316),tv=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tr=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),48,5,49,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$1),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tq=caml_string_of_jsbytes(str_41440),ts=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],to=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),64,5,65,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$3),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tn=caml_string_of_jsbytes(str_41481),tp=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tl=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),82,5,83,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$0),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],tk=caml_string_of_jsbytes(str_42228),tm=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tw=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tj=[0,caml_string_of_jsbytes(str_examples_allocat_abr$0),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],tx=[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),[0,caml_string_of_jsbytes(str_montant),0]],s8=[6,0],s_=[0,0],s$=[1,0],ta=[2,0],tb=[3,0],tc=[4,0],td=[5,0],te=[7,0],s9=[0,caml_string_of_jsbytes(str_examples_allocat_abr),29,5,38,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],s7=caml_string_of_jsbytes(str_1003),tf=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],s4=[8,0],s5=[0,caml_string_of_jsbytes(str_examples_allocat_abr),47,5,49,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],s3=caml_string_of_jsbytes(str_757),s6=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sT=[6,0],sV=[0,0],sW=[1,0],sX=[2,0],sY=[3,0],sZ=[4,0],s0=[5,0],s1=[7,0],sU=[0,caml_string_of_jsbytes(str_examples_allocat_abr),68,5,77,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sS=caml_string_of_jsbytes(str_1015),s2=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sP=[8,0],sQ=[0,caml_string_of_jsbytes(str_examples_allocat_abr),86,5,88,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sO=caml_string_of_jsbytes(str_766),sR=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sE=[6,0],sG=[0,0],sH=[1,0],sI=[2,0],sJ=[3,0],sK=[4,0],sL=[5,0],sM=[7,0],sF=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_107,5,num_116,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sD=caml_string_of_jsbytes(str_1025),sN=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sA=[8,0],sB=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_125,5,num_127,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sz=caml_string_of_jsbytes(str_774),sC=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sp=[6,0],sr=[0,0],ss=[1,0],st=[2,0],su=[3,0],sv=[4,0],sw=[5,0],sx=[7,0],sq=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_146,5,num_155,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],so=caml_string_of_jsbytes(str_1057),sy=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sl=[8,0],sm=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_165,5,num_167,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],sk=caml_string_of_jsbytes(str_798),sn=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],sa=[6,0],sc=[0,0],sd=[1,0],se=[2,0],sf=[3,0],sg=[4,0],sh=[5,0],si=[7,0],sb=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_186,5,num_195,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],r$=caml_string_of_jsbytes(str_1085),sj=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],r8=[8,0],r9=[0,caml_string_of_jsbytes(str_examples_allocat_abr),num_204,5,num_206,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],r7=caml_string_of_jsbytes(str_819),r_=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],tg=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],r6=[0,caml_string_of_jsbytes(str_examples_allocat_abr),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],th=[0,caml_string_of_jsbytes(str_Smic),[0,caml_string_of_jsbytes(str_brut_horaire),0]],r2=[0,caml_string_of_jsbytes(str_examples_allocat_abr$4),12,14,12,25,[0,caml_string_of_jsbytes(str_R_gles_diverses),[0,caml_string_of_jsbytes(str_pilogue),0]]],rY=[2,0],rZ=caml_string_of_jsbytes(str_0$1),r0=[1,0],r1=caml_string_of_jsbytes("-1"),r3=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),80,10,80,21,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],rX=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),80,10,80,21,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],r4=[0,caml_string_of_jsbytes(str_EnfantLePlus_g),[0,caml_string_of_jsbytes("le_plus_\xc3\xa2g\xc3\xa9"),0]],rT=[0,caml_string_of_jsbytes(str_examples_allocat_abr$6),78,14,78,41,[0,caml_string_of_jsbytes(str_Article_R521_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_A_abr),[0,caml_string_of_jsbytes(str_Titre_2_Presta_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],rU=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),76,10,76,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],rS=[0,caml_string_of_jsbytes(str_examples_allocat_abr$2),76,10,76,37,[0,caml_string_of_jsbytes(str_Allocations_fami_abr),[0,caml_string_of_jsbytes(str_Champs_d_applica_abr),[0,caml_string_of_jsbytes(str_Prologue),0]]]],rV=[0,caml_string_of_jsbytes(str_AllocationFamili_abr),[0,caml_string_of_jsbytes(str_ge_minimum_ali_abr),0]],rJ=caml_string_of_jsbytes(str_b_n_ficie_titr_abr),rK=caml_string_of_jsbytes(str_a_d_j_ouvert_abr),rL=caml_string_of_jsbytes(str_prise_en_charge),rM=caml_string_of_jsbytes(str_date_de_naissance),rN=caml_string_of_jsbytes(str_r_muneration_me_abr),rO=caml_string_of_jsbytes(str_obligation_scolaire),rP=caml_string_of_jsbytes(str_identifiant),rQ=[0,caml_string_of_jsbytes("Enfant"),0],ry=caml_string_of_jsbytes(str_Guadeloupe),rA=caml_string_of_jsbytes(str_Guyane),rB=caml_string_of_jsbytes(str_Martinique),rC=caml_string_of_jsbytes(str_LaR_union),rD=caml_string_of_jsbytes(str_SaintBarth_lemy),rE=caml_string_of_jsbytes(str_SaintMartin),rF=caml_string_of_jsbytes(str_M_tropole),rG=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),rH=caml_string_of_jsbytes(str_Mayotte),rz=[0,caml_string_of_jsbytes(str_Collectivit),0],ro=caml_string_of_jsbytes(str_PrestationAccuei_abr),rq=caml_string_of_jsbytes(str_AllocationsFamil_abr),rr=caml_string_of_jsbytes(str_Compl_mentFamilial),rs=caml_string_of_jsbytes(str_AllocationLogement),rt=caml_string_of_jsbytes(str_Allocation_duca_abr),ru=caml_string_of_jsbytes(str_AllocationSoutie_abr),rv=caml_string_of_jsbytes(str_AllocationRentr_abr),rw=caml_string_of_jsbytes(str_AllocationJourna_abr$0),rp=[0,caml_string_of_jsbytes(str_l_mentPrestat_abr),0],rj=caml_string_of_jsbytes("Compl\xc3\xa8te"),rl=caml_string_of_jsbytes("Partag\xc3\xa9e"),rm=caml_string_of_jsbytes("Z\xc3\xa9ro"),rk=[0,caml_string_of_jsbytes("PriseEnCompte"),0],re=caml_string_of_jsbytes(str_Avant),rg=caml_string_of_jsbytes(str_Pendant),rh=caml_string_of_jsbytes(str_Apr_s),rf=[0,caml_string_of_jsbytes(str_SituationObligat_abr),0],q_=caml_string_of_jsbytes(str_GardeAltern_ePa_abr),ra=caml_string_of_jsbytes(str_GardeAltern_eAl_abr),rb=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),rc=caml_string_of_jsbytes(str_ServicesSociauxA_abr$1),rd=caml_string_of_jsbytes(str_ServicesSociauxA_abr$0),q$=[0,caml_string_of_jsbytes("PriseEnCharge"),0],Gz=caml_string_of_jsbytes(str$12),F8=caml_string_of_jsbytes(str_Guadeloupe),F9=caml_string_of_jsbytes(str_Guyane),F_=caml_string_of_jsbytes(str_LaReunion),F$=caml_string_of_jsbytes(str_Martinique),Ga=caml_string_of_jsbytes(str_Mayotte),Gb=caml_string_of_jsbytes(str_Metropole),Gc=caml_string_of_jsbytes(str_SaintBarthelemy),Gd=caml_string_of_jsbytes(str_SaintMartin),Ge=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),Gg=[7,0],Gh=[5,0],Gi=[4,0],Gj=[6,0],Gk=[8,0],Gl=[2,0],Gm=[3,0],Gn=[1,0],Go=[0,0],Gf=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$0),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr)],FQ=caml_string_of_jsbytes(str_AllocationEducat_abr),FR=caml_string_of_jsbytes(str_AllocationJourna_abr),FS=caml_string_of_jsbytes(str_AllocationLogement),FT=caml_string_of_jsbytes(str_AllocationRentre_abr),FU=caml_string_of_jsbytes(str_AllocationSoutie_abr),FV=caml_string_of_jsbytes(str_AllocationsFamil_abr),FW=caml_string_of_jsbytes(str_ComplementFamilial),FX=caml_string_of_jsbytes(str_PrestationAccuei_abr),FZ=[0,0],F0=[2,0],F1=[1,0],F2=[5,0],F3=[6,0],F4=[3,0],F5=[7,0],F6=[4,0],FY=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$1),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$0)],FJ=caml_string_of_jsbytes(str_Apres),FK=caml_string_of_jsbytes(str_Avant),FL=caml_string_of_jsbytes(str_Pendant),FN=[1,0],FO=[0,0],FP=[2,0],FM=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$1)],Fy=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),Fz=caml_string_of_jsbytes(str_GardeAlterneeAll_abr),FA=caml_string_of_jsbytes(str_GardeAlterneePar_abr),FB=caml_string_of_jsbytes(str_ServicesSociauxA_abr$2),FC=caml_string_of_jsbytes(str_ServicesSociauxA_abr),FE=[4,0],FF=[3,0],FG=[0,0],FH=[1,0],FI=[2,0],FD=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PriseEnCharge.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PriseEnCharge.t'")],Fv=[0,caml_string_of_jsbytes(str_allocationsFamil_abr),caml_string_of_jsbytes(str_baseMensuelleAll_abr),caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_allocationFamili_abr),caml_string_of_jsbytes(str_interfaceAllocat_abr),caml_string_of_jsbytes(str_prestationsFamil_abr),caml_string_of_jsbytes(str_enfantLePlusAge)],Fw=[0,caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_prestationsFamil_abr),caml_string_of_jsbytes(str_interfaceAllocat_abr),caml_string_of_jsbytes(str_enfantLePlusAge),caml_string_of_jsbytes(str_baseMensuelleAll_abr),caml_string_of_jsbytes(str_allocationsFamil_abr),caml_string_of_jsbytes(str_allocationFamili_abr)],GH=caml_string_of_jsbytes("AllocationsFamilialesLib"),a8K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_235,14,num_235,25,[0,caml_string_of_jsbytes("Conseil d'\xc3\x89tat, 5\xc3\xa8me - 4\xc3\xa8me chambres r\xc3\xa9unies, 21/07/2017, 398563"),0]],a8D=caml_string_of_jsbytes(str_0$1),a8E=caml_string_of_jsbytes(str_0$1),a8J=caml_string_of_jsbytes(str_0),a8F=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a8G=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a8H=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a8I=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a8z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1150,14,num_1150,63,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1179,14,num_1179,25,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1146,5,num_1146,70,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1143,14,num_1143,58,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1141,14,num_1141,54,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8d=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1139,14,num_1139,51,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a79=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1137,14,num_1137,59,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a75=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1135,14,num_1135,38,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a71=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1133,14,num_1133,34,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1131,14,num_1131,31,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1152,14,num_1152,48,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1120,11,num_1120,45,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1120,11,num_1120,45,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7V=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("m\xc3\xa9nage_sans_enfants_garde_altern\xc3\xa9e"),0]],a7Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7Z=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.m\xc3\xa9nage"),0]],a7W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1033,10,num_1033,16,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a72=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a73=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.demandeur"),0]],a70=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1034,10,num_1034,19,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a76=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a77=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.date_courante"),0]],a74=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1035,10,num_1035,23,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1124,3,num_1124,13,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7$=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette.ressources_m\xc3\xa9nage_prises_en_compte"),0]],a78=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1040,10,num_1040,44,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8a=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8b=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8f=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.m\xc3\xa9nage"),0]],a8c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1033,10,num_1033,16,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8j=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.demandeur"),0]],a8g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1034,10,num_1034,19,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8n=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.date_courante"),0]],a8k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1035,10,num_1035,23,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1125,3,num_1125,33,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8r=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("calculette_sans_garde_altern\xc3\xa9e.ressources_m\xc3\xa9nage_prises_en_compte"),0]],a8o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1040,10,num_1040,44,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8s=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette_sans_abr),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8t=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_calculette_sans_abr),[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),0]]],a8w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1127,10,num_1127,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1127,10,num_1127,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8x=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_ligibilit),0]],a8A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1121,11,num_1121,60,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1121,11,num_1121,60,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8B=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],a8L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1128,10,num_1128,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1128,10,num_1128,21,[0,caml_string_of_jsbytes(str_Calculette_avec_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a8M=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr),[0,caml_string_of_jsbytes("aide_finale"),0]],a7O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1069,14,num_1069,33,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a7N=caml_string_of_jsbytes(str_0$1),a7F=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7H=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7I=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7J=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7K=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7L=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7M=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1086,14,num_1086,36,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a7t=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7u=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7v=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7w=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7x=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a7y=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a7A=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1056,10,num_1056,32,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1056,10,num_1056,32,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1048,14,num_1048,25,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a7l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1101,14,num_1101,63,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1096,14,num_1096,62,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1092,14,num_1092,53,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a69=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1086,5,num_1086,65,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a65=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1081,14,num_1081,68,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a61=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1077,14,num_1077,66,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1057,14,num_1057,58,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a6W=[0,0],a6S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1073,14,num_1073,64,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1059,14,num_1059,50,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a6J=[2,0],a6K=[1,0],a6L=[2,0],a6F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1098,14,num_1098,54,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1094,14,num_1094,45,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1090,14,num_1090,66,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1083,14,num_1083,60,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1079,14,num_1079,58,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1075,14,num_1075,56,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1069,14,num_1069,67,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1065,14,num_1065,63,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a59=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1061,14,num_1061,60,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a53=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1043,5,num_1043,74,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a5Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1067,14,num_1067,55,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1063,14,num_1063,52,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1071,14,num_1071,59,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5T=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.date_courante"),0]],a5Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_396,10,num_396,23,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5X=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.m\xc3\xa9nage"),0]],a5U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_397,10,num_397,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a50=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a51=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.demandeur"),0]],a5Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_398,10,num_398,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a54=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1045,3,num_1045,34,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a55=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement.b\xc3\xa9n\xc3\xa9ficie_aide_personnalis\xc3\xa9e_logement"),0]],a52=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_399,10,num_399,47,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a56=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_al_abr),[0,caml_string_of_jsbytes(str_ligibilit_All_abr),0]]],a57=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_al_abr),[0,caml_string_of_jsbytes(str_ligibilit_All_abr),0]]],a5_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1042,3,num_1042,42,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a5$=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.m\xc3\xa9nage"),0]],a58=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_359,10,num_359,16,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a6c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1042,3,num_1042,42,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6d=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.demandeur"),0]],a6a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_360,10,num_360,19,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a6g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1042,3,num_1042,42,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6h=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],a6e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_361,17,num_361,30,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a6i=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_ai_abr),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),0]]],a6j=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_ai_abr),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),0]]],a6m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6n=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.mode_occupation"),0]],a6k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_974,10,num_974,25,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6r=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],a6o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_975,10,num_975,27,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6v=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.situation_familiale"),0]],a6s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_978,10,num_978,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6z=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.nombre_personnes_\xc3\xa0_charge"),0]],a6w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_979,10,num_979,35,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6D=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.zone"),0]],a6A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_980,10,num_980,14,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6G=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6H=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.date_courante"),0]],a6E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_981,10,num_981,23,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1051,3,num_1051,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6O=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_allocation_logement.type_aide"),0]],a6I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_982,10,num_982,19,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6P=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_allocatio_abr),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),0]]],a6Q=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_allocatio_abr),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),0]]],a6T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6U=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.mode_occupation"),0]],a6R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_726,10,num_726,25,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6Z=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.type_aide"),0]],a6V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_727,10,num_727,19,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a62=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a63=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.ressources_m\xc3\xa9nage_sans_arrondi"),0]],a60=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_728,10,num_728,27,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a66=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a67=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.situation_familiale"),0]],a64=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_731,10,num_731,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a6_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a6$=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.nombre_personnes_\xc3\xa0_charge"),0]],a68=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_732,10,num_732,35,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a7c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7d=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.zone"),0]],a7a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_733,10,num_733,14,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a7g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1048,3,num_1048,37,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7h=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes("calcul_aide_personnalis\xc3\xa9e_logement.date_courante"),0]],a7e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_734,10,num_734,23,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a7i=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_aide_pers_abr),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),0]]],a7j=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_calcul_aide_pers_abr),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),0]]],a7m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1057,10,num_1057,59,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1057,10,num_1057,59,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7n=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],a7q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1054,10,num_1054,21,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1054,10,num_1054,21,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7r=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_ligibilit),0]],a7D=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a7P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1055,10,num_1055,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1055,10,num_1055,29,[0,caml_string_of_jsbytes(str_Calculette_globale),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]],a7Q=[0,caml_string_of_jsbytes(str_CalculetteAidesA_abr$0),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],a5M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1398,14,num_1398,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1403,14,num_1403,36,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5w=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_input),0]]],a5x=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a5y=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),[0,caml_string_of_jsbytes(str_output),0]]],a5z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a5A=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],a5B=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5C=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],a5D=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5E=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],a5F=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],a5H=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],a5J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_993,10,num_993,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_993,10,num_993,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1742,14,num_1742,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5n=[1,0],a5o=[1,0],a5p=[1,0],a5j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1735,14,num_1735,44,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a5f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1720,14,num_1720,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4_=caml_string_of_jsbytes(str_0$1),a4$=caml_string_of_jsbytes(str_0$1),a5a=caml_string_of_jsbytes(str_0$1),a5b=caml_string_of_jsbytes(str_0$1),a5c=caml_string_of_jsbytes(str_0$1),a5d=caml_string_of_jsbytes(str_0$1),a5e=caml_string_of_jsbytes(str_0$1),a46=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1701,14,num_1701,32,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a42=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1719,14,num_1719,31,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1709,5,num_1709,69,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1694,14,num_1694,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1665,14,num_1665,26,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1671,14,num_1671,52,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1659,14,num_1659,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1668,14,num_1668,35,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1685,14,num_1685,67,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1654,14,num_1654,49,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1678,14,num_1678,37,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4p=caml_string_of_jsbytes(str_0$1),a4q=caml_string_of_jsbytes(str_0$1),a4r=caml_string_of_jsbytes(str_0$1),a4j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1832,14,num_1832,64,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a4f=[3,0],a4g=[3,0],a4h=[3,0],a4i=[3,0],a4b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1669,14,num_1669,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a39=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1666,14,num_1666,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a35=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1673,14,num_1673,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a31=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1661,14,num_1661,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1655,14,num_1655,56,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1825,14,num_1825,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3P=caml_string_of_jsbytes(str_0$1),a3Q=caml_string_of_jsbytes(str_0$1),a3R=caml_string_of_jsbytes(str_0$1),a3S=caml_string_of_jsbytes(str_0$1),a3L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1850,14,num_1850,50,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3H=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1841,14,num_1841,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3D=[3,0],a3E=[3,0],a3F=[3,0],a3G=[3,0],a3x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1806,14,num_1806,45,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1760,14,num_1760,57,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3q=caml_string_of_jsbytes(str_0$1),a3r=caml_string_of_jsbytes(str_0$1),a3s=caml_string_of_jsbytes(str_0$1),a3m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1797,14,num_1797,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1788,14,num_1788,73,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1769,14,num_1769,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a3b=[3,0],a3c=[3,0],a3d=[3,0],a29=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1779,14,num_1779,53,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a25=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1815,14,num_1815,57,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a21=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1751,14,num_1751,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2Y=caml_string_of_jsbytes(str_0$1),a2Z=caml_string_of_jsbytes(str_0$1),a20=caml_string_of_jsbytes(str_0$1),a2U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1670,14,num_1670,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1667,14,num_1667,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1675,14,num_1675,64,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1663,14,num_1663,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1657,14,num_1657,61,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),86,14,86,44,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],a2u=[0,0],a2v=[1,0],a2w=[1,0],a2x=[1,0],a2y=[0,0],a2z=[1,0],a2q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5006,14,num_5006,31,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2n=caml_string_of_jsbytes(str_100),a2o=caml_string_of_jsbytes(str_49),a2p=caml_string_of_jsbytes(str_0_01),a2j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1390,14,num_1390,34,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a2e=[0,0],a2f=[2,0],a2g=[1,0],a2h=[0,0],a2i=[1,0],a2k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_984,11,num_984,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2d=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_984,11,num_984,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2l=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_cat_gorie_calcu_abr),0]],a2r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_977,10,num_977,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_977,10,num_977,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2s=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_ressources_m_na_abr),0]],a2B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_985,11,num_985,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_985,11,num_985,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2C=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_situation_famili_abr),0]],a2F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.ressources_m\xc3\xa9nage_arrondies_base"),0]],a2D=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_831,10,num_831,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2K=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$2),0]],a2H=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_834,10,num_834,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2O=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$6),0]],a2L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_835,10,num_835,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2S=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$1),0]],a2P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_836,10,num_836,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2W=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr),0]],a2T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_837,10,num_837,23,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a22=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a23=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$3),0]],a2X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_838,10,num_838,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a26=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a27=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$10),0]],a24=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_839,10,num_839,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a2$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$4),0]],a28=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_840,10,num_840,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3g=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$8),0]],a3a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_841,10,num_841,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3k=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$9),0]],a3h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_842,10,num_842,49,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3n=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3o=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$7),0]],a3l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_843,10,num_843,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3v=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.charges_mensuelles_pr\xc3\xaat"),0]],a3p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_844,10,num_844,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_989,3,num_989,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$5),0]],a3w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_845,10,num_845,21,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3A=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),0]]],a3B=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),0]]],a3I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3J=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_t_abr),0]],a3C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_913,10,num_913,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3N=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr),0]],a3K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_914,10,num_914,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3V=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr$0),0]],a3O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_915,10,num_915,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3Z=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr),0]],a3W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_916,10,num_916,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a32=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a33=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_n_abr),0]],a30=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_917,10,num_917,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a36=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a37=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_s_abr),0]],a34=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_918,10,num_918,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a3_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a3$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_zone),0]],a38=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_919,10,num_919,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4d=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr$0),0]],a4a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_920,10,num_920,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_988,3,num_988,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4l=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("logement_foyer.cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16"),0]],a4e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_921,10,num_921,45,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4m=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),0]]],a4n=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),0]]],a4t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4u=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("locatif.loyer_principal"),0]],a4o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_764,10,num_764,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4y=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_ressourc_abr),0]],a4v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_765,10,num_765,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4C=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_b_n_fi_abr),0]],a4z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_766,10,num_766,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4G=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_date_cou_abr),0]],a4D=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_768,10,num_768,23,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4K=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_nombre_p_abr),0]],a4H=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_769,10,num_769,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4O=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_situatio_abr),0]],a4L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_770,10,num_770,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4S=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_zone),0]],a4P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_771,10,num_771,14,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a4W=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_logement_abr),0]],a4T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_772,10,num_772,30,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a4Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a40=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_g_es_abr),0]],a4X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_773,10,num_773,66,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a43=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a44=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_type_aide),0]],a41=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_775,10,num_775,19,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a47=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a48=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_colocation),0]],a45=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_776,10,num_776,20,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5h=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_r_ducti_abr),0]],a49=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_777,10,num_777,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5l=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif_logement_abr$0),0]],a5i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_778,10,num_778,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_987,3,num_987,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5s=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes("locatif.changement_logement_d842_4"),0]],a5m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_781,10,num_781,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a5t=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAllocation_abr),0]]],a5u=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAllocation_abr),0]]],a5K=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],a5N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_992,10,num_992,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_992,10,num_992,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],a5O=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$1),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],a19=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1118,5,num_1118,73,[0,caml_string_of_jsbytes("Article L841-3"),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a18=[2,0],a1_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a16=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1131,5,1134,28,[0,caml_string_of_jsbytes("Article L841-4"),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a15=[0,0],a17=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a14=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_1027,14,num_1027,25,[0,caml_string_of_jsbytes(str_Article_L841_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a10=[0,0],a11=[0,0],a12=[1,0],a13=[2,0],a1Q=caml_string_of_jsbytes(str_0$1),a1R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),996,5,num_1000,29,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1S=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1L=caml_string_of_jsbytes(str_1$0),a1J=caml_string_of_jsbytes(str_1$0),a1K=caml_string_of_jsbytes(str_0$1),a1M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),973,5,num_984,12,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1D=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_input),0]]],a1E=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],a1F=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_output),0]]],a1G=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],a1H=caml_string_of_jsbytes(str_1$0),a1B=caml_string_of_jsbytes(str_1$0),a1C=caml_string_of_jsbytes(str_0$1),a1I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),956,5,num_957,72,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1t=[2,0],a1z=[0,0],a1u=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_input),0]]],a1v=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1w=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_output),0]]],a1x=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1y=caml_string_of_jsbytes(str_1$0),a1r=caml_string_of_jsbytes(str_0$1),a1s=caml_string_of_jsbytes(str_0$1),a1A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_918,5,num_942,29,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1j=[2,0],a1p=[0,0],a1k=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_input),0]]],a1l=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1m=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),[0,caml_string_of_jsbytes(str_output),0]]],a1n=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],a1o=caml_string_of_jsbytes(str_1$0),a1h=caml_string_of_jsbytes(str_1$0),a1i=caml_string_of_jsbytes(str_0$1),a1q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),886,5,907,11,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1c=[0,0],a1d=[1,0],a1e=[3,0],a1f=[4,0],a1g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_867,5,871,52,[0,caml_string_of_jsbytes(str_Article_L841_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],a1W=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a09=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_837,14,num_837,25,[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr$0),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],a08=[0,0],a07=[2,0],a03=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_431,14,num_431,56,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_433,14,num_433,63,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0T=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4964,9,num_4964,55,[0,caml_string_of_jsbytes(str_Article_R842_14),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0V=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_surface"),0]],a0Q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4963,9,num_4963,68,[0,caml_string_of_jsbytes(str_Article_R842_14),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0S=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_commune.condition_logement_r\xc3\xa9sidence_principale"),0]],a0N=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_429,14,num_429,47,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_428,14,num_428,43,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_427,14,num_427,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4561,5,4566,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0x=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4544,5,4549,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4527,5,4534,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0A=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4497,5,4499,28,[0,caml_string_of_jsbytes(str_Article_R842_5),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],a0B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_425,14,num_425,46,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0l=[6,0],a0h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_421,14,num_421,56,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0g=[1,0],a0c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_420,14,num_420,50,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4368,14,num_4368,28,[0,caml_string_of_jsbytes("Article D841-1"),[0,caml_string_of_jsbytes("Chapitre 1 : Champ d'application"),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZ$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_404,11,num_404,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_404,11,num_404,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0a=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("dur\xc3\xa9e_l841_1_3"),0]],a0d=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_406,3,num_406,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0e=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$0),0]],a0b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),45,10,45,23,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],a0i=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_406,3,num_406,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0j=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$2),0]],a0f=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),46,10,46,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],a0n=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_406,3,num_406,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0o=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr$1),0]],a0k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),47,10,47,19,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],a0p=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),0]]],a0q=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_prestations_fami_abr),[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),0]]],a0C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_401,11,num_401,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0D=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("condition_accession_propri\xc3\xa9t\xc3\xa9"),0]],a0G=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0H=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr),0]],a0E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_287,10,num_287,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0L=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$0),0]],a0I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_288,10,num_288,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_407,3,num_407,22,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0P=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$2),0]],a0M=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_289,17,num_289,30,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0W=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],a0X=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],a00=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_414,10,num_414,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_414,10,num_414,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a01=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],a04=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_413,10,num_413,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a02=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_413,10,num_413,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a05=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes(str_nombre_personnes_abr),0]],a0_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_411,10,num_411,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a06=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_411,10,num_411,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a0$=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_dispositions_communes"),0]],a1X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_403,11,num_403,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1Y=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_allocation_logement_familiale"),0]],a2a=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a1Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_412,10,num_412,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],a2b=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_l841_2"),0]],aZ4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_588,5,590,36,[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],aZ5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_381,14,num_381,56,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_383,14,num_383,63,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3890,5,3895,30,[0,caml_string_of_jsbytes("Article R832-21"),[0,caml_string_of_jsbytes("Sous-Section 1 : Conditions d'assimilation des logements-foyers aux logements \xc3\xa0 usage locatif"),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aZM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZH=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],aZI=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),0]],aZJ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aZK=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),0]],aZG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_698,5,num_701,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),681,5,num_684,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_638,5,num_647,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZA=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),[0,caml_string_of_jsbytes(str_input),0]]],aZB=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),0]],aZC=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),[0,caml_string_of_jsbytes(str_output),0]]],aZD=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),0]],aZz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_617,5,num_620,30,[0,caml_string_of_jsbytes(str_Article_L831_1),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_379,14,num_379,47,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_378,14,num_378,43,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_377,14,num_377,40,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_737,5,750,30,[0,caml_string_of_jsbytes(str_Article_L831_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),718,5,723,30,[0,caml_string_of_jsbytes(str_Article_L831_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_713,31,num_713,54,[0,caml_string_of_jsbytes(str_Article_L831_2),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aZg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_366,11,num_366,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_366,11,num_366,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_366,11,num_366,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3218,5,3221,46,[0,caml_string_of_jsbytes("Article R832-7"),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aY2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3183,5,3185,47,[0,caml_string_of_jsbytes("Article R832-5"),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aY3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_365,11,num_365,41,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY6=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr),0]],aY_=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_caract_ristique_abr$0),0]],aZh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aY$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_364,11,num_364,34,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZi=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes("condition_logement_pr\xc3\xaat"),0]],aZl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_368,3,num_368,22,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZm=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr),0]],aZj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_287,10,num_287,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_368,3,num_368,22,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZq=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$0),0]],aZn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_288,10,num_288,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_368,3,num_368,22,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZu=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$2),0]],aZr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_289,17,num_289,30,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZv=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aZw=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit_co_abr$1),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aZS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_363,11,num_363,38,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZT=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes("condition_logement_bailleur"),0]],aZW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_372,10,num_372,59,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_372,10,num_372,59,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZX=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],aZ0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_371,10,num_371,52,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_371,10,num_371,52,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ1=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_nombre_personnes_abr),0]],aZ6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_370,10,num_370,21,[0,caml_string_of_jsbytes(str_ligibilit_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aZ7=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr),[0,caml_string_of_jsbytes(str_ligibilit),0]],aYU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2307,14,num_2307,40,[0,caml_string_of_jsbytes("Article D823-22"),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aYP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),560,5,num_563,43,[0,caml_string_of_jsbytes("Article L823-8"),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aYQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4355,14,num_4355,29,[0,caml_string_of_jsbytes("Article 45"),[0,caml_string_of_jsbytes("Chapitre VIII : Prime de d\xc3\xa9m\xc3\xa9nagement"),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aYH=caml_string_of_jsbytes(str_1$0),aYD=caml_string_of_jsbytes(str_1$0),aYB=caml_string_of_jsbytes(str_3),aYC=caml_string_of_jsbytes(str_0$1),aYE=caml_string_of_jsbytes(str_0_2),aYF=caml_string_of_jsbytes(str_3),aYG=caml_string_of_jsbytes(str_0$1),aYJ=caml_string_of_jsbytes(str_0$1),aYI=caml_string_of_jsbytes("2.4"),aYw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),2267,6,2277,77,[0,caml_string_of_jsbytes(str_Article_D823_20),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aYx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_469,14,num_469,43,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_468,14,num_468,39,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_467,14,num_467,36,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_471,14,num_471,65,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX7=caml_string_of_jsbytes(str_1$0),aX5=caml_string_of_jsbytes(str_3),aX6=caml_string_of_jsbytes(str_0$1),aX8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),2258,5,2263,77,[0,caml_string_of_jsbytes(str_Article_D823_20),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aX9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2281,14,num_2281,47,[0,caml_string_of_jsbytes(str_Article_D823_20),[0,caml_string_of_jsbytes(str_Section_2_Prim_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aX1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_457,11,num_457,44,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aXZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_457,11,num_457,44,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX2=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("d\xc3\xa9lai_apr\xc3\xa8s_emm\xc3\xa9nagement_l823_8_2"),0]],aX_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_454,11,num_454,32,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aX$=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("condition_rang_enfant"),0]],aYc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_461,3,num_461,40,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYd=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr$0),0]],aYa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),5,10,5,23,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],aYe=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],aYf=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],aYi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_460,3,num_460,18,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYj=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_apl.m\xc3\xa9nage"),0]],aYg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_287,10,num_287,16,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_460,3,num_460,18,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYn=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_apl.demandeur"),0]],aYk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_288,10,num_288,19,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_460,3,num_460,18,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYr=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("\xc3\xa9ligibilit\xc3\xa9_apl.date_courante"),0]],aYo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_289,17,num_289,30,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYs=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_ligibilit_apl),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aYt=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_ligibilit_apl),[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),0]]],aYy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_455,11,num_455,41,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYz=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("condition_p\xc3\xa9riode_d\xc3\xa9m\xc3\xa9nagement"),0]],aYL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_458,11,num_458,26,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_458,11,num_458,26,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYM=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("plafond_d823_22"),0]],aYR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_456,11,num_456,31,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYS=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes(str_ligibilit_lo_abr),0]],aYV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_464,10,num_464,36,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_464,10,num_464,36,[0,caml_string_of_jsbytes(str_ligibilit_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aYW=[0,caml_string_of_jsbytes(str_ligibilit_Pri_abr),[0,caml_string_of_jsbytes("montant_prime_d\xc3\xa9m\xc3\xa9nagement"),0]],aXV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1419,14,num_1419,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1424,14,num_1424,36,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],aXG=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXH=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],aXI=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],aXK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXL=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],aXM=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXN=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],aXO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXP=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],aXQ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aXS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_745,10,num_745,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_745,10,num_745,32,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1536,14,num_1536,44,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1521,14,num_1521,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXo=caml_string_of_jsbytes(str_0$1),aXp=caml_string_of_jsbytes(str_0$1),aXq=caml_string_of_jsbytes(str_0$1),aXr=caml_string_of_jsbytes(str_0$1),aXs=caml_string_of_jsbytes(str_0$1),aXt=caml_string_of_jsbytes(str_0$1),aXu=caml_string_of_jsbytes(str_0$1),aXk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1502,14,num_1502,32,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1520,14,num_1520,31,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aXc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1510,5,num_1510,69,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aW_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1495,14,num_1495,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aW6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1466,14,num_1466,26,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aW2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1472,14,num_1472,52,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1460,14,num_1460,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1469,14,num_1469,35,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1486,14,num_1486,67,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1455,14,num_1455,49,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1479,14,num_1479,37,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWF=caml_string_of_jsbytes(str_0$1),aWG=caml_string_of_jsbytes(str_0$1),aWH=caml_string_of_jsbytes(str_0$1),aWz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1628,14,num_1628,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWv=caml_string_of_jsbytes(str_0$1),aWw=caml_string_of_jsbytes(str_0$1),aWx=caml_string_of_jsbytes(str_0$1),aWy=caml_string_of_jsbytes(str_0$1),aWr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1470,14,num_1470,42,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1467,14,num_1467,33,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1474,14,num_1474,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1462,14,num_1462,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aWb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1456,14,num_1456,56,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aV9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1644,14,num_1644,50,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aV5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1635,14,num_1635,48,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aV1=[3,0],aV2=[3,0],aV3=[3,0],aV4=[3,0],aVV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1471,14,num_1471,47,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1618,14,num_1618,53,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVO=[0,0],aVP=[0,0],aVQ=[0,0],aVK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1609,14,num_1609,43,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVH=[0,0],aVI=[0,0],aVJ=[0,0],aVD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1468,14,num_1468,38,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1600,14,num_1600,57,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1591,14,num_1591,45,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1582,14,num_1582,54,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1573,14,num_1573,73,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1564,14,num_1564,53,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1553,14,num_1553,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aVc=[2,0],aVd=[2,0],aVe=[2,0],aU_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1476,14,num_1476,64,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aU6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1464,14,num_1464,59,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aU2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1458,14,num_1458,61,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1544,14,num_1544,55,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUV=caml_string_of_jsbytes(str_0$1),aUW=caml_string_of_jsbytes(str_0$1),aUX=caml_string_of_jsbytes(str_0$1),aUR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),76,14,76,44,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aUL=[0,0],aUM=[1,0],aUN=[1,0],aUO=[1,0],aUP=[0,0],aUQ=[1,0],aUH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2172,14,num_2172,31,[0,caml_string_of_jsbytes(str_Article_D823_17),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aUE=caml_string_of_jsbytes(str_100),aUF=caml_string_of_jsbytes(str_49),aUG=caml_string_of_jsbytes(str_0_01),aUA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1411,14,num_1411,34,[0,caml_string_of_jsbytes(str_Article_D823_9),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUv=[0,0],aUw=[2,0],aUx=[1,0],aUy=[0,0],aUz=[1,0],aUB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_736,11,num_736,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_736,11,num_736,31,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_cat_gorie_calcu_abr),0]],aUI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_730,10,num_730,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_730,10,num_730,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_ressources_m_na_abr),0]],aUS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_737,11,num_737,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_737,11,num_737,41,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aUT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_situation_famili_abr),0]],aUZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$3),0]],aUU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_664,10,num_664,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.ressources_m\xc3\xa9nage_arrondies"),0]],aU1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_665,10,num_665,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU8=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$2),0]],aU5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_666,10,num_666,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aU$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$6),0]],aU9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_667,10,num_667,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVh=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$8),0]],aVb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_668,10,num_668,31,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$4),0]],aVi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_669,10,num_669,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$9),0]],aVm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_670,10,num_670,49,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVt=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$7),0]],aVq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_671,10,num_671,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVx=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$5),0]],aVu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_672,10,num_672,21,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$10),0]],aVy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_673,10,num_673,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$1),0]],aVC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_674,10,num_674,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVM=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.type_pr\xc3\xaat"),0]],aVG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_675,10,num_675,19,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("accession_propri\xc3\xa9t\xc3\xa9.anciennet\xc3\xa9_logement"),0]],aVN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_676,10,num_676,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_741,3,num_741,22,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr),0]],aVU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_677,10,num_677,23,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aVY=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),0]]],aVZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_accession_propri_abr$0),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),0]]],aV6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aV7=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_t_abr),0]],aV0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_606,10,num_606,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aV_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aV$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr),0]],aV8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_607,10,num_607,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWd=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr),0]],aWa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_608,10,num_608,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWh=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_n_abr),0]],aWe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_609,10,num_609,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_s_abr),0]],aWi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_610,10,num_610,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_zone),0]],aWm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_611,10,num_611,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWt=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_d_abr$0),0]],aWq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_612,10,num_612,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_740,3,num_740,17,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer_r_abr$0),0]],aWu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_613,10,num_613,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aWD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_logement_foyer),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aWJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes("locatif.loyer_principal_base"),0]],aWE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_529,10,num_529,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_ressourc_abr),0]],aWL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_532,10,num_532,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWS=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_b_n_fi_abr),0]],aWP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_533,10,num_533,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWW=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_date_cou_abr),0]],aWT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_535,10,num_535,23,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aWZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_nombre_p_abr),0]],aWX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_536,10,num_536,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_situatio_abr),0]],aW1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_537,10,num_537,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW8=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_zone),0]],aW5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_538,10,num_538,14,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aW$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_logement_abr),0]],aW9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_539,10,num_539,30,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXe=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_g_es_abr),0]],aXb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_540,10,num_540,66,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_type_aide),0]],aXf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_542,10,num_542,19,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXm=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_colocation),0]],aXj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_543,10,num_543,20,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXx=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_r_ducti_abr),0]],aXn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_544,10,num_544,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_739,3,num_739,10,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif_logement_abr$0),0]],aXy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_545,10,num_545,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],aXD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],aXT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],aXW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_744,10,num_744,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_744,10,num_744,29,[0,caml_string_of_jsbytes(str_Tous_secteurs),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aXX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$2),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],aUq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4701,14,num_4701,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aUl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aUm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],aUn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aUo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],aUp=caml_string_of_jsbytes(str_0$1),aUr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_881,10,num_881,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aUk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_881,10,num_881,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aUh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4681,14,num_4681,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aT8=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_input),0]]],aT9=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],aT_=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_output),0]]],aT$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],aUa=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],aUb=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],aUc=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],aUd=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],aUe=caml_string_of_jsbytes(str_50),aUf=caml_string_of_jsbytes(str_0$1),aUg=caml_string_of_jsbytes(str_0$1),aUi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_880,10,num_880,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aT7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_880,10,num_880,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aT4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4667,14,num_4667,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTV=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],aTW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aTX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],aTY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aTZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_input),0]]],aT0=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],aT1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_output),0]]],aT2=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],aT3=caml_string_of_jsbytes(str_0$1),aT5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_879,10,num_879,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_879,10,num_879,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4579,14,num_4579,33,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4843,14,num_4843,47,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTI=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],aTJ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],aTK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aTL=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],aTM=caml_string_of_jsbytes(str_0$1),aTO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_860,11,num_860,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_860,11,num_860,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4608,14,num_4608,41,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4634,14,num_4634,33,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4619,14,num_4619,33,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4866,7,4869,45,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_856,11,num_856,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4854,14,num_4854,50,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4605,14,num_4605,62,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("calcul_apl_logement_foyer.n_nombre_parts_d832_25"),0]],aTh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4598,14,num_4598,61,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aTi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$8),0]],aTe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_894,14,num_894,49,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTd=caml_string_of_jsbytes(str_0$1),aS$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_904,14,num_904,53,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_902,14,num_902,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_900,14,num_900,70,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_898,14,num_898,65,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_896,14,num_896,67,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_892,14,num_892,61,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_890,14,num_890,59,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSM=[3,0],aSG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4641,14,num_4641,70,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4638,14,num_4638,69,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4639,14,num_4639,75,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4783,5,num_4783,44,[0,caml_string_of_jsbytes(str_Article_D842_9),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aSm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aSo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSp=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aSq=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSr=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aSs=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_851,11,num_851,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4765,14,num_4765,39,[0,caml_string_of_jsbytes(str_Article_D842_9),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSg=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aSh=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSi=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aSj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4930,5,num_4930,28,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aSc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_833,10,num_833,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4920,14,num_4920,41,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aR9=caml_string_of_jsbytes(str_100),aR_=caml_string_of_jsbytes(str_0_01),aR$=caml_string_of_jsbytes("4999"),aR4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4139,24,num_4139,56,[0,caml_string_of_jsbytes(str_Article_37),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aRV=caml_string_of_jsbytes(str_0_75),aRW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],aRX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aRY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],aRZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR0=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],aR1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR2=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],aR3=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_854,10,num_854,26,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4083,14,num_4083,46,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aRQ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],aRR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aRS=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],aRT=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aR6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_854,10,num_854,26,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_854,10,num_854,26,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4832,15,num_4832,37,[0,caml_string_of_jsbytes(str_Article_D842_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aRN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_859,11,num_859,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_859,11,num_859,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4891,6,4897,6,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aRI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),4909,5,4910,59,[0,caml_string_of_jsbytes(str_Article_D842_12),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aRG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3087,5,num_3087,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aQQ=caml_string_of_jsbytes(str_0$1),aQR=caml_string_of_jsbytes("158700"),aQS=caml_string_of_jsbytes("191300"),aQT=caml_string_of_jsbytes(str_1$0),aQU=caml_string_of_jsbytes("205500"),aQV=caml_string_of_jsbytes(str_2),aQW=caml_string_of_jsbytes("211300"),aQX=caml_string_of_jsbytes(str_3),aQY=caml_string_of_jsbytes("217100"),aQZ=caml_string_of_jsbytes(str_4),aQ0=caml_string_of_jsbytes("222900"),aQ1=caml_string_of_jsbytes(str_5),aQ2=caml_string_of_jsbytes(str_228000),aQ3=caml_string_of_jsbytes(str_5),aQ4=caml_string_of_jsbytes("19800"),aQ5=caml_string_of_jsbytes(str_228000),aQ6=caml_string_of_jsbytes(str_0$1),aQ7=caml_string_of_jsbytes("139300"),aQ8=caml_string_of_jsbytes("170600"),aQ9=caml_string_of_jsbytes(str_1$0),aQ_=caml_string_of_jsbytes("184700"),aQ$=caml_string_of_jsbytes(str_2),aRa=caml_string_of_jsbytes("191200"),aRb=caml_string_of_jsbytes(str_3),aRc=caml_string_of_jsbytes(str_197700),aRd=caml_string_of_jsbytes(str_4),aRe=caml_string_of_jsbytes("204200"),aRf=caml_string_of_jsbytes(str_5),aRg=caml_string_of_jsbytes(str_218700),aRh=caml_string_of_jsbytes(str_5),aRi=caml_string_of_jsbytes(str_19100),aRj=caml_string_of_jsbytes(str_218700),aRk=caml_string_of_jsbytes(str_0$1),aRl=caml_string_of_jsbytes("130600"),aRm=caml_string_of_jsbytes("158400"),aRn=caml_string_of_jsbytes(str_1$0),aRo=caml_string_of_jsbytes("172600"),aRp=caml_string_of_jsbytes(str_2),aRq=caml_string_of_jsbytes(str_179800),aRr=caml_string_of_jsbytes(str_3),aRs=caml_string_of_jsbytes("187000"),aRt=caml_string_of_jsbytes(str_4),aRu=caml_string_of_jsbytes(str_194200),aRv=caml_string_of_jsbytes(str_5),aRw=caml_string_of_jsbytes(str_208600),aRx=caml_string_of_jsbytes(str_5),aRy=caml_string_of_jsbytes("18200"),aRz=caml_string_of_jsbytes(str_208600),aRB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aQO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3133,5,num_3133,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aP4=caml_string_of_jsbytes(str_0$1),aP5=caml_string_of_jsbytes("160400"),aP6=caml_string_of_jsbytes("193400"),aP7=caml_string_of_jsbytes(str_1$0),aP8=caml_string_of_jsbytes("207800"),aP9=caml_string_of_jsbytes(str_2),aP_=caml_string_of_jsbytes("213700"),aP$=caml_string_of_jsbytes(str_3),aQa=caml_string_of_jsbytes("219600"),aQb=caml_string_of_jsbytes(str_4),aQc=caml_string_of_jsbytes(str_225500),aQd=caml_string_of_jsbytes(str_5),aQe=caml_string_of_jsbytes(str_230500),aQf=caml_string_of_jsbytes(str_5),aQg=caml_string_of_jsbytes("20000"),aQh=caml_string_of_jsbytes(str_230500),aQi=caml_string_of_jsbytes(str_0$1),aQj=caml_string_of_jsbytes(str_140800),aQk=caml_string_of_jsbytes(str_172500),aQl=caml_string_of_jsbytes(str_1$0),aQm=caml_string_of_jsbytes("186700"),aQn=caml_string_of_jsbytes(str_2),aQo=caml_string_of_jsbytes("193300"),aQp=caml_string_of_jsbytes(str_3),aQq=caml_string_of_jsbytes(str_199900),aQr=caml_string_of_jsbytes(str_4),aQs=caml_string_of_jsbytes("206500"),aQt=caml_string_of_jsbytes(str_5),aQu=caml_string_of_jsbytes(str_221100),aQv=caml_string_of_jsbytes(str_5),aQw=caml_string_of_jsbytes(str_19300),aQx=caml_string_of_jsbytes(str_221100),aQy=caml_string_of_jsbytes(str_0$1),aQz=caml_string_of_jsbytes(str_132000),aQA=caml_string_of_jsbytes(str_180100),aQB=caml_string_of_jsbytes(str_1$0),aQC=caml_string_of_jsbytes("174500"),aQD=caml_string_of_jsbytes(str_2),aQE=caml_string_of_jsbytes(str_181800),aQF=caml_string_of_jsbytes(str_3),aQG=caml_string_of_jsbytes("189100"),aQH=caml_string_of_jsbytes(str_4),aQI=caml_string_of_jsbytes(str_194200),aQJ=caml_string_of_jsbytes(str_5),aQK=caml_string_of_jsbytes(str_210900),aQL=caml_string_of_jsbytes(str_5),aQM=caml_string_of_jsbytes("18400"),aQN=caml_string_of_jsbytes(str_210900),aQP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aP2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3179,5,num_3179,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aPg=caml_string_of_jsbytes(str_0$1),aPh=caml_string_of_jsbytes("163300"),aPi=caml_string_of_jsbytes("196900"),aPj=caml_string_of_jsbytes(str_1$0),aPk=caml_string_of_jsbytes("211600"),aPl=caml_string_of_jsbytes(str_2),aPm=caml_string_of_jsbytes(str_217600),aPn=caml_string_of_jsbytes(str_3),aPo=caml_string_of_jsbytes("223600"),aPp=caml_string_of_jsbytes(str_4),aPq=caml_string_of_jsbytes("229600"),aPr=caml_string_of_jsbytes(str_5),aPs=caml_string_of_jsbytes(str_234600),aPt=caml_string_of_jsbytes(str_5),aPu=caml_string_of_jsbytes("20400"),aPv=caml_string_of_jsbytes(str_234600),aPw=caml_string_of_jsbytes(str_0$1),aPx=caml_string_of_jsbytes("143300"),aPy=caml_string_of_jsbytes("175600"),aPz=caml_string_of_jsbytes(str_1$0),aPA=caml_string_of_jsbytes("190100"),aPB=caml_string_of_jsbytes(str_2),aPC=caml_string_of_jsbytes("196600"),aPD=caml_string_of_jsbytes(str_3),aPE=caml_string_of_jsbytes("203500"),aPF=caml_string_of_jsbytes(str_4),aPG=caml_string_of_jsbytes("210200"),aPH=caml_string_of_jsbytes(str_5),aPI=caml_string_of_jsbytes(str_225100),aPJ=caml_string_of_jsbytes(str_5),aPK=caml_string_of_jsbytes("19600"),aPL=caml_string_of_jsbytes(str_225100),aPM=caml_string_of_jsbytes(str_0$1),aPN=caml_string_of_jsbytes("134400"),aPO=caml_string_of_jsbytes(str_163000),aPP=caml_string_of_jsbytes(str_1$0),aPQ=caml_string_of_jsbytes("177700"),aPR=caml_string_of_jsbytes(str_2),aPS=caml_string_of_jsbytes("185100"),aPT=caml_string_of_jsbytes(str_3),aPU=caml_string_of_jsbytes(str_192500),aPV=caml_string_of_jsbytes(str_4),aPW=caml_string_of_jsbytes(str_199900),aPX=caml_string_of_jsbytes(str_5),aPY=caml_string_of_jsbytes(str_214700),aPZ=caml_string_of_jsbytes(str_5),aP0=caml_string_of_jsbytes("18700"),aP1=caml_string_of_jsbytes(str_214700),aP3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aPe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3225,5,num_3225,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aOu=caml_string_of_jsbytes(str_0$1),aOv=caml_string_of_jsbytes("167200"),aOw=caml_string_of_jsbytes("201600"),aOx=caml_string_of_jsbytes(str_1$0),aOy=caml_string_of_jsbytes("216700"),aOz=caml_string_of_jsbytes(str_2),aOA=caml_string_of_jsbytes("222800"),aOB=caml_string_of_jsbytes(str_3),aOC=caml_string_of_jsbytes("229000"),aOD=caml_string_of_jsbytes(str_4),aOE=caml_string_of_jsbytes("235100"),aOF=caml_string_of_jsbytes(str_5),aOG=caml_string_of_jsbytes(str_240200),aOH=caml_string_of_jsbytes(str_5),aOI=caml_string_of_jsbytes(str_20900),aOJ=caml_string_of_jsbytes(str_240200),aOK=caml_string_of_jsbytes(str_0$1),aOL=caml_string_of_jsbytes("146700"),aOM=caml_string_of_jsbytes(str_179800),aON=caml_string_of_jsbytes(str_1$0),aOO=caml_string_of_jsbytes("194700"),aOP=caml_string_of_jsbytes(str_2),aOQ=caml_string_of_jsbytes("201500"),aOR=caml_string_of_jsbytes(str_3),aOS=caml_string_of_jsbytes("208400"),aOT=caml_string_of_jsbytes(str_4),aOU=caml_string_of_jsbytes("215200"),aOV=caml_string_of_jsbytes(str_5),aOW=caml_string_of_jsbytes(str_230500),aOX=caml_string_of_jsbytes(str_5),aOY=caml_string_of_jsbytes(str_20100),aOZ=caml_string_of_jsbytes(str_230500),aO0=caml_string_of_jsbytes(str_0$1),aO1=caml_string_of_jsbytes("137600"),aO2=caml_string_of_jsbytes("166900"),aO3=caml_string_of_jsbytes(str_1$0),aO4=caml_string_of_jsbytes("182000"),aO5=caml_string_of_jsbytes(str_2),aO6=caml_string_of_jsbytes("189500"),aO7=caml_string_of_jsbytes(str_3),aO8=caml_string_of_jsbytes("197100"),aO9=caml_string_of_jsbytes(str_4),aO_=caml_string_of_jsbytes(str_204700),aO$=caml_string_of_jsbytes(str_5),aPa=caml_string_of_jsbytes(str_219900),aPb=caml_string_of_jsbytes(str_5),aPc=caml_string_of_jsbytes(str_19100),aPd=caml_string_of_jsbytes(str_219900),aPf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aOs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3271,5,num_3271,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aNI=caml_string_of_jsbytes(str_0$1),aNJ=caml_string_of_jsbytes("167400"),aNK=caml_string_of_jsbytes("201800"),aNL=caml_string_of_jsbytes(str_1$0),aNM=caml_string_of_jsbytes("216900"),aNN=caml_string_of_jsbytes(str_2),aNO=caml_string_of_jsbytes("223000"),aNP=caml_string_of_jsbytes(str_3),aNQ=caml_string_of_jsbytes("229200"),aNR=caml_string_of_jsbytes(str_4),aNS=caml_string_of_jsbytes("235300"),aNT=caml_string_of_jsbytes(str_5),aNU=caml_string_of_jsbytes(str_240400),aNV=caml_string_of_jsbytes(str_5),aNW=caml_string_of_jsbytes(str_20900),aNX=caml_string_of_jsbytes(str_240400),aNY=caml_string_of_jsbytes(str_0$1),aNZ=caml_string_of_jsbytes("146800"),aN0=caml_string_of_jsbytes("180000"),aN1=caml_string_of_jsbytes(str_1$0),aN2=caml_string_of_jsbytes("194900"),aN3=caml_string_of_jsbytes(str_2),aN4=caml_string_of_jsbytes(str_201700),aN5=caml_string_of_jsbytes(str_3),aN6=caml_string_of_jsbytes(str_208600),aN7=caml_string_of_jsbytes(str_4),aN8=caml_string_of_jsbytes("215400"),aN9=caml_string_of_jsbytes(str_5),aN_=caml_string_of_jsbytes(str_230700),aN$=caml_string_of_jsbytes(str_5),aOa=caml_string_of_jsbytes(str_20100),aOb=caml_string_of_jsbytes(str_230700),aOc=caml_string_of_jsbytes(str_0$1),aOd=caml_string_of_jsbytes("137700"),aOe=caml_string_of_jsbytes("167100"),aOf=caml_string_of_jsbytes(str_1$0),aOg=caml_string_of_jsbytes("182200"),aOh=caml_string_of_jsbytes(str_2),aOi=caml_string_of_jsbytes("189700"),aOj=caml_string_of_jsbytes(str_3),aOk=caml_string_of_jsbytes("197300"),aOl=caml_string_of_jsbytes(str_4),aOm=caml_string_of_jsbytes("204900"),aOn=caml_string_of_jsbytes(str_5),aOo=caml_string_of_jsbytes(str_220100),aOp=caml_string_of_jsbytes(str_5),aOq=caml_string_of_jsbytes(str_19100),aOr=caml_string_of_jsbytes(str_220100),aOt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aNG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3317,5,num_3317,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aMW=caml_string_of_jsbytes(str_0$1),aMX=caml_string_of_jsbytes("169100"),aMY=caml_string_of_jsbytes("203800"),aMZ=caml_string_of_jsbytes(str_1$0),aM0=caml_string_of_jsbytes("219100"),aM1=caml_string_of_jsbytes(str_2),aM2=caml_string_of_jsbytes("225200"),aM3=caml_string_of_jsbytes(str_3),aM4=caml_string_of_jsbytes("231500"),aM5=caml_string_of_jsbytes(str_4),aM6=caml_string_of_jsbytes("237700"),aM7=caml_string_of_jsbytes(str_5),aM8=caml_string_of_jsbytes(str_242800),aM9=caml_string_of_jsbytes(str_5),aM_=caml_string_of_jsbytes("21100"),aM$=caml_string_of_jsbytes(str_242800),aNa=caml_string_of_jsbytes(str_0$1),aNb=caml_string_of_jsbytes("148300"),aNc=caml_string_of_jsbytes(str_181800),aNd=caml_string_of_jsbytes(str_1$0),aNe=caml_string_of_jsbytes("196800"),aNf=caml_string_of_jsbytes(str_2),aNg=caml_string_of_jsbytes("203700"),aNh=caml_string_of_jsbytes(str_3),aNi=caml_string_of_jsbytes("210700"),aNj=caml_string_of_jsbytes(str_4),aNk=caml_string_of_jsbytes(str_217600),aNl=caml_string_of_jsbytes(str_5),aNm=caml_string_of_jsbytes(str_233000),aNn=caml_string_of_jsbytes(str_5),aNo=caml_string_of_jsbytes("20300"),aNp=caml_string_of_jsbytes(str_233000),aNq=caml_string_of_jsbytes(str_0$1),aNr=caml_string_of_jsbytes("139100"),aNs=caml_string_of_jsbytes("168800"),aNt=caml_string_of_jsbytes(str_1$0),aNu=caml_string_of_jsbytes(str_184000),aNv=caml_string_of_jsbytes(str_2),aNw=caml_string_of_jsbytes("191600"),aNx=caml_string_of_jsbytes(str_3),aNy=caml_string_of_jsbytes("199300"),aNz=caml_string_of_jsbytes(str_4),aNA=caml_string_of_jsbytes("206900"),aNB=caml_string_of_jsbytes(str_5),aNC=caml_string_of_jsbytes(str_222300),aND=caml_string_of_jsbytes(str_5),aNE=caml_string_of_jsbytes(str_19300),aNF=caml_string_of_jsbytes(str_222300),aNH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aMU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3363,5,num_3363,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aL_=caml_string_of_jsbytes(str_0$1),aL$=caml_string_of_jsbytes("171100"),aMa=caml_string_of_jsbytes("206200"),aMb=caml_string_of_jsbytes(str_1$0),aMc=caml_string_of_jsbytes("221700"),aMd=caml_string_of_jsbytes(str_2),aMe=caml_string_of_jsbytes("227900"),aMf=caml_string_of_jsbytes(str_3),aMg=caml_string_of_jsbytes("234300"),aMh=caml_string_of_jsbytes(str_4),aMi=caml_string_of_jsbytes("240600"),aMj=caml_string_of_jsbytes(str_5),aMk=caml_string_of_jsbytes(str_245700),aMl=caml_string_of_jsbytes(str_5),aMm=caml_string_of_jsbytes("21400"),aMn=caml_string_of_jsbytes(str_245700),aMo=caml_string_of_jsbytes(str_0$1),aMp=caml_string_of_jsbytes("150100"),aMq=caml_string_of_jsbytes(str_184000),aMr=caml_string_of_jsbytes(str_1$0),aMs=caml_string_of_jsbytes("199200"),aMt=caml_string_of_jsbytes(str_2),aMu=caml_string_of_jsbytes("206100"),aMv=caml_string_of_jsbytes(str_3),aMw=caml_string_of_jsbytes("213200"),aMx=caml_string_of_jsbytes(str_4),aMy=caml_string_of_jsbytes("220200"),aMz=caml_string_of_jsbytes(str_5),aMA=caml_string_of_jsbytes(str_235800),aMB=caml_string_of_jsbytes(str_5),aMC=caml_string_of_jsbytes("20500"),aMD=caml_string_of_jsbytes(str_235800),aME=caml_string_of_jsbytes(str_0$1),aMF=caml_string_of_jsbytes(str_140800),aMG=caml_string_of_jsbytes("170800"),aMH=caml_string_of_jsbytes(str_1$0),aMI=caml_string_of_jsbytes("186200"),aMJ=caml_string_of_jsbytes(str_2),aMK=caml_string_of_jsbytes("193900"),aML=caml_string_of_jsbytes(str_3),aMM=caml_string_of_jsbytes(str_201700),aMN=caml_string_of_jsbytes(str_4),aMO=caml_string_of_jsbytes("209400"),aMP=caml_string_of_jsbytes(str_5),aMQ=caml_string_of_jsbytes(str_225000),aMR=caml_string_of_jsbytes(str_5),aMS=caml_string_of_jsbytes("19500"),aMT=caml_string_of_jsbytes(str_225000),aMV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aL8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3409,5,num_3409,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aLm=caml_string_of_jsbytes(str_0$1),aLn=caml_string_of_jsbytes("26084"),aLo=caml_string_of_jsbytes("31435"),aLp=caml_string_of_jsbytes(str_1$0),aLq=caml_string_of_jsbytes("33798"),aLr=caml_string_of_jsbytes(str_2),aLs=caml_string_of_jsbytes("34743"),aLt=caml_string_of_jsbytes(str_3),aLu=caml_string_of_jsbytes("35719"),aLv=caml_string_of_jsbytes(str_4),aLw=caml_string_of_jsbytes("36679"),aLx=caml_string_of_jsbytes(str_5),aLy=caml_string_of_jsbytes(str_37457),aLz=caml_string_of_jsbytes(str_5),aLA=caml_string_of_jsbytes("3262"),aLB=caml_string_of_jsbytes(str_37457),aLC=caml_string_of_jsbytes(str_0$1),aLD=caml_string_of_jsbytes("22883"),aLE=caml_string_of_jsbytes("28051"),aLF=caml_string_of_jsbytes(str_1$0),aLG=caml_string_of_jsbytes("30368"),aLH=caml_string_of_jsbytes(str_2),aLI=caml_string_of_jsbytes("31420"),aLJ=caml_string_of_jsbytes(str_3),aLK=caml_string_of_jsbytes("32502"),aLL=caml_string_of_jsbytes(str_4),aLM=caml_string_of_jsbytes("33569"),aLN=caml_string_of_jsbytes(str_5),aLO=caml_string_of_jsbytes(str_35947),aLP=caml_string_of_jsbytes(str_5),aLQ=caml_string_of_jsbytes("3125"),aLR=caml_string_of_jsbytes(str_35947),aLS=caml_string_of_jsbytes(str_0$1),aLT=caml_string_of_jsbytes("21465"),aLU=caml_string_of_jsbytes("26038"),aLV=caml_string_of_jsbytes(str_1$0),aLW=caml_string_of_jsbytes("28386"),aLX=caml_string_of_jsbytes(str_2),aLY=caml_string_of_jsbytes("29560"),aLZ=caml_string_of_jsbytes(str_3),aL0=caml_string_of_jsbytes("30749"),aL1=caml_string_of_jsbytes(str_4),aL2=caml_string_of_jsbytes("31923"),aL3=caml_string_of_jsbytes(str_5),aL4=caml_string_of_jsbytes(str_34301),aL5=caml_string_of_jsbytes(str_5),aL6=caml_string_of_jsbytes("2973"),aL7=caml_string_of_jsbytes(str_34301),aL9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aLk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3454,5,num_3454,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aKA=caml_string_of_jsbytes(str_0$1),aKB=caml_string_of_jsbytes("26397"),aKC=caml_string_of_jsbytes("31812"),aKD=caml_string_of_jsbytes(str_1$0),aKE=caml_string_of_jsbytes("34204"),aKF=caml_string_of_jsbytes(str_2),aKG=caml_string_of_jsbytes("35160"),aKH=caml_string_of_jsbytes(str_3),aKI=caml_string_of_jsbytes("36148"),aKJ=caml_string_of_jsbytes(str_4),aKK=caml_string_of_jsbytes("37119"),aKL=caml_string_of_jsbytes(str_5),aKM=caml_string_of_jsbytes(str_37906),aKN=caml_string_of_jsbytes(str_5),aKO=caml_string_of_jsbytes("3301"),aKP=caml_string_of_jsbytes(str_37906),aKQ=caml_string_of_jsbytes(str_0$1),aKR=caml_string_of_jsbytes("23158"),aKS=caml_string_of_jsbytes("28388"),aKT=caml_string_of_jsbytes(str_1$0),aKU=caml_string_of_jsbytes("30732"),aKV=caml_string_of_jsbytes(str_2),aKW=caml_string_of_jsbytes(str_31797),aKX=caml_string_of_jsbytes(str_3),aKY=caml_string_of_jsbytes("32892"),aKZ=caml_string_of_jsbytes(str_4),aK0=caml_string_of_jsbytes("33972"),aK1=caml_string_of_jsbytes(str_5),aK2=caml_string_of_jsbytes(str_36378),aK3=caml_string_of_jsbytes(str_5),aK4=caml_string_of_jsbytes("3163"),aK5=caml_string_of_jsbytes(str_36378),aK6=caml_string_of_jsbytes(str_0$1),aK7=caml_string_of_jsbytes("21723"),aK8=caml_string_of_jsbytes("26350"),aK9=caml_string_of_jsbytes(str_1$0),aK_=caml_string_of_jsbytes("28727"),aK$=caml_string_of_jsbytes(str_2),aLa=caml_string_of_jsbytes("29915"),aLb=caml_string_of_jsbytes(str_3),aLc=caml_string_of_jsbytes("31118"),aLd=caml_string_of_jsbytes(str_4),aLe=caml_string_of_jsbytes("32306"),aLf=caml_string_of_jsbytes(str_5),aLg=caml_string_of_jsbytes(str_34713),aLh=caml_string_of_jsbytes(str_5),aLi=caml_string_of_jsbytes("3009"),aLj=caml_string_of_jsbytes(str_34713),aLl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aKy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3499,5,num_3499,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aJO=caml_string_of_jsbytes(str_0$1),aJP=caml_string_of_jsbytes(str_26714),aJQ=caml_string_of_jsbytes("32194"),aJR=caml_string_of_jsbytes(str_1$0),aJS=caml_string_of_jsbytes("34614"),aJT=caml_string_of_jsbytes(str_2),aJU=caml_string_of_jsbytes("35582"),aJV=caml_string_of_jsbytes(str_3),aJW=caml_string_of_jsbytes("36582"),aJX=caml_string_of_jsbytes(str_4),aJY=caml_string_of_jsbytes("37564"),aJZ=caml_string_of_jsbytes(str_5),aJ0=caml_string_of_jsbytes(str_38361),aJ1=caml_string_of_jsbytes(str_5),aJ2=caml_string_of_jsbytes("3341"),aJ3=caml_string_of_jsbytes(str_38361),aJ4=caml_string_of_jsbytes(str_0$1),aJ5=caml_string_of_jsbytes("23436"),aJ6=caml_string_of_jsbytes("28729"),aJ7=caml_string_of_jsbytes(str_1$0),aJ8=caml_string_of_jsbytes("31101"),aJ9=caml_string_of_jsbytes(str_2),aJ_=caml_string_of_jsbytes("32179"),aJ$=caml_string_of_jsbytes(str_3),aKa=caml_string_of_jsbytes("33287"),aKb=caml_string_of_jsbytes(str_4),aKc=caml_string_of_jsbytes("34380"),aKd=caml_string_of_jsbytes(str_5),aKe=caml_string_of_jsbytes(str_36815),aKf=caml_string_of_jsbytes(str_5),aKg=caml_string_of_jsbytes("3201"),aKh=caml_string_of_jsbytes(str_36815),aKi=caml_string_of_jsbytes(str_0$1),aKj=caml_string_of_jsbytes("21984"),aKk=caml_string_of_jsbytes("26666"),aKl=caml_string_of_jsbytes(str_1$0),aKm=caml_string_of_jsbytes("29072"),aKn=caml_string_of_jsbytes(str_2),aKo=caml_string_of_jsbytes("30274"),aKp=caml_string_of_jsbytes(str_3),aKq=caml_string_of_jsbytes("31491"),aKr=caml_string_of_jsbytes(str_4),aKs=caml_string_of_jsbytes("32694"),aKt=caml_string_of_jsbytes(str_5),aKu=caml_string_of_jsbytes(str_35130),aKv=caml_string_of_jsbytes(str_5),aKw=caml_string_of_jsbytes("3045"),aKx=caml_string_of_jsbytes(str_35130),aKz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aJM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3544,5,num_3544,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aI2=caml_string_of_jsbytes(str_0$1),aI3=caml_string_of_jsbytes("27195"),aI4=caml_string_of_jsbytes("32773"),aI5=caml_string_of_jsbytes(str_1$0),aI6=caml_string_of_jsbytes("35237"),aI7=caml_string_of_jsbytes(str_2),aI8=caml_string_of_jsbytes("36222"),aI9=caml_string_of_jsbytes(str_3),aI_=caml_string_of_jsbytes("37240"),aI$=caml_string_of_jsbytes(str_4),aJa=caml_string_of_jsbytes("38240"),aJb=caml_string_of_jsbytes(str_5),aJc=caml_string_of_jsbytes(str_39051),aJd=caml_string_of_jsbytes(str_5),aJe=caml_string_of_jsbytes("3401"),aJf=caml_string_of_jsbytes(str_39051),aJg=caml_string_of_jsbytes(str_0$1),aJh=caml_string_of_jsbytes("23858"),aJi=caml_string_of_jsbytes("29246"),aJj=caml_string_of_jsbytes(str_1$0),aJk=caml_string_of_jsbytes("31661"),aJl=caml_string_of_jsbytes(str_2),aJm=caml_string_of_jsbytes("32758"),aJn=caml_string_of_jsbytes(str_3),aJo=caml_string_of_jsbytes("33886"),aJp=caml_string_of_jsbytes(str_4),aJq=caml_string_of_jsbytes("34999"),aJr=caml_string_of_jsbytes(str_5),aJs=caml_string_of_jsbytes(str_37478),aJt=caml_string_of_jsbytes(str_5),aJu=caml_string_of_jsbytes("3259"),aJv=caml_string_of_jsbytes(str_37478),aJw=caml_string_of_jsbytes(str_0$1),aJx=caml_string_of_jsbytes("22380"),aJy=caml_string_of_jsbytes("27146"),aJz=caml_string_of_jsbytes(str_1$0),aJA=caml_string_of_jsbytes("29595"),aJB=caml_string_of_jsbytes(str_2),aJC=caml_string_of_jsbytes("30819"),aJD=caml_string_of_jsbytes(str_3),aJE=caml_string_of_jsbytes("32058"),aJF=caml_string_of_jsbytes(str_4),aJG=caml_string_of_jsbytes("33282"),aJH=caml_string_of_jsbytes(str_5),aJI=caml_string_of_jsbytes(str_35762),aJJ=caml_string_of_jsbytes(str_5),aJK=caml_string_of_jsbytes("3100"),aJL=caml_string_of_jsbytes(str_35762),aJN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aI0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3589,5,num_3589,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aIe=caml_string_of_jsbytes(str_0$1),aIf=caml_string_of_jsbytes("27956"),aIg=caml_string_of_jsbytes("33691"),aIh=caml_string_of_jsbytes(str_1$0),aIi=caml_string_of_jsbytes("36224"),aIj=caml_string_of_jsbytes(str_2),aIk=caml_string_of_jsbytes("37236"),aIl=caml_string_of_jsbytes(str_3),aIm=caml_string_of_jsbytes("38283"),aIn=caml_string_of_jsbytes(str_4),aIo=caml_string_of_jsbytes("39311"),aIp=caml_string_of_jsbytes(str_5),aIq=caml_string_of_jsbytes(str_40144),aIr=caml_string_of_jsbytes(str_5),aIs=caml_string_of_jsbytes("3496"),aIt=caml_string_of_jsbytes(str_40144),aIu=caml_string_of_jsbytes(str_0$1),aIv=caml_string_of_jsbytes("24526"),aIw=caml_string_of_jsbytes("30065"),aIx=caml_string_of_jsbytes(str_1$0),aIy=caml_string_of_jsbytes("32548"),aIz=caml_string_of_jsbytes(str_2),aIA=caml_string_of_jsbytes("33675"),aIB=caml_string_of_jsbytes(str_3),aIC=caml_string_of_jsbytes(str_34865),aID=caml_string_of_jsbytes(str_4),aIE=caml_string_of_jsbytes("35979"),aIF=caml_string_of_jsbytes(str_5),aIG=caml_string_of_jsbytes(str_38527),aIH=caml_string_of_jsbytes(str_5),aII=caml_string_of_jsbytes("3350"),aIJ=caml_string_of_jsbytes(str_38527),aIK=caml_string_of_jsbytes(str_0$1),aIL=caml_string_of_jsbytes("23007"),aIM=caml_string_of_jsbytes("27906"),aIN=caml_string_of_jsbytes(str_1$0),aIO=caml_string_of_jsbytes("30424"),aIP=caml_string_of_jsbytes(str_2),aIQ=caml_string_of_jsbytes("31682"),aIR=caml_string_of_jsbytes(str_3),aIS=caml_string_of_jsbytes(str_32956),aIT=caml_string_of_jsbytes(str_4),aIU=caml_string_of_jsbytes("34214"),aIV=caml_string_of_jsbytes(str_5),aIW=caml_string_of_jsbytes(str_36733),aIX=caml_string_of_jsbytes(str_5),aIY=caml_string_of_jsbytes("3187"),aIZ=caml_string_of_jsbytes(str_36733),aI1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aIc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3634,5,num_3634,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aHs=caml_string_of_jsbytes(str_0$1),aHt=caml_string_of_jsbytes("28728"),aHu=caml_string_of_jsbytes("34621"),aHv=caml_string_of_jsbytes(str_1$0),aHw=caml_string_of_jsbytes("37224"),aHx=caml_string_of_jsbytes(str_2),aHy=caml_string_of_jsbytes("38264"),aHz=caml_string_of_jsbytes(str_3),aHA=caml_string_of_jsbytes(str_39340),aHB=caml_string_of_jsbytes(str_4),aHC=caml_string_of_jsbytes("40396"),aHD=caml_string_of_jsbytes(str_5),aHE=caml_string_of_jsbytes(str_41252),aHF=caml_string_of_jsbytes(str_5),aHG=caml_string_of_jsbytes("3592"),aHH=caml_string_of_jsbytes(str_41252),aHI=caml_string_of_jsbytes(str_0$1),aHJ=caml_string_of_jsbytes("25203"),aHK=caml_string_of_jsbytes("30895"),aHL=caml_string_of_jsbytes(str_1$0),aHM=caml_string_of_jsbytes("33446"),aHN=caml_string_of_jsbytes(str_2),aHO=caml_string_of_jsbytes("34604"),aHP=caml_string_of_jsbytes(str_3),aHQ=caml_string_of_jsbytes("35796"),aHR=caml_string_of_jsbytes(str_4),aHS=caml_string_of_jsbytes("36972"),aHT=caml_string_of_jsbytes(str_5),aHU=caml_string_of_jsbytes(str_39590),aHV=caml_string_of_jsbytes(str_5),aHW=caml_string_of_jsbytes("3442"),aHX=caml_string_of_jsbytes(str_39590),aHY=caml_string_of_jsbytes(str_0$1),aHZ=caml_string_of_jsbytes("23642"),aH0=caml_string_of_jsbytes("28676"),aH1=caml_string_of_jsbytes(str_1$0),aH2=caml_string_of_jsbytes(str_31264),aH3=caml_string_of_jsbytes(str_2),aH4=caml_string_of_jsbytes("32556"),aH5=caml_string_of_jsbytes(str_3),aH6=caml_string_of_jsbytes("33866"),aH7=caml_string_of_jsbytes(str_4),aH8=caml_string_of_jsbytes("35158"),aH9=caml_string_of_jsbytes(str_5),aH_=caml_string_of_jsbytes(str_37778),aH$=caml_string_of_jsbytes(str_5),aIa=caml_string_of_jsbytes("3275"),aIb=caml_string_of_jsbytes(str_37778),aId=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aHq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3679,5,num_3679,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aGG=caml_string_of_jsbytes(str_0$1),aGH=caml_string_of_jsbytes("29575"),aGI=caml_string_of_jsbytes("35642"),aGJ=caml_string_of_jsbytes(str_1$0),aGK=caml_string_of_jsbytes("38322"),aGL=caml_string_of_jsbytes(str_2),aGM=caml_string_of_jsbytes("39393"),aGN=caml_string_of_jsbytes(str_3),aGO=caml_string_of_jsbytes("40501"),aGP=caml_string_of_jsbytes(str_4),aGQ=caml_string_of_jsbytes("41588"),aGR=caml_string_of_jsbytes(str_5),aGS=caml_string_of_jsbytes(str_42469),aGT=caml_string_of_jsbytes(str_5),aGU=caml_string_of_jsbytes("3698"),aGV=caml_string_of_jsbytes(str_42469),aGW=caml_string_of_jsbytes(str_0$1),aGX=caml_string_of_jsbytes("25946"),aGY=caml_string_of_jsbytes("31806"),aGZ=caml_string_of_jsbytes(str_1$0),aG0=caml_string_of_jsbytes("34433"),aG1=caml_string_of_jsbytes(str_2),aG2=caml_string_of_jsbytes("35625"),aG3=caml_string_of_jsbytes(str_3),aG4=caml_string_of_jsbytes("36852"),aG5=caml_string_of_jsbytes(str_4),aG6=caml_string_of_jsbytes("38063"),aG7=caml_string_of_jsbytes(str_5),aG8=caml_string_of_jsbytes(str_40758),aG9=caml_string_of_jsbytes(str_5),aG_=caml_string_of_jsbytes("3544"),aG$=caml_string_of_jsbytes(str_40758),aHa=caml_string_of_jsbytes(str_0$1),aHb=caml_string_of_jsbytes("24339"),aHc=caml_string_of_jsbytes("29522"),aHd=caml_string_of_jsbytes(str_1$0),aHe=caml_string_of_jsbytes("32186"),aHf=caml_string_of_jsbytes(str_2),aHg=caml_string_of_jsbytes("33516"),aHh=caml_string_of_jsbytes(str_3),aHi=caml_string_of_jsbytes(str_34865),aHj=caml_string_of_jsbytes(str_4),aHk=caml_string_of_jsbytes("36195"),aHl=caml_string_of_jsbytes(str_5),aHm=caml_string_of_jsbytes(str_38892),aHn=caml_string_of_jsbytes(str_5),aHo=caml_string_of_jsbytes("3372"),aHp=caml_string_of_jsbytes(str_38892),aHr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aGE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3724,5,num_3724,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aFU=caml_string_of_jsbytes(str_0$1),aFV=caml_string_of_jsbytes("29670"),aFW=caml_string_of_jsbytes("35757"),aFX=caml_string_of_jsbytes(str_1$0),aFY=caml_string_of_jsbytes("38445"),aFZ=caml_string_of_jsbytes(str_2),aF0=caml_string_of_jsbytes("39519"),aF1=caml_string_of_jsbytes(str_3),aF2=caml_string_of_jsbytes("40601"),aF3=caml_string_of_jsbytes(str_4),aF4=caml_string_of_jsbytes("41721"),aF5=caml_string_of_jsbytes(str_5),aF6=caml_string_of_jsbytes(str_42605),aF7=caml_string_of_jsbytes(str_5),aF8=caml_string_of_jsbytes("3710"),aF9=caml_string_of_jsbytes(str_42605),aF_=caml_string_of_jsbytes(str_0$1),aF$=caml_string_of_jsbytes("26029"),aGa=caml_string_of_jsbytes("31908"),aGb=caml_string_of_jsbytes(str_1$0),aGc=caml_string_of_jsbytes("34643"),aGd=caml_string_of_jsbytes(str_2),aGe=caml_string_of_jsbytes("35739"),aGf=caml_string_of_jsbytes(str_3),aGg=caml_string_of_jsbytes("36970"),aGh=caml_string_of_jsbytes(str_4),aGi=caml_string_of_jsbytes("38185"),aGj=caml_string_of_jsbytes(str_5),aGk=caml_string_of_jsbytes(str_40888),aGl=caml_string_of_jsbytes(str_5),aGm=caml_string_of_jsbytes("3555"),aGn=caml_string_of_jsbytes(str_40888),aGo=caml_string_of_jsbytes(str_0$1),aGp=caml_string_of_jsbytes("24417"),aGq=caml_string_of_jsbytes("29616"),aGr=caml_string_of_jsbytes(str_1$0),aGs=caml_string_of_jsbytes("32289"),aGt=caml_string_of_jsbytes(str_2),aGu=caml_string_of_jsbytes(str_33623),aGv=caml_string_of_jsbytes(str_3),aGw=caml_string_of_jsbytes("34977"),aGx=caml_string_of_jsbytes(str_4),aGy=caml_string_of_jsbytes("36311"),aGz=caml_string_of_jsbytes(str_5),aGA=caml_string_of_jsbytes(str_39016),aGB=caml_string_of_jsbytes(str_5),aGC=caml_string_of_jsbytes("3383"),aGD=caml_string_of_jsbytes(str_39016),aGF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aFS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3769,5,num_3769,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aE8=caml_string_of_jsbytes(str_0$1),aE9=caml_string_of_jsbytes("29996"),aE_=caml_string_of_jsbytes("36149"),aE$=caml_string_of_jsbytes(str_1$0),aFa=caml_string_of_jsbytes("38868"),aFb=caml_string_of_jsbytes(str_2),aFc=caml_string_of_jsbytes("39954"),aFd=caml_string_of_jsbytes(str_3),aFe=caml_string_of_jsbytes("41078"),aFf=caml_string_of_jsbytes(str_4),aFg=caml_string_of_jsbytes("42180"),aFh=caml_string_of_jsbytes(str_5),aFi=caml_string_of_jsbytes(str_43074),aFj=caml_string_of_jsbytes(str_5),aFk=caml_string_of_jsbytes("3751"),aFl=caml_string_of_jsbytes(str_43074),aFm=caml_string_of_jsbytes(str_0$1),aFn=caml_string_of_jsbytes("26315"),aFo=caml_string_of_jsbytes("32259"),aFp=caml_string_of_jsbytes(str_1$0),aFq=caml_string_of_jsbytes("34923"),aFr=caml_string_of_jsbytes(str_2),aFs=caml_string_of_jsbytes("36132"),aFt=caml_string_of_jsbytes(str_3),aFu=caml_string_of_jsbytes("37373"),aFv=caml_string_of_jsbytes(str_4),aFw=caml_string_of_jsbytes("38605"),aFx=caml_string_of_jsbytes(str_5),aFy=caml_string_of_jsbytes(str_41338),aFz=caml_string_of_jsbytes(str_5),aFA=caml_string_of_jsbytes("3594"),aFB=caml_string_of_jsbytes(str_41338),aFC=caml_string_of_jsbytes(str_0$1),aFD=caml_string_of_jsbytes("24686"),aFE=caml_string_of_jsbytes("29942"),aFF=caml_string_of_jsbytes(str_1$0),aFG=caml_string_of_jsbytes("32644"),aFH=caml_string_of_jsbytes(str_2),aFI=caml_string_of_jsbytes("33993"),aFJ=caml_string_of_jsbytes(str_3),aFK=caml_string_of_jsbytes("35362"),aFL=caml_string_of_jsbytes(str_4),aFM=caml_string_of_jsbytes("36710"),aFN=caml_string_of_jsbytes(str_5),aFO=caml_string_of_jsbytes(str_39445),aFP=caml_string_of_jsbytes(str_5),aFQ=caml_string_of_jsbytes("3420"),aFR=caml_string_of_jsbytes(str_39445),aFT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aE6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3814,5,num_3814,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aEk=caml_string_of_jsbytes(str_0$1),aEl=caml_string_of_jsbytes("30296"),aEm=caml_string_of_jsbytes("36510"),aEn=caml_string_of_jsbytes(str_1$0),aEo=caml_string_of_jsbytes("39257"),aEp=caml_string_of_jsbytes(str_2),aEq=caml_string_of_jsbytes("40354"),aEr=caml_string_of_jsbytes(str_3),aEs=caml_string_of_jsbytes("41489"),aEt=caml_string_of_jsbytes(str_4),aEu=caml_string_of_jsbytes("42602"),aEv=caml_string_of_jsbytes(str_5),aEw=caml_string_of_jsbytes(str_43505),aEx=caml_string_of_jsbytes(str_5),aEy=caml_string_of_jsbytes("3789"),aEz=caml_string_of_jsbytes(str_43505),aEA=caml_string_of_jsbytes(str_0$1),aEB=caml_string_of_jsbytes("26578"),aEC=caml_string_of_jsbytes("32582"),aED=caml_string_of_jsbytes(str_1$0),aEE=caml_string_of_jsbytes("35272"),aEF=caml_string_of_jsbytes(str_2),aEG=caml_string_of_jsbytes("36493"),aEH=caml_string_of_jsbytes(str_3),aEI=caml_string_of_jsbytes("37751"),aEJ=caml_string_of_jsbytes(str_4),aEK=caml_string_of_jsbytes("38991"),aEL=caml_string_of_jsbytes(str_5),aEM=caml_string_of_jsbytes(str_41751),aEN=caml_string_of_jsbytes(str_5),aEO=caml_string_of_jsbytes("3630"),aEP=caml_string_of_jsbytes(str_41751),aEQ=caml_string_of_jsbytes(str_0$1),aER=caml_string_of_jsbytes("24933"),aES=caml_string_of_jsbytes("30241"),aET=caml_string_of_jsbytes(str_1$0),aEU=caml_string_of_jsbytes("32970"),aEV=caml_string_of_jsbytes(str_2),aEW=caml_string_of_jsbytes("34333"),aEX=caml_string_of_jsbytes(str_3),aEY=caml_string_of_jsbytes("35716"),aEZ=caml_string_of_jsbytes(str_4),aE0=caml_string_of_jsbytes("37077"),aE1=caml_string_of_jsbytes(str_5),aE2=caml_string_of_jsbytes(str_39839),aE3=caml_string_of_jsbytes(str_5),aE4=caml_string_of_jsbytes("3454"),aE5=caml_string_of_jsbytes(str_39839),aE7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aEi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3859,5,num_3859,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aDy=caml_string_of_jsbytes(str_0$1),aDz=caml_string_of_jsbytes("30947"),aDA=caml_string_of_jsbytes("37295"),aDB=caml_string_of_jsbytes(str_1$0),aDC=caml_string_of_jsbytes("40101"),aDD=caml_string_of_jsbytes(str_2),aDE=caml_string_of_jsbytes("41222"),aDF=caml_string_of_jsbytes(str_3),aDG=caml_string_of_jsbytes("42381"),aDH=caml_string_of_jsbytes(str_4),aDI=caml_string_of_jsbytes("43518"),aDJ=caml_string_of_jsbytes(str_5),aDK=caml_string_of_jsbytes(str_44440),aDL=caml_string_of_jsbytes(str_5),aDM=caml_string_of_jsbytes("3870"),aDN=caml_string_of_jsbytes(str_44440),aDO=caml_string_of_jsbytes(str_0$1),aDP=caml_string_of_jsbytes("27149"),aDQ=caml_string_of_jsbytes("33283"),aDR=caml_string_of_jsbytes(str_1$0),aDS=caml_string_of_jsbytes("36030"),aDT=caml_string_of_jsbytes(str_2),aDU=caml_string_of_jsbytes("37278"),aDV=caml_string_of_jsbytes(str_3),aDW=caml_string_of_jsbytes("38563"),aDX=caml_string_of_jsbytes(str_4),aDY=caml_string_of_jsbytes("39829"),aDZ=caml_string_of_jsbytes(str_5),aD0=caml_string_of_jsbytes("42649"),aD1=caml_string_of_jsbytes(str_5),aD2=caml_string_of_jsbytes("3708"),aD3=caml_string_of_jsbytes("42659"),aD4=caml_string_of_jsbytes(str_0$1),aD5=caml_string_of_jsbytes("25469"),aD6=caml_string_of_jsbytes("30891"),aD7=caml_string_of_jsbytes(str_1$0),aD8=caml_string_of_jsbytes("33679"),aD9=caml_string_of_jsbytes(str_2),aD_=caml_string_of_jsbytes("35071"),aD$=caml_string_of_jsbytes(str_3),aEa=caml_string_of_jsbytes("36484"),aEb=caml_string_of_jsbytes(str_4),aEc=caml_string_of_jsbytes("37874"),aEd=caml_string_of_jsbytes(str_5),aEe=caml_string_of_jsbytes(str_40696),aEf=caml_string_of_jsbytes(str_5),aEg=caml_string_of_jsbytes("3528"),aEh=caml_string_of_jsbytes(str_40696),aEj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aDw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3904,5,num_3904,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aCM=caml_string_of_jsbytes(str_0$1),aCN=caml_string_of_jsbytes("31123"),aCO=caml_string_of_jsbytes("37508"),aCP=caml_string_of_jsbytes(str_1$0),aCQ=caml_string_of_jsbytes("40330"),aCR=caml_string_of_jsbytes(str_2),aCS=caml_string_of_jsbytes("41457"),aCT=caml_string_of_jsbytes(str_3),aCU=caml_string_of_jsbytes("42623"),aCV=caml_string_of_jsbytes(str_4),aCW=caml_string_of_jsbytes("43766"),aCX=caml_string_of_jsbytes(str_5),aCY=caml_string_of_jsbytes(str_44693),aCZ=caml_string_of_jsbytes(str_5),aC0=caml_string_of_jsbytes("3892"),aC1=caml_string_of_jsbytes(str_44693),aC2=caml_string_of_jsbytes(str_0$1),aC3=caml_string_of_jsbytes("27304"),aC4=caml_string_of_jsbytes("33473"),aC5=caml_string_of_jsbytes(str_1$0),aC6=caml_string_of_jsbytes("36235"),aC7=caml_string_of_jsbytes(str_2),aC8=caml_string_of_jsbytes("37490"),aC9=caml_string_of_jsbytes(str_3),aC_=caml_string_of_jsbytes("38783"),aC$=caml_string_of_jsbytes(str_4),aDa=caml_string_of_jsbytes("40056"),aDb=caml_string_of_jsbytes(str_5),aDc=caml_string_of_jsbytes(str_42892),aDd=caml_string_of_jsbytes(str_5),aDe=caml_string_of_jsbytes("3729"),aDf=caml_string_of_jsbytes(str_42892),aDg=caml_string_of_jsbytes(str_0$1),aDh=caml_string_of_jsbytes("25614"),aDi=caml_string_of_jsbytes("31067"),aDj=caml_string_of_jsbytes(str_1$0),aDk=caml_string_of_jsbytes("33871"),aDl=caml_string_of_jsbytes(str_2),aDm=caml_string_of_jsbytes("35271"),aDn=caml_string_of_jsbytes(str_3),aDo=caml_string_of_jsbytes("36692"),aDp=caml_string_of_jsbytes(str_4),aDq=caml_string_of_jsbytes("38090"),aDr=caml_string_of_jsbytes(str_5),aDs=caml_string_of_jsbytes(str_40928),aDt=caml_string_of_jsbytes(str_5),aDu=caml_string_of_jsbytes("3548"),aDv=caml_string_of_jsbytes(str_40928),aDx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aCK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3949,5,num_3949,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aB0=caml_string_of_jsbytes(str_0$1),aB1=caml_string_of_jsbytes("31148"),aB2=caml_string_of_jsbytes("37538"),aB3=caml_string_of_jsbytes(str_1$0),aB4=caml_string_of_jsbytes("40362"),aB5=caml_string_of_jsbytes(str_2),aB6=caml_string_of_jsbytes("41490"),aB7=caml_string_of_jsbytes(str_3),aB8=caml_string_of_jsbytes("42657"),aB9=caml_string_of_jsbytes(str_4),aB_=caml_string_of_jsbytes("43801"),aB$=caml_string_of_jsbytes(str_5),aCa=caml_string_of_jsbytes(str_44729),aCb=caml_string_of_jsbytes(str_5),aCc=caml_string_of_jsbytes("3895"),aCd=caml_string_of_jsbytes(str_44729),aCe=caml_string_of_jsbytes(str_0$1),aCf=caml_string_of_jsbytes("27326"),aCg=caml_string_of_jsbytes(str_33500),aCh=caml_string_of_jsbytes(str_1$0),aCi=caml_string_of_jsbytes("36264"),aCj=caml_string_of_jsbytes(str_2),aCk=caml_string_of_jsbytes("37520"),aCl=caml_string_of_jsbytes(str_3),aCm=caml_string_of_jsbytes("38814"),aCn=caml_string_of_jsbytes(str_4),aCo=caml_string_of_jsbytes("40088"),aCp=caml_string_of_jsbytes(str_5),aCq=caml_string_of_jsbytes(str_42926),aCr=caml_string_of_jsbytes(str_5),aCs=caml_string_of_jsbytes("3732"),aCt=caml_string_of_jsbytes(str_42926),aCu=caml_string_of_jsbytes(str_0$1),aCv=caml_string_of_jsbytes("25634"),aCw=caml_string_of_jsbytes("31092"),aCx=caml_string_of_jsbytes(str_1$0),aCy=caml_string_of_jsbytes("33898"),aCz=caml_string_of_jsbytes(str_2),aCA=caml_string_of_jsbytes("35299"),aCB=caml_string_of_jsbytes(str_3),aCC=caml_string_of_jsbytes("36721"),aCD=caml_string_of_jsbytes(str_4),aCE=caml_string_of_jsbytes("38120"),aCF=caml_string_of_jsbytes(str_5),aCG=caml_string_of_jsbytes(str_40961),aCH=caml_string_of_jsbytes(str_5),aCI=caml_string_of_jsbytes("3551"),aCJ=caml_string_of_jsbytes(str_40961),aCL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aBY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_3994,5,num_3994,64,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aBc=caml_string_of_jsbytes(str_0$1),aBd=caml_string_of_jsbytes("31382"),aBe=caml_string_of_jsbytes("37820"),aBf=caml_string_of_jsbytes(str_1$0),aBg=caml_string_of_jsbytes("40665"),aBh=caml_string_of_jsbytes(str_2),aBi=caml_string_of_jsbytes("41801"),aBj=caml_string_of_jsbytes(str_3),aBk=caml_string_of_jsbytes("42977"),aBl=caml_string_of_jsbytes(str_4),aBm=caml_string_of_jsbytes("44130"),aBn=caml_string_of_jsbytes(str_5),aBo=caml_string_of_jsbytes(str_45064),aBp=caml_string_of_jsbytes(str_5),aBq=caml_string_of_jsbytes("3924"),aBr=caml_string_of_jsbytes(str_45064),aBs=caml_string_of_jsbytes(str_0$1),aBt=caml_string_of_jsbytes("27531"),aBu=caml_string_of_jsbytes("33751"),aBv=caml_string_of_jsbytes(str_1$0),aBw=caml_string_of_jsbytes("36536"),aBx=caml_string_of_jsbytes(str_2),aBy=caml_string_of_jsbytes("37801"),aBz=caml_string_of_jsbytes(str_3),aBA=caml_string_of_jsbytes("39105"),aBB=caml_string_of_jsbytes(str_4),aBC=caml_string_of_jsbytes("40389"),aBD=caml_string_of_jsbytes(str_5),aBE=caml_string_of_jsbytes(str_43248),aBF=caml_string_of_jsbytes(str_5),aBG=caml_string_of_jsbytes("3760"),aBH=caml_string_of_jsbytes(str_43248),aBI=caml_string_of_jsbytes(str_0$1),aBJ=caml_string_of_jsbytes("25826"),aBK=caml_string_of_jsbytes("31325"),aBL=caml_string_of_jsbytes(str_1$0),aBM=caml_string_of_jsbytes("34152"),aBN=caml_string_of_jsbytes(str_2),aBO=caml_string_of_jsbytes("35564"),aBP=caml_string_of_jsbytes(str_3),aBQ=caml_string_of_jsbytes("36996"),aBR=caml_string_of_jsbytes(str_4),aBS=caml_string_of_jsbytes("38406"),aBT=caml_string_of_jsbytes(str_5),aBU=caml_string_of_jsbytes(str_41268),aBV=caml_string_of_jsbytes(str_5),aBW=caml_string_of_jsbytes("3578"),aBX=caml_string_of_jsbytes(str_41268),aBZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aBa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4039,5,num_4039,33,[0,caml_string_of_jsbytes(str_Article_33),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aAq=caml_string_of_jsbytes(str_0$1),aAr=caml_string_of_jsbytes("31476"),aAs=caml_string_of_jsbytes("37933"),aAt=caml_string_of_jsbytes(str_1$0),aAu=caml_string_of_jsbytes("40787"),aAv=caml_string_of_jsbytes(str_2),aAw=caml_string_of_jsbytes("41927"),aAx=caml_string_of_jsbytes(str_3),aAy=caml_string_of_jsbytes("43106"),aAz=caml_string_of_jsbytes(str_4),aAA=caml_string_of_jsbytes("44262"),aAB=caml_string_of_jsbytes(str_5),aAC=caml_string_of_jsbytes(str_45200),aAD=caml_string_of_jsbytes(str_5),aAE=caml_string_of_jsbytes("3936"),aAF=caml_string_of_jsbytes(str_45200),aAG=caml_string_of_jsbytes(str_0$1),aAH=caml_string_of_jsbytes("27614"),aAI=caml_string_of_jsbytes("33853"),aAJ=caml_string_of_jsbytes(str_1$0),aAK=caml_string_of_jsbytes("36646"),aAL=caml_string_of_jsbytes(str_2),aAM=caml_string_of_jsbytes("37915"),aAN=caml_string_of_jsbytes(str_3),aAO=caml_string_of_jsbytes("39222"),aAP=caml_string_of_jsbytes(str_4),aAQ=caml_string_of_jsbytes("40510"),aAR=caml_string_of_jsbytes(str_5),aAS=caml_string_of_jsbytes(str_43378),aAT=caml_string_of_jsbytes(str_5),aAU=caml_string_of_jsbytes("3771"),aAV=caml_string_of_jsbytes(str_43378),aAW=caml_string_of_jsbytes(str_0$1),aAX=caml_string_of_jsbytes("25904"),aAY=caml_string_of_jsbytes("31419"),aAZ=caml_string_of_jsbytes(str_1$0),aA0=caml_string_of_jsbytes("34255"),aA1=caml_string_of_jsbytes(str_2),aA2=caml_string_of_jsbytes("35670"),aA3=caml_string_of_jsbytes(str_3),aA4=caml_string_of_jsbytes("37107"),aA5=caml_string_of_jsbytes(str_4),aA6=caml_string_of_jsbytes("38521"),aA7=caml_string_of_jsbytes(str_5),aA8=caml_string_of_jsbytes(str_41392),aA9=caml_string_of_jsbytes(str_5),aA_=caml_string_of_jsbytes("3588"),aA$=caml_string_of_jsbytes(str_41392),aBb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_853,10,num_853,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4653,14,num_4653,36,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aAk=caml_string_of_jsbytes(str_0$1),aAl=caml_string_of_jsbytes(str_0$1),aAn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_878,10,num_878,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_878,10,num_878,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4159,5,num_4159,16,[0,caml_string_of_jsbytes(str_Article_37),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aAc=caml_string_of_jsbytes(str_1229),aAd=caml_string_of_jsbytes(str_2710),aAe=caml_string_of_jsbytes(str_5422),aAg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_848,11,num_848,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4105,14,num_4105,41,[0,caml_string_of_jsbytes("Article 34"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],az9=caml_string_of_jsbytes(str_0$1),az_=caml_string_of_jsbytes(str_5422),az$=caml_string_of_jsbytes(str_1229),aAa=caml_string_of_jsbytes(str_5422),az3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_906,14,num_906,50,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4645,14,num_4645,64,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],azT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4643,14,num_4643,59,[0,caml_string_of_jsbytes(str_Article_D842_6),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],azP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4197,14,num_4197,33,[0,caml_string_of_jsbytes(str_Article_39),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azO=caml_string_of_jsbytes(str_16_25),azK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4186,14,num_4186,33,[0,caml_string_of_jsbytes(str_Article_38),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azJ=caml_string_of_jsbytes(str_0_0234),azF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4204,14,num_4204,41,[0,caml_string_of_jsbytes(str_Article_39),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azE=caml_string_of_jsbytes("390000"),azA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4179,14,num_4179,41,[0,caml_string_of_jsbytes(str_Article_38),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azz=caml_string_of_jsbytes(str_1500),azv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4127,14,num_4127,41,[0,caml_string_of_jsbytes("Article 36"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azu=caml_string_of_jsbytes(str_1000),azq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_279,14,num_279,36,[0,caml_string_of_jsbytes(str_Article_premier),[0,caml_string_of_jsbytes(str_R_glement_CE_abr),0]]],azo=caml_string_of_jsbytes(str_6_55957),azp=caml_string_of_jsbytes(str_1),azk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4117,14,num_4117,40,[0,caml_string_of_jsbytes("Article 35"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],azj=caml_string_of_jsbytes(str_500),azl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_855,11,num_855,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_855,11,num_855,37,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_6"),0]],azr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_858,11,num_858,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_858,11,num_858,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azs=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_taux_francs_vers_abr),0]],azw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_861,11,num_861,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_861,11,num_861,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azx=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_minimal_aide_d842_6"),0]],azB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_862,11,num_862,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_862,11,num_862,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_11"),0]],azG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_863,11,num_863,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_863,11,num_863,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azH=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_12"),0]],azL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_864,11,num_864,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_864,11,num_864,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azM=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("coefficient_d842_11"),0]],azQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_865,11,num_865,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_865,11,num_865,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("coefficient_d842_12"),0]],azU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_867,3,num_867,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azV=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],azS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_656,10,num_656,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],azY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_867,3,num_867,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],azZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],azW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_657,10,num_657,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],az0=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],az1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],az4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_870,3,num_870,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],az5=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],az2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],az6=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],az7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],aAh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_848,11,num_848,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],az8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_848,11,num_848,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aAi=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_montant_forfaita_abr),0]],aAo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aRD=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr),0]],aRJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_857,11,num_857,42,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aRK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("seuil_minimal_ressources_m\xc3\xa9nage"),0]],aRO=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],aR7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$1),0]],aSd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_833,10,num_833,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aR8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_833,10,num_833,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSe=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_ressources_m_na_abr$0),0]],aSv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_851,11,num_851,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_851,11,num_851,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSw=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("plafond_mensualit\xc3\xa9_d842_6"),0]],aSz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_872,3,num_872,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSA=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],aSx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_872,3,num_872,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSE=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],aSB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_872,3,num_872,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSI=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],aSF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSJ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aSK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aSO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSP=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$4),0]],aSL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_606,10,num_606,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aST=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$5),0]],aSQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_607,10,num_607,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aSW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aSX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$3),0]],aSU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_608,10,num_608,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aS0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$2),0]],aSY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_609,10,num_609,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aS4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS5=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$0),0]],aS2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_610,10,num_610,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aS8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aS9=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$7),0]],aS6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_611,10,num_611,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aTa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTb=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$1),0]],aS_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_612,10,num_612,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aTf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_868,3,num_868,28,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTg=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr),0]],aTc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_613,10,num_613,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aTn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aTo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],aTt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_856,11,num_856,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_856,11,num_856,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes("seuil_minimal_d\xc3\xa9pense_nette_minimale"),0]],aTx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_847,11,num_847,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_847,11,num_847,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTy=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_mensualit_li_abr),0]],aTB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_849,11,num_849,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_849,11,num_849,30,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_mensualit_mini_abr),0]],aTF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_850,11,num_850,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_850,11,num_850,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_coefficient_pris_abr),0]],aTP=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],aTS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_875,10,num_875,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_875,10,num_875,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aTT=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],aT6=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],aUj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],aUs=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],aze=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5113,14,num_5113,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ay$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aza=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],azb=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],azc=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],azd=caml_string_of_jsbytes(str_0$1),azf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_948,10,num_948,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ay_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_948,10,num_948,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ay7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5092,14,num_5092,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),[0,caml_string_of_jsbytes(str_input),0]]],ayX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),0]],ayY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),[0,caml_string_of_jsbytes(str_output),0]]],ayZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),0]],ay0=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],ay1=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],ay2=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],ay3=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],ay4=caml_string_of_jsbytes(str_50),ay5=caml_string_of_jsbytes(str_0$1),ay6=caml_string_of_jsbytes(str_0$1),ay8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_947,10,num_947,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_947,10,num_947,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5078,14,num_5078,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayO=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_input),0]]],ayP=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],ayQ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),[0,caml_string_of_jsbytes(str_output),0]]],ayR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],ayT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_946,10,num_946,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_946,10,num_946,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5060,14,num_5060,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayA=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],ayB=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],ayC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],ayD=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],ayE=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_input),0]]],ayF=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],ayG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),[0,caml_string_of_jsbytes(str_output),0]]],ayH=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],ayI=caml_string_of_jsbytes(str_0$1),ayJ=caml_string_of_jsbytes(str_0$1),ayL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_945,10,num_945,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_945,10,num_945,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4979,14,num_4979,33,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ays=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5167,14,num_5167,47,[0,caml_string_of_jsbytes(str_Article_D842_17),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],ayk=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aym=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayn=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],ayo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayp=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],ayq=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayr=caml_string_of_jsbytes(str_0$1),ayt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_925,11,num_925,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_925,11,num_925,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5038,14,num_5038,27,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5158,14,num_5158,36,[0,caml_string_of_jsbytes(str_Article_D842_17),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ayc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_924,11,num_924,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aya=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_924,11,num_924,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5000,14,num_5000,41,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ax3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5036,14,num_5036,70,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5026,14,num_5026,69,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5027,14,num_5027,75,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5046,14,num_5046,36,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axP=caml_string_of_jsbytes(str_0$1),axQ=caml_string_of_jsbytes(str_0$1),axS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_944,10,num_944,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_944,10,num_944,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4268,6,num_4268,79,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axI=caml_string_of_jsbytes("8414"),axJ=caml_string_of_jsbytes("13100"),axL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),4303,6,4304,38,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axE=caml_string_of_jsbytes("20640"),axF=caml_string_of_jsbytes("32073"),axH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),4321,6,4322,24,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axz=caml_string_of_jsbytes(str_17012),axA=caml_string_of_jsbytes(str_26440),axC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),4285,6,num_4286,46,[0,caml_string_of_jsbytes(str_Article_43),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axw=caml_string_of_jsbytes(str_17012),axx=caml_string_of_jsbytes(str_26440),axD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4226,14,num_4226,41,[0,caml_string_of_jsbytes("Article 40"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],axo=caml_string_of_jsbytes(str_0$1),axp=caml_string_of_jsbytes(str_5422),axq=caml_string_of_jsbytes(str_1229),axr=caml_string_of_jsbytes(str_5422),axi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4997,14,num_4997,61,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],axj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axk=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$8),0]],axf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_955,14,num_955,49,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_965,14,num_965,53,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_963,14,num_963,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_961,14,num_961,70,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_959,14,num_959,65,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_957,14,num_957,67,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_953,14,num_953,61,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_951,14,num_951,59,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_967,14,num_967,50,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5032,14,num_5032,64,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],awz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5030,14,num_5030,59,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],awv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_5034,14,num_5034,55,[0,caml_string_of_jsbytes(str_Article_D842_15),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],awr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4340,14,num_4340,51,[0,caml_string_of_jsbytes("Article 44"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],awq=caml_string_of_jsbytes(str_1500),awm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4239,14,num_4239,41,[0,caml_string_of_jsbytes("Article 41"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],awl=caml_string_of_jsbytes(str_500),awh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_4250,14,num_4250,42,[0,caml_string_of_jsbytes("Article 42"),[0,caml_string_of_jsbytes(str_Chapitre_VII_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],awg=caml_string_of_jsbytes(str_1000),awi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_926,11,num_926,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_926,11,num_926,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awj=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("montant_minimal_aide_d842_15"),0]],awn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_927,11,num_927,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_927,11,num_927,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awo=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("montant_forfaitaire_d842_15"),0]],aws=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_928,11,num_928,48,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_928,11,num_928,48,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awt=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("montant_minimal_d\xc3\xa9pense_nette_d842_17"),0]],aww=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_934,3,num_934,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awx=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$0),0]],awu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_599,10,num_599,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_934,3,num_934,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awB=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],awy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_600,10,num_600,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_934,3,num_934,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awF=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],awC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_601,10,num_601,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],awH=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],awK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_937,3,num_937,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awL=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],awI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awM=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],awN=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],awQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awR=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$4),0]],awO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_606,10,num_606,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awV=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$5),0]],awS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_607,10,num_607,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],awY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awZ=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$3),0]],awW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_608,10,num_608,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aw2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw3=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$2),0]],aw0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_609,10,num_609,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aw6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$0),0]],aw4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_610,10,num_610,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aw_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aw$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$7),0]],aw8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_611,10,num_611,14,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],axc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axd=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$1),0]],axa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_612,10,num_612,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],axg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_935,3,num_935,28,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axh=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr),0]],axe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_613,10,num_613,19,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],axl=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],axm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_apl_logem_abr$6),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),0]]],axt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_931,10,num_931,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_931,10,num_931,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_montant_forfaita_abr),0]],axM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_930,10,num_930,27,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axN=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("\xc3\xa9quivalence_loyer"),0]],axT=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],axW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_939,3,num_939,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],axX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],axU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ax0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_939,3,num_939,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax1=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],axY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ax4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_939,3,num_939,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax5=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],ax2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ax6=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ax7=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ax_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_929,10,num_929,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_929,10,num_929,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ax$=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_coefficient_pris_abr),0]],ayd=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$0),0]],ayg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_932,10,num_932,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aye=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_932,10,num_932,23,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayh=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes("loyer_minimal"),0]],ayu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr),0]],ayx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_942,10,num_942,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_942,10,num_942,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ayy=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],ayM=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$4),0]],ayU=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$2),0]],ay9=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],azg=[0,caml_string_of_jsbytes(str_CalculAllocation_abr$2),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],awa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4470,24,num_4470,43,[0,caml_string_of_jsbytes(str_Article_D842_4),[0,caml_string_of_jsbytes(str_Section_1_Sect_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],av$=caml_string_of_jsbytes(str_0$1),awb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_785,10,num_785,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_822,14,num_822,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4478,24,num_4478,46,[0,caml_string_of_jsbytes(str_Article_D842_4),[0,caml_string_of_jsbytes(str_Section_1_Sect_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],av6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_787,10,num_787,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_823,14,num_823,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_input),0]]],av1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],av2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),[0,caml_string_of_jsbytes(str_output),0]]],av3=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],av7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_787,10,num_787,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_787,10,num_787,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_818,14,num_818,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_816,14,num_816,59,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_814,14,num_814,43,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_812,14,num_812,42,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),808,5,809,63,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_805,14,num_805,53,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_803,14,num_803,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_801,14,num_801,63,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_799,14,num_799,58,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_797,14,num_797,46,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_794,14,num_794,78,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_792,14,num_792,60,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],au_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_790,14,num_790,48,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],au$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ava=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.loyer_principal_base"),0]],au9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_529,10,num_529,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ave=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.ressources_m\xc3\xa9nage_arrondies"),0]],avb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_532,10,num_532,37,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avi=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),0]],avf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_533,10,num_533,55,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avm=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.date_courante"),0]],avj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_535,10,num_535,23,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avq=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.nombre_personnes_\xc3\xa0_charge"),0]],avn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_536,10,num_536,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avu=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.situation_familiale_calcul_apl"),0]],avr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_537,10,num_537,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avy=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.zone"),0]],avv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_538,10,num_538,14,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avC=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.logement_est_chambre"),0]],avz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_539,10,num_539,30,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avG=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),0]],avD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_540,10,num_540,66,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avK=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.type_aide"),0]],avH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_542,10,num_542,19,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avO=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.colocation"),0]],avL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_543,10,num_543,20,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avS=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.r\xc3\xa9duction_loyer_solidarit\xc3\xa9"),0]],avP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_544,10,num_544,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_783,3,num_783,21,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],avW=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes("calcul_apl_locatif.logement_meubl\xc3\xa9_d842_2"),0]],avT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_545,10,num_545,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],avX=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_calcul_apl_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],avY=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_calcul_apl_locatif),[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),0]]],av8=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$3),0]],awc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_785,10,num_785,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],av9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_785,10,num_785,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],awd=[0,caml_string_of_jsbytes(str_CalculAllocation_abr),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],au2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),58,5,62,21,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],au3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),47,5,48,78,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],au4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],au6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),40,10,40,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),68,5,72,24,[0,caml_string_of_jsbytes(str_Article_L512_3),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr$0),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),41,10,41,29,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$6),62,18,62,41,[0,caml_string_of_jsbytes(str_Article_R755_0_2),[0,caml_string_of_jsbytes(str_Chapitre_5_Pre_abr),[0,caml_string_of_jsbytes(str_Titre_5_D_par_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auN=caml_string_of_jsbytes(str_169),auO=caml_string_of_jsbytes(str_0_55),auQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),42,11,42,27,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$6),31,14,31,30,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auK=caml_string_of_jsbytes(str_169),auL=caml_string_of_jsbytes(str_0_55),auz=[0,0],auB=[1,0],auC=[2,0],auD=[3,0],auE=[4,0],auF=[5,0],auA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$0),num_106,5,num_111,30,[0,caml_string_of_jsbytes(str_Article_L751_1),[0,caml_string_of_jsbytes(str_Chapitre_1er_G_abr),[0,caml_string_of_jsbytes(str_Titre_5_Dispos_abr),[0,caml_string_of_jsbytes(str_Livre_7_R_gim_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],auG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],aus=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),51,14,51,28,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),52,14,52,32,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$6),21,14,21,26,[0,caml_string_of_jsbytes(str_Article_R512_2),[0,caml_string_of_jsbytes(str_Chapitre_2_Cha_abr),[0,caml_string_of_jsbytes(str_Titre_1_Champ_abr),[0,caml_string_of_jsbytes(str_Livre_5_Presta_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],aul=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),43,10,43,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),43,10,43,22,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],aum=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_ge_l512_3_2),0]],aup=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),48,3,48,7,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auq=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic_date_courante),0]],aun=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),9,10,9,23,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],aut=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),48,3,48,7,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auu=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic_r_sidence),0]],aur=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),10,10,10,19,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],auv=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],auw=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_smic),[0,caml_string_of_jsbytes(str_Smic),0]]],auH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],aux=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),44,10,44,33,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auI=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_r_gime_outre_me_abr),0]],auR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),42,11,42,27,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$4),42,11,42,27,[0,caml_string_of_jsbytes(str_Prologue_prest_abr),0]],auS=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_plafond_l512_3_2),0]],auY=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_conditions_hors_abr),0]],au7=[0,caml_string_of_jsbytes(str_ligibilit_Pre_abr),[0,caml_string_of_jsbytes(str_droit_ouvert),0]],aud=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_404,14,num_404,32,[0,caml_string_of_jsbytes(str_Article_R822_7),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aub=caml_string_of_jsbytes(str_12),auc=caml_string_of_jsbytes(str_0$1),at8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_849,6,852,35,[0,caml_string_of_jsbytes("Article R822-20"),[0,caml_string_of_jsbytes("Sous-section 3 : Montant forfaitaire de ressources applicable aux \xc3\xa9tudiants"),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],at9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_508,10,num_508,37,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_124,14,num_124,41,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],at3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_457,14,num_457,32,[0,caml_string_of_jsbytes("Article R822-8"),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],at2=caml_string_of_jsbytes(str_0$1),atW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_413,14,num_413,65,[0,caml_string_of_jsbytes(str_Article_R822_7),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_519,14,num_519,33,[0,caml_string_of_jsbytes("Article R822-10"),[0,caml_string_of_jsbytes(str_Sous_section_2_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atJ=caml_string_of_jsbytes(str_0$1),atK=caml_string_of_jsbytes(str_0$1),atP=caml_string_of_jsbytes(str_2),atQ=caml_string_of_jsbytes("90100"),atR=caml_string_of_jsbytes("135000"),atL=caml_string_of_jsbytes(str_0$1),atM=caml_string_of_jsbytes(str_0$1),atN=caml_string_of_jsbytes(str_0$1),atO=caml_string_of_jsbytes(str_0$1),atF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_129,14,num_129,62,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atE=caml_string_of_jsbytes(str_0$1),atA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_503,51,num_503,57,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),11,14,11,41,[0,caml_string_of_jsbytes("Article 3"),[0,caml_string_of_jsbytes(str_Chapitre_II_Di_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],atv=caml_string_of_jsbytes("9500"),atr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),21,14,21,41,[0,caml_string_of_jsbytes("Article 4"),[0,caml_string_of_jsbytes(str_Chapitre_II_Di_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],atq=caml_string_of_jsbytes("258900"),atm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_493,46,num_493,52,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_495,10,num_495,15,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_495,10,num_495,15,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ato=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_ressources_m_na_abr$0),0]],ats=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_499,11,num_499,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_499,11,num_499,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],att=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_r_822_8"),0]],atx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_501,11,num_501,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_501,11,num_501,38,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aty=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_r_822_7"),0]],atB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_503,11,num_503,42,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_503,11,num_503,42,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atC=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("ressources_forfaitaires_r822_20"),0]],atG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_497,11,num_497,59,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_497,11,num_497,59,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atH=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("ressources_personnes_vivant_habituellement_foyer"),0]],atT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_502,11,num_502,30,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_502,11,num_502,30,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atU=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("abattement_r_822_10"),0]],atX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_505,3,num_505,40,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atY=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr$0),0]],atV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),5,10,5,23,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],atZ=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],at0=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes(str_base_mensuelle_a_abr),[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),0]]],at4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_498,11,num_498,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_498,11,num_498,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at5=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("abattement_r_822_8"),0]],at_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_508,10,num_508,37,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_508,10,num_508,37,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],at$=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("ressources_prises_en_compte"),0]],aue=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_500,11,num_500,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aua=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_500,11,num_500,29,[0,caml_string_of_jsbytes(str_Prise_en_compte_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],auf=[0,caml_string_of_jsbytes(str_RessourcesAidesP_abr),[0,caml_string_of_jsbytes("abattement_r_822_7"),0]],aug=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_142,13,num_143,74,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],auh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_142,13,num_143,74,[0,caml_string_of_jsbytes(str_Article_R822_2),[0,caml_string_of_jsbytes(str_Sous_section_1_abr),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],atb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_334,14,num_334,56,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_336,14,num_336,63,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as7=caml_string_of_jsbytes(str_0),as8=caml_string_of_jsbytes(str_0),as3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1132,14,num_1132,49,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asZ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),[0,caml_string_of_jsbytes(str_input),0]]],as0=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),0]],as1=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),[0,caml_string_of_jsbytes(str_output),0]]],as2=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),0]],asT=caml_string_of_jsbytes(str_1_25),asS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1208,4,1214,49,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asN=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_input),0]]],asO=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],asP=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),[0,caml_string_of_jsbytes(str_output),0]]],asQ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],asR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1189,5,num_1189,44,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1144,5,1147,44,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_303,11,num_303,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asE=[0,0],asF=caml_string_of_jsbytes(str_1_25),asD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1168,5,1184,10,[0,caml_string_of_jsbytes(str_Article_R823_4),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],asG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_324,10,num_324,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_330,5,num_332,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ass=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_163,14,num_163,31,[0,caml_string_of_jsbytes("Article L351-8"),[0,caml_string_of_jsbytes("Section 5 : Taux et montant de la pension"),[0,caml_string_of_jsbytes("Chapitre 1er : Ouverture du droit, liquidation et calcul des pensions de retraite"),[0,caml_string_of_jsbytes("Titre V : Assurance vieillesse - Assurance veuvage"),[0,caml_string_of_jsbytes("Livre III : Dispositions relatives aux assurances sociales et \xc3\xa0 diverses cat\xc3\xa9gories de personnes rattach\xc3\xa9es au r\xc3\xa9gime g\xc3\xa9n\xc3\xa9rale"),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],asm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),72,5,73,52,[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],asn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),65,5,68,52,[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]],aso=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ask=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_286,18,num_286,75,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],asc=caml_string_of_jsbytes(str_0$1),ase=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar$=[4,0],asa=[5,0],asb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_267,18,num_269,45,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ar_=caml_string_of_jsbytes(str_0$1),asf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_939,5,num_939,59,[0,caml_string_of_jsbytes(str_Article_R822_22),[0,caml_string_of_jsbytes(str_Sous_section_4_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],asg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_250,33,num_250,58,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ar7=caml_string_of_jsbytes(str_0$1),ar3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_125,14,num_125,32,[0,caml_string_of_jsbytes(str_Article_L161_17_2),[0,caml_string_of_jsbytes(str_Paragraphe_1_I_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],arY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_385,18,num_385,44,[0,caml_string_of_jsbytes("Article L822-10"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arQ=caml_string_of_jsbytes(str_0),arP=caml_string_of_jsbytes(str_0),arO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),171,5,num_177,66,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),156,5,158,30,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_125,5,131,33,[0,caml_string_of_jsbytes(str_Article_L822_2),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),203,5,208,39,[0,caml_string_of_jsbytes(str_Article_L822_4),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),197,5,198,34,[0,caml_string_of_jsbytes(str_Article_L822_4),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ary=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),329,5,num_330,35,[0,caml_string_of_jsbytes(str_Article_D815_1),[0,caml_string_of_jsbytes(str_Section_1_Ouve_abr),[0,caml_string_of_jsbytes(str_Chapitre_5_All_abr),[0,caml_string_of_jsbytes(str_Titre_I_Alloca_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_All_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],arx=caml_string_of_jsbytes("999840"),arz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_334,5,335,35,[0,caml_string_of_jsbytes(str_Article_D815_1),[0,caml_string_of_jsbytes(str_Section_1_Ouve_abr),[0,caml_string_of_jsbytes(str_Chapitre_5_All_abr),[0,caml_string_of_jsbytes(str_Titre_I_Alloca_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_All_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],aru=caml_string_of_jsbytes("1041840"),arw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ars=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),339,5,340,35,[0,caml_string_of_jsbytes(str_Article_D815_1),[0,caml_string_of_jsbytes(str_Section_1_Ouve_abr),[0,caml_string_of_jsbytes(str_Chapitre_5_All_abr),[0,caml_string_of_jsbytes(str_Titre_I_Alloca_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_All_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]],arr=caml_string_of_jsbytes("1083840"),art=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),33,5,34,34,[0,caml_string_of_jsbytes(str_Allocation_de_so_abr),[0,caml_string_of_jsbytes('Circulaire de la CNAV 2022-3 du 11/01/2022 "Revalorisation \xc3\xa0 compter du 1er janvier 2022"'),0]]],aro=caml_string_of_jsbytes("1100144"),arq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),70,5,71,34,[0,caml_string_of_jsbytes(str_Allocation_de_so_abr),[0,caml_string_of_jsbytes('Circulaire de la CNAV 2021-1 du 11/01/2021 "Revalorisation \xc3\xa0 compter du 1er janvier 2021"'),0]]],arl=caml_string_of_jsbytes("1088175"),arn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_107,5,num_110,67,[0,caml_string_of_jsbytes(str_Article_L822_2),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],arh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_246,14,num_246,40,[0,caml_string_of_jsbytes(str_Article_L822_5),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aq7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_123,14,num_123,61,[0,caml_string_of_jsbytes(str_Article_L161_17_2),[0,caml_string_of_jsbytes(str_Paragraphe_1_I_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],aq1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),46,5,46,41,[0,caml_string_of_jsbytes("Article L821-2"),[0,caml_string_of_jsbytes(str_Sous_section_1_abr$0),[0,caml_string_of_jsbytes(str_Section_2_R_g_abr),[0,caml_string_of_jsbytes(str_Chapitre_Ier_P_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aq2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqE=caml_string_of_jsbytes(str_1$0),aqQ=caml_string_of_jsbytes(str_2),aqR=caml_string_of_jsbytes(str_2),aqS=caml_string_of_jsbytes(str_2),aqT=caml_string_of_jsbytes(str_1$0),aqU=caml_string_of_jsbytes(str_2),aqF=caml_string_of_jsbytes(str_9),aqG=caml_string_of_jsbytes(str_9),aqL=caml_string_of_jsbytes(str_16),aqM=caml_string_of_jsbytes(str_16),aqN=caml_string_of_jsbytes(str_16),aqO=caml_string_of_jsbytes(str_9),aqP=caml_string_of_jsbytes(str_16),aqH=caml_string_of_jsbytes(str_70),aqI=caml_string_of_jsbytes("8"),aqJ=caml_string_of_jsbytes(str_70),aqK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),1030,5,1058,65,[0,caml_string_of_jsbytes("Article R822-25"),[0,caml_string_of_jsbytes("Section 3 : Conditions relatives au logement"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aqV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_346,18,num_346,67,[0,caml_string_of_jsbytes("Article L822-8"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aqz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_360,18,num_360,61,[0,caml_string_of_jsbytes("Article L822-9"),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aqt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_146,14,num_146,43,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],aqj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_922,14,num_922,37,[0,caml_string_of_jsbytes(str_Article_R822_22),[0,caml_string_of_jsbytes(str_Sous_section_4_abr$0),[0,caml_string_of_jsbytes(str_Section_2_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],aqi=caml_string_of_jsbytes("3000000"),aqe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_106,14,num_106,41,[0,caml_string_of_jsbytes(str_Article_R822_1),[0,caml_string_of_jsbytes(str_Section_1_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aqd=caml_string_of_jsbytes(str_0_1),ap$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_105,14,num_105,42,[0,caml_string_of_jsbytes(str_Article_R822_1),[0,caml_string_of_jsbytes(str_Section_1_Cond_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ap_=caml_string_of_jsbytes(str_0_1),ap6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_301,11,num_301,48,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_292,11,num_292,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_292,11,num_292,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_292,11,num_292,25,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap4=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_pr\xc3\xaat"),0]],ap7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_301,11,num_301,48,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_301,11,num_301,48,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap8=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_peuplement_logement_l822_10"),0]],aqa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_311,11,num_311,39,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ap9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_311,11,num_311,39,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqb=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("seuil_l822_3_parts_propri\xc3\xa9t\xc3\xa9"),0]],aqf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_312,11,num_312,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_312,11,num_312,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqg=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("seuil_l822_3_parts_usufruit"),0]],aqk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_313,11,num_313,34,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_313,11,num_313,34,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aql=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("seuil_l822_5_patrimoine"),0]],aqo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_310,11,num_310,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_310,11,num_310,40,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqp=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("usufruit_ou_propri\xc3\xa9t\xc3\xa9_famille"),0]],aqu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_299,11,num_299,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqv=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_non_ouverture_l822_9_decence_logement"),0]],aqA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_298,11,num_298,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqB=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_non_ouverture_l822_8"),0]],aqX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_297,12,num_297,38,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqY=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_surface"),0]],aq4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aqZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_294,12,num_294,51,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq5=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_r\xc3\xa9sidence_principale"),0]],aq8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_319,3,num_319,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq9=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("ouverture_droits_retraite.date_naissance_assur\xc3\xa9"),0]],aq6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1001,10,num_1001,31,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],aq_=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ouverture_droits_abr),[0,caml_string_of_jsbytes(str_OuvertureDroitsR_abr),0]]],aq$=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ouverture_droits_abr),[0,caml_string_of_jsbytes(str_OuvertureDroitsR_abr),0]]],arc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_309,11,num_309,37,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ara=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_309,11,num_309,37,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ard=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("patrimoine_total_demandeur"),0]],ari=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],are=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_293,11,num_293,32,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arj=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_nationalit\xc3\xa9"),0]],arA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ark=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_317,11,num_317,41,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arB=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("plafond_individuel_l815_9_s\xc3\xa9cu"),0]],arI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_296,11,num_296,44,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arJ=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_location_tiers"),0]],arU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_295,11,num_295,45,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arV=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_logement_mode_occupation"),0]],ar0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],arW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_300,11,num_300,58,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar1=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("condition_ouverture_l822_10_peuplement_logement"),0]],ar4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_316,11,num_316,29,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_316,11,num_316,29,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar5=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("\xc3\xa2ge_l161_17_2_s\xc3\xa9cu"),0]],ash=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ar6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_314,11,num_314,36,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asi=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("patrimoine_pris_en_compte"),0]],asp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_302,11,num_302,31,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asq=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ligibilit_lo_abr),0]],ast=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_315,11,num_315,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_315,11,num_315,28,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asu=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("\xc3\xa2ge_l351_8_1_s\xc3\xa9cu"),0]],asz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_320,10,num_320,21,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asA=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_ligibilit),0]],asI=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_condition_2_r823_4),0]],asX=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_prise_en_compte_abr),0]],as4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_305,11,num_305,46,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],asY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_305,11,num_305,46,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as5=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes("personnes_\xc3\xa0_charge_prises_en_compte"),0]],as_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_322,10,num_322,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_322,10,num_322,59,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],as$=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_coefficents_enfa_abr),0]],atc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_321,10,num_321,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],ata=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_321,10,num_321,52,[0,caml_string_of_jsbytes(str_ligibilit_au_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],atd=[0,caml_string_of_jsbytes(str_ligibilit_Aid_abr$0),[0,caml_string_of_jsbytes(str_nombre_personnes_abr),0]],atf=caml_string_of_jsbytes(str_0_2),ate=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_182,13,num_182,48,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],atj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_182,13,num_182,48,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ath=caml_string_of_jsbytes(str_0_2),atg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_181,13,num_181,49,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],ati=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_181,13,num_181,49,[0,caml_string_of_jsbytes(str_Article_L822_3),[0,caml_string_of_jsbytes(str_Chapitre_II_Co_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],apX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3375,14,num_3375,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apS=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],apT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],apU=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],apV=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],apW=caml_string_of_jsbytes(str_0$1),apY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_716,10,num_716,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_716,10,num_716,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3282,14,num_3282,33,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apM=caml_string_of_jsbytes(str_0$1),apN=caml_string_of_jsbytes(str_0$1),apI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3355,14,num_3355,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apx=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],apy=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],apz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],apA=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],apB=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],apC=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],apD=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],apE=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],apF=caml_string_of_jsbytes(str_50),apG=caml_string_of_jsbytes(str_0$1),apH=caml_string_of_jsbytes(str_0$1),apJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_715,10,num_715,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_715,10,num_715,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3410,14,num_3410,49,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apr=caml_string_of_jsbytes(str_0_95),aps=caml_string_of_jsbytes(str_0_95),apn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3302,14,num_3302,33,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],apj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3341,14,num_3341,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ao$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],apa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],apb=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],apc=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],apd=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],ape=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),0]],apf=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],apg=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),0]],aph=caml_string_of_jsbytes(str_0$1),api=caml_string_of_jsbytes(str_0$1),apk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_714,10,num_714,20,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_714,10,num_714,20,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3407,14,num_3407,49,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],ao4=caml_string_of_jsbytes(str_100),ao5=caml_string_of_jsbytes(str_100),ao6=caml_string_of_jsbytes(str_0_005),aoZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),3623,5,3635,77,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoX=caml_string_of_jsbytes(str_12),aoY=caml_string_of_jsbytes(str_0),ao0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3678,5,num_3678,75,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_444,14,num_444,42,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],aoO=caml_string_of_jsbytes(str_0_75),aoQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2584,14,num_2584,42,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aoM=caml_string_of_jsbytes(str_0_75),aoR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3750,14,num_3750,55,[0,caml_string_of_jsbytes(str_Article_D832_17),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],aoE=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),0]],aoF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],aoG=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),0]],aoH=caml_string_of_jsbytes(str_0$1),aoJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_691,11,num_691,52,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_691,11,num_691,52,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3391,14,num_3391,49,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoy=caml_string_of_jsbytes(str_0_95),aos=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3686,14,num_3686,70,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aoo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3683,14,num_3683,69,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aok=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3684,14,num_3684,75,[0,caml_string_of_jsbytes(str_Article_D832_15),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aof=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3563,5,num_3563,44,[0,caml_string_of_jsbytes(str_Article_D832_14),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],an_=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],an$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aoa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],aob=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],aoc=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],aod=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],aoe=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],aog=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_682,10,num_682,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],an8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3543,14,num_3543,42,[0,caml_string_of_jsbytes(str_Article_D832_14),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],an5=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],an6=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],an7=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],anZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3728,5,num_3728,41,[0,caml_string_of_jsbytes(str_Article_D832_17),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_690,11,num_690,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3739,14,num_3739,44,[0,caml_string_of_jsbytes(str_Article_D832_17),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],an1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_690,11,num_690,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_690,11,num_690,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3476,14,num_3476,36,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],anP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_610,5,num_613,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],anx=caml_string_of_jsbytes(str_0$1),any=caml_string_of_jsbytes(str_208500),anz=caml_string_of_jsbytes(str_251500),anA=caml_string_of_jsbytes(str_1$0),anB=caml_string_of_jsbytes(str_43000),anC=caml_string_of_jsbytes(str_294500),anD=caml_string_of_jsbytes(str_0$1),anE=caml_string_of_jsbytes(str_186000),anF=caml_string_of_jsbytes(str_223900),anG=caml_string_of_jsbytes(str_1$0),anH=caml_string_of_jsbytes(str_37900),anI=caml_string_of_jsbytes(str_261800),anJ=caml_string_of_jsbytes(str_0$1),anK=caml_string_of_jsbytes(str_173600),anL=caml_string_of_jsbytes(str_208200),anM=caml_string_of_jsbytes(str_1$0),anN=caml_string_of_jsbytes("35600"),anO=caml_string_of_jsbytes(str_242800),anQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),654,5,num_657,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],and=caml_string_of_jsbytes(str_0$1),ane=caml_string_of_jsbytes(str_167800),anf=caml_string_of_jsbytes(str_202500),ang=caml_string_of_jsbytes(str_1$0),anh=caml_string_of_jsbytes("37400"),ani=caml_string_of_jsbytes(str_237200),anj=caml_string_of_jsbytes(str_0$1),ank=caml_string_of_jsbytes("146900"),anl=caml_string_of_jsbytes(str_180100),anm=caml_string_of_jsbytes(str_1$0),ann=caml_string_of_jsbytes(str_30500),ano=caml_string_of_jsbytes("210600"),anp=caml_string_of_jsbytes(str_0$1),anq=caml_string_of_jsbytes(str_139700),anr=caml_string_of_jsbytes("167600"),ans=caml_string_of_jsbytes(str_1$0),ant=caml_string_of_jsbytes("27900"),anu=caml_string_of_jsbytes("195500"),anw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_699,5,num_701,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],amV=caml_string_of_jsbytes(str_0$1),amW=caml_string_of_jsbytes(str_184000),amX=caml_string_of_jsbytes("220000"),amY=caml_string_of_jsbytes(str_1$0),amZ=caml_string_of_jsbytes("38000"),am0=caml_string_of_jsbytes("260000"),am1=caml_string_of_jsbytes(str_0$1),am2=caml_string_of_jsbytes("164200"),am3=caml_string_of_jsbytes(str_197700),am4=caml_string_of_jsbytes(str_1$0),am5=caml_string_of_jsbytes(str_33500),am6=caml_string_of_jsbytes("231200"),am7=caml_string_of_jsbytes(str_0$1),am8=caml_string_of_jsbytes("153200"),am9=caml_string_of_jsbytes("183700"),am_=caml_string_of_jsbytes(str_1$0),am$=caml_string_of_jsbytes(str_30500),ana=caml_string_of_jsbytes("214200"),anc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],amT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),742,5,num_744,33,[0,caml_string_of_jsbytes(str_Article_17),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],amB=caml_string_of_jsbytes(str_0$1),amC=caml_string_of_jsbytes("148100"),amD=caml_string_of_jsbytes("178700"),amE=caml_string_of_jsbytes(str_1$0),amF=caml_string_of_jsbytes("30600"),amG=caml_string_of_jsbytes("209300"),amH=caml_string_of_jsbytes(str_0$1),amI=caml_string_of_jsbytes(str_132000),amJ=caml_string_of_jsbytes("158900"),amK=caml_string_of_jsbytes(str_1$0),amL=caml_string_of_jsbytes("26900"),amM=caml_string_of_jsbytes(str_185800),amN=caml_string_of_jsbytes(str_0$1),amO=caml_string_of_jsbytes("123300"),amP=caml_string_of_jsbytes("147900"),amQ=caml_string_of_jsbytes(str_1$0),amR=caml_string_of_jsbytes("24600"),amS=caml_string_of_jsbytes(str_172500),amU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],amz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),793,5,796,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],amh=caml_string_of_jsbytes(str_0$1),ami=caml_string_of_jsbytes(str_208500),amj=caml_string_of_jsbytes(str_251500),amk=caml_string_of_jsbytes(str_1$0),aml=caml_string_of_jsbytes(str_43000),amm=caml_string_of_jsbytes(str_294500),amn=caml_string_of_jsbytes(str_0$1),amo=caml_string_of_jsbytes(str_186000),amp=caml_string_of_jsbytes(str_223900),amq=caml_string_of_jsbytes(str_1$0),amr=caml_string_of_jsbytes(str_37900),ams=caml_string_of_jsbytes(str_261800),amt=caml_string_of_jsbytes(str_0$1),amu=caml_string_of_jsbytes(str_173600),amv=caml_string_of_jsbytes(str_208200),amw=caml_string_of_jsbytes(str_1$0),amx=caml_string_of_jsbytes(str_34600),amy=caml_string_of_jsbytes(str_242800),amA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],amf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_837,5,num_843,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],alZ=caml_string_of_jsbytes(str_0$1),al0=caml_string_of_jsbytes(str_167800),al1=caml_string_of_jsbytes(str_202500),al2=caml_string_of_jsbytes(str_1$0),al3=caml_string_of_jsbytes("34700"),al4=caml_string_of_jsbytes(str_237200),al5=caml_string_of_jsbytes(str_0$1),al6=caml_string_of_jsbytes("149600"),al7=caml_string_of_jsbytes(str_223900),al8=caml_string_of_jsbytes(str_1$0),al9=caml_string_of_jsbytes(str_37900),al_=caml_string_of_jsbytes(str_261800),al$=caml_string_of_jsbytes(str_0$1),ama=caml_string_of_jsbytes(str_139700),amb=caml_string_of_jsbytes(str_208200),amc=caml_string_of_jsbytes(str_1$0),amd=caml_string_of_jsbytes(str_34600),ame=caml_string_of_jsbytes(str_242800),amg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),884,5,num_890,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],alR=caml_string_of_jsbytes(str_0$1),alS=caml_string_of_jsbytes("86900"),alT=caml_string_of_jsbytes("97100"),alU=caml_string_of_jsbytes(str_1$0),alV=caml_string_of_jsbytes("10200"),alW=caml_string_of_jsbytes("107300"),alY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_916,5,num_919,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],alx=caml_string_of_jsbytes(str_0$1),aly=caml_string_of_jsbytes("198100"),alz=caml_string_of_jsbytes("239000"),alA=caml_string_of_jsbytes(str_1$0),alB=caml_string_of_jsbytes("40900"),alC=caml_string_of_jsbytes("279900"),alD=caml_string_of_jsbytes(str_0$1),alE=caml_string_of_jsbytes("176800"),alF=caml_string_of_jsbytes("212800"),alG=caml_string_of_jsbytes(str_1$0),alH=caml_string_of_jsbytes("36000"),alI=caml_string_of_jsbytes("248800"),alJ=caml_string_of_jsbytes(str_0$1),alK=caml_string_of_jsbytes("165000"),alL=caml_string_of_jsbytes("197900"),alM=caml_string_of_jsbytes(str_1$0),alN=caml_string_of_jsbytes("32900"),alO=caml_string_of_jsbytes("230800"),alQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),960,5,num_963,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ald=caml_string_of_jsbytes(str_0$1),ale=caml_string_of_jsbytes("159500"),alf=caml_string_of_jsbytes(str_192500),alg=caml_string_of_jsbytes(str_1$0),alh=caml_string_of_jsbytes("33000"),ali=caml_string_of_jsbytes(str_225500),alj=caml_string_of_jsbytes(str_0$1),alk=caml_string_of_jsbytes("142200"),all=caml_string_of_jsbytes("171200"),alm=caml_string_of_jsbytes(str_1$0),aln=caml_string_of_jsbytes("29000"),alo=caml_string_of_jsbytes("200200"),alp=caml_string_of_jsbytes(str_0$1),alq=caml_string_of_jsbytes("132800"),alr=caml_string_of_jsbytes("159300"),als=caml_string_of_jsbytes(str_1$0),alt=caml_string_of_jsbytes("26500"),alu=caml_string_of_jsbytes(str_185800),alw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],alb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1005,5,1008,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],akV=caml_string_of_jsbytes(str_0$1),akW=caml_string_of_jsbytes("200100"),akX=caml_string_of_jsbytes("141400"),akY=caml_string_of_jsbytes(str_1$0),akZ=caml_string_of_jsbytes("41300"),ak0=caml_string_of_jsbytes("282700"),ak1=caml_string_of_jsbytes(str_0$1),ak2=caml_string_of_jsbytes("178600"),ak3=caml_string_of_jsbytes("215000"),ak4=caml_string_of_jsbytes(str_1$0),ak5=caml_string_of_jsbytes("36400"),ak6=caml_string_of_jsbytes("251400"),ak7=caml_string_of_jsbytes(str_0$1),ak8=caml_string_of_jsbytes("166700"),ak9=caml_string_of_jsbytes(str_199900),ak_=caml_string_of_jsbytes(str_1$0),ak$=caml_string_of_jsbytes("33200"),ala=caml_string_of_jsbytes("233100"),alc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],akT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1049,5,1052,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],akB=caml_string_of_jsbytes(str_0$1),akC=caml_string_of_jsbytes("161100"),akD=caml_string_of_jsbytes("194400"),akE=caml_string_of_jsbytes(str_1$0),akF=caml_string_of_jsbytes("33300"),akG=caml_string_of_jsbytes("227700"),akH=caml_string_of_jsbytes(str_0$1),akI=caml_string_of_jsbytes("143600"),akJ=caml_string_of_jsbytes("172900"),akK=caml_string_of_jsbytes(str_1$0),akL=caml_string_of_jsbytes("29300"),akM=caml_string_of_jsbytes("202200"),akN=caml_string_of_jsbytes(str_0$1),akO=caml_string_of_jsbytes("134100"),akP=caml_string_of_jsbytes("160900"),akQ=caml_string_of_jsbytes(str_1$0),akR=caml_string_of_jsbytes("26800"),akS=caml_string_of_jsbytes("187700"),akU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],akz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1096,5,1099,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],akh=caml_string_of_jsbytes(str_0$1),aki=caml_string_of_jsbytes(str_202500),akj=caml_string_of_jsbytes("244300"),akk=caml_string_of_jsbytes(str_1$0),akl=caml_string_of_jsbytes("41800"),akm=caml_string_of_jsbytes("286100"),akn=caml_string_of_jsbytes(str_0$1),ako=caml_string_of_jsbytes("180700"),akp=caml_string_of_jsbytes("217500"),akq=caml_string_of_jsbytes(str_1$0),akr=caml_string_of_jsbytes("36800"),aks=caml_string_of_jsbytes("254300"),akt=caml_string_of_jsbytes(str_0$1),aku=caml_string_of_jsbytes("168700"),akv=caml_string_of_jsbytes("202300"),akw=caml_string_of_jsbytes(str_1$0),akx=caml_string_of_jsbytes("33600"),aky=caml_string_of_jsbytes("235900"),akA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],akf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1139,5,1142,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ajZ=caml_string_of_jsbytes(str_0$1),aj0=caml_string_of_jsbytes("30871"),aj1=caml_string_of_jsbytes("37243"),aj2=caml_string_of_jsbytes(str_1$0),aj3=caml_string_of_jsbytes("6372"),aj4=caml_string_of_jsbytes("43615"),aj5=caml_string_of_jsbytes(str_0$1),aj6=caml_string_of_jsbytes("27548"),aj7=caml_string_of_jsbytes("33148"),aj8=caml_string_of_jsbytes(str_1$0),aj9=caml_string_of_jsbytes("5610"),aj_=caml_string_of_jsbytes("38768"),aj$=caml_string_of_jsbytes(str_0$1),aka=caml_string_of_jsbytes("25718"),akb=caml_string_of_jsbytes("30840"),akc=caml_string_of_jsbytes(str_1$0),akd=caml_string_of_jsbytes("5122"),ake=caml_string_of_jsbytes("35962"),akg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ajX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1185,5,1188,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ajF=caml_string_of_jsbytes(str_0$1),ajG=caml_string_of_jsbytes(str_163000),ajH=caml_string_of_jsbytes("196700"),ajI=caml_string_of_jsbytes(str_1$0),ajJ=caml_string_of_jsbytes("33700"),ajK=caml_string_of_jsbytes("230400"),ajL=caml_string_of_jsbytes(str_0$1),ajM=caml_string_of_jsbytes("145300"),ajN=caml_string_of_jsbytes("175000"),ajO=caml_string_of_jsbytes(str_1$0),ajP=caml_string_of_jsbytes("29700"),ajQ=caml_string_of_jsbytes(str_204700),ajR=caml_string_of_jsbytes(str_0$1),ajS=caml_string_of_jsbytes("135700"),ajT=caml_string_of_jsbytes("162800"),ajU=caml_string_of_jsbytes(str_1$0),ajV=caml_string_of_jsbytes("27100"),ajW=caml_string_of_jsbytes("189900"),ajY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ajD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1228,5,1231,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ajl=caml_string_of_jsbytes(str_0$1),ajm=caml_string_of_jsbytes("24849"),ajn=caml_string_of_jsbytes("29987"),ajo=caml_string_of_jsbytes(str_1$0),ajp=caml_string_of_jsbytes("5138"),ajq=caml_string_of_jsbytes("35125"),ajr=caml_string_of_jsbytes(str_0$1),ajs=caml_string_of_jsbytes("22151"),ajt=caml_string_of_jsbytes("26679"),aju=caml_string_of_jsbytes(str_1$0),ajv=caml_string_of_jsbytes("4528"),ajw=caml_string_of_jsbytes("31207"),ajx=caml_string_of_jsbytes(str_0$1),ajy=caml_string_of_jsbytes("20687"),ajz=caml_string_of_jsbytes("24818"),ajA=caml_string_of_jsbytes(str_1$0),ajB=caml_string_of_jsbytes("4131"),ajC=caml_string_of_jsbytes("28949"),ajE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ajj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1273,5,1276,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ai3=caml_string_of_jsbytes(str_0$1),ai4=caml_string_of_jsbytes("31241"),ai5=caml_string_of_jsbytes("37689"),ai6=caml_string_of_jsbytes(str_1$0),ai7=caml_string_of_jsbytes("6448"),ai8=caml_string_of_jsbytes("44137"),ai9=caml_string_of_jsbytes(str_0$1),ai_=caml_string_of_jsbytes("27879"),ai$=caml_string_of_jsbytes("33556"),aja=caml_string_of_jsbytes(str_1$0),ajb=caml_string_of_jsbytes("5677"),ajc=caml_string_of_jsbytes("39233"),ajd=caml_string_of_jsbytes(str_0$1),aje=caml_string_of_jsbytes("26027"),ajf=caml_string_of_jsbytes("31210"),ajg=caml_string_of_jsbytes(str_1$0),ajh=caml_string_of_jsbytes("5183"),aji=caml_string_of_jsbytes("36393"),ajk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ai1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1317,5,1320,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aiJ=caml_string_of_jsbytes(str_0$1),aiK=caml_string_of_jsbytes("25147"),aiL=caml_string_of_jsbytes("30347"),aiM=caml_string_of_jsbytes(str_1$0),aiN=caml_string_of_jsbytes("5200"),aiO=caml_string_of_jsbytes("35547"),aiP=caml_string_of_jsbytes(str_0$1),aiQ=caml_string_of_jsbytes("22417"),aiR=caml_string_of_jsbytes("26999"),aiS=caml_string_of_jsbytes(str_1$0),aiT=caml_string_of_jsbytes("4582"),aiU=caml_string_of_jsbytes("31581"),aiV=caml_string_of_jsbytes(str_0$1),aiW=caml_string_of_jsbytes("20935"),aiX=caml_string_of_jsbytes(str_25116),aiY=caml_string_of_jsbytes(str_1$0),aiZ=caml_string_of_jsbytes("4181"),ai0=caml_string_of_jsbytes("29297"),ai2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aiH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1362,5,1365,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aip=caml_string_of_jsbytes(str_0$1),aiq=caml_string_of_jsbytes("31616"),air=caml_string_of_jsbytes("38141"),ais=caml_string_of_jsbytes(str_1$0),ait=caml_string_of_jsbytes("6525"),aiu=caml_string_of_jsbytes("44666"),aiv=caml_string_of_jsbytes(str_0$1),aiw=caml_string_of_jsbytes("28214"),aix=caml_string_of_jsbytes("33959"),aiy=caml_string_of_jsbytes(str_1$0),aiz=caml_string_of_jsbytes("5745"),aiA=caml_string_of_jsbytes("39704"),aiB=caml_string_of_jsbytes(str_0$1),aiC=caml_string_of_jsbytes("26339"),aiD=caml_string_of_jsbytes("31584"),aiE=caml_string_of_jsbytes(str_1$0),aiF=caml_string_of_jsbytes("5245"),aiG=caml_string_of_jsbytes("36829"),aiI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ain=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1406,5,1409,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ah7=caml_string_of_jsbytes(str_0$1),ah8=caml_string_of_jsbytes("25449"),ah9=caml_string_of_jsbytes("30711"),ah_=caml_string_of_jsbytes(str_1$0),ah$=caml_string_of_jsbytes("5262"),aia=caml_string_of_jsbytes("35973"),aib=caml_string_of_jsbytes(str_0$1),aic=caml_string_of_jsbytes("22686"),aid=caml_string_of_jsbytes("27323"),aie=caml_string_of_jsbytes(str_1$0),aif=caml_string_of_jsbytes("4637"),aig=caml_string_of_jsbytes("31960"),aih=caml_string_of_jsbytes(str_0$1),aii=caml_string_of_jsbytes("21186"),aij=caml_string_of_jsbytes("25417"),aik=caml_string_of_jsbytes(str_1$0),ail=caml_string_of_jsbytes("4231"),aim=caml_string_of_jsbytes("26948"),aio=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ah5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1451,5,1454,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ahN=caml_string_of_jsbytes(str_0$1),ahO=caml_string_of_jsbytes("32185"),ahP=caml_string_of_jsbytes("38827"),ahQ=caml_string_of_jsbytes(str_1$0),ahR=caml_string_of_jsbytes("6642"),ahS=caml_string_of_jsbytes("45469"),ahT=caml_string_of_jsbytes(str_0$1),ahU=caml_string_of_jsbytes("28722"),ahV=caml_string_of_jsbytes(str_34570),ahW=caml_string_of_jsbytes(str_1$0),ahX=caml_string_of_jsbytes("5848"),ahY=caml_string_of_jsbytes("40418"),ahZ=caml_string_of_jsbytes(str_0$1),ah0=caml_string_of_jsbytes("26813"),ah1=caml_string_of_jsbytes("32152"),ah2=caml_string_of_jsbytes(str_1$0),ah3=caml_string_of_jsbytes("5339"),ah4=caml_string_of_jsbytes("37491"),ah6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ahL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1495,5,1498,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aht=caml_string_of_jsbytes(str_0$1),ahu=caml_string_of_jsbytes("25907"),ahv=caml_string_of_jsbytes(str_31264),ahw=caml_string_of_jsbytes(str_1$0),ahx=caml_string_of_jsbytes("5357"),ahy=caml_string_of_jsbytes("36621"),ahz=caml_string_of_jsbytes(str_0$1),ahA=caml_string_of_jsbytes("23094"),ahB=caml_string_of_jsbytes("27814"),ahC=caml_string_of_jsbytes(str_1$0),ahD=caml_string_of_jsbytes("4720"),ahE=caml_string_of_jsbytes("32534"),ahF=caml_string_of_jsbytes(str_0$1),ahG=caml_string_of_jsbytes("21567"),ahH=caml_string_of_jsbytes("25874"),ahI=caml_string_of_jsbytes(str_1$0),ahJ=caml_string_of_jsbytes("4307"),ahK=caml_string_of_jsbytes("30881"),ahM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ahr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1540,5,1543,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ag$=caml_string_of_jsbytes(str_0$1),aha=caml_string_of_jsbytes(str_33026),ahb=caml_string_of_jsbytes("39914"),ahc=caml_string_of_jsbytes(str_1$0),ahd=caml_string_of_jsbytes("6828"),ahe=caml_string_of_jsbytes("46742"),ahf=caml_string_of_jsbytes(str_0$1),ahg=caml_string_of_jsbytes("29526"),ahh=caml_string_of_jsbytes("35538"),ahi=caml_string_of_jsbytes(str_1$0),ahj=caml_string_of_jsbytes("6012"),ahk=caml_string_of_jsbytes("41550"),ahl=caml_string_of_jsbytes(str_0$1),ahm=caml_string_of_jsbytes("27564"),ahn=caml_string_of_jsbytes("33052"),aho=caml_string_of_jsbytes(str_1$0),ahp=caml_string_of_jsbytes("5488"),ahq=caml_string_of_jsbytes("38541"),ahs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ag9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1584,5,1587,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],agR=caml_string_of_jsbytes(str_0$1),agS=caml_string_of_jsbytes("26632"),agT=caml_string_of_jsbytes("32139"),agU=caml_string_of_jsbytes(str_1$0),agV=caml_string_of_jsbytes("5507"),agW=caml_string_of_jsbytes("37646"),agX=caml_string_of_jsbytes(str_0$1),agY=caml_string_of_jsbytes("23741"),agZ=caml_string_of_jsbytes("28593"),ag0=caml_string_of_jsbytes(str_1$0),ag1=caml_string_of_jsbytes("4852"),ag2=caml_string_of_jsbytes("33445"),ag3=caml_string_of_jsbytes(str_0$1),ag4=caml_string_of_jsbytes("22171"),ag5=caml_string_of_jsbytes("36598"),ag6=caml_string_of_jsbytes(str_1$0),ag7=caml_string_of_jsbytes("4428"),ag8=caml_string_of_jsbytes("31026"),ag_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],agP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1629,5,1632,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],agx=caml_string_of_jsbytes(str_0$1),agy=caml_string_of_jsbytes("33999"),agz=caml_string_of_jsbytes("41016"),agA=caml_string_of_jsbytes(str_1$0),agB=caml_string_of_jsbytes("7016"),agC=caml_string_of_jsbytes("48032"),agD=caml_string_of_jsbytes(str_0$1),agE=caml_string_of_jsbytes("30341"),agF=caml_string_of_jsbytes("36519"),agG=caml_string_of_jsbytes(str_1$0),agH=caml_string_of_jsbytes("6178"),agI=caml_string_of_jsbytes("42697"),agJ=caml_string_of_jsbytes(str_0$1),agK=caml_string_of_jsbytes("28325"),agL=caml_string_of_jsbytes("33964"),agM=caml_string_of_jsbytes(str_1$0),agN=caml_string_of_jsbytes("5639"),agO=caml_string_of_jsbytes("39605"),agQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],agv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_1673,5,1676,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],agd=caml_string_of_jsbytes(str_0$1),age=caml_string_of_jsbytes("27367"),agf=caml_string_of_jsbytes(str_33026),agg=caml_string_of_jsbytes(str_1$0),agh=caml_string_of_jsbytes("5659"),agi=caml_string_of_jsbytes("38685"),agj=caml_string_of_jsbytes(str_0$1),agk=caml_string_of_jsbytes("24396"),agl=caml_string_of_jsbytes("29382"),agm=caml_string_of_jsbytes(str_1$0),agn=caml_string_of_jsbytes(str_4986),ago=caml_string_of_jsbytes("34368"),agp=caml_string_of_jsbytes(str_0$1),agq=caml_string_of_jsbytes("22783"),agr=caml_string_of_jsbytes("27332"),ags=caml_string_of_jsbytes(str_1$0),agt=caml_string_of_jsbytes("4550"),agu=caml_string_of_jsbytes("31882"),agw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],agb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1718,5,1721,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],afV=caml_string_of_jsbytes(str_0$1),afW=caml_string_of_jsbytes("35002"),afX=caml_string_of_jsbytes("42226"),afY=caml_string_of_jsbytes(str_1$0),afZ=caml_string_of_jsbytes("7223"),af0=caml_string_of_jsbytes("49449"),af1=caml_string_of_jsbytes(str_0$1),af2=caml_string_of_jsbytes("31236"),af3=caml_string_of_jsbytes("37596"),af4=caml_string_of_jsbytes(str_1$0),af5=caml_string_of_jsbytes("6360"),af6=caml_string_of_jsbytes("43957"),af7=caml_string_of_jsbytes(str_0$1),af8=caml_string_of_jsbytes("29161"),af9=caml_string_of_jsbytes("34966"),af_=caml_string_of_jsbytes(str_1$0),af$=caml_string_of_jsbytes("5805"),aga=caml_string_of_jsbytes("40773"),agc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],afT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1762,5,1765,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],afB=caml_string_of_jsbytes(str_0$1),afC=caml_string_of_jsbytes("28174"),afD=caml_string_of_jsbytes("34000"),afE=caml_string_of_jsbytes(str_1$0),afF=caml_string_of_jsbytes("5826"),afG=caml_string_of_jsbytes("39826"),afH=caml_string_of_jsbytes(str_0$1),afI=caml_string_of_jsbytes(str_25116),afJ=caml_string_of_jsbytes("30249"),afK=caml_string_of_jsbytes(str_1$0),afL=caml_string_of_jsbytes("5133"),afM=caml_string_of_jsbytes("35382"),afN=caml_string_of_jsbytes(str_0$1),afO=caml_string_of_jsbytes("23455"),afP=caml_string_of_jsbytes("28138"),afQ=caml_string_of_jsbytes(str_1$0),afR=caml_string_of_jsbytes("4684"),afS=caml_string_of_jsbytes("32823"),afU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],afz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1807,5,1810,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],afh=caml_string_of_jsbytes(str_0$1),afi=caml_string_of_jsbytes("35114"),afj=caml_string_of_jsbytes("42361"),afk=caml_string_of_jsbytes(str_1$0),afl=caml_string_of_jsbytes("7246"),afm=caml_string_of_jsbytes("49607"),afn=caml_string_of_jsbytes(str_0$1),afo=caml_string_of_jsbytes("31336"),afp=caml_string_of_jsbytes("37716"),afq=caml_string_of_jsbytes(str_1$0),afr=caml_string_of_jsbytes("6380"),afs=caml_string_of_jsbytes("44098"),aft=caml_string_of_jsbytes(str_0$1),afu=caml_string_of_jsbytes("29254"),afv=caml_string_of_jsbytes("35078"),afw=caml_string_of_jsbytes(str_1$0),afx=caml_string_of_jsbytes("5824"),afy=caml_string_of_jsbytes("40903"),afA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aff=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1851,5,1854,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aeZ=caml_string_of_jsbytes(str_0$1),ae0=caml_string_of_jsbytes("28264"),ae1=caml_string_of_jsbytes("34109"),ae2=caml_string_of_jsbytes(str_1$0),ae3=caml_string_of_jsbytes("5845"),ae4=caml_string_of_jsbytes("39953"),ae5=caml_string_of_jsbytes(str_0$1),ae6=caml_string_of_jsbytes("25196"),ae7=caml_string_of_jsbytes("30346"),ae8=caml_string_of_jsbytes(str_1$0),ae9=caml_string_of_jsbytes("5149"),ae_=caml_string_of_jsbytes("35495"),ae$=caml_string_of_jsbytes(str_0$1),afa=caml_string_of_jsbytes("23530"),afb=caml_string_of_jsbytes("28228"),afc=caml_string_of_jsbytes(str_1$0),afd=caml_string_of_jsbytes("4699"),afe=caml_string_of_jsbytes("32928"),afg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aeX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1896,5,1899,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aeF=caml_string_of_jsbytes(str_0$1),aeG=caml_string_of_jsbytes("35500"),aeH=caml_string_of_jsbytes("42827"),aeI=caml_string_of_jsbytes(str_1$0),aeJ=caml_string_of_jsbytes("7326"),aeK=caml_string_of_jsbytes("50153"),aeL=caml_string_of_jsbytes(str_0$1),aeM=caml_string_of_jsbytes("31681"),aeN=caml_string_of_jsbytes("38131"),aeO=caml_string_of_jsbytes(str_1$0),aeP=caml_string_of_jsbytes("6450"),aeQ=caml_string_of_jsbytes("44583"),aeR=caml_string_of_jsbytes(str_0$1),aeS=caml_string_of_jsbytes("29576"),aeT=caml_string_of_jsbytes("35464"),aeU=caml_string_of_jsbytes(str_1$0),aeV=caml_string_of_jsbytes("5888"),aeW=caml_string_of_jsbytes("41353"),aeY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aeD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1940,5,1943,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ael=caml_string_of_jsbytes(str_0$1),aem=caml_string_of_jsbytes("28575"),aen=caml_string_of_jsbytes("34484"),aeo=caml_string_of_jsbytes(str_1$0),aep=caml_string_of_jsbytes("5909"),aeq=caml_string_of_jsbytes("40392"),aer=caml_string_of_jsbytes(str_0$1),aes=caml_string_of_jsbytes("25473"),aet=caml_string_of_jsbytes("30680"),aeu=caml_string_of_jsbytes(str_1$0),aev=caml_string_of_jsbytes("5206"),aew=caml_string_of_jsbytes("35885"),aex=caml_string_of_jsbytes(str_0$1),aey=caml_string_of_jsbytes("23789"),aez=caml_string_of_jsbytes("28539"),aeA=caml_string_of_jsbytes(str_1$0),aeB=caml_string_of_jsbytes("4751"),aeC=caml_string_of_jsbytes("33290"),aeE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aej=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),1985,5,1988,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ad3=caml_string_of_jsbytes(str_0$1),ad4=caml_string_of_jsbytes("35855"),ad5=caml_string_of_jsbytes("43255"),ad6=caml_string_of_jsbytes(str_1$0),ad7=caml_string_of_jsbytes("7399"),ad8=caml_string_of_jsbytes("50655"),ad9=caml_string_of_jsbytes(str_0$1),ad_=caml_string_of_jsbytes("31998"),ad$=caml_string_of_jsbytes("38512"),aea=caml_string_of_jsbytes(str_1$0),aeb=caml_string_of_jsbytes("6515"),aec=caml_string_of_jsbytes("45029"),aed=caml_string_of_jsbytes(str_0$1),aee=caml_string_of_jsbytes("29872"),aef=caml_string_of_jsbytes("35819"),aeg=caml_string_of_jsbytes(str_1$0),aeh=caml_string_of_jsbytes("5947"),aei=caml_string_of_jsbytes("41767"),aek=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ad1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2030,5,2033,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],adJ=caml_string_of_jsbytes(str_0$1),adK=caml_string_of_jsbytes("28861"),adL=caml_string_of_jsbytes(str_34829),adM=caml_string_of_jsbytes(str_1$0),adN=caml_string_of_jsbytes("5968"),adO=caml_string_of_jsbytes("40796"),adP=caml_string_of_jsbytes(str_0$1),adQ=caml_string_of_jsbytes("25728"),adR=caml_string_of_jsbytes("30987"),adS=caml_string_of_jsbytes(str_1$0),adT=caml_string_of_jsbytes("5258"),adU=caml_string_of_jsbytes("36244"),adV=caml_string_of_jsbytes(str_0$1),adW=caml_string_of_jsbytes("24027"),adX=caml_string_of_jsbytes("28824"),adY=caml_string_of_jsbytes(str_1$0),adZ=caml_string_of_jsbytes("4799"),ad0=caml_string_of_jsbytes(str_33623),ad2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],adH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2075,5,2078,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],adp=caml_string_of_jsbytes(str_0$1),adq=caml_string_of_jsbytes("36626"),adr=caml_string_of_jsbytes("44185"),ads=caml_string_of_jsbytes(str_1$0),adt=caml_string_of_jsbytes("7558"),adu=caml_string_of_jsbytes("51744"),adv=caml_string_of_jsbytes(str_0$1),adw=caml_string_of_jsbytes("32686"),adx=caml_string_of_jsbytes(str_39340),ady=caml_string_of_jsbytes(str_1$0),adz=caml_string_of_jsbytes("6655"),adA=caml_string_of_jsbytes("45997"),adB=caml_string_of_jsbytes(str_0$1),adC=caml_string_of_jsbytes("30514"),adD=caml_string_of_jsbytes("36589"),adE=caml_string_of_jsbytes(str_1$0),adF=caml_string_of_jsbytes("6075"),adG=caml_string_of_jsbytes("42665"),adI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],adn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2119,5,2122,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ac7=caml_string_of_jsbytes(str_0$1),ac8=caml_string_of_jsbytes("29482"),ac9=caml_string_of_jsbytes("35578"),ac_=caml_string_of_jsbytes(str_1$0),ac$=caml_string_of_jsbytes("6096"),ada=caml_string_of_jsbytes("41673"),adb=caml_string_of_jsbytes(str_0$1),adc=caml_string_of_jsbytes("26281"),add=caml_string_of_jsbytes("31653"),ade=caml_string_of_jsbytes(str_1$0),adf=caml_string_of_jsbytes("5371"),adg=caml_string_of_jsbytes("37023"),adh=caml_string_of_jsbytes(str_0$1),adi=caml_string_of_jsbytes("24544"),adj=caml_string_of_jsbytes("29444"),adk=caml_string_of_jsbytes(str_1$0),adl=caml_string_of_jsbytes("4902"),adm=caml_string_of_jsbytes("34346"),ado=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ac5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2164,5,2167,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],acN=caml_string_of_jsbytes(str_0$1),acO=caml_string_of_jsbytes("36835"),acP=caml_string_of_jsbytes("44437"),acQ=caml_string_of_jsbytes(str_1$0),acR=caml_string_of_jsbytes("7601"),acS=caml_string_of_jsbytes("52039"),acT=caml_string_of_jsbytes(str_0$1),acU=caml_string_of_jsbytes("32872"),acV=caml_string_of_jsbytes("39564"),acW=caml_string_of_jsbytes(str_1$0),acX=caml_string_of_jsbytes("6693"),acY=caml_string_of_jsbytes("46259"),acZ=caml_string_of_jsbytes(str_0$1),ac0=caml_string_of_jsbytes("30688"),ac1=caml_string_of_jsbytes("36798"),ac2=caml_string_of_jsbytes(str_1$0),ac3=caml_string_of_jsbytes("6110"),ac4=caml_string_of_jsbytes("42908"),ac6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],acL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2208,5,2211,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],act=caml_string_of_jsbytes(str_0$1),acu=caml_string_of_jsbytes("29650"),acv=caml_string_of_jsbytes("35781"),acw=caml_string_of_jsbytes(str_1$0),acx=caml_string_of_jsbytes("6131"),acy=caml_string_of_jsbytes("41911"),acz=caml_string_of_jsbytes(str_0$1),acA=caml_string_of_jsbytes("26431"),acB=caml_string_of_jsbytes("31833"),acC=caml_string_of_jsbytes(str_1$0),acD=caml_string_of_jsbytes("5402"),acE=caml_string_of_jsbytes("37234"),acF=caml_string_of_jsbytes(str_0$1),acG=caml_string_of_jsbytes("24684"),acH=caml_string_of_jsbytes("29612"),acI=caml_string_of_jsbytes(str_1$0),acJ=caml_string_of_jsbytes("4930"),acK=caml_string_of_jsbytes("34542"),acM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],acr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2253,5,2256,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],ab$=caml_string_of_jsbytes(str_0$1),aca=caml_string_of_jsbytes("36864"),acb=caml_string_of_jsbytes("44473"),acc=caml_string_of_jsbytes(str_1$0),acd=caml_string_of_jsbytes("7607"),ace=caml_string_of_jsbytes("52081"),acf=caml_string_of_jsbytes(str_0$1),acg=caml_string_of_jsbytes("32898"),ach=caml_string_of_jsbytes("39596"),aci=caml_string_of_jsbytes(str_1$0),acj=caml_string_of_jsbytes("6698"),ack=caml_string_of_jsbytes("46296"),acl=caml_string_of_jsbytes(str_0$1),acm=caml_string_of_jsbytes("30713"),acn=caml_string_of_jsbytes("36827"),aco=caml_string_of_jsbytes(str_1$0),acp=caml_string_of_jsbytes("6115"),acq=caml_string_of_jsbytes("42942"),acs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ab9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2297,5,2300,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],abR=caml_string_of_jsbytes(str_0$1),abS=caml_string_of_jsbytes("29674"),abT=caml_string_of_jsbytes("35810"),abU=caml_string_of_jsbytes(str_1$0),abV=caml_string_of_jsbytes("6136"),abW=caml_string_of_jsbytes("41945"),abX=caml_string_of_jsbytes(str_0$1),abY=caml_string_of_jsbytes("26452"),abZ=caml_string_of_jsbytes("31858"),ab0=caml_string_of_jsbytes(str_1$0),ab1=caml_string_of_jsbytes("5406"),ab2=caml_string_of_jsbytes("37264"),ab3=caml_string_of_jsbytes(str_0$1),ab4=caml_string_of_jsbytes("24704"),ab5=caml_string_of_jsbytes("29636"),ab6=caml_string_of_jsbytes(str_1$0),ab7=caml_string_of_jsbytes("4934"),ab8=caml_string_of_jsbytes(str_34570),ab_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],abP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2342,5,2345,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],abx=caml_string_of_jsbytes(str_0$1),aby=caml_string_of_jsbytes("37140"),abz=caml_string_of_jsbytes("44807"),abA=caml_string_of_jsbytes(str_1$0),abB=caml_string_of_jsbytes("7664"),abC=caml_string_of_jsbytes("52472"),abD=caml_string_of_jsbytes(str_0$1),abE=caml_string_of_jsbytes("33145"),abF=caml_string_of_jsbytes("39893"),abG=caml_string_of_jsbytes(str_1$0),abH=caml_string_of_jsbytes("6748"),abI=caml_string_of_jsbytes("46643"),abJ=caml_string_of_jsbytes(str_0$1),abK=caml_string_of_jsbytes("30943"),abL=caml_string_of_jsbytes("37103"),abM=caml_string_of_jsbytes(str_1$0),abN=caml_string_of_jsbytes("6161"),abO=caml_string_of_jsbytes("43264"),abQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],abv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2386,5,2389,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],abd=caml_string_of_jsbytes(str_0$1),abe=caml_string_of_jsbytes("29897"),abf=caml_string_of_jsbytes("36079"),abg=caml_string_of_jsbytes(str_1$0),abh=caml_string_of_jsbytes("6182"),abi=caml_string_of_jsbytes("42260"),abj=caml_string_of_jsbytes(str_0$1),abk=caml_string_of_jsbytes("26650"),abl=caml_string_of_jsbytes("32097"),abm=caml_string_of_jsbytes(str_1$0),abn=caml_string_of_jsbytes("5447"),abo=caml_string_of_jsbytes("37543"),abp=caml_string_of_jsbytes(str_0$1),abq=caml_string_of_jsbytes("24889"),abr=caml_string_of_jsbytes("29858"),abs=caml_string_of_jsbytes(str_1$0),abt=caml_string_of_jsbytes("4971"),abu=caml_string_of_jsbytes(str_34829),abw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],abb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2431,5,2433,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aaV=caml_string_of_jsbytes(str_0$1),aaW=caml_string_of_jsbytes("37252"),aaX=caml_string_of_jsbytes("44941"),aaY=caml_string_of_jsbytes(str_1$0),aaZ=caml_string_of_jsbytes("7687"),aa0=caml_string_of_jsbytes("52629"),aa1=caml_string_of_jsbytes(str_0$1),aa2=caml_string_of_jsbytes("33244"),aa3=caml_string_of_jsbytes("40013"),aa4=caml_string_of_jsbytes(str_1$0),aa5=caml_string_of_jsbytes("6768"),aa6=caml_string_of_jsbytes("46783"),aa7=caml_string_of_jsbytes(str_0$1),aa8=caml_string_of_jsbytes("31036"),aa9=caml_string_of_jsbytes("37215"),aa_=caml_string_of_jsbytes(str_1$0),aa$=caml_string_of_jsbytes("6179"),aba=caml_string_of_jsbytes("43394"),abc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),2474,5,2476,36,[0,caml_string_of_jsbytes(str_Article_18),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aaB=caml_string_of_jsbytes(str_0$1),aaC=caml_string_of_jsbytes("29986"),aaD=caml_string_of_jsbytes("36187"),aaE=caml_string_of_jsbytes(str_1$0),aaF=caml_string_of_jsbytes("6201"),aaG=caml_string_of_jsbytes("42386"),aaH=caml_string_of_jsbytes(str_0$1),aaI=caml_string_of_jsbytes("26730"),aaJ=caml_string_of_jsbytes("32193"),aaK=caml_string_of_jsbytes(str_1$0),aaL=caml_string_of_jsbytes("5463"),aaM=caml_string_of_jsbytes("37656"),aaN=caml_string_of_jsbytes(str_0$1),aaO=caml_string_of_jsbytes("24964"),aaP=caml_string_of_jsbytes("29948"),aaQ=caml_string_of_jsbytes(str_1$0),aaR=caml_string_of_jsbytes(str_4986),aaS=caml_string_of_jsbytes("34934"),aaU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_684,11,num_684,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3792,5,num_3792,28,[0,caml_string_of_jsbytes(str_Article_D832_18),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aax=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_693,11,num_693,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aav=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3784,14,num_3784,44,[0,caml_string_of_jsbytes(str_Article_D832_18),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aar=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3327,14,num_3327,36,[0,caml_string_of_jsbytes(str_Article_D832_10),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],aap=caml_string_of_jsbytes(str_0$1),aaq=caml_string_of_jsbytes(str_0$1),aas=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_713,10,num_713,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aao=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_713,10,num_713,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2603,7,num_2603,18,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],aag=caml_string_of_jsbytes(str_1229),aah=caml_string_of_jsbytes(str_2710),aai=caml_string_of_jsbytes(str_5422),aak=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aae=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_464,7,num_464,18,[0,caml_string_of_jsbytes(str_Article_24),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],aab=caml_string_of_jsbytes(str_1224),aac=caml_string_of_jsbytes(str_2699),aad=caml_string_of_jsbytes(str_5399),aaf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aal=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2524,29,num_2524,64,[0,caml_string_of_jsbytes(str_Article_19),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$8=caml_string_of_jsbytes(str_1229),$9=caml_string_of_jsbytes(str_5422),$$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_429,29,num_429,64,[0,caml_string_of_jsbytes(str_Article_19),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],$4=caml_string_of_jsbytes(str_1224),$5=caml_string_of_jsbytes(str_5399),$7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_719,14,num_719,50,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$U=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2629,14,num_2629,50,[0,caml_string_of_jsbytes("Article 25"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$P=caml_string_of_jsbytes(str_0_0226),$Q=caml_string_of_jsbytes(str_0_0234),$R=caml_string_of_jsbytes("0.0172"),$S=caml_string_of_jsbytes(str_0_0226),$T=caml_string_of_jsbytes(str_0_0234),$J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3480,14,num_3480,64,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],$F=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3478,14,num_3478,59,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],$B=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_276,14,num_276,36,[0,caml_string_of_jsbytes(str_Article_premier),[0,caml_string_of_jsbytes(str_R_glement_CE_abr),0]]],$z=caml_string_of_jsbytes(str_6_55957),$A=caml_string_of_jsbytes(str_1),$v=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2572,14,num_2572,47,[0,caml_string_of_jsbytes(str_Article_23),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$u=caml_string_of_jsbytes("0.416"),$q=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2571,14,num_2571,47,[0,caml_string_of_jsbytes(str_Article_23),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$p=caml_string_of_jsbytes(str_0_208),$l=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2570,14,num_2570,47,[0,caml_string_of_jsbytes(str_Article_23),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$k=caml_string_of_jsbytes("560085"),$g=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2647,14,num_2647,48,[0,caml_string_of_jsbytes("Article 26"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$f=caml_string_of_jsbytes(str_16_25),$b=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2555,15,num_2555,49,[0,caml_string_of_jsbytes("Article 22"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],$a=caml_string_of_jsbytes("2211133"),_8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2546,14,num_2546,42,[0,caml_string_of_jsbytes("Article 21"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],_7=caml_string_of_jsbytes(str_1000),_3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2535,14,num_2535,41,[0,caml_string_of_jsbytes("Article 20"),[0,caml_string_of_jsbytes(str_Chapitre_IV_Ca_abr$0),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],_2=caml_string_of_jsbytes(str_500),_4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_695,11,num_695,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_695,11,num_695,38,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_5=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_10"),0]],_9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_696,11,num_696,39,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_696,11,num_696,39,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],__=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_minimal_aide_d832_10"),0]],$c=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_698,11,num_698,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_698,11,num_698,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$d=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_11"),0]],$h=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_699,11,num_699,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$e=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_699,11,num_699,45,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$i=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_18"),0]],$m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_700,11,num_700,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_700,11,num_700,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$n=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_limite_tranches_d832_15_1"),0]],$r=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_701,11,num_701,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$o=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_701,11,num_701,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$s=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("taux_tranche_inf\xc3\xa9rieure_d832_15_1"),0]],$w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_702,11,num_702,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_702,11,num_702,44,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$x=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("taux_tranche_sup\xc3\xa9rieure_d832_15_1"),0]],$C=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_703,11,num_703,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_703,11,num_703,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$D=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_taux_francs_vers_abr),0]],$G=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_705,3,num_705,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$H=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],$E=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_656,10,num_656,35,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$K=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_705,3,num_705,22,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$L=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],$I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_657,10,num_657,40,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$M=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],$N=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),0]]],$V=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_697,11,num_697,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_697,11,num_697,47,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$W=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_17_3"),0]],$Z=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_708,3,num_708,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],$X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],$1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],$2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],aam=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],$3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_694,11,num_694,46,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aan=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_charges_d832_10"),0]],aat=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],aay=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_693,11,num_693,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aau=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_693,11,num_693,41,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aaz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("ressources_m\xc3\xa9nage_avec_d832_18"),0]],anS=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_plafond_m_abr$0),0]],anV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_685,11,num_685,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_685,11,num_685,33,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],anW=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr),0]],an2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr$1),0]],aoh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_682,10,num_682,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],an3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_682,10,num_682,14,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("plafond_mensualit\xc3\xa9_d832_10_3_base"),0]],aol=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_706,3,num_706,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aom=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],aoj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aop=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_706,3,num_706,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],aon=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aot=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_706,3,num_706,36,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aou=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],aor=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aov=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aow=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],aoA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_687,10,num_687,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aox=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_687,10,num_687,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_10_formule"),0]],aoK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$1),0]],aoS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_683,10,num_683,25,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("plafond_mensualit\xc3\xa9_d832_10_3_copropri\xc3\xa9taires"),0]],ao1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],aoU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_680,10,num_680,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_mensualit_mini_abr),0]],ao8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_688,10,num_688,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_688,10,num_688,17,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ao9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_10_arrondi"),0]],apl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],apo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_679,10,num_679,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_679,10,num_679,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],app=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_mensualit_li_abr),0]],apu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_689,10,num_689,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_689,10,num_689,15,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apv=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_10_seuil"),0]],apK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],apP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_711,10,num_711,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_711,10,num_711,29,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],apQ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],apZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],_X=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4029,14,num_4029,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_S=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],_T=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],_U=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],_V=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],_W=caml_string_of_jsbytes(str_0$1),_Y=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_646,10,num_646,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_R=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_646,10,num_646,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_O=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3933,14,num_3933,33,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_M=caml_string_of_jsbytes(str_0$1),_N=caml_string_of_jsbytes(str_0$1),_I=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4008,14,num_4008,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_x=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],_y=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],_z=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],_A=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],_B=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],_C=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],_D=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],_E=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],_F=caml_string_of_jsbytes(str_50),_G=caml_string_of_jsbytes(str_0$1),_H=caml_string_of_jsbytes(str_0$1),_J=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_645,10,num_645,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_w=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_645,10,num_645,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_s=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4173,5,num_4173,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_q=caml_string_of_jsbytes(str_0_9),_r=caml_string_of_jsbytes(str_0_9),_t=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_639,10,num_639,15,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_p=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4086,14,num_4086,49,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],_n=caml_string_of_jsbytes(str_0_95),_o=caml_string_of_jsbytes(str_0_95),_j=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3994,14,num_3994,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Z$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],_a=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],_b=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],_c=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],_d=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),[0,caml_string_of_jsbytes(str_input),0]]],_e=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),0]],_f=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),[0,caml_string_of_jsbytes(str_output),0]]],_g=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),0]],_h=caml_string_of_jsbytes(str_0$1),_i=caml_string_of_jsbytes(str_0$1),_k=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_644,10,num_644,20,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_644,10,num_644,20,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4167,5,num_4167,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Z3=caml_string_of_jsbytes(str_100),Z4=caml_string_of_jsbytes(str_100),Z5=caml_string_of_jsbytes(str_0_005),Z7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_638,10,num_638,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4083,14,num_4083,49,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZZ=caml_string_of_jsbytes(str_100),Z0=caml_string_of_jsbytes(str_100),Z1=caml_string_of_jsbytes(str_0_005),ZV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3966,14,num_3966,40,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4338,14,num_4338,55,[0,caml_string_of_jsbytes(str_Article_D832_27),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZM=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),[0,caml_string_of_jsbytes(str_input),0]]],ZN=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),0]],ZO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),[0,caml_string_of_jsbytes(str_output),0]]],ZP=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),0]],ZQ=caml_string_of_jsbytes(str_0$1),ZS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_622,11,num_622,52,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_622,11,num_622,52,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4150,5,num_4150,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZG=caml_string_of_jsbytes(str_0_9),ZI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_637,10,num_637,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4062,14,num_4062,49,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],ZC=caml_string_of_jsbytes(str_0$1),ZD=caml_string_of_jsbytes(str_0$1),ZE=caml_string_of_jsbytes(str_0_95),Zw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3972,14,num_3972,70,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zs=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3968,14,num_3968,69,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3970,14,num_3970,75,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4334,14,num_4334,44,[0,caml_string_of_jsbytes(str_Article_D832_27),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_624,11,num_624,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_624,11,num_624,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4138,14,num_4138,36,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Zg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_619,19,num_619,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3954,14,num_3954,40,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Y9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2763,14,num_2763,48,[0,caml_string_of_jsbytes(str_Article_30),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Y7=caml_string_of_jsbytes("2142091"),Y8=caml_string_of_jsbytes("1339340"),Y3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2884,14,num_2884,41,[0,caml_string_of_jsbytes("Article 32"),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Y1=caml_string_of_jsbytes(str_1500),Y2=caml_string_of_jsbytes("2668"),YV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4134,14,num_4134,64,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4132,14,num_4132,59,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4136,14,num_4136,55,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3980,14,num_3980,36,[0,caml_string_of_jsbytes(str_Article_D832_24),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],YH=caml_string_of_jsbytes(str_0$1),YI=caml_string_of_jsbytes(str_0$1),YK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_643,10,num_643,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_643,10,num_643,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2674,14,num_2674,48,[0,caml_string_of_jsbytes(str_Article_27),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],X4=caml_string_of_jsbytes(str_0$1),X5=caml_string_of_jsbytes("44630"),X6=caml_string_of_jsbytes("52321"),X7=caml_string_of_jsbytes(str_1$0),X8=caml_string_of_jsbytes("55788"),X9=caml_string_of_jsbytes(str_2),X_=caml_string_of_jsbytes("59704"),X$=caml_string_of_jsbytes(str_3),Ya=caml_string_of_jsbytes("63635"),Yb=caml_string_of_jsbytes(str_4),Yc=caml_string_of_jsbytes("7119"),Yd=caml_string_of_jsbytes("68637"),Ye=caml_string_of_jsbytes(str_0$1),Yf=caml_string_of_jsbytes("40814"),Yg=caml_string_of_jsbytes("47632"),Yh=caml_string_of_jsbytes(str_1$0),Yi=caml_string_of_jsbytes("50787"),Yj=caml_string_of_jsbytes(str_2),Yk=caml_string_of_jsbytes("54365"),Yl=caml_string_of_jsbytes(str_3),Ym=caml_string_of_jsbytes("57929"),Yn=caml_string_of_jsbytes(str_4),Yo=caml_string_of_jsbytes("6434"),Yp=caml_string_of_jsbytes("61727"),Yq=caml_string_of_jsbytes(str_0$1),Yr=caml_string_of_jsbytes("38740"),Ys=caml_string_of_jsbytes("45057"),Yt=caml_string_of_jsbytes(str_1$0),Yu=caml_string_of_jsbytes("47802"),Yv=caml_string_of_jsbytes(str_2),Yw=caml_string_of_jsbytes("50957"),Yx=caml_string_of_jsbytes(str_3),Yy=caml_string_of_jsbytes("54110"),Yz=caml_string_of_jsbytes(str_4),YA=caml_string_of_jsbytes("5971"),YB=caml_string_of_jsbytes("57657"),YD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],X2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_501,14,num_501,48,[0,caml_string_of_jsbytes(str_Article_27),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Xs=caml_string_of_jsbytes(str_0$1),Xt=caml_string_of_jsbytes("44443"),Xu=caml_string_of_jsbytes("52101"),Xv=caml_string_of_jsbytes(str_1$0),Xw=caml_string_of_jsbytes("55555"),Xx=caml_string_of_jsbytes(str_2),Xy=caml_string_of_jsbytes("59454"),Xz=caml_string_of_jsbytes(str_3),XA=caml_string_of_jsbytes("63369"),XB=caml_string_of_jsbytes(str_4),XC=caml_string_of_jsbytes("7089"),XD=caml_string_of_jsbytes("68350"),XE=caml_string_of_jsbytes(str_0$1),XF=caml_string_of_jsbytes("40643"),XG=caml_string_of_jsbytes("47433"),XH=caml_string_of_jsbytes(str_1$0),XI=caml_string_of_jsbytes("50575"),XJ=caml_string_of_jsbytes(str_2),XK=caml_string_of_jsbytes("54138"),XL=caml_string_of_jsbytes(str_3),XM=caml_string_of_jsbytes("57687"),XN=caml_string_of_jsbytes(str_4),XO=caml_string_of_jsbytes("6407"),XP=caml_string_of_jsbytes("61469"),XQ=caml_string_of_jsbytes(str_0$1),XR=caml_string_of_jsbytes("38578"),XS=caml_string_of_jsbytes("44869"),XT=caml_string_of_jsbytes(str_1$0),XU=caml_string_of_jsbytes("47602"),XV=caml_string_of_jsbytes(str_2),XW=caml_string_of_jsbytes("50744"),XX=caml_string_of_jsbytes(str_3),XY=caml_string_of_jsbytes("53884"),XZ=caml_string_of_jsbytes(str_4),X0=caml_string_of_jsbytes("5946"),X1=caml_string_of_jsbytes("57416"),X3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_649,14,num_649,50,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4047,14,num_4047,35,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Xi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_615,12,num_615,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xd=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2739,14,num_2739,42,[0,caml_string_of_jsbytes("Article 29"),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Xc=caml_string_of_jsbytes(str_1000),W_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2728,14,num_2728,41,[0,caml_string_of_jsbytes("Article 28"),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],W9=caml_string_of_jsbytes(str_500),W5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2753,14,num_2753,35,[0,caml_string_of_jsbytes(str_Article_30),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],W4=caml_string_of_jsbytes("121726"),W6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_618,10,num_618,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],W3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_618,10,num_618,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],W7=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_r_d832_25"),0]],W$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_625,11,num_625,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],W8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_625,11,num_625,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_24"),0]],Xe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_627,11,num_627,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_627,11,num_627,39,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xf=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("montant_minimal_aide_d823_24"),0]],Xj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_615,12,num_615,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_615,12,num_615,33,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xk=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("condition_2_du_832_25"),0]],Xn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_633,3,num_633,25,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xo=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],Xl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Xp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],Xq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],YE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Xr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_621,10,num_621,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YF=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("plafond_\xc3\xa9quivalence_loyer_\xc3\xa9ligible"),0]],YL=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],YO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_630,3,num_630,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YP=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$0),0]],YM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_599,10,num_599,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_630,3,num_630,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr),0]],YQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_600,10,num_600,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_630,3,num_630,22,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_pa_abr$1),0]],YU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_601,10,num_601,40,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],YY=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],YZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_nombre_parts),[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),0]]],Y4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_626,11,num_626,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_626,11,num_626,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y5=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_27"),0]],Y_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_617,10,num_617,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_617,10,num_617,44,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Y$=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_multiplicateur_d832_25"),0]],Zc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_620,10,num_620,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Za=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_620,10,num_620,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zd=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("\xc3\xa9quivalence_loyer_\xc3\xa9ligible"),0]],Zh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_619,19,num_619,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ze=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_619,19,num_619,41,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr$0),0]],Zm=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_d_pense_nette_m_abr),0]],Zp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_631,3,num_631,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$2),0]],Zn=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_587,10,num_587,37,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_631,3,num_631,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zu=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr),0]],Zr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_588,10,num_588,31,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_631,3,num_631,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zy=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$1),0]],Zv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_589,10,num_589,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Zz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ZA=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_calcul_quivale_abr$0),[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),0]]],ZJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_637,10,num_637,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_637,10,num_637,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZK=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_25_formule"),0]],ZT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_abattement_d_pe_abr$0),0]],ZW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_628,10,num_628,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_628,10,num_628,36,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("\xc3\xa9quivalence_loyer_minimale"),0]],Z8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_638,10,num_638,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],ZY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_638,10,num_638,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Z9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_25_arrondi"),0]],_l=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$0),0]],_u=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_639,10,num_639,15,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_m=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_639,10,num_639,15,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_v=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes("coefficient_prise_en_charge_d832_25_seuil"),0]],_K=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],_P=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_641,10,num_641,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_L=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_641,10,num_641,29,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],_Q=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],_Z=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$1),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],WS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_1986,14,num_1986,33,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WQ=caml_string_of_jsbytes(str_0$1),WR=caml_string_of_jsbytes(str_0$1),WM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2129,14,num_2129,39,[0,caml_string_of_jsbytes(str_Article_D823_17),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WK=caml_string_of_jsbytes(str_0$1),WL=caml_string_of_jsbytes(str_0$1),WG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2112,14,num_2112,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WB=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),[0,caml_string_of_jsbytes(str_input),0]]],WC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),0]],WD=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),[0,caml_string_of_jsbytes(str_output),0]]],WE=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),0]],WF=caml_string_of_jsbytes(str_0$1),WH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_577,10,num_577,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_577,10,num_577,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2163,14,num_2163,42,[0,caml_string_of_jsbytes(str_Article_D823_17),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Wt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_804,14,num_804,36,[0,caml_string_of_jsbytes(str_Article_L832_3),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],Wn=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_input),0]]],Wo=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],Wp=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),[0,caml_string_of_jsbytes(str_output),0]]],Wq=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],Wr=caml_string_of_jsbytes(str_0$1),Ws=caml_string_of_jsbytes(str_0$1),Wu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_576,10,num_576,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_576,10,num_576,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_287,14,num_287,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Wf=caml_string_of_jsbytes(str_100000),Wg=caml_string_of_jsbytes(str_100000),Wi=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],We=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_412,14,num_412,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Wc=caml_string_of_jsbytes(str_100000),Wd=caml_string_of_jsbytes(str_100000),Wj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],V_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2080,14,num_2080,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],VZ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_input),0]]],V0=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],V1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),[0,caml_string_of_jsbytes(str_output),0]]],V2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],V3=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_input),0]]],V4=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],V5=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),[0,caml_string_of_jsbytes(str_output),0]]],V6=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],V7=caml_string_of_jsbytes(str_50),V8=caml_string_of_jsbytes(str_0$1),V9=caml_string_of_jsbytes(str_0$1),V$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_575,10,num_575,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_575,10,num_575,40,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_280,14,num_280,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],VH=caml_string_of_jsbytes(str_0_45),VI=caml_string_of_jsbytes(str_0),VJ=caml_string_of_jsbytes(str_0_45),VK=caml_string_of_jsbytes(str_0_75),VL=caml_string_of_jsbytes(str_0_0045),VM=caml_string_of_jsbytes(str_0_0045),VN=caml_string_of_jsbytes(str_0_75),VO=caml_string_of_jsbytes(str_0_75),VP=caml_string_of_jsbytes(str_0_0068),VQ=caml_string_of_jsbytes(str_0_3),VR=caml_string_of_jsbytes(str_0_0045),VS=caml_string_of_jsbytes(str_0),VU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_405,14,num_405,33,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Vu=caml_string_of_jsbytes(str_0_45),Vv=caml_string_of_jsbytes(str_0),Vw=caml_string_of_jsbytes(str_0_45),Vx=caml_string_of_jsbytes(str_0_75),Vy=caml_string_of_jsbytes(str_0_0045),Vz=caml_string_of_jsbytes(str_0_0045),VA=caml_string_of_jsbytes(str_0_75),VB=caml_string_of_jsbytes(str_0_75),VC=caml_string_of_jsbytes(str_0_0068),VD=caml_string_of_jsbytes(str_0_3),VE=caml_string_of_jsbytes(str_0_0045),VF=caml_string_of_jsbytes(str_0),VV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2063,14,num_2063,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Vk=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),[0,caml_string_of_jsbytes(str_input),0]]],Vl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),0]],Vm=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),[0,caml_string_of_jsbytes(str_output),0]]],Vn=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),0]],Vo=caml_string_of_jsbytes(str_0$1),Vp=caml_string_of_jsbytes(str_0$1),Vr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_574,10,num_574,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_574,10,num_574,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ve=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_256,14,num_256,28,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Vc=caml_string_of_jsbytes(str_100),Vd=caml_string_of_jsbytes(str_100),Vf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_379,14,num_379,28,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],U$=caml_string_of_jsbytes(str_100),Va=caml_string_of_jsbytes(str_100),Vg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_301,14,num_301,36,[0,caml_string_of_jsbytes(str_Article_13),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],U2=caml_string_of_jsbytes(str_3539),U3=caml_string_of_jsbytes(str_0_085),U4=caml_string_of_jsbytes(str_0_085),U5=caml_string_of_jsbytes(str_3539),U7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_177,14,num_177,36,[0,caml_string_of_jsbytes(str_Article_13),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],UW=caml_string_of_jsbytes(str_3524),UX=caml_string_of_jsbytes(str_0_085),UY=caml_string_of_jsbytes(str_0_085),UZ=caml_string_of_jsbytes(str_3524),U1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2053,5,num_2053,50,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],US=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_573,10,num_573,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2039,14,num_2039,36,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],UP=caml_string_of_jsbytes(str_0$1),UT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_573,10,num_573,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_573,10,num_573,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2004,14,num_2004,28,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],UH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_252,14,num_252,42,[0,caml_string_of_jsbytes(str_Article_10),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],UE=caml_string_of_jsbytes("3.4"),UF=caml_string_of_jsbytes(str_2_5),UG=caml_string_of_jsbytes(str_2_5),UA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_258,14,num_258,41,[0,caml_string_of_jsbytes(str_Article_10),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Ux=caml_string_of_jsbytes("4."),Uy=caml_string_of_jsbytes(str_3_1),Uz=caml_string_of_jsbytes(str_3_1),Ut=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4408,14,num_4408,29,[0,caml_string_of_jsbytes("Article D842-2"),[0,caml_string_of_jsbytes(str_Section_1_Sect_abr),[0,caml_string_of_jsbytes(str_Chapitre_2_Mod_abr),[0,caml_string_of_jsbytes(str_Titre_IV_Alloc_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Ur=caml_string_of_jsbytes(str_3$0),Us=caml_string_of_jsbytes(str_2$0),Ul=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_566,29,num_566,64,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Ui=caml_string_of_jsbytes(str_1229),Uj=caml_string_of_jsbytes(str_2710),Uk=caml_string_of_jsbytes(str_5422),Um=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ug=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_394,29,num_394,64,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Ud=caml_string_of_jsbytes(str_1224),Ue=caml_string_of_jsbytes(str_2699),Uf=caml_string_of_jsbytes(str_5399),Uh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Un=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ua=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_229,29,num_229,64,[0,caml_string_of_jsbytes(str_Article_9),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],T_=caml_string_of_jsbytes(str_1229),T$=caml_string_of_jsbytes(str_5422),Ub=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_163,29,num_163,64,[0,caml_string_of_jsbytes(str_Article_9),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],T6=caml_string_of_jsbytes(str_1224),T7=caml_string_of_jsbytes(str_5399),T9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TZ=caml_string_of_jsbytes(str_0$1),T0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),523,5,524,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],TW=caml_string_of_jsbytes(str_22355),TX=caml_string_of_jsbytes(str_19484),TY=caml_string_of_jsbytes(str_18261),T1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TT=caml_string_of_jsbytes(str_0$1),TU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_532,5,num_533,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],TQ=caml_string_of_jsbytes("26962"),TR=caml_string_of_jsbytes("23848"),TS=caml_string_of_jsbytes("22136"),TV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TN=caml_string_of_jsbytes(str_1$0),TO=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_541,5,num_541,35,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],TE=caml_string_of_jsbytes(str_1$0),TF=caml_string_of_jsbytes("4421"),TG=caml_string_of_jsbytes("30473"),TH=caml_string_of_jsbytes(str_1$0),TI=caml_string_of_jsbytes("3906"),TJ=caml_string_of_jsbytes("26835"),TK=caml_string_of_jsbytes(str_1$0),TL=caml_string_of_jsbytes("3557"),TM=caml_string_of_jsbytes("24821"),TP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],TB=caml_string_of_jsbytes(str_0$1),TC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_350,5,351,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Ty=caml_string_of_jsbytes(str_22262),Tz=caml_string_of_jsbytes(str_19402),TA=caml_string_of_jsbytes(str_18185),TD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tv=caml_string_of_jsbytes(str_0$1),Tw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_359,5,num_360,34,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Ts=caml_string_of_jsbytes("26849"),Tt=caml_string_of_jsbytes("23748"),Tu=caml_string_of_jsbytes("22044"),Tx=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tp=caml_string_of_jsbytes(str_1$0),Tq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_368,5,num_368,35,[0,caml_string_of_jsbytes(str_Article_16),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Tg=caml_string_of_jsbytes(str_1$0),Th=caml_string_of_jsbytes("4403"),Ti=caml_string_of_jsbytes("30345"),Tj=caml_string_of_jsbytes(str_1$0),Tk=caml_string_of_jsbytes("3890"),Tl=caml_string_of_jsbytes("26723"),Tm=caml_string_of_jsbytes(str_1$0),Tn=caml_string_of_jsbytes("3542"),To=caml_string_of_jsbytes("24717"),Tr=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_194,5,num_194,61,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],S$=caml_string_of_jsbytes(str_22355),Ta=caml_string_of_jsbytes(str_19484),Tb=caml_string_of_jsbytes(str_18261),Td=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],S9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_128,5,num_128,61,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],S6=caml_string_of_jsbytes(str_22262),S7=caml_string_of_jsbytes(str_19402),S8=caml_string_of_jsbytes(str_18185),S_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Te=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],S3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_187,14,num_187,37,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],S0=caml_string_of_jsbytes("26826"),S1=caml_string_of_jsbytes("23380"),S2=caml_string_of_jsbytes("21913"),S4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_121,14,num_121,37,[0,caml_string_of_jsbytes(str_Article_8),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],SV=caml_string_of_jsbytes(str_26714),SW=caml_string_of_jsbytes("23282"),SX=caml_string_of_jsbytes("21821"),SZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],S5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Tf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SR=caml_string_of_jsbytes(str_0$1),SS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_102,5,num_103,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],SO=caml_string_of_jsbytes("29807"),SP=caml_string_of_jsbytes(str_25978),SQ=caml_string_of_jsbytes("24348"),ST=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SL=caml_string_of_jsbytes(str_0$1),SM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_112,5,113,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],SI=caml_string_of_jsbytes("35949"),SJ=caml_string_of_jsbytes(str_31797),SK=caml_string_of_jsbytes("29515"),SN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SF=caml_string_of_jsbytes(str_1$0),SG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_122,5,num_122,35,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Sw=caml_string_of_jsbytes(str_1$0),Sx=caml_string_of_jsbytes("5895"),Sy=caml_string_of_jsbytes("40630"),Sz=caml_string_of_jsbytes(str_1$0),SA=caml_string_of_jsbytes(str_5208),SB=caml_string_of_jsbytes(str_35780),SC=caml_string_of_jsbytes(str_1$0),SD=caml_string_of_jsbytes("4743"),SE=caml_string_of_jsbytes("33094"),SH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],St=caml_string_of_jsbytes(str_0$1),Su=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),37,5,38,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Sq=caml_string_of_jsbytes("29682"),Sr=caml_string_of_jsbytes("25859"),Ss=caml_string_of_jsbytes("24246"),Sv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Sn=caml_string_of_jsbytes(str_0$1),So=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),47,5,48,34,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Sk=caml_string_of_jsbytes("35799"),Sl=caml_string_of_jsbytes(str_31664),Sm=caml_string_of_jsbytes("29392"),Sp=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Sh=caml_string_of_jsbytes(str_1$0),Si=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),57,5,57,35,[0,caml_string_of_jsbytes(str_Article_7),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],R_=caml_string_of_jsbytes(str_1$0),R$=caml_string_of_jsbytes("5870"),Sa=caml_string_of_jsbytes("40460"),Sb=caml_string_of_jsbytes(str_1$0),Sc=caml_string_of_jsbytes(str_5186),Sd=caml_string_of_jsbytes(str_35630),Se=caml_string_of_jsbytes(str_1$0),Sf=caml_string_of_jsbytes("4723"),Sg=caml_string_of_jsbytes(str_32956),Sj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],SU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_285,14,num_285,42,[0,caml_string_of_jsbytes("Article 12"),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],R3=caml_string_of_jsbytes(str_0$1),R4=caml_string_of_jsbytes(str_1000),R5=caml_string_of_jsbytes(str_1000),RY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_429,14,num_429,29,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],RS=caml_string_of_jsbytes(str_0$1),RT=caml_string_of_jsbytes(str_25978),RU=caml_string_of_jsbytes(str_31797),RV=caml_string_of_jsbytes(str_1$0),RW=caml_string_of_jsbytes(str_5208),RX=caml_string_of_jsbytes(str_35780),RZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RQ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_305,14,num_305,29,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],RK=caml_string_of_jsbytes(str_0$1),RL=caml_string_of_jsbytes("25869"),RM=caml_string_of_jsbytes(str_31664),RN=caml_string_of_jsbytes(str_1$0),RO=caml_string_of_jsbytes(str_5186),RP=caml_string_of_jsbytes(str_35630),RR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_463,14,num_463,44,[0,caml_string_of_jsbytes(str_Article_15),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Rn=caml_string_of_jsbytes(str_0$1),Ro=caml_string_of_jsbytes("487000"),Rp=caml_string_of_jsbytes("697700"),Rq=caml_string_of_jsbytes(str_1$0),Rr=caml_string_of_jsbytes(str_832200),Rs=caml_string_of_jsbytes(str_2),Rt=caml_string_of_jsbytes("850900"),Ru=caml_string_of_jsbytes(str_3),Rv=caml_string_of_jsbytes("883400"),Rw=caml_string_of_jsbytes(str_4),Rx=caml_string_of_jsbytes("916300"),Ry=caml_string_of_jsbytes(str_5),Rz=caml_string_of_jsbytes("948800"),RA=caml_string_of_jsbytes(str_6$0),RB=caml_string_of_jsbytes(str_981600),RC=caml_string_of_jsbytes(str_6$0),RD=caml_string_of_jsbytes("32300"),RE=caml_string_of_jsbytes(str_981600),RG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Rl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_592,14,num_592,44,[0,caml_string_of_jsbytes(str_Article_15),[0,caml_string_of_jsbytes("Articles valables du 1er janvier 2022 au 1er juillet 2022"),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]],Q5=caml_string_of_jsbytes(str_0$1),Q6=caml_string_of_jsbytes("468300"),Q7=caml_string_of_jsbytes("670900"),Q8=caml_string_of_jsbytes(str_1$0),Q9=caml_string_of_jsbytes("800200"),Q_=caml_string_of_jsbytes(str_2),Q$=caml_string_of_jsbytes("819200"),Ra=caml_string_of_jsbytes(str_3),Rb=caml_string_of_jsbytes("849500"),Rc=caml_string_of_jsbytes(str_4),Rd=caml_string_of_jsbytes("881100"),Re=caml_string_of_jsbytes(str_5),Rf=caml_string_of_jsbytes("912400"),Rg=caml_string_of_jsbytes(str_6$0),Rh=caml_string_of_jsbytes(str_943900),Ri=caml_string_of_jsbytes(str_6$0),Rj=caml_string_of_jsbytes("31100"),Rk=caml_string_of_jsbytes(str_943900),Rm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Q3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_647,14,num_647,44,[0,caml_string_of_jsbytes(str_Article_15),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes("Articles valables du 1er janvier 2020 au 1er janvier 2022"),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],QL=caml_string_of_jsbytes(str_0$1),QM=caml_string_of_jsbytes("458800"),QN=caml_string_of_jsbytes("657200"),QO=caml_string_of_jsbytes(str_1$0),QP=caml_string_of_jsbytes("783900"),QQ=caml_string_of_jsbytes(str_2),QR=caml_string_of_jsbytes("801500"),QS=caml_string_of_jsbytes(str_3),QT=caml_string_of_jsbytes(str_832200),QU=caml_string_of_jsbytes(str_4),QV=caml_string_of_jsbytes("863100"),QW=caml_string_of_jsbytes(str_5),QX=caml_string_of_jsbytes("893800"),QY=caml_string_of_jsbytes(str_6$0),QZ=caml_string_of_jsbytes(str_924600),Q0=caml_string_of_jsbytes(str_6$0),Q1=caml_string_of_jsbytes(str_30500),Q2=caml_string_of_jsbytes(str_924600),Q4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],QF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$7),num_222,14,num_222,40,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),[0,caml_string_of_jsbytes(str_Articles_valable_abr),[0,caml_string_of_jsbytes(str_Archives_l_gisl_abr),0]]]]],Qn=caml_string_of_jsbytes(str_0$1),Qo=caml_string_of_jsbytes(str_0_0283),Qp=caml_string_of_jsbytes(str_0_0315),Qq=caml_string_of_jsbytes(str_1$0),Qr=caml_string_of_jsbytes(str_0_027),Qs=caml_string_of_jsbytes(str_2),Qt=caml_string_of_jsbytes(str_0_0238),Qu=caml_string_of_jsbytes(str_3),Qv=caml_string_of_jsbytes(str_0_0201),Qw=caml_string_of_jsbytes(str_4),Qx=caml_string_of_jsbytes(str_0_0185),Qy=caml_string_of_jsbytes(str_5),Qz=caml_string_of_jsbytes(str_0_0179),QA=caml_string_of_jsbytes(str_6$0),QB=caml_string_of_jsbytes(str_0_0173),QC=caml_string_of_jsbytes(str_6$0),QD=caml_string_of_jsbytes(str_0_0006),QE=caml_string_of_jsbytes(str_0_0173),QG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Qm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_346,14,num_346,40,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],P6=caml_string_of_jsbytes(str_0$1),P7=caml_string_of_jsbytes(str_0_0283),P8=caml_string_of_jsbytes(str_0_0315),P9=caml_string_of_jsbytes(str_1$0),P_=caml_string_of_jsbytes(str_0_027),P$=caml_string_of_jsbytes(str_2),Qa=caml_string_of_jsbytes(str_0_0238),Qb=caml_string_of_jsbytes(str_3),Qc=caml_string_of_jsbytes(str_0_0201),Qd=caml_string_of_jsbytes(str_4),Qe=caml_string_of_jsbytes(str_0_0185),Qf=caml_string_of_jsbytes(str_5),Qg=caml_string_of_jsbytes(str_0_0179),Qh=caml_string_of_jsbytes(str_6$0),Qi=caml_string_of_jsbytes(str_0_0173),Qj=caml_string_of_jsbytes(str_6$0),Qk=caml_string_of_jsbytes(str_0_0006),Ql=caml_string_of_jsbytes(str_0_0173),QH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],P0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_580,14,num_580,50,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_273,14,num_273,41,[0,caml_string_of_jsbytes("Article 11"),[0,caml_string_of_jsbytes(str_Chapitre_III_C_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],PV=caml_string_of_jsbytes(str_500),PR=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2103,14,num_2103,29,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],PQ=caml_string_of_jsbytes(str_0_98),PS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_553,11,num_553,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_553,11,num_553,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PT=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("fraction_l832_3"),0]],PX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_556,11,num_556,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PU=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_556,11,num_556,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],PY=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_d823_16"),0]],P1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_567,3,num_567,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],P2=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr$0),0]],PZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_515,10,num_515,23,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],P3=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],P4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_contributions_so_abr),[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),0]]],QI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],P5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_564,10,num_564,36,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],QJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_composition_familiale"),0]],RH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],QK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_558,11,num_558,41,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RI=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("abattement_forfaitaire_d823_17"),0]],R0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],RJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_552,11,num_552,26,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R1=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("loyer_r\xc3\xa9f\xc3\xa9rence"),0]],R7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_557,11,num_557,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_557,11,num_557,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R8=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("montant_minimal_aide_d823_16"),0]],T3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],R9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_562,10,num_562,33,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T4=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("plafond_loyer_d823_16_2"),0]],Uo=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],T5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_561,10,num_561,45,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Up=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("montant_forfaitaire_charges_d823_16"),0]],Uu=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_531,10,num_531,31,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_531,10,num_531,31,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uv=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("loyer_principal_avec_r\xc3\xa9duction_meubl\xc3\xa9"),0]],UB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_555,11,num_555,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Uw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_555,11,num_555,38,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UC=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("plafond_suppression_d823_16"),0]],UI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_554,11,num_554,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_554,11,num_554,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UJ=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("plafond_d\xc3\xa9gressivit\xc3\xa9_d823_16"),0]],UM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_547,11,num_547,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_547,11,num_547,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UN=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("loyer_\xc3\xa9ligible"),0]],UU=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$6),0]],U8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],UV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_563,10,num_563,32,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U9=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("participation_minimale"),0]],Vh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],U_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_551,11,num_551,25,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vi=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("rapport_loyers"),0]],Vs=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr),0]],VW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Vt=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_549,10,num_549,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],VX=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_loyer_\xc3\xa9ligible_formule"),0]],Wa=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$1),0]],Wk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_550,10,num_550,17,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wl=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_loyer_\xc3\xa9ligible_arrondi"),0]],Wv=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$5),0]],Wy=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_559,11,num_559,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ww=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_559,11,num_559,39,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Wz=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("taux_prise_compte_ressources"),0]],WI=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_traitement_aide_abr$7),0]],WN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_565,10,num_565,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_565,10,num_565,35,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WO=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes("participation_personnelle"),0]],WT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_570,10,num_570,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_570,10,num_570,29,[0,caml_string_of_jsbytes(str_Secteur_locatif),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],WU=[0,caml_string_of_jsbytes(str_CalculAidePerson_abr$0),[0,caml_string_of_jsbytes(str_aide_finale_formule),0]],WW=caml_string_of_jsbytes(str_2_5),WV=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2056,13,num_2056,76,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],W1=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2056,13,num_2056,76,[0,caml_string_of_jsbytes(str_Article_D823_16),[0,caml_string_of_jsbytes(str_Sous_section_2_abr),[0,caml_string_of_jsbytes(str_Section_1_Calc_abr),[0,caml_string_of_jsbytes(str_Chapitre_III_M_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],WY=caml_string_of_jsbytes(str_0_9),WZ=caml_string_of_jsbytes(str_0_98),WX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_814,13,num_814,63,[0,caml_string_of_jsbytes(str_Article_L832_3),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],W0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$10),num_814,13,num_814,63,[0,caml_string_of_jsbytes(str_Article_L832_3),[0,caml_string_of_jsbytes(str_Chapitre_Ier_C_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]],PC=[6,0],PE=[0,0],PF=[1,0],PG=[2,0],PH=[3,0],PI=[4,0],PJ=[5,0],PK=[7,0],PD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),29,5,38,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],PB=caml_string_of_jsbytes(str_1003),PL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],Py=[8,0],Pz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),47,5,49,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2018_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],Px=caml_string_of_jsbytes(str_757),PA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],Pn=[6,0],Pp=[0,0],Pq=[1,0],Pr=[2,0],Ps=[3,0],Pt=[4,0],Pu=[5,0],Pv=[7,0],Po=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),68,5,77,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],Pm=caml_string_of_jsbytes(str_1015),Pw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],Pj=[8,0],Pk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),86,5,88,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2019_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],Pi=caml_string_of_jsbytes(str_766),Pl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],O_=[6,0],Pa=[0,0],Pb=[1,0],Pc=[2,0],Pd=[3,0],Pe=[4,0],Pf=[5,0],Pg=[7,0],O$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_107,5,num_116,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],O9=caml_string_of_jsbytes(str_1025),Ph=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],O6=[8,0],O7=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_125,5,num_127,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2020_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],O5=caml_string_of_jsbytes(str_774),O8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OV=[6,0],OX=[0,0],OY=[1,0],OZ=[2,0],O0=[3,0],O1=[4,0],O2=[5,0],O3=[7,0],OW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_146,5,num_155,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OU=caml_string_of_jsbytes(str_1057),O4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OR=[8,0],OS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_165,5,num_167,6,[0,caml_string_of_jsbytes(str_Article_1),[0,caml_string_of_jsbytes(str_D_cret_n_2021_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OQ=caml_string_of_jsbytes(str_798),OT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OG=[6,0],OI=[0,0],OJ=[1,0],OK=[2,0],OL=[3,0],OM=[4,0],ON=[5,0],OO=[7,0],OH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_186,5,num_195,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OF=caml_string_of_jsbytes(str_1085),OP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OC=[8,0],OD=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),num_204,5,num_206,6,[0,caml_string_of_jsbytes(str_Article_2),[0,caml_string_of_jsbytes(str_Arr_t_du_19_a_abr),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]]],OB=caml_string_of_jsbytes(str_819),OE=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],PM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],OA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$8),11,10,11,22,[0,caml_string_of_jsbytes(str_Prologue),[0,caml_string_of_jsbytes(str_Montant_du_salai_abr),0]]],PN=[0,caml_string_of_jsbytes(str_Smic),[0,caml_string_of_jsbytes(str_brut_horaire),0]],Ov=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),28,5,29,34,[0,caml_string_of_jsbytes(str_Instruction_mini_abr),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Ou=caml_string_of_jsbytes(str_41316),Ow=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Os=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),48,5,49,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$1),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Or=caml_string_of_jsbytes(str_41440),Ot=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Op=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),64,5,65,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$3),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Oo=caml_string_of_jsbytes(str_41481),Oq=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Om=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),82,5,83,34,[0,caml_string_of_jsbytes(str_Instruction_inte_abr$0),[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]]],Ol=caml_string_of_jsbytes(str_42228),On=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Ox=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Ok=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$2),6,10,6,17,[0,caml_string_of_jsbytes(str_Montant_de_la_ba_abr),0]],Oy=[0,caml_string_of_jsbytes(str_BaseMensuelleAll_abr),[0,caml_string_of_jsbytes(str_montant),0]],Oe=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2443,14,num_2443,28,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Od=caml_string_of_jsbytes(str_0$1),Of=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Oc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2380,14,num_2380,28,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Ob=caml_string_of_jsbytes(str_0$1),Og=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],N8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2385,20,num_2385,55,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],N5=caml_string_of_jsbytes(str_0$1),N6=caml_string_of_jsbytes(str_0$1),N7=caml_string_of_jsbytes(str_2$0),N9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],N3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2401,20,num_2401,51,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],N0=caml_string_of_jsbytes(str_0$1),N1=caml_string_of_jsbytes(str_0$1),N2=caml_string_of_jsbytes(str_2$0),N4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2467,7,num_2467,42,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NU=caml_string_of_jsbytes(str_6),NV=caml_string_of_jsbytes(str_1),NW=caml_string_of_jsbytes(str_2$0),NX=caml_string_of_jsbytes(str_0$1),NZ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NS=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2495,7,num_2495,51,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NO=caml_string_of_jsbytes(str_6),NP=caml_string_of_jsbytes(str_1),NQ=caml_string_of_jsbytes(str_2$0),NR=caml_string_of_jsbytes(str_0$1),NT=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NJ=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2424,14,num_2424,36,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NH=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2520,14,num_2520,36,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NG=caml_string_of_jsbytes(str_12),NI=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NA=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2511,14,num_2511,36,[0,caml_string_of_jsbytes(str_Article_R824_2),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NB=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nz=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2415,14,num_2415,36,[0,caml_string_of_jsbytes(str_Article_R824_1),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],NC=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_2543,14,num_2543,36,[0,caml_string_of_jsbytes("Article R824-3"),[0,caml_string_of_jsbytes(str_Section_1_Seui_abr),[0,caml_string_of_jsbytes(str_Chapitre_IV_Im_abr),[0,caml_string_of_jsbytes(str_Titre_II_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],Nq=[0,0],Nr=[1,0],Ns=[1,0],Nt=[0,0],Nu=[0,0],Nw=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1016,11,num_1016,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Np=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1016,11,num_1016,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nx=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("mode_occupation_impay\xc3\xa9"),0]],ND=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Ny=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1017,11,num_1017,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NE=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("d\xc3\xa9pense_logement_brute"),0]],NL=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NF=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1018,11,num_1018,33,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NM=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("d\xc3\xa9pense_logement_nette"),0]],N_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],NN=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1015,11,num_1015,43,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],N$=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("seuil_impay\xc3\xa9_d\xc3\xa9pense_de_logement"),0]],Oh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Oa=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1020,10,num_1020,24,[0,caml_string_of_jsbytes(str_Quantification_d_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Oi=[0,caml_string_of_jsbytes(str_Impay_D_penseL_abr),[0,caml_string_of_jsbytes("montant_impay\xc3\xa9"),0]],Nk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_119,5,num_119,43,[0,caml_string_of_jsbytes(str_Article_L161_17_2),[0,caml_string_of_jsbytes(str_Paragraphe_1_I_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nl=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Ni=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_256,5,num_256,42,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nj=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Ng=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),266,5,num_267,43,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nd=caml_string_of_jsbytes("1952"),Ne=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_276,5,num_276,48,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Na=caml_string_of_jsbytes("1953"),Nb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_285,5,num_285,48,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],Nc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],M9=caml_string_of_jsbytes("1954"),M_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),num_294,5,num_294,48,[0,caml_string_of_jsbytes(str_Article_D161_2_1_9),[0,caml_string_of_jsbytes(str_Paragraphe_2_O_abr),[0,caml_string_of_jsbytes(str_Sous_section_4_abr),[0,caml_string_of_jsbytes(str_Section_1_B_n_abr),[0,caml_string_of_jsbytes(str_Chapitre_1er_D_abr),[0,caml_string_of_jsbytes(str_Titre_VI_Dispo_abr),[0,caml_string_of_jsbytes(str_Livre_I_G_n_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$0),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]]]]],M$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nm=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],M8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_1000,10,num_1000,29,[0,caml_string_of_jsbytes(str_Date_d_ouverture_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Nn=[0,caml_string_of_jsbytes(str_OuvertureDroitsR_abr),[0,caml_string_of_jsbytes("\xc3\xa2ge_ouverture_droit"),0]],M4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_3457,14,num_3457,36,[0,caml_string_of_jsbytes(str_Article_D832_11),[0,caml_string_of_jsbytes(str_Section_2_Acce_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]],MQ=caml_string_of_jsbytes(str_0$1),MR=caml_string_of_jsbytes(str_1_4),MS=caml_string_of_jsbytes(str_1_8),MT=caml_string_of_jsbytes(str_1$0),MU=caml_string_of_jsbytes(str_2_5),MV=caml_string_of_jsbytes(str_2),MW=caml_string_of_jsbytes(str_3$0),MX=caml_string_of_jsbytes(str_3),MY=caml_string_of_jsbytes(str_3_7),MZ=caml_string_of_jsbytes(str_4),M0=caml_string_of_jsbytes(str_4_3),M1=caml_string_of_jsbytes(str_4),M2=caml_string_of_jsbytes(str_0_5),M3=caml_string_of_jsbytes(str_4_3),M5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_659,10,num_659,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],MP=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_659,10,num_659,32,[0,caml_string_of_jsbytes(str_Secteur_accessio_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],M6=[0,caml_string_of_jsbytes(str_CalculNombrePart_abr$0),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr),0]],MK=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4200,5,num_4200,26,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Mw=caml_string_of_jsbytes(str_0$1),Mx=caml_string_of_jsbytes("1.2"),My=caml_string_of_jsbytes("1.5"),Mz=caml_string_of_jsbytes(str_1$0),MA=caml_string_of_jsbytes(str_2_5),MB=caml_string_of_jsbytes(str_2),MC=caml_string_of_jsbytes(str_3$0),MD=caml_string_of_jsbytes(str_3),ME=caml_string_of_jsbytes(str_3_7),MF=caml_string_of_jsbytes(str_4),MG=caml_string_of_jsbytes(str_4_3),MH=caml_string_of_jsbytes(str_4),MI=caml_string_of_jsbytes(str_0_5),MJ=caml_string_of_jsbytes(str_4_3),ML=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_603,10,num_603,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Mv=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4113,14,num_4113,36,[0,caml_string_of_jsbytes(str_Article_D832_25),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Mh=caml_string_of_jsbytes(str_0$1),Mi=caml_string_of_jsbytes(str_1_4),Mj=caml_string_of_jsbytes(str_1_8),Mk=caml_string_of_jsbytes(str_1$0),Ml=caml_string_of_jsbytes(str_2_5),Mm=caml_string_of_jsbytes(str_2),Mn=caml_string_of_jsbytes(str_3$0),Mo=caml_string_of_jsbytes(str_3),Mp=caml_string_of_jsbytes(str_3_7),Mq=caml_string_of_jsbytes(str_4),Mr=caml_string_of_jsbytes(str_4_3),Ms=caml_string_of_jsbytes(str_4),Mt=caml_string_of_jsbytes(str_0_5),Mu=caml_string_of_jsbytes(str_4_3),MM=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_603,10,num_603,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Mg=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_603,10,num_603,32,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],MN=[0,caml_string_of_jsbytes(str_CalculNombrePart_abr),[0,caml_string_of_jsbytes(str_n_nombre_parts_d_abr$0),0]],Mb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4286,5,num_4286,26,[0,caml_string_of_jsbytes(str_Article_D832_26),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],Ma=caml_string_of_jsbytes(str_0),L_=caml_string_of_jsbytes(str_12),L$=caml_string_of_jsbytes(str_0),Mc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_596,10,num_596,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L9=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4248,14,num_4248,21,[0,caml_string_of_jsbytes(str_Article_D832_26),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],L8=caml_string_of_jsbytes(str_0),L6=caml_string_of_jsbytes(str_12),L7=caml_string_of_jsbytes(str_0),L2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$3),num_4235,14,num_4235,50,[0,caml_string_of_jsbytes(str_Article_D832_26),[0,caml_string_of_jsbytes(str_Sous_Section_2_abr),[0,caml_string_of_jsbytes(str_Section_3_Loge_abr),[0,caml_string_of_jsbytes(str_Chapitre_II_Mo_abr),[0,caml_string_of_jsbytes(str_Titre_III_Aide_abr),[0,caml_string_of_jsbytes(str_Livre_VIII_Aid_abr),[0,caml_string_of_jsbytes(str_Partie_r_glemen_abr$1),[0,caml_string_of_jsbytes(str_Code_de_la_const_abr),0]]]]]]]]],L1=[1,0],LW=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2837,5,num_2837,26,[0,caml_string_of_jsbytes(str_Article_31),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],LH=caml_string_of_jsbytes("0.328"),LI=caml_string_of_jsbytes(str_409505),LJ=[1,0],LK=caml_string_of_jsbytes(str_0_232),LL=caml_string_of_jsbytes(str_262985),LM=caml_string_of_jsbytes(str_409505),LN=caml_string_of_jsbytes(str_0_208),LO=caml_string_of_jsbytes(str_204761),LP=caml_string_of_jsbytes(str_262985),LQ=caml_string_of_jsbytes("0.024"),LR=caml_string_of_jsbytes(str_142303),LS=caml_string_of_jsbytes(str_204761),LT=caml_string_of_jsbytes(str_0),LU=caml_string_of_jsbytes(str_0$1),LV=caml_string_of_jsbytes(str_142303),LX=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_591,11,num_591,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],LG=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2788,14,num_2788,38,[0,caml_string_of_jsbytes(str_Article_31),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Lo=caml_string_of_jsbytes("0.48"),Lp=caml_string_of_jsbytes(str_633129),Lq=[1,0],Lr=caml_string_of_jsbytes(str_0_32),Ls=caml_string_of_jsbytes(str_535744),Lt=caml_string_of_jsbytes(str_633129),Lu=caml_string_of_jsbytes("0.264"),Lv=caml_string_of_jsbytes(str_389618),Lw=caml_string_of_jsbytes(str_535744),Lx=caml_string_of_jsbytes("0.216"),Ly=caml_string_of_jsbytes(str_267871),Lz=caml_string_of_jsbytes(str_389618),LA=caml_string_of_jsbytes("0.104"),LB=caml_string_of_jsbytes(str_194810),LC=caml_string_of_jsbytes(str_267871),LD=caml_string_of_jsbytes(str_0_04),LE=caml_string_of_jsbytes(str_0$1),LF=caml_string_of_jsbytes(str_194810),Lk=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$5),num_2872,14,num_2872,41,[0,caml_string_of_jsbytes(str_Article_31),[0,caml_string_of_jsbytes(str_Chapitre_V_Cal_abr),[0,caml_string_of_jsbytes(str_Arr_t_du_27_s_abr),0]]]],Li=caml_string_of_jsbytes("7632"),Lj=caml_string_of_jsbytes("4557"),Ll=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_594,11,num_594,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Lh=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_594,11,num_594,38,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Lm=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes("montant_forfaitaire_d832_26"),0]],LY=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_591,11,num_591,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Ln=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_591,11,num_591,35,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],LZ=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes("tranches_revenus_d832_26"),0]],L3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_592,11,num_592,47,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L0=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_592,11,num_592,47,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L4=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes("tranches_revenus_d832_26_multipli\xc3\xa9es"),0]],Md=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_596,10,num_596,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],L5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_596,10,num_596,17,[0,caml_string_of_jsbytes(str_Secteur_logement_abr),[0,caml_string_of_jsbytes(str_Calcul_du_montan_abr$0),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]]],Me=[0,caml_string_of_jsbytes(str_Calcul_quivalen_abr),[0,caml_string_of_jsbytes(str_montant),0]],Lc=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_100,5,num_100,35,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_II_De_abr),[0,caml_string_of_jsbytes(str_Ordonnance_n_9_abr),0]]]],Ld=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_520,10,num_520,17,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],Lb=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_520,10,num_520,17,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K_=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_138,39,num_138,69,[0,caml_string_of_jsbytes(str_Article_19),[0,caml_string_of_jsbytes(str_Chapitre_II_De_abr),[0,caml_string_of_jsbytes(str_Ordonnance_n_9_abr),0]]]],K9=caml_string_of_jsbytes(str_0_005),K4=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$9),37,9,37,20,[0,caml_string_of_jsbytes("Article L136-1-3"),[0,caml_string_of_jsbytes("Section 1 : De la contribution sociale sur les revenus d'activit\xc3\xa9 et sur les revenus de remplacement"),[0,caml_string_of_jsbytes("Chapitre 6 : Contribution sociale g\xc3\xa9n\xc3\xa9ralis\xc3\xa9e"),[0,caml_string_of_jsbytes(str_Titre_III_Titre_abr),[0,caml_string_of_jsbytes(str_Partie_l_gislative),[0,caml_string_of_jsbytes(str_Code_de_la_s_cu_abr),0]]]]]]],K5=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K3=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K6=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K2=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_518,11,num_518,22,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K7=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes("exon\xc3\xa9r\xc3\xa9_csg"),0]],K$=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_517,11,num_517,20,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],K8=[0,caml_string_of_jsbytes(str_examples_aides_l_abr$1),num_517,11,num_517,20,[0,caml_string_of_jsbytes(str_Calcul_des_contr_abr),[0,caml_string_of_jsbytes(str_D_clarations_de_abr),[0,caml_string_of_jsbytes(str_Prologue_aides_abr),0]]]],La=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes("taux_crds"),0]],Le=[0,caml_string_of_jsbytes(str_ContributionsSoc_abr),[0,caml_string_of_jsbytes(str_montant),0]],Lf=[0,caml_string_of_jsbytes(str_examples_aides_l_abr),num_104,13,num_104,24,[0,caml_string_of_jsbytes(str_Article_14),[0,caml_string_of_jsbytes(str_Chapitre_II_De_abr),[0,caml_string_of_jsbytes(str_Ordonnance_n_9_abr),0]]]],KT=caml_string_of_jsbytes("enfant_\xc3\xa0_na\xc3\xaetre_apr\xc3\xa8s_quatri\xc3\xa8me_mois_grossesse"),KU=caml_string_of_jsbytes("condition_rattach\xc3\xa9_foyer_fiscal_parent_ifi"),KV=caml_string_of_jsbytes("situation_familiale"),KW=caml_string_of_jsbytes("nombre_autres_occupants_logement"),KX=caml_string_of_jsbytes("personnes_\xc3\xa0_charge"),KY=caml_string_of_jsbytes("logement"),KZ=caml_string_of_jsbytes("prestations_re\xc3\xa7ues"),K0=[0,caml_string_of_jsbytes("M\xc3\xa9nage"),0],KI=caml_string_of_jsbytes("zone"),KJ=caml_string_of_jsbytes("surface_m_carr\xc3\xa9s"),KK=caml_string_of_jsbytes("logement_decent_l89_462"),KL=caml_string_of_jsbytes("usufruit"),KM=caml_string_of_jsbytes("lou\xc3\xa9_ou_sous_lou\xc3\xa9_\xc3\xa0_des_tiers"),KN=caml_string_of_jsbytes("propri\xc3\xa9taire"),KO=caml_string_of_jsbytes("mode_occupation"),KP=caml_string_of_jsbytes("est_ehpad_ou_maison_autonomie_l313_12_asf"),KQ=caml_string_of_jsbytes("r\xc3\xa9sidence_principale"),KR=[0,caml_string_of_jsbytes("Logement"),0],KC=caml_string_of_jsbytes(str_Locataire),KE=caml_string_of_jsbytes("R\xc3\xa9sidentLogementFoyer"),KF=caml_string_of_jsbytes("AccessionPropri\xc3\xa9t\xc3\xa9LocalUsageExclusifHabitation"),KG=caml_string_of_jsbytes(str_SousLocataire),KH=caml_string_of_jsbytes(str_LocationAccession),KD=[0,caml_string_of_jsbytes("ModeOccupation"),0],Ks=caml_string_of_jsbytes("changement_logement_d842_4"),Kt=caml_string_of_jsbytes("logement_meubl\xc3\xa9_d842_2"),Ku=caml_string_of_jsbytes("\xc3\xa2g\xc3\xa9es_ou_handicap_adultes_h\xc3\xa9berg\xc3\xa9es_on\xc3\xa9reux_particuliers"),Kv=caml_string_of_jsbytes("colocation"),Kw=caml_string_of_jsbytes("logement_est_chambre"),Kx=caml_string_of_jsbytes("b\xc3\xa9n\xc3\xa9ficiaire_aide_adulte_ou_enfant_handicap\xc3\xa9s"),Ky=caml_string_of_jsbytes("loyer_principal"),Kz=caml_string_of_jsbytes("bailleur"),KA=[0,caml_string_of_jsbytes(str_Location),0],Km=caml_string_of_jsbytes("personne_h\xc3\xa9berg\xc3\xa9e_centre_soin_l_L162_22_3_s\xc3\xa9curit\xc3\xa9_sociale"),Kn=caml_string_of_jsbytes("patrimoine"),Ko=caml_string_of_jsbytes("nationalit\xc3\xa9"),Kp=caml_string_of_jsbytes(str_date_naissance),Kq=[0,caml_string_of_jsbytes(str_Demandeur),0],Ki=caml_string_of_jsbytes(str_Enfant_Charge),Kk=caml_string_of_jsbytes(str_AutrePersonne_C_abr),Kj=[0,caml_string_of_jsbytes("Personne\xc3\x80Charge"),0],J7=caml_string_of_jsbytes("pr\xc3\xaat"),J8=caml_string_of_jsbytes("anciennet\xc3\xa9_logement"),J9=caml_string_of_jsbytes("situation_r822_11_13_17"),J_=caml_string_of_jsbytes("copropri\xc3\xa9t\xc3\xa9"),J$=caml_string_of_jsbytes("local_habit\xc3\xa9_premi\xc3\xa8re_fois_b\xc3\xa9n\xc3\xa9ficiaire"),Ka=caml_string_of_jsbytes("type_travaux_logement_r842_5"),Kb=caml_string_of_jsbytes("type_travaux_logement_d832_15"),Kc=caml_string_of_jsbytes("date_entr\xc3\xa9e_logement"),Kd=caml_string_of_jsbytes("charges_mensuelles_pr\xc3\xaat"),Ke=caml_string_of_jsbytes("mensualit\xc3\xa9_principale"),Kf=caml_string_of_jsbytes("logement_situ\xc3\xa9_commune_d\xc3\xa9s\xc3\xa9quilibre_l831_2"),Kg=[0,caml_string_of_jsbytes("Propri\xc3\xa9taire"),0],J3=caml_string_of_jsbytes(str_Changement),J5=caml_string_of_jsbytes(str_PasDeChangement),J4=[0,caml_string_of_jsbytes("ChangementLogementD842_4"),0],JZ=caml_string_of_jsbytes("Fran\xc3\xa7aise"),J1=caml_string_of_jsbytes("\xc3\x89trang\xc3\xa8re"),J0=[0,caml_string_of_jsbytes("Nationalit\xc3\xa9"),0],JW=caml_string_of_jsbytes(str_Non),JY=caml_string_of_jsbytes(str_Oui),JX=[0,caml_string_of_jsbytes("Lou\xc3\xa9OuSousLou\xc3\xa9\xc3\x80DesTiers"),0],JS=caml_string_of_jsbytes(str_BailleurSocial),JU=caml_string_of_jsbytes("BailleurPriv\xc3\xa9AvecConventionnementSocial"),JV=caml_string_of_jsbytes("BailleurPriv\xc3\xa9"),JT=[0,caml_string_of_jsbytes("TypeBailleur"),0],JK=caml_string_of_jsbytes("situation_garde_altern\xc3\xa9e"),JL=caml_string_of_jsbytes(str_obligation_scolaire),JM=caml_string_of_jsbytes(str_r_muneration_me_abr),JN=caml_string_of_jsbytes(str_date_de_naissance),JO=caml_string_of_jsbytes(str_a_d_j_ouvert_abr),JP=caml_string_of_jsbytes(str_b_n_ficie_titr_abr),JQ=caml_string_of_jsbytes(str_identifiant),JR=[0,caml_string_of_jsbytes(str_Enfant_Charge),0],JC=caml_string_of_jsbytes(str_b_n_ficie_titr_abr),JD=caml_string_of_jsbytes(str_a_d_j_ouvert_abr),JE=caml_string_of_jsbytes(str_prise_en_charge),JF=caml_string_of_jsbytes(str_date_de_naissance),JG=caml_string_of_jsbytes(str_r_muneration_me_abr),JH=caml_string_of_jsbytes(str_obligation_scolaire),JI=caml_string_of_jsbytes(str_identifiant),JJ=[0,caml_string_of_jsbytes("EnfantPrestationsFamiliales"),0],Jt=caml_string_of_jsbytes("cat\xc3\xa9gorie_\xc3\xa9quivalence_loyer_d842_16"),Ju=caml_string_of_jsbytes("redevance"),Jv=caml_string_of_jsbytes("construit_application_loi_1957_12_III"),Jw=caml_string_of_jsbytes("date_conventionnement"),Jx=caml_string_of_jsbytes(str_conventionn_li_abr),Jy=caml_string_of_jsbytes("remplit_conditions_r832_21"),Jz=caml_string_of_jsbytes("type"),JA=[0,caml_string_of_jsbytes(str_LogementFoyer),0],Jl=caml_string_of_jsbytes("titulaire_allocation_personne_\xc3\xa2g\xc3\xa9e"),Jm=caml_string_of_jsbytes("b\xc3\xa9n\xc3\xa9ficiaire_l161_19_l351_8_l643_3_s\xc3\xa9cu"),Jn=caml_string_of_jsbytes("incapacit\xc3\xa9_80_pourcent_ou_restriction_emploi"),Jo=caml_string_of_jsbytes("parent\xc3\xa9"),Jp=caml_string_of_jsbytes("ascendant_descendant_collat\xc3\xa9ral_deuxi\xc3\xa8me_troisi\xc3\xa8me_degr\xc3\xa9"),Jq=caml_string_of_jsbytes("ressources"),Jr=caml_string_of_jsbytes(str_date_naissance),Js=[0,caml_string_of_jsbytes(str_AutrePersonne_C_abr),0],Jh=caml_string_of_jsbytes(str_taux),Ji=caml_string_of_jsbytes(str_bas),Jj=caml_string_of_jsbytes(str_haut),Jk=[0,caml_string_of_jsbytes("TrancheRevenuD\xc3\xa9cimal"),0],Jc=caml_string_of_jsbytes(str_taux),Jd=caml_string_of_jsbytes(str_bas),Je=caml_string_of_jsbytes(str_haut),Jf=[0,caml_string_of_jsbytes("TrancheRevenu"),0],I_=caml_string_of_jsbytes(str_Neuf),Ja=caml_string_of_jsbytes(str_Ancien),I$=[0,caml_string_of_jsbytes("NeufOuAncien"),0],I5=caml_string_of_jsbytes("titulaire_pr\xc3\xaat"),I6=caml_string_of_jsbytes("date_signature"),I7=caml_string_of_jsbytes("type_pr\xc3\xaat"),I8=[0,caml_string_of_jsbytes("Pr\xc3\xaat"),0],I1=caml_string_of_jsbytes("ancienne_allocation_logement"),I2=caml_string_of_jsbytes("ancien_loyer_principal"),I3=[0,caml_string_of_jsbytes("InfosChangementLogementD842_4"),0],IZ=caml_string_of_jsbytes("satisfait_conditions_l512_2_code_s\xc3\xa9curit\xc3\xa9_sociale"),I0=[0,caml_string_of_jsbytes("Conditions\xc3\x89trangers"),0],IW=caml_string_of_jsbytes("ne_produisant_pas_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),IX=caml_string_of_jsbytes("produisant_revenu_p\xc3\xa9riode_r822_3_3_r822_4"),IY=[0,caml_string_of_jsbytes("Patrimoine"),0],IT=caml_string_of_jsbytes("conforme_article_l442_1"),IU=caml_string_of_jsbytes("date_naissance_personne_sous_location"),IV=[0,caml_string_of_jsbytes("PersonneSousLocation"),0],IR=caml_string_of_jsbytes("conventionn\xc3\xa9_livre_III_titre_II_chap_I_sec_3"),IS=[0,caml_string_of_jsbytes("ConventionANHA"),0],IO=caml_string_of_jsbytes("r\xc3\xa9duction_loyer_solidarit\xc3\xa9_per\xc3\xa7ue"),IP=caml_string_of_jsbytes(str_conventionn_li_abr),IQ=[0,caml_string_of_jsbytes("ConventionBailleurSocial"),0],IF=caml_string_of_jsbytes(str_PrestationAccuei_abr),IH=caml_string_of_jsbytes(str_AllocationsFamil_abr),II=caml_string_of_jsbytes(str_Compl_mentFamilial),IJ=caml_string_of_jsbytes(str_AllocationLogement),IK=caml_string_of_jsbytes(str_Allocation_duca_abr),IL=caml_string_of_jsbytes(str_AllocationSoutie_abr),IM=caml_string_of_jsbytes(str_AllocationRentr_abr),IN=caml_string_of_jsbytes(str_AllocationJourna_abr$0),IG=[0,caml_string_of_jsbytes(str_l_mentPrestat_abr),0],IA=caml_string_of_jsbytes(str_Avant),IC=caml_string_of_jsbytes(str_Pendant),ID=caml_string_of_jsbytes(str_Apr_s),IB=[0,caml_string_of_jsbytes(str_SituationObligat_abr),0],It=caml_string_of_jsbytes(str_GardeAltern_ePa_abr),Iv=caml_string_of_jsbytes(str_GardeAltern_eAl_abr),Iw=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),Ix=caml_string_of_jsbytes(str_ServicesSociauxA_abr$1),Iy=caml_string_of_jsbytes(str_ServicesSociauxA_abr$0),Iu=[0,caml_string_of_jsbytes("PriseEnChargeEnfant"),0],Ij=caml_string_of_jsbytes(str_Guadeloupe),Il=caml_string_of_jsbytes(str_Guyane),Im=caml_string_of_jsbytes(str_Martinique),In=caml_string_of_jsbytes(str_LaR_union),Io=caml_string_of_jsbytes(str_SaintBarth_lemy),Ip=caml_string_of_jsbytes(str_SaintMartin),Iq=caml_string_of_jsbytes(str_M_tropole),Ir=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),Is=caml_string_of_jsbytes(str_Mayotte),Ik=[0,caml_string_of_jsbytes(str_Collectivit),0],If=caml_string_of_jsbytes(str_PersonneSeule),Ih=caml_string_of_jsbytes(str_Couple),Ig=[0,caml_string_of_jsbytes("SituationFamilialeCalculAPL"),0],H$=caml_string_of_jsbytes("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUS"),Ib=caml_string_of_jsbytes("\xc3\x89tudiantLog\xc3\xa9EnChambreCROUSR\xc3\xa9habilit\xc3\xa9e"),Ic=caml_string_of_jsbytes("Personnes\xc3\x82g\xc3\xa9esSelon3DeD842_16"),Id=caml_string_of_jsbytes(str_AutresPersonnes),Ia=[0,caml_string_of_jsbytes("Cat\xc3\xa9gorie\xc3\x89quivalenceLoyerAllocationLogementFoyer"),0],H5=caml_string_of_jsbytes("LogementPersonnes\xc3\x82g\xc3\xa9esOuHandicap\xc3\xa9es"),H7=caml_string_of_jsbytes("R\xc3\xa9sidenceSociale"),H8=caml_string_of_jsbytes("FoyerJeunesTrvailleursOuMigrantsConventionn\xc3\xa9L353_2Avant1995"),H9=caml_string_of_jsbytes(str_Autre),H6=[0,caml_string_of_jsbytes("TypeLogementFoyer"),0],HX=caml_string_of_jsbytes("C\xc3\xa9libataire"),HZ=caml_string_of_jsbytes("Mari\xc3\xa9s"),H0=caml_string_of_jsbytes("Pacs\xc3\xa9s"),H1=caml_string_of_jsbytes(str_Concubins),H2=caml_string_of_jsbytes("C\xc3\xa9libataireS\xc3\xa9par\xc3\xa9DeFait"),H3=caml_string_of_jsbytes("ConcubinageDontS\xc3\xa9par\xc3\xa9DeFait"),HY=[0,caml_string_of_jsbytes("SituationFamiliale"),0],HS=caml_string_of_jsbytes("AidePersonnalis\xc3\xa9eLogement"),HU=caml_string_of_jsbytes(str_AllocationLogeme_abr$0),HV=caml_string_of_jsbytes(str_AllocationLogeme_abr),HT=[0,caml_string_of_jsbytes("TypeAidesPersonnelleLogement"),0],HN=caml_string_of_jsbytes("Pas\xc3\x89ligible"),HP=caml_string_of_jsbytes(str_AllocationLogeme_abr$0),HQ=caml_string_of_jsbytes(str_AllocationLogeme_abr),HO=[0,caml_string_of_jsbytes(str_ligibilit_All_abr),0],HJ=caml_string_of_jsbytes("Impay\xc3\xa9Loyer"),HL=caml_string_of_jsbytes("Impay\xc3\xa9Pr\xc3\xaat"),HK=[0,caml_string_of_jsbytes("ModeOccupationImpay\xc3\xa9"),0],HE=caml_string_of_jsbytes("TotalAnnuel\xc3\x89ch\xc3\xa9ances"),HG=caml_string_of_jsbytes("Mensualit\xc3\xa9"),HH=caml_string_of_jsbytes(str_Loyer),HF=[0,caml_string_of_jsbytes("D\xc3\xa9penseLogement"),0],Hz=caml_string_of_jsbytes(str_Location),HB=caml_string_of_jsbytes("AccessionPropri\xc3\xa9t\xc3\xa9"),HC=caml_string_of_jsbytes(str_LogementFoyer),HA=[0,caml_string_of_jsbytes("Cat\xc3\xa9gorieCalculAPL"),0],Hu=caml_string_of_jsbytes(str_Zone1),Hw=caml_string_of_jsbytes(str_Zone2),Hx=caml_string_of_jsbytes(str_Zone3),Hv=[0,caml_string_of_jsbytes("ZoneDHabitation"),0],Hp=caml_string_of_jsbytes(str_Ascendant),Hr=caml_string_of_jsbytes(str_Descendant),Hs=caml_string_of_jsbytes("Collat\xc3\xa9ralDeuxi\xc3\xa8meTroisi\xc3\xa8meDegr\xc3\xa9"),Hq=[0,caml_string_of_jsbytes("Parent\xc3\xa9"),0],Hm=caml_string_of_jsbytes("PasDeGardeAltern\xc3\xa9e"),Ho=caml_string_of_jsbytes("GardeAltern\xc3\xa9eCoefficientPriseEnCharge"),Hn=[0,caml_string_of_jsbytes("SituationGardeAltern\xc3\xa9e"),0],Hj=caml_string_of_jsbytes("DemandeurOuConjointOuParentOuViaPartsSoci\xc3\xa9t\xc3\xa9s"),Hl=caml_string_of_jsbytes(str_Autre),Hk=[0,caml_string_of_jsbytes("ParentOuAutre"),0],Hb=caml_string_of_jsbytes(str_AllocationsFamil_abr),Hd=caml_string_of_jsbytes(str_Compl_mentFamilial),He=caml_string_of_jsbytes(str_AllocationJeuneE_abr),Hf=caml_string_of_jsbytes(str_AllocationSoutie_abr),Hg=caml_string_of_jsbytes("AllocationSoutienEnfantHandicap\xc3\xa9"),Hh=caml_string_of_jsbytes("AllocationAdulteHandicap\xc3\xa9"),Hc=[0,caml_string_of_jsbytes("PrestationRe\xc3\xa7ue"),0],G9=caml_string_of_jsbytes(str_Revenu),G$=caml_string_of_jsbytes(str_Infini),G_=[0,caml_string_of_jsbytes("LimiteTrancheD\xc3\xa9cimal"),0],G6=caml_string_of_jsbytes(str_Revenu),G8=caml_string_of_jsbytes(str_Infini),G7=[0,caml_string_of_jsbytes("LimiteTranche"),0],G3=caml_string_of_jsbytes(str_Oui),G5=caml_string_of_jsbytes(str_Non),G4=[0,caml_string_of_jsbytes("Am\xc3\xa9lior\xc3\xa9ParOccupant"),0],GY=caml_string_of_jsbytes("ObjectifD\xc3\xa9cenceLogement"),G0=caml_string_of_jsbytes("Pr\xc3\xa9vuDansListeR321_15"),G1=caml_string_of_jsbytes(str_AgrandirOuRendre_abr),G2=caml_string_of_jsbytes(str_PasDeTravaux),GZ=[0,caml_string_of_jsbytes("TypeTravauxLogementR842_5"),0],GT=caml_string_of_jsbytes(str_TravauxPourAcqui_abr),GV=caml_string_of_jsbytes("TravauxSurLogementD\xc3\xa9j\xc3\xa0AcquisD832_15_2"),GW=caml_string_of_jsbytes(str_PasDeTravaux),GU=[0,caml_string_of_jsbytes("TypeTravauxLogementD832_15"),0],GP=caml_string_of_jsbytes(str_Demandeur),GR=caml_string_of_jsbytes(str_VendeurQuandDema_abr),GQ=[0,caml_string_of_jsbytes("TitulairePr\xc3\xaat"),0],GJ=caml_string_of_jsbytes(str_D331_32),GL=caml_string_of_jsbytes(str_D331_63_64),GM=caml_string_of_jsbytes(str_D331_59_8),GN=caml_string_of_jsbytes(str_D331_76_1),GO=caml_string_of_jsbytes(str_Autre),GK=[0,caml_string_of_jsbytes("TypePr\xc3\xaat"),0],ba7=caml_string_of_jsbytes(str$12),baF=caml_string_of_jsbytes("The function 'n_nombre_parts_d832_25_in' translation isn't yet supported..."),baG=caml_string_of_jsbytes("The function 'condition_2_du_832_25_in' translation isn't yet supported..."),baD=caml_string_of_jsbytes("The function 'condition_logement_surface_in' translation isn't yet supported..."),baE=caml_string_of_jsbytes("The function 'condition_logement_residence_principale_in' translation isn't yet supported..."),baw=caml_string_of_jsbytes("AccessionProprieteLocalUsageExclusifHabitation"),bax=caml_string_of_jsbytes(str_Locataire),bay=caml_string_of_jsbytes(str_LocationAccession),baz=caml_string_of_jsbytes("ResidentLogementFoyer"),baA=caml_string_of_jsbytes(str_SousLocataire),baB=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ModeOccupation.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ModeOccupation.t'")],baq=caml_string_of_jsbytes("AutrePersonneACharge"),bar=caml_string_of_jsbytes("EnfantACharge"),bas=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PersonneACharge.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PersonneACharge.t'")],bak=caml_string_of_jsbytes(str_Changement),bal=caml_string_of_jsbytes(str_PasDeChangement),ban=[1,0],bam=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ChangementLogementD8424.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ChangementLogementD8424.t'")],baf=caml_string_of_jsbytes("Etrangere"),bag=caml_string_of_jsbytes("Francaise"),bai=[0,0],bah=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'Nationalite.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'Nationalite.t'")],bab=caml_string_of_jsbytes(str_Non),bac=caml_string_of_jsbytes(str_Oui),bae=[0,0],bad=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'LoueOuSousLoueADesTiers.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'LoueOuSousLoueADesTiers.t'")],a$8=caml_string_of_jsbytes("BailleurPrive"),a$9=caml_string_of_jsbytes("BailleurPriveAvecConventionnementSocial"),a$_=caml_string_of_jsbytes(str_BailleurSocial),baa=[2,0],a$$=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeBailleur.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeBailleur.t'")],a$3=caml_string_of_jsbytes("MoinsDeTroisEnfants"),a$4=caml_string_of_jsbytes("PlusDeTroisEnfants"),a$6=[0,0],a$5=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'DateNaissanceTroisiemeOuDernierPlusEnfant.t'")],a$Z=caml_string_of_jsbytes(str_Ancien),a$0=caml_string_of_jsbytes(str_Neuf),a$2=[0,0],a$1=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'NeufOuAncien.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'NeufOuAncien.t'")],a$H=caml_string_of_jsbytes(str_AllocationEducat_abr),a$I=caml_string_of_jsbytes(str_AllocationJourna_abr),a$J=caml_string_of_jsbytes(str_AllocationLogement),a$K=caml_string_of_jsbytes(str_AllocationRentre_abr),a$L=caml_string_of_jsbytes(str_AllocationSoutie_abr),a$M=caml_string_of_jsbytes(str_AllocationsFamil_abr),a$N=caml_string_of_jsbytes(str_ComplementFamilial),a$O=caml_string_of_jsbytes(str_PrestationAccuei_abr),a$Q=[0,0],a$R=[2,0],a$S=[1,0],a$T=[5,0],a$U=[6,0],a$V=[3,0],a$W=[7,0],a$X=[4,0],a$P=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$1),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$0)],a$A=caml_string_of_jsbytes(str_Apres),a$B=caml_string_of_jsbytes(str_Avant),a$C=caml_string_of_jsbytes(str_Pendant),a$E=[1,0],a$F=[0,0],a$G=[2,0],a$D=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr$1)],a$o=caml_string_of_jsbytes(str_EffectiveEtPerma_abr),a$p=caml_string_of_jsbytes(str_GardeAlterneeAll_abr),a$q=caml_string_of_jsbytes(str_GardeAlterneePar_abr),a$r=caml_string_of_jsbytes(str_ServicesSociauxA_abr$2),a$s=caml_string_of_jsbytes(str_ServicesSociauxA_abr),a$u=[4,0],a$v=[3,0],a$w=[0,0],a$x=[1,0],a$y=[2,0],a$t=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PriseEnChargeEnfant.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PriseEnChargeEnfant.t'")],a_7=caml_string_of_jsbytes(str_Guadeloupe),a_8=caml_string_of_jsbytes(str_Guyane),a_9=caml_string_of_jsbytes(str_LaReunion),a__=caml_string_of_jsbytes(str_Martinique),a_$=caml_string_of_jsbytes(str_Mayotte),a$a=caml_string_of_jsbytes(str_Metropole),a$b=caml_string_of_jsbytes(str_SaintBarthelemy),a$c=caml_string_of_jsbytes(str_SaintMartin),a$d=caml_string_of_jsbytes(str_SaintPierreEtMiq_abr),a$f=[7,0],a$g=[5,0],a$h=[4,0],a$i=[6,0],a$j=[8,0],a$k=[2,0],a$l=[3,0],a$m=[1,0],a$n=[0,0],a$e=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes(str_kind_for_the_e_abr$0),0]]],caml_string_of_jsbytes(str_Unexpected_s_abr)],a_1=caml_string_of_jsbytes(str_Couple),a_2=caml_string_of_jsbytes(str_PersonneSeule),a_4=[0,0],a_5=[1,0],a_3=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'SituationFamilialeCalculAPL.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'SituationFamilialeCalculAPL.t'")],a_R=caml_string_of_jsbytes(str_AutresPersonnes),a_S=caml_string_of_jsbytes("EtudiantLogeEnChambreCROUS"),a_T=caml_string_of_jsbytes("EtudiantLogeEnChambreCROUSRehabilitee"),a_U=caml_string_of_jsbytes("PersonnesAgeesSelon3DeD842_16"),a_W=[2,0],a_X=[1,0],a_Y=[0,0],a_Z=[3,0],a_V=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'CategorieEquivalenceLoyerAllocationLogementFoyer.t'")],a_H=caml_string_of_jsbytes(str_Autre),a_I=caml_string_of_jsbytes("FoyerJeunesTrvailleursOuMigrantsConventionneL353_2Avant1995"),a_J=caml_string_of_jsbytes("LogementPersonnesAgeesOuHandicapees"),a_K=caml_string_of_jsbytes("ResidenceSociale"),a_M=[1,0],a_N=[0,0],a_O=[2,0],a_P=[3,0],a_L=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeLogementFoyer.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeLogementFoyer.t'")],a_u=caml_string_of_jsbytes("Celibataire"),a_v=caml_string_of_jsbytes("CelibataireSepareDeFait"),a_w=caml_string_of_jsbytes("ConcubinageDontSepareDeFait"),a_x=caml_string_of_jsbytes(str_Concubins),a_y=caml_string_of_jsbytes("Maries"),a_z=caml_string_of_jsbytes("Pacses"),a_B=[2,0],a_C=[3,0],a_D=[5,0],a_E=[4,0],a_F=[0,0],a_A=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'SituationFamiliale.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'SituationFamiliale.t'")],a_m=caml_string_of_jsbytes("AidePersonnaliseeLogement"),a_n=caml_string_of_jsbytes(str_AllocationLogeme_abr$0),a_o=caml_string_of_jsbytes(str_AllocationLogeme_abr),a_q=[2,0],a_r=[1,0],a_s=[0,0],a_p=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeAidesPersonnelleLogement.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeAidesPersonnelleLogement.t'")],a_h=caml_string_of_jsbytes(str_Loyer),a_i=caml_string_of_jsbytes("Mensualite"),a_j=caml_string_of_jsbytes("TotalAnnuelEcheances"),a_k=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'DepenseLogement.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'DepenseLogement.t'")],a_a=caml_string_of_jsbytes("Bailleur"),a_b=caml_string_of_jsbytes("Beneficiaire"),a_c=caml_string_of_jsbytes("EtablissementHabilite"),a_e=[2,0],a_f=[1,0],a_g=[0,0],a_d=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'VersementA.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'VersementA.t'")],a98=caml_string_of_jsbytes(str_Non),a99=caml_string_of_jsbytes("OuiAvecLoyerOuCharges"),a9$=[1,0],a9_=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PaiementLogementDistinctProfessionnel.t'")],a91=caml_string_of_jsbytes(str_Zone1),a92=caml_string_of_jsbytes(str_Zone2),a93=caml_string_of_jsbytes(str_Zone3),a95=[2,0],a96=[1,0],a97=[0,0],a94=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ZoneDHabitation.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ZoneDHabitation.t'")],a9U=caml_string_of_jsbytes("ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse"),a9V=caml_string_of_jsbytes("AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse"),a9W=caml_string_of_jsbytes("DateDeNaissance"),a9Y=[1,0],a9Z=[2,0],a9X=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'DateDeNaissanceOuMoisDeGrossesse.t'")],a9N=caml_string_of_jsbytes(str_Ascendant),a9O=caml_string_of_jsbytes("CollateralDeuxiemeTroisiemeDegre"),a9P=caml_string_of_jsbytes(str_Descendant),a9R=[1,0],a9S=[2,0],a9T=[0,0],a9Q=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'Parente.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'Parente.t'")],a9J=caml_string_of_jsbytes("GardeAlterneeCoefficientPriseEnCharge"),a9K=caml_string_of_jsbytes("PasDeGardeAlternee"),a9M=[0,0],a9L=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'SituationGardeAlternee.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'SituationGardeAlternee.t'")],a9F=caml_string_of_jsbytes(str_Autre),a9G=caml_string_of_jsbytes("DemandeurOuConjointOuParentOuViaPartsSocietes"),a9I=[1,0],a9H=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'ParentOuAutre.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'ParentOuAutre.t'")],a9r=caml_string_of_jsbytes("AllocationAdulteHandicape"),a9s=caml_string_of_jsbytes(str_AllocationJeuneE_abr),a9t=caml_string_of_jsbytes("AllocationSoutienEnfantHandicape"),a9u=caml_string_of_jsbytes(str_AllocationSoutie_abr),a9v=caml_string_of_jsbytes(str_AllocationsFamil_abr),a9w=caml_string_of_jsbytes(str_ComplementFamilial),a9y=[1,0],a9z=[0,0],a9A=[3,0],a9B=[4,0],a9C=[2,0],a9D=[5,0],a9x=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'PrestationRecue.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'PrestationRecue.t'")],a9m=caml_string_of_jsbytes(str_Non),a9n=caml_string_of_jsbytes(str_Oui),a9p=[0,0],a9q=[1,0],a9o=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'AmelioreParOccupant.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'AmelioreParOccupant.t'")],a9d=caml_string_of_jsbytes(str_AgrandirOuRendre_abr),a9e=caml_string_of_jsbytes("ObjectifDecenceLogement"),a9f=caml_string_of_jsbytes(str_PasDeTravaux),a9g=caml_string_of_jsbytes("PrevuDansListeR321_15"),a9i=[1,0],a9j=[3,0],a9k=[0,0],a9l=[2,0],a9h=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeTravauxLogementR8425.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementR8425.t'")],a87=caml_string_of_jsbytes(str_PasDeTravaux),a88=caml_string_of_jsbytes(str_TravauxPourAcqui_abr),a89=caml_string_of_jsbytes("TravauxSurLogementDejaAcquisD832_15_2"),a8$=[1,0],a9a=[0,0],a9b=[2,0],a8_=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypeTravauxLogementD83215.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypeTravauxLogementD83215.t'")],a81=caml_string_of_jsbytes(str_Demandeur),a82=caml_string_of_jsbytes(str_VendeurQuandDema_abr),a84=[1,0],a85=[0,0],a83=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TitulairePret.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TitulairePret.t'")],a8Q=caml_string_of_jsbytes(str_Autre),a8R=caml_string_of_jsbytes(str_D331_32),a8S=caml_string_of_jsbytes(str_D331_59_8),a8T=caml_string_of_jsbytes(str_D331_63_64),a8U=caml_string_of_jsbytes(str_D331_76_1),a8W=[3,0],a8X=[1,0],a8Y=[2,0],a8Z=[0,0],a80=[4,0],a8V=[0,[11,caml_string_of_jsbytes(str_Unexpected),[2,0,[11,caml_string_of_jsbytes("' kind for the enumeration 'TypePret.t'"),0]]],caml_string_of_jsbytes("Unexpected '%s' kind for the enumeration 'TypePret.t'")],a8N=[0,caml_string_of_jsbytes(str_calculAidePerson_abr$2),caml_string_of_jsbytes(str_calculAllocation_abr$0),caml_string_of_jsbytes(str_eligibiliteAides_abr),caml_string_of_jsbytes(str_ressourcesAidesP_abr),caml_string_of_jsbytes(str_eligibilitePrest_abr),caml_string_of_jsbytes(str_baseMensuelleAll_abr),caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_contributionsSoc_abr),caml_string_of_jsbytes(str_calculAidePerson_abr),caml_string_of_jsbytes(str_eligibiliteAideP_abr),caml_string_of_jsbytes(str_calculNombrePart_abr),caml_string_of_jsbytes(str_calculAllocation_abr$1),caml_string_of_jsbytes(str_calculetteAidesA_abr),caml_string_of_jsbytes(str_calculNombrePart_abr$0),caml_string_of_jsbytes(str_calculAidePerson_abr$0),caml_string_of_jsbytes(str_ouvertureDroitsR_abr),caml_string_of_jsbytes(str_impayeDepenseLog_abr),caml_string_of_jsbytes(str_eligibilitePrime_abr),caml_string_of_jsbytes(str_calculetteAidesA_abr$0),caml_string_of_jsbytes(str_calculAllocation_abr$2),caml_string_of_jsbytes(str_eligibiliteAlloc_abr),caml_string_of_jsbytes(str_calculAidePerson_abr$1),caml_string_of_jsbytes(str_calculEquivalenc_abr),caml_string_of_jsbytes(str_calculAllocation_abr)],a8O=[0,caml_string_of_jsbytes(str_smic),caml_string_of_jsbytes(str_ressourcesAidesP_abr),caml_string_of_jsbytes(str_ouvertureDroitsR_abr),caml_string_of_jsbytes(str_impayeDepenseLog_abr),caml_string_of_jsbytes(str_eligibilitePrime_abr),caml_string_of_jsbytes(str_eligibilitePrest_abr),caml_string_of_jsbytes(str_eligibiliteAlloc_abr),caml_string_of_jsbytes(str_eligibiliteAides_abr),caml_string_of_jsbytes(str_eligibiliteAideP_abr),caml_string_of_jsbytes(str_contributionsSoc_abr),caml_string_of_jsbytes(str_calculetteAidesA_abr$0),caml_string_of_jsbytes(str_calculetteAidesA_abr),caml_string_of_jsbytes(str_calculNombrePart_abr),caml_string_of_jsbytes(str_calculNombrePart_abr$0),caml_string_of_jsbytes(str_calculEquivalenc_abr),caml_string_of_jsbytes(str_calculAllocation_abr$0),caml_string_of_jsbytes(str_calculAllocation_abr$1),caml_string_of_jsbytes(str_calculAllocation_abr$2),caml_string_of_jsbytes(str_calculAllocation_abr),caml_string_of_jsbytes(str_calculAidePerson_abr$1),caml_string_of_jsbytes(str_calculAidePerson_abr),caml_string_of_jsbytes(str_calculAidePerson_abr$2),caml_string_of_jsbytes(str_calculAidePerson_abr$0),caml_string_of_jsbytes(str_baseMensuelleAll_abr)],bbu=caml_string_of_jsbytes("AidesLogementLib"),bby=caml_string_of_jsbytes(str$12);function a(dYy){if(typeof dYy==="number")return 0;else switch(dYy[0]){case @@ -5156,14 +5156,14 @@ var cMR=cMO;return pG(z9,cMR)},cMM)}],cMK,cMJ)}],cMF,cME);return cMG}catch(cMH){cMH=caml_wrap_exception(cMH);if(cMH===os)throw[0,oC,zU];throw cMH}}),cGz=pF(At,pa,function(cMa){try{var cMb=function(cMC){return oD(Ad)},cMc=function(cMB){return pG(Ae,1)},cMd=qa(As,[0,function(cMf){function cMg(cMA){throw os}function -cMh(cMz){return 0}return qa(Ar,[0,function(cMi){function -cMj(cMw){var -cMx=oH(Af),cMy=qk(oH(Ag),cMx);return qb(qe(qd(cF8,qb(cMa,oH(Ah))),cFs),cMy)}function -cMk(cMt){var -cMu=qr(cFs,cF8),cMv=cMu?qo(cFs,qd(cF8,qb(cMa,oH(Ai)))):cMu;return pG(Aj,cMv)}return qa(Aq,[0,function(cMl){function -cMm(cMq){var -cMr=oH(Ak),cMs=qk(oH(Al),cMr);return qb(qe(qd(cF4,qb(cMa,oH(Am))),cFs),cMs)}return qa(Ap,[0],function(cMn){var -cMo=qr(cFs,cF4),cMp=cMo?qo(cFs,qd(cF4,qb(cMa,oH(An)))):cMo;return pG(Ao,cMp)},cMm)}],cMk,cMj)}],cMh,cMg)}],cMc,cMb);return cMd}catch(cMe){cMe=caml_wrap_exception(cMe);if(cMe===os)throw[0,oC,Ac];throw cMe}});try{var +cMh(cMz){return 0}function +cMi(cMr){function +cMs(cMw){var +cMx=oH(Af),cMy=qk(oH(Ag),cMx);return qb(qe(qd(cF4,qb(cMa,oH(Ah))),cFs),cMy)}return qa(Ak,[0],function(cMt){var +cMu=qr(cFs,cF4),cMv=cMu?qo(cFs,qd(cF4,qb(cMa,oH(Ai)))):cMu;return pG(Aj,cMv)},cMs)}return qa(Ar,[0,function(cMj){function +cMk(cMo){var +cMp=oH(Al),cMq=qk(oH(Am),cMp);return qb(qe(qd(cF8,qb(cMa,oH(An))),cFs),cMq)}return qa(Aq,[0],function(cMl){var +cMm=qr(cFs,cF8),cMn=cMm?qo(cFs,qd(cF8,qb(cMa,oH(Ao)))):cMm;return pG(Ap,cMn)},cMk)},cMi],cMh,cMg)}],cMc,cMb);return cMd}catch(cMe){cMe=caml_wrap_exception(cMe);if(cMe===os)throw[0,oC,Ac];throw cMe}});try{var cGA=function(cL$){throw os},cGB=function(cL_){return 0},cGC=function(cL6){function cL7(cL9){return qb(cFG,oH(Av))}return qa(Ax,[0],function(cL8){return pG(Aw,qr(cFs,cF4))},cL7)},cGD=function(cL0){function cL1(cL5){return qb(cFG,oH(Ay))}return qa(AA,[0],function(cL2){var @@ -5314,14 +5314,14 @@ var cIA=cIv;return pG(Dz,cIA)},cIs)},cIq],cIp,cIo)}],cIk,cIj);return cIl}catch(cIm){cIm=caml_wrap_exception(cIm);if(cIm===os)throw[0,oC,Df];throw cIm}});try{var cG2=function(cIh){return oD(DF)},cG3=function(cIg){return pG(DG,1)},cG4=qa(DU,[0,function(cHW){function cHX(cIf){throw os}function -cHY(cIe){return 0}return qa(DT,[0,function(cHZ){function -cH0(cIb){var -cIc=oH(DH),cId=qk(oH(DI),cIc);return qb(qe(qd(cF8,qb(cGW,oH(DJ))),cFs),cId)}function -cH1(cH_){var -cH$=qr(cFs,cF8),cIa=cH$?qo(cFs,qd(cF8,qb(cGW,oH(DK)))):cH$;return pG(DL,cIa)}return qa(DS,[0,function(cH2){function -cH3(cH7){var -cH8=oH(DM),cH9=qk(oH(DN),cH8);return qb(qe(qd(cF4,qb(cGW,oH(DO))),cFs),cH9)}return qa(DR,[0],function(cH4){var -cH5=qr(cFs,cF4),cH6=cH5?qo(cFs,qd(cF4,qb(cGW,oH(DP)))):cH5;return pG(DQ,cH6)},cH3)}],cH1,cH0)}],cHY,cHX)}],cG3,cG2)}catch(cHV){cHV=caml_wrap_exception(cHV);if(cHV===os)throw[0,oC,DE];throw cHV}var +cHY(cIe){return 0}function +cHZ(cH8){function +cH9(cIb){var +cIc=oH(DH),cId=qk(oH(DI),cIc);return qb(qe(qd(cF4,qb(cGW,oH(DJ))),cFs),cId)}return qa(DM,[0],function(cH_){var +cH$=qr(cFs,cF4),cIa=cH$?qo(cFs,qd(cF4,qb(cGW,oH(DK)))):cH$;return pG(DL,cIa)},cH9)}return qa(DT,[0,function(cH0){function +cH1(cH5){var +cH6=oH(DN),cH7=qk(oH(DO),cH6);return qb(qe(qd(cF8,qb(cGW,oH(DP))),cFs),cH7)}return qa(DS,[0],function(cH2){var +cH3=qr(cFs,cF8),cH4=cH3?qo(cFs,qd(cF8,qb(cGW,oH(DQ)))):cH3;return pG(DR,cH4)},cH1)},cHZ],cHY,cHX)}],cG3,cG2)}catch(cHV){cHV=caml_wrap_exception(cHV);if(cHV===os)throw[0,oC,DE];throw cHV}var cG5=pF(DV,pc,cG4);try{var cG6=function(cHU){return qb(cG0,cGS)},cG7=qa(DY,[0],function(cHT){return pG(DX,1)},cG6)}catch(cHS){cHS=caml_wrap_exception(cHS);if(cHS===os)throw[0,oC,DW];throw cHS}var cG8=pF(DZ,pc,cG7),cG9=pF(Ec,pa,function(cHJ){try{var @@ -5670,66 +5670,64 @@ cw0(cw3){switch(cvV[0]){case 1:return[1,cvV[1]];default:return[2,qe(cvV[1],cvL)]}}return qa(NK,[0],function(cw1){var cw2=0===cvR[0]?1:0;return pG(NJ,cw2)},cw0)},cvY],cvX,cvW)}catch(cwY){cwY=caml_wrap_exception(cwY);if(cwY===os)throw[0,oC,NF];throw cwY}var cv0=pF(NM,HD,cvZ);try{var -cv1=function(cwX){throw os},cv2=function(cwW){return 0},cv3=function(cwD){function -cwE(cwS){switch(cvV[0]){case +cv1=function(cwX){throw os},cv2=function(cwW){return 0},cv3=function(cwN){function +cwO(cwS){switch(cv0[0]){case 0:var -cwT=cvV[1],cwU=oH(NO);return qb(cwT,qk(oH(NP),cwU));case +cwT=cv0[1],cwU=oH(NO);return qb(cwT,qk(oH(NP),cwU));case 1:var -cwV=cvV[1];return qb(cwV,oH(NQ));default:return oD(NR)}}function -cwF(cwP){var +cwV=cv0[1];return qb(cwV,oH(NQ));default:return oD(NR)}}return qa(NT,[0],function(cwP){var cwQ=0===cvR[0]?0:1;if(cwQ)switch(cvK[0]){case 0:var cwR=0;break;case 1:var -cwR=1;break;default:var -cwR=0}else +cwR=0;break;default:var +cwR=1}else var -cwR=cwQ;return pG(NS,cwR)}return qa(NZ,[0,function(cwG){function -cwH(cwL){switch(cv0[0]){case +cwR=cwQ;return pG(NS,cwR)},cwO)},cv4=function(cwE){function +cwF(cwJ){switch(cvV[0]){case 0:var -cwM=cv0[1],cwN=oH(NT);return qb(cwM,qk(oH(NU),cwN));case +cwK=cvV[1],cwL=oH(NU);return qb(cwK,qk(oH(NV),cwL));case 1:var -cwO=cv0[1];return qb(cwO,oH(NV));default:return oD(NW)}}return qa(NY,[0],function(cwI){var -cwJ=0===cvR[0]?0:1;if(cwJ)switch(cvK[0]){case +cwM=cvV[1];return qb(cwM,oH(NW));default:return oD(NX)}}return qa(NZ,[0],function(cwG){var +cwH=0===cvR[0]?0:1;if(cwH)switch(cvK[0]){case 0:var -cwK=0;break;case +cwI=0;break;case 1:var -cwK=0;break;default:var -cwK=1}else +cwI=1;break;default:var +cwI=0}else var -cwK=cwJ;return pG(NX,cwK)},cwH)}],cwF,cwE)},cv4=qa(N_,[0,function(cwm){function -cwn(cwA){switch(cvV[0]){case +cwI=cwH;return pG(NY,cwI)},cwF)},cv5=function(cww){function +cwx(cwB){switch(cv0[0]){case 0:return oD(N0);case 1:return oD(N1);default:var -cwB=cvV[1],cwC=oH(N2);return qb(qd(cwB,cvM),cwC)}}function -cwo(cwx){var -cwy=0===cvR[0]?1:0;if(cwy)switch(cvK[0]){case +cwC=cv0[1],cwD=oH(N2);return qb(qd(cwC,cvM),cwD)}}return qa(N4,[0],function(cwy){var +cwz=0===cvR[0]?1:0;if(cwz)switch(cvK[0]){case 0:var -cwz=0;break;case +cwA=1;break;case 1:var -cwz=1;break;default:var -cwz=0}else +cwA=0;break;default:var +cwA=0}else var -cwz=cwy;return pG(N3,cwz)}return qa(N9,[0,function(cwp){function -cwq(cwu){switch(cv0[0]){case -0:return oD(N4);case -1:return oD(N5);default:var -cwv=cv0[1],cww=oH(N6);return qb(qd(cwv,cvM),cww)}}return qa(N8,[0],function(cwr){var -cws=0===cvR[0]?1:0;if(cws)switch(cvK[0]){case +cwA=cwz;return pG(N3,cwA)},cwx)},cv6=qa(N_,[0,function(cwo){function +cwp(cwt){switch(cvV[0]){case +0:return oD(N5);case +1:return oD(N6);default:var +cwu=cvV[1],cwv=oH(N7);return qb(qd(cwu,cvM),cwv)}}return qa(N9,[0],function(cwq){var +cwr=0===cvR[0]?1:0;if(cwr)switch(cvK[0]){case 0:var -cwt=1;break;case +cws=0;break;case 1:var -cwt=0;break;default:var -cwt=0}else +cws=1;break;default:var +cws=0}else var -cwt=cws;return pG(N7,cwt)},cwq)}],cwo,cwn)},cv3],cv2,cv1)}catch(cwl){cwl=caml_wrap_exception(cwl);if(cwl===os)throw[0,oC,NN];throw cwl}var -cv5=pF(N$,pc,cv4);try{var -cv6=function(cwk){throw os},cv7=function(cwj){return 0},cv8=qa(Oh,[0,function(cv_){function -cv$(cwi){return qp(cvO,cv5)?cvO:oD(Ob)}function -cwa(cwg){var -cwh=0===cvR[0]?1:0;return pG(Oc,cwh)}return qa(Og,[0,function(cwb){function -cwc(cwf){return qp(cvO,cv5)?cvO:oD(Od)}return qa(Of,[0],function(cwd){var -cwe=0===cvR[0]?0:1;return pG(Oe,cwe)},cwc)}],cwa,cv$)}],cv7,cv6)}catch(cv9){cv9=caml_wrap_exception(cv9);if(cv9===os)throw[0,oC,Oa];throw cv9}return[0,pF(Oi,pc,cv8)]},Oj=function(cu$){var +cws=cwr;return pG(N8,cws)},cwp)},cv5,cv4,cv3],cv2,cv1)}catch(cwn){cwn=caml_wrap_exception(cwn);if(cwn===os)throw[0,oC,NN];throw cwn}var +cv7=pF(N$,pc,cv6);try{var +cv8=function(cwm){throw os},cv9=function(cwl){return 0},cv_=qa(Oh,[0,function(cwa){function +cwb(cwk){return qp(cvO,cv7)?cvO:oD(Ob)}function +cwc(cwi){var +cwj=0===cvR[0]?1:0;return pG(Oc,cwj)}return qa(Og,[0,function(cwd){function +cwe(cwh){return qp(cvO,cv7)?cvO:oD(Od)}return qa(Of,[0],function(cwf){var +cwg=0===cvR[0]?0:1;return pG(Oe,cwg)},cwe)}],cwc,cwb)}],cv9,cv8)}catch(cv$){cv$=caml_wrap_exception(cv$);if(cv$===os)throw[0,oC,Oa];throw cv$}return[0,pF(Oi,pc,cv_)]},Oj=function(cu$){var cva=cu$[1];try{var cvb=function(cvH){throw os},cvc=function(cvG){return 0},cvd=function(cvA){function cvB(cvF){return oD(Ol)}return qa(On,[0],function(cvC){var diff --git a/french_law/ocaml/law_source/allocations_familiales.ml b/french_law/ocaml/law_source/allocations_familiales.ml index 9e8272cc..65ee668e 100644 --- a/french_law/ocaml/law_source/allocations_familiales.ml +++ b/french_law/ocaml/law_source/allocations_familiales.ml @@ -940,8 +940,8 @@ let prestations_familiales (prestations_familiales_in: PrestationsFamilialesIn.t ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; - start_line=216; start_column=18; - end_line=216; end_column=41; + start_line=217; start_column=18; + end_line=217; end_column=41; law_headings=["Article R755-0-2"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -1566,7 +1566,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=291; start_column=14; end_line=291; end_column=35; + start_line=293; start_column=14; end_line=293; end_column=35; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -1982,7 +1982,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: _) -> false) (fun (_: _) -> raise EmptyError))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=311; start_column=14; end_line=311; end_column=31; + start_line=313; start_column=14; end_line=313; end_column=31; law_headings=["Article D521-3"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -2116,7 +2116,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: _) -> false) (fun (_: _) -> raise EmptyError))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=301; start_column=14; end_line=301; end_column=30; + start_line=303; start_column=14; end_line=303; end_column=30; law_headings=["Article D521-3"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -2344,8 +2344,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=409; start_column=5; - end_line=409; end_column=69; + start_line=431; start_column=5; + end_line=431; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2372,8 +2372,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=416; start_column=5; - end_line=416; end_column=69; + start_line=439; start_column=5; + end_line=439; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2400,8 +2400,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=423; start_column=5; - end_line=423; end_column=69; + start_line=447; start_column=5; + end_line=447; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2428,8 +2428,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=430; start_column=5; - end_line=430; end_column=69; + start_line=455; start_column=5; + end_line=455; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2456,8 +2456,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=437; start_column=5; - end_line=437; end_column=69; + start_line=463; start_column=5; + end_line=463; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2484,8 +2484,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=444; start_column=5; - end_line=444; end_column=69; + start_line=471; start_column=5; + end_line=471; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2512,8 +2512,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=451; start_column=5; - end_line=451; end_column=69; + start_line=479; start_column=5; + end_line=479; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2540,8 +2540,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=458; start_column=5; - end_line=458; end_column=69; + start_line=487; start_column=5; + end_line=487; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2568,8 +2568,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=465; start_column=5; - end_line=465; end_column=69; + start_line=495; start_column=5; + end_line=495; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2596,8 +2596,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=472; start_column=5; - end_line=472; end_column=69; + start_line=503; start_column=5; + end_line=503; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2738,8 +2738,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=250; start_column=5; - end_line=251; end_column=53; + start_line=251; start_column=5; + end_line=252; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2771,8 +2771,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=258; start_column=5; - end_line=259; end_column=53; + start_line=260; start_column=5; + end_line=261; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2804,8 +2804,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=266; start_column=5; - end_line=267; end_column=53; + start_line=269; start_column=5; + end_line=270; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2837,8 +2837,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=274; start_column=5; - end_line=275; end_column=53; + start_line=278; start_column=5; + end_line=279; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2870,8 +2870,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=282; start_column=5; - end_line=283; end_column=53; + start_line=287; start_column=5; + end_line=288; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2903,8 +2903,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=290; start_column=5; - end_line=291; end_column=53; + start_line=296; start_column=5; + end_line=297; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2936,8 +2936,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=298; start_column=5; - end_line=299; end_column=53; + start_line=305; start_column=5; + end_line=306; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -2969,8 +2969,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=306; start_column=5; - end_line=307; end_column=53; + start_line=314; start_column=5; + end_line=315; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3002,8 +3002,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=314; start_column=5; - end_line=315; end_column=53; + start_line=323; start_column=5; + end_line=324; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3035,8 +3035,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=322; start_column=5; - end_line=323; end_column=53; + start_line=332; start_column=5; + end_line=333; end_column=53; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3068,8 +3068,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=330; start_column=5; - end_line=330; end_column=49; + start_line=341; start_column=5; + end_line=341; end_column=49; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3110,8 +3110,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=362; start_column=5; - end_line=363; end_column=71; + start_line=364; start_column=5; + end_line=365; end_column=71; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -3126,7 +3126,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t bmaf_dot_montant_ *$ (decimal_of_string "0.0588")))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=359; start_column=29; end_line=359; end_column=64; + start_line=361; start_column=29; end_line=361; end_column=64; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -3408,8 +3408,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=173; start_column=5; - end_line=174; end_column=68; + start_line=174; start_column=5; + end_line=175; end_column=68; law_headings=["Article D521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -3431,8 +3431,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: _) -> false) (fun (_: _) -> raise EmptyError))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=179; start_column=14; - end_line=179; end_column=34; + start_line=181; start_column=14; + end_line=181; end_column=34; law_headings=["Article D521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -3471,8 +3471,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=218; start_column=5; - end_line=218; end_column=43; + start_line=220; start_column=5; + end_line=220; end_column=43; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -3492,8 +3492,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=232; start_column=5; - end_line=233; end_column=46; + start_line=234; start_column=5; + end_line=235; end_column=46; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -3514,8 +3514,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=246; start_column=5; - end_line=246; end_column=43; + start_line=248; start_column=5; + end_line=248; end_column=43; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -3673,8 +3673,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=338; start_column=5; - end_line=338; end_column=69; + start_line=350; start_column=5; + end_line=350; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3703,8 +3703,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=345; start_column=5; - end_line=345; end_column=69; + start_line=358; start_column=5; + end_line=358; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3733,8 +3733,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=352; start_column=5; - end_line=352; end_column=69; + start_line=366; start_column=5; + end_line=366; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3763,8 +3763,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=359; start_column=5; - end_line=359; end_column=69; + start_line=374; start_column=5; + end_line=374; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3793,8 +3793,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=366; start_column=5; - end_line=366; end_column=69; + start_line=382; start_column=5; + end_line=382; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3823,8 +3823,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=373; start_column=5; - end_line=373; end_column=69; + start_line=390; start_column=5; + end_line=390; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3853,8 +3853,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=380; start_column=5; - end_line=380; end_column=69; + start_line=398; start_column=5; + end_line=398; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3883,8 +3883,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=387; start_column=5; - end_line=387; end_column=69; + start_line=406; start_column=5; + end_line=406; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3913,8 +3913,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=394; start_column=5; - end_line=394; end_column=69; + start_line=414; start_column=5; + end_line=414; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -3943,8 +3943,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/decrets_divers.catala_fr"; - start_line=401; start_column=5; - end_line=401; end_column=69; + start_line=422; start_column=5; + end_line=422; end_column=69; law_headings=["Annexe"; "Décret n°2002-423 du 29 mars 2002 relatif aux prestations familiales à Mayotte"; "Dispositions spéciales relatives à Mayotte"]} @@ -4268,7 +4268,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=197; start_column=14; end_line=197; end_column=39; + start_line=199; start_column=14; end_line=199; end_column=39; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4328,8 +4328,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=353; start_column=5; - end_line=354; end_column=69; + start_line=355; start_column=5; + end_line=356; end_column=69; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -4410,8 +4410,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=376; start_column=5; - end_line=380; end_column=57; + start_line=378; start_column=5; + end_line=382; end_column=57; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -4458,8 +4458,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=386; start_column=5; - end_line=389; end_column=58; + start_line=388; start_column=5; + end_line=391; end_column=58; law_headings=["Article D755-5"; "Chapitre 5 : Prestations familiales et prestations assimilées"; "Titre 5 : Départements d'outre-mer"; @@ -4555,8 +4555,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=265; start_column=5; - end_line=267; end_column=42; + start_line=267; start_column=5; + end_line=269; end_column=42; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4585,8 +4585,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=275; start_column=5; - end_line=277; end_column=41; + start_line=277; start_column=5; + end_line=279; end_column=41; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4608,7 +4608,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t (fun (_: _) -> false) (fun (_: _) -> raise EmptyError))|]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=283; start_column=14; end_line=283; end_column=55; + start_line=285; start_column=14; end_line=285; end_column=55; law_headings=["Article D521-2"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4661,8 +4661,8 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t [||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_R.catala_fr"; - start_line=187; start_column=5; - end_line=187; end_column=43; + start_line=188; start_column=5; + end_line=188; end_column=43; law_headings=["Article R521-4"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4773,7 +4773,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=187; start_column=14; end_line=187; end_column=61; + start_line=189; start_column=14; end_line=189; end_column=61; law_headings=["Article D521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; @@ -4798,7 +4798,7 @@ let allocations_familiales (allocations_familiales_in: AllocationsFamilialesIn.t "Prologue"]} ([||]) (fun (_: _) -> (log_decision_taken {filename = "examples/allocations_familiales/securite_sociale_D.catala_fr"; - start_line=181; start_column=14; end_line=181; end_column=62; + start_line=183; start_column=14; end_line=183; end_column=62; law_headings=["Article D521-1"; "Chapitre 1er : Allocations familiales"; "Titre 2 : Prestations générales d'entretien"; diff --git a/french_law/python/src/aides_logement.py b/french_law/python/src/aides_logement.py index c5c8faa3..0dc49428 100644 --- a/french_law/python/src/aides_logement.py +++ b/french_law/python/src/aides_logement.py @@ -4,29 +4,6 @@ from catala.runtime import * from typing import Any, List, Callable, Tuple from enum import Enum -class TypeBailleur_Code(Enum): - BailleurSocial = 0 - BailleurPrive = 1 - -class TypeBailleur: - def __init__(self, code: TypeBailleur_Code, value: Any) -> None: - self.code = code - self.value = value - - - def __eq__(self, other: object) -> bool: - if isinstance(other, TypeBailleur): - return self.code == other.code and self.value == other.value - else: - return False - - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __str__(self) -> str: - return "{}({})".format(self.code, self.value) - class TypePret_Code(Enum): D331_32 = 0 D331_63_64 = 1 @@ -315,29 +292,6 @@ class DateDeNaissanceOuMoisDeGrossesse: def __str__(self) -> str: return "{}({})".format(self.code, self.value) -class Nationalite_Code(Enum): - Francaise = 0 - Etrangere = 1 - -class Nationalite: - def __init__(self, code: Nationalite_Code, value: Any) -> None: - self.code = code - self.value = value - - - def __eq__(self, other: object) -> bool: - if isinstance(other, Nationalite): - return self.code == other.code and self.value == other.value - else: - return False - - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __str__(self) -> str: - return "{}({})".format(self.code, self.value) - class ZoneDHabitation_Code(Enum): Zone1 = 0 Zone2 = 1 @@ -761,6 +715,41 @@ class ElementPrestationsFamiliales: def __str__(self) -> str: return "{}({})".format(self.code, self.value) +class ConventionBailleurSocial: + def __init__(self, conventionne_livre_III_titre_V_chap_III: bool, reduction_loyer_solidarite_percue: Money) -> None: + self.conventionne_livre_III_titre_V_chap_III = conventionne_livre_III_titre_V_chap_III + self.reduction_loyer_solidarite_percue = reduction_loyer_solidarite_percue + + def __eq__(self, other: object) -> bool: + if isinstance(other, ConventionBailleurSocial): + return (self.conventionne_livre_III_titre_V_chap_III == other.conventionne_livre_III_titre_V_chap_III and + self.reduction_loyer_solidarite_percue == other.reduction_loyer_solidarite_percue) + else: + return False + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "ConventionBailleurSocial(conventionne_livre_III_titre_V_chap_III={},reduction_loyer_solidarite_percue={})".format(self.conventionne_livre_III_titre_V_chap_III, + self.reduction_loyer_solidarite_percue) + +class ConventionANHA: + def __init__(self, conventionne_livre_III_titre_II_chap_I_sec_3: bool) -> None: + self.conventionne_livre_III_titre_II_chap_I_sec_3 = conventionne_livre_III_titre_II_chap_I_sec_3 + + def __eq__(self, other: object) -> bool: + if isinstance(other, ConventionANHA): + return (self.conventionne_livre_III_titre_II_chap_I_sec_3 == other.conventionne_livre_III_titre_II_chap_I_sec_3) + else: + return False + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "ConventionANHA(conventionne_livre_III_titre_II_chap_I_sec_3={})".format(self.conventionne_livre_III_titre_II_chap_I_sec_3) + class PersonneSousLocation: def __init__(self, date_naissance_personne_sous_location: Date, conforme_article_l442_1: bool) -> None: self.date_naissance_personne_sous_location = date_naissance_personne_sous_location @@ -799,6 +788,22 @@ class Patrimoine: return "Patrimoine(produisant_revenu_periode_r822_3_3_r822_4={},ne_produisant_pas_revenu_periode_r822_3_3_r822_4={})".format(self.produisant_revenu_periode_r822_3_3_r822_4, self.ne_produisant_pas_revenu_periode_r822_3_3_r822_4) +class ConditionsEtrangers: + def __init__(self, satisfait_conditions_l512_2_code_securite_sociale: bool) -> None: + self.satisfait_conditions_l512_2_code_securite_sociale = satisfait_conditions_l512_2_code_securite_sociale + + def __eq__(self, other: object) -> bool: + if isinstance(other, ConditionsEtrangers): + return (self.satisfait_conditions_l512_2_code_securite_sociale == other.satisfait_conditions_l512_2_code_securite_sociale) + else: + return False + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "ConditionsEtrangers(satisfait_conditions_l512_2_code_securite_sociale={})".format(self.satisfait_conditions_l512_2_code_securite_sociale) + class PersonneVivantHabituellementAuFoyer: def __init__(self, duree_residence_durant_periode_r_822_3_1_superieure_a_6_mois: bool, ressources: Money) -> None: self.duree_residence_durant_periode_r_822_3_1_superieure_a_6_mois = duree_residence_durant_periode_r_822_3_1_superieure_a_6_mois @@ -837,34 +842,6 @@ class InfosChangementLogementD8424: return "InfosChangementLogementD8424(ancien_loyer_principal={},ancienne_allocation_logement={})".format(self.ancien_loyer_principal, self.ancienne_allocation_logement) -class Bailleur: - def __init__(self, type_bailleur: TypeBailleur, respecte_convention_titre_V: bool, respecte_convention_titre_II: bool, construit_ameliore_conditions_l831_1_4: bool, acquisition_aides_etat_pret_titre_II_ou_livre_III: bool) -> None: - self.type_bailleur = type_bailleur - self.respecte_convention_titre_V = respecte_convention_titre_V - self.respecte_convention_titre_II = respecte_convention_titre_II - self.construit_ameliore_conditions_l831_1_4 = construit_ameliore_conditions_l831_1_4 - self.acquisition_aides_etat_pret_titre_II_ou_livre_III = acquisition_aides_etat_pret_titre_II_ou_livre_III - - def __eq__(self, other: object) -> bool: - if isinstance(other, Bailleur): - return (self.type_bailleur == other.type_bailleur and - self.respecte_convention_titre_V == other.respecte_convention_titre_V and - self.respecte_convention_titre_II == other.respecte_convention_titre_II and - self.construit_ameliore_conditions_l831_1_4 == other.construit_ameliore_conditions_l831_1_4 and - self.acquisition_aides_etat_pret_titre_II_ou_livre_III == other.acquisition_aides_etat_pret_titre_II_ou_livre_III) - else: - return False - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __str__(self) -> str: - return "Bailleur(type_bailleur={},respecte_convention_titre_V={},respecte_convention_titre_II={},construit_ameliore_conditions_l831_1_4={},acquisition_aides_etat_pret_titre_II_ou_livre_III={})".format(self.type_bailleur, - self.respecte_convention_titre_V, - self.respecte_convention_titre_II, - self.construit_ameliore_conditions_l831_1_4, - self.acquisition_aides_etat_pret_titre_II_ou_livre_III) - class Pret: def __init__(self, type_pret: TypePret, date_signature: Date, titulaire_pret: TitulairePret) -> None: self.type_pret = type_pret @@ -1005,6 +982,39 @@ class DateNaissanceTroisiemeOuDernierPlusEnfant: def __str__(self) -> str: return "{}({})".format(self.code, self.value) +class LogementFoyer: + def __init__(self, type: TypeLogementFoyer, remplit_conditions_r832_21: bool, conventionne_livre_III_titre_V_chap_III: bool, date_conventionnement: Date, construit_application_loi_1957_12_III: bool, redevance: Money, categorie_equivalence_loyer_d842_16: CategorieEquivalenceLoyerAllocationLogementFoyer) -> None: + self.type = type + self.remplit_conditions_r832_21 = remplit_conditions_r832_21 + self.conventionne_livre_III_titre_V_chap_III = conventionne_livre_III_titre_V_chap_III + self.date_conventionnement = date_conventionnement + self.construit_application_loi_1957_12_III = construit_application_loi_1957_12_III + self.redevance = redevance + self.categorie_equivalence_loyer_d842_16 = categorie_equivalence_loyer_d842_16 + + def __eq__(self, other: object) -> bool: + if isinstance(other, LogementFoyer): + return (self.type == other.type and + self.remplit_conditions_r832_21 == other.remplit_conditions_r832_21 and + self.conventionne_livre_III_titre_V_chap_III == other.conventionne_livre_III_titre_V_chap_III and + self.date_conventionnement == other.date_conventionnement and + self.construit_application_loi_1957_12_III == other.construit_application_loi_1957_12_III and + self.redevance == other.redevance and + self.categorie_equivalence_loyer_d842_16 == other.categorie_equivalence_loyer_d842_16) + else: + return False + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "LogementFoyer(type={},remplit_conditions_r832_21={},conventionne_livre_III_titre_V_chap_III={},date_conventionnement={},construit_application_loi_1957_12_III={},redevance={},categorie_equivalence_loyer_d842_16={})".format(self.type, + self.remplit_conditions_r832_21, + self.conventionne_livre_III_titre_V_chap_III, + self.date_conventionnement, + self.construit_application_loi_1957_12_III, self.redevance, + self.categorie_equivalence_loyer_d842_16) + class EnfantPrestationsFamiliales: def __init__(self, identifiant: Integer, obligation_scolaire: SituationObligationScolaire, remuneration_mensuelle: Money, date_de_naissance: Date, prise_en_charge: PriseEnChargeEnfant, a_deja_ouvert_droit_aux_allocations_familiales: bool, beneficie_titre_personnel_aide_personnelle_logement: bool) -> None: self.identifiant = identifiant @@ -1038,14 +1048,13 @@ class EnfantPrestationsFamiliales: self.beneficie_titre_personnel_aide_personnelle_logement) class EnfantACharge: - def __init__(self, identifiant: Integer, beneficie_titre_personnel_aide_personnelle_logement: bool, a_deja_ouvert_droit_aux_allocations_familiales: bool, date_de_naissance: Date, remuneration_mensuelle: Money, obligation_scolaire: SituationObligationScolaire, prise_en_charge: PriseEnCharge, situation_garde_alternee: SituationGardeAlternee) -> None: + def __init__(self, identifiant: Integer, beneficie_titre_personnel_aide_personnelle_logement: bool, a_deja_ouvert_droit_aux_allocations_familiales: bool, date_de_naissance: Date, remuneration_mensuelle: Money, obligation_scolaire: SituationObligationScolaire, situation_garde_alternee: SituationGardeAlternee) -> None: self.identifiant = identifiant self.beneficie_titre_personnel_aide_personnelle_logement = beneficie_titre_personnel_aide_personnelle_logement self.a_deja_ouvert_droit_aux_allocations_familiales = a_deja_ouvert_droit_aux_allocations_familiales self.date_de_naissance = date_de_naissance self.remuneration_mensuelle = remuneration_mensuelle self.obligation_scolaire = obligation_scolaire - self.prise_en_charge = prise_en_charge self.situation_garde_alternee = situation_garde_alternee def __eq__(self, other: object) -> bool: @@ -1056,7 +1065,6 @@ class EnfantACharge: self.date_de_naissance == other.date_de_naissance and self.remuneration_mensuelle == other.remuneration_mensuelle and self.obligation_scolaire == other.obligation_scolaire and - self.prise_en_charge == other.prise_en_charge and self.situation_garde_alternee == other.situation_garde_alternee) else: return False @@ -1065,12 +1073,35 @@ class EnfantACharge: return not (self == other) def __str__(self) -> str: - return "EnfantACharge(identifiant={},beneficie_titre_personnel_aide_personnelle_logement={},a_deja_ouvert_droit_aux_allocations_familiales={},date_de_naissance={},remuneration_mensuelle={},obligation_scolaire={},prise_en_charge={},situation_garde_alternee={})".format(self.identifiant, + return "EnfantACharge(identifiant={},beneficie_titre_personnel_aide_personnelle_logement={},a_deja_ouvert_droit_aux_allocations_familiales={},date_de_naissance={},remuneration_mensuelle={},obligation_scolaire={},situation_garde_alternee={})".format(self.identifiant, self.beneficie_titre_personnel_aide_personnelle_logement, self.a_deja_ouvert_droit_aux_allocations_familiales, self.date_de_naissance, self.remuneration_mensuelle, - self.obligation_scolaire, self.prise_en_charge, - self.situation_garde_alternee) + self.obligation_scolaire, self.situation_garde_alternee) + +class TypeBailleur_Code(Enum): + BailleurSocial = 0 + BailleurPriveAvecConventionnementSocial = 1 + BailleurPrive = 2 + +class TypeBailleur: + def __init__(self, code: TypeBailleur_Code, value: Any) -> None: + self.code = code + self.value = value + + + def __eq__(self, other: object) -> bool: + if isinstance(other, TypeBailleur): + return self.code == other.code and self.value == other.value + else: + return False + + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "{}({})".format(self.code, self.value) class LoueOuSousLoueADesTiers_Code(Enum): Non = 0 @@ -1095,31 +1126,28 @@ class LoueOuSousLoueADesTiers: def __str__(self) -> str: return "{}({})".format(self.code, self.value) -class Demandeur: - def __init__(self, satisfait_conditions_l512_2_code_securite_sociale: bool, date_naissance: Date, nationalite: Nationalite, patrimoine: Patrimoine, personne_hebergee_centre_soin_l_L162_22_3_securite_sociale: bool) -> None: - self.satisfait_conditions_l512_2_code_securite_sociale = satisfait_conditions_l512_2_code_securite_sociale - self.date_naissance = date_naissance - self.nationalite = nationalite - self.patrimoine = patrimoine - self.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale = personne_hebergee_centre_soin_l_L162_22_3_securite_sociale +class Nationalite_Code(Enum): + Francaise = 0 + Etrangere = 1 + +class Nationalite: + def __init__(self, code: Nationalite_Code, value: Any) -> None: + self.code = code + self.value = value + def __eq__(self, other: object) -> bool: - if isinstance(other, Demandeur): - return (self.satisfait_conditions_l512_2_code_securite_sociale == other.satisfait_conditions_l512_2_code_securite_sociale and - self.date_naissance == other.date_naissance and - self.nationalite == other.nationalite and - self.patrimoine == other.patrimoine and - self.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale == other.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale) + if isinstance(other, Nationalite): + return self.code == other.code and self.value == other.value else: return False + def __ne__(self, other: object) -> bool: return not (self == other) def __str__(self) -> str: - return "Demandeur(satisfait_conditions_l512_2_code_securite_sociale={},date_naissance={},nationalite={},patrimoine={},personne_hebergee_centre_soin_l_L162_22_3_securite_sociale={})".format(self.satisfait_conditions_l512_2_code_securite_sociale, - self.date_naissance, self.nationalite, self.patrimoine, - self.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale) + return "{}({})".format(self.code, self.value) class ChangementLogementD8424_Code(Enum): Changement = 0 @@ -1144,40 +1172,8 @@ class ChangementLogementD8424: def __str__(self) -> str: return "{}({})".format(self.code, self.value) -class LogementFoyer: - def __init__(self, type: TypeLogementFoyer, date_conventionnement: Date, remplit_conditions_r832_21: bool, bailleur: Bailleur, construit_application_loi_1957_12_III: bool, redevance: Money, categorie_equivalence_loyer_d842_16: CategorieEquivalenceLoyerAllocationLogementFoyer) -> None: - self.type = type - self.date_conventionnement = date_conventionnement - self.remplit_conditions_r832_21 = remplit_conditions_r832_21 - self.bailleur = bailleur - self.construit_application_loi_1957_12_III = construit_application_loi_1957_12_III - self.redevance = redevance - self.categorie_equivalence_loyer_d842_16 = categorie_equivalence_loyer_d842_16 - - def __eq__(self, other: object) -> bool: - if isinstance(other, LogementFoyer): - return (self.type == other.type and - self.date_conventionnement == other.date_conventionnement and - self.remplit_conditions_r832_21 == other.remplit_conditions_r832_21 and - self.bailleur == other.bailleur and - self.construit_application_loi_1957_12_III == other.construit_application_loi_1957_12_III and - self.redevance == other.redevance and - self.categorie_equivalence_loyer_d842_16 == other.categorie_equivalence_loyer_d842_16) - else: - return False - - def __ne__(self, other: object) -> bool: - return not (self == other) - - def __str__(self) -> str: - return "LogementFoyer(type={},date_conventionnement={},remplit_conditions_r832_21={},bailleur={},construit_application_loi_1957_12_III={},redevance={},categorie_equivalence_loyer_d842_16={})".format(self.type, - self.date_conventionnement, self.remplit_conditions_r832_21, - self.bailleur, self.construit_application_loi_1957_12_III, - self.redevance, self.categorie_equivalence_loyer_d842_16) - class Proprietaire: - def __init__(self, logement_est_ancien_l831_2: bool, logement_situe_commune_desequilibre_l831_2: bool, mensualite_principale: Money, charges_mensuelles_pret: Money, date_entree_logement: Date, type_travaux_logement_d832_15: TypeTravauxLogementD83215, type_travaux_logement_r842_5: TypeTravauxLogementR8425, local_habite_premiere_fois_beneficiaire: bool, copropriete: bool, situation_r822_11_13_17: bool, anciennete_logement: NeufOuAncien, pret: Pret) -> None: - self.logement_est_ancien_l831_2 = logement_est_ancien_l831_2 + def __init__(self, logement_situe_commune_desequilibre_l831_2: bool, mensualite_principale: Money, charges_mensuelles_pret: Money, date_entree_logement: Date, type_travaux_logement_d832_15: TypeTravauxLogementD83215, type_travaux_logement_r842_5: TypeTravauxLogementR8425, local_habite_premiere_fois_beneficiaire: bool, copropriete: bool, situation_r822_11_13_17: bool, anciennete_logement: NeufOuAncien, pret: Pret) -> None: self.logement_situe_commune_desequilibre_l831_2 = logement_situe_commune_desequilibre_l831_2 self.mensualite_principale = mensualite_principale self.charges_mensuelles_pret = charges_mensuelles_pret @@ -1192,8 +1188,7 @@ class Proprietaire: def __eq__(self, other: object) -> bool: if isinstance(other, Proprietaire): - return (self.logement_est_ancien_l831_2 == other.logement_est_ancien_l831_2 and - self.logement_situe_commune_desequilibre_l831_2 == other.logement_situe_commune_desequilibre_l831_2 and + return (self.logement_situe_commune_desequilibre_l831_2 == other.logement_situe_commune_desequilibre_l831_2 and self.mensualite_principale == other.mensualite_principale and self.charges_mensuelles_pret == other.charges_mensuelles_pret and self.date_entree_logement == other.date_entree_logement and @@ -1211,8 +1206,7 @@ class Proprietaire: return not (self == other) def __str__(self) -> str: - return "Proprietaire(logement_est_ancien_l831_2={},logement_situe_commune_desequilibre_l831_2={},mensualite_principale={},charges_mensuelles_pret={},date_entree_logement={},type_travaux_logement_d832_15={},type_travaux_logement_r842_5={},local_habite_premiere_fois_beneficiaire={},copropriete={},situation_r822_11_13_17={},anciennete_logement={},pret={})".format(self.logement_est_ancien_l831_2, - self.logement_situe_commune_desequilibre_l831_2, + return "Proprietaire(logement_situe_commune_desequilibre_l831_2={},mensualite_principale={},charges_mensuelles_pret={},date_entree_logement={},type_travaux_logement_d832_15={},type_travaux_logement_r842_5={},local_habite_premiere_fois_beneficiaire={},copropriete={},situation_r822_11_13_17={},anciennete_logement={},pret={})".format(self.logement_situe_commune_desequilibre_l831_2, self.mensualite_principale, self.charges_mensuelles_pret, self.date_entree_logement, self.type_travaux_logement_d832_15, self.type_travaux_logement_r842_5, @@ -1220,6 +1214,25 @@ class Proprietaire: self.situation_r822_11_13_17, self.anciennete_logement, self.pret) +class InformationsPrimeDeDemenagement: + def __init__(self, nombre_enfants_a_naitre_apres_troisieme_mois_grossesse: Integer, date_naissance_troisieme_enfant_ou_dernier_si_plus: DateNaissanceTroisiemeOuDernierPlusEnfant) -> None: + self.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse = nombre_enfants_a_naitre_apres_troisieme_mois_grossesse + self.date_naissance_troisieme_enfant_ou_dernier_si_plus = date_naissance_troisieme_enfant_ou_dernier_si_plus + + def __eq__(self, other: object) -> bool: + if isinstance(other, InformationsPrimeDeDemenagement): + return (self.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse == other.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse and + self.date_naissance_troisieme_enfant_ou_dernier_si_plus == other.date_naissance_troisieme_enfant_ou_dernier_si_plus) + else: + return False + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "InformationsPrimeDeDemenagement(nombre_enfants_a_naitre_apres_troisieme_mois_grossesse={},date_naissance_troisieme_enfant_ou_dernier_si_plus={})".format(self.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse, + self.date_naissance_troisieme_enfant_ou_dernier_si_plus) + class PersonneACharge_Code(Enum): EnfantACharge = 0 AutrePersonneACharge = 1 @@ -1243,15 +1256,38 @@ class PersonneACharge: def __str__(self) -> str: return "{}({})".format(self.code, self.value) +class Demandeur: + def __init__(self, date_naissance: Date, nationalite: Nationalite, patrimoine: Patrimoine, personne_hebergee_centre_soin_l_L162_22_3_securite_sociale: bool) -> None: + self.date_naissance = date_naissance + self.nationalite = nationalite + self.patrimoine = patrimoine + self.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale = personne_hebergee_centre_soin_l_L162_22_3_securite_sociale + + def __eq__(self, other: object) -> bool: + if isinstance(other, Demandeur): + return (self.date_naissance == other.date_naissance and + self.nationalite == other.nationalite and + self.patrimoine == other.patrimoine and + self.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale == other.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale) + else: + return False + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __str__(self) -> str: + return "Demandeur(date_naissance={},nationalite={},patrimoine={},personne_hebergee_centre_soin_l_L162_22_3_securite_sociale={})".format(self.date_naissance, + self.nationalite, self.patrimoine, + self.personne_hebergee_centre_soin_l_L162_22_3_securite_sociale) + class Location: - def __init__(self, bailleur: Bailleur, loyer_principal: Money, beneficiaire_aide_adulte_ou_enfant_handicapes: bool, logement_est_chambre: bool, colocation: bool, agees_ou_handicap_adultes_hebergees_onereux_particuliers: bool, reduction_loyer_solidarite: Money, logement_meuble_d842_2: bool, changement_logement_d842_4: ChangementLogementD8424) -> None: + def __init__(self, bailleur: TypeBailleur, loyer_principal: Money, beneficiaire_aide_adulte_ou_enfant_handicapes: bool, logement_est_chambre: bool, colocation: bool, agees_ou_handicap_adultes_hebergees_onereux_particuliers: bool, logement_meuble_d842_2: bool, changement_logement_d842_4: ChangementLogementD8424) -> None: self.bailleur = bailleur self.loyer_principal = loyer_principal self.beneficiaire_aide_adulte_ou_enfant_handicapes = beneficiaire_aide_adulte_ou_enfant_handicapes self.logement_est_chambre = logement_est_chambre self.colocation = colocation self.agees_ou_handicap_adultes_hebergees_onereux_particuliers = agees_ou_handicap_adultes_hebergees_onereux_particuliers - self.reduction_loyer_solidarite = reduction_loyer_solidarite self.logement_meuble_d842_2 = logement_meuble_d842_2 self.changement_logement_d842_4 = changement_logement_d842_4 @@ -1263,7 +1299,6 @@ class Location: self.logement_est_chambre == other.logement_est_chambre and self.colocation == other.colocation and self.agees_ou_handicap_adultes_hebergees_onereux_particuliers == other.agees_ou_handicap_adultes_hebergees_onereux_particuliers and - self.reduction_loyer_solidarite == other.reduction_loyer_solidarite and self.logement_meuble_d842_2 == other.logement_meuble_d842_2 and self.changement_logement_d842_4 == other.changement_logement_d842_4) else: @@ -1273,13 +1308,12 @@ class Location: return not (self == other) def __str__(self) -> str: - return "Location(bailleur={},loyer_principal={},beneficiaire_aide_adulte_ou_enfant_handicapes={},logement_est_chambre={},colocation={},agees_ou_handicap_adultes_hebergees_onereux_particuliers={},reduction_loyer_solidarite={},logement_meuble_d842_2={},changement_logement_d842_4={})".format(self.bailleur, + return "Location(bailleur={},loyer_principal={},beneficiaire_aide_adulte_ou_enfant_handicapes={},logement_est_chambre={},colocation={},agees_ou_handicap_adultes_hebergees_onereux_particuliers={},logement_meuble_d842_2={},changement_logement_d842_4={})".format(self.bailleur, self.loyer_principal, self.beneficiaire_aide_adulte_ou_enfant_handicapes, self.logement_est_chambre, self.colocation, self.agees_ou_handicap_adultes_hebergees_onereux_particuliers, - self.reduction_loyer_solidarite, self.logement_meuble_d842_2, - self.changement_logement_d842_4) + self.logement_meuble_d842_2, self.changement_logement_d842_4) class ModeOccupation_Code(Enum): Locataire = 0 @@ -1344,16 +1378,14 @@ class Logement: self.logement_decent_l89_462, self.surface_m_carres, self.zone) class Menage: - def __init__(self, prestations_recues: List[PrestationRecue], logement: Logement, personnes_a_charge: List[PersonneACharge], nombre_autres_occupants_logement: Integer, situation_familiale: SituationFamiliale, condition_rattache_foyer_fiscal_parent_ifi: bool, nombre_enfants_a_naitre_apres_troisieme_mois_grossesse: Integer, enfant_a_naitre_apres_quatrieme_mois_grossesse: bool, date_naissance_troisieme_enfant_ou_dernier_si_plus: DateNaissanceTroisiemeOuDernierPlusEnfant) -> None: + def __init__(self, prestations_recues: List[PrestationRecue], logement: Logement, personnes_a_charge: List[PersonneACharge], nombre_autres_occupants_logement: Integer, situation_familiale: SituationFamiliale, condition_rattache_foyer_fiscal_parent_ifi: bool, enfant_a_naitre_apres_quatrieme_mois_grossesse: bool) -> None: self.prestations_recues = prestations_recues self.logement = logement self.personnes_a_charge = personnes_a_charge self.nombre_autres_occupants_logement = nombre_autres_occupants_logement self.situation_familiale = situation_familiale self.condition_rattache_foyer_fiscal_parent_ifi = condition_rattache_foyer_fiscal_parent_ifi - self.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse = nombre_enfants_a_naitre_apres_troisieme_mois_grossesse self.enfant_a_naitre_apres_quatrieme_mois_grossesse = enfant_a_naitre_apres_quatrieme_mois_grossesse - self.date_naissance_troisieme_enfant_ou_dernier_si_plus = date_naissance_troisieme_enfant_ou_dernier_si_plus def __eq__(self, other: object) -> bool: if isinstance(other, Menage): @@ -1363,9 +1395,7 @@ class Menage: self.nombre_autres_occupants_logement == other.nombre_autres_occupants_logement and self.situation_familiale == other.situation_familiale and self.condition_rattache_foyer_fiscal_parent_ifi == other.condition_rattache_foyer_fiscal_parent_ifi and - self.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse == other.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse and - self.enfant_a_naitre_apres_quatrieme_mois_grossesse == other.enfant_a_naitre_apres_quatrieme_mois_grossesse and - self.date_naissance_troisieme_enfant_ou_dernier_si_plus == other.date_naissance_troisieme_enfant_ou_dernier_si_plus) + self.enfant_a_naitre_apres_quatrieme_mois_grossesse == other.enfant_a_naitre_apres_quatrieme_mois_grossesse) else: return False @@ -1373,13 +1403,11 @@ class Menage: return not (self == other) def __str__(self) -> str: - return "Menage(prestations_recues={},logement={},personnes_a_charge={},nombre_autres_occupants_logement={},situation_familiale={},condition_rattache_foyer_fiscal_parent_ifi={},nombre_enfants_a_naitre_apres_troisieme_mois_grossesse={},enfant_a_naitre_apres_quatrieme_mois_grossesse={},date_naissance_troisieme_enfant_ou_dernier_si_plus={})".format(self.prestations_recues, + return "Menage(prestations_recues={},logement={},personnes_a_charge={},nombre_autres_occupants_logement={},situation_familiale={},condition_rattache_foyer_fiscal_parent_ifi={},enfant_a_naitre_apres_quatrieme_mois_grossesse={})".format(self.prestations_recues, self.logement, self.personnes_a_charge, self.nombre_autres_occupants_logement, self.situation_familiale, self.condition_rattache_foyer_fiscal_parent_ifi, - self.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse, - self.enfant_a_naitre_apres_quatrieme_mois_grossesse, - self.date_naissance_troisieme_enfant_ou_dernier_si_plus) + self.enfant_a_naitre_apres_quatrieme_mois_grossesse) class EligibiliteAidesPersonnelleLogementOut: def __init__(self, date_courante_out: Date, eligibilite_out: bool, nombre_personnes_a_charge_prises_en_compte_out: Integer, coefficents_enfants_garde_alternee_pris_en_compte_out: List[Decimal], condition_2_r823_4_out: Callable[[PersonneACharge], bool]) -> None: @@ -1545,7 +1573,8 @@ class EligibilitePrimeDeDemenagementOut: return "EligibilitePrimeDeDemenagementOut(montant_prime_demenagement_out={})".format(self.montant_prime_demenagement_out) class EligibilitePrimeDeDemenagementIn: - def __init__(self, date_emmenagement_in: Date, menage_in: Menage, demandeur_in: Demandeur, date_courante_in: Date, depenses_justifiees_reellement_engagees_in: Money) -> None: + def __init__(self, informations_in: InformationsPrimeDeDemenagement, date_emmenagement_in: Date, menage_in: Menage, demandeur_in: Demandeur, date_courante_in: Date, depenses_justifiees_reellement_engagees_in: Money) -> None: + self.informations_in = informations_in self.date_emmenagement_in = date_emmenagement_in self.menage_in = menage_in self.demandeur_in = demandeur_in @@ -1554,7 +1583,8 @@ class EligibilitePrimeDeDemenagementIn: def __eq__(self, other: object) -> bool: if isinstance(other, EligibilitePrimeDeDemenagementIn): - return (self.date_emmenagement_in == other.date_emmenagement_in and + return (self.informations_in == other.informations_in and + self.date_emmenagement_in == other.date_emmenagement_in and self.menage_in == other.menage_in and self.demandeur_in == other.demandeur_in and self.date_courante_in == other.date_courante_in and @@ -1566,8 +1596,9 @@ class EligibilitePrimeDeDemenagementIn: return not (self == other) def __str__(self) -> str: - return "EligibilitePrimeDeDemenagementIn(date_emmenagement_in={},menage_in={},demandeur_in={},date_courante_in={},depenses_justifiees_reellement_engagees_in={})".format(self.date_emmenagement_in, - self.menage_in, self.demandeur_in, self.date_courante_in, + return "EligibilitePrimeDeDemenagementIn(informations_in={},date_emmenagement_in={},menage_in={},demandeur_in={},date_courante_in={},depenses_justifiees_reellement_engagees_in={})".format(self.informations_in, + self.date_emmenagement_in, self.menage_in, self.demandeur_in, + self.date_courante_in, self.depenses_justifiees_reellement_engagees_in) class RessourcesAidesPersonnelleLogementOut: @@ -2612,8 +2643,8 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid except EmptyError: temp_exonere_csg = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=515, start_column=11, - end_line=515, end_column=22, + start_line=518, start_column=11, + end_line=518, end_column=22, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -2628,8 +2659,8 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid except EmptyError: temp_taux_crds = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=514, start_column=11, - end_line=514, end_column=20, + start_line=517, start_column=11, + end_line=517, end_column=20, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -2644,9 +2675,9 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid raise EmptyError except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=517, + start_line=520, start_column=10, - end_line=517, + end_line=520, end_column=17, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", @@ -2654,8 +2685,8 @@ def contributions_sociales_aides_personnelle_logement(contributions_sociales_aid except EmptyError: temp_montant = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=517, start_column=10, - end_line=517, end_column=17, + start_line=520, start_column=10, + end_line=520, end_column=17, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -2692,8 +2723,8 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_montant_forfaitaire_d832_26 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=591, start_column=11, - end_line=591, end_column=38, + start_line=594, start_column=11, + end_line=594, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2751,8 +2782,8 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_tranches_revenus_d832_26 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=588, start_column=11, - end_line=588, end_column=35, + start_line=591, start_column=11, + end_line=591, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2778,8 +2809,8 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_tranches_revenus_d832_26_multipliees_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=589, start_column=11, - end_line=589, end_column=47, + start_line=592, start_column=11, + end_line=592, end_column=47, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2845,8 +2876,8 @@ def calcul_equivalence_loyer_minimale(calcul_equivalence_loyer_minimale_in:Calcu except EmptyError: temp_montant_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=593, start_column=10, - end_line=593, end_column=17, + start_line=596, start_column=10, + end_line=596, end_column=17, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2928,8 +2959,8 @@ def calcul_nombre_part_logement_foyer(calcul_nombre_part_logement_foyer_in:Calcu except EmptyError: temp_n_nombre_parts_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=600, start_column=10, - end_line=600, end_column=32, + start_line=603, start_column=10, + end_line=603, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -2974,8 +3005,8 @@ def calcul_nombre_parts_accession_propriete(calcul_nombre_parts_accession_propri except EmptyError: temp_n_nombre_parts_d832_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=656, start_column=10, - end_line=656, end_column=32, + start_line=659, start_column=10, + end_line=659, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3032,9 +3063,9 @@ def ouverture_droits_retraite(ouverture_droits_retraite_in:OuvertureDroitsRetrai else: raise EmptyError temp_age_ouverture_droit_8 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=997, + start_line=1000, start_column=10, - end_line=997, end_column=29, + end_line=1000, end_column=29, law_headings=["Date d'ouverture des droits à la retraite", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_age_ouverture_droit_7, @@ -3048,8 +3079,9 @@ def ouverture_droits_retraite(ouverture_droits_retraite_in:OuvertureDroitsRetrai except EmptyError: temp_age_ouverture_droit_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=997, start_column=10, - end_line=997, end_column=29, + start_line=1000, + start_column=10, end_line=1000, + end_column=29, law_headings=["Date d'ouverture des droits à la retraite", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -3088,8 +3120,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_mode_occupation_impaye = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1013, - start_column=11, end_line=1013, + start_line=1016, + start_column=11, end_line=1016, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3125,8 +3157,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_depense_logement_brute_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1014, - start_column=11, end_line=1014, + start_line=1017, + start_column=11, end_line=1017, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3186,9 +3218,9 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): else: raise EmptyError temp_depense_logement_nette_6 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1015, + start_line=1018, start_column=11, - end_line=1015, end_column=33, + end_line=1018, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_depense_logement_nette_4, @@ -3198,8 +3230,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_depense_logement_nette_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1015, - start_column=11, end_line=1015, + start_line=1018, + start_column=11, end_line=1018, end_column=33, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3211,161 +3243,159 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): def temp_seuil_impaye_depense_de_logement_1(_:Any): return False def temp_seuil_impaye_depense_de_logement_2(_:Any): - try: - match_arg_13 = aide_versee - if match_arg_13.code == VersementA_Code.Bailleur: - _ = match_arg_13.value - temp_seuil_impaye_depense_de_logement_3 = False - elif match_arg_13.code == VersementA_Code.Beneficiaire: - _ = match_arg_13.value - temp_seuil_impaye_depense_de_logement_3 = False - elif match_arg_13.code == VersementA_Code.EtablissementHabilite: - _ = match_arg_13.value - temp_seuil_impaye_depense_de_logement_3 = True - match_arg_14 = mode_occupation_impaye - if match_arg_14.code == ModeOccupationImpaye_Code.ImpayeLoyer: - _ = match_arg_14.value - temp_seuil_impaye_depense_de_logement_4 = False - elif match_arg_14.code == ModeOccupationImpaye_Code.ImpayePret: - _ = match_arg_14.value - temp_seuil_impaye_depense_de_logement_4 = True - if (temp_seuil_impaye_depense_de_logement_4 and - temp_seuil_impaye_depense_de_logement_3): - match_arg_15 = depense_logement_nette - if match_arg_15.code == DepenseLogement_Code.TotalAnnuelEcheances: - echeance_pret_nette = match_arg_15.value - return (echeance_pret_nette * - (decimal_of_string("1.") / - decimal_of_string("6."))) - elif match_arg_15.code == DepenseLogement_Code.Mensualite: - mensualite_nette = match_arg_15.value - return (mensualite_nette * decimal_of_string("2.")) - elif match_arg_15.code == DepenseLogement_Code.Loyer: - _ = match_arg_15.value - return money_of_cents_string("0") - else: - raise EmptyError - except EmptyError: - match_arg_16 = aide_versee - if match_arg_16.code == VersementA_Code.Bailleur: - _ = match_arg_16.value - temp_seuil_impaye_depense_de_logement_5 = False - elif match_arg_16.code == VersementA_Code.Beneficiaire: - _ = match_arg_16.value - temp_seuil_impaye_depense_de_logement_5 = True - elif match_arg_16.code == VersementA_Code.EtablissementHabilite: - _ = match_arg_16.value - temp_seuil_impaye_depense_de_logement_5 = False - match_arg_17 = mode_occupation_impaye - if match_arg_17.code == ModeOccupationImpaye_Code.ImpayeLoyer: - _ = match_arg_17.value - temp_seuil_impaye_depense_de_logement_6 = False - elif match_arg_17.code == ModeOccupationImpaye_Code.ImpayePret: - _ = match_arg_17.value - temp_seuil_impaye_depense_de_logement_6 = True - if (temp_seuil_impaye_depense_de_logement_6 and - temp_seuil_impaye_depense_de_logement_5): - match_arg_18 = depense_logement_brute - if match_arg_18.code == DepenseLogement_Code.TotalAnnuelEcheances: - echeance_pret_brute = match_arg_18.value - return (echeance_pret_brute * - (decimal_of_string("1.") / - decimal_of_string("6."))) - elif match_arg_18.code == DepenseLogement_Code.Mensualite: - mensualite_brute = match_arg_18.value - return (mensualite_brute * decimal_of_string("2.")) - elif match_arg_18.code == DepenseLogement_Code.Loyer: - _ = match_arg_18.value - return money_of_cents_string("0") - else: - raise EmptyError - def temp_seuil_impaye_depense_de_logement_7(_:Any): - try: - match_arg_19 = aide_versee - if match_arg_19.code == VersementA_Code.Bailleur: - _ = match_arg_19.value - temp_seuil_impaye_depense_de_logement_8 = True - elif match_arg_19.code == VersementA_Code.Beneficiaire: - _ = match_arg_19.value - temp_seuil_impaye_depense_de_logement_8 = False - elif match_arg_19.code == VersementA_Code.EtablissementHabilite: - _ = match_arg_19.value - temp_seuil_impaye_depense_de_logement_8 = False - match_arg_20 = mode_occupation_impaye - if match_arg_20.code == ModeOccupationImpaye_Code.ImpayeLoyer: - _ = match_arg_20.value - temp_seuil_impaye_depense_de_logement_9 = True - elif match_arg_20.code == ModeOccupationImpaye_Code.ImpayePret: - _ = match_arg_20.value - temp_seuil_impaye_depense_de_logement_9 = False - if (temp_seuil_impaye_depense_de_logement_9 and - temp_seuil_impaye_depense_de_logement_8): - match_arg_21 = depense_logement_nette - if match_arg_21.code == DepenseLogement_Code.TotalAnnuelEcheances: - _ = match_arg_21.value - return money_of_cents_string("0") - elif match_arg_21.code == DepenseLogement_Code.Mensualite: - _ = match_arg_21.value - return money_of_cents_string("0") - elif match_arg_21.code == DepenseLogement_Code.Loyer: - loyer_net = match_arg_21.value - return ((loyer_net + montant_charges) * - decimal_of_string("2.")) - else: - raise EmptyError - except EmptyError: - match_arg_22 = aide_versee - if match_arg_22.code == VersementA_Code.Bailleur: - _ = match_arg_22.value - temp_seuil_impaye_depense_de_logement_10 = False - elif match_arg_22.code == VersementA_Code.Beneficiaire: - _ = match_arg_22.value - temp_seuil_impaye_depense_de_logement_10 = True - elif match_arg_22.code == VersementA_Code.EtablissementHabilite: - _ = match_arg_22.value - temp_seuil_impaye_depense_de_logement_10 = False - match_arg_23 = mode_occupation_impaye - if match_arg_23.code == ModeOccupationImpaye_Code.ImpayeLoyer: - _ = match_arg_23.value - temp_seuil_impaye_depense_de_logement_11 = True - elif match_arg_23.code == ModeOccupationImpaye_Code.ImpayePret: - _ = match_arg_23.value - temp_seuil_impaye_depense_de_logement_11 = False - if (temp_seuil_impaye_depense_de_logement_11 and - temp_seuil_impaye_depense_de_logement_10): - match_arg_24 = depense_logement_brute - if match_arg_24.code == DepenseLogement_Code.TotalAnnuelEcheances: - _ = match_arg_24.value - return money_of_cents_string("0") - elif match_arg_24.code == DepenseLogement_Code.Mensualite: - _ = match_arg_24.value - return money_of_cents_string("0") - elif match_arg_24.code == DepenseLogement_Code.Loyer: - loyer_brut = match_arg_24.value - return ((loyer_brut + montant_charges) * - decimal_of_string("2.")) - else: - raise EmptyError - temp_seuil_impaye_depense_de_logement_12 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1012, + match_arg_13 = aide_versee + if match_arg_13.code == VersementA_Code.Bailleur: + _ = match_arg_13.value + temp_seuil_impaye_depense_de_logement_3 = False + elif match_arg_13.code == VersementA_Code.Beneficiaire: + _ = match_arg_13.value + temp_seuil_impaye_depense_de_logement_3 = False + elif match_arg_13.code == VersementA_Code.EtablissementHabilite: + _ = match_arg_13.value + temp_seuil_impaye_depense_de_logement_3 = True + match_arg_14 = mode_occupation_impaye + if match_arg_14.code == ModeOccupationImpaye_Code.ImpayeLoyer: + _ = match_arg_14.value + temp_seuil_impaye_depense_de_logement_4 = False + elif match_arg_14.code == ModeOccupationImpaye_Code.ImpayePret: + _ = match_arg_14.value + temp_seuil_impaye_depense_de_logement_4 = True + if (temp_seuil_impaye_depense_de_logement_4 and + temp_seuil_impaye_depense_de_logement_3): + match_arg_15 = depense_logement_nette + if match_arg_15.code == DepenseLogement_Code.TotalAnnuelEcheances: + echeance_pret_nette = match_arg_15.value + return (echeance_pret_nette * (decimal_of_string("1.") / + decimal_of_string("6."))) + elif match_arg_15.code == DepenseLogement_Code.Mensualite: + mensualite_nette = match_arg_15.value + return (mensualite_nette * decimal_of_string("2.")) + elif match_arg_15.code == DepenseLogement_Code.Loyer: + _ = match_arg_15.value + return money_of_cents_string("0") + else: + raise EmptyError + def temp_seuil_impaye_depense_de_logement_5(_:Any): + match_arg_16 = aide_versee + if match_arg_16.code == VersementA_Code.Bailleur: + _ = match_arg_16.value + temp_seuil_impaye_depense_de_logement_6 = False + elif match_arg_16.code == VersementA_Code.Beneficiaire: + _ = match_arg_16.value + temp_seuil_impaye_depense_de_logement_6 = True + elif match_arg_16.code == VersementA_Code.EtablissementHabilite: + _ = match_arg_16.value + temp_seuil_impaye_depense_de_logement_6 = False + match_arg_17 = mode_occupation_impaye + if match_arg_17.code == ModeOccupationImpaye_Code.ImpayeLoyer: + _ = match_arg_17.value + temp_seuil_impaye_depense_de_logement_7 = False + elif match_arg_17.code == ModeOccupationImpaye_Code.ImpayePret: + _ = match_arg_17.value + temp_seuil_impaye_depense_de_logement_7 = True + if (temp_seuil_impaye_depense_de_logement_7 and + temp_seuil_impaye_depense_de_logement_6): + match_arg_18 = depense_logement_brute + if match_arg_18.code == DepenseLogement_Code.TotalAnnuelEcheances: + echeance_pret_brute = match_arg_18.value + return (echeance_pret_brute * (decimal_of_string("1.") / + decimal_of_string("6."))) + elif match_arg_18.code == DepenseLogement_Code.Mensualite: + mensualite_brute = match_arg_18.value + return (mensualite_brute * decimal_of_string("2.")) + elif match_arg_18.code == DepenseLogement_Code.Loyer: + _ = match_arg_18.value + return money_of_cents_string("0") + else: + raise EmptyError + def temp_seuil_impaye_depense_de_logement_8(_:Any): + match_arg_19 = aide_versee + if match_arg_19.code == VersementA_Code.Bailleur: + _ = match_arg_19.value + temp_seuil_impaye_depense_de_logement_9 = True + elif match_arg_19.code == VersementA_Code.Beneficiaire: + _ = match_arg_19.value + temp_seuil_impaye_depense_de_logement_9 = False + elif match_arg_19.code == VersementA_Code.EtablissementHabilite: + _ = match_arg_19.value + temp_seuil_impaye_depense_de_logement_9 = False + match_arg_20 = mode_occupation_impaye + if match_arg_20.code == ModeOccupationImpaye_Code.ImpayeLoyer: + _ = match_arg_20.value + temp_seuil_impaye_depense_de_logement_10 = True + elif match_arg_20.code == ModeOccupationImpaye_Code.ImpayePret: + _ = match_arg_20.value + temp_seuil_impaye_depense_de_logement_10 = False + if (temp_seuil_impaye_depense_de_logement_10 and + temp_seuil_impaye_depense_de_logement_9): + match_arg_21 = depense_logement_nette + if match_arg_21.code == DepenseLogement_Code.TotalAnnuelEcheances: + _ = match_arg_21.value + return money_of_cents_string("0") + elif match_arg_21.code == DepenseLogement_Code.Mensualite: + _ = match_arg_21.value + return money_of_cents_string("0") + elif match_arg_21.code == DepenseLogement_Code.Loyer: + loyer_net = match_arg_21.value + return ((loyer_net + montant_charges) * + decimal_of_string("2.")) + else: + raise EmptyError + def temp_seuil_impaye_depense_de_logement_11(_:Any): + match_arg_22 = aide_versee + if match_arg_22.code == VersementA_Code.Bailleur: + _ = match_arg_22.value + temp_seuil_impaye_depense_de_logement_12 = False + elif match_arg_22.code == VersementA_Code.Beneficiaire: + _ = match_arg_22.value + temp_seuil_impaye_depense_de_logement_12 = True + elif match_arg_22.code == VersementA_Code.EtablissementHabilite: + _ = match_arg_22.value + temp_seuil_impaye_depense_de_logement_12 = False + match_arg_23 = mode_occupation_impaye + if match_arg_23.code == ModeOccupationImpaye_Code.ImpayeLoyer: + _ = match_arg_23.value + temp_seuil_impaye_depense_de_logement_13 = True + elif match_arg_23.code == ModeOccupationImpaye_Code.ImpayePret: + _ = match_arg_23.value + temp_seuil_impaye_depense_de_logement_13 = False + if (temp_seuil_impaye_depense_de_logement_13 and + temp_seuil_impaye_depense_de_logement_12): + match_arg_24 = depense_logement_brute + if match_arg_24.code == DepenseLogement_Code.TotalAnnuelEcheances: + _ = match_arg_24.value + return money_of_cents_string("0") + elif match_arg_24.code == DepenseLogement_Code.Mensualite: + _ = match_arg_24.value + return money_of_cents_string("0") + elif match_arg_24.code == DepenseLogement_Code.Loyer: + loyer_brut = match_arg_24.value + return ((loyer_brut + montant_charges) * + decimal_of_string("2.")) + else: + raise EmptyError + temp_seuil_impaye_depense_de_logement_14 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", + start_line=1015, start_column=11, - end_line=1012, end_column=43, + end_line=1015, end_column=43, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", - "Prologue : aides au logement"]), [temp_seuil_impaye_depense_de_logement_7, + "Prologue : aides au logement"]), [temp_seuil_impaye_depense_de_logement_11, + temp_seuil_impaye_depense_de_logement_8, + temp_seuil_impaye_depense_de_logement_5, temp_seuil_impaye_depense_de_logement_2], temp_seuil_impaye_depense_de_logement_1, temp_seuil_impaye_depense_de_logement) except EmptyError: - temp_seuil_impaye_depense_de_logement_12 = dead_value + temp_seuil_impaye_depense_de_logement_14 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1012, - start_column=11, end_line=1012, + start_line=1015, + start_column=11, end_line=1015, end_column=43, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) - seuil_impaye_depense_de_logement = temp_seuil_impaye_depense_de_logement_12 + seuil_impaye_depense_de_logement = temp_seuil_impaye_depense_de_logement_14 try: try: match_arg_25 = mode_occupation_impaye @@ -3404,8 +3434,8 @@ def impaye_depense_logement(impaye_depense_logement_in:ImpayeDepenseLogementIn): except EmptyError: temp_montant_impaye_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1017, - start_column=10, end_line=1017, + start_line=1020, + start_column=10, end_line=1020, end_column=24, law_headings=["Quantification des impayés de dépense de logement", "Calcul du montant de l'allocation logement", @@ -3652,8 +3682,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_fraction_l832_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=550, start_column=11, - end_line=550, end_column=26, + start_line=553, start_column=11, + end_line=553, end_column=26, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3664,8 +3694,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_montant_forfaitaire_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=553, start_column=11, - end_line=553, end_column=38, + start_line=556, start_column=11, + end_line=556, end_column=38, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3676,8 +3706,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_contributions_sociales_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=512, start_column=10, - end_line=512, end_column=23, + start_line=515, start_column=10, + end_line=515, end_column=23, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -3777,8 +3807,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_taux_composition_familiale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=561, start_column=10, - end_line=561, end_column=36, + start_line=564, start_column=10, + end_line=564, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3921,9 +3951,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError temp_abattement_forfaitaire_d823_17_5 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=555, + start_line=558, start_column=11, - end_line=555, end_column=41, + end_line=558, end_column=41, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3935,8 +3965,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_abattement_forfaitaire_d823_17_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=555, start_column=11, - end_line=555, end_column=41, + start_line=558, start_column=11, + end_line=558, end_column=41, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -3987,9 +4017,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError temp_loyer_reference_4 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=549, + start_line=552, start_column=11, - end_line=549, end_column=26, + end_line=552, end_column=26, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4000,8 +4030,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_loyer_reference_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=549, start_column=11, - end_line=549, end_column=26, + start_line=552, start_column=11, + end_line=552, end_column=26, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4021,8 +4051,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_montant_minimal_aide_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=554, start_column=11, - end_line=554, end_column=39, + start_line=557, start_column=11, + end_line=557, end_column=39, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4184,8 +4214,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, start_column=10, - end_line=559, end_column=33, + start_line=562, start_column=10, + end_line=562, end_column=33, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4239,8 +4269,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, start_column=10, - end_line=559, end_column=33, + start_line=562, start_column=10, + end_line=562, end_column=33, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4285,8 +4315,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, start_column=10, - end_line=559, end_column=33, + start_line=562, start_column=10, + end_line=562, end_column=33, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4449,8 +4479,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, start_column=10, - end_line=559, end_column=33, + start_line=562, start_column=10, + end_line=562, end_column=33, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4463,9 +4493,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen temp_plafond_loyer_d823_16_2_25, temp_plafond_loyer_d823_16_2_24) temp_plafond_loyer_d823_16_2_36 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, + start_line=562, start_column=10, - end_line=559, end_column=33, + end_line=562, end_column=33, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4476,8 +4506,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_plafond_loyer_d823_16_2_36 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=559, start_column=10, - end_line=559, end_column=33, + start_line=562, start_column=10, + end_line=562, end_column=33, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4522,7 +4552,7 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen raise EmptyError temp_montant_forfaitaire_charges_d823_16_6 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=558, start_column=10, end_line=558, end_column=45, + start_line=561, start_column=10, end_line=561, end_column=45, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4554,7 +4584,7 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen raise EmptyError temp_montant_forfaitaire_charges_d823_16_6 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=558, start_column=10, end_line=558, end_column=45, + start_line=561, start_column=10, end_line=561, end_column=45, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4565,8 +4595,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_montant_forfaitaire_charges_d823_16_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=558, start_column=10, - end_line=558, end_column=45, + start_line=561, start_column=10, + end_line=561, end_column=45, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4581,8 +4611,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_loyer_principal_avec_reduction_meuble = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=528, start_column=10, - end_line=528, end_column=31, + start_line=531, start_column=10, + end_line=531, end_column=31, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4605,8 +4635,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_plafond_suppression_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=552, start_column=11, - end_line=552, end_column=38, + start_line=555, start_column=11, + end_line=555, end_column=38, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4629,8 +4659,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_plafond_degressivite_d823_16 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=551, start_column=11, - end_line=551, end_column=39, + start_line=554, start_column=11, + end_line=554, end_column=39, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4645,8 +4675,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_loyer_eligible = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=544, start_column=11, - end_line=544, end_column=25, + start_line=547, start_column=11, + end_line=547, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4676,9 +4706,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return param_1 except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=570, + start_line=573, start_column=10, - end_line=570, + end_line=573, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -4687,8 +4717,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_diminue = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=570, start_column=10, - end_line=570, end_column=17, + start_line=573, start_column=10, + end_line=573, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4727,9 +4757,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen else: raise EmptyError temp_participation_minimale_4 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=560, + start_line=563, start_column=10, - end_line=560, end_column=32, + end_line=563, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4740,8 +4770,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_participation_minimale_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=560, start_column=10, - end_line=560, end_column=32, + start_line=563, start_column=10, + end_line=563, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4770,8 +4800,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_rapport_loyers = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=548, start_column=11, - end_line=548, end_column=25, + start_line=551, start_column=11, + end_line=551, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4789,9 +4819,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=571, + start_line=574, start_column=10, - end_line=571, + end_line=574, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -4800,8 +4830,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=571, start_column=10, - end_line=571, end_column=32, + start_line=574, start_column=10, + end_line=574, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4862,8 +4892,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_taux_loyer_eligible_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=546, start_column=10, - end_line=546, end_column=17, + start_line=549, start_column=10, + end_line=549, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4891,9 +4921,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=572, + start_line=575, start_column=10, - end_line=572, + end_line=575, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -4902,8 +4932,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=572, start_column=10, - end_line=572, end_column=40, + start_line=575, start_column=10, + end_line=575, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4932,8 +4962,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_taux_loyer_eligible_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=547, start_column=10, - end_line=547, end_column=17, + start_line=550, start_column=10, + end_line=550, end_column=17, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4953,9 +4983,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=573, + start_line=576, start_column=10, - end_line=573, + end_line=576, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -4964,8 +4994,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_reduction_loyer_solidarite = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=573, start_column=10, - end_line=573, end_column=36, + start_line=576, start_column=10, + end_line=576, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4977,8 +5007,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_taux_prise_compte_ressources = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=556, start_column=11, - end_line=556, end_column=39, + start_line=559, start_column=11, + end_line=559, end_column=39, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -4996,9 +5026,9 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen param_5) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=574, + start_line=577, start_column=10, - end_line=574, + end_line=577, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", @@ -5007,8 +5037,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_traitement_aide_finale_montant_minimal = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=574, start_column=10, - end_line=574, end_column=25, + start_line=577, start_column=10, + end_line=577, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5028,8 +5058,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_participation_personnelle_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=562, start_column=10, - end_line=562, end_column=35, + start_line=565, start_column=10, + end_line=565, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5047,8 +5077,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp_aide_finale_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=567, start_column=10, - end_line=567, end_column=29, + start_line=570, start_column=10, + end_line=570, end_column=29, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5060,8 +5090,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp___1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=2035, - start_column=13, end_line=2035, + start_line=2056, + start_column=13, end_line=2056, end_column=76, law_headings=["Article D823-16", "Sous-section 2 : Calcul de l'aide en secteur locatif", @@ -5073,8 +5103,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen "Code de la construction et de l'habitation"])) if not (temp___1): raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_reglementaire.catala_fr", - start_line=2035, - start_column=13, end_line=2035, + start_line=2056, + start_column=13, end_line=2056, end_column=76, law_headings=["Article D823-16", "Sous-section 2 : Calcul de l'aide en secteur locatif", @@ -5090,8 +5120,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen except EmptyError: temp___2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=856, start_column=13, - end_line=856, end_column=63, + start_line=814, start_column=13, + end_line=814, end_column=63, law_headings=["Article L832-3", "Chapitre Ier : Champ d'application", "Titre III : Aide personnalisée au logement", @@ -5100,8 +5130,8 @@ def calcul_aide_personnalisee_logement_locatif(calcul_aide_personnalisee_logemen "Code de la construction et de l'habitation"])) if not (temp___2): raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=856, - start_column=13, end_line=856, + start_line=814, + start_column=13, end_line=814, end_column=63, law_headings=["Article L832-3", "Chapitre Ier : Champ d'application", @@ -5133,8 +5163,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_r_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=615, start_column=10, - end_line=615, end_column=31, + start_line=618, start_column=10, + end_line=618, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5145,8 +5175,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_montant_forfaitaire_d832_24 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=622, start_column=11, - end_line=622, end_column=38, + start_line=625, start_column=11, + end_line=625, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5157,8 +5187,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_montant_minimal_aide_d823_24 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=624, start_column=11, - end_line=624, end_column=39, + start_line=627, start_column=11, + end_line=627, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5186,8 +5216,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_condition_2_du_832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=612, start_column=12, - end_line=612, end_column=33, + start_line=615, start_column=12, + end_line=615, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5198,8 +5228,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_contributions_sociales_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=512, start_column=10, - end_line=512, end_column=23, + start_line=515, start_column=10, + end_line=515, end_column=23, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -5393,9 +5423,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ else: raise EmptyError temp_plafond_equivalence_loyer_eligible_4 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=618, + start_line=621, start_column=10, - end_line=618, end_column=44, + end_line=621, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5406,8 +5436,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_plafond_equivalence_loyer_eligible_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=618, start_column=10, - end_line=618, end_column=44, + start_line=621, start_column=10, + end_line=621, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5423,9 +5453,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=640, + start_line=643, start_column=10, - end_line=640, + end_line=643, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5434,8 +5464,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=640, start_column=10, - end_line=640, end_column=32, + start_line=643, start_column=10, + end_line=643, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5446,8 +5476,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_nombre_parts_dot_condition_2_du_832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=596, start_column=10, - end_line=596, end_column=31, + start_line=599, start_column=10, + end_line=599, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5458,8 +5488,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=597, start_column=10, - end_line=597, end_column=35, + start_line=600, start_column=10, + end_line=600, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5470,8 +5500,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=598, start_column=10, - end_line=598, end_column=40, + start_line=601, start_column=10, + end_line=601, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5489,8 +5519,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_montant_forfaitaire_d832_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=623, start_column=11, - end_line=623, end_column=38, + start_line=626, start_column=11, + end_line=626, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5504,8 +5534,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_multiplicateur_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=614, start_column=10, - end_line=614, end_column=44, + start_line=617, start_column=10, + end_line=617, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5520,8 +5550,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_equivalence_loyer_eligible = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=617, start_column=10, - end_line=617, end_column=36, + start_line=620, start_column=10, + end_line=620, end_column=36, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5535,8 +5565,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_n_nombre_parts_d832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=616, start_column=19, - end_line=616, end_column=41, + start_line=619, start_column=19, + end_line=619, end_column=41, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5548,9 +5578,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return (equivalence_loyer_eligible - param_7) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=621, + start_line=624, start_column=11, - end_line=621, + end_line=624, end_column=41, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5559,8 +5589,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_depense_nette_minimale_d832_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=621, start_column=11, - end_line=621, end_column=41, + start_line=624, start_column=11, + end_line=624, end_column=41, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5571,8 +5601,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=584, start_column=10, - end_line=584, end_column=37, + start_line=587, start_column=10, + end_line=587, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5583,8 +5613,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=585, start_column=10, - end_line=585, end_column=31, + start_line=588, start_column=10, + end_line=588, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5595,8 +5625,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=586, start_column=10, - end_line=586, end_column=32, + start_line=589, start_column=10, + end_line=589, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5631,8 +5661,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_prise_en_charge_d832_25_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=634, start_column=10, - end_line=634, end_column=17, + start_line=637, start_column=10, + end_line=637, end_column=17, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5649,9 +5679,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=619, + start_line=622, start_column=11, - end_line=619, + end_line=622, end_column=52, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5660,8 +5690,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_abattement_depense_nette_minimale_d832_27 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=619, start_column=11, - end_line=619, end_column=52, + start_line=622, start_column=11, + end_line=622, end_column=52, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5672,8 +5702,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_equivalence_loyer_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=625, start_column=10, - end_line=625, end_column=36, + start_line=628, start_column=10, + end_line=628, end_column=36, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5695,8 +5725,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_prise_en_charge_d832_25_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=635, start_column=10, - end_line=635, end_column=17, + start_line=638, start_column=10, + end_line=638, end_column=17, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5718,9 +5748,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=641, + start_line=644, start_column=10, - end_line=641, + end_line=644, end_column=20, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5729,8 +5759,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_abattement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=641, start_column=10, - end_line=641, end_column=20, + start_line=644, start_column=10, + end_line=644, end_column=20, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5756,8 +5786,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_coefficient_prise_en_charge_d832_25_seuil = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=636, start_column=10, - end_line=636, end_column=15, + start_line=639, start_column=10, + end_line=639, end_column=15, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5785,9 +5815,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=642, + start_line=645, start_column=10, - end_line=642, + end_line=645, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5796,8 +5826,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=642, start_column=10, - end_line=642, end_column=40, + start_line=645, start_column=10, + end_line=645, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5815,8 +5845,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_aide_finale_formule_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=638, start_column=10, - end_line=638, end_column=29, + start_line=641, start_column=10, + end_line=641, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5834,9 +5864,9 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ param_11) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=643, + start_line=646, start_column=10, - end_line=643, + end_line=646, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", @@ -5845,8 +5875,8 @@ def calcul_aide_personnalisee_logement_foyer(calcul_aide_personnalisee_logement_ except EmptyError: temp_traitement_aide_finale_montant_minimal_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=643, start_column=10, - end_line=643, end_column=25, + start_line=646, start_column=10, + end_line=646, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5882,8 +5912,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_forfaitaire_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=692, start_column=11, - end_line=692, end_column=38, + start_line=695, start_column=11, + end_line=695, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5894,8 +5924,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_minimal_aide_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=693, start_column=11, - end_line=693, end_column=39, + start_line=696, start_column=11, + end_line=696, end_column=39, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5906,8 +5936,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_multiplicateur_d832_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=695, start_column=11, - end_line=695, end_column=45, + start_line=698, start_column=11, + end_line=698, end_column=45, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5918,8 +5948,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_multiplicateur_d832_18 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=696, start_column=11, - end_line=696, end_column=45, + start_line=699, start_column=11, + end_line=699, end_column=45, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5930,8 +5960,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_limite_tranches_d832_15_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=697, start_column=11, - end_line=697, end_column=44, + start_line=700, start_column=11, + end_line=700, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5942,8 +5972,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_taux_tranche_inferieure_d832_15_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=698, start_column=11, - end_line=698, end_column=44, + start_line=701, start_column=11, + end_line=701, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5954,8 +5984,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_taux_tranche_superieure_d832_15_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=699, start_column=11, - end_line=699, end_column=44, + start_line=702, start_column=11, + end_line=702, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5967,8 +5997,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_taux_francs_vers_euros = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=700, start_column=11, - end_line=700, end_column=33, + start_line=703, start_column=11, + end_line=703, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5979,8 +6009,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=653, start_column=10, - end_line=653, end_column=35, + start_line=656, start_column=10, + end_line=656, end_column=35, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -5991,8 +6021,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=654, start_column=10, - end_line=654, end_column=40, + start_line=657, start_column=10, + end_line=657, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6026,8 +6056,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_multiplicateur_d832_17_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=694, start_column=11, - end_line=694, end_column=47, + start_line=697, start_column=11, + end_line=697, end_column=47, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6038,8 +6068,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_contributions_sociales_dot_date_courante_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=512, start_column=10, - end_line=512, end_column=23, + start_line=515, start_column=10, + end_line=515, end_column=23, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -6085,7 +6115,7 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal raise EmptyError temp_montant_forfaitaire_charges_d832_10_6 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=691, start_column=11, end_line=691, end_column=46, + start_line=694, start_column=11, end_line=694, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6117,7 +6147,7 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal raise EmptyError temp_montant_forfaitaire_charges_d832_10_6 = handle_default( SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=691, start_column=11, end_line=691, end_column=46, + start_line=694, start_column=11, end_line=694, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6128,8 +6158,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_montant_forfaitaire_charges_d832_10_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=691, start_column=11, - end_line=691, end_column=46, + start_line=694, start_column=11, + end_line=694, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6145,9 +6175,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=710, + start_line=713, start_column=10, - end_line=710, + end_line=713, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -6156,8 +6186,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=710, start_column=10, - end_line=710, end_column=32, + start_line=713, start_column=10, + end_line=713, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -6180,8 +6210,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_ressources_menage_avec_d832_18 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=690, start_column=11, - end_line=690, end_column=41, + start_line=693, start_column=11, + end_line=693, end_column=41, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9591,8 +9621,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=681, start_column=11, - end_line=681, end_column=46, + start_line=684, start_column=11, + end_line=684, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9643,9 +9673,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal temp_calcul_plafond_mensualite_d832_10_3_1) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=681, + start_line=684, start_column=11, - end_line=681, + end_line=684, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -9654,8 +9684,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_plafond_mensualite_d832_10_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=681, start_column=11, - end_line=681, end_column=46, + start_line=684, start_column=11, + end_line=684, end_column=46, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9666,8 +9696,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_n_nombre_parts_d832_11_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=682, start_column=11, - end_line=682, end_column=33, + start_line=685, start_column=11, + end_line=685, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9687,9 +9717,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return (mensualite_principale - param_14) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=687, + start_line=690, start_column=11, - end_line=687, + end_line=690, end_column=41, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -9698,8 +9728,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_depense_nette_minimale_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=687, start_column=11, - end_line=687, end_column=41, + start_line=690, start_column=11, + end_line=690, end_column=41, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9724,8 +9754,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_plafond_mensualite_d832_10_3_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=679, start_column=10, - end_line=679, end_column=14, + start_line=682, start_column=10, + end_line=682, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9736,8 +9766,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=584, start_column=10, - end_line=584, end_column=37, + start_line=587, start_column=10, + end_line=587, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9748,8 +9778,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=585, start_column=10, - end_line=585, end_column=31, + start_line=588, start_column=10, + end_line=588, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9760,8 +9790,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=586, start_column=10, - end_line=586, end_column=32, + start_line=589, start_column=10, + end_line=589, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9778,8 +9808,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_prise_en_charge_d832_10_formule = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=684, start_column=10, - end_line=684, end_column=17, + start_line=687, start_column=10, + end_line=687, end_column=17, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9798,9 +9828,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=688, + start_line=691, start_column=11, - end_line=688, + end_line=691, end_column=52, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -9809,8 +9839,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_abattement_depense_nette_minimale_d832_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=688, start_column=11, - end_line=688, end_column=52, + start_line=691, start_column=11, + end_line=691, end_column=52, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9843,8 +9873,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_plafond_mensualite_d832_10_3_coproprietaires = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=680, start_column=10, - end_line=680, end_column=25, + start_line=683, start_column=10, + end_line=683, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9916,9 +9946,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal else: raise EmptyError temp_mensualite_minimale_9 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=677, + start_line=680, start_column=10, - end_line=677, end_column=29, + end_line=680, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9929,8 +9959,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_mensualite_minimale_9 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=677, start_column=10, - end_line=677, end_column=29, + start_line=680, start_column=10, + end_line=680, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9943,8 +9973,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_prise_en_charge_d832_10_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=685, start_column=10, - end_line=685, end_column=17, + start_line=688, start_column=10, + end_line=688, end_column=17, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9966,9 +9996,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=711, + start_line=714, start_column=10, - end_line=711, + end_line=714, end_column=20, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -9977,8 +10007,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_abattement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=711, start_column=10, - end_line=711, end_column=20, + start_line=714, start_column=10, + end_line=714, end_column=20, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -9993,8 +10023,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_mensualite_eligible = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=676, start_column=10, - end_line=676, end_column=29, + start_line=679, start_column=10, + end_line=679, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10009,8 +10039,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_coefficient_prise_en_charge_d832_10_seuil = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=686, start_column=10, - end_line=686, end_column=15, + start_line=689, start_column=10, + end_line=689, end_column=15, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10038,9 +10068,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=712, + start_line=715, start_column=10, - end_line=712, + end_line=715, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10049,8 +10079,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=712, start_column=10, - end_line=712, end_column=40, + start_line=715, start_column=10, + end_line=715, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10069,8 +10099,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_aide_finale_formule_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=708, start_column=10, - end_line=708, end_column=29, + start_line=711, start_column=10, + end_line=711, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10088,9 +10118,9 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal param_18) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=713, + start_line=716, start_column=10, - end_line=713, + end_line=716, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", @@ -10099,8 +10129,8 @@ def calcul_aide_personnalisee_logement_accession_propriete(calcul_aide_personnal except EmptyError: temp_traitement_aide_finale_montant_minimal_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=713, start_column=10, - end_line=713, end_column=25, + start_line=716, start_column=10, + end_line=716, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -10124,9 +10154,9 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen return False except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=296, + start_line=292, start_column=11, - end_line=296, + end_line=292, end_column=25, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", @@ -10134,8 +10164,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_pret = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=296, start_column=11, - end_line=296, end_column=25, + start_line=292, start_column=11, + end_line=292, end_column=25, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10145,8 +10175,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_peuplement_logement_l822_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=305, start_column=11, - end_line=305, end_column=48, + start_line=301, start_column=11, + end_line=301, end_column=48, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10156,8 +10186,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_seuil_l822_3_parts_propriete = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=315, start_column=11, - end_line=315, end_column=39, + start_line=311, start_column=11, + end_line=311, end_column=39, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10167,8 +10197,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_seuil_l822_3_parts_usufruit = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=316, start_column=11, - end_line=316, end_column=38, + start_line=312, start_column=11, + end_line=312, end_column=38, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10178,8 +10208,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_seuil_l822_5_patrimoine = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=317, start_column=11, - end_line=317, end_column=34, + start_line=313, start_column=11, + end_line=313, end_column=34, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10204,8 +10234,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_usufruit_ou_propriete_famille_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=314, start_column=11, - end_line=314, end_column=40, + start_line=310, start_column=11, + end_line=310, end_column=40, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10222,8 +10252,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_non_ouverture_l822_9_decence_logement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=303, start_column=11, - end_line=303, end_column=58, + start_line=299, start_column=11, + end_line=299, end_column=58, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10240,8 +10270,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_non_ouverture_l822_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=302, start_column=11, - end_line=302, end_column=41, + start_line=298, start_column=11, + end_line=298, end_column=41, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10335,8 +10365,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_logement_surface = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=301, start_column=12, - end_line=301, end_column=38, + start_line=297, start_column=12, + end_line=297, end_column=38, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10357,8 +10387,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_logement_residence_principale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=298, start_column=12, - end_line=298, end_column=51, + start_line=294, start_column=12, + end_line=294, end_column=51, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10368,8 +10398,9 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_ouverture_droits_retraite_dot_date_naissance_assure = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=998, start_column=10, - end_line=998, end_column=31, + start_line=1001, + start_column=10, end_line=1001, + end_column=31, law_headings=["Date d'ouverture des droits à la retraite", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -10382,8 +10413,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_patrimoine_total_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=313, start_column=11, - end_line=313, end_column=37, + start_line=309, start_column=11, + end_line=309, end_column=37, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10395,8 +10426,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen _ = match_arg_341.value temp_condition_nationalite = True elif match_arg_341.code == Nationalite_Code.Etrangere: - _ = match_arg_341.value - temp_condition_nationalite = demandeur.satisfait_conditions_l512_2_code_securite_sociale + conditions = match_arg_341.value + temp_condition_nationalite = conditions.satisfait_conditions_l512_2_code_securite_sociale if temp_condition_nationalite: temp_condition_nationalite_1 = True else: @@ -10407,8 +10438,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_nationalite_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=297, start_column=11, - end_line=297, end_column=32, + start_line=293, start_column=11, + end_line=293, end_column=32, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10454,9 +10485,9 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen else: raise EmptyError temp_plafond_individuel_l815_9_secu_7 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=321, + start_line=317, start_column=11, - end_line=321, end_column=41, + end_line=317, end_column=41, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"]), [temp_plafond_individuel_l815_9_secu_6, @@ -10469,8 +10500,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_plafond_individuel_l815_9_secu_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=321, start_column=11, - end_line=321, end_column=41, + start_line=317, start_column=11, + end_line=317, end_column=41, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10510,8 +10541,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_logement_location_tiers_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=300, start_column=11, - end_line=300, end_column=44, + start_line=296, start_column=11, + end_line=296, end_column=44, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10592,8 +10623,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_logement_mode_occupation_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=299, start_column=11, - end_line=299, end_column=45, + start_line=295, start_column=11, + end_line=295, end_column=45, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10610,8 +10641,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_ouverture_l822_10_peuplement_logement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=304, start_column=11, - end_line=304, end_column=58, + start_line=300, start_column=11, + end_line=300, end_column=58, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10621,8 +10652,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_age_l161_17_2_secu = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=320, start_column=11, - end_line=320, end_column=29, + start_line=316, start_column=11, + end_line=316, end_column=29, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10665,8 +10696,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_patrimoine_pris_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=318, start_column=11, - end_line=318, end_column=36, + start_line=314, start_column=11, + end_line=314, end_column=36, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10694,8 +10725,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_eligibilite_logement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=306, start_column=11, - end_line=306, end_column=31, + start_line=302, start_column=11, + end_line=302, end_column=31, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10706,8 +10737,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_age_l351_8_1_secu = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=319, start_column=11, - end_line=319, end_column=28, + start_line=315, start_column=11, + end_line=315, end_column=28, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10726,8 +10757,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_eligibilite = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=324, start_column=10, - end_line=324, end_column=21, + start_line=320, start_column=10, + end_line=320, end_column=21, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10763,9 +10794,9 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen return False except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=328, + start_line=324, start_column=10, - end_line=328, + end_line=324, end_column=28, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", @@ -10773,8 +10804,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_condition_2_r823_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=328, start_column=10, - end_line=328, end_column=28, + start_line=324, start_column=10, + end_line=324, end_column=28, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10821,8 +10852,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=307, start_column=11, - end_line=307, end_column=44, + start_line=303, start_column=11, + end_line=303, end_column=44, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"]), [temp_prise_en_compte_personne_a_charge_5, @@ -10831,9 +10862,9 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen temp_prise_en_compte_personne_a_charge_1) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=307, + start_line=303, start_column=11, - end_line=307, + end_line=303, end_column=44, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", @@ -10841,8 +10872,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_prise_en_compte_personne_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=307, start_column=11, - end_line=307, end_column=44, + start_line=303, start_column=11, + end_line=303, end_column=44, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10855,8 +10886,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_personnes_a_charge_prises_en_compte_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=309, start_column=11, - end_line=309, end_column=46, + start_line=305, start_column=11, + end_line=305, end_column=46, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10896,8 +10927,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=326, start_column=10, - end_line=326, end_column=59, + start_line=322, start_column=10, + end_line=322, end_column=59, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10907,8 +10938,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp_nombre_personnes_a_charge_prises_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=325, start_column=10, - end_line=325, end_column=52, + start_line=321, start_column=10, + end_line=321, end_column=52, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10918,8 +10949,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp___3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=181, start_column=13, - end_line=181, end_column=48, + start_line=182, start_column=13, + end_line=182, end_column=48, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", "Titre II : Dispositions communes aux aides personnelles au logement", @@ -10928,8 +10959,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen "Code de la construction et de l'habitation"])) if not (temp___3): raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=181, - start_column=13, end_line=181, + start_line=182, + start_column=13, end_line=182, end_column=48, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", @@ -10942,8 +10973,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen except EmptyError: temp___4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=180, start_column=13, - end_line=180, end_column=49, + start_line=181, start_column=13, + end_line=181, end_column=49, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", "Titre II : Dispositions communes aux aides personnelles au logement", @@ -10952,8 +10983,8 @@ def eligibilite_aides_personnelle_logement(eligibilite_aides_personnelle_logemen "Code de la construction et de l'habitation"])) if not (temp___4): raise AssertionFailure(SourcePosition(filename="examples/aides_logement/code_construction_legislatif.catala_fr", - start_line=180, - start_column=13, end_line=180, + start_line=181, + start_column=13, end_line=181, end_column=49, law_headings=["Article L822-3", "Chapitre II : Conditions générales d'attribution", @@ -10983,8 +11014,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ ressources_menage_arrondies_base = ressources_aides_personnelle_logement_in.ressources_menage_arrondies_base_in temp_ressources_menage_arrondies_seuil = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=492, start_column=10, - end_line=492, end_column=15, + start_line=495, start_column=10, + end_line=495, end_column=15, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -10994,8 +11025,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_montant_forfaitaire_r_822_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=496, start_column=11, - end_line=496, end_column=38, + start_line=499, start_column=11, + end_line=499, end_column=38, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11005,16 +11036,16 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_montant_forfaitaire_r_822_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=498, start_column=11, - end_line=498, end_column=38, + start_line=501, start_column=11, + end_line=501, end_column=38, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) montant_forfaitaire_r_822_7 = temp_montant_forfaitaire_r_822_7 temp_ressources_forfaitaires_r822_20 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=500, start_column=11, - end_line=500, end_column=42, + start_line=503, start_column=11, + end_line=503, end_column=42, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11029,8 +11060,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_ressources_personnes_vivant_habituellement_foyer_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=494, start_column=11, - end_line=494, end_column=59, + start_line=497, start_column=11, + end_line=497, end_column=59, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11074,8 +11105,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_abattement_r_822_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=499, start_column=11, - end_line=499, end_column=30, + start_line=502, start_column=11, + end_line=502, end_column=30, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11102,8 +11133,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_abattement_r_822_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=495, start_column=11, - end_line=495, end_column=29, + start_line=498, start_column=11, + end_line=498, end_column=29, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11157,8 +11188,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_ressources_prises_en_compte_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=505, start_column=10, - end_line=505, end_column=37, + start_line=508, start_column=10, + end_line=508, end_column=37, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11175,8 +11206,8 @@ def ressources_aides_personnelle_logement(ressources_aides_personnelle_logement_ except EmptyError: temp_abattement_r_822_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=497, start_column=11, - end_line=497, end_column=29, + start_line=500, start_column=11, + end_line=500, end_column=29, law_headings=["Prise en compte des ressources pour les aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11442,8 +11473,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_loyer_principal_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=526, start_column=10, - end_line=526, end_column=25, + start_line=529, start_column=10, + end_line=529, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11454,8 +11485,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=529, start_column=10, - end_line=529, end_column=37, + start_line=532, start_column=10, + end_line=532, end_column=37, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11466,8 +11497,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=530, start_column=10, - end_line=530, end_column=55, + start_line=533, start_column=10, + end_line=533, end_column=55, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11478,8 +11509,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=532, start_column=10, - end_line=532, end_column=23, + start_line=535, start_column=10, + end_line=535, end_column=23, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11490,8 +11521,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=533, start_column=10, - end_line=533, end_column=35, + start_line=536, start_column=10, + end_line=536, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11502,8 +11533,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=534, start_column=10, - end_line=534, end_column=40, + start_line=537, start_column=10, + end_line=537, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11514,8 +11545,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=535, start_column=10, - end_line=535, end_column=14, + start_line=538, start_column=10, + end_line=538, end_column=14, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11526,8 +11557,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_logement_est_chambre = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=536, start_column=10, - end_line=536, end_column=30, + start_line=539, start_column=10, + end_line=539, end_column=30, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11538,8 +11569,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=537, start_column=10, - end_line=537, end_column=66, + start_line=540, start_column=10, + end_line=540, end_column=66, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11550,8 +11581,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_type_aide = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=539, start_column=10, - end_line=539, end_column=19, + start_line=542, start_column=10, + end_line=542, end_column=19, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11562,8 +11593,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_colocation = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=540, start_column=10, - end_line=540, end_column=20, + start_line=543, start_column=10, + end_line=543, end_column=20, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11574,8 +11605,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_reduction_loyer_solidarite = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=541, start_column=10, - end_line=541, end_column=36, + start_line=544, start_column=10, + end_line=544, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11586,8 +11617,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_calcul_apl_locatif_dot_logement_meuble_d842_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=542, start_column=10, - end_line=542, end_column=32, + start_line=545, start_column=10, + end_line=545, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11634,9 +11665,9 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal param_24) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=784, + start_line=787, start_column=10, - end_line=784, + end_line=787, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", @@ -11644,8 +11675,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_traitement_aide_finale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=784, start_column=10, - end_line=784, end_column=32, + start_line=787, start_column=10, + end_line=787, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -11678,8 +11709,8 @@ def calcul_allocation_logement_locatif(calcul_allocation_logement_locatif_in:Cal except EmptyError: temp_aide_finale_formule_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=782, start_column=10, - end_line=782, end_column=29, + start_line=785, start_column=10, + end_line=785, end_column=29, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -11702,8 +11733,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_minimal_aide_d842_15 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=923, start_column=11, - end_line=923, end_column=39, + start_line=926, start_column=11, + end_line=926, end_column=39, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -11713,8 +11744,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_forfaitaire_d842_15 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=924, start_column=11, - end_line=924, end_column=38, + start_line=927, start_column=11, + end_line=927, end_column=38, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -11724,8 +11755,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_minimal_depense_nette_d842_17 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=925, start_column=11, - end_line=925, end_column=48, + start_line=928, start_column=11, + end_line=928, end_column=48, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -11735,8 +11766,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_nombre_parts_dot_condition_2_du_832_25_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=596, start_column=10, - end_line=596, end_column=31, + start_line=599, start_column=10, + end_line=599, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11747,8 +11778,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=597, start_column=10, - end_line=597, end_column=35, + start_line=600, start_column=10, + end_line=600, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11759,8 +11790,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=598, start_column=10, - end_line=598, end_column=40, + start_line=601, start_column=10, + end_line=601, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11775,8 +11806,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_contributions_sociales_dot_date_courante_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=512, start_column=10, - end_line=512, end_column=23, + start_line=515, start_column=10, + end_line=515, end_column=23, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -11788,8 +11819,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_type_logement_foyer = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=603, start_column=10, - end_line=603, end_column=29, + start_line=606, start_column=10, + end_line=606, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11800,8 +11831,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_date_conventionnement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=604, start_column=10, - end_line=604, end_column=31, + start_line=607, start_column=10, + end_line=607, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11812,8 +11843,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=605, start_column=10, - end_line=605, end_column=37, + start_line=608, start_column=10, + end_line=608, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11824,8 +11855,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=606, start_column=10, - end_line=606, end_column=35, + start_line=609, start_column=10, + end_line=609, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11836,8 +11867,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=607, start_column=10, - end_line=607, end_column=40, + start_line=610, start_column=10, + end_line=610, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11848,8 +11879,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=608, start_column=10, - end_line=608, end_column=14, + start_line=611, start_column=10, + end_line=611, end_column=14, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11860,8 +11891,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=609, start_column=10, - end_line=609, end_column=23, + start_line=612, start_column=10, + end_line=612, end_column=23, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11872,8 +11903,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_apl_logement_foyer_dot_redevance = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=610, start_column=10, - end_line=610, end_column=19, + start_line=613, start_column=10, + end_line=613, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -11922,8 +11953,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_montant_forfaitaire_charges = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=928, start_column=10, - end_line=928, end_column=37, + start_line=931, start_column=10, + end_line=931, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12035,9 +12066,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA else: raise EmptyError temp_equivalence_loyer_9 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=927, + start_line=930, start_column=10, - end_line=927, end_column=27, + end_line=930, end_column=27, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_equivalence_loyer_7, @@ -12048,8 +12079,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_equivalence_loyer_9 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=927, start_column=10, - end_line=927, end_column=27, + start_line=930, start_column=10, + end_line=930, end_column=27, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12064,9 +12095,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA return (param_25 - montant_forfaitaire_d842_15) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=941, + start_line=944, start_column=10, - end_line=941, + end_line=944, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12074,8 +12105,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=941, start_column=10, - end_line=941, end_column=32, + start_line=944, start_column=10, + end_line=944, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12085,8 +12116,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=584, start_column=10, - end_line=584, end_column=37, + start_line=587, start_column=10, + end_line=587, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -12097,8 +12128,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=585, start_column=10, - end_line=585, end_column=31, + start_line=588, start_column=10, + end_line=588, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -12109,8 +12140,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=586, start_column=10, - end_line=586, end_column=32, + start_line=589, start_column=10, + end_line=589, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -12125,8 +12156,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_coefficient_prise_en_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=926, start_column=10, - end_line=926, end_column=37, + start_line=929, start_column=10, + end_line=929, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12138,9 +12169,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_26) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=921, + start_line=924, start_column=11, - end_line=921, + end_line=924, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12148,8 +12179,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_depense_nette_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=921, start_column=11, - end_line=921, end_column=33, + start_line=924, start_column=11, + end_line=924, end_column=33, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12159,8 +12190,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_loyer_minimal = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=929, start_column=10, - end_line=929, end_column=23, + start_line=932, start_column=10, + end_line=932, end_column=23, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12176,9 +12207,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=922, + start_line=925, start_column=11, - end_line=922, + end_line=925, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12186,8 +12217,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_abattement_depense_nette_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=922, start_column=11, - end_line=922, end_column=44, + start_line=925, start_column=11, + end_line=925, end_column=44, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12199,8 +12230,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_aide_finale_formule_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=939, start_column=10, - end_line=939, end_column=29, + start_line=942, start_column=10, + end_line=942, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12221,9 +12252,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_28))) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=942, + start_line=945, start_column=10, - end_line=942, + end_line=945, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12231,8 +12262,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_depense_nette_minimale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=942, start_column=10, - end_line=942, end_column=32, + start_line=945, start_column=10, + end_line=945, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12248,9 +12279,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_29) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=943, + start_line=946, start_column=10, - end_line=943, + end_line=946, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12258,8 +12289,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_redevance = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=943, start_column=10, - end_line=943, end_column=19, + start_line=946, start_column=10, + end_line=946, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12285,9 +12316,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=944, + start_line=947, start_column=10, - end_line=944, + end_line=947, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12295,8 +12326,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=944, start_column=10, - end_line=944, end_column=40, + start_line=947, start_column=10, + end_line=947, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12313,9 +12344,9 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA param_31) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=945, + start_line=948, start_column=10, - end_line=945, + end_line=948, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -12323,8 +12354,8 @@ def calcul_allocation_logement_foyer(calcul_allocation_logement_foyer_in:CalculA except EmptyError: temp_traitement_aide_finale_montant_minimal_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=945, start_column=10, - end_line=945, end_column=25, + start_line=948, start_column=10, + end_line=948, end_column=25, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12355,8 +12386,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_d842_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=852, start_column=11, - end_line=852, end_column=37, + start_line=855, start_column=11, + end_line=855, end_column=37, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12367,8 +12398,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_taux_francs_vers_euros_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=855, start_column=11, - end_line=855, end_column=33, + start_line=858, start_column=11, + end_line=858, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12378,8 +12409,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_minimal_aide_d842_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=858, start_column=11, - end_line=858, end_column=38, + start_line=861, start_column=11, + end_line=861, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12389,8 +12420,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_d842_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=859, start_column=11, - end_line=859, end_column=38, + start_line=862, start_column=11, + end_line=862, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12400,8 +12431,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_d842_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=860, start_column=11, - end_line=860, end_column=38, + start_line=863, start_column=11, + end_line=863, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12411,8 +12442,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_coefficient_d842_11 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=861, start_column=11, - end_line=861, end_column=30, + start_line=864, start_column=11, + end_line=864, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12422,8 +12453,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_coefficient_d842_12 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=862, start_column=11, - end_line=862, end_column=30, + start_line=865, start_column=11, + end_line=865, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12433,8 +12464,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_nombre_parts_dot_nombre_personnes_a_charge_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=653, start_column=10, - end_line=653, end_column=35, + start_line=656, start_column=10, + end_line=656, end_column=35, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -12445,8 +12476,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_nombre_parts_dot_situation_familiale_calcul_apl_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=654, start_column=10, - end_line=654, end_column=40, + start_line=657, start_column=10, + end_line=657, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -12460,8 +12491,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_contributions_sociales_dot_date_courante_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=512, start_column=10, - end_line=512, end_column=23, + start_line=515, start_column=10, + end_line=515, end_column=23, law_headings=["Calcul des contributions sociales s'appliquant aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -12501,8 +12532,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_montant_forfaitaire_charges_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=845, start_column=11, - end_line=845, end_column=38, + start_line=848, start_column=11, + end_line=848, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -12517,9 +12548,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac return (param_32 - montant_forfaitaire_d842_6) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=875, + start_line=878, start_column=10, - end_line=875, + end_line=878, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -12527,8 +12558,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_minoration_forfaitaire_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=875, start_column=10, - end_line=875, end_column=32, + start_line=878, start_column=10, + end_line=878, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15106,8 +15137,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac else: raise EmptyError return handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=850, start_column=10, - end_line=850, end_column=14, + start_line=853, start_column=10, + end_line=853, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_calcul_plafond_mensualite_d842_6_base_30, @@ -15136,9 +15167,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac temp_calcul_plafond_mensualite_d842_6_base_1) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=850, + start_line=853, start_column=10, - end_line=850, + end_line=853, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15146,8 +15177,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_plafond_mensualite_d842_6_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=850, start_column=10, - end_line=850, end_column=14, + start_line=853, start_column=10, + end_line=853, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15226,9 +15257,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac else: raise EmptyError temp_seuil_minimal_ressources_menage_8 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=854, + start_line=857, start_column=11, - end_line=854, end_column=42, + end_line=857, end_column=42, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"]), [temp_seuil_minimal_ressources_menage_4, @@ -15238,8 +15269,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_seuil_minimal_ressources_menage_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=854, start_column=11, - end_line=854, end_column=42, + start_line=857, start_column=11, + end_line=857, end_column=42, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15251,9 +15282,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac montant_forfaitaire_charges_1) - param_34) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=856, + start_line=859, start_column=11, - end_line=856, + end_line=859, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15261,8 +15292,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_depense_nette_minimale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=856, start_column=11, - end_line=856, end_column=33, + start_line=859, start_column=11, + end_line=859, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15290,9 +15321,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac raise EmptyError except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=851, + start_line=854, start_column=10, - end_line=851, + end_line=854, end_column=26, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15300,8 +15331,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_plafond_mensualite_d842_6_avec_copropriete = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=851, start_column=10, - end_line=851, end_column=26, + start_line=854, start_column=10, + end_line=854, end_column=26, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15324,8 +15355,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_ressources_menage_arrondies_seuil_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=830, start_column=10, - end_line=830, end_column=15, + start_line=833, start_column=10, + end_line=833, end_column=15, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15351,8 +15382,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_plafond_mensualite_d842_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=848, start_column=11, - end_line=848, end_column=36, + start_line=851, start_column=11, + end_line=851, end_column=36, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15362,8 +15393,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_ressources_menage_arrondies_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=584, start_column=10, - end_line=584, end_column=37, + start_line=587, start_column=10, + end_line=587, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15374,8 +15405,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_condition_2_du_832_25_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=585, start_column=10, - end_line=585, end_column=31, + start_line=588, start_column=10, + end_line=588, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15386,8 +15417,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_equivalence_loyer_minimale_dot_n_nombre_parts_d832_25_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=586, start_column=10, - end_line=586, end_column=32, + start_line=589, start_column=10, + end_line=589, end_column=32, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15403,8 +15434,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_type_logement_foyer_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=603, start_column=10, - end_line=603, end_column=29, + start_line=606, start_column=10, + end_line=606, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15415,8 +15446,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_date_conventionnement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=604, start_column=10, - end_line=604, end_column=31, + start_line=607, start_column=10, + end_line=607, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15427,8 +15458,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_ressources_menage_arrondies_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=605, start_column=10, - end_line=605, end_column=37, + start_line=608, start_column=10, + end_line=608, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15439,8 +15470,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=606, start_column=10, - end_line=606, end_column=35, + start_line=609, start_column=10, + end_line=609, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15451,8 +15482,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=607, start_column=10, - end_line=607, end_column=40, + start_line=610, start_column=10, + end_line=610, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15463,8 +15494,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_zone_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=608, start_column=10, - end_line=608, end_column=14, + start_line=611, start_column=10, + end_line=611, end_column=14, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15475,8 +15506,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=609, start_column=10, - end_line=609, end_column=23, + start_line=612, start_column=10, + end_line=612, end_column=23, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15487,8 +15518,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_calcul_apl_logement_foyer_dot_redevance_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=610, start_column=10, - end_line=610, end_column=19, + start_line=613, start_column=10, + end_line=613, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15575,8 +15606,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_seuil_minimal_depense_nette_minimale_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=853, start_column=11, - end_line=853, end_column=47, + start_line=856, start_column=11, + end_line=856, end_column=47, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15590,8 +15621,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_mensualite_eligible_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=844, start_column=11, - end_line=844, end_column=30, + start_line=847, start_column=11, + end_line=847, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15601,8 +15632,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_mensualite_minimale_10 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=846, start_column=11, - end_line=846, end_column=30, + start_line=849, start_column=11, + end_line=849, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15612,8 +15643,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_coefficient_prise_en_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=847, start_column=11, - end_line=847, end_column=38, + start_line=850, start_column=11, + end_line=850, end_column=38, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15629,9 +15660,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=857, + start_line=860, start_column=11, - end_line=857, + end_line=860, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15639,8 +15670,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_abattement_depense_nette_minimale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=857, start_column=11, - end_line=857, end_column=44, + start_line=860, start_column=11, + end_line=860, end_column=44, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15652,8 +15683,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_aide_finale_formule_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=872, start_column=10, - end_line=872, end_column=29, + start_line=875, start_column=10, + end_line=875, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15672,9 +15703,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac param_37))) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=876, + start_line=879, start_column=10, - end_line=876, + end_line=879, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15682,8 +15713,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_depense_nette_minimale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=876, start_column=10, - end_line=876, end_column=32, + start_line=879, start_column=10, + end_line=879, end_column=32, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15710,9 +15741,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac return money_of_cents_string("0") except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=877, + start_line=880, start_column=10, - end_line=877, + end_line=880, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15720,8 +15751,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_contributions_sociales_arrondi_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=877, start_column=10, - end_line=877, end_column=40, + start_line=880, start_column=10, + end_line=880, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15738,9 +15769,9 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac param_39) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=878, + start_line=881, start_column=10, - end_line=878, + end_line=881, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", @@ -15748,8 +15779,8 @@ def calcul_allocation_logement_accession_propriete(calcul_allocation_logement_ac except EmptyError: temp_traitement_aide_finale_montant_minimal_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=878, start_column=10, - end_line=878, end_column=25, + start_line=881, start_column=10, + end_line=881, end_column=25, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -15790,8 +15821,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_categorie_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=733, start_column=11, - end_line=733, end_column=31, + start_line=736, start_column=11, + end_line=736, end_column=31, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15804,8 +15835,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_ressources_menage_avec_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=727, start_column=10, - end_line=727, end_column=22, + start_line=730, start_column=10, + end_line=730, end_column=22, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15840,8 +15871,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=734, start_column=11, - end_line=734, end_column=41, + start_line=737, start_column=11, + end_line=737, end_column=41, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15868,8 +15899,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_mensualite_principale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=661, start_column=10, - end_line=661, end_column=31, + start_line=664, start_column=10, + end_line=664, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15880,8 +15911,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=662, start_column=10, - end_line=662, end_column=37, + start_line=665, start_column=10, + end_line=665, end_column=37, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15892,8 +15923,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=663, start_column=10, - end_line=663, end_column=35, + start_line=666, start_column=10, + end_line=666, end_column=35, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15904,8 +15935,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=664, start_column=10, - end_line=664, end_column=40, + start_line=667, start_column=10, + end_line=667, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15935,8 +15966,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_type_travaux_logement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=665, start_column=10, - end_line=665, end_column=31, + start_line=668, start_column=10, + end_line=668, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15963,8 +15994,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_date_signature_pret_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=666, start_column=10, - end_line=666, end_column=29, + start_line=669, start_column=10, + end_line=669, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -15991,8 +16022,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=667, start_column=10, - end_line=667, end_column=49, + start_line=670, start_column=10, + end_line=670, end_column=49, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16019,8 +16050,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_date_entree_logement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=668, start_column=10, - end_line=668, end_column=30, + start_line=671, start_column=10, + end_line=671, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16047,8 +16078,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_copropriete_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=669, start_column=10, - end_line=669, end_column=21, + start_line=672, start_column=10, + end_line=672, end_column=21, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16075,8 +16106,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_situation_r822_11_13_17_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=670, start_column=10, - end_line=670, end_column=33, + start_line=673, start_column=10, + end_line=673, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16087,8 +16118,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=671, start_column=10, - end_line=671, end_column=14, + start_line=674, start_column=10, + end_line=674, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16118,8 +16149,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_type_pret_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=672, start_column=10, - end_line=672, end_column=19, + start_line=675, start_column=10, + end_line=675, end_column=19, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16149,8 +16180,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_anciennete_logement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=673, start_column=10, - end_line=673, end_column=29, + start_line=676, start_column=10, + end_line=676, end_column=29, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16161,8 +16192,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_accession_propriete_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=674, start_column=10, - end_line=674, end_column=23, + start_line=677, start_column=10, + end_line=677, end_column=23, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16213,8 +16244,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_type_logement_foyer_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=603, start_column=10, - end_line=603, end_column=29, + start_line=606, start_column=10, + end_line=606, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16241,8 +16272,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_date_conventionnement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=604, start_column=10, - end_line=604, end_column=31, + start_line=607, start_column=10, + end_line=607, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16253,8 +16284,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=605, start_column=10, - end_line=605, end_column=37, + start_line=608, start_column=10, + end_line=608, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16265,8 +16296,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=606, start_column=10, - end_line=606, end_column=35, + start_line=609, start_column=10, + end_line=609, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16277,8 +16308,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=607, start_column=10, - end_line=607, end_column=40, + start_line=610, start_column=10, + end_line=610, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16289,8 +16320,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=608, start_column=10, - end_line=608, end_column=14, + start_line=611, start_column=10, + end_line=611, end_column=14, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16301,8 +16332,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=609, start_column=10, - end_line=609, end_column=23, + start_line=612, start_column=10, + end_line=612, end_column=23, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16329,8 +16360,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_logement_foyer_dot_redevance_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=610, start_column=10, - end_line=610, end_column=19, + start_line=613, start_column=10, + end_line=613, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16386,8 +16417,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_loyer_principal_base_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=526, start_column=10, - end_line=526, end_column=25, + start_line=529, start_column=10, + end_line=529, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16398,8 +16429,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_ressources_menage_arrondies = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=529, start_column=10, - end_line=529, end_column=37, + start_line=532, start_column=10, + end_line=532, end_column=37, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16426,8 +16457,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=530, start_column=10, - end_line=530, end_column=55, + start_line=533, start_column=10, + end_line=533, end_column=55, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16438,8 +16469,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=532, start_column=10, - end_line=532, end_column=23, + start_line=535, start_column=10, + end_line=535, end_column=23, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16450,8 +16481,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=533, start_column=10, - end_line=533, end_column=35, + start_line=536, start_column=10, + end_line=536, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16462,8 +16493,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_situation_familiale_calcul_apl = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=534, start_column=10, - end_line=534, end_column=40, + start_line=537, start_column=10, + end_line=537, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16474,8 +16505,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=535, start_column=10, - end_line=535, end_column=14, + start_line=538, start_column=10, + end_line=538, end_column=14, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16502,8 +16533,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_logement_est_chambre_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=536, start_column=10, - end_line=536, end_column=30, + start_line=539, start_column=10, + end_line=539, end_column=30, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16530,8 +16561,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=537, start_column=10, - end_line=537, end_column=66, + start_line=540, start_column=10, + end_line=540, end_column=66, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16542,8 +16573,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_type_aide = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=539, start_column=10, - end_line=539, end_column=19, + start_line=542, start_column=10, + end_line=542, end_column=19, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16570,8 +16601,8 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_colocation_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=540, start_column=10, - end_line=540, end_column=20, + start_line=543, start_column=10, + end_line=543, end_column=20, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16581,7 +16612,16 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal match_arg_491 = mode_occupation_2 if match_arg_491.code == ModeOccupation_Code.Locataire: location_10 = match_arg_491.value - temp_locatif_dot_reduction_loyer_solidarite = location_10.reduction_loyer_solidarite + match_arg_492 = location_10.bailleur + if match_arg_492.code == TypeBailleur_Code.BailleurSocial: + bailleur = match_arg_492.value + temp_locatif_dot_reduction_loyer_solidarite = bailleur.reduction_loyer_solidarite_percue + elif match_arg_492.code == TypeBailleur_Code.BailleurPriveAvecConventionnementSocial: + _ = match_arg_492.value + temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") + elif match_arg_492.code == TypeBailleur_Code.BailleurPrive: + _ = match_arg_492.value + temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") elif match_arg_491.code == ModeOccupation_Code.ResidentLogementFoyer: _ = match_arg_491.value temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") @@ -16590,7 +16630,16 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") elif match_arg_491.code == ModeOccupation_Code.SousLocataire: location_11 = match_arg_491.value - temp_locatif_dot_reduction_loyer_solidarite = location_11.reduction_loyer_solidarite + match_arg_493 = location_11.bailleur + if match_arg_493.code == TypeBailleur_Code.BailleurSocial: + bailleur_1 = match_arg_493.value + temp_locatif_dot_reduction_loyer_solidarite = bailleur_1.reduction_loyer_solidarite_percue + elif match_arg_493.code == TypeBailleur_Code.BailleurPriveAvecConventionnementSocial: + _ = match_arg_493.value + temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") + elif match_arg_493.code == TypeBailleur_Code.BailleurPrive: + _ = match_arg_493.value + temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") elif match_arg_491.code == ModeOccupation_Code.LocationAccession: _ = match_arg_491.value temp_locatif_dot_reduction_loyer_solidarite = money_of_cents_string("0") @@ -16598,36 +16647,36 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_locatif_dot_reduction_loyer_solidarite_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=541, start_column=10, - end_line=541, end_column=36, + start_line=544, start_column=10, + end_line=544, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) locatif_dot_reduction_loyer_solidarite = temp_locatif_dot_reduction_loyer_solidarite_1 try: - match_arg_492 = mode_occupation_2 - if match_arg_492.code == ModeOccupation_Code.Locataire: - location_12 = match_arg_492.value + match_arg_494 = mode_occupation_2 + if match_arg_494.code == ModeOccupation_Code.Locataire: + location_12 = match_arg_494.value temp_locatif_dot_logement_meuble_d842_2 = location_12.logement_meuble_d842_2 - elif match_arg_492.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_492.value + elif match_arg_494.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_494.value temp_locatif_dot_logement_meuble_d842_2 = False - elif match_arg_492.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_492.value + elif match_arg_494.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_494.value temp_locatif_dot_logement_meuble_d842_2 = False - elif match_arg_492.code == ModeOccupation_Code.SousLocataire: - location_13 = match_arg_492.value + elif match_arg_494.code == ModeOccupation_Code.SousLocataire: + location_13 = match_arg_494.value temp_locatif_dot_logement_meuble_d842_2 = location_13.logement_meuble_d842_2 - elif match_arg_492.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_492.value + elif match_arg_494.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_494.value temp_locatif_dot_logement_meuble_d842_2 = False temp_locatif_dot_logement_meuble_d842_2_1 = temp_locatif_dot_logement_meuble_d842_2 except EmptyError: temp_locatif_dot_logement_meuble_d842_2_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=542, start_column=10, - end_line=542, end_column=32, + start_line=545, start_column=10, + end_line=545, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16656,24 +16705,24 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal try: def temp_traitement_aide_finale_2(param_40:Money): try: - match_arg_493 = categorie_calcul_apl - if match_arg_493.code == CategorieCalculAPL_Code.Location: - _ = match_arg_493.value + match_arg_495 = categorie_calcul_apl + if match_arg_495.code == CategorieCalculAPL_Code.Location: + _ = match_arg_495.value return locatif_dot_traitement_aide_finale_montant_minimal( param_40) - elif match_arg_493.code == CategorieCalculAPL_Code.AccessionPropriete: - _ = match_arg_493.value + elif match_arg_495.code == CategorieCalculAPL_Code.AccessionPropriete: + _ = match_arg_495.value return accession_propriete_dot_traitement_aide_finale_montant_minimal( param_40) - elif match_arg_493.code == CategorieCalculAPL_Code.LogementFoyer: - _ = match_arg_493.value + elif match_arg_495.code == CategorieCalculAPL_Code.LogementFoyer: + _ = match_arg_495.value return logement_foyer_dot_traitement_aide_finale_montant_minimal( param_40) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=742, + start_line=745, start_column=10, - end_line=742, + end_line=745, end_column=32, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", @@ -16682,29 +16731,29 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal except EmptyError: temp_traitement_aide_finale_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=742, start_column=10, - end_line=742, end_column=32, + start_line=745, start_column=10, + end_line=745, end_column=32, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) traitement_aide_finale_1 = temp_traitement_aide_finale_2 try: - match_arg_494 = categorie_calcul_apl - if match_arg_494.code == CategorieCalculAPL_Code.Location: - _ = match_arg_494.value + match_arg_496 = categorie_calcul_apl + if match_arg_496.code == CategorieCalculAPL_Code.Location: + _ = match_arg_496.value temp_aide_finale_formule_7 = locatif_dot_aide_finale_formule - elif match_arg_494.code == CategorieCalculAPL_Code.AccessionPropriete: - _ = match_arg_494.value + elif match_arg_496.code == CategorieCalculAPL_Code.AccessionPropriete: + _ = match_arg_496.value temp_aide_finale_formule_7 = accession_propriete_dot_aide_finale_formule - elif match_arg_494.code == CategorieCalculAPL_Code.LogementFoyer: - _ = match_arg_494.value + elif match_arg_496.code == CategorieCalculAPL_Code.LogementFoyer: + _ = match_arg_496.value temp_aide_finale_formule_7 = logement_foyer_dot_aide_finale_formule except EmptyError: temp_aide_finale_formule_7 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=741, start_column=10, - end_line=741, end_column=29, + start_line=744, start_column=10, + end_line=744, end_column=29, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -16714,6 +16763,7 @@ def calcul_aide_personnalisee_logement(calcul_aide_personnalisee_logement_in:Cal traitement_aide_finale_out = traitement_aide_finale_1) def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:EligibilitePrimeDeDemenagementIn): + informations = eligibilite_prime_de_demenagement_in.informations_in date_emmenagement = eligibilite_prime_de_demenagement_in.date_emmenagement_in menage_1 = eligibilite_prime_de_demenagement_in.menage_in demandeur_1 = eligibilite_prime_de_demenagement_in.demandeur_in @@ -16724,8 +16774,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_delai_apres_emmenagement_l823_8_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=454, start_column=11, - end_line=454, end_column=44, + start_line=457, start_column=11, + end_line=457, end_column=44, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16733,12 +16783,12 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi try: try: def temp_condition_rang_enfant(acc_5:Integer, personne_a_charge_3:Any): - match_arg_495 = personne_a_charge_3 - if match_arg_495.code == PersonneACharge_Code.EnfantACharge: - _ = match_arg_495.value + match_arg_497 = personne_a_charge_3 + if match_arg_497.code == PersonneACharge_Code.EnfantACharge: + _ = match_arg_497.value temp_condition_rang_enfant_1 = True - elif match_arg_495.code == PersonneACharge_Code.AutrePersonneACharge: - _ = match_arg_495.value + elif match_arg_497.code == PersonneACharge_Code.AutrePersonneACharge: + _ = match_arg_497.value temp_condition_rang_enfant_1 = False if temp_condition_rang_enfant_1: return (acc_5 + integer_of_string("1")) @@ -16747,7 +16797,7 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi if ((list_fold_left(temp_condition_rang_enfant, integer_of_string("0"), menage_1.personnes_a_charge) + - menage_1.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse) >= + informations.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse) >= integer_of_string("3")): temp_condition_rang_enfant_2 = True else: @@ -16758,8 +16808,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_condition_rang_enfant_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=451, start_column=11, - end_line=451, end_column=32, + start_line=454, start_column=11, + end_line=454, end_column=32, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16780,8 +16830,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_apl_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=291, start_column=10, - end_line=291, end_column=16, + start_line=287, start_column=10, + end_line=287, end_column=16, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16791,8 +16841,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_apl_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=292, start_column=10, - end_line=292, end_column=19, + start_line=288, start_column=10, + end_line=288, end_column=19, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16802,8 +16852,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_apl_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=293, start_column=17, - end_line=293, end_column=30, + start_line=289, start_column=17, + end_line=289, end_column=30, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16830,24 +16880,24 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi eligibilite_apl_dot_condition_2_r823_4 = result_23.condition_2_r823_4_out try: try: - match_arg_496 = menage_1.date_naissance_troisieme_enfant_ou_dernier_si_plus - if match_arg_496.code == DateNaissanceTroisiemeOuDernierPlusEnfant_Code.MoinsDeTroisEnfants: - _ = match_arg_496.value + match_arg_498 = informations.date_naissance_troisieme_enfant_ou_dernier_si_plus + if match_arg_498.code == DateNaissanceTroisiemeOuDernierPlusEnfant_Code.MoinsDeTroisEnfants: + _ = match_arg_498.value temp_condition_periode_demenagement = False - elif match_arg_496.code == DateNaissanceTroisiemeOuDernierPlusEnfant_Code.PlusDeTroisEnfants: - date_naissance_ou_grossesse = match_arg_496.value - match_arg_497 = date_naissance_ou_grossesse - if match_arg_497.code == DateDeNaissanceOuMoisDeGrossesse_Code.DateDeNaissance: - date_naissance = match_arg_497.value + elif match_arg_498.code == DateNaissanceTroisiemeOuDernierPlusEnfant_Code.PlusDeTroisEnfants: + date_naissance_ou_grossesse = match_arg_498.value + match_arg_499 = date_naissance_ou_grossesse + if match_arg_499.code == DateDeNaissanceOuMoisDeGrossesse_Code.DateDeNaissance: + date_naissance = match_arg_499.value temp_condition_periode_demenagement = (date_courante_12 <= (first_day_of_month((date_naissance + duration_of_numbers(2,0,0))) + duration_of_numbers(0,0,-1))) - elif match_arg_497.code == DateDeNaissanceOuMoisDeGrossesse_Code.AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse: - _ = match_arg_497.value + elif match_arg_499.code == DateDeNaissanceOuMoisDeGrossesse_Code.AvantPremierJourMoisCivilTroisiemeMoisDeGrossesse: + _ = match_arg_499.value temp_condition_periode_demenagement = False - elif match_arg_497.code == DateDeNaissanceOuMoisDeGrossesse_Code.ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse: - _ = match_arg_497.value + elif match_arg_499.code == DateDeNaissanceOuMoisDeGrossesse_Code.ApresPremierJourMoisCivilTroisiemeMoisDeGrossesse: + _ = match_arg_499.value temp_condition_periode_demenagement = True if temp_condition_periode_demenagement: temp_condition_periode_demenagement_1 = True @@ -16859,20 +16909,20 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_condition_periode_demenagement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=452, start_column=11, - end_line=452, end_column=41, + start_line=455, start_column=11, + end_line=455, end_column=41, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) condition_periode_demenagement = temp_condition_periode_demenagement_1 try: def temp_plafond_d823_22(acc_6:Integer, personne_a_charge_4:Any): - match_arg_498 = personne_a_charge_4 - if match_arg_498.code == PersonneACharge_Code.EnfantACharge: - _ = match_arg_498.value + match_arg_500 = personne_a_charge_4 + if match_arg_500.code == PersonneACharge_Code.EnfantACharge: + _ = match_arg_500.value temp_plafond_d823_22_1 = True - elif match_arg_498.code == PersonneACharge_Code.AutrePersonneACharge: - _ = match_arg_498.value + elif match_arg_500.code == PersonneACharge_Code.AutrePersonneACharge: + _ = match_arg_500.value temp_plafond_d823_22_1 = False if temp_plafond_d823_22_1: return (acc_6 + integer_of_string("1")) @@ -16882,12 +16932,12 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi menage_1.personnes_a_charge) > integer_of_string("3")): def temp_plafond_d823_22_2(acc_7:Integer, personne_a_charge_5:Any): - match_arg_499 = personne_a_charge_5 - if match_arg_499.code == PersonneACharge_Code.EnfantACharge: - _ = match_arg_499.value + match_arg_501 = personne_a_charge_5 + if match_arg_501.code == PersonneACharge_Code.EnfantACharge: + _ = match_arg_501.value temp_plafond_d823_22_3 = True - elif match_arg_499.code == PersonneACharge_Code.AutrePersonneACharge: - _ = match_arg_499.value + elif match_arg_501.code == PersonneACharge_Code.AutrePersonneACharge: + _ = match_arg_501.value temp_plafond_d823_22_3 = False if temp_plafond_d823_22_3: return (acc_7 + integer_of_string("1")) @@ -16905,8 +16955,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_plafond_d823_22_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=455, start_column=11, - end_line=455, end_column=26, + start_line=458, start_column=11, + end_line=458, end_column=26, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16927,8 +16977,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_eligibilite_logement_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=453, start_column=11, - end_line=453, end_column=31, + start_line=456, start_column=11, + end_line=456, end_column=31, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16942,8 +16992,8 @@ def eligibilite_prime_de_demenagement(eligibilite_prime_de_demenagement_in:Eligi except EmptyError: temp_montant_prime_demenagement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=461, start_column=10, - end_line=461, end_column=36, + start_line=464, start_column=10, + end_line=464, end_column=36, law_headings=["Éligibilité à la prime de déménagement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -16959,44 +17009,44 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem try: try: try: - match_arg_500 = param_41.type_pret - if match_arg_500.code == TypePret_Code.D331_32: - _ = match_arg_500.value + match_arg_502 = param_41.type_pret + if match_arg_502.code == TypePret_Code.D331_32: + _ = match_arg_502.value temp_caracteristiques_pret_l831_1_1_1 = False - elif match_arg_500.code == TypePret_Code.D331_63_64: - _ = match_arg_500.value + elif match_arg_502.code == TypePret_Code.D331_63_64: + _ = match_arg_502.value temp_caracteristiques_pret_l831_1_1_1 = False - elif match_arg_500.code == TypePret_Code.D331_59_8: - _ = match_arg_500.value + elif match_arg_502.code == TypePret_Code.D331_59_8: + _ = match_arg_502.value temp_caracteristiques_pret_l831_1_1_1 = False - elif match_arg_500.code == TypePret_Code.D331_76_1: - _ = match_arg_500.value + elif match_arg_502.code == TypePret_Code.D331_76_1: + _ = match_arg_502.value temp_caracteristiques_pret_l831_1_1_1 = True - elif match_arg_500.code == TypePret_Code.Autre: - _ = match_arg_500.value + elif match_arg_502.code == TypePret_Code.Autre: + _ = match_arg_502.value temp_caracteristiques_pret_l831_1_1_1 = False - match_arg_501 = param_41.type_pret - if match_arg_501.code == TypePret_Code.D331_32: - _ = match_arg_501.value + match_arg_503 = param_41.type_pret + if match_arg_503.code == TypePret_Code.D331_32: + _ = match_arg_503.value temp_caracteristiques_pret_l831_1_1_2 = False - elif match_arg_501.code == TypePret_Code.D331_63_64: - _ = match_arg_501.value + elif match_arg_503.code == TypePret_Code.D331_63_64: + _ = match_arg_503.value temp_caracteristiques_pret_l831_1_1_2 = False - elif match_arg_501.code == TypePret_Code.D331_59_8: - _ = match_arg_501.value + elif match_arg_503.code == TypePret_Code.D331_59_8: + _ = match_arg_503.value temp_caracteristiques_pret_l831_1_1_2 = True - elif match_arg_501.code == TypePret_Code.D331_76_1: - _ = match_arg_501.value + elif match_arg_503.code == TypePret_Code.D331_76_1: + _ = match_arg_503.value temp_caracteristiques_pret_l831_1_1_2 = False - elif match_arg_501.code == TypePret_Code.Autre: - _ = match_arg_501.value + elif match_arg_503.code == TypePret_Code.Autre: + _ = match_arg_503.value temp_caracteristiques_pret_l831_1_1_2 = False - match_arg_502 = param_41.titulaire_pret - if match_arg_502.code == TitulairePret_Code.Demandeur: - _ = match_arg_502.value + match_arg_504 = param_41.titulaire_pret + if match_arg_504.code == TitulairePret_Code.Demandeur: + _ = match_arg_504.value temp_caracteristiques_pret_l831_1_1_3 = False - elif match_arg_502.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: - _ = match_arg_502.value + elif match_arg_504.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: + _ = match_arg_504.value temp_caracteristiques_pret_l831_1_1_3 = True if (temp_caracteristiques_pret_l831_1_1_3 and (temp_caracteristiques_pret_l831_1_1_2 or @@ -17005,44 +17055,44 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem else: raise EmptyError except EmptyError: - match_arg_503 = param_41.type_pret - if match_arg_503.code == TypePret_Code.D331_32: - _ = match_arg_503.value + match_arg_505 = param_41.type_pret + if match_arg_505.code == TypePret_Code.D331_32: + _ = match_arg_505.value temp_caracteristiques_pret_l831_1_1_4 = False - elif match_arg_503.code == TypePret_Code.D331_63_64: - _ = match_arg_503.value + elif match_arg_505.code == TypePret_Code.D331_63_64: + _ = match_arg_505.value temp_caracteristiques_pret_l831_1_1_4 = True - elif match_arg_503.code == TypePret_Code.D331_59_8: - _ = match_arg_503.value + elif match_arg_505.code == TypePret_Code.D331_59_8: + _ = match_arg_505.value temp_caracteristiques_pret_l831_1_1_4 = False - elif match_arg_503.code == TypePret_Code.D331_76_1: - _ = match_arg_503.value + elif match_arg_505.code == TypePret_Code.D331_76_1: + _ = match_arg_505.value temp_caracteristiques_pret_l831_1_1_4 = False - elif match_arg_503.code == TypePret_Code.Autre: - _ = match_arg_503.value + elif match_arg_505.code == TypePret_Code.Autre: + _ = match_arg_505.value temp_caracteristiques_pret_l831_1_1_4 = False - match_arg_504 = param_41.type_pret - if match_arg_504.code == TypePret_Code.D331_32: - _ = match_arg_504.value + match_arg_506 = param_41.type_pret + if match_arg_506.code == TypePret_Code.D331_32: + _ = match_arg_506.value temp_caracteristiques_pret_l831_1_1_5 = True - elif match_arg_504.code == TypePret_Code.D331_63_64: - _ = match_arg_504.value + elif match_arg_506.code == TypePret_Code.D331_63_64: + _ = match_arg_506.value temp_caracteristiques_pret_l831_1_1_5 = False - elif match_arg_504.code == TypePret_Code.D331_59_8: - _ = match_arg_504.value + elif match_arg_506.code == TypePret_Code.D331_59_8: + _ = match_arg_506.value temp_caracteristiques_pret_l831_1_1_5 = False - elif match_arg_504.code == TypePret_Code.D331_76_1: - _ = match_arg_504.value + elif match_arg_506.code == TypePret_Code.D331_76_1: + _ = match_arg_506.value temp_caracteristiques_pret_l831_1_1_5 = False - elif match_arg_504.code == TypePret_Code.Autre: - _ = match_arg_504.value + elif match_arg_506.code == TypePret_Code.Autre: + _ = match_arg_506.value temp_caracteristiques_pret_l831_1_1_5 = False - match_arg_505 = param_41.titulaire_pret - if match_arg_505.code == TitulairePret_Code.Demandeur: - _ = match_arg_505.value + match_arg_507 = param_41.titulaire_pret + if match_arg_507.code == TitulairePret_Code.Demandeur: + _ = match_arg_507.value temp_caracteristiques_pret_l831_1_1_6 = True - elif match_arg_505.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: - _ = match_arg_505.value + elif match_arg_507.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: + _ = match_arg_507.value temp_caracteristiques_pret_l831_1_1_6 = False if (temp_caracteristiques_pret_l831_1_1_6 and (temp_caracteristiques_pret_l831_1_1_5 or @@ -17054,9 +17104,9 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem return False except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=369, + start_line=365, start_column=11, - end_line=369, + end_line=365, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -17064,8 +17114,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_caracteristiques_pret_l831_1_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=369, start_column=11, - end_line=369, end_column=41, + start_line=365, start_column=11, + end_line=365, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17076,9 +17126,9 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem return False except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=370, + start_line=366, start_column=11, - end_line=370, + end_line=366, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -17086,8 +17136,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_caracteristiques_pret_l831_1_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=370, start_column=11, - end_line=370, end_column=41, + start_line=366, start_column=11, + end_line=366, end_column=41, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17096,81 +17146,95 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem try: try: try: - match_arg_506 = menage_2.logement.mode_occupation - if match_arg_506.code == ModeOccupation_Code.Locataire: - _ = match_arg_506.value + match_arg_508 = menage_2.logement.mode_occupation + if match_arg_508.code == ModeOccupation_Code.Locataire: + _ = match_arg_508.value temp_condition_logement_pret = False - elif match_arg_506.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_506.value + elif match_arg_508.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_508.value temp_condition_logement_pret = False - elif match_arg_506.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - propriete = match_arg_506.value + elif match_arg_508.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + propriete = match_arg_508.value + match_arg_509 = propriete.anciennete_logement + if match_arg_509.code == NeufOuAncien_Code.Neuf: + _ = match_arg_509.value + temp_condition_logement_pret_1 = False + elif match_arg_509.code == NeufOuAncien_Code.Ancien: + _ = match_arg_509.value + temp_condition_logement_pret_1 = True temp_condition_logement_pret = ((propriete.pret.date_signature >= date_of_numbers(2018,1,1)) and ((propriete.pret.date_signature < date_of_numbers(2020,1,1)) and - (propriete.logement_est_ancien_l831_2 and + (temp_condition_logement_pret_1 and propriete.logement_situe_commune_desequilibre_l831_2))) - elif match_arg_506.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_506.value + elif match_arg_508.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_508.value temp_condition_logement_pret = False - elif match_arg_506.code == ModeOccupation_Code.LocationAccession: - propriete_1 = match_arg_506.value + elif match_arg_508.code == ModeOccupation_Code.LocationAccession: + propriete_1 = match_arg_508.value + match_arg_510 = propriete_1.anciennete_logement + if match_arg_510.code == NeufOuAncien_Code.Neuf: + _ = match_arg_510.value + temp_condition_logement_pret_2 = False + elif match_arg_510.code == NeufOuAncien_Code.Ancien: + _ = match_arg_510.value + temp_condition_logement_pret_2 = True temp_condition_logement_pret = ((propriete_1.pret.date_signature >= date_of_numbers(2018,1,1)) and ((propriete_1.pret.date_signature < date_of_numbers(2020,1,1)) and - (propriete_1.logement_est_ancien_l831_2 and + (temp_condition_logement_pret_2 and propriete_1.logement_situe_commune_desequilibre_l831_2))) if temp_condition_logement_pret: - temp_condition_logement_pret_1 = True + temp_condition_logement_pret_3 = True else: - temp_condition_logement_pret_1 = dead_value + temp_condition_logement_pret_3 = dead_value raise EmptyError except EmptyError: - match_arg_507 = menage_2.logement.mode_occupation - if match_arg_507.code == ModeOccupation_Code.Locataire: - _ = match_arg_507.value - temp_condition_logement_pret_2 = False - elif match_arg_507.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_507.value - temp_condition_logement_pret_2 = False - elif match_arg_507.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - propriete_2 = match_arg_507.value - temp_condition_logement_pret_2 = (propriete_2.pret.date_signature >= + match_arg_511 = menage_2.logement.mode_occupation + if match_arg_511.code == ModeOccupation_Code.Locataire: + _ = match_arg_511.value + temp_condition_logement_pret_4 = False + elif match_arg_511.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_511.value + temp_condition_logement_pret_4 = False + elif match_arg_511.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + propriete_2 = match_arg_511.value + temp_condition_logement_pret_4 = (propriete_2.pret.date_signature >= date_of_numbers(2017,12,31)) - elif match_arg_507.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_507.value - temp_condition_logement_pret_2 = False - elif match_arg_507.code == ModeOccupation_Code.LocationAccession: - propriete_3 = match_arg_507.value - temp_condition_logement_pret_2 = (propriete_3.pret.date_signature >= + elif match_arg_511.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_511.value + temp_condition_logement_pret_4 = False + elif match_arg_511.code == ModeOccupation_Code.LocationAccession: + propriete_3 = match_arg_511.value + temp_condition_logement_pret_4 = (propriete_3.pret.date_signature >= date_of_numbers(2017,12,31)) - if temp_condition_logement_pret_2: - temp_condition_logement_pret_1 = False + if temp_condition_logement_pret_4: + temp_condition_logement_pret_3 = False else: - temp_condition_logement_pret_1 = dead_value + temp_condition_logement_pret_3 = dead_value raise EmptyError except EmptyError: - temp_condition_logement_pret_1 = True + temp_condition_logement_pret_3 = True except EmptyError: - temp_condition_logement_pret_1 = False + temp_condition_logement_pret_3 = False except EmptyError: - temp_condition_logement_pret_1 = dead_value + temp_condition_logement_pret_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=368, start_column=11, - end_line=368, end_column=34, + start_line=364, start_column=11, + end_line=364, end_column=34, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - condition_logement_pret = temp_condition_logement_pret_1 + condition_logement_pret = temp_condition_logement_pret_3 try: temp_eligibilite_commune_dot_menage = menage_2 except EmptyError: temp_eligibilite_commune_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=291, start_column=10, - end_line=291, end_column=16, + start_line=287, start_column=10, + end_line=287, end_column=16, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17180,8 +17244,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_commune_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=292, start_column=10, - end_line=292, end_column=19, + start_line=288, start_column=10, + end_line=288, end_column=19, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17191,8 +17255,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_commune_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=293, start_column=17, - end_line=293, end_column=30, + start_line=289, start_column=17, + end_line=289, end_column=30, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17218,214 +17282,149 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem eligibilite_commune_dot_coefficents_enfants_garde_alternee_pris_en_compte = result_24.coefficents_enfants_garde_alternee_pris_en_compte_out eligibilite_commune_dot_condition_2_r823_4 = result_24.condition_2_r823_4_out try: - def temp_condition_logement_bailleur(_:Any): - return False - def temp_condition_logement_bailleur_1(_:Any): - return True - def temp_condition_logement_bailleur_2(_:Any): + try: try: try: - match_arg_508 = menage_2.logement.mode_occupation - if match_arg_508.code == ModeOccupation_Code.Locataire: - _ = match_arg_508.value - temp_condition_logement_bailleur_3 = False - elif match_arg_508.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer = match_arg_508.value - temp_condition_logement_bailleur_3 = logement_foyer.remplit_conditions_r832_21 - elif match_arg_508.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_508.value - temp_condition_logement_bailleur_3 = False - elif match_arg_508.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_508.value - temp_condition_logement_bailleur_3 = False - elif match_arg_508.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_508.value - temp_condition_logement_bailleur_3 = False - if temp_condition_logement_bailleur_3: - return True - else: - raise EmptyError + try: + try: + match_arg_512 = menage_2.logement.mode_occupation + if match_arg_512.code == ModeOccupation_Code.Locataire: + _ = match_arg_512.value + temp_condition_logement_bailleur = False + elif match_arg_512.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer = match_arg_512.value + temp_condition_logement_bailleur = logement_foyer.remplit_conditions_r832_21 + elif match_arg_512.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_512.value + temp_condition_logement_bailleur = False + elif match_arg_512.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_512.value + temp_condition_logement_bailleur = False + elif match_arg_512.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_512.value + temp_condition_logement_bailleur = False + if temp_condition_logement_bailleur: + temp_condition_logement_bailleur_1 = True + else: + temp_condition_logement_bailleur_1 = dead_value + raise EmptyError + except EmptyError: + match_arg_513 = menage_2.logement.mode_occupation + if match_arg_513.code == ModeOccupation_Code.Locataire: + _ = match_arg_513.value + temp_condition_logement_bailleur_2 = False + elif match_arg_513.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_513.value + temp_condition_logement_bailleur_2 = False + elif match_arg_513.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_513.value + temp_condition_logement_bailleur_2 = False + elif match_arg_513.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_513.value + temp_condition_logement_bailleur_2 = False + elif match_arg_513.code == ModeOccupation_Code.LocationAccession: + propriete_4 = match_arg_513.value + temp_condition_logement_bailleur_2 = caracteristiques_pret_l831_1_6( + propriete_4.pret) + if temp_condition_logement_bailleur_2: + temp_condition_logement_bailleur_1 = True + else: + temp_condition_logement_bailleur_1 = dead_value + raise EmptyError + except EmptyError: + match_arg_514 = menage_2.logement.mode_occupation + if match_arg_514.code == ModeOccupation_Code.Locataire: + _ = match_arg_514.value + temp_condition_logement_bailleur_3 = False + elif match_arg_514.code == ModeOccupation_Code.ResidentLogementFoyer: + location_14 = match_arg_514.value + temp_condition_logement_bailleur_3 = location_14.conventionne_livre_III_titre_V_chap_III + elif match_arg_514.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_514.value + temp_condition_logement_bailleur_3 = False + elif match_arg_514.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_514.value + temp_condition_logement_bailleur_3 = False + elif match_arg_514.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_514.value + temp_condition_logement_bailleur_3 = False + if temp_condition_logement_bailleur_3: + temp_condition_logement_bailleur_1 = True + else: + temp_condition_logement_bailleur_1 = dead_value + raise EmptyError except EmptyError: - match_arg_509 = menage_2.logement.mode_occupation - if match_arg_509.code == ModeOccupation_Code.Locataire: - _ = match_arg_509.value - temp_condition_logement_bailleur_4 = False - elif match_arg_509.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_509.value - temp_condition_logement_bailleur_4 = False - elif match_arg_509.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_509.value - temp_condition_logement_bailleur_4 = False - elif match_arg_509.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_509.value - temp_condition_logement_bailleur_4 = False - elif match_arg_509.code == ModeOccupation_Code.LocationAccession: - propriete_4 = match_arg_509.value - temp_condition_logement_bailleur_4 = caracteristiques_pret_l831_1_6( - propriete_4.pret) - if temp_condition_logement_bailleur_4: - return True - else: - raise EmptyError - except EmptyError: - match_arg_510 = menage_2.logement.mode_occupation - if match_arg_510.code == ModeOccupation_Code.Locataire: - _ = match_arg_510.value - temp_condition_logement_bailleur_5 = False - elif match_arg_510.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_510.value - temp_condition_logement_bailleur_5 = False - elif match_arg_510.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - propriete_5 = match_arg_510.value - temp_condition_logement_bailleur_5 = caracteristiques_pret_l831_1_1( - propriete_5.pret) - elif match_arg_510.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_510.value - temp_condition_logement_bailleur_5 = False - elif match_arg_510.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_510.value - temp_condition_logement_bailleur_5 = False - if temp_condition_logement_bailleur_5: - return True - else: - raise EmptyError - def temp_condition_logement_bailleur_6(_:Any): - try: - try: - match_arg_511 = menage_2.logement.mode_occupation - if match_arg_511.code == ModeOccupation_Code.Locataire: - location_14 = match_arg_511.value - match_arg_512 = location_14.bailleur.type_bailleur - if match_arg_512.code == TypeBailleur_Code.BailleurSocial: - _ = match_arg_512.value - temp_condition_logement_bailleur_7 = False - elif match_arg_512.code == TypeBailleur_Code.BailleurPrive: - _ = match_arg_512.value - temp_condition_logement_bailleur_7 = (location_14.bailleur.acquisition_aides_etat_pret_titre_II_ou_livre_III and - location_14.bailleur.respecte_convention_titre_V) - elif match_arg_511.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer_1 = match_arg_511.value - match_arg_513 = logement_foyer_1.bailleur.type_bailleur - if match_arg_513.code == TypeBailleur_Code.BailleurSocial: - _ = match_arg_513.value - temp_condition_logement_bailleur_7 = False - elif match_arg_513.code == TypeBailleur_Code.BailleurPrive: - _ = match_arg_513.value - temp_condition_logement_bailleur_7 = (logement_foyer_1.bailleur.acquisition_aides_etat_pret_titre_II_ou_livre_III and - logement_foyer_1.bailleur.respecte_convention_titre_V) - elif match_arg_511.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_511.value - temp_condition_logement_bailleur_7 = False - elif match_arg_511.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_511.value - temp_condition_logement_bailleur_7 = False - elif match_arg_511.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_511.value - temp_condition_logement_bailleur_7 = False - if temp_condition_logement_bailleur_7: - return True - else: - raise EmptyError - except EmptyError: - match_arg_514 = menage_2.logement.mode_occupation - if match_arg_514.code == ModeOccupation_Code.Locataire: - location_15 = match_arg_514.value - match_arg_515 = location_15.bailleur.type_bailleur - if match_arg_515.code == TypeBailleur_Code.BailleurSocial: - _ = match_arg_515.value - temp_condition_logement_bailleur_8 = (location_15.bailleur.construit_ameliore_conditions_l831_1_4 and - (location_15.bailleur.respecte_convention_titre_V or - location_15.bailleur.respecte_convention_titre_II)) - elif match_arg_515.code == TypeBailleur_Code.BailleurPrive: - _ = match_arg_515.value - temp_condition_logement_bailleur_8 = (location_15.bailleur.construit_ameliore_conditions_l831_1_4 and - (location_15.bailleur.respecte_convention_titre_V or - location_15.bailleur.respecte_convention_titre_II)) - elif match_arg_514.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer_2 = match_arg_514.value - match_arg_516 = logement_foyer_2.bailleur.type_bailleur + match_arg_515 = menage_2.logement.mode_occupation + if match_arg_515.code == ModeOccupation_Code.Locataire: + location_15 = match_arg_515.value + match_arg_516 = location_15.bailleur if match_arg_516.code == TypeBailleur_Code.BailleurSocial: - _ = match_arg_516.value - temp_condition_logement_bailleur_8 = (logement_foyer_2.bailleur.construit_ameliore_conditions_l831_1_4 and - (logement_foyer_2.bailleur.respecte_convention_titre_V or - logement_foyer_2.bailleur.respecte_convention_titre_II)) + convention = match_arg_516.value + temp_condition_logement_bailleur_4 = convention.conventionne_livre_III_titre_V_chap_III + elif match_arg_516.code == TypeBailleur_Code.BailleurPriveAvecConventionnementSocial: + convention_1 = match_arg_516.value + temp_condition_logement_bailleur_4 = convention_1.conventionne_livre_III_titre_II_chap_I_sec_3 elif match_arg_516.code == TypeBailleur_Code.BailleurPrive: _ = match_arg_516.value - temp_condition_logement_bailleur_8 = (logement_foyer_2.bailleur.construit_ameliore_conditions_l831_1_4 and - (logement_foyer_2.bailleur.respecte_convention_titre_V or - logement_foyer_2.bailleur.respecte_convention_titre_II)) - elif match_arg_514.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_514.value - temp_condition_logement_bailleur_8 = False - elif match_arg_514.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_514.value - temp_condition_logement_bailleur_8 = False - elif match_arg_514.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_514.value - temp_condition_logement_bailleur_8 = False - if temp_condition_logement_bailleur_8: - return True + temp_condition_logement_bailleur_4 = False + elif match_arg_515.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_515.value + temp_condition_logement_bailleur_4 = False + elif match_arg_515.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_515.value + temp_condition_logement_bailleur_4 = False + elif match_arg_515.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_515.value + temp_condition_logement_bailleur_4 = False + elif match_arg_515.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_515.value + temp_condition_logement_bailleur_4 = False + if temp_condition_logement_bailleur_4: + temp_condition_logement_bailleur_1 = True else: + temp_condition_logement_bailleur_1 = dead_value raise EmptyError except EmptyError: match_arg_517 = menage_2.logement.mode_occupation if match_arg_517.code == ModeOccupation_Code.Locataire: - location_16 = match_arg_517.value - match_arg_518 = location_16.bailleur.type_bailleur - if match_arg_518.code == TypeBailleur_Code.BailleurSocial: - _ = match_arg_518.value - temp_condition_logement_bailleur_9 = location_16.bailleur.respecte_convention_titre_V - elif match_arg_518.code == TypeBailleur_Code.BailleurPrive: - _ = match_arg_518.value - temp_condition_logement_bailleur_9 = location_16.bailleur.respecte_convention_titre_II - elif match_arg_517.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer_3 = match_arg_517.value - match_arg_519 = logement_foyer_3.bailleur.type_bailleur - if match_arg_519.code == TypeBailleur_Code.BailleurSocial: - _ = match_arg_519.value - temp_condition_logement_bailleur_9 = logement_foyer_3.bailleur.respecte_convention_titre_V - elif match_arg_519.code == TypeBailleur_Code.BailleurPrive: - _ = match_arg_519.value - temp_condition_logement_bailleur_9 = logement_foyer_3.bailleur.respecte_convention_titre_II - elif match_arg_517.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: _ = match_arg_517.value - temp_condition_logement_bailleur_9 = False + temp_condition_logement_bailleur_5 = False + elif match_arg_517.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_517.value + temp_condition_logement_bailleur_5 = False + elif match_arg_517.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + propriete_5 = match_arg_517.value + temp_condition_logement_bailleur_5 = caracteristiques_pret_l831_1_1( + propriete_5.pret) elif match_arg_517.code == ModeOccupation_Code.SousLocataire: _ = match_arg_517.value - temp_condition_logement_bailleur_9 = False + temp_condition_logement_bailleur_5 = False elif match_arg_517.code == ModeOccupation_Code.LocationAccession: _ = match_arg_517.value - temp_condition_logement_bailleur_9 = False - if temp_condition_logement_bailleur_9: - return True + temp_condition_logement_bailleur_5 = False + if temp_condition_logement_bailleur_5: + temp_condition_logement_bailleur_1 = True else: + temp_condition_logement_bailleur_1 = dead_value raise EmptyError - temp_condition_logement_bailleur_10 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=367, - start_column=11, - end_line=367, end_column=38, - law_headings=["Éligibilité à l'aide personnalisée au logement", - "Déclarations des champs d'application", - "Prologue : aides au logement"]), [temp_condition_logement_bailleur_6, - temp_condition_logement_bailleur_2], - temp_condition_logement_bailleur_1, - temp_condition_logement_bailleur) + except EmptyError: + temp_condition_logement_bailleur_1 = False except EmptyError: - temp_condition_logement_bailleur_10 = dead_value + temp_condition_logement_bailleur_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=367, start_column=11, - end_line=367, end_column=38, + start_line=363, start_column=11, + end_line=363, end_column=38, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) - condition_logement_bailleur = temp_condition_logement_bailleur_10 + condition_logement_bailleur = temp_condition_logement_bailleur_1 try: temp_coefficents_enfants_garde_alternee_pris_en_compte_3 = eligibilite_commune_dot_coefficents_enfants_garde_alternee_pris_en_compte except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=376, start_column=10, - end_line=376, end_column=59, + start_line=372, start_column=10, + end_line=372, end_column=59, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17435,8 +17434,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_nombre_personnes_a_charge_prises_en_compte_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=375, start_column=10, - end_line=375, end_column=52, + start_line=371, start_column=10, + end_line=371, end_column=52, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17454,8 +17453,8 @@ def eligibilite_aide_personnalisee_logement(eligibilite_aide_personnalisee_logem except EmptyError: temp_eligibilite_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=374, start_column=10, - end_line=374, end_column=21, + start_line=370, start_column=10, + end_line=370, end_column=21, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17475,8 +17474,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_duree_l841_1_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=408, start_column=11, - end_line=408, end_column=25, + start_line=404, start_column=11, + end_line=404, end_column=25, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17522,42 +17521,42 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili try: try: try: - match_arg_520 = menage_3.logement.mode_occupation - if match_arg_520.code == ModeOccupation_Code.Locataire: - _ = match_arg_520.value + match_arg_518 = menage_3.logement.mode_occupation + if match_arg_518.code == ModeOccupation_Code.Locataire: + _ = match_arg_518.value temp_condition_accession_propriete = False - elif match_arg_520.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_520.value + elif match_arg_518.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_518.value temp_condition_accession_propriete = False - elif match_arg_520.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_18 = match_arg_520.value - match_arg_521 = proprietaire_18.type_travaux_logement_r842_5 - if match_arg_521.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: - _ = match_arg_521.value + elif match_arg_518.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_18 = match_arg_518.value + match_arg_519 = proprietaire_18.type_travaux_logement_r842_5 + if match_arg_519.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: + _ = match_arg_519.value temp_condition_accession_propriete_1 = False - elif match_arg_521.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: - _ = match_arg_521.value + elif match_arg_519.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: + _ = match_arg_519.value temp_condition_accession_propriete_1 = False - elif match_arg_521.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: - _ = match_arg_521.value + elif match_arg_519.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: + _ = match_arg_519.value temp_condition_accession_propriete_1 = True - elif match_arg_521.code == TypeTravauxLogementR8425_Code.PasDeTravaux: - _ = match_arg_521.value + elif match_arg_519.code == TypeTravauxLogementR8425_Code.PasDeTravaux: + _ = match_arg_519.value temp_condition_accession_propriete_1 = False - match_arg_522 = proprietaire_18.pret.titulaire_pret - if match_arg_522.code == TitulairePret_Code.Demandeur: - _ = match_arg_522.value + match_arg_520 = proprietaire_18.pret.titulaire_pret + if match_arg_520.code == TitulairePret_Code.Demandeur: + _ = match_arg_520.value temp_condition_accession_propriete_2 = True - elif match_arg_522.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: - _ = match_arg_522.value + elif match_arg_520.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: + _ = match_arg_520.value temp_condition_accession_propriete_2 = False temp_condition_accession_propriete = (temp_condition_accession_propriete_2 and temp_condition_accession_propriete_1) - elif match_arg_520.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_520.value + elif match_arg_518.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_518.value temp_condition_accession_propriete = False - elif match_arg_520.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_520.value + elif match_arg_518.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_518.value temp_condition_accession_propriete = False if temp_condition_accession_propriete: temp_condition_accession_propriete_3 = True @@ -17565,42 +17564,42 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili temp_condition_accession_propriete_3 = dead_value raise EmptyError except EmptyError: - match_arg_523 = menage_3.logement.mode_occupation - if match_arg_523.code == ModeOccupation_Code.Locataire: - _ = match_arg_523.value + match_arg_521 = menage_3.logement.mode_occupation + if match_arg_521.code == ModeOccupation_Code.Locataire: + _ = match_arg_521.value temp_condition_accession_propriete_4 = False - elif match_arg_523.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_523.value + elif match_arg_521.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_521.value temp_condition_accession_propriete_4 = False - elif match_arg_523.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_19 = match_arg_523.value - match_arg_524 = proprietaire_19.type_travaux_logement_r842_5 - if match_arg_524.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: - _ = match_arg_524.value + elif match_arg_521.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_19 = match_arg_521.value + match_arg_522 = proprietaire_19.type_travaux_logement_r842_5 + if match_arg_522.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: + _ = match_arg_522.value temp_condition_accession_propriete_5 = False - elif match_arg_524.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: - _ = match_arg_524.value + elif match_arg_522.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: + _ = match_arg_522.value temp_condition_accession_propriete_5 = True - elif match_arg_524.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: - _ = match_arg_524.value + elif match_arg_522.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: + _ = match_arg_522.value temp_condition_accession_propriete_5 = False - elif match_arg_524.code == TypeTravauxLogementR8425_Code.PasDeTravaux: - _ = match_arg_524.value + elif match_arg_522.code == TypeTravauxLogementR8425_Code.PasDeTravaux: + _ = match_arg_522.value temp_condition_accession_propriete_5 = False - match_arg_525 = proprietaire_19.pret.titulaire_pret - if match_arg_525.code == TitulairePret_Code.Demandeur: - _ = match_arg_525.value + match_arg_523 = proprietaire_19.pret.titulaire_pret + if match_arg_523.code == TitulairePret_Code.Demandeur: + _ = match_arg_523.value temp_condition_accession_propriete_6 = True - elif match_arg_525.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: - _ = match_arg_525.value + elif match_arg_523.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: + _ = match_arg_523.value temp_condition_accession_propriete_6 = False temp_condition_accession_propriete_4 = (temp_condition_accession_propriete_6 and temp_condition_accession_propriete_5) - elif match_arg_523.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_523.value + elif match_arg_521.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_521.value temp_condition_accession_propriete_4 = False - elif match_arg_523.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_523.value + elif match_arg_521.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_521.value temp_condition_accession_propriete_4 = False if temp_condition_accession_propriete_4: temp_condition_accession_propriete_3 = True @@ -17608,56 +17607,56 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili temp_condition_accession_propriete_3 = dead_value raise EmptyError except EmptyError: - match_arg_526 = menage_3.logement.mode_occupation - if match_arg_526.code == ModeOccupation_Code.Locataire: - _ = match_arg_526.value + match_arg_524 = menage_3.logement.mode_occupation + if match_arg_524.code == ModeOccupation_Code.Locataire: + _ = match_arg_524.value temp_condition_accession_propriete_7 = False - elif match_arg_526.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_526.value + elif match_arg_524.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_524.value temp_condition_accession_propriete_7 = False - elif match_arg_526.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_20 = match_arg_526.value - match_arg_527 = proprietaire_20.type_travaux_logement_r842_5 - if match_arg_527.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: - _ = match_arg_527.value + elif match_arg_524.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_20 = match_arg_524.value + match_arg_525 = proprietaire_20.type_travaux_logement_r842_5 + if match_arg_525.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: + _ = match_arg_525.value temp_condition_accession_propriete_8 = True - elif match_arg_527.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: - _ = match_arg_527.value + elif match_arg_525.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: + _ = match_arg_525.value temp_condition_accession_propriete_8 = False - elif match_arg_527.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: - _ = match_arg_527.value + elif match_arg_525.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: + _ = match_arg_525.value temp_condition_accession_propriete_8 = False - elif match_arg_527.code == TypeTravauxLogementR8425_Code.PasDeTravaux: - _ = match_arg_527.value + elif match_arg_525.code == TypeTravauxLogementR8425_Code.PasDeTravaux: + _ = match_arg_525.value temp_condition_accession_propriete_8 = False - match_arg_528 = proprietaire_20.type_travaux_logement_r842_5 - if match_arg_528.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: - _ = match_arg_528.value + match_arg_526 = proprietaire_20.type_travaux_logement_r842_5 + if match_arg_526.code == TypeTravauxLogementR8425_Code.ObjectifDecenceLogement: + _ = match_arg_526.value temp_condition_accession_propriete_9 = False - elif match_arg_528.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: - _ = match_arg_528.value + elif match_arg_526.code == TypeTravauxLogementR8425_Code.PrevuDansListeR321_15: + _ = match_arg_526.value temp_condition_accession_propriete_9 = False - elif match_arg_528.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: - _ = match_arg_528.value + elif match_arg_526.code == TypeTravauxLogementR8425_Code.AgrandirOuRendreHabitableD331_63: + _ = match_arg_526.value temp_condition_accession_propriete_9 = False - elif match_arg_528.code == TypeTravauxLogementR8425_Code.PasDeTravaux: - _ = match_arg_528.value + elif match_arg_526.code == TypeTravauxLogementR8425_Code.PasDeTravaux: + _ = match_arg_526.value temp_condition_accession_propriete_9 = True - match_arg_529 = proprietaire_20.pret.titulaire_pret - if match_arg_529.code == TitulairePret_Code.Demandeur: - _ = match_arg_529.value + match_arg_527 = proprietaire_20.pret.titulaire_pret + if match_arg_527.code == TitulairePret_Code.Demandeur: + _ = match_arg_527.value temp_condition_accession_propriete_10 = True - elif match_arg_529.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: - _ = match_arg_529.value + elif match_arg_527.code == TitulairePret_Code.VendeurQuandDemandeurAContratLocationAccession: + _ = match_arg_527.value temp_condition_accession_propriete_10 = False temp_condition_accession_propriete_7 = (temp_condition_accession_propriete_10 and (temp_condition_accession_propriete_9 or temp_condition_accession_propriete_8)) - elif match_arg_526.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_526.value + elif match_arg_524.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_524.value temp_condition_accession_propriete_7 = False - elif match_arg_526.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_526.value + elif match_arg_524.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_524.value temp_condition_accession_propriete_7 = False if temp_condition_accession_propriete_7: temp_condition_accession_propriete_3 = True @@ -17665,21 +17664,21 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili temp_condition_accession_propriete_3 = dead_value raise EmptyError except EmptyError: - match_arg_530 = menage_3.logement.mode_occupation - if match_arg_530.code == ModeOccupation_Code.Locataire: - _ = match_arg_530.value + match_arg_528 = menage_3.logement.mode_occupation + if match_arg_528.code == ModeOccupation_Code.Locataire: + _ = match_arg_528.value temp_condition_accession_propriete_11 = True - elif match_arg_530.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_530.value + elif match_arg_528.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_528.value temp_condition_accession_propriete_11 = True - elif match_arg_530.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_530.value + elif match_arg_528.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_528.value temp_condition_accession_propriete_11 = False - elif match_arg_530.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_530.value + elif match_arg_528.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_528.value temp_condition_accession_propriete_11 = True - elif match_arg_530.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_530.value + elif match_arg_528.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_528.value temp_condition_accession_propriete_11 = True if temp_condition_accession_propriete_11: temp_condition_accession_propriete_3 = True @@ -17691,8 +17690,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_condition_accession_propriete_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=405, start_column=11, - end_line=405, end_column=40, + start_line=401, start_column=11, + end_line=401, end_column=40, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17702,8 +17701,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_commune_dot_menage_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=291, start_column=10, - end_line=291, end_column=16, + start_line=287, start_column=10, + end_line=287, end_column=16, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17713,8 +17712,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_commune_dot_demandeur_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=292, start_column=10, - end_line=292, end_column=19, + start_line=288, start_column=10, + end_line=288, end_column=19, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17724,28 +17723,28 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_commune_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=293, start_column=17, - end_line=293, end_column=30, + start_line=289, start_column=17, + end_line=289, end_column=30, law_headings=["Éligibilité aux aides personnelles au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) eligibilite_commune_dot_date_courante_2 = temp_eligibilite_commune_dot_date_courante_1 def temp_eligibilite_commune_dot_condition_logement_residence_principale_2(_:Unit): - match_arg_531 = menage_3.logement.mode_occupation - if match_arg_531.code == ModeOccupation_Code.Locataire: - _ = match_arg_531.value + match_arg_529 = menage_3.logement.mode_occupation + if match_arg_529.code == ModeOccupation_Code.Locataire: + _ = match_arg_529.value temp_eligibilite_commune_dot_condition_logement_residence_principale_3 = False - elif match_arg_531.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer_4 = match_arg_531.value - temp_eligibilite_commune_dot_condition_logement_residence_principale_3 = logement_foyer_4.construit_application_loi_1957_12_III - elif match_arg_531.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_531.value + elif match_arg_529.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer_1 = match_arg_529.value + temp_eligibilite_commune_dot_condition_logement_residence_principale_3 = logement_foyer_1.construit_application_loi_1957_12_III + elif match_arg_529.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_529.value temp_eligibilite_commune_dot_condition_logement_residence_principale_3 = False - elif match_arg_531.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_531.value + elif match_arg_529.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_529.value temp_eligibilite_commune_dot_condition_logement_residence_principale_3 = False - elif match_arg_531.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_531.value + elif match_arg_529.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_529.value temp_eligibilite_commune_dot_condition_logement_residence_principale_3 = False if temp_eligibilite_commune_dot_condition_logement_residence_principale_3: temp_eligibilite_commune_dot_condition_logement_residence_principale_4 = True @@ -17755,21 +17754,21 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili return temp_eligibilite_commune_dot_condition_logement_residence_principale_4 eligibilite_commune_dot_condition_logement_residence_principale_1 = temp_eligibilite_commune_dot_condition_logement_residence_principale_2 def temp_eligibilite_commune_dot_condition_logement_surface_2(_:Unit): - match_arg_532 = menage_3.logement.mode_occupation - if match_arg_532.code == ModeOccupation_Code.Locataire: - _ = match_arg_532.value + match_arg_530 = menage_3.logement.mode_occupation + if match_arg_530.code == ModeOccupation_Code.Locataire: + _ = match_arg_530.value temp_eligibilite_commune_dot_condition_logement_surface_3 = False - elif match_arg_532.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer_5 = match_arg_532.value - temp_eligibilite_commune_dot_condition_logement_surface_3 = logement_foyer_5.construit_application_loi_1957_12_III - elif match_arg_532.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_532.value + elif match_arg_530.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer_2 = match_arg_530.value + temp_eligibilite_commune_dot_condition_logement_surface_3 = logement_foyer_2.construit_application_loi_1957_12_III + elif match_arg_530.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_530.value temp_eligibilite_commune_dot_condition_logement_surface_3 = False - elif match_arg_532.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_532.value + elif match_arg_530.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_530.value temp_eligibilite_commune_dot_condition_logement_surface_3 = False - elif match_arg_532.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_532.value + elif match_arg_530.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_530.value temp_eligibilite_commune_dot_condition_logement_surface_3 = False if temp_eligibilite_commune_dot_condition_logement_surface_3: temp_eligibilite_commune_dot_condition_logement_surface_4 = True @@ -17793,8 +17792,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=418, start_column=10, - end_line=418, end_column=59, + start_line=414, start_column=10, + end_line=414, end_column=59, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17804,8 +17803,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_nombre_personnes_a_charge_prises_en_compte_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=417, start_column=10, - end_line=417, end_column=52, + start_line=413, start_column=10, + end_line=413, end_column=52, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17821,8 +17820,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_dispositions_communes = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=415, start_column=10, - end_line=415, end_column=31, + start_line=411, start_column=10, + end_line=411, end_column=31, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -17833,26 +17832,26 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili try: try: try: - match_arg_533 = menage_3.situation_familiale - if match_arg_533.code == SituationFamiliale_Code.Celibataire: - _ = match_arg_533.value + match_arg_531 = menage_3.situation_familiale + if match_arg_531.code == SituationFamiliale_Code.Celibataire: + _ = match_arg_531.value temp_eligibilite_allocation_logement_familiale = ((list_length(menage_3.personnes_a_charge) == integer_of_string("0")) and menage_3.enfant_a_naitre_apres_quatrieme_mois_grossesse) - elif match_arg_533.code == SituationFamiliale_Code.Maries: - _ = match_arg_533.value + elif match_arg_531.code == SituationFamiliale_Code.Maries: + _ = match_arg_531.value temp_eligibilite_allocation_logement_familiale = False - elif match_arg_533.code == SituationFamiliale_Code.Pacses: - _ = match_arg_533.value + elif match_arg_531.code == SituationFamiliale_Code.Pacses: + _ = match_arg_531.value temp_eligibilite_allocation_logement_familiale = False - elif match_arg_533.code == SituationFamiliale_Code.Concubins: - _ = match_arg_533.value + elif match_arg_531.code == SituationFamiliale_Code.Concubins: + _ = match_arg_531.value temp_eligibilite_allocation_logement_familiale = False - elif match_arg_533.code == SituationFamiliale_Code.CelibataireSepareDeFait: - _ = match_arg_533.value + elif match_arg_531.code == SituationFamiliale_Code.CelibataireSepareDeFait: + _ = match_arg_531.value temp_eligibilite_allocation_logement_familiale = False - elif match_arg_533.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: - _ = match_arg_533.value + elif match_arg_531.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: + _ = match_arg_531.value temp_eligibilite_allocation_logement_familiale = False if temp_eligibilite_allocation_logement_familiale: temp_eligibilite_allocation_logement_familiale_1 = True @@ -17862,12 +17861,12 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: try: def temp_eligibilite_allocation_logement_familiale_2(acc_8:Integer, personne_a_charge_6:Any): - match_arg_534 = personne_a_charge_6 - if match_arg_534.code == PersonneACharge_Code.EnfantACharge: - enfant_5 = match_arg_534.value + match_arg_532 = personne_a_charge_6 + if match_arg_532.code == PersonneACharge_Code.EnfantACharge: + enfant_5 = match_arg_532.value temp_eligibilite_allocation_logement_familiale_3 = False - elif match_arg_534.code == PersonneACharge_Code.AutrePersonneACharge: - parent_3 = match_arg_534.value + elif match_arg_532.code == PersonneACharge_Code.AutrePersonneACharge: + parent_3 = match_arg_532.value temp_eligibilite_allocation_logement_familiale_3 = (parent_3.ascendant_descendant_collateral_deuxieme_troisieme_degre and parent_3.incapacite_80_pourcent_ou_restriction_emploi) if temp_eligibilite_allocation_logement_familiale_3: @@ -17900,41 +17899,37 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili temp_eligibilite_allocation_logement_familiale_1 = dead_value raise EmptyError except EmptyError: - match_arg_535 = menage_3.situation_familiale - if match_arg_535.code == SituationFamiliale_Code.Celibataire: - _ = match_arg_535.value + match_arg_533 = menage_3.situation_familiale + if match_arg_533.code == SituationFamiliale_Code.Celibataire: + _ = match_arg_533.value temp_eligibilite_allocation_logement_familiale_5 = False - elif match_arg_535.code == SituationFamiliale_Code.Maries: - date_mariage = match_arg_535.value + elif match_arg_533.code == SituationFamiliale_Code.Maries: + date_mariage = match_arg_533.value temp_eligibilite_allocation_logement_familiale_5 = (date_courante_14 <= (date_mariage + duree_l841_1_3)) - elif match_arg_535.code == SituationFamiliale_Code.Pacses: - _ = match_arg_535.value + elif match_arg_533.code == SituationFamiliale_Code.Pacses: + _ = match_arg_533.value temp_eligibilite_allocation_logement_familiale_5 = False - elif match_arg_535.code == SituationFamiliale_Code.Concubins: - _ = match_arg_535.value + elif match_arg_533.code == SituationFamiliale_Code.Concubins: + _ = match_arg_533.value temp_eligibilite_allocation_logement_familiale_5 = False - elif match_arg_535.code == SituationFamiliale_Code.CelibataireSepareDeFait: - _ = match_arg_535.value + elif match_arg_533.code == SituationFamiliale_Code.CelibataireSepareDeFait: + _ = match_arg_533.value temp_eligibilite_allocation_logement_familiale_5 = False - elif match_arg_535.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: - _ = match_arg_535.value + elif match_arg_533.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: + _ = match_arg_533.value temp_eligibilite_allocation_logement_familiale_5 = False def temp_eligibilite_allocation_logement_familiale_6(acc_10:Integer, personne_a_charge_8:Any): - match_arg_536 = personne_a_charge_8 - if match_arg_536.code == PersonneACharge_Code.EnfantACharge: - enfant_6 = match_arg_536.value - match_arg_537 = enfant_6.prise_en_charge - if match_arg_537.code == PriseEnCharge_Code.EffectiveEtPermanente: - _ = match_arg_537.value + match_arg_534 = personne_a_charge_8 + if match_arg_534.code == PersonneACharge_Code.EnfantACharge: + enfant_6 = match_arg_534.value + match_arg_535 = enfant_6.situation_garde_alternee + if match_arg_535.code == SituationGardeAlternee_Code.PasDeGardeAlternee: + _ = match_arg_535.value temp_eligibilite_allocation_logement_familiale_7 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.EffectiveEtPermanente, Unit()) - elif match_arg_537.code == PriseEnCharge_Code.ResidenceAlterneeAllocataireUnique: - _ = match_arg_537.value - temp_eligibilite_allocation_logement_familiale_7 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneeAllocataireUnique, - Unit()) - elif match_arg_537.code == PriseEnCharge_Code.ResidenceAlterneeAllocationsPartagee: - _ = match_arg_537.value + elif match_arg_535.code == SituationGardeAlternee_Code.GardeAlterneeCoefficientPriseEnCharge: + _ = match_arg_535.value temp_eligibilite_allocation_logement_familiale_7 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneePartageAllocations, Unit()) temp_eligibilite_allocation_logement_familiale_8 = not prestations_familiales_dot_droit_ouvert( @@ -17945,8 +17940,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili prise_en_charge = temp_eligibilite_allocation_logement_familiale_7, a_deja_ouvert_droit_aux_allocations_familiales = enfant_6.a_deja_ouvert_droit_aux_allocations_familiales, beneficie_titre_personnel_aide_personnelle_logement = enfant_6.beneficie_titre_personnel_aide_personnelle_logement)) - elif match_arg_536.code == PersonneACharge_Code.AutrePersonneACharge: - _ = match_arg_536.value + elif match_arg_534.code == PersonneACharge_Code.AutrePersonneACharge: + _ = match_arg_534.value temp_eligibilite_allocation_logement_familiale_8 = False if temp_eligibilite_allocation_logement_familiale_8: return (acc_10 + integer_of_string("1")) @@ -17963,20 +17958,16 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili raise EmptyError except EmptyError: def temp_eligibilite_allocation_logement_familiale_9(acc_11:Integer, personne_a_charge_9:Any): - match_arg_538 = personne_a_charge_9 - if match_arg_538.code == PersonneACharge_Code.EnfantACharge: - enfant_7 = match_arg_538.value - match_arg_539 = enfant_7.prise_en_charge - if match_arg_539.code == PriseEnCharge_Code.EffectiveEtPermanente: - _ = match_arg_539.value + match_arg_536 = personne_a_charge_9 + if match_arg_536.code == PersonneACharge_Code.EnfantACharge: + enfant_7 = match_arg_536.value + match_arg_537 = enfant_7.situation_garde_alternee + if match_arg_537.code == SituationGardeAlternee_Code.PasDeGardeAlternee: + _ = match_arg_537.value temp_eligibilite_allocation_logement_familiale_10 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.EffectiveEtPermanente, Unit()) - elif match_arg_539.code == PriseEnCharge_Code.ResidenceAlterneeAllocataireUnique: - _ = match_arg_539.value - temp_eligibilite_allocation_logement_familiale_10 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneeAllocataireUnique, - Unit()) - elif match_arg_539.code == PriseEnCharge_Code.ResidenceAlterneeAllocationsPartagee: - _ = match_arg_539.value + elif match_arg_537.code == SituationGardeAlternee_Code.GardeAlterneeCoefficientPriseEnCharge: + _ = match_arg_537.value temp_eligibilite_allocation_logement_familiale_10 = PriseEnChargeEnfant(PriseEnChargeEnfant_Code.GardeAlterneePartageAllocations, Unit()) temp_eligibilite_allocation_logement_familiale_11 = prestations_familiales_dot_droit_ouvert( @@ -17987,8 +17978,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili prise_en_charge = temp_eligibilite_allocation_logement_familiale_10, a_deja_ouvert_droit_aux_allocations_familiales = enfant_7.a_deja_ouvert_droit_aux_allocations_familiales, beneficie_titre_personnel_aide_personnelle_logement = enfant_7.beneficie_titre_personnel_aide_personnelle_logement)) - elif match_arg_538.code == PersonneACharge_Code.AutrePersonneACharge: - _ = match_arg_538.value + elif match_arg_536.code == PersonneACharge_Code.AutrePersonneACharge: + _ = match_arg_536.value temp_eligibilite_allocation_logement_familiale_11 = False if temp_eligibilite_allocation_logement_familiale_11: return (acc_11 + integer_of_string("1")) @@ -18024,8 +18015,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_allocation_logement_familiale_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=407, start_column=11, - end_line=407, end_column=52, + start_line=403, start_column=11, + end_line=403, end_column=52, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18037,22 +18028,22 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili def temp_eligibilite_l841_2_1(_:Any): return False def temp_eligibilite_l841_2_2(_:Any): - match_arg_540 = menage_3.logement.mode_occupation - if match_arg_540.code == ModeOccupation_Code.Locataire: - _ = match_arg_540.value + match_arg_538 = menage_3.logement.mode_occupation + if match_arg_538.code == ModeOccupation_Code.Locataire: + _ = match_arg_538.value temp_eligibilite_l841_2_3 = False - elif match_arg_540.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_540.value + elif match_arg_538.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_538.value temp_eligibilite_l841_2_3 = False - elif match_arg_540.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_21 = match_arg_540.value + elif match_arg_538.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_21 = match_arg_538.value temp_eligibilite_l841_2_3 = (proprietaire_21.pret.date_signature > date_of_numbers(2017,12,31)) - elif match_arg_540.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_540.value + elif match_arg_538.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_538.value temp_eligibilite_l841_2_3 = False - elif match_arg_540.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_540.value + elif match_arg_538.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_538.value temp_eligibilite_l841_2_3 = False if temp_eligibilite_l841_2_3: return EligibiliteAllocationLogement(EligibiliteAllocationLogement_Code.PasEligible, @@ -18066,9 +18057,9 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili else: raise EmptyError temp_eligibilite_l841_2_5 = handle_default(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=416, + start_line=412, start_column=10, - end_line=416, end_column=16, + end_line=412, end_column=16, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"]), [temp_eligibilite_l841_2_4, @@ -18092,8 +18083,8 @@ def eligibilite_allocation_logement(eligibilite_allocation_logement_in:Eligibili except EmptyError: temp_eligibilite_l841_2_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=416, start_column=10, - end_line=416, end_column=16, + start_line=412, start_column=10, + end_line=412, end_column=16, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -18111,32 +18102,32 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog date_courante_15 = calcul_allocation_logement_in.date_courante_in type_aide_3 = calcul_allocation_logement_in.type_aide_in try: - match_arg_541 = mode_occupation_3 - if match_arg_541.code == ModeOccupation_Code.Locataire: - _ = match_arg_541.value + match_arg_539 = mode_occupation_3 + if match_arg_539.code == ModeOccupation_Code.Locataire: + _ = match_arg_539.value temp_categorie_calcul_apl_1 = CategorieCalculAPL(CategorieCalculAPL_Code.Location, Unit()) - elif match_arg_541.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_541.value + elif match_arg_539.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_539.value temp_categorie_calcul_apl_1 = CategorieCalculAPL(CategorieCalculAPL_Code.LogementFoyer, Unit()) - elif match_arg_541.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_541.value + elif match_arg_539.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_539.value temp_categorie_calcul_apl_1 = CategorieCalculAPL(CategorieCalculAPL_Code.AccessionPropriete, Unit()) - elif match_arg_541.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_541.value + elif match_arg_539.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_539.value temp_categorie_calcul_apl_1 = CategorieCalculAPL(CategorieCalculAPL_Code.Location, Unit()) - elif match_arg_541.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_541.value + elif match_arg_539.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_539.value temp_categorie_calcul_apl_1 = CategorieCalculAPL(CategorieCalculAPL_Code.AccessionPropriete, Unit()) except EmptyError: temp_categorie_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=981, start_column=11, - end_line=981, end_column=31, + start_line=984, start_column=11, + end_line=984, end_column=31, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -18149,44 +18140,44 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_ressources_menage_avec_arrondi_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=974, start_column=10, - end_line=974, end_column=22, + start_line=977, start_column=10, + end_line=977, end_column=22, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) ressources_menage_avec_arrondi_1 = temp_ressources_menage_avec_arrondi_1 try: - match_arg_542 = situation_familiale_2 - if match_arg_542.code == SituationFamiliale_Code.Celibataire: - _ = match_arg_542.value + match_arg_540 = situation_familiale_2 + if match_arg_540.code == SituationFamiliale_Code.Celibataire: + _ = match_arg_540.value temp_situation_familiale_calcul_apl_1 = SituationFamilialeCalculAPL(SituationFamilialeCalculAPL_Code.PersonneSeule, Unit()) - elif match_arg_542.code == SituationFamiliale_Code.Maries: - _ = match_arg_542.value + elif match_arg_540.code == SituationFamiliale_Code.Maries: + _ = match_arg_540.value temp_situation_familiale_calcul_apl_1 = SituationFamilialeCalculAPL(SituationFamilialeCalculAPL_Code.Couple, Unit()) - elif match_arg_542.code == SituationFamiliale_Code.Pacses: - _ = match_arg_542.value + elif match_arg_540.code == SituationFamiliale_Code.Pacses: + _ = match_arg_540.value temp_situation_familiale_calcul_apl_1 = SituationFamilialeCalculAPL(SituationFamilialeCalculAPL_Code.Couple, Unit()) - elif match_arg_542.code == SituationFamiliale_Code.Concubins: - _ = match_arg_542.value + elif match_arg_540.code == SituationFamiliale_Code.Concubins: + _ = match_arg_540.value temp_situation_familiale_calcul_apl_1 = SituationFamilialeCalculAPL(SituationFamilialeCalculAPL_Code.Couple, Unit()) - elif match_arg_542.code == SituationFamiliale_Code.CelibataireSepareDeFait: - _ = match_arg_542.value + elif match_arg_540.code == SituationFamiliale_Code.CelibataireSepareDeFait: + _ = match_arg_540.value temp_situation_familiale_calcul_apl_1 = SituationFamilialeCalculAPL(SituationFamilialeCalculAPL_Code.PersonneSeule, Unit()) - elif match_arg_542.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: - _ = match_arg_542.value + elif match_arg_540.code == SituationFamiliale_Code.ConcubinageDontSepareDeFait: + _ = match_arg_540.value temp_situation_familiale_calcul_apl_1 = SituationFamilialeCalculAPL(SituationFamilialeCalculAPL_Code.Couple, Unit()) except EmptyError: temp_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=982, start_column=11, - end_line=982, end_column=41, + start_line=985, start_column=11, + end_line=985, end_column=41, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -18197,8 +18188,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_accession_propriete_dot_ressources_menage_arrondies_base = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=828, start_column=10, - end_line=828, end_column=37, + start_line=831, start_column=10, + end_line=831, end_column=37, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18208,8 +18199,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_accession_propriete_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=831, start_column=10, - end_line=831, end_column=35, + start_line=834, start_column=10, + end_line=834, end_column=35, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18219,8 +18210,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_accession_propriete_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=832, start_column=10, - end_line=832, end_column=40, + start_line=835, start_column=10, + end_line=835, end_column=40, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18230,8 +18221,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_accession_propriete_dot_zone_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=833, start_column=10, - end_line=833, end_column=14, + start_line=836, start_column=10, + end_line=836, end_column=14, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18241,227 +18232,227 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_accession_propriete_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=834, start_column=10, - end_line=834, end_column=23, + start_line=837, start_column=10, + end_line=837, end_column=23, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) accession_propriete_dot_date_courante_1 = temp_accession_propriete_dot_date_courante_1 try: - match_arg_543 = mode_occupation_3 - if match_arg_543.code == ModeOccupation_Code.Locataire: - _ = match_arg_543.value + match_arg_541 = mode_occupation_3 + if match_arg_541.code == ModeOccupation_Code.Locataire: + _ = match_arg_541.value temp_accession_propriete_dot_mensualite_principale_2 = money_of_cents_string("0") - elif match_arg_543.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_543.value + elif match_arg_541.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_541.value temp_accession_propriete_dot_mensualite_principale_2 = money_of_cents_string("0") - elif match_arg_543.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_22 = match_arg_543.value + elif match_arg_541.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_22 = match_arg_541.value temp_accession_propriete_dot_mensualite_principale_2 = proprietaire_22.mensualite_principale - elif match_arg_543.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_543.value + elif match_arg_541.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_541.value temp_accession_propriete_dot_mensualite_principale_2 = money_of_cents_string("0") - elif match_arg_543.code == ModeOccupation_Code.LocationAccession: - proprietaire_23 = match_arg_543.value + elif match_arg_541.code == ModeOccupation_Code.LocationAccession: + proprietaire_23 = match_arg_541.value temp_accession_propriete_dot_mensualite_principale_2 = proprietaire_23.mensualite_principale temp_accession_propriete_dot_mensualite_principale_3 = temp_accession_propriete_dot_mensualite_principale_2 except EmptyError: temp_accession_propriete_dot_mensualite_principale_3 = dead_value - raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=835, start_column=10, - end_line=835, end_column=31, - law_headings=["Secteur accession à la propriété", - "Calcul du montant de l'allocation logement", - "Prologue : aides au logement"])) - accession_propriete_dot_mensualite_principale_1 = temp_accession_propriete_dot_mensualite_principale_3 - try: - match_arg_544 = mode_occupation_3 - if match_arg_544.code == ModeOccupation_Code.Locataire: - _ = match_arg_544.value - temp_accession_propriete_dot_situation_r822_11_13_17_2 = False - elif match_arg_544.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_544.value - temp_accession_propriete_dot_situation_r822_11_13_17_2 = False - elif match_arg_544.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_24 = match_arg_544.value - temp_accession_propriete_dot_situation_r822_11_13_17_2 = proprietaire_24.situation_r822_11_13_17 - elif match_arg_544.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_544.value - temp_accession_propriete_dot_situation_r822_11_13_17_2 = False - elif match_arg_544.code == ModeOccupation_Code.LocationAccession: - proprietaire_25 = match_arg_544.value - temp_accession_propriete_dot_situation_r822_11_13_17_2 = proprietaire_25.situation_r822_11_13_17 - temp_accession_propriete_dot_situation_r822_11_13_17_3 = temp_accession_propriete_dot_situation_r822_11_13_17_2 - except EmptyError: - temp_accession_propriete_dot_situation_r822_11_13_17_3 = dead_value - raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=836, start_column=10, - end_line=836, end_column=33, - law_headings=["Secteur accession à la propriété", - "Calcul du montant de l'allocation logement", - "Prologue : aides au logement"])) - accession_propriete_dot_situation_r822_11_13_17_1 = temp_accession_propriete_dot_situation_r822_11_13_17_3 - try: - match_arg_545 = mode_occupation_3 - if match_arg_545.code == ModeOccupation_Code.Locataire: - _ = match_arg_545.value - temp_accession_propriete_dot_date_signature_pret_2 = date_of_numbers(2010,1,1) - elif match_arg_545.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_545.value - temp_accession_propriete_dot_date_signature_pret_2 = date_of_numbers(2010,1,1) - elif match_arg_545.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_26 = match_arg_545.value - temp_accession_propriete_dot_date_signature_pret_2 = proprietaire_26.pret.date_signature - elif match_arg_545.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_545.value - temp_accession_propriete_dot_date_signature_pret_2 = date_of_numbers(2010,1,1) - elif match_arg_545.code == ModeOccupation_Code.LocationAccession: - proprietaire_27 = match_arg_545.value - temp_accession_propriete_dot_date_signature_pret_2 = proprietaire_27.pret.date_signature - temp_accession_propriete_dot_date_signature_pret_3 = temp_accession_propriete_dot_date_signature_pret_2 - except EmptyError: - temp_accession_propriete_dot_date_signature_pret_3 = dead_value - raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=837, start_column=10, - end_line=837, end_column=29, - law_headings=["Secteur accession à la propriété", - "Calcul du montant de l'allocation logement", - "Prologue : aides au logement"])) - accession_propriete_dot_date_signature_pret_1 = temp_accession_propriete_dot_date_signature_pret_3 - try: - match_arg_546 = mode_occupation_3 - if match_arg_546.code == ModeOccupation_Code.Locataire: - _ = match_arg_546.value - temp_accession_propriete_dot_type_travaux_logement_2 = TypeTravauxLogementR8425(TypeTravauxLogementR8425_Code.PasDeTravaux, - Unit()) - elif match_arg_546.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_546.value - temp_accession_propriete_dot_type_travaux_logement_2 = TypeTravauxLogementR8425(TypeTravauxLogementR8425_Code.PasDeTravaux, - Unit()) - elif match_arg_546.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_28 = match_arg_546.value - temp_accession_propriete_dot_type_travaux_logement_2 = proprietaire_28.type_travaux_logement_r842_5 - elif match_arg_546.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_546.value - temp_accession_propriete_dot_type_travaux_logement_2 = TypeTravauxLogementR8425(TypeTravauxLogementR8425_Code.PasDeTravaux, - Unit()) - elif match_arg_546.code == ModeOccupation_Code.LocationAccession: - proprietaire_29 = match_arg_546.value - temp_accession_propriete_dot_type_travaux_logement_2 = proprietaire_29.type_travaux_logement_r842_5 - temp_accession_propriete_dot_type_travaux_logement_3 = temp_accession_propriete_dot_type_travaux_logement_2 - except EmptyError: - temp_accession_propriete_dot_type_travaux_logement_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", start_line=838, start_column=10, end_line=838, end_column=31, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) + accession_propriete_dot_mensualite_principale_1 = temp_accession_propriete_dot_mensualite_principale_3 + try: + match_arg_542 = mode_occupation_3 + if match_arg_542.code == ModeOccupation_Code.Locataire: + _ = match_arg_542.value + temp_accession_propriete_dot_situation_r822_11_13_17_2 = False + elif match_arg_542.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_542.value + temp_accession_propriete_dot_situation_r822_11_13_17_2 = False + elif match_arg_542.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_24 = match_arg_542.value + temp_accession_propriete_dot_situation_r822_11_13_17_2 = proprietaire_24.situation_r822_11_13_17 + elif match_arg_542.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_542.value + temp_accession_propriete_dot_situation_r822_11_13_17_2 = False + elif match_arg_542.code == ModeOccupation_Code.LocationAccession: + proprietaire_25 = match_arg_542.value + temp_accession_propriete_dot_situation_r822_11_13_17_2 = proprietaire_25.situation_r822_11_13_17 + temp_accession_propriete_dot_situation_r822_11_13_17_3 = temp_accession_propriete_dot_situation_r822_11_13_17_2 + except EmptyError: + temp_accession_propriete_dot_situation_r822_11_13_17_3 = dead_value + raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", + start_line=839, start_column=10, + end_line=839, end_column=33, + law_headings=["Secteur accession à la propriété", + "Calcul du montant de l'allocation logement", + "Prologue : aides au logement"])) + accession_propriete_dot_situation_r822_11_13_17_1 = temp_accession_propriete_dot_situation_r822_11_13_17_3 + try: + match_arg_543 = mode_occupation_3 + if match_arg_543.code == ModeOccupation_Code.Locataire: + _ = match_arg_543.value + temp_accession_propriete_dot_date_signature_pret_2 = date_of_numbers(2010,1,1) + elif match_arg_543.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_543.value + temp_accession_propriete_dot_date_signature_pret_2 = date_of_numbers(2010,1,1) + elif match_arg_543.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_26 = match_arg_543.value + temp_accession_propriete_dot_date_signature_pret_2 = proprietaire_26.pret.date_signature + elif match_arg_543.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_543.value + temp_accession_propriete_dot_date_signature_pret_2 = date_of_numbers(2010,1,1) + elif match_arg_543.code == ModeOccupation_Code.LocationAccession: + proprietaire_27 = match_arg_543.value + temp_accession_propriete_dot_date_signature_pret_2 = proprietaire_27.pret.date_signature + temp_accession_propriete_dot_date_signature_pret_3 = temp_accession_propriete_dot_date_signature_pret_2 + except EmptyError: + temp_accession_propriete_dot_date_signature_pret_3 = dead_value + raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", + start_line=840, start_column=10, + end_line=840, end_column=29, + law_headings=["Secteur accession à la propriété", + "Calcul du montant de l'allocation logement", + "Prologue : aides au logement"])) + accession_propriete_dot_date_signature_pret_1 = temp_accession_propriete_dot_date_signature_pret_3 + try: + match_arg_544 = mode_occupation_3 + if match_arg_544.code == ModeOccupation_Code.Locataire: + _ = match_arg_544.value + temp_accession_propriete_dot_type_travaux_logement_2 = TypeTravauxLogementR8425(TypeTravauxLogementR8425_Code.PasDeTravaux, + Unit()) + elif match_arg_544.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_544.value + temp_accession_propriete_dot_type_travaux_logement_2 = TypeTravauxLogementR8425(TypeTravauxLogementR8425_Code.PasDeTravaux, + Unit()) + elif match_arg_544.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_28 = match_arg_544.value + temp_accession_propriete_dot_type_travaux_logement_2 = proprietaire_28.type_travaux_logement_r842_5 + elif match_arg_544.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_544.value + temp_accession_propriete_dot_type_travaux_logement_2 = TypeTravauxLogementR8425(TypeTravauxLogementR8425_Code.PasDeTravaux, + Unit()) + elif match_arg_544.code == ModeOccupation_Code.LocationAccession: + proprietaire_29 = match_arg_544.value + temp_accession_propriete_dot_type_travaux_logement_2 = proprietaire_29.type_travaux_logement_r842_5 + temp_accession_propriete_dot_type_travaux_logement_3 = temp_accession_propriete_dot_type_travaux_logement_2 + except EmptyError: + temp_accession_propriete_dot_type_travaux_logement_3 = dead_value + raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", + start_line=841, start_column=10, + end_line=841, end_column=31, + law_headings=["Secteur accession à la propriété", + "Calcul du montant de l'allocation logement", + "Prologue : aides au logement"])) accession_propriete_dot_type_travaux_logement_1 = temp_accession_propriete_dot_type_travaux_logement_3 try: - match_arg_547 = mode_occupation_3 - if match_arg_547.code == ModeOccupation_Code.Locataire: - _ = match_arg_547.value + match_arg_545 = mode_occupation_3 + if match_arg_545.code == ModeOccupation_Code.Locataire: + _ = match_arg_545.value temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_2 = False - elif match_arg_547.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_547.value + elif match_arg_545.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_545.value temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_2 = False - elif match_arg_547.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_30 = match_arg_547.value + elif match_arg_545.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_30 = match_arg_545.value temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_2 = proprietaire_30.local_habite_premiere_fois_beneficiaire - elif match_arg_547.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_547.value + elif match_arg_545.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_545.value temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_2 = False - elif match_arg_547.code == ModeOccupation_Code.LocationAccession: - proprietaire_31 = match_arg_547.value + elif match_arg_545.code == ModeOccupation_Code.LocationAccession: + proprietaire_31 = match_arg_545.value temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_2 = proprietaire_31.local_habite_premiere_fois_beneficiaire temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_3 = temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_2 except EmptyError: temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=839, start_column=10, - end_line=839, end_column=49, + start_line=842, start_column=10, + end_line=842, end_column=49, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) accession_propriete_dot_local_habite_premiere_fois_beneficiaire_1 = temp_accession_propriete_dot_local_habite_premiere_fois_beneficiaire_3 try: - match_arg_548 = mode_occupation_3 - if match_arg_548.code == ModeOccupation_Code.Locataire: - _ = match_arg_548.value + match_arg_546 = mode_occupation_3 + if match_arg_546.code == ModeOccupation_Code.Locataire: + _ = match_arg_546.value temp_accession_propriete_dot_date_entree_logement_2 = date_of_numbers(2010,1,1) - elif match_arg_548.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_548.value + elif match_arg_546.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_546.value temp_accession_propriete_dot_date_entree_logement_2 = date_of_numbers(2010,1,1) - elif match_arg_548.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_32 = match_arg_548.value + elif match_arg_546.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_32 = match_arg_546.value temp_accession_propriete_dot_date_entree_logement_2 = proprietaire_32.date_entree_logement - elif match_arg_548.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_548.value + elif match_arg_546.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_546.value temp_accession_propriete_dot_date_entree_logement_2 = date_of_numbers(2010,1,1) - elif match_arg_548.code == ModeOccupation_Code.LocationAccession: - proprietaire_33 = match_arg_548.value + elif match_arg_546.code == ModeOccupation_Code.LocationAccession: + proprietaire_33 = match_arg_546.value temp_accession_propriete_dot_date_entree_logement_2 = proprietaire_33.date_entree_logement temp_accession_propriete_dot_date_entree_logement_3 = temp_accession_propriete_dot_date_entree_logement_2 except EmptyError: temp_accession_propriete_dot_date_entree_logement_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=840, start_column=10, - end_line=840, end_column=30, + start_line=843, start_column=10, + end_line=843, end_column=30, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) accession_propriete_dot_date_entree_logement_1 = temp_accession_propriete_dot_date_entree_logement_3 try: - match_arg_549 = mode_occupation_3 - if match_arg_549.code == ModeOccupation_Code.Locataire: - _ = match_arg_549.value + match_arg_547 = mode_occupation_3 + if match_arg_547.code == ModeOccupation_Code.Locataire: + _ = match_arg_547.value temp_accession_propriete_dot_charges_mensuelles_pret = money_of_cents_string("0") - elif match_arg_549.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_549.value + elif match_arg_547.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_547.value temp_accession_propriete_dot_charges_mensuelles_pret = money_of_cents_string("0") - elif match_arg_549.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_34 = match_arg_549.value + elif match_arg_547.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_34 = match_arg_547.value temp_accession_propriete_dot_charges_mensuelles_pret = proprietaire_34.charges_mensuelles_pret - elif match_arg_549.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_549.value + elif match_arg_547.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_547.value temp_accession_propriete_dot_charges_mensuelles_pret = money_of_cents_string("0") - elif match_arg_549.code == ModeOccupation_Code.LocationAccession: - proprietaire_35 = match_arg_549.value + elif match_arg_547.code == ModeOccupation_Code.LocationAccession: + proprietaire_35 = match_arg_547.value temp_accession_propriete_dot_charges_mensuelles_pret = proprietaire_35.charges_mensuelles_pret temp_accession_propriete_dot_charges_mensuelles_pret_1 = temp_accession_propriete_dot_charges_mensuelles_pret except EmptyError: temp_accession_propriete_dot_charges_mensuelles_pret_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=841, start_column=10, - end_line=841, end_column=33, + start_line=844, start_column=10, + end_line=844, end_column=33, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) accession_propriete_dot_charges_mensuelles_pret = temp_accession_propriete_dot_charges_mensuelles_pret_1 try: - match_arg_550 = mode_occupation_3 - if match_arg_550.code == ModeOccupation_Code.Locataire: - _ = match_arg_550.value + match_arg_548 = mode_occupation_3 + if match_arg_548.code == ModeOccupation_Code.Locataire: + _ = match_arg_548.value temp_accession_propriete_dot_copropriete_2 = False - elif match_arg_550.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_550.value + elif match_arg_548.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_548.value temp_accession_propriete_dot_copropriete_2 = False - elif match_arg_550.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - proprietaire_36 = match_arg_550.value + elif match_arg_548.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + proprietaire_36 = match_arg_548.value temp_accession_propriete_dot_copropriete_2 = proprietaire_36.copropriete - elif match_arg_550.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_550.value + elif match_arg_548.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_548.value temp_accession_propriete_dot_copropriete_2 = False - elif match_arg_550.code == ModeOccupation_Code.LocationAccession: - proprietaire_37 = match_arg_550.value + elif match_arg_548.code == ModeOccupation_Code.LocationAccession: + proprietaire_37 = match_arg_548.value temp_accession_propriete_dot_copropriete_2 = proprietaire_37.copropriete temp_accession_propriete_dot_copropriete_3 = temp_accession_propriete_dot_copropriete_2 except EmptyError: temp_accession_propriete_dot_copropriete_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=842, start_column=10, - end_line=842, end_column=21, + start_line=845, start_column=10, + end_line=845, end_column=21, law_headings=["Secteur accession à la propriété", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18482,86 +18473,86 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog accession_propriete_dot_aide_finale_formule_1 = result_27.aide_finale_formule_out accession_propriete_dot_traitement_aide_finale_montant_minimal_1 = result_27.traitement_aide_finale_montant_minimal_out try: - match_arg_551 = mode_occupation_3 - if match_arg_551.code == ModeOccupation_Code.Locataire: - _ = match_arg_551.value + match_arg_549 = mode_occupation_3 + if match_arg_549.code == ModeOccupation_Code.Locataire: + _ = match_arg_549.value temp_logement_foyer_dot_type_logement_foyer_2 = TypeLogementFoyer(TypeLogementFoyer_Code.Autre, Unit()) - elif match_arg_551.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer__3 = match_arg_551.value + elif match_arg_549.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer__3 = match_arg_549.value temp_logement_foyer_dot_type_logement_foyer_2 = logement_foyer__3.type - elif match_arg_551.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_551.value + elif match_arg_549.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_549.value temp_logement_foyer_dot_type_logement_foyer_2 = TypeLogementFoyer(TypeLogementFoyer_Code.Autre, Unit()) - elif match_arg_551.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_551.value + elif match_arg_549.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_549.value temp_logement_foyer_dot_type_logement_foyer_2 = TypeLogementFoyer(TypeLogementFoyer_Code.Autre, Unit()) - elif match_arg_551.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_551.value + elif match_arg_549.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_549.value temp_logement_foyer_dot_type_logement_foyer_2 = TypeLogementFoyer(TypeLogementFoyer_Code.Autre, Unit()) temp_logement_foyer_dot_type_logement_foyer_3 = temp_logement_foyer_dot_type_logement_foyer_2 except EmptyError: temp_logement_foyer_dot_type_logement_foyer_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=910, start_column=10, - end_line=910, end_column=29, + start_line=913, start_column=10, + end_line=913, end_column=29, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) logement_foyer_dot_type_logement_foyer_1 = temp_logement_foyer_dot_type_logement_foyer_3 try: - match_arg_552 = mode_occupation_3 - if match_arg_552.code == ModeOccupation_Code.Locataire: - _ = match_arg_552.value + match_arg_550 = mode_occupation_3 + if match_arg_550.code == ModeOccupation_Code.Locataire: + _ = match_arg_550.value temp_logement_foyer_dot_date_conventionnement_2 = date_of_numbers(1970,1,1) - elif match_arg_552.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer__4 = match_arg_552.value + elif match_arg_550.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer__4 = match_arg_550.value temp_logement_foyer_dot_date_conventionnement_2 = logement_foyer__4.date_conventionnement - elif match_arg_552.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_552.value + elif match_arg_550.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_550.value temp_logement_foyer_dot_date_conventionnement_2 = date_of_numbers(1970,1,1) - elif match_arg_552.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_552.value + elif match_arg_550.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_550.value temp_logement_foyer_dot_date_conventionnement_2 = date_of_numbers(1970,1,1) - elif match_arg_552.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_552.value + elif match_arg_550.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_550.value temp_logement_foyer_dot_date_conventionnement_2 = date_of_numbers(1970,1,1) temp_logement_foyer_dot_date_conventionnement_3 = temp_logement_foyer_dot_date_conventionnement_2 except EmptyError: temp_logement_foyer_dot_date_conventionnement_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=911, start_column=10, - end_line=911, end_column=31, + start_line=914, start_column=10, + end_line=914, end_column=31, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) logement_foyer_dot_date_conventionnement_1 = temp_logement_foyer_dot_date_conventionnement_3 try: - match_arg_553 = mode_occupation_3 - if match_arg_553.code == ModeOccupation_Code.Locataire: - _ = match_arg_553.value + match_arg_551 = mode_occupation_3 + if match_arg_551.code == ModeOccupation_Code.Locataire: + _ = match_arg_551.value temp_logement_foyer_dot_redevance_2 = money_of_cents_string("0") - elif match_arg_553.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer__5 = match_arg_553.value + elif match_arg_551.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer__5 = match_arg_551.value temp_logement_foyer_dot_redevance_2 = logement_foyer__5.redevance - elif match_arg_553.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_553.value + elif match_arg_551.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_551.value temp_logement_foyer_dot_redevance_2 = money_of_cents_string("0") - elif match_arg_553.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_553.value + elif match_arg_551.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_551.value temp_logement_foyer_dot_redevance_2 = money_of_cents_string("0") - elif match_arg_553.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_553.value + elif match_arg_551.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_551.value temp_logement_foyer_dot_redevance_2 = money_of_cents_string("0") temp_logement_foyer_dot_redevance_3 = temp_logement_foyer_dot_redevance_2 except EmptyError: temp_logement_foyer_dot_redevance_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=912, start_column=10, - end_line=912, end_column=19, + start_line=915, start_column=10, + end_line=915, end_column=19, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18571,8 +18562,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_logement_foyer_dot_ressources_menage_arrondies_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=913, start_column=10, - end_line=913, end_column=37, + start_line=916, start_column=10, + end_line=916, end_column=37, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18582,8 +18573,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_logement_foyer_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=914, start_column=10, - end_line=914, end_column=35, + start_line=917, start_column=10, + end_line=917, end_column=35, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18593,8 +18584,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_logement_foyer_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=915, start_column=10, - end_line=915, end_column=40, + start_line=918, start_column=10, + end_line=918, end_column=40, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18604,8 +18595,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_logement_foyer_dot_zone_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=916, start_column=10, - end_line=916, end_column=14, + start_line=919, start_column=10, + end_line=919, end_column=14, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18615,39 +18606,39 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_logement_foyer_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=917, start_column=10, - end_line=917, end_column=23, + start_line=920, start_column=10, + end_line=920, end_column=23, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) logement_foyer_dot_date_courante_1 = temp_logement_foyer_dot_date_courante_1 try: - match_arg_554 = mode_occupation_3 - if match_arg_554.code == ModeOccupation_Code.Locataire: - _ = match_arg_554.value + match_arg_552 = mode_occupation_3 + if match_arg_552.code == ModeOccupation_Code.Locataire: + _ = match_arg_552.value temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16 = CategorieEquivalenceLoyerAllocationLogementFoyer(CategorieEquivalenceLoyerAllocationLogementFoyer_Code.AutresPersonnes, Unit()) - elif match_arg_554.code == ModeOccupation_Code.ResidentLogementFoyer: - logement_foyer__6 = match_arg_554.value + elif match_arg_552.code == ModeOccupation_Code.ResidentLogementFoyer: + logement_foyer__6 = match_arg_552.value temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16 = logement_foyer__6.categorie_equivalence_loyer_d842_16 - elif match_arg_554.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_554.value + elif match_arg_552.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_552.value temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16 = CategorieEquivalenceLoyerAllocationLogementFoyer(CategorieEquivalenceLoyerAllocationLogementFoyer_Code.AutresPersonnes, Unit()) - elif match_arg_554.code == ModeOccupation_Code.SousLocataire: - _ = match_arg_554.value + elif match_arg_552.code == ModeOccupation_Code.SousLocataire: + _ = match_arg_552.value temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16 = CategorieEquivalenceLoyerAllocationLogementFoyer(CategorieEquivalenceLoyerAllocationLogementFoyer_Code.AutresPersonnes, Unit()) - elif match_arg_554.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_554.value + elif match_arg_552.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_552.value temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16 = CategorieEquivalenceLoyerAllocationLogementFoyer(CategorieEquivalenceLoyerAllocationLogementFoyer_Code.AutresPersonnes, Unit()) temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16_1 = temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16 except EmptyError: temp_logement_foyer_dot_categorie_equivalence_loyer_d842_16_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=918, start_column=10, - end_line=918, end_column=45, + start_line=921, start_column=10, + end_line=921, end_column=45, law_headings=["Secteur logement-foyer", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18668,28 +18659,28 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog logement_foyer_dot_aide_finale_formule_1 = result_28.aide_finale_formule_out logement_foyer_dot_traitement_aide_finale_montant_minimal_1 = result_28.traitement_aide_finale_montant_minimal_out try: - match_arg_555 = mode_occupation_3 - if match_arg_555.code == ModeOccupation_Code.Locataire: - location_17 = match_arg_555.value + match_arg_553 = mode_occupation_3 + if match_arg_553.code == ModeOccupation_Code.Locataire: + location_16 = match_arg_553.value + temp_locatif_dot_loyer_principal = location_16.loyer_principal + elif match_arg_553.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_553.value + temp_locatif_dot_loyer_principal = money_of_cents_string("0") + elif match_arg_553.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_553.value + temp_locatif_dot_loyer_principal = money_of_cents_string("0") + elif match_arg_553.code == ModeOccupation_Code.SousLocataire: + location_17 = match_arg_553.value temp_locatif_dot_loyer_principal = location_17.loyer_principal - elif match_arg_555.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_555.value - temp_locatif_dot_loyer_principal = money_of_cents_string("0") - elif match_arg_555.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_555.value - temp_locatif_dot_loyer_principal = money_of_cents_string("0") - elif match_arg_555.code == ModeOccupation_Code.SousLocataire: - location_18 = match_arg_555.value - temp_locatif_dot_loyer_principal = location_18.loyer_principal - elif match_arg_555.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_555.value + elif match_arg_553.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_553.value temp_locatif_dot_loyer_principal = money_of_cents_string("0") temp_locatif_dot_loyer_principal_1 = temp_locatif_dot_loyer_principal except EmptyError: temp_locatif_dot_loyer_principal_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=761, start_column=10, - end_line=761, end_column=25, + start_line=764, start_column=10, + end_line=764, end_column=25, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18699,35 +18690,35 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_ressources_menage_arrondies_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=762, start_column=10, - end_line=762, end_column=37, + start_line=765, start_column=10, + end_line=765, end_column=37, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) locatif_dot_ressources_menage_arrondies_1 = temp_locatif_dot_ressources_menage_arrondies_1 try: - match_arg_556 = mode_occupation_3 - if match_arg_556.code == ModeOccupation_Code.Locataire: - location_19 = match_arg_556.value + match_arg_554 = mode_occupation_3 + if match_arg_554.code == ModeOccupation_Code.Locataire: + location_18 = match_arg_554.value + temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = location_18.beneficiaire_aide_adulte_ou_enfant_handicapes + elif match_arg_554.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_554.value + temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = False + elif match_arg_554.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_554.value + temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = False + elif match_arg_554.code == ModeOccupation_Code.SousLocataire: + location_19 = match_arg_554.value temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = location_19.beneficiaire_aide_adulte_ou_enfant_handicapes - elif match_arg_556.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_556.value - temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = False - elif match_arg_556.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_556.value - temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = False - elif match_arg_556.code == ModeOccupation_Code.SousLocataire: - location_20 = match_arg_556.value - temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = location_20.beneficiaire_aide_adulte_ou_enfant_handicapes - elif match_arg_556.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_556.value + elif match_arg_554.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_554.value temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 = False temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_3 = temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_2 except EmptyError: temp_locatif_dot_beneficiaire_aide_adulte_ou_enfant_handicapes_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=763, start_column=10, - end_line=763, end_column=55, + start_line=766, start_column=10, + end_line=766, end_column=55, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18737,8 +18728,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_date_courante_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=765, start_column=10, - end_line=765, end_column=23, + start_line=768, start_column=10, + end_line=768, end_column=23, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18748,8 +18739,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_nombre_personnes_a_charge_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=766, start_column=10, - end_line=766, end_column=35, + start_line=769, start_column=10, + end_line=769, end_column=35, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18759,8 +18750,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_situation_familiale_calcul_apl_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=767, start_column=10, - end_line=767, end_column=40, + start_line=770, start_column=10, + end_line=770, end_column=40, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18770,62 +18761,62 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_zone_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=768, start_column=10, - end_line=768, end_column=14, + start_line=771, start_column=10, + end_line=771, end_column=14, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) locatif_dot_zone_1 = temp_locatif_dot_zone_1 try: - match_arg_557 = mode_occupation_3 - if match_arg_557.code == ModeOccupation_Code.Locataire: - location_21 = match_arg_557.value + match_arg_555 = mode_occupation_3 + if match_arg_555.code == ModeOccupation_Code.Locataire: + location_20 = match_arg_555.value + temp_locatif_dot_logement_est_chambre_2 = location_20.logement_est_chambre + elif match_arg_555.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_555.value + temp_locatif_dot_logement_est_chambre_2 = False + elif match_arg_555.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_555.value + temp_locatif_dot_logement_est_chambre_2 = False + elif match_arg_555.code == ModeOccupation_Code.SousLocataire: + location_21 = match_arg_555.value temp_locatif_dot_logement_est_chambre_2 = location_21.logement_est_chambre - elif match_arg_557.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_557.value - temp_locatif_dot_logement_est_chambre_2 = False - elif match_arg_557.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_557.value - temp_locatif_dot_logement_est_chambre_2 = False - elif match_arg_557.code == ModeOccupation_Code.SousLocataire: - location_22 = match_arg_557.value - temp_locatif_dot_logement_est_chambre_2 = location_22.logement_est_chambre - elif match_arg_557.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_557.value + elif match_arg_555.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_555.value temp_locatif_dot_logement_est_chambre_2 = False temp_locatif_dot_logement_est_chambre_3 = temp_locatif_dot_logement_est_chambre_2 except EmptyError: temp_locatif_dot_logement_est_chambre_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=769, start_column=10, - end_line=769, end_column=30, + start_line=772, start_column=10, + end_line=772, end_column=30, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) locatif_dot_logement_est_chambre_1 = temp_locatif_dot_logement_est_chambre_3 try: - match_arg_558 = mode_occupation_3 - if match_arg_558.code == ModeOccupation_Code.Locataire: - location_23 = match_arg_558.value + match_arg_556 = mode_occupation_3 + if match_arg_556.code == ModeOccupation_Code.Locataire: + location_22 = match_arg_556.value + temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = location_22.agees_ou_handicap_adultes_hebergees_onereux_particuliers + elif match_arg_556.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_556.value + temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = False + elif match_arg_556.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_556.value + temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = False + elif match_arg_556.code == ModeOccupation_Code.SousLocataire: + location_23 = match_arg_556.value temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = location_23.agees_ou_handicap_adultes_hebergees_onereux_particuliers - elif match_arg_558.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_558.value - temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = False - elif match_arg_558.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_558.value - temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = False - elif match_arg_558.code == ModeOccupation_Code.SousLocataire: - location_24 = match_arg_558.value - temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = location_24.agees_ou_handicap_adultes_hebergees_onereux_particuliers - elif match_arg_558.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_558.value + elif match_arg_556.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_556.value temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 = False temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_3 = temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_2 except EmptyError: temp_locatif_dot_agees_ou_handicap_adultes_hebergees_onereux_particuliers_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=770, start_column=10, - end_line=770, end_column=66, + start_line=773, start_column=10, + end_line=773, end_column=66, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18835,62 +18826,80 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_type_aide_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=772, start_column=10, - end_line=772, end_column=19, + start_line=775, start_column=10, + end_line=775, end_column=19, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) locatif_dot_type_aide_1 = temp_locatif_dot_type_aide_1 try: - match_arg_559 = mode_occupation_3 - if match_arg_559.code == ModeOccupation_Code.Locataire: - location_25 = match_arg_559.value + match_arg_557 = mode_occupation_3 + if match_arg_557.code == ModeOccupation_Code.Locataire: + location_24 = match_arg_557.value + temp_locatif_dot_colocation_2 = location_24.colocation + elif match_arg_557.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_557.value + temp_locatif_dot_colocation_2 = False + elif match_arg_557.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_557.value + temp_locatif_dot_colocation_2 = False + elif match_arg_557.code == ModeOccupation_Code.SousLocataire: + location_25 = match_arg_557.value temp_locatif_dot_colocation_2 = location_25.colocation - elif match_arg_559.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_559.value - temp_locatif_dot_colocation_2 = False - elif match_arg_559.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_559.value - temp_locatif_dot_colocation_2 = False - elif match_arg_559.code == ModeOccupation_Code.SousLocataire: - location_26 = match_arg_559.value - temp_locatif_dot_colocation_2 = location_26.colocation - elif match_arg_559.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_559.value + elif match_arg_557.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_557.value temp_locatif_dot_colocation_2 = False temp_locatif_dot_colocation_3 = temp_locatif_dot_colocation_2 except EmptyError: temp_locatif_dot_colocation_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=773, start_column=10, - end_line=773, end_column=20, + start_line=776, start_column=10, + end_line=776, end_column=20, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) locatif_dot_colocation_1 = temp_locatif_dot_colocation_3 try: - match_arg_560 = mode_occupation_3 - if match_arg_560.code == ModeOccupation_Code.Locataire: - location_27 = match_arg_560.value - temp_locatif_dot_reduction_loyer_solidarite_2 = location_27.reduction_loyer_solidarite - elif match_arg_560.code == ModeOccupation_Code.ResidentLogementFoyer: - _ = match_arg_560.value + match_arg_558 = mode_occupation_3 + if match_arg_558.code == ModeOccupation_Code.Locataire: + location_26 = match_arg_558.value + match_arg_559 = location_26.bailleur + if match_arg_559.code == TypeBailleur_Code.BailleurSocial: + bailleur_2 = match_arg_559.value + temp_locatif_dot_reduction_loyer_solidarite_2 = bailleur_2.reduction_loyer_solidarite_percue + elif match_arg_559.code == TypeBailleur_Code.BailleurPriveAvecConventionnementSocial: + _ = match_arg_559.value + temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") + elif match_arg_559.code == TypeBailleur_Code.BailleurPrive: + _ = match_arg_559.value + temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") + elif match_arg_558.code == ModeOccupation_Code.ResidentLogementFoyer: + _ = match_arg_558.value temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") - elif match_arg_560.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: - _ = match_arg_560.value + elif match_arg_558.code == ModeOccupation_Code.AccessionProprieteLocalUsageExclusifHabitation: + _ = match_arg_558.value temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") - elif match_arg_560.code == ModeOccupation_Code.SousLocataire: - location_28 = match_arg_560.value - temp_locatif_dot_reduction_loyer_solidarite_2 = location_28.reduction_loyer_solidarite - elif match_arg_560.code == ModeOccupation_Code.LocationAccession: - _ = match_arg_560.value + elif match_arg_558.code == ModeOccupation_Code.SousLocataire: + location_27 = match_arg_558.value + match_arg_560 = location_27.bailleur + if match_arg_560.code == TypeBailleur_Code.BailleurSocial: + bailleur_3 = match_arg_560.value + temp_locatif_dot_reduction_loyer_solidarite_2 = bailleur_3.reduction_loyer_solidarite_percue + elif match_arg_560.code == TypeBailleur_Code.BailleurPriveAvecConventionnementSocial: + _ = match_arg_560.value + temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") + elif match_arg_560.code == TypeBailleur_Code.BailleurPrive: + _ = match_arg_560.value + temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") + elif match_arg_558.code == ModeOccupation_Code.LocationAccession: + _ = match_arg_558.value temp_locatif_dot_reduction_loyer_solidarite_2 = money_of_cents_string("0") temp_locatif_dot_reduction_loyer_solidarite_3 = temp_locatif_dot_reduction_loyer_solidarite_2 except EmptyError: temp_locatif_dot_reduction_loyer_solidarite_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=774, start_column=10, - end_line=774, end_column=36, + start_line=777, start_column=10, + end_line=777, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18898,8 +18907,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog try: match_arg_561 = mode_occupation_3 if match_arg_561.code == ModeOccupation_Code.Locataire: - location_29 = match_arg_561.value - temp_locatif_dot_logement_meuble_d842_2_2 = location_29.logement_meuble_d842_2 + location_28 = match_arg_561.value + temp_locatif_dot_logement_meuble_d842_2_2 = location_28.logement_meuble_d842_2 elif match_arg_561.code == ModeOccupation_Code.ResidentLogementFoyer: _ = match_arg_561.value temp_locatif_dot_logement_meuble_d842_2_2 = False @@ -18907,8 +18916,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog _ = match_arg_561.value temp_locatif_dot_logement_meuble_d842_2_2 = False elif match_arg_561.code == ModeOccupation_Code.SousLocataire: - location_30 = match_arg_561.value - temp_locatif_dot_logement_meuble_d842_2_2 = location_30.logement_meuble_d842_2 + location_29 = match_arg_561.value + temp_locatif_dot_logement_meuble_d842_2_2 = location_29.logement_meuble_d842_2 elif match_arg_561.code == ModeOccupation_Code.LocationAccession: _ = match_arg_561.value temp_locatif_dot_logement_meuble_d842_2_2 = False @@ -18916,8 +18925,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_logement_meuble_d842_2_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=775, start_column=10, - end_line=775, end_column=32, + start_line=778, start_column=10, + end_line=778, end_column=32, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18925,8 +18934,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog try: match_arg_562 = mode_occupation_3 if match_arg_562.code == ModeOccupation_Code.Locataire: - location_31 = match_arg_562.value - temp_locatif_dot_changement_logement_d842_4 = location_31.changement_logement_d842_4 + location_30 = match_arg_562.value + temp_locatif_dot_changement_logement_d842_4 = location_30.changement_logement_d842_4 elif match_arg_562.code == ModeOccupation_Code.ResidentLogementFoyer: _ = match_arg_562.value temp_locatif_dot_changement_logement_d842_4 = ChangementLogementD8424(ChangementLogementD8424_Code.PasDeChangement, @@ -18936,8 +18945,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog temp_locatif_dot_changement_logement_d842_4 = ChangementLogementD8424(ChangementLogementD8424_Code.PasDeChangement, Unit()) elif match_arg_562.code == ModeOccupation_Code.SousLocataire: - location_32 = match_arg_562.value - temp_locatif_dot_changement_logement_d842_4 = location_32.changement_logement_d842_4 + location_31 = match_arg_562.value + temp_locatif_dot_changement_logement_d842_4 = location_31.changement_logement_d842_4 elif match_arg_562.code == ModeOccupation_Code.LocationAccession: _ = match_arg_562.value temp_locatif_dot_changement_logement_d842_4 = ChangementLogementD8424(ChangementLogementD8424_Code.PasDeChangement, @@ -18946,8 +18955,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_locatif_dot_changement_logement_d842_4_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=778, start_column=10, - end_line=778, end_column=36, + start_line=781, start_column=10, + end_line=781, end_column=36, law_headings=["Secteur locatif", "Calcul du montant de l'allocation logement", "Prologue : aides au logement"])) @@ -18985,9 +18994,9 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog param_43) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=990, + start_line=993, start_column=10, - end_line=990, + end_line=993, end_column=32, law_headings=["Tous secteurs", "Secteur logement-foyer", @@ -18996,8 +19005,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_traitement_aide_finale_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=990, start_column=10, - end_line=990, end_column=32, + start_line=993, start_column=10, + end_line=993, end_column=32, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19017,8 +19026,8 @@ def calcul_allocation_logement(calcul_allocation_logement_in:CalculAllocationLog except EmptyError: temp_aide_finale_formule_8 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=989, start_column=10, - end_line=989, end_column=29, + start_line=992, start_column=10, + end_line=992, end_column=29, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19037,8 +19046,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=400, start_column=10, - end_line=400, end_column=23, + start_line=396, start_column=10, + end_line=396, end_column=23, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19048,8 +19057,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=401, start_column=10, - end_line=401, end_column=16, + start_line=397, start_column=10, + end_line=397, end_column=16, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19059,8 +19068,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=402, start_column=10, - end_line=402, end_column=19, + start_line=398, start_column=10, + end_line=398, end_column=19, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19070,8 +19079,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_allocation_logement_dot_beneficie_aide_personnalisee_logement = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=403, start_column=10, - end_line=403, end_column=47, + start_line=399, start_column=10, + end_line=399, end_column=47, law_headings=["Éligibilité aux allocations de logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19088,8 +19097,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_aide_personnalisee_logement_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=363, start_column=10, - end_line=363, end_column=16, + start_line=359, start_column=10, + end_line=359, end_column=16, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19099,8 +19108,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_aide_personnalisee_logement_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=364, start_column=10, - end_line=364, end_column=19, + start_line=360, start_column=10, + end_line=360, end_column=19, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19110,8 +19119,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_aide_personnalisee_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=365, start_column=17, - end_line=365, end_column=30, + start_line=361, start_column=17, + end_line=361, end_column=30, law_headings=["Éligibilité à l'aide personnalisée au logement", "Déclarations des champs d'application", "Prologue : aides au logement"])) @@ -19128,8 +19137,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_mode_occupation = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=971, start_column=10, - end_line=971, end_column=25, + start_line=974, start_column=10, + end_line=974, end_column=25, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19140,8 +19149,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_ressources_menage_sans_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=972, start_column=10, - end_line=972, end_column=27, + start_line=975, start_column=10, + end_line=975, end_column=27, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19152,8 +19161,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_situation_familiale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=975, start_column=10, - end_line=975, end_column=29, + start_line=978, start_column=10, + end_line=978, end_column=29, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19164,8 +19173,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=976, start_column=10, - end_line=976, end_column=35, + start_line=979, start_column=10, + end_line=979, end_column=35, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19176,8 +19185,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=977, start_column=10, - end_line=977, end_column=14, + start_line=980, start_column=10, + end_line=980, end_column=14, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19188,8 +19197,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=978, start_column=10, - end_line=978, end_column=23, + start_line=981, start_column=10, + end_line=981, end_column=23, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19213,8 +19222,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_allocation_logement_dot_type_aide_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=979, start_column=10, - end_line=979, end_column=19, + start_line=982, start_column=10, + end_line=982, end_column=19, law_headings=["Tous secteurs", "Secteur logement-foyer", "Calcul du montant de l'allocation logement", @@ -19234,8 +19243,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_mode_occupation = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=723, start_column=10, - end_line=723, end_column=25, + start_line=726, start_column=10, + end_line=726, end_column=25, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19247,8 +19256,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_type_aide = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=724, start_column=10, - end_line=724, end_column=19, + start_line=727, start_column=10, + end_line=727, end_column=19, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19259,8 +19268,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_ressources_menage_sans_arrondi = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=725, start_column=10, - end_line=725, end_column=27, + start_line=728, start_column=10, + end_line=728, end_column=27, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19271,8 +19280,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_situation_familiale = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=728, start_column=10, - end_line=728, end_column=29, + start_line=731, start_column=10, + end_line=731, end_column=29, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19283,8 +19292,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_nombre_personnes_a_charge = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=729, start_column=10, - end_line=729, end_column=35, + start_line=732, start_column=10, + end_line=732, end_column=35, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19295,8 +19304,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_zone = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=730, start_column=10, - end_line=730, end_column=14, + start_line=733, start_column=10, + end_line=733, end_column=14, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19307,8 +19316,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_calcul_aide_personnalisee_logement_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=731, start_column=10, - end_line=731, end_column=23, + start_line=734, start_column=10, + end_line=734, end_column=23, law_headings=["Tous secteurs", "Calcul du montant de l'aide personnalisée au logement", "Déclarations des champs d'application", @@ -19328,8 +19337,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_5 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1054, - start_column=10, end_line=1054, + start_line=1057, + start_column=10, end_line=1057, end_column=59, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19350,8 +19359,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_eligibilite_3 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1051, - start_column=10, end_line=1051, + start_line=1054, + start_column=10, end_line=1054, end_column=21, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19392,17 +19401,17 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides param_44) except EmptyError: raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1053, + start_line=1056, start_column=10, - end_line=1053, + end_line=1056, end_column=32, law_headings=["Calculette globale", "Prologue : aides au logement"])) except EmptyError: temp_traitement_aide_finale_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1053, - start_column=10, end_line=1053, + start_line=1056, + start_column=10, end_line=1056, end_column=32, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19438,8 +19447,8 @@ def calculette_aides_au_logement(calculette_aides_au_logement_in:CalculetteAides except EmptyError: temp_aide_finale_formule_9 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1052, - start_column=10, end_line=1052, + start_line=1055, + start_column=10, end_line=1055, end_column=29, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19476,14 +19485,12 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar nombre_autres_occupants_logement = menage_5.nombre_autres_occupants_logement, situation_familiale = menage_5.situation_familiale, condition_rattache_foyer_fiscal_parent_ifi = menage_5.condition_rattache_foyer_fiscal_parent_ifi, - nombre_enfants_a_naitre_apres_troisieme_mois_grossesse = menage_5.nombre_enfants_a_naitre_apres_troisieme_mois_grossesse, - enfant_a_naitre_apres_quatrieme_mois_grossesse = menage_5.enfant_a_naitre_apres_quatrieme_mois_grossesse, - date_naissance_troisieme_enfant_ou_dernier_si_plus = menage_5.date_naissance_troisieme_enfant_ou_dernier_si_plus) + enfant_a_naitre_apres_quatrieme_mois_grossesse = menage_5.enfant_a_naitre_apres_quatrieme_mois_grossesse) except EmptyError: temp_menage_sans_enfants_garde_alternee_1 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1117, - start_column=11, end_line=1117, + start_line=1120, + start_column=11, end_line=1120, end_column=45, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -19493,8 +19500,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1030, - start_column=10, end_line=1030, + start_line=1033, + start_column=10, end_line=1033, end_column=16, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19504,8 +19511,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1031, - start_column=10, end_line=1031, + start_line=1034, + start_column=10, end_line=1034, end_column=19, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19515,8 +19522,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1032, - start_column=10, end_line=1032, + start_line=1035, + start_column=10, end_line=1035, end_column=23, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19526,8 +19533,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_dot_ressources_menage_prises_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1037, - start_column=10, end_line=1037, + start_line=1040, + start_column=10, end_line=1040, end_column=44, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19545,8 +19552,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_menage = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1030, - start_column=10, end_line=1030, + start_line=1033, + start_column=10, end_line=1033, end_column=16, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19556,8 +19563,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_demandeur = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1031, - start_column=10, end_line=1031, + start_line=1034, + start_column=10, end_line=1034, end_column=19, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19567,8 +19574,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_date_courante = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1032, - start_column=10, end_line=1032, + start_line=1035, + start_column=10, end_line=1035, end_column=23, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19578,8 +19585,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_calculette_sans_garde_alternee_dot_ressources_menage_prises_en_compte = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1037, - start_column=10, end_line=1037, + start_line=1040, + start_column=10, end_line=1040, end_column=44, law_headings=["Calculette globale", "Prologue : aides au logement"])) @@ -19597,8 +19604,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_eligibilite_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1124, - start_column=10, end_line=1124, + start_line=1127, + start_column=10, end_line=1127, end_column=21, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -19608,8 +19615,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_coefficents_enfants_garde_alternee_pris_en_compte_6 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1118, - start_column=11, end_line=1118, + start_line=1121, + start_column=11, end_line=1121, end_column=60, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) @@ -19631,8 +19638,8 @@ def calculette_aides_au_logement_garde_alternee(calculette_aides_au_logement_gar except EmptyError: temp_aide_finale_2 = dead_value raise NoValueProvided(SourcePosition(filename="examples/aides_logement/prologue.catala_fr", - start_line=1125, - start_column=10, end_line=1125, + start_line=1128, + start_column=10, end_line=1128, end_column=21, law_headings=["Calculette avec garde alternée", "Prologue : aides au logement"])) diff --git a/french_law/python/src/allocations_familiales.py b/french_law/python/src/allocations_familiales.py index b0a16620..1de84198 100644 --- a/french_law/python/src/allocations_familiales.py +++ b/french_law/python/src/allocations_familiales.py @@ -2165,7 +2165,11 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): def temp_complement_degressif(param_8:Money): try: try: - try: + def temp_complement_degressif_1(_:Any): + raise EmptyError + def temp_complement_degressif_2(_:Any): + return False + def temp_complement_degressif_3(_:Any): if ((ressources_menage > plafond__i_i_d521_3) and (ressources_menage <= (plafond__i_i_d521_3 + (param_8 * @@ -2177,7 +2181,7 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): decimal_of_string("12."))) else: raise EmptyError - except EmptyError: + def temp_complement_degressif_4(_:Any): if ((ressources_menage > plafond__i_d521_3) and (ressources_menage <= (plafond__i_d521_3 + (param_8 * @@ -2189,6 +2193,15 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): decimal_of_string("12."))) else: raise EmptyError + return handle_default(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", + start_line=134, start_column=11, + end_line=134, end_column=31, + law_headings=["Allocations familiales", + "Champs d'applications", + "Prologue"]), [temp_complement_degressif_4, + temp_complement_degressif_3], + temp_complement_degressif_2, + temp_complement_degressif_1) except EmptyError: return money_of_cents_string("0") except EmptyError: @@ -2749,41 +2762,52 @@ def allocations_familiales(allocations_familiales_in:AllocationsFamilialesIn): montant_initial_majoration = temp_montant_initial_majoration try: try: - try: + def temp_montant_verse_complement_pour_forfaitaire(_:Any): + raise EmptyError + def temp_montant_verse_complement_pour_forfaitaire_1(_:Any): + return False + def temp_montant_verse_complement_pour_forfaitaire_2(_:Any): if ((ressources_menage > plafond__i_i_d521_3) and (ressources_menage <= (plafond__i_i_d521_3 + (montant_verse_forfaitaire * decimal_of_string("12."))))): - temp_montant_verse_complement_pour_forfaitaire = (((plafond__i_i_d521_3 + + return (((plafond__i_i_d521_3 + (montant_verse_forfaitaire * decimal_of_string("12."))) - ressources_menage) * (decimal_of_string("1.") / decimal_of_string("12."))) else: - temp_montant_verse_complement_pour_forfaitaire = dead_value raise EmptyError - except EmptyError: + def temp_montant_verse_complement_pour_forfaitaire_3(_:Any): if ((ressources_menage > plafond__i_d521_3) and (ressources_menage <= (plafond__i_d521_3 + (montant_verse_forfaitaire * decimal_of_string("12."))))): - temp_montant_verse_complement_pour_forfaitaire = (((plafond__i_d521_3 + + return (((plafond__i_d521_3 + (montant_verse_forfaitaire * decimal_of_string("12."))) - ressources_menage) * (decimal_of_string("1.") / decimal_of_string("12."))) else: - temp_montant_verse_complement_pour_forfaitaire = dead_value raise EmptyError + temp_montant_verse_complement_pour_forfaitaire_4 = handle_default( + SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", + start_line=136, start_column=11, end_line=136, end_column=52, + law_headings=["Allocations familiales", + "Champs d'applications", + "Prologue"]), [temp_montant_verse_complement_pour_forfaitaire_3, + temp_montant_verse_complement_pour_forfaitaire_2], + temp_montant_verse_complement_pour_forfaitaire_1, + temp_montant_verse_complement_pour_forfaitaire) except EmptyError: - temp_montant_verse_complement_pour_forfaitaire = money_of_cents_string("0") + temp_montant_verse_complement_pour_forfaitaire_4 = money_of_cents_string("0") except EmptyError: - temp_montant_verse_complement_pour_forfaitaire = dead_value + temp_montant_verse_complement_pour_forfaitaire_4 = dead_value raise NoValueProvided(SourcePosition(filename="examples/allocations_familiales/prologue.catala_fr", start_line=136, start_column=11, end_line=136, end_column=52, law_headings=["Allocations familiales", "Champs d'applications", "Prologue"])) - montant_verse_complement_pour_forfaitaire = temp_montant_verse_complement_pour_forfaitaire + montant_verse_complement_pour_forfaitaire = temp_montant_verse_complement_pour_forfaitaire_4 try: temp_montant_avec_garde_alternee_base = (montant_initial_base * rapport_enfants_total_moyen) From 5bddde1c68fc044987586978f23f61b6860d3733 Mon Sep 17 00:00:00 2001 From: Denis Merigoux Date: Tue, 30 Aug 2022 13:48:20 +0200 Subject: [PATCH 31/31] Fix documentation and test invocation --- Makefile | 4 ++-- examples/Makefile | 16 +++++++++------- examples/README.md | 13 +++++++++---- tests/Makefile | 7 +++++++ 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index f5cdd423..285cc42d 100644 --- a/Makefile +++ b/Makefile @@ -303,10 +303,10 @@ CLERK=$(CLERK_BIN) --exe $(CATALA_BIN) \ .FORCE: test_suite: .FORCE - OCAMLRUNPARAM= $(CLERK) test tests + $(MAKE) -C tests pass_all_tests test_examples: .FORCE - OCAMLRUNPARAM= $(CLERK) test examples + $(MAKE) -C examples pass_all_tests #> tests : Run interpreter tests tests: test_suite test_examples diff --git a/examples/Makefile b/examples/Makefile index c5e7189b..efcd1ed8 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -8,16 +8,18 @@ CLERK=_build/default/build_system/clerk.exe --exe "_build/default/compiler/catal # Running legislation unit tests ################################ +pass_all_tests: + @cd ..;OCAMLRUNPARAM= $(CLERK) examples + +reset_all_tests: CLERK_OPTS+=--reset +reset_all_tests: + @cd ..;OCAMLRUNPARAM= $(CLERK) examples %.catala_en %.catala_fr %.catala_pl: .FORCE # Here we cd to the root of the Catala repository such that the paths \ # displayed in error messages start with `examples/` uniformly. - @cd ..;$(CLERK) examples/$@ - -TEST_FILES?=$(wildcard */*.catala*) - -pass_tests: $(TEST_FILES) -reset_tests: CLERK_OPTS+=--reset -reset_tests: $(TEST_FILES) + @cd ..;OCAMLRUNPARAM= $(CLERK) examples/$@ .FORCE: + +.PHONY: pass_all_tests reset_all_tests diff --git a/examples/README.md b/examples/README.md index 5f956717..e4599edc 100644 --- a/examples/README.md +++ b/examples/README.md @@ -10,11 +10,13 @@ of the Catala programming language development. ## List of examples - `allocations_familiales/`: computation of the French family benefits, based - on the _Code de la sécurité sociale_. This case study is the biggest and + on the _Code de la sécurité sociale_. +- `aides_logement`: computation of the French housing benefits, based on the + _Code de la construction et de l'habitation_. This case study is the biggest and most ambitious for Catala so far. - `code_general_impots/`: computation of the French income tax, based on the _Code général des impôts_. Currently, there are only stubs of program. -- `tutorial/`: Catala language tutorial for developers of tech-savvy lawyers. +- `tutorial_/`: Catala language tutorial for developers of tech-savvy lawyers. The tutorial is written like a piece of legislation that gets annotated by Catala snippets. - `us_tax_code/`: contains the Catala formalization of several sections of the @@ -74,9 +76,12 @@ compilation of the whole program using the standard expected by `clerk test`: enter `make help_clerk` from the root of the Catala repository to know more. Once your tests are written, then will automatically be added to the regression -suite executed using +suite executed using: - make -C examples tests + # From the root of the Catala repository + make test_examples + # From the examples/ folder + make pass_all_tests You can isolate a part of the regression suite by invoking: diff --git a/tests/Makefile b/tests/Makefile index 0436a0da..5d020235 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -15,3 +15,10 @@ CLERK=_build/default/build_system/clerk.exe --exe "_build/default/compiler/catal # Here we cd to the root of the Catala repository such that the paths \ # displayed in error messages start with `tests/` uniformly. @cd ..; $(CLERK) tests/$@ + +pass_all_tests: + @cd ..;OCAMLRUNPARAM= $(CLERK) tests + +reset_all_tests: CLERK_OPTS+=--reset +reset_all_tests: + @cd ..;OCAMLRUNPARAM= $(CLERK) tests