From adc580069c7d8d817b26ebc78ff3f24c70cee8e0 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Mon, 5 May 2025 08:49:11 +0200 Subject: [PATCH] fix: user_datas support empty directory --- locale/fr/LC_MESSAGES/rougail.po | 79 +++++++++--------- locale/rougail.pot | 72 ++++++++-------- src/rougail/locale/fr/LC_MESSAGES/rougail.mo | Bin 13481 -> 13546 bytes src/rougail/object_model.py | 2 +- src/rougail/user_datas.py | 18 ++-- .../makedict/after.json | 10 +++ .../makedict/base.json | 4 + .../makedict/before.json | 10 +++ .../makedict/mandatory.json | 1 + .../tiramisu/base.py | 18 ++++ .../tiramisu/no_namespace.py | 13 +++ .../makedict/after.json | 14 ++++ .../makedict/base.json | 5 ++ .../makedict/before.json | 14 ++++ .../makedict/mandatory.json | 1 + .../tiramisu/base.py | 18 ++++ .../tiramisu/no_namespace.py | 13 +++ .../makedict/after.json | 10 +++ .../makedict/base.json | 4 + .../makedict/before.json | 10 +++ .../makedict/mandatory.json | 1 + .../tiramisu/base.py | 17 ++++ .../tiramisu/no_namespace.py | 12 +++ .../makedict/after.json | 14 ++++ .../makedict/base.json | 5 ++ .../makedict/before.json | 14 ++++ .../makedict/mandatory.json | 1 + .../tiramisu/base.py | 17 ++++ .../tiramisu/no_namespace.py | 12 +++ .../tiramisu/base.py | 18 ++++ 30 files changed, 344 insertions(+), 83 deletions(-) create mode 100644 tests/dictionaries/04_1default_calculation_hidden_3/makedict/after.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_3/makedict/base.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_3/makedict/before.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_3/makedict/mandatory.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_3/tiramisu/base.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_3/tiramisu/no_namespace.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_4/makedict/after.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_4/makedict/base.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_4/makedict/before.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_4/makedict/mandatory.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_4/tiramisu/base.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_4/tiramisu/no_namespace.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_5/makedict/after.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_5/makedict/base.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_5/makedict/before.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_5/makedict/mandatory.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_5/tiramisu/base.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_5/tiramisu/no_namespace.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_6/makedict/after.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_6/makedict/base.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_6/makedict/before.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_6/makedict/mandatory.json create mode 100644 tests/dictionaries/04_1default_calculation_hidden_6/tiramisu/base.py create mode 100644 tests/dictionaries/04_1default_calculation_hidden_6/tiramisu/no_namespace.py create mode 100644 tests/dictionaries/60_5family_dynamic_calc_suffix_hidden/tiramisu/base.py diff --git a/locale/fr/LC_MESSAGES/rougail.po b/locale/fr/LC_MESSAGES/rougail.po index 5aab4f4f1..569f5168b 100644 --- a/locale/fr/LC_MESSAGES/rougail.po +++ b/locale/fr/LC_MESSAGES/rougail.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2025-04-29 23:02+0200\n" -"PO-Revision-Date: 2025-04-29 23:12+0200\n" +"POT-Creation-Date: 2025-05-03 22:50+0200\n" +"PO-Revision-Date: 2025-05-03 22:50+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -205,27 +205,27 @@ msgstr "type {0} inconnu pour {1}" msgid "family \"{0}\" define multiple time" msgstr "la famille \"{0}\" est définit plusieurs fois" -#: src/rougail/convert.py:682 +#: src/rougail/convert.py:679 msgid "variable \"{0}\" define multiple time" msgstr "la variable \"{0}\" est définit plusieurs fois" -#: src/rougail/convert.py:788 +#: src/rougail/convert.py:782 msgid "params must be a dict for {0}" msgstr "params doit être une dict pour {0}" -#: src/rougail/convert.py:810 +#: src/rougail/convert.py:803 msgid "\"{0}\" has an invalid \"params\" for {1}: {2}" msgstr "\"{0}\" a un attribut \"params\" invalide pour {1}: {2}" -#: src/rougail/convert.py:824 +#: src/rougail/convert.py:817 msgid "secret_manager must be a dict for {0}" msgstr "secret_manager doit être une dict pour {0}" -#: src/rougail/convert.py:1155 +#: src/rougail/convert.py:1147 msgid "Cannot execute annotate multiple time" msgstr "Ne peut exécuter l'annotation plusieurs fois" -#: src/rougail/convert.py:1162 +#: src/rougail/convert.py:1154 msgid "" "invalid \"structural\" definition ({0}), we cannot load any structural file!" msgstr "" @@ -233,7 +233,7 @@ msgstr "" "fichier de structure ne peut être chargé !" #: src/rougail/error.py:67 src/rougail/tiramisu.py:50 -#: src/rougail/user_datas.py:251 +#: src/rougail/user_datas.py:253 msgid "{0} in {1}" msgstr "{0} dans {1}" @@ -241,41 +241,41 @@ msgstr "{0} dans {1}" msgid "unknown boolean value \"{0}\"" msgstr "valeur du booléen inconnue \"{0}\"" -#: src/rougail/object_model.py:183 +#: src/rougail/object_model.py:182 msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\"" msgstr "" "ne peut trouver la variable \"{0}\" défini dans l'attribut \"{1}\" pour " "\"{2}\"" -#: src/rougail/object_model.py:187 +#: src/rougail/object_model.py:186 msgid "" "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\"" msgstr "" "la variable \"{0}\" est en faite une famille dans l'attribut \"{1}\" pour " "\"{2}\"" -#: src/rougail/object_model.py:190 src/rougail/object_model.py:483 +#: src/rougail/object_model.py:189 src/rougail/object_model.py:479 msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\"" msgstr "objet inconnu \"{0}\" dans l'attribut \"{1}\" pour \"{2}\"" -#: src/rougail/object_model.py:207 +#: src/rougail/object_model.py:206 msgid "" "identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family" msgstr "" "le paramètre identifier pour \"{0}\" dans \"{1}\" ne peut être placé pour " "une famille non dynamique" -#: src/rougail/object_model.py:230 +#: src/rougail/object_model.py:229 msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\"" msgstr "ne peut trouver la variable \"{0}\" défini dans \"{1}\" pour \"{2}\"" -#: src/rougail/object_model.py:233 +#: src/rougail/object_model.py:232 msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable" msgstr "" "la variable \"{0}\" défini dans \"{1}\" pour \"{2}\" est une variable " "dynamique" -#: src/rougail/object_model.py:247 +#: src/rougail/object_model.py:243 msgid "" "the variable \"{0}\" is not a follower, so cannot have index type for param " "in \"{1}\"" @@ -283,7 +283,7 @@ msgstr "" "la variable \"{0}\" n'est pas suiveuse, donc ne peut avoir de type index " "comme paramètre dans \"{1}\"" -#: src/rougail/object_model.py:480 +#: src/rougail/object_model.py:476 msgid "" "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a " "family" @@ -291,7 +291,7 @@ msgstr "" "une variable \"{0}\" est nécessaire pour l'attribut \"{1}\" pour \"{2}\" " "mais c'est une famille" -#: src/rougail/object_model.py:500 +#: src/rougail/object_model.py:496 msgid "" "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown " "variable \"{2}\"" @@ -299,7 +299,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\" calculé avec la variable " "inconnue \"{2}\"" -#: src/rougail/object_model.py:536 +#: src/rougail/object_model.py:532 msgid "" "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub " "dynamic option" @@ -307,14 +307,14 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est " "dans une sous option dynamique" -#: src/rougail/object_model.py:539 +#: src/rougail/object_model.py:535 msgid "" "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi" msgstr "" "la variable meneuse \"{0}\" a un attribut invalide \"{1}\", la variable " "suiveuse \"{2}\" est multiple" -#: src/rougail/object_model.py:555 +#: src/rougail/object_model.py:551 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" " "must not be multi" @@ -322,7 +322,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" ne " "doit pas être multiple" -#: src/rougail/object_model.py:560 +#: src/rougail/object_model.py:556 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not " "be a multi or the variable \"{2}\" must be multi" @@ -330,7 +330,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable ne doit pas " "être multiple ou la variable \"{2}\" doit être multiple" -#: src/rougail/object_model.py:565 +#: src/rougail/object_model.py:561 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be " "a multi or the variable \"{2}\" must not be multi" @@ -338,7 +338,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable doit être " "multiple ou la variable \"{2}\" ne doit pas être multiple" -#: src/rougail/object_model.py:570 +#: src/rougail/object_model.py:566 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" " "is multi but is inside a list" @@ -346,7 +346,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", la variable \"{2}\" est " "multiple mais est dans une liste" -#: src/rougail/object_model.py:583 +#: src/rougail/object_model.py:579 msgid "" "\"{0}\" attribut shall not have an \"optional\" attribute for variable " "\"{1}\"" @@ -354,7 +354,7 @@ msgstr "" "l'attribut \"{0}\" ne devrait pas avoir d'attribut \"optional\" pour la " "variable \"{1}\"" -#: src/rougail/object_model.py:595 +#: src/rougail/object_model.py:591 msgid "" "variable \"{0}\" has a default value calculated with \"{1}\" which has " "incompatible type" @@ -362,7 +362,7 @@ msgstr "" "la variable \"{0}\" a une valeur par défaut calculé a partir de \"{1}\" " "laquelle a un type incompatible" -#: src/rougail/object_model.py:632 +#: src/rougail/object_model.py:628 msgid "" "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for " "variable \"{1}\"" @@ -370,7 +370,7 @@ msgstr "" "\"when\" n'est pas autorisé avec le format en version 1.0 pour l'attribut " "\"{0}\" pour la variable \"{1}\"" -#: src/rougail/object_model.py:635 +#: src/rougail/object_model.py:631 msgid "" "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and " "\"when_not\" cannot set together" @@ -378,7 +378,7 @@ msgstr "" "la variable \"{0}\" a un attribut invalide \"{1}\", \"when\" et \"when_not\" " "ne peuvent pas être défini ensemble" -#: src/rougail/object_model.py:641 +#: src/rougail/object_model.py:637 msgid "" "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for " "variable \"{1}\"" @@ -386,7 +386,7 @@ msgstr "" "\"when_not\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\" pour " "la variable variable \"{1}\"" -#: src/rougail/object_model.py:695 +#: src/rougail/object_model.py:691 msgid "" "cannot find variable \"{0}\" for the information \"{1}\" when calculating " "\"{2}\"" @@ -394,18 +394,18 @@ msgstr "" "ne peut trouver la variable \"{0}\" pour l'information \"{1}\" lors du " "calcul de \"{2}\"" -#: src/rougail/object_model.py:698 +#: src/rougail/object_model.py:694 msgid "" "identifier not allowed for the information \"{0}\" when calculating \"{1}\"" msgstr "" "identifier n'est pas autorisé pour l'information \"{0}\" lors du calcul de " "\"{1}\"" -#: src/rougail/object_model.py:747 +#: src/rougail/object_model.py:743 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\"" msgstr "\"when\" n'est pas autorisé au format 1.0 pour l'attribut \"{0}\"" -#: src/rougail/object_model.py:751 src/rougail/object_model.py:759 +#: src/rougail/object_model.py:747 src/rougail/object_model.py:755 msgid "" "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" " "cannot set together" @@ -413,7 +413,7 @@ msgstr "" "l'identifiant a un attribut invalide \"{0}\", \"when\" et \"when_not\" ne " "peuvent pas être défini ensemble" -#: src/rougail/object_model.py:781 +#: src/rougail/object_model.py:777 msgid "" "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\"" msgstr "" @@ -491,11 +491,14 @@ msgstr "" "la variable \"{0}\" contient des secrets et ne devrait pas être défini dans " "{1}" -#: src/rougail/user_datas.py:234 -msgid "the variable \"{0}\" is a family in {1}" -msgstr "la variable \"{0}\" est une famille dans {1}" +#: src/rougail/user_datas.py:236 +msgid "" +"the variable \"{0}\" is a family, so cannot set the value \"{1}\" in {2}" +msgstr "" +"la variable \"{0}\" est une famille, donc ne peut avoir l'avoir \"{1}\" dans " +"{2}" -#: src/rougail/user_datas.py:249 +#: src/rougail/user_datas.py:251 msgid "{0} loaded from {1}" msgstr "{0} chargée depuis {1}" diff --git a/locale/rougail.pot b/locale/rougail.pot index 7edb25b17..a2624084d 100644 --- a/locale/rougail.pot +++ b/locale/rougail.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2025-04-29 23:12+0200\n" +"POT-Creation-Date: 2025-05-03 22:50+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -155,32 +155,32 @@ msgstr "" msgid "family \"{0}\" define multiple time" msgstr "" -#: src/rougail/convert.py:682 +#: src/rougail/convert.py:679 msgid "variable \"{0}\" define multiple time" msgstr "" -#: src/rougail/convert.py:788 +#: src/rougail/convert.py:782 msgid "params must be a dict for {0}" msgstr "" -#: src/rougail/convert.py:810 +#: src/rougail/convert.py:803 msgid "\"{0}\" has an invalid \"params\" for {1}: {2}" msgstr "" -#: src/rougail/convert.py:824 +#: src/rougail/convert.py:817 msgid "secret_manager must be a dict for {0}" msgstr "" -#: src/rougail/convert.py:1155 +#: src/rougail/convert.py:1147 msgid "Cannot execute annotate multiple time" msgstr "" -#: src/rougail/convert.py:1162 +#: src/rougail/convert.py:1154 msgid "invalid \"structural\" definition ({0}), we cannot load any structural file!" msgstr "" #: src/rougail/error.py:67 src/rougail/tiramisu.py:50 -#: src/rougail/user_datas.py:251 +#: src/rougail/user_datas.py:253 msgid "{0} in {1}" msgstr "" @@ -188,103 +188,103 @@ msgstr "" msgid "unknown boolean value \"{0}\"" msgstr "" -#: src/rougail/object_model.py:183 +#: src/rougail/object_model.py:182 msgid "cannot find variable \"{0}\" defined in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:187 +#: src/rougail/object_model.py:186 msgid "the variable \"{0}\" is in fact a family in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:190 src/rougail/object_model.py:483 +#: src/rougail/object_model.py:189 src/rougail/object_model.py:479 msgid "unknown object \"{0}\" in attribute \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:207 +#: src/rougail/object_model.py:206 msgid "identifier parameter for \"{0}\" in \"{1}\" cannot be set none dynamic family" msgstr "" -#: src/rougail/object_model.py:230 +#: src/rougail/object_model.py:229 msgid "cannot find variable \"{0}\" defined in \"{1}\" for \"{2}\"" msgstr "" -#: src/rougail/object_model.py:233 +#: src/rougail/object_model.py:232 msgid "variable \"{0}\" defined in \"{1}\" for \"{2}\" is a dynamic variable" msgstr "" -#: src/rougail/object_model.py:247 +#: src/rougail/object_model.py:243 msgid "the variable \"{0}\" is not a follower, so cannot have index type for param in \"{1}\"" msgstr "" -#: src/rougail/object_model.py:480 +#: src/rougail/object_model.py:476 msgid "a variable \"{0}\" is needs in attribute \"{1}\" for \"{2}\" but it's a family" msgstr "" -#: src/rougail/object_model.py:500 +#: src/rougail/object_model.py:496 msgid "variable \"{0}\" has an attribute \"{1}\" calculated with the unknown variable \"{2}\"" msgstr "" -#: src/rougail/object_model.py:536 +#: src/rougail/object_model.py:532 msgid "the variable \"{0}\" has an invalid \"{1}\" the variable \"{2}\" is in a sub dynamic option" msgstr "" -#: src/rougail/object_model.py:539 +#: src/rougail/object_model.py:535 msgid "the leader \"{0}\" has an invalid \"{1}\" the follower \"{2}\" is a multi" msgstr "" -#: src/rougail/object_model.py:555 +#: src/rougail/object_model.py:551 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" must not be multi" msgstr "" -#: src/rougail/object_model.py:560 +#: src/rougail/object_model.py:556 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must not be a multi or the variable \"{2}\" must be multi" msgstr "" -#: src/rougail/object_model.py:565 +#: src/rougail/object_model.py:561 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable must be a multi or the variable \"{2}\" must not be multi" msgstr "" -#: src/rougail/object_model.py:570 +#: src/rougail/object_model.py:566 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", the variable \"{2}\" is multi but is inside a list" msgstr "" -#: src/rougail/object_model.py:583 +#: src/rougail/object_model.py:579 msgid "\"{0}\" attribut shall not have an \"optional\" attribute for variable \"{1}\"" msgstr "" -#: src/rougail/object_model.py:595 +#: src/rougail/object_model.py:591 msgid "variable \"{0}\" has a default value calculated with \"{1}\" which has incompatible type" msgstr "" -#: src/rougail/object_model.py:632 +#: src/rougail/object_model.py:628 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\"" msgstr "" -#: src/rougail/object_model.py:635 +#: src/rougail/object_model.py:631 msgid "the variable \"{0}\" has an invalid attribute \"{1}\", \"when\" and \"when_not\" cannot set together" msgstr "" -#: src/rougail/object_model.py:641 +#: src/rougail/object_model.py:637 msgid "\"when_not\" is not allowed in format version 1.0 for attribute \"{0}\" for variable \"{1}\"" msgstr "" -#: src/rougail/object_model.py:695 +#: src/rougail/object_model.py:691 msgid "cannot find variable \"{0}\" for the information \"{1}\" when calculating \"{2}\"" msgstr "" -#: src/rougail/object_model.py:698 +#: src/rougail/object_model.py:694 msgid "identifier not allowed for the information \"{0}\" when calculating \"{1}\"" msgstr "" -#: src/rougail/object_model.py:747 +#: src/rougail/object_model.py:743 msgid "\"when\" is not allowed in format version 1.0 for attribute \"{0}\"" msgstr "" -#: src/rougail/object_model.py:751 src/rougail/object_model.py:759 +#: src/rougail/object_model.py:747 src/rougail/object_model.py:755 msgid "the identifier has an invalid attribute \"{0}\", \"when\" and \"when_not\" cannot set together" msgstr "" -#: src/rougail/object_model.py:781 +#: src/rougail/object_model.py:777 msgid "the variable \"{0}\" is not a follower, so cannot have index type for \"{1}\"" msgstr "" @@ -344,11 +344,11 @@ msgstr "" msgid "the variable \"{0}\" contains secrets and should not be defined in {1}" msgstr "" -#: src/rougail/user_datas.py:234 -msgid "the variable \"{0}\" is a family in {1}" +#: src/rougail/user_datas.py:236 +msgid "the variable \"{0}\" is a family, so cannot set the value \"{1}\" in {2}" msgstr "" -#: src/rougail/user_datas.py:249 +#: src/rougail/user_datas.py:251 msgid "{0} loaded from {1}" msgstr "" diff --git a/src/rougail/locale/fr/LC_MESSAGES/rougail.mo b/src/rougail/locale/fr/LC_MESSAGES/rougail.mo index 25791a09a65d29b722c6f69292e6751593a162c2..df373926c21614855159c6ccf6d19b998ba3ae5f 100644 GIT binary patch delta 957 zcmXZaUr19?9Ki9PnTisG%+y@wX=T=$HaEBE4;raytv^eJqCbqQyRyaFqTLC);uiE0 zL`DmOo_f@WVlbfy@gax^p9~2psfXTrsD~gTDEc06PoLj8_nh-Pzu&pD$*;-c$U3`E zM8b_Cr!kMcxQG{V<7SaVn8IT?i$nMW-FUP~q!UMxE%Fez<5TRxB^<$87DsU$Yw$U` z@ReI^`9tuYiEdopB4VPenL}|BhjA5y=-I27*3&1 z`~mfMFSogj)2P?|MqPlxd(m`RaI~en!>N1$^^L0cItQLZ-P#w}hkx-f_R{AgcpFdP z8yv9!%vs8q$Rw|+RGZ`4UKKaeS(Oizmi#N_ F{{Rc%j1d3; delta 906 zcmXZa-%C?r9LMpGiAq+4CQNhX$*ft<>g+6IB|7|pIcu|2j{Xim!qW8lY9C$s?bDr~je>`V3`zZS)xz61s zsjE>shAHgFc}(GV?8dPsX#{WKNqmdV7}_e?*pF=072Jupu@|3W5`W@x9O9!|yn|ct zL9<-_W$=uJ9$W}Y8C=6OPHdCLaSIYcv+C2XWaWeXU?YNDkuj#GFKO@)8Z9N11dW}ZTGl{07p ze84X34oNx8mHmoGnY)wi+%JR2IE}y2RC-~L)PY4bA1N zWK7@0Y9`H`bbh5!vq#EgRk)vhNIF(yomuU zdNWnuDu%s$^=ySo>uW~qYOL%