From d5e9cf6ec7f28071e71d2a46c6c0c930ca0d49c1 Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 19 Jun 2024 10:59:24 +0200 Subject: [PATCH 01/71] feat[DEI-185]: create depth average rule --- .../entities/rules/depth_average_rule.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 decoimpact/business/entities/rules/depth_average_rule.py diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py new file mode 100644 index 00000000..6ce59cc7 --- /dev/null +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -0,0 +1,46 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2024 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Module for DepthAverageRule class + +Classes: + DepthAverageRule +""" + +from datetime import datetime as _dt +from typing import List, Optional + +import numpy as _np +import xarray as _xr + +from decoimpact.business.entities.rules.i_array_based_rule import IArrayBasedRule +from decoimpact.business.entities.rules.rule_base import RuleBase +from decoimpact.crosscutting.i_logger import ILogger + + +class DepthAverageRule(RuleBase, IArrayBasedRule): + """Implementation for the depthaverage rule""" + + def __init__( + self, + name: str, + input_variable_names: List[str], + ): + super().__init__(name, input_variable_names) + + def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: + """Calculate depth average of assumed z-layers. + Args: + value_array (DataArray): Values to multiply + Returns: + DataArray: Averaged values + """ + + # TO DO: calculate depth average + dr = _xr.DataArray(value_array) + + return dr From 5a23242686a535d743aa5be6dd1e65337372264a Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Wed, 19 Jun 2024 13:46:19 +0200 Subject: [PATCH 02/71] add todo and parser --- .../entities/rules/depth_average_rule.py | 15 +++++-- .../data/parsers/parser_depth_average_rule.py | 45 +++++++++++++++++++ decoimpact/data/parsers/rule_parsers.py | 2 + 3 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 decoimpact/data/parsers/parser_depth_average_rule.py diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 6ce59cc7..2abebae4 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -10,11 +10,8 @@ Classes: DepthAverageRule """ +from typing import List -from datetime import datetime as _dt -from typing import List, Optional - -import numpy as _np import xarray as _xr from decoimpact.business.entities.rules.i_array_based_rule import IArrayBasedRule @@ -41,6 +38,16 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: """ # TO DO: calculate depth average + # Use setup of the time_aggregation_rule. + # Define the name of the depth dimension + # resamplen not needed + # _perform_operation should be adapted/integrated into execute for only DEPTH_AVERAGE + # use the volume based average (take depth differences into account as well as dry/wet cells) + + # For calculation -> array based (use functionality of xarray for the performance) + # 1. Calculate layer depth and add as a serperate varaiable + # 2. Calculate average over depth + # Same output! dr = _xr.DataArray(value_array) return dr diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py new file mode 100644 index 00000000..a9421c37 --- /dev/null +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -0,0 +1,45 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2024 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Module for ParserDepthAvarageRule class + +Classes: + ParserDepthAvarageRule +""" +from typing import Any, Dict + +from decoimpact.crosscutting.i_logger import ILogger +from decoimpact.data.api.i_rule_data import IRuleData +from decoimpact.data.dictionary_utils import get_dict_element +from decoimpact.data.entities.layer_filter_rule_data import LayerFilterRuleData +from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase + + +class ParserDepthAvarageRule(IParserRuleBase): + """Class for creating a ParserDepthAvarageRule""" + + @property + def rule_type_name(self) -> str: + """Type name for the rule""" + return "depth_average_rule" + + def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: + """Parses the provided dictionary to a IRuleData + Args: + dictionary (Dict[str, Any]): Dictionary holding the values + for making the rule + Returns: + RuleBase: Rule based on the provided data + """ + name = get_dict_element("name", dictionary) + input_variable_name = get_dict_element("input_variable", dictionary) + output_variable_name = get_dict_element("output_variable", dictionary) + description = get_dict_element("description", dictionary, False) or "" + + # TODO + # Validate: input_variable_name -> is correct parameter mesh2d_nLayers present + # Check if 1D/2D/3D have always this parameter diff --git a/decoimpact/data/parsers/rule_parsers.py b/decoimpact/data/parsers/rule_parsers.py index f345edb0..f4f8ed95 100644 --- a/decoimpact/data/parsers/rule_parsers.py +++ b/decoimpact/data/parsers/rule_parsers.py @@ -27,6 +27,7 @@ from decoimpact.data.parsers.parser_time_aggregation_rule import ( ParserTimeAggregationRule, ) +from decoimpact.data.parsers.parser_depth_avarage_rule import ParserDepthAvarageRule def rule_parsers() -> Iterator[IParserRuleBase]: @@ -41,3 +42,4 @@ def rule_parsers() -> Iterator[IParserRuleBase]: yield ParserFormulaRule() yield ParserClassificationRule() yield ParserAxisFilterRule() + yield ParserDepthAvarageRule() From 67bec0ab540c1231805566a11b184f37336c4349 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Wed, 19 Jun 2024 14:17:32 +0200 Subject: [PATCH 03/71] add data --- .../data/api/i_depth_average_rule_data.py | 27 ++++++++++++++ .../data/entities/depth_average_layer_data.py | 35 +++++++++++++++++++ decoimpact/data/parsers/rule_parsers.py | 2 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 decoimpact/data/api/i_depth_average_rule_data.py create mode 100644 decoimpact/data/entities/depth_average_layer_data.py diff --git a/decoimpact/data/api/i_depth_average_rule_data.py b/decoimpact/data/api/i_depth_average_rule_data.py new file mode 100644 index 00000000..eba69de0 --- /dev/null +++ b/decoimpact/data/api/i_depth_average_rule_data.py @@ -0,0 +1,27 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2024 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Module for IDepthAverageRuleData interface + +Interfaces: + IDepthAverageRuleData + +""" + + +from abc import ABC, abstractmethod + +from decoimpact.data.api.i_rule_data import IRuleData + + +class IDepthAverageRuleData(IRuleData, ABC): + """Data for a DepthAverageRule""" + + @property + @abstractmethod + def input_variable(self) -> str: + """Name of the input variable""" diff --git a/decoimpact/data/entities/depth_average_layer_data.py b/decoimpact/data/entities/depth_average_layer_data.py new file mode 100644 index 00000000..a4cfb9ef --- /dev/null +++ b/decoimpact/data/entities/depth_average_layer_data.py @@ -0,0 +1,35 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2024 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Module for (multiple) ClassificationRule class + +Classes: + (multiple) ClassificationRuleData + +""" + +from typing import Dict, List + +from decoimpact.data.api.i_depth_average_rule_data import IDepthAverageRuleData +from decoimpact.data.entities.rule_data import RuleData + + +class ClassificationRuleData(IDepthAverageRuleData, RuleData): + """Class for storing data related to formula rule""" + + def __init__( + self, + name: str, + input_variable: str, + ): + super().__init__(name) + self._input_variable = input_variable + + @property + def input_variable(self) -> str: + """Name of the input variable""" + return self._input_variable diff --git a/decoimpact/data/parsers/rule_parsers.py b/decoimpact/data/parsers/rule_parsers.py index f4f8ed95..31652643 100644 --- a/decoimpact/data/parsers/rule_parsers.py +++ b/decoimpact/data/parsers/rule_parsers.py @@ -27,7 +27,7 @@ from decoimpact.data.parsers.parser_time_aggregation_rule import ( ParserTimeAggregationRule, ) -from decoimpact.data.parsers.parser_depth_avarage_rule import ParserDepthAvarageRule +from decoimpact.data.parsers.parser_depth_average_rule import ParserDepthAvarageRule def rule_parsers() -> Iterator[IParserRuleBase]: From fc9051d7ada80060925488f631ea39d0bfb3c321 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Wed, 19 Jun 2024 14:20:06 +0200 Subject: [PATCH 04/71] Update template_input.yaml --- template_input.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/template_input.yaml b/template_input.yaml index 8a135197..71f4659b 100644 --- a/template_input.yaml +++ b/template_input.yaml @@ -62,5 +62,11 @@ rules: input_variables: [,] output_variable: + - depth_average_rule: + name: + description: + input_variable: + output_variable: + output-data: filename: From 8061706144a6de2d85383b23216b3bc181e332f5 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Wed, 19 Jun 2024 15:12:29 +0200 Subject: [PATCH 05/71] add to modelbuilder --- decoimpact/business/workflow/model_builder.py | 6 ++++++ decoimpact/data/parsers/parser_depth_average_rule.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index fd5eb6c5..1c6bc52f 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -19,6 +19,7 @@ from decoimpact.business.entities.rules.axis_filter_rule import AxisFilterRule from decoimpact.business.entities.rules.classification_rule import ClassificationRule from decoimpact.business.entities.rules.combine_results_rule import CombineResultsRule +from decoimpact.business.entities.rules.depth_average_rule import DepthAverageRule from decoimpact.business.entities.rules.formula_rule import FormulaRule from decoimpact.business.entities.rules.i_rule import IRule from decoimpact.business.entities.rules.layer_filter_rule import LayerFilterRule @@ -39,6 +40,7 @@ from decoimpact.data.api.i_classification_rule_data import IClassificationRuleData from decoimpact.data.api.i_combine_results_rule_data import ICombineResultsRuleData from decoimpact.data.api.i_data_access_layer import IDataAccessLayer +from decoimpact.data.api.i_depth_average_rule_data import IDepthAverageRuleData from decoimpact.data.api.i_formula_rule_data import IFormulaRuleData from decoimpact.data.api.i_layer_filter_rule_data import ILayerFilterRuleData from decoimpact.data.api.i_model_data import IModelData @@ -153,6 +155,10 @@ def _create_rule(rule_data: IRuleData) -> IRule: rule = ClassificationRule( rule_data.name, rule_data.input_variable_names, rule_data.criteria_table ) + elif isinstance(rule_data, IDepthAverageRuleData): + rule = DepthAverageRule( + rule_data.name, rule_data.input_variable, rule_data.output_variable + ) else: error_str = ( f"The rule type of rule '{rule_data.name}' is currently " diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index a9421c37..2dd3c4b3 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -36,7 +36,7 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: RuleBase: Rule based on the provided data """ name = get_dict_element("name", dictionary) - input_variable_name = get_dict_element("input_variable", dictionary) + input_variable_names = [get_dict_element("input_variable", dictionary)] output_variable_name = get_dict_element("output_variable", dictionary) description = get_dict_element("description", dictionary, False) or "" From c8521fb356cea9c3cf8269e73b1a087730a54756 Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 19 Jun 2024 17:43:47 +0200 Subject: [PATCH 06/71] DEI-185: depth_average_rule: calculate layer heights --- .../entities/rules/depth_average_rule.py | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 2abebae4..c5ce0a49 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -25,6 +25,7 @@ class DepthAverageRule(RuleBase, IArrayBasedRule): def __init__( self, name: str, + # variable_vertical_coordinates: str = 'mesh2d_interface_z', input_variable_names: List[str], ): super().__init__(name, input_variable_names) @@ -37,17 +38,33 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: DataArray: Averaged values """ - # TO DO: calculate depth average - # Use setup of the time_aggregation_rule. - # Define the name of the depth dimension - # resamplen not needed - # _perform_operation should be adapted/integrated into execute for only DEPTH_AVERAGE - # use the volume based average (take depth differences into account as well as dry/wet cells) + # get array with vertical dimensions (=depths) of layers + # :vertical_dimensions = mesh2d_nLayers: mesh2d_nInterfaces + # --> mesh2d_interface_z(mesh2d_nInterfaces=23) + # TO DO: how to retrieve this? + variable_vertical_coordinates = "mesh2d_interface_z" + depths = value_array.variables[variable_vertical_coordinates] + # QUESTION: is this variables with coordinates available this way? - # For calculation -> array based (use functionality of xarray for the performance) - # 1. Calculate layer depth and add as a serperate varaiable - # 2. Calculate average over depth - # Same output! - dr = _xr.DataArray(value_array) + # assemble array with heights of each layer (and add it to output) + # assumption: input array starts with bottom and works to top + # for example [-7,-2,-1] where -7=bottom and 0=surface + layer_heights = _xr.DataArray() + # loop through layers and calculate heigth: + for i in range(len(depths)): + if i < len(depths) - 1: + next_depth = depths[i + 1] + else: + next_depth = 0 + height = depths[i] - next_depth + layer_heights.append(height) + # TO DO: add this to output - return dr + # multiply value with size to get relative value + + # determine total size of vertical dimensions + + # calculate depth average (use xarray for best performance) + result_average = _xr.DataArray() # (this is a place holder) + + return result_average From 74709fc44447be8455300b9d9880383f07ab6cb0 Mon Sep 17 00:00:00 2001 From: Wouter Date: Thu, 20 Jun 2024 14:25:32 +0200 Subject: [PATCH 07/71] feat[DEI-185]: depth_average_rule: calculate depth average --- .../business/entities/rules/depth_average_rule.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index c5ce0a49..aed6f40a 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -44,12 +44,13 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: # TO DO: how to retrieve this? variable_vertical_coordinates = "mesh2d_interface_z" depths = value_array.variables[variable_vertical_coordinates] - # QUESTION: is this variables with coordinates available this way? + # QUESTION: is this variable with coordinates available this way? # assemble array with heights of each layer (and add it to output) # assumption: input array starts with bottom and works to top # for example [-7,-2,-1] where -7=bottom and 0=surface - layer_heights = _xr.DataArray() + layer_heights = [] # QUESTION: convert to _xr.DataArray() ? (how?) + # loop through layers and calculate heigth: for i in range(len(depths)): if i < len(depths) - 1: @@ -61,10 +62,10 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: # TO DO: add this to output # multiply value with size to get relative value - - # determine total size of vertical dimensions + relative_values = value_array * layer_heights # calculate depth average (use xarray for best performance) - result_average = _xr.DataArray() # (this is a place holder) + depth_average = relative_values / sum(layer_heights) + # QUESTION: how to deal with rounding? is it better to use the min(depths)? - return result_average + return depth_average From 6de8cc4807f42d722fd499cc6d3a2c720b912180 Mon Sep 17 00:00:00 2001 From: Wouter Date: Thu, 20 Jun 2024 15:03:49 +0200 Subject: [PATCH 08/71] feat[DEI-185]: correct layer data and parser and fix flake issues --- decoimpact/business/entities/rules/depth_average_rule.py | 6 ++---- decoimpact/data/entities/depth_average_layer_data.py | 2 +- decoimpact/data/parsers/parser_depth_average_rule.py | 9 ++++++++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index aed6f40a..bb54263e 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -10,8 +10,6 @@ Classes: DepthAverageRule """ -from typing import List - import xarray as _xr from decoimpact.business.entities.rules.i_array_based_rule import IArrayBasedRule @@ -26,9 +24,9 @@ def __init__( self, name: str, # variable_vertical_coordinates: str = 'mesh2d_interface_z', - input_variable_names: List[str], + input_variable_name: str, ): - super().__init__(name, input_variable_names) + super().__init__(name, [input_variable_name]) def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: """Calculate depth average of assumed z-layers. diff --git a/decoimpact/data/entities/depth_average_layer_data.py b/decoimpact/data/entities/depth_average_layer_data.py index a4cfb9ef..61353062 100644 --- a/decoimpact/data/entities/depth_average_layer_data.py +++ b/decoimpact/data/entities/depth_average_layer_data.py @@ -18,7 +18,7 @@ from decoimpact.data.entities.rule_data import RuleData -class ClassificationRuleData(IDepthAverageRuleData, RuleData): +class DepthAverageRuleData(IDepthAverageRuleData, RuleData): """Class for storing data related to formula rule""" def __init__( diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index a9421c37..76572b50 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -15,7 +15,7 @@ from decoimpact.crosscutting.i_logger import ILogger from decoimpact.data.api.i_rule_data import IRuleData from decoimpact.data.dictionary_utils import get_dict_element -from decoimpact.data.entities.layer_filter_rule_data import LayerFilterRuleData +from decoimpact.data.entities.depth_average_layer_data import DepthAverageRuleData from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase @@ -40,6 +40,13 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: output_variable_name = get_dict_element("output_variable", dictionary) description = get_dict_element("description", dictionary, False) or "" + rule_data = DepthAverageRuleData(name, input_variable_name) + + rule_data.output_variable = output_variable_name + rule_data.description = description + # TODO # Validate: input_variable_name -> is correct parameter mesh2d_nLayers present # Check if 1D/2D/3D have always this parameter + + return rule_data From 69ff44284cafb37a652e8f9a4586aa4a3fcb234e Mon Sep 17 00:00:00 2001 From: Wouter Date: Thu, 20 Jun 2024 15:12:26 +0200 Subject: [PATCH 09/71] feat[DEI-185]: use enumerate (fix flake8) --- decoimpact/business/entities/rules/depth_average_rule.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index bb54263e..8b9c2b0d 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -50,12 +50,12 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: layer_heights = [] # QUESTION: convert to _xr.DataArray() ? (how?) # loop through layers and calculate heigth: - for i in range(len(depths)): + for i, depth in enumerate(depths): if i < len(depths) - 1: next_depth = depths[i + 1] else: next_depth = 0 - height = depths[i] - next_depth + height = depth - next_depth layer_heights.append(height) # TO DO: add this to output From bd9a9a981cccff21ab138f4b0c13b57ade286f98 Mon Sep 17 00:00:00 2001 From: Wouter Date: Thu, 20 Jun 2024 15:27:41 +0200 Subject: [PATCH 10/71] feat[DEI-185]: clean up comments --- .../business/entities/rules/depth_average_rule.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 8b9c2b0d..73c770a2 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -45,10 +45,10 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: # QUESTION: is this variable with coordinates available this way? # assemble array with heights of each layer (and add it to output) - # assumption: input array starts with bottom and works to top + # assumption: input array starts with bottom and works to top (=0) # for example [-7,-2,-1] where -7=bottom and 0=surface - layer_heights = [] # QUESTION: convert to _xr.DataArray() ? (how?) - + # TO DO: check whether depths are starting at the bottom? + layer_heights = [] # loop through layers and calculate heigth: for i, depth in enumerate(depths): if i < len(depths) - 1: @@ -59,10 +59,8 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: layer_heights.append(height) # TO DO: add this to output - # multiply value with size to get relative value + # calculate depth average using relative value relative_values = value_array * layer_heights - - # calculate depth average (use xarray for best performance) depth_average = relative_values / sum(layer_heights) # QUESTION: how to deal with rounding? is it better to use the min(depths)? From 24bdabbefc852150b6485af3d4d6616f883b56a7 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 21 Jun 2024 09:14:20 +0200 Subject: [PATCH 11/71] feat[DEI-185]: flake8 --- decoimpact/data/entities/depth_average_layer_data.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/decoimpact/data/entities/depth_average_layer_data.py b/decoimpact/data/entities/depth_average_layer_data.py index 61353062..cc142159 100644 --- a/decoimpact/data/entities/depth_average_layer_data.py +++ b/decoimpact/data/entities/depth_average_layer_data.py @@ -12,8 +12,6 @@ """ -from typing import Dict, List - from decoimpact.data.api.i_depth_average_rule_data import IDepthAverageRuleData from decoimpact.data.entities.rule_data import RuleData From 22f82c79e0d8bde6bc5e304c5a2862fca6a4bc75 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 21 Jun 2024 09:16:00 +0200 Subject: [PATCH 12/71] feat[DEI-185]: pylint warning --- decoimpact/data/parsers/parser_depth_average_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 76572b50..963b6fef 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -45,7 +45,7 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: rule_data.output_variable = output_variable_name rule_data.description = description - # TODO + # TO DO # Validate: input_variable_name -> is correct parameter mesh2d_nLayers present # Check if 1D/2D/3D have always this parameter From 6868a9f4119a3161163255129b10283853c1c843 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 21 Jun 2024 12:44:03 +0200 Subject: [PATCH 13/71] feat[DEI-185]: rename depth_average_layer_data to depth_average_rule_data --- decoimpact/business/workflow/model_builder.py | 6 ++++++ ...pth_average_layer_data.py => depth_average_rule_data.py} | 0 decoimpact/data/parsers/parser_depth_average_rule.py | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) rename decoimpact/data/entities/{depth_average_layer_data.py => depth_average_rule_data.py} (100%) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index fd5eb6c5..a181666c 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -19,6 +19,7 @@ from decoimpact.business.entities.rules.axis_filter_rule import AxisFilterRule from decoimpact.business.entities.rules.classification_rule import ClassificationRule from decoimpact.business.entities.rules.combine_results_rule import CombineResultsRule +from decoimpact.business.entities.rules.depth_average_rule import DepthAverageRule from decoimpact.business.entities.rules.formula_rule import FormulaRule from decoimpact.business.entities.rules.i_rule import IRule from decoimpact.business.entities.rules.layer_filter_rule import LayerFilterRule @@ -97,6 +98,11 @@ def _create_rule(rule_data: IRuleData) -> IRule: rule_data.multipliers, rule_data.date_range, ) + elif isinstance(rule_data, ILayerFilterRuleData): + rule = DepthAverageRule( + rule_data.name, + [rule_data.input_variable], + ) elif isinstance(rule_data, ILayerFilterRuleData): rule = LayerFilterRule( rule_data.name, diff --git a/decoimpact/data/entities/depth_average_layer_data.py b/decoimpact/data/entities/depth_average_rule_data.py similarity index 100% rename from decoimpact/data/entities/depth_average_layer_data.py rename to decoimpact/data/entities/depth_average_rule_data.py diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 963b6fef..6af366a9 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -15,7 +15,7 @@ from decoimpact.crosscutting.i_logger import ILogger from decoimpact.data.api.i_rule_data import IRuleData from decoimpact.data.dictionary_utils import get_dict_element -from decoimpact.data.entities.depth_average_layer_data import DepthAverageRuleData +from decoimpact.data.entities.depth_average_rule_data import DepthAverageRuleData from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase From 4aee6cde0841ca8f5b8b8a2a952cefa916444dd1 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 21 Jun 2024 12:51:14 +0200 Subject: [PATCH 14/71] feat[DEI-185]: rule type implementation --- decoimpact/business/workflow/model_builder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index a181666c..287a3c67 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -40,6 +40,7 @@ from decoimpact.data.api.i_classification_rule_data import IClassificationRuleData from decoimpact.data.api.i_combine_results_rule_data import ICombineResultsRuleData from decoimpact.data.api.i_data_access_layer import IDataAccessLayer +from decoimpact.data.api.i_depth_average_rule_data import IDepthAverageRuleData from decoimpact.data.api.i_formula_rule_data import IFormulaRuleData from decoimpact.data.api.i_layer_filter_rule_data import ILayerFilterRuleData from decoimpact.data.api.i_model_data import IModelData @@ -98,7 +99,7 @@ def _create_rule(rule_data: IRuleData) -> IRule: rule_data.multipliers, rule_data.date_range, ) - elif isinstance(rule_data, ILayerFilterRuleData): + elif isinstance(rule_data, IDepthAverageRuleData): rule = DepthAverageRule( rule_data.name, [rule_data.input_variable], From 6620a898530af8cbdf8db991b20c4f163e47924f Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 24 Jun 2024 14:32:16 +0200 Subject: [PATCH 15/71] Complete workflow for depth averaged rule --- .../entities/rules/depth_average_rule.py | 58 ++++++++++++------- decoimpact/business/workflow/model_builder.py | 4 +- .../data/api/i_depth_average_rule_data.py | 5 +- .../data/entities/depth_average_rule_data.py | 11 ++-- .../data/parsers/parser_depth_average_rule.py | 17 +++--- 5 files changed, 57 insertions(+), 38 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 73c770a2..5969c94c 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -10,25 +10,33 @@ Classes: DepthAverageRule """ +from typing import Dict, List import xarray as _xr -from decoimpact.business.entities.rules.i_array_based_rule import IArrayBasedRule +from decoimpact.business.entities.rules.i_multi_array_based_rule import ( + IMultiArrayBasedRule, +) from decoimpact.business.entities.rules.rule_base import RuleBase from decoimpact.crosscutting.i_logger import ILogger -class DepthAverageRule(RuleBase, IArrayBasedRule): +class DepthAverageRule(RuleBase, IMultiArrayBasedRule): """Implementation for the depthaverage rule""" def __init__( self, name: str, # variable_vertical_coordinates: str = 'mesh2d_interface_z', - input_variable_name: str, + input_variable_names: List[str], ): - super().__init__(name, [input_variable_name]) + super().__init__(name, input_variable_names) - def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: + def validate(self, logger: ILogger) -> bool: + return True + + def execute( + self, value_arrays: Dict[str, _xr.DataArray], logger: ILogger + ) -> _xr.DataArray: """Calculate depth average of assumed z-layers. Args: value_array (DataArray): Values to multiply @@ -40,28 +48,34 @@ def execute(self, value_array: _xr.DataArray, logger: ILogger) -> _xr.DataArray: # :vertical_dimensions = mesh2d_nLayers: mesh2d_nInterfaces # --> mesh2d_interface_z(mesh2d_nInterfaces=23) # TO DO: how to retrieve this? - variable_vertical_coordinates = "mesh2d_interface_z" - depths = value_array.variables[variable_vertical_coordinates] + # variable_vertical_coordinates = "mesh2d_interface_z" + + print(value_arrays) + print(value_arrays.keys()) + # values_over_height = value_arrays[0].sum(dim="mesh2d_nLayers") + # total_heights = value_arrays[1].sum(dim="mesh2d_nLayers") + # print(value_arrays) + # depths = value_arrays[variable_vertical_coordinates].values # QUESTION: is this variable with coordinates available this way? # assemble array with heights of each layer (and add it to output) # assumption: input array starts with bottom and works to top (=0) # for example [-7,-2,-1] where -7=bottom and 0=surface # TO DO: check whether depths are starting at the bottom? - layer_heights = [] - # loop through layers and calculate heigth: - for i, depth in enumerate(depths): - if i < len(depths) - 1: - next_depth = depths[i + 1] - else: - next_depth = 0 - height = depth - next_depth - layer_heights.append(height) - # TO DO: add this to output + # layer_heights = [] + # # loop through layers and calculate heigth: + # for i, depth in enumerate(depths): + # if i < len(depths) - 1: + # next_depth = depths[i + 1] + # else: + # next_depth = 0 + # height = depth - next_depth + # layer_heights.append(height) + # # TO DO: add this to output - # calculate depth average using relative value - relative_values = value_array * layer_heights - depth_average = relative_values / sum(layer_heights) - # QUESTION: how to deal with rounding? is it better to use the min(depths)? + # # calculate depth average using relative value + # relative_values = value_array * layer_heights + # depth_average = relative_values / sum(layer_heights) + # # QUESTION: how to deal with rounding? is it better to use the min(depths)? - return depth_average + return value_arrays["salinity"] diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index 3a8625e5..791cc510 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -102,7 +102,7 @@ def _create_rule(rule_data: IRuleData) -> IRule: elif isinstance(rule_data, IDepthAverageRuleData): rule = DepthAverageRule( rule_data.name, - [rule_data.input_variable], + rule_data.input_variables, ) elif isinstance(rule_data, ILayerFilterRuleData): rule = LayerFilterRule( @@ -162,7 +162,7 @@ def _create_rule(rule_data: IRuleData) -> IRule: ) elif isinstance(rule_data, IDepthAverageRuleData): rule = DepthAverageRule( - rule_data.name, rule_data.input_variable, rule_data.output_variable + rule_data.name, [rule_data.input_variable], rule_data.output_variable ) else: error_str = ( diff --git a/decoimpact/data/api/i_depth_average_rule_data.py b/decoimpact/data/api/i_depth_average_rule_data.py index eba69de0..9272ba52 100644 --- a/decoimpact/data/api/i_depth_average_rule_data.py +++ b/decoimpact/data/api/i_depth_average_rule_data.py @@ -14,6 +14,7 @@ from abc import ABC, abstractmethod +from typing import List from decoimpact.data.api.i_rule_data import IRuleData @@ -23,5 +24,5 @@ class IDepthAverageRuleData(IRuleData, ABC): @property @abstractmethod - def input_variable(self) -> str: - """Name of the input variable""" + def input_variables(self) -> List[str]: + """List with input variable name and standard depth name""" diff --git a/decoimpact/data/entities/depth_average_rule_data.py b/decoimpact/data/entities/depth_average_rule_data.py index cc142159..760c8828 100644 --- a/decoimpact/data/entities/depth_average_rule_data.py +++ b/decoimpact/data/entities/depth_average_rule_data.py @@ -12,6 +12,7 @@ """ +from typing import List from decoimpact.data.api.i_depth_average_rule_data import IDepthAverageRuleData from decoimpact.data.entities.rule_data import RuleData @@ -22,12 +23,12 @@ class DepthAverageRuleData(IDepthAverageRuleData, RuleData): def __init__( self, name: str, - input_variable: str, + input_variables: List[str], ): super().__init__(name) - self._input_variable = input_variable + self._input_variables = input_variables @property - def input_variable(self) -> str: - """Name of the input variable""" - return self._input_variable + def input_variables(self) -> List[str]: + """List with input variable and the standard depth name""" + return self._input_variables diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 5eb9ea65..ba158dc2 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -10,7 +10,7 @@ Classes: ParserDepthAvarageRule """ -from typing import Any, Dict +from typing import Any, Dict, List from decoimpact.crosscutting.i_logger import ILogger from decoimpact.data.api.i_rule_data import IRuleData @@ -35,12 +35,15 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: Returns: RuleBase: Rule based on the provided data """ - name = get_dict_element("name", dictionary) - input_variable_names = [get_dict_element("input_variable", dictionary)] - output_variable_name = get_dict_element("output_variable", dictionary) - description = get_dict_element("description", dictionary, False) or "" - - rule_data = DepthAverageRuleData(name, input_variable_name) + name: str = get_dict_element("name", dictionary) + input_variable_names: List[str] = [ + get_dict_element("input_variable", dictionary), + "mesh2d_interface_z", + ] + output_variable_name: str = get_dict_element("output_variable", dictionary) + description: str = get_dict_element("description", dictionary, False) or "" + + rule_data = DepthAverageRuleData(name, input_variable_names) rule_data.output_variable = output_variable_name rule_data.description = description From 5292e7cd245336c71e799e1ab643e6da62a37393 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 24 Jun 2024 16:41:31 +0200 Subject: [PATCH 16/71] first implementation depth averaged rule --- .../entities/rules/depth_average_rule.py | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 5969c94c..0148ce4d 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -47,35 +47,29 @@ def execute( # get array with vertical dimensions (=depths) of layers # :vertical_dimensions = mesh2d_nLayers: mesh2d_nInterfaces # --> mesh2d_interface_z(mesh2d_nInterfaces=23) - # TO DO: how to retrieve this? # variable_vertical_coordinates = "mesh2d_interface_z" - print(value_arrays) - print(value_arrays.keys()) - # values_over_height = value_arrays[0].sum(dim="mesh2d_nLayers") - # total_heights = value_arrays[1].sum(dim="mesh2d_nLayers") - # print(value_arrays) - # depths = value_arrays[variable_vertical_coordinates].values - # QUESTION: is this variable with coordinates available this way? + # TODO: + # - add comments + # - make sure 'salinity' is not hardcoded, but use either first value from value_arrays or use a generic key here + # - - # assemble array with heights of each layer (and add it to output) - # assumption: input array starts with bottom and works to top (=0) - # for example [-7,-2,-1] where -7=bottom and 0=surface - # TO DO: check whether depths are starting at the bottom? - # layer_heights = [] - # # loop through layers and calculate heigth: - # for i, depth in enumerate(depths): - # if i < len(depths) - 1: - # next_depth = depths[i + 1] - # else: - # next_depth = 0 - # height = depth - next_depth - # layer_heights.append(height) - # # TO DO: add this to output + depths = value_arrays["mesh2d_interface_z"] + + layer_heights = depths.diff(dim="mesh2d_nInterfaces") # # calculate depth average using relative value - # relative_values = value_array * layer_heights - # depth_average = relative_values / sum(layer_heights) - # # QUESTION: how to deal with rounding? is it better to use the min(depths)? + relative_values = value_arrays["salinity"].dot( + layer_heights, "mesh2d_nInterfaces" + ) + sum_relative_values = relative_values.sum(dim="mesh2d_nLayers") + + # TODO: this goes wrong!! cannot sum layer_heights -> for every column different total height, because of dry cells!! do something smart with the nan cells in the salinity! + depth_average = sum_relative_values / sum(layer_heights) + print("hoi") + print(sum(layer_heights).values) + print(relative_values.values[1, 2328, :]) + print(sum_relative_values.values[1, 2328]) + print(depth_average.values[1, 2328]) - return value_arrays["salinity"] + return depth_average From ec78db9076ae30267399b1da94b4894b1ae582b9 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 25 Jun 2024 15:03:11 +0200 Subject: [PATCH 17/71] correct calculation + clean up --- .../entities/rules/depth_average_rule.py | 56 +++++++++---------- .../data/parsers/parser_depth_average_rule.py | 4 -- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 0148ce4d..1543a51b 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -26,7 +26,6 @@ class DepthAverageRule(RuleBase, IMultiArrayBasedRule): def __init__( self, name: str, - # variable_vertical_coordinates: str = 'mesh2d_interface_z', input_variable_names: List[str], ): super().__init__(name, input_variable_names) @@ -43,33 +42,34 @@ def execute( Returns: DataArray: Averaged values """ + interface_name = "mesh2d_interface_z" + layer_name = "mesh2d_nLayers" - # get array with vertical dimensions (=depths) of layers - # :vertical_dimensions = mesh2d_nLayers: mesh2d_nInterfaces - # --> mesh2d_interface_z(mesh2d_nInterfaces=23) - # variable_vertical_coordinates = "mesh2d_interface_z" - - # TODO: - # - add comments - # - make sure 'salinity' is not hardcoded, but use either first value from value_arrays or use a generic key here - # - - - depths = value_arrays["mesh2d_interface_z"] - - layer_heights = depths.diff(dim="mesh2d_nInterfaces") - - # # calculate depth average using relative value - relative_values = value_arrays["salinity"].dot( - layer_heights, "mesh2d_nInterfaces" - ) - sum_relative_values = relative_values.sum(dim="mesh2d_nLayers") - - # TODO: this goes wrong!! cannot sum layer_heights -> for every column different total height, because of dry cells!! do something smart with the nan cells in the salinity! - depth_average = sum_relative_values / sum(layer_heights) - print("hoi") - print(sum(layer_heights).values) - print(relative_values.values[1, 2328, :]) - print(sum_relative_values.values[1, 2328]) - print(depth_average.values[1, 2328]) + # The first DataArray in our value_arrays contains the values to be averaged + # But the name of the key is given by the user, so just take the first + variables = next(iter(value_arrays.values())) + depths = value_arrays[interface_name] + + # Calculate the layer heights between depths + layer_heights = depths.diff(dim=interface_name) + + # Give new dimension (dim of heights is always N-1 of dim depths) + layer_heights = layer_heights.rename({interface_name: layer_name}) + + # Broadcast the heights in all dimensions + heigths_all_dims = layer_heights.broadcast_like(variables) + + # Use the nan filtering of the variables to set the correct depth per column + heights_all_filtered = heigths_all_dims.where(variables.notnull()) + + # Calculate depth average using relative value + relative_values = variables.dot(layer_heights, interface_name) + + # Calculate total height and total value in column + sum_relative_values = relative_values.sum(dim=layer_name) + sum_heights = heights_all_filtered.sum(dim=layer_name) + + # Calculate average + depth_average = sum_relative_values / sum_heights return depth_average diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index ba158dc2..95ae8c29 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -48,8 +48,4 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: rule_data.output_variable = output_variable_name rule_data.description = description - # TO DO - # Validate: input_variable_name -> is correct parameter mesh2d_nLayers present - # Check if 1D/2D/3D have always this parameter - return rule_data From 5f2fa1effd8af921c8f596c43b3746434d9d4617 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 26 Jun 2024 11:43:36 +0200 Subject: [PATCH 18/71] fix typo --- .../test10d_formula_based_timeaxes_calculation.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests_acceptance/input_yaml_files/test10d_formula_based_timeaxes_calculation.yaml b/tests_acceptance/input_yaml_files/test10d_formula_based_timeaxes_calculation.yaml index 4a057307..b409d392 100644 --- a/tests_acceptance/input_yaml_files/test10d_formula_based_timeaxes_calculation.yaml +++ b/tests_acceptance/input_yaml_files/test10d_formula_based_timeaxes_calculation.yaml @@ -9,11 +9,11 @@ input-data: rules: - formula_rule: - name: Get water_depth by caculation - description: Get water_depth by caculation + name: Get water_depth by calculation + description: Get water_depth by calculation formula: bathymetry + water_level - input_variables: [water_level, bathymetry] + input_variables: [water_level, bathymetry] output_variable: water_depth_calc - + output-data: filename: ./tests_acceptance/output_nc_files/test10d_formula_based_timeaxes_calculation.nc From 86f340c011846d4bc04ce506f50bd73e5bec6224 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 26 Jun 2024 13:06:59 +0200 Subject: [PATCH 19/71] typo. Add test for depth averaged rule --- .../entities/rules/depth_average_rule.py | 3 +- .../entities/rules/test_depth_average_rule.py | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/business/entities/rules/test_depth_average_rule.py diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 1543a51b..2fd7584f 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -11,6 +11,7 @@ DepthAverageRule """ from typing import Dict, List + import xarray as _xr from decoimpact.business.entities.rules.i_multi_array_based_rule import ( @@ -21,7 +22,7 @@ class DepthAverageRule(RuleBase, IMultiArrayBasedRule): - """Implementation for the depthaverage rule""" + """Implementation for the depth average rule""" def __init__( self, diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py new file mode 100644 index 00000000..e4eacb2f --- /dev/null +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -0,0 +1,52 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2023 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Tests for RuleBase class +""" + +from typing import List +from unittest.mock import Mock + +import numpy as _np +import pytest +import xarray as _xr + +from decoimpact.business.entities.rules.depth_average_rule import DepthAverageRule +from decoimpact.business.entities.rules.multi_array_operation_type import ( + MultiArrayOperationType, +) +from decoimpact.crosscutting.i_logger import ILogger + + +def test_create_depth_average_rule_with_defaults(): + """Test creating a depth average rule with defaults""" + + # Arrange & Act + rule = DepthAverageRule("test_rule_name", "foo") + # Assert + assert isinstance(rule, DepthAverageRule) + assert rule.name == "test_rule_name" + assert rule.description == "" + assert rule.input_variable_names == "foo" + assert rule.output_variable_name == "output" + + +def test_no_validate_error_with_correct_rule(): + """Test a correct combine results rule validates without error""" + + # Arrange + logger = Mock(ILogger) + rule = CombineResultsRule( + "test_rule_name", ["foo", "hello"], MultiArrayOperationType.MULTIPLY + ) + + # Act + valid = rule.validate(logger) + + # Assert + assert isinstance(rule, CombineResultsRule) + assert valid From aad71cd31b2c9dc9e207fe33444b418d669a4873 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 26 Jun 2024 13:09:26 +0200 Subject: [PATCH 20/71] correct validation test of depth average rule --- .../entities/rules/test_depth_average_rule.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index e4eacb2f..50d562a5 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -26,27 +26,28 @@ def test_create_depth_average_rule_with_defaults(): """Test creating a depth average rule with defaults""" # Arrange & Act - rule = DepthAverageRule("test_rule_name", "foo") + rule = DepthAverageRule("test_rule_name", ["foo", "hello"]) + # Assert assert isinstance(rule, DepthAverageRule) assert rule.name == "test_rule_name" assert rule.description == "" - assert rule.input_variable_names == "foo" + assert rule.input_variable_names == ["foo", "hello"] assert rule.output_variable_name == "output" def test_no_validate_error_with_correct_rule(): - """Test a correct combine results rule validates without error""" + """Test a correct depth average rule validates without error""" # Arrange logger = Mock(ILogger) - rule = CombineResultsRule( - "test_rule_name", ["foo", "hello"], MultiArrayOperationType.MULTIPLY + rule = DepthAverageRule( + "test_rule_name", ["foo", "hello"], ) # Act valid = rule.validate(logger) # Assert - assert isinstance(rule, CombineResultsRule) + assert isinstance(rule, DepthAverageRule) assert valid From dd59628a99bc8072381532a37394db46dffcc98b Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 26 Jun 2024 13:23:48 +0200 Subject: [PATCH 21/71] remove trailing spaces --- docs/manual/input.md | 68 ++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/docs/manual/input.md b/docs/manual/input.md index c3b96f17..59b6d5fb 100644 --- a/docs/manual/input.md +++ b/docs/manual/input.md @@ -19,8 +19,8 @@ output-data: In the input data the variables that are present in the input data provided through “filename” are selected for use. It is possible to filter the input data by providing a start date or end date (format: "dd-mm-yyyy"); this is optional. The variables that are used can be selected under “variable_mapping”. Here you are also able to rename variables as the name used for storage is often cryptic. -At output data the location where the output file needs to be written can be provided through “filename”. In this output file only variables that have been used from the input data and variables that have been created in the model are stored. It is possible to reduce the file size with the optional parameter "save_only_variables", which can take the name of one or several variables. -The model needs at least one rule under “rules” to execute. +At output data the location where the output file needs to be written can be provided through “filename”. In this output file only variables that have been used from the input data and variables that have been created in the model are stored. It is possible to reduce the file size with the optional parameter "save_only_variables", which can take the name of one or several variables. +The model needs at least one rule under “rules” to execute. ``` #FORMAT @@ -48,7 +48,7 @@ version: 0.1.5 # Mapping: mesh2d_sa1 : Salinity (PSU) # mesh2d_s1 : Water level (m NAP) -# mesh2d_waterdepth : Water depth (m NAP) +# mesh2d_waterdepth : Water depth (m NAP) input-data: - dataset: filename: examples/data/FM-VZM_0000_map.nc @@ -145,7 +145,7 @@ When using the multiply rule with a start and end date (or multiple start and en ### Layer filter rule ``` -FORMAT +FORMAT - layer_filter_rule: name: description: @@ -174,7 +174,7 @@ The layer filter rule allows for the extraction of a layer from 3D variables. Th ### Time aggregation rule ``` -FORMAT +FORMAT - time_aggregation_rule: name: description: @@ -184,7 +184,7 @@ FORMAT output_variable: ``` -The time aggregation rule allows for calculating a statistical summary over the time axes of 3D and 2D variables. This could be used for calculating the maximum value over a year (e.g., for water level) or the minimum value over a month (e.g., oxygen concentration). The rule operates both on 3D variables and 2D variables as long as they have a time axis and returns a 3D or 2D result depending on input with the statistic calculated for a new time axis (e.g., year or month). +The time aggregation rule allows for calculating a statistical summary over the time axes of 3D and 2D variables. This could be used for calculating the maximum value over a year (e.g., for water level) or the minimum value over a month (e.g., oxygen concentration). The rule operates both on 3D variables and 2D variables as long as they have a time axis and returns a 3D or 2D result depending on input with the statistic calculated for a new time axis (e.g., year or month). Operations available: Add, Average, Median, Min, Max, period statistics, Stdev and Percentile(n). When using percentile, add a number for the nth percentile with brackets like this: percentile(10). Stdev calculates the standard- deviation over the time period. Under period statistics are explained further in the text. Time aggregation available: Year, Month @@ -237,7 +237,7 @@ Calculate the number of consecutive periods of dry time monthly ### Step function rule ``` -FORMAT +FORMAT - step_function_rule:: name: description: @@ -267,7 +267,7 @@ The rule needs to be applied to an existing 2D/3D variable with or without time - [ 1.2 , 3.0 ] - [ 1.3 , 4.0 ] - [ 999.0 , 4.0 ] - input_variable: salinity + input_variable: salinity output_variable: salinity_class ``` @@ -299,7 +299,7 @@ The rule needs to be applied to an existing 2D/3D variable with or without time ### Response curve rule ``` -FORMAT +FORMAT - response_curve_rule: name: description: @@ -311,14 +311,14 @@ FORMAT output_variable: ``` -The response curve rule performs a linear interpolation over the provided values of the variables of 3D and 2D variables time dependent arrays. This could be used for a fuzzy logic translation of variables into ecological responses to these variables (e.g., suitability for aquatic plants based on light availability). The rule operates both on 3D variables and 2D variables, independent of the time axes, and returns decimal or fractional values in a 3D or 2D result, either with time axis, depending on input. +The response curve rule performs a linear interpolation over the provided values of the variables of 3D and 2D variables time dependent arrays. This could be used for a fuzzy logic translation of variables into ecological responses to these variables (e.g., suitability for aquatic plants based on light availability). The rule operates both on 3D variables and 2D variables, independent of the time axes, and returns decimal or fractional values in a 3D or 2D result, either with time axis, depending on input. The rule needs to be applied to an existing 2D/3D variable with or without time axis. A new 2D/3D variable with or without time axis is created when the rule is executed. ``` -#EXAMPLE : Response of the habitat suitability of Long-leaf pond weed -# (Potamogeton nodosus) to water depth. +#EXAMPLE : Response of the habitat suitability of Long-leaf pond weed +# (Potamogeton nodosus) to water depth. # Suitable between 0.0 – 2.0 m and highly suitable between 0.5 – 1.0 m - response_curve_rule: name: HSI Pond weed water depth @@ -331,7 +331,7 @@ The rule needs to be applied to an existing 2D/3D variable with or without time - [ 1.0 , 1.0 ] - [ 2.0 , 0.0 ] - [ 999.0 , 0.0 ] - input_variable: water_depth + input_variable: water_depth output_variable: HSI_Pnodosus_water_depth ``` @@ -344,7 +344,7 @@ The rule needs to be applied to an existing 2D/3D variable with or without time ### Combine results rule ``` -FORMAT +FORMAT - combine_results_rule: name: description: @@ -353,19 +353,19 @@ FORMAT output_variable: ``` -The combine results rule combines the output of two or more variables to one output variable. The way this data is combined depends on the operation chosen. This could be used for adding mutual exclusive results (e.g., habitat suitability based on flow velocity and water depth) or asses difference between results (e.g., waterlevel and bathymetry to get the water depth).The rule operates one or multiple 3D variables or 2D variables, independent of the time axes, as long as these all have the same dimensions and returns a single 3D or 2D result, either with time axis, depending on input. +The combine results rule combines the output of two or more variables to one output variable. The way this data is combined depends on the operation chosen. This could be used for adding mutual exclusive results (e.g., habitat suitability based on flow velocity and water depth) or asses difference between results (e.g., waterlevel and bathymetry to get the water depth).The rule operates one or multiple 3D variables or 2D variables, independent of the time axes, as long as these all have the same dimensions and returns a single 3D or 2D result, either with time axis, depending on input. Operations available: Add, Subtract, Multiply, Average, Median, Min and Max The rule needs to be applied to an existing 2D/3D variables with or without time axis. A new 2D/3D variable with or without time axis is created when the rule is executed. ``` -#EXAMPLE : Calculate bathymetry over time +#EXAMPLE : Calculate bathymetry over time # This is just an example, there is a variable bed level without time (mesh2d_flowelem_bl) - combine_results_rule: name: Calculate bathymetry - description: Calculate bathymetry over time by adding water level and water depth + description: Calculate bathymetry over time by adding water level and water depth operation: subtract input_variables: ["water_level","water_depth"] output_variable: bathymetry_time @@ -380,7 +380,7 @@ The rule needs to be applied to an existing 2D/3D variables with or without time ### Formula rule ``` -FORMAT +FORMAT - formula_rule: name: description: @@ -389,24 +389,24 @@ FORMAT output_variable: ``` -With the formula based rule multiple variables can be combined in a flexible way. Operations that are supported are the standard operators. +With the formula based rule multiple variables can be combined in a flexible way. Operations that are supported are the standard operators. The rule needs to be applied to an existing 2D/3D variables with or without time axis. A new 2D/3D variable with or without time axis is created when the rule is executed. ``` -#EXAMPLE : Calculate bathymetry over time +#EXAMPLE : Calculate bathymetry over time # This is just an example, there is a variable bedlevel without time (mesh2d_flowelem_bl) - formula_rule: name: Calculate bathymetry - description: Calculate bathymetry over time by adding water level and water depth + description: Calculate bathymetry over time by adding water level and water depth formula: water_level + water_depth input_variables: ["water_level","water_depth"] output_variable: bathymetry_time ``` -A lot of operators are supported with the formula based rule. Given two variables "x" and "y", formulas can be implemented for the following operators: +A lot of operators are supported with the formula based rule. Given two variables "x" and "y", formulas can be implemented for the following operators: | **Operator** | **Name** | **Example** | |:---:|:---:|:---:| @@ -418,7 +418,7 @@ A lot of operators are supported with the formula based rule. Given two variable | ** | Exponentiation | x ** y | | // | Floor division | x // y | -When a formula results in a boolean, it will be converted to a float result. Meaning that True = 1 and False = 0. Comparison, logical, identity, identity and bitwise operators are supported: +When a formula results in a boolean, it will be converted to a float result. Meaning that True = 1 and False = 0. Comparison, logical, identity, identity and bitwise operators are supported: | **Operator** | **Name** | **Example** | |:---:|:---:|:---:| @@ -452,7 +452,7 @@ For more information on these operators click [here](https://www.w3schools.com/p ### (Multiple) Classification rule ``` -FORMAT +FORMAT - classification_rule: name: description: @@ -470,7 +470,7 @@ The rule needs to be applied to an existing 2D/3D variables with or without time Criteria ranges available are: -|**Criteria range**| **Example**|**Description**| +|**Criteria range**| **Example**|**Description**| |:---:|:---:|:---:| | "-" | "-" | Value is not applicable to category, all is allowed | | "criteria_value" | "5" | Value is exectly the criteria value (only applicable for integers) | @@ -478,14 +478,14 @@ Criteria ranges available are: | "criteria_value" | ">=1" | Value needs to larger than or equal to criteria value | | "4.0" , "-" , "-"] # too deep @@ -495,11 +495,11 @@ Criteria ranges available are: input_variables: ["MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] output_variable: aquatic_plant_classes - + - classification_rule: name: Suitability for aquatic plants description: Derive the suitability for aquatic plants based on the classification - criteria_table: + criteria_table: - ["output", "aquatic_plant_classes"] - [ 0 , "1:4"] # not suitable - [ 1 , "5"] # suitable @@ -516,7 +516,7 @@ Criteria ranges available are: ### Rolling statistic rule ``` -FORMAT +FORMAT - rolling_statistics_rule: name: description: @@ -531,7 +531,7 @@ The rolling statistic rule allows for a rolling statistic based on the chosen op Operations available: Add, Average, Median, Min, Max, count_periods, Stdev and Percentile(n). When using percentile, add a number for the nth percentile with brackets like this: percentile(10). Time scales available: hour, day -Period can be a float or integer value. +Period can be a float or integer value. The rule needs to be applied to an existing 2D/3D variables with time axis. A new 2D/3D variable with the same time axis is created when the rule is executed. @@ -574,7 +574,7 @@ In the example shown above the stripe indicates the time period covered (4 times ### Axis filter rule ``` -FORMAT +FORMAT - axis_filter_rule: name: description: @@ -607,7 +607,7 @@ The rule needs to be applied to an existing 2D/3D variables with or without time It is possible to include data in the YAML file that originates from another file. At the moment this is only applicable to another YAML file. This can be useful for storing large classification_rule tables in a separate file (for a better overview of the work file), but this functionality is not limited to that specific rule. -Here is the original rule: +Here is the original rule: ``` #EXAMPLE : Original # This is a simplified example, only top layer of flow velocity and chloride was used and year statistics @@ -615,7 +615,7 @@ Here is the original rule: - classification_rule: name: classification for aquatic plants description: classification for aquatic plants based on water depth, flow velocity and chloride. - criteria_table: + criteria_table: - ["output", "MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] - [ 1 , "<0.10" , "-" , "-"] # too dry - [ 2 , ">4.0" , "-" , "-"] # too deep From 22cac02452c722d5e458d3822d5e15962c46b674 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 26 Jun 2024 13:28:40 +0200 Subject: [PATCH 22/71] typo --- decoimpact/business/utils/dataset_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/business/utils/dataset_utils.py b/decoimpact/business/utils/dataset_utils.py index 11868518..b61656e8 100644 --- a/decoimpact/business/utils/dataset_utils.py +++ b/decoimpact/business/utils/dataset_utils.py @@ -211,7 +211,7 @@ def get_dummy_variable_in_ugrid(dataset: _xr.Dataset) -> list: def get_dummy_and_dependent_var_list(dataset: _xr.Dataset) -> list: """Obtain the list of variables in a dataset. - The dummy variable is obtained, from which a the variables are + The dummy variable is obtained, from which the variables are recursively looked up. The dummy and dependent variables are combined in one list. This is done to support XUgrid and to prevent invalid topologies. From 7f57b9b7348ceb6203b190ce204db09b75968c40 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 26 Jun 2024 14:17:02 +0200 Subject: [PATCH 23/71] add test --- .../entities/rules/test_depth_average_rule.py | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 50d562a5..aee75208 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -16,9 +16,6 @@ import xarray as _xr from decoimpact.business.entities.rules.depth_average_rule import DepthAverageRule -from decoimpact.business.entities.rules.multi_array_operation_type import ( - MultiArrayOperationType, -) from decoimpact.crosscutting.i_logger import ILogger @@ -51,3 +48,26 @@ def test_no_validate_error_with_correct_rule(): # Assert assert isinstance(rule, DepthAverageRule) assert valid + + +def test_aggregate_time_rule_without_time_dimension(): + """DepthAverageRule should give an error when a dataset with incorrect dimensions are + used""" + # create test set + logger = Mock(ILogger) + rule = DepthAverageRule( + name="test", + input_variable_names=["foo"], + ) + + test_data = [1.2, 0.4] + test_array = _xr.DataArray(test_data, name="test_with_error") + + with pytest.raises(ValueError) as exc_info: + rule.execute(test_array, logger) + + exception_raised = exc_info.value + + # Assert + expected_message = "Incorrect dimensions found for test_with_error" + assert exception_raised.args[0] == expected_message \ No newline at end of file From fb5e0bcdaf6828e440c2684fdf46125b563310c6 Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 26 Jun 2024 14:17:48 +0200 Subject: [PATCH 24/71] feat[DEI-185]: changes in depth average rule --- .../entities/rules/depth_average_rule.py | 23 ++++++++++++++----- decoimpact/business/utils/dataset_utils.py | 10 ++++---- .../data/parsers/parser_depth_average_rule.py | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 1543a51b..895c55f0 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -11,6 +11,7 @@ DepthAverageRule """ from typing import Dict, List + import xarray as _xr from decoimpact.business.entities.rules.i_multi_array_based_rule import ( @@ -42,19 +43,27 @@ def execute( Returns: DataArray: Averaged values """ - interface_name = "mesh2d_interface_z" + print(value_arrays) + + interface_name = "depth_interfaces" layer_name = "mesh2d_nLayers" # The first DataArray in our value_arrays contains the values to be averaged # But the name of the key is given by the user, so just take the first variables = next(iter(value_arrays.values())) - depths = value_arrays[interface_name] + # depths interfaces = borders of the layers in terms of depth + depths_interfaces = value_arrays[interface_name] + + print("PRINT DEPTHS_INTERFACES:") + print(depths_interfaces) + print(depths_interfaces.values) # Calculate the layer heights between depths - layer_heights = depths.diff(dim=interface_name) + layer_heights = depths_interfaces.diff("mesh2d_nInterfaces") + layer_heights = layer_heights.rename({"mesh2d_nInterfaces": "mesh2d_nLayers"}) - # Give new dimension (dim of heights is always N-1 of dim depths) - layer_heights = layer_heights.rename({interface_name: layer_name}) + print("PRINT LAYER_HEIGHTS:") + print(layer_heights) # Broadcast the heights in all dimensions heigths_all_dims = layer_heights.broadcast_like(variables) @@ -63,7 +72,9 @@ def execute( heights_all_filtered = heigths_all_dims.where(variables.notnull()) # Calculate depth average using relative value - relative_values = variables.dot(layer_heights, interface_name) + relative_values = layer_heights.dot( + variables + ) # moet interface_name hier niet weg? hier heights_all_filtered ipv layer_heights? # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=layer_name) diff --git a/decoimpact/business/utils/dataset_utils.py b/decoimpact/business/utils/dataset_utils.py index 11868518..1aacadd1 100644 --- a/decoimpact/business/utils/dataset_utils.py +++ b/decoimpact/business/utils/dataset_utils.py @@ -200,11 +200,11 @@ def get_dummy_variable_in_ugrid(dataset: _xr.Dataset) -> list: if ("cf_role", "mesh_topology") in dataset[name].attrs.items() ] - if len(dummy) == 0: - raise ValueError( - """No dummy variable defined and therefore input dataset does - not comply with UGrid convention.""" - ) + # if len(dummy) == 0: + # raise ValueError( + # """No dummy variable defined and therefore input dataset does + # not comply with UGrid convention.""" + # ) return dummy diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 95ae8c29..3c7df698 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -38,7 +38,7 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: name: str = get_dict_element("name", dictionary) input_variable_names: List[str] = [ get_dict_element("input_variable", dictionary), - "mesh2d_interface_z", + "depth_interfaces", ] output_variable_name: str = get_dict_element("output_variable", dictionary) description: str = get_dict_element("description", dictionary, False) or "" From e7a5b7bc321b9c09f62a85da2ef78f72b896104e Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 26 Jun 2024 14:52:18 +0200 Subject: [PATCH 25/71] feat[DEI-185]: changes in the depth average rule --- .../entities/rules/depth_average_rule.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 76e5c6c3..0ae29160 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -22,7 +22,7 @@ class DepthAverageRule(RuleBase, IMultiArrayBasedRule): - """Implementation for the depth average rule""" + """Implementation for the depthaverage rule""" def __init__( self, @@ -46,6 +46,7 @@ def execute( print(value_arrays) interface_name = "depth_interfaces" + interface_dim_name = "mesh2d_nInterfaces" layer_name = "mesh2d_nLayers" # The first DataArray in our value_arrays contains the values to be averaged @@ -54,16 +55,9 @@ def execute( # depths interfaces = borders of the layers in terms of depth depths_interfaces = value_arrays[interface_name] - print("PRINT DEPTHS_INTERFACES:") - print(depths_interfaces) - print(depths_interfaces.values) - # Calculate the layer heights between depths - layer_heights = depths_interfaces.diff("mesh2d_nInterfaces") - layer_heights = layer_heights.rename({"mesh2d_nInterfaces": "mesh2d_nLayers"}) - - print("PRINT LAYER_HEIGHTS:") - print(layer_heights) + layer_heights = depths_interfaces.diff(interface_dim_name) + layer_heights = layer_heights.rename({interface_dim_name: layer_name}) # Broadcast the heights in all dimensions heigths_all_dims = layer_heights.broadcast_like(variables) @@ -72,9 +66,7 @@ def execute( heights_all_filtered = heigths_all_dims.where(variables.notnull()) # Calculate depth average using relative value - relative_values = layer_heights.dot( - variables - ) # moet interface_name hier niet weg? hier heights_all_filtered ipv layer_heights? + relative_values = variables * heights_all_filtered # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=layer_name) @@ -83,4 +75,5 @@ def execute( # Calculate average depth_average = sum_relative_values / sum_heights + print(depth_average) return depth_average From 1f7baabcddc933fb0c6d828fb88dd2c939225483 Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 26 Jun 2024 14:54:59 +0200 Subject: [PATCH 26/71] feat[DEI-185]: clean up print statements --- decoimpact/business/entities/rules/depth_average_rule.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 0ae29160..41a0fea6 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -43,8 +43,6 @@ def execute( Returns: DataArray: Averaged values """ - print(value_arrays) - interface_name = "depth_interfaces" interface_dim_name = "mesh2d_nInterfaces" layer_name = "mesh2d_nLayers" @@ -75,5 +73,4 @@ def execute( # Calculate average depth_average = sum_relative_values / sum_heights - print(depth_average) return depth_average From e48059187f4c65f9a06aacf0407c9307f47bea91 Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 26 Jun 2024 14:56:25 +0200 Subject: [PATCH 27/71] feat[DEI-185]: enable error again to check on dummy variable --- decoimpact/business/utils/dataset_utils.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/decoimpact/business/utils/dataset_utils.py b/decoimpact/business/utils/dataset_utils.py index b111280d..b61656e8 100644 --- a/decoimpact/business/utils/dataset_utils.py +++ b/decoimpact/business/utils/dataset_utils.py @@ -200,11 +200,11 @@ def get_dummy_variable_in_ugrid(dataset: _xr.Dataset) -> list: if ("cf_role", "mesh_topology") in dataset[name].attrs.items() ] - # if len(dummy) == 0: - # raise ValueError( - # """No dummy variable defined and therefore input dataset does - # not comply with UGrid convention.""" - # ) + if len(dummy) == 0: + raise ValueError( + """No dummy variable defined and therefore input dataset does + not comply with UGrid convention.""" + ) return dummy From 52d6e6e52d8fed0aab451c1c872e29c68cd80c17 Mon Sep 17 00:00:00 2001 From: Wouter Date: Wed, 26 Jun 2024 16:06:37 +0200 Subject: [PATCH 28/71] feat[DEI-185]: add water level and bed level to be able to performn correction for partially wet cells --- .../business/entities/rules/depth_average_rule.py | 11 ++++++++++- decoimpact/data/parsers/parser_depth_average_rule.py | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 41a0fea6..30c580cd 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -52,6 +52,8 @@ def execute( variables = next(iter(value_arrays.values())) # depths interfaces = borders of the layers in terms of depth depths_interfaces = value_arrays[interface_name] + water_level_values = value_arrays["water_level"] + bed_level_values = value_arrays["bed_level"] # Calculate the layer heights between depths layer_heights = depths_interfaces.diff(interface_dim_name) @@ -63,13 +65,20 @@ def execute( # Use the nan filtering of the variables to set the correct depth per column heights_all_filtered = heigths_all_dims.where(variables.notnull()) + # TO DO: correct for cells that are partially filled with water: crossing bed level or water level + correction_factor = 1 + # wl_correction = water_level_values.where(water_level_values > depths_interfaces) + # print(wl_correction) + # Calculate depth average using relative value - relative_values = variables * heights_all_filtered + relative_values = variables * heights_all_filtered * correction_factor # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=layer_name) sum_heights = heights_all_filtered.sum(dim=layer_name) + # TO DO: do not use sum_heights, but filtered on layers between bed level and water level + # Calculate average depth_average = sum_relative_values / sum_heights diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 3c7df698..40fb73c4 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -39,6 +39,8 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: input_variable_names: List[str] = [ get_dict_element("input_variable", dictionary), "depth_interfaces", + "water_level", + "bed_level", ] output_variable_name: str = get_dict_element("output_variable", dictionary) description: str = get_dict_element("description", dictionary, False) or "" From cf1c1a032b21e507a5ac1dd56af1c1bf44f14713 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 27 Jun 2024 10:54:21 +0200 Subject: [PATCH 29/71] correction for bed level and waterlevel --- .../entities/rules/depth_average_rule.py | 48 ++++++++++++------- .../data/parsers/parser_depth_average_rule.py | 6 +-- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 30c580cd..33ccceec 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -43,39 +43,53 @@ def execute( Returns: DataArray: Averaged values """ - interface_name = "depth_interfaces" - interface_dim_name = "mesh2d_nInterfaces" - layer_name = "mesh2d_nLayers" + interface_name = "mesh2d_interface_z" + water_level_name = "mesh2d_s1" + bed_level_name = "mesh2d_flowelem_bl" + + dim_layer_name = "mesh2d_nLayers" + dim_interfaces_name = "mesh2d_nInterfaces" # The first DataArray in our value_arrays contains the values to be averaged # But the name of the key is given by the user, so just take the first variables = next(iter(value_arrays.values())) + # depths interfaces = borders of the layers in terms of depth depths_interfaces = value_arrays[interface_name] - water_level_values = value_arrays["water_level"] - bed_level_values = value_arrays["bed_level"] + water_level_values = value_arrays[water_level_name] + bed_level_values = value_arrays[bed_level_name] + + depths_interfaces_broadcasted = depths_interfaces.broadcast_like( + bed_level_values + ) + + corrected_depth_bed = depths_interfaces_broadcasted.where( + bed_level_values < depths_interfaces_broadcasted, bed_level_values + ) + + corrected_depth_bed = corrected_depth_bed.broadcast_like(water_level_values) + corrected_depths = corrected_depth_bed.where( + water_level_values > corrected_depth_bed, water_level_values + ) # Calculate the layer heights between depths - layer_heights = depths_interfaces.diff(interface_dim_name) - layer_heights = layer_heights.rename({interface_dim_name: layer_name}) + layer_heights = corrected_depths.diff(dim=dim_interfaces_name) + layer_heights = layer_heights.rename({dim_interfaces_name: dim_layer_name}) # Broadcast the heights in all dimensions - heigths_all_dims = layer_heights.broadcast_like(variables) + # heigths_all_dims = layer_heights.broadcast_like(variables) # Use the nan filtering of the variables to set the correct depth per column - heights_all_filtered = heigths_all_dims.where(variables.notnull()) + heights_all_filtered = layer_heights.where(variables.notnull()) - # TO DO: correct for cells that are partially filled with water: crossing bed level or water level - correction_factor = 1 - # wl_correction = water_level_values.where(water_level_values > depths_interfaces) - # print(wl_correction) + # # Calculate depth average using relative value + # relative_values = variables * heights_all_filtered - # Calculate depth average using relative value - relative_values = variables * heights_all_filtered * correction_factor + relative_values = variables.dot(heights_all_filtered, interface_name) # Calculate total height and total value in column - sum_relative_values = relative_values.sum(dim=layer_name) - sum_heights = heights_all_filtered.sum(dim=layer_name) + sum_relative_values = relative_values.sum(dim=dim_layer_name) + sum_heights = heights_all_filtered.sum(dim=dim_layer_name) # TO DO: do not use sum_heights, but filtered on layers between bed level and water level diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 40fb73c4..251ab66c 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -38,9 +38,9 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: name: str = get_dict_element("name", dictionary) input_variable_names: List[str] = [ get_dict_element("input_variable", dictionary), - "depth_interfaces", - "water_level", - "bed_level", + "mesh2d_interface_z", + "mesh2d_s1", + "mesh2d_flowelem_bl", ] output_variable_name: str = get_dict_element("output_variable", dictionary) description: str = get_dict_element("description", dictionary, False) or "" From d1c398f488d1bfb79deb7b136add5114c2a98a09 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 27 Jun 2024 13:59:16 +0200 Subject: [PATCH 30/71] add unit test --- .../entities/rules/test_depth_average_rule.py | 96 ++++++++++++++++--- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index aee75208..2316034b 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -13,6 +13,7 @@ import numpy as _np import pytest +from tomlkit import value import xarray as _xr from decoimpact.business.entities.rules.depth_average_rule import DepthAverageRule @@ -39,7 +40,8 @@ def test_no_validate_error_with_correct_rule(): # Arrange logger = Mock(ILogger) rule = DepthAverageRule( - "test_rule_name", ["foo", "hello"], + "test_rule_name", + ["foo", "hello"], ) # Act @@ -50,24 +52,92 @@ def test_no_validate_error_with_correct_rule(): assert valid -def test_aggregate_time_rule_without_time_dimension(): - """DepthAverageRule should give an error when a dataset with incorrect dimensions are - used""" - # create test set +# depths heights nInterfaces: 5 +# 0 1 nLayers: 4 +# -1 2 nFaces: 4 +# -3 3 time: 2 +# -6 4 +# -10 +# +# valuables +# 1 1 1 1 1 1 1 1 +# 2 2 2 2 2 2 2 2 +# 3 3 3 3 3 3 3 3 +# 4 4 4 4 4 4 4 4 +# water_level +# 0 0 -1.5 -1.5 0 -6 5 -5 +# bed_level +# -10 -5 -10 -5 +# output +# 3 2.2 3.294117647 2.571428571 3 0 3 0 + + +mesh2d_nFaces = 4 +mesh2d_nLayers = 4 +mesh2d_nInterfaces = 5 +time = 2 + +data_variable = _np.tile(_np.arange(4, 0, -1), (time, mesh2d_nFaces, 1)) +mesh2d_interface_z = _np.array([-10, -6, -3, -1, 0]) +mesh2d_flowelem_bl = _np.array([-10, -5, -10, -5]) +mesh2d_s1 = _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -6]]) + + +# Create dataset +ds = _xr.Dataset( + { + "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), + "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), + "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), + "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), + } +) + + +def test_depth_average_rule(): + """Make sure the calculation of the depth average is correct. Including + differing water and bed levels.""" logger = Mock(ILogger) rule = DepthAverageRule( name="test", input_variable_names=["foo"], ) - test_data = [1.2, 0.4] - test_array = _xr.DataArray(test_data, name="test_with_error") + value_arrays = { + "var_3d": ds["var_3d"], + "mesh2d_interface_z": ds["mesh2d_interface_z"], + "mesh2d_flowelem_bl": ds["mesh2d_flowelem_bl"], + "mesh2d_s1": ds["mesh2d_s1"], + } + + depth_average = rule.execute(value_arrays, logger) + result_data = _xr.DataArray( + _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]]), + dims=["time", "mesh2d_nFaces"], + ) - with pytest.raises(ValueError) as exc_info: - rule.execute(test_array, logger) + print(result_data) + assert _xr.testing.assert_equal(depth_average, result_data) - exception_raised = exc_info.value - # Assert - expected_message = "Incorrect dimensions found for test_with_error" - assert exception_raised.args[0] == expected_message \ No newline at end of file +# def test_depth_average_rule_with_missing_dimensions(): +# """DepthAverageRule should give an error when a dataset with incorrect dimensions are +# used""" +# # create test set +# logger = Mock(ILogger) +# rule = DepthAverageRule( +# name="test", +# input_variable_names=["foo"], +# ) + +# test_data = [1.2, 0.4] +# test_array = _xr.DataArray(test_data, name="test_with_error") + +# with pytest.raises(ValueError) as exc_info: +# rule.execute(test_array, logger) + +# exception_raised = exc_info.value + +# # Assert +# expected_message = "Incorrect dimensions found for test_with_error" +# assert exception_raised.args[0] == expected_message From f068cebe1dad5bd52164c00c43c5b524a047aac7 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 27 Jun 2024 14:50:39 +0200 Subject: [PATCH 31/71] clean up and comments and typo --- .../entities/rules/depth_average_rule.py | 22 ++++++++----------- .../data/parsers/parser_depth_average_rule.py | 8 +++---- decoimpact/data/parsers/rule_parsers.py | 4 ++-- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 33ccceec..2f354ef9 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -13,6 +13,7 @@ from typing import Dict, List import xarray as _xr +import numpy as _np from decoimpact.business.entities.rules.i_multi_array_based_rule import ( IMultiArrayBasedRule, @@ -31,9 +32,6 @@ def __init__( ): super().__init__(name, input_variable_names) - def validate(self, logger: ILogger) -> bool: - return True - def execute( self, value_arrays: Dict[str, _xr.DataArray], logger: ILogger ) -> _xr.DataArray: @@ -59,14 +57,19 @@ def execute( water_level_values = value_arrays[water_level_name] bed_level_values = value_arrays[bed_level_name] + # Broadcast the depths to the dimensions of the bed levels and + # correct the depths to the bed level, in other words all depths lower + # than bed level will be corrected to bed level. depths_interfaces_broadcasted = depths_interfaces.broadcast_like( bed_level_values ) - corrected_depth_bed = depths_interfaces_broadcasted.where( bed_level_values < depths_interfaces_broadcasted, bed_level_values ) + # Make a similiar correction for the waterlevels (first broadcast to match + # dimensions and then replace all values higher than waterlevel with + # waterlevel) corrected_depth_bed = corrected_depth_bed.broadcast_like(water_level_values) corrected_depths = corrected_depth_bed.where( water_level_values > corrected_depth_bed, water_level_values @@ -76,23 +79,16 @@ def execute( layer_heights = corrected_depths.diff(dim=dim_interfaces_name) layer_heights = layer_heights.rename({dim_interfaces_name: dim_layer_name}) - # Broadcast the heights in all dimensions - # heigths_all_dims = layer_heights.broadcast_like(variables) - # Use the nan filtering of the variables to set the correct depth per column heights_all_filtered = layer_heights.where(variables.notnull()) - # # Calculate depth average using relative value - # relative_values = variables * heights_all_filtered - - relative_values = variables.dot(heights_all_filtered, interface_name) + # Calculate depth average using relative value + relative_values = variables.dot(heights_all_filtered, interface_name, _np.nan) # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=dim_layer_name) sum_heights = heights_all_filtered.sum(dim=dim_layer_name) - # TO DO: do not use sum_heights, but filtered on layers between bed level and water level - # Calculate average depth_average = sum_relative_values / sum_heights diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 251ab66c..1ed20ee6 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -5,10 +5,10 @@ # A copy of the GNU Affero General Public License can be found at # https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md """ -Module for ParserDepthAvarageRule class +Module for ParserDepthAverageRule class Classes: - ParserDepthAvarageRule + ParserDepthAverageRule """ from typing import Any, Dict, List @@ -19,8 +19,8 @@ from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase -class ParserDepthAvarageRule(IParserRuleBase): - """Class for creating a ParserDepthAvarageRule""" +class ParserDepthAverageRule(IParserRuleBase): + """Class for creating a ParserDepthAverageRule""" @property def rule_type_name(self) -> str: diff --git a/decoimpact/data/parsers/rule_parsers.py b/decoimpact/data/parsers/rule_parsers.py index 31652643..21af2d56 100644 --- a/decoimpact/data/parsers/rule_parsers.py +++ b/decoimpact/data/parsers/rule_parsers.py @@ -27,7 +27,7 @@ from decoimpact.data.parsers.parser_time_aggregation_rule import ( ParserTimeAggregationRule, ) -from decoimpact.data.parsers.parser_depth_average_rule import ParserDepthAvarageRule +from decoimpact.data.parsers.parser_depth_average_rule import ParserDepthAverageRule def rule_parsers() -> Iterator[IParserRuleBase]: @@ -42,4 +42,4 @@ def rule_parsers() -> Iterator[IParserRuleBase]: yield ParserFormulaRule() yield ParserClassificationRule() yield ParserAxisFilterRule() - yield ParserDepthAvarageRule() + yield ParserDepthAverageRule() From 78f3e6e2e3d893d63f9ef43dd9d408e22874d0df Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 27 Jun 2024 14:50:50 +0200 Subject: [PATCH 32/71] unit test parser --- .../parsers/test_parser_depth_average_rule.py | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 tests/data/parsers/test_parser_depth_average_rule.py diff --git a/tests/data/parsers/test_parser_depth_average_rule.py b/tests/data/parsers/test_parser_depth_average_rule.py new file mode 100644 index 00000000..afe4fe6f --- /dev/null +++ b/tests/data/parsers/test_parser_depth_average_rule.py @@ -0,0 +1,73 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2023 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Tests for ParserDepthAverageRule class +""" + +from typing import Any, List +import pytest +from mock import Mock + +from decoimpact.crosscutting.i_logger import ILogger +from decoimpact.data.api.i_rule_data import IRuleData +from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase +from decoimpact.data.parsers.parser_depth_average_rule import ParserDepthAverageRule + + +def test_parser_depth_average_rule_creation_logic(): + """The ParserDepthAverageRule should parse the provided dictionary + to correctly initialize itself during creation""" + + # Act + data = ParserDepthAverageRule() + + # Assert + + assert isinstance(data, IParserRuleBase) + assert data.rule_type_name == "depth_average_rule" + + +def test_parse_dict_to_rule_data_logic(): + """Test if a correct dictionary is parsed into a RuleData object""" + # Arrange + contents = dict( + { + "name": "testname", + "input_variable": "input", + "output_variable": "output", + } + ) + logger = Mock(ILogger) + # Act + data = ParserDepthAverageRule() + parsed_dict = data.parse_dict(contents, logger) + + assert isinstance(parsed_dict, IRuleData) + + +def test_parse_wrong_dict_to_rule_data_logic(): + """Test if an incorrect dictionary is not parsed""" + # Arrange + contents = dict( + { + "name": "testname", + "output_variable": "output", + } + ) + logger = Mock(ILogger) + + # Act + data = ParserDepthAverageRule() + + with pytest.raises(AttributeError) as exc_info: + data.parse_dict(contents, logger) + + exception_raised = exc_info.value + + # Assert + expected_message = "Missing element input_variable" + assert exception_raised.args[0] == expected_message From ab9d6d8f600c500b9f982a4c9151d219845c73fd Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 27 Jun 2024 16:22:42 +0200 Subject: [PATCH 33/71] correct nan values where it should be 0 --- .../entities/rules/depth_average_rule.py | 7 +++-- .../entities/rules/test_depth_average_rule.py | 31 ++----------------- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 2f354ef9..f770bfa2 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -13,7 +13,6 @@ from typing import Dict, List import xarray as _xr -import numpy as _np from decoimpact.business.entities.rules.i_multi_array_based_rule import ( IMultiArrayBasedRule, @@ -83,7 +82,7 @@ def execute( heights_all_filtered = layer_heights.where(variables.notnull()) # Calculate depth average using relative value - relative_values = variables.dot(heights_all_filtered, interface_name, _np.nan) + relative_values = variables.dot(heights_all_filtered, interface_name) # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=dim_layer_name) @@ -92,4 +91,8 @@ def execute( # Calculate average depth_average = sum_relative_values / sum_heights + # Correction needed fore division by zero! + # If height = 0 -> 0, but if variable = nan -> nan + depth_average = depth_average.where(sum_heights != 0, 0) + depth_average = depth_average.where(sum_relative_values.notnull()) return depth_average diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 2316034b..7309a3dd 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -44,12 +44,8 @@ def test_no_validate_error_with_correct_rule(): ["foo", "hello"], ) - # Act - valid = rule.validate(logger) - # Assert assert isinstance(rule, DepthAverageRule) - assert valid # depths heights nInterfaces: 5 @@ -80,7 +76,7 @@ def test_no_validate_error_with_correct_rule(): data_variable = _np.tile(_np.arange(4, 0, -1), (time, mesh2d_nFaces, 1)) mesh2d_interface_z = _np.array([-10, -6, -3, -1, 0]) mesh2d_flowelem_bl = _np.array([-10, -5, -10, -5]) -mesh2d_s1 = _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -6]]) +mesh2d_s1 = _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -5]]) # Create dataset @@ -112,32 +108,9 @@ def test_depth_average_rule(): depth_average = rule.execute(value_arrays, logger) result_data = _xr.DataArray( - _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]]), + _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, 0.0, 3.0, 0.0]]), dims=["time", "mesh2d_nFaces"], ) print(result_data) assert _xr.testing.assert_equal(depth_average, result_data) - - -# def test_depth_average_rule_with_missing_dimensions(): -# """DepthAverageRule should give an error when a dataset with incorrect dimensions are -# used""" -# # create test set -# logger = Mock(ILogger) -# rule = DepthAverageRule( -# name="test", -# input_variable_names=["foo"], -# ) - -# test_data = [1.2, 0.4] -# test_array = _xr.DataArray(test_data, name="test_with_error") - -# with pytest.raises(ValueError) as exc_info: -# rule.execute(test_array, logger) - -# exception_raised = exc_info.value - -# # Assert -# expected_message = "Incorrect dimensions found for test_with_error" -# assert exception_raised.args[0] == expected_message From 542c7f8937237f5804ec836d0f012f4472d45d4b Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Fri, 28 Jun 2024 10:29:32 +0200 Subject: [PATCH 34/71] set value back to nan --- decoimpact/business/entities/rules/depth_average_rule.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index f770bfa2..8e8e8461 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -82,7 +82,7 @@ def execute( heights_all_filtered = layer_heights.where(variables.notnull()) # Calculate depth average using relative value - relative_values = variables.dot(heights_all_filtered, interface_name) + relative_values = variables.dot(heights_all_filtered) # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=dim_layer_name) @@ -91,8 +91,4 @@ def execute( # Calculate average depth_average = sum_relative_values / sum_heights - # Correction needed fore division by zero! - # If height = 0 -> 0, but if variable = nan -> nan - depth_average = depth_average.where(sum_heights != 0, 0) - depth_average = depth_average.where(sum_relative_values.notnull()) return depth_average From 93278d0394a3f0fcfdc4f6f62ad6102488c1e2b4 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 28 Jun 2024 10:57:07 +0200 Subject: [PATCH 35/71] feat[DEI-185]: use normal multiply and count on NaN --- decoimpact/business/entities/rules/depth_average_rule.py | 2 +- tests/business/entities/rules/test_depth_average_rule.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 8e8e8461..6ece01e2 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -82,7 +82,7 @@ def execute( heights_all_filtered = layer_heights.where(variables.notnull()) # Calculate depth average using relative value - relative_values = variables.dot(heights_all_filtered) + relative_values = variables * heights_all_filtered # Calculate total height and total value in column sum_relative_values = relative_values.sum(dim=dim_layer_name) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 7309a3dd..7c02288a 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -13,8 +13,8 @@ import numpy as _np import pytest -from tomlkit import value import xarray as _xr +from tomlkit import value from decoimpact.business.entities.rules.depth_average_rule import DepthAverageRule from decoimpact.crosscutting.i_logger import ILogger @@ -108,7 +108,7 @@ def test_depth_average_rule(): depth_average = rule.execute(value_arrays, logger) result_data = _xr.DataArray( - _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, 0.0, 3.0, 0.0]]), + _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]]), dims=["time", "mesh2d_nFaces"], ) From fd783bdb054e01e7c643404d8a8b9c48956dc88a Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 28 Jun 2024 11:44:12 +0200 Subject: [PATCH 36/71] feat[DEI-185]: add simpler unit test --- .../entities/rules/test_depth_average_rule.py | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 7c02288a..ecbb928c 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -105,12 +105,63 @@ def test_depth_average_rule(): "mesh2d_flowelem_bl": ds["mesh2d_flowelem_bl"], "mesh2d_s1": ds["mesh2d_s1"], } + print("value_arrays:") + print(value_arrays) depth_average = rule.execute(value_arrays, logger) + print("depth_average:") + print(depth_average) + result_data = _xr.DataArray( _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]]), dims=["time", "mesh2d_nFaces"], ) + print("result_data:") print(result_data) - assert _xr.testing.assert_equal(depth_average, result_data) + assert _xr.testing.assert_equal(depth_average, result_data) is None + + +mesh2d_nFaces = 2 +mesh2d_nLayers = 2 +mesh2d_nInterfaces = 3 +time = 1 + +data_variable = _np.array([[[20, 40], [91, 92]]]) +mesh2d_interface_z = _np.array([0, -1, -2]) +mesh2d_flowelem_bl = _np.array([-2, -2]) +mesh2d_s1 = _np.array([[0, 0]]) + +# Create dataset +ds = _xr.Dataset( + { + "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), + "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), + "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), + "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), + } +) + + +def test_depth_average_rule_simple(): + logger = Mock(ILogger) + rule = DepthAverageRule( + name="test", + input_variable_names=["foo"], + ) + + value_arrays = { + "var_3d": ds["var_3d"], + "mesh2d_interface_z": ds["mesh2d_interface_z"], + "mesh2d_flowelem_bl": ds["mesh2d_flowelem_bl"], + "mesh2d_s1": ds["mesh2d_s1"], + } + + depth_average = rule.execute(value_arrays, logger) + + result_data = _xr.DataArray( + _np.array([[30.0, 91.5]]), + dims=["time", "mesh2d_nFaces"], + ) + + assert _xr.testing.assert_equal(depth_average, result_data) is None From 7ef1fa7d1502068e9bafb4daa04fcaf4fead1f24 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 28 Jun 2024 11:57:27 +0200 Subject: [PATCH 37/71] feat[DEI-185]: include data in unit test to prevent mix-up --- .../entities/rules/test_depth_average_rule.py | 84 +++++++++---------- 1 file changed, 40 insertions(+), 44 deletions(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index ecbb928c..032625b9 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -68,29 +68,7 @@ def test_no_validate_error_with_correct_rule(): # 3 2.2 3.294117647 2.571428571 3 0 3 0 -mesh2d_nFaces = 4 -mesh2d_nLayers = 4 -mesh2d_nInterfaces = 5 -time = 2 - -data_variable = _np.tile(_np.arange(4, 0, -1), (time, mesh2d_nFaces, 1)) -mesh2d_interface_z = _np.array([-10, -6, -3, -1, 0]) -mesh2d_flowelem_bl = _np.array([-10, -5, -10, -5]) -mesh2d_s1 = _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -5]]) - - -# Create dataset -ds = _xr.Dataset( - { - "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), - "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), - "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), - "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), - } -) - - -def test_depth_average_rule(): +def test_depth_average_rule_complex(): """Make sure the calculation of the depth average is correct. Including differing water and bed levels.""" logger = Mock(ILogger) @@ -99,6 +77,27 @@ def test_depth_average_rule(): input_variable_names=["foo"], ) + # create complicated test data where water level and bed level cross data layers + mesh2d_nFaces = 4 + mesh2d_nLayers = 4 + mesh2d_nInterfaces = 5 + time = 2 + + data_variable = _np.tile(_np.arange(4, 0, -1), (time, mesh2d_nFaces, 1)) + mesh2d_interface_z = _np.array([-10, -6, -3, -1, 0]) + mesh2d_flowelem_bl = _np.array([-10, -5, -10, -5]) + mesh2d_s1 = _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -5]]) + + # Create dataset + ds = _xr.Dataset( + { + "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), + "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), + "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), + "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), + } + ) + value_arrays = { "var_3d": ds["var_3d"], "mesh2d_interface_z": ds["mesh2d_interface_z"], @@ -122,27 +121,6 @@ def test_depth_average_rule(): assert _xr.testing.assert_equal(depth_average, result_data) is None -mesh2d_nFaces = 2 -mesh2d_nLayers = 2 -mesh2d_nInterfaces = 3 -time = 1 - -data_variable = _np.array([[[20, 40], [91, 92]]]) -mesh2d_interface_z = _np.array([0, -1, -2]) -mesh2d_flowelem_bl = _np.array([-2, -2]) -mesh2d_s1 = _np.array([[0, 0]]) - -# Create dataset -ds = _xr.Dataset( - { - "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), - "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), - "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), - "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), - } -) - - def test_depth_average_rule_simple(): logger = Mock(ILogger) rule = DepthAverageRule( @@ -150,6 +128,24 @@ def test_depth_average_rule_simple(): input_variable_names=["foo"], ) + # create simple test data + mesh2d_nFaces = 2 + mesh2d_nLayers = 2 + mesh2d_nInterfaces = 3 + time = 1 + data_variable = _np.array([[[20, 40], [91, 92]]]) + mesh2d_interface_z = _np.array([0, -1, -2]) + mesh2d_flowelem_bl = _np.array([-2, -2]) + mesh2d_s1 = _np.array([[0, 0]]) + + ds = _xr.Dataset( + { + "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), + "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), + "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), + "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), + } + ) value_arrays = { "var_3d": ds["var_3d"], "mesh2d_interface_z": ds["mesh2d_interface_z"], From bd5a70b7fa773759e0331fe82c25aaa3d0c08550 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 28 Jun 2024 12:27:22 +0200 Subject: [PATCH 38/71] feat[DEI-185]: change complex unit test: use tolerance level --- tests/business/entities/rules/test_depth_average_rule.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 032625b9..426212c7 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -104,21 +104,15 @@ def test_depth_average_rule_complex(): "mesh2d_flowelem_bl": ds["mesh2d_flowelem_bl"], "mesh2d_s1": ds["mesh2d_s1"], } - print("value_arrays:") - print(value_arrays) depth_average = rule.execute(value_arrays, logger) - print("depth_average:") - print(depth_average) result_data = _xr.DataArray( _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]]), dims=["time", "mesh2d_nFaces"], ) - print("result_data:") - print(result_data) - assert _xr.testing.assert_equal(depth_average, result_data) is None + assert _xr.testing.assert_allclose(depth_average, result_data, atol=1e-08) is None def test_depth_average_rule_simple(): From 59a2e4bbf832a435e61167e2fba109bdd55f397b Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 28 Jun 2024 12:39:47 +0200 Subject: [PATCH 39/71] feat[DEI-185]: remove useless init (pylint) --- decoimpact/business/entities/rules/depth_average_rule.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 6ece01e2..8f0bb906 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -24,13 +24,6 @@ class DepthAverageRule(RuleBase, IMultiArrayBasedRule): """Implementation for the depthaverage rule""" - def __init__( - self, - name: str, - input_variable_names: List[str], - ): - super().__init__(name, input_variable_names) - def execute( self, value_arrays: Dict[str, _xr.DataArray], logger: ILogger ) -> _xr.DataArray: From aa7bf447a534c2a8ebdb7e5dc1978d47262c0039 Mon Sep 17 00:00:00 2001 From: Wouter Date: Fri, 28 Jun 2024 12:49:38 +0200 Subject: [PATCH 40/71] feat[DEI-185]: remove List (pylint) --- decoimpact/business/entities/rules/depth_average_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 8f0bb906..99a8ba5e 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -10,7 +10,7 @@ Classes: DepthAverageRule """ -from typing import Dict, List +from typing import Dict import xarray as _xr From cd6012883fbe41749df0f970947984dd25dc8083 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Fri, 28 Jun 2024 15:19:27 +0200 Subject: [PATCH 41/71] add data object test --- .../entities/test_depth_average_rule_data.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 tests/data/entities/test_depth_average_rule_data.py diff --git a/tests/data/entities/test_depth_average_rule_data.py b/tests/data/entities/test_depth_average_rule_data.py new file mode 100644 index 00000000..8fcc0d58 --- /dev/null +++ b/tests/data/entities/test_depth_average_rule_data.py @@ -0,0 +1,26 @@ +# This file is part of D-EcoImpact +# Copyright (C) 2022-2023 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Tests for DepthAverageRuleData class +""" + + +from decoimpact.data.api.i_rule_data import IRuleData +from decoimpact.data.entities.depth_average_rule_data import DepthAverageRuleData + + +def test_depth_average_rule_data_creation_logic(): + """The DepthAverageRuleData should parse the provided dictionary + to correctly initialize itself during creation""" + + # Act + data = DepthAverageRuleData("test_name", "input1") + + # Assert + + assert isinstance(data, IRuleData) + assert data.input_variables == "input1" From 4c44a2a9c0236976d253ff6369da73ae88fa3d19 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Fri, 28 Jun 2024 15:20:05 +0200 Subject: [PATCH 42/71] parametrize test --- .../entities/rules/test_depth_average_rule.py | 130 +++++++----------- 1 file changed, 52 insertions(+), 78 deletions(-) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 426212c7..f3834e12 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -47,28 +47,55 @@ def test_no_validate_error_with_correct_rule(): # Assert assert isinstance(rule, DepthAverageRule) - -# depths heights nInterfaces: 5 -# 0 1 nLayers: 4 -# -1 2 nFaces: 4 -# -3 3 time: 2 -# -6 4 -# -10 -# -# valuables -# 1 1 1 1 1 1 1 1 -# 2 2 2 2 2 2 2 2 -# 3 3 3 3 3 3 3 3 -# 4 4 4 4 4 4 4 4 -# water_level -# 0 0 -1.5 -1.5 0 -6 5 -5 -# bed_level -# -10 -5 -10 -5 -# output -# 3 2.2 3.294117647 2.571428571 3 0 3 0 - - -def test_depth_average_rule_complex(): + # Complex example calculated output by hand + # depths heights nInterfaces: 5 + # 0 1 nLayers: 4 + # -1 2 nFaces: 4 + # -3 3 time: 2 + # -6 4 + # -10 + # + # valuables + # 1 1 1 1 1 1 1 1 + # 2 2 2 2 2 2 2 2 + # 3 3 3 3 3 3 3 3 + # 4 4 4 4 4 4 4 4 + # water_level + # 0 0 -1.5 -1.5 0 -6 5 -5 + # bed_level + # -10 -5 -10 -5 + # output + # 3 2.2 3.294117647 2.571428571 3 0 3 0 + + +@pytest.mark.parametrize( + "data_variable, mesh2d_interface_z, mesh2d_flowelem_bl, mesh2d_s1, result_data", + [ + [ + _np.array([[[20, 40], [91, 92]]]), + _np.array([0, -1, -2]), + _np.array([-2, -2]), + _np.array([[0, 0]]), + _np.array([[30.0, 91.5]]), + ], + [ + _np.tile(_np.arange(4, 0, -1), (2, 4, 1)), + _np.array([-10, -6, -3, -1, 0]), + _np.array([-10, -5, -10, -5]), + _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -5]]), + _np.array( + [[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]] + ), + ], + ], +) +def test_depth_average_rule( + data_variable: List[List[List[float]]], + mesh2d_interface_z: List[float], + mesh2d_flowelem_bl: List[float], + mesh2d_s1: List[List[float]], + result_data: List[List[List[float]]], +): """Make sure the calculation of the depth average is correct. Including differing water and bed levels.""" logger = Mock(ILogger) @@ -77,17 +104,6 @@ def test_depth_average_rule_complex(): input_variable_names=["foo"], ) - # create complicated test data where water level and bed level cross data layers - mesh2d_nFaces = 4 - mesh2d_nLayers = 4 - mesh2d_nInterfaces = 5 - time = 2 - - data_variable = _np.tile(_np.arange(4, 0, -1), (time, mesh2d_nFaces, 1)) - mesh2d_interface_z = _np.array([-10, -6, -3, -1, 0]) - mesh2d_flowelem_bl = _np.array([-10, -5, -10, -5]) - mesh2d_s1 = _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -5]]) - # Create dataset ds = _xr.Dataset( { @@ -107,51 +123,9 @@ def test_depth_average_rule_complex(): depth_average = rule.execute(value_arrays, logger) - result_data = _xr.DataArray( - _np.array([[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]]), - dims=["time", "mesh2d_nFaces"], - ) - - assert _xr.testing.assert_allclose(depth_average, result_data, atol=1e-08) is None - - -def test_depth_average_rule_simple(): - logger = Mock(ILogger) - rule = DepthAverageRule( - name="test", - input_variable_names=["foo"], - ) - - # create simple test data - mesh2d_nFaces = 2 - mesh2d_nLayers = 2 - mesh2d_nInterfaces = 3 - time = 1 - data_variable = _np.array([[[20, 40], [91, 92]]]) - mesh2d_interface_z = _np.array([0, -1, -2]) - mesh2d_flowelem_bl = _np.array([-2, -2]) - mesh2d_s1 = _np.array([[0, 0]]) - - ds = _xr.Dataset( - { - "var_3d": (["time", "mesh2d_nFaces", "mesh2d_nLayers"], data_variable), - "mesh2d_interface_z": (["mesh2d_nInterfaces"], mesh2d_interface_z), - "mesh2d_flowelem_bl": (["mesh2d_nFaces"], mesh2d_flowelem_bl), - "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1), - } - ) - value_arrays = { - "var_3d": ds["var_3d"], - "mesh2d_interface_z": ds["mesh2d_interface_z"], - "mesh2d_flowelem_bl": ds["mesh2d_flowelem_bl"], - "mesh2d_s1": ds["mesh2d_s1"], - } - - depth_average = rule.execute(value_arrays, logger) - - result_data = _xr.DataArray( - _np.array([[30.0, 91.5]]), + result_array = _xr.DataArray( + result_data, dims=["time", "mesh2d_nFaces"], ) - assert _xr.testing.assert_equal(depth_average, result_data) is None + assert _xr.testing.assert_allclose(depth_average, result_array, atol=1e-08) is None From 5c8ac46932e08c20b7dc1d9edadeadadd7459645 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Fri, 28 Jun 2024 15:20:17 +0200 Subject: [PATCH 43/71] add warning when no dimension is available --- .../entities/rules/depth_average_rule.py | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 99a8ba5e..63066983 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -33,16 +33,38 @@ def execute( Returns: DataArray: Averaged values """ + + # The first DataArray in our value_arrays contains the values to be averaged + # But the name of the key is given by the user, so just take the first + variable_key = next(iter(value_arrays.keys())) + variables = value_arrays[variable_key] + + # These are the same names as provided in the parser. So these + # are present in the data and don't have to be checked here interface_name = "mesh2d_interface_z" water_level_name = "mesh2d_s1" bed_level_name = "mesh2d_flowelem_bl" + # These dimension names should be checked. If there is no depth dimension + # let the user know with a warning dim_layer_name = "mesh2d_nLayers" dim_interfaces_name = "mesh2d_nInterfaces" - # The first DataArray in our value_arrays contains the values to be averaged - # But the name of the key is given by the user, so just take the first - variables = next(iter(value_arrays.values())) + # TODO: is this the way or do we just take the dimensions available in + # the interface_z? + warn_message = "" + if dim_layer_name not in variables.dims: + warn_message = f"No dimension: ${dim_layer_name} present. " + if dim_interfaces_name not in value_arrays[interface_name].dims: + warn_message = ( + f"${warn_message}No dimension: ${dim_interfaces_name} present. " + ) + if warn_message != "": + logger.log_warning( + f"{warn_message} No vertical dimension found, returning original \ + values for {variable_key}" + ) + return variables # depths interfaces = borders of the layers in terms of depth depths_interfaces = value_arrays[interface_name] From 2dabb88d02f2ffdb887aa68113f704470cbb5d94 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 10:40:03 +0200 Subject: [PATCH 44/71] Let user know explicit which rule is missing variables --- .../business/entities/rule_based_model.py | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index aeb63e91..0b6a3fa8 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -12,7 +12,7 @@ """ -from typing import List, Optional +from typing import Dict, List, Optional import xarray as _xr @@ -185,31 +185,38 @@ def _validate_mappings(self, mappings: dict[str, str], logger: ILogger) -> bool: ) valid = False + rule_names = [rule.name for rule in self._rules] + + rule_inputs = self._get_direct_rule_inputs(rule_names) + # check for missing rule inputs - needed_rule_inputs = _lu.remove_duplicates_from_list( - self._get_direct_rule_inputs() - ) - rule_input_vars = input_vars + mapping_vars_created - missing_rule_inputs = _lu.items_not_in(needed_rule_inputs, rule_input_vars) - if len(missing_rule_inputs) > 0: - logger.log_error( - f"Missing the variables '{', '.join(missing_rule_inputs)}' that " - "are required by some rules." - ) - valid = False + for rule_name, rule_input in rule_inputs.items(): + needed_rule_inputs = _lu.remove_duplicates_from_list(rule_input) + rule_input_vars = input_vars + mapping_vars_created + missing_rule_inputs = _lu.items_not_in(needed_rule_inputs, rule_input_vars) + if len(missing_rule_inputs) > 0: + logger.log_error( + f"Missing the variables '{', '.join(missing_rule_inputs)}' that " + f"are required by '{rule_name}'." + ) + valid = False return valid - def _get_direct_rule_inputs(self) -> List[str]: + def _get_direct_rule_inputs(self, rule_names) -> Dict[str, List[str]]: """Gets the input variables directly needed by rules from input datasets. Returns: - List[str]: + Dict[str, List[str]] """ - rule_input_vars = _lu.flatten_list( - [rule.input_variable_names for rule in self._rules] - ) + rule_input_vars = [rule.input_variable_names for rule in self._rules] rule_output_vars = [rule.output_variable_name for rule in self._rules] - return _lu.items_not_in(rule_input_vars, rule_output_vars) + needed_input_per_rule = dict() + for index, inputs_per_rule in enumerate(rule_input_vars): + needed_input_per_rule[rule_names[index]] = _lu.items_not_in( + inputs_per_rule, rule_output_vars + ) + + return needed_input_per_rule From e45aa837e8fc1f20527ff8614ba9a6b2150d6e2b Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 11:22:39 +0200 Subject: [PATCH 45/71] fix rule_based_model --- decoimpact/business/entities/rule_based_model.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index 0b6a3fa8..0dc9fdd6 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -142,8 +142,11 @@ def _make_output_variables_list(self) -> list: var_list = _du.get_dummy_and_dependent_var_list(dataset) mapping_keys = list((self._mappings or {}).keys()) + rule_names = [rule.name for rule in self._rules] + all_inputs = self._get_direct_rule_inputs(rule_names) + all_input_variables = _lu.flatten_list(list(all_inputs.values())) - all_vars = var_list + mapping_keys + self._get_direct_rule_inputs() + all_vars = var_list + mapping_keys + all_input_variables return _lu.remove_duplicates_from_list(all_vars) def _validate_mappings(self, mappings: dict[str, str], logger: ILogger) -> bool: From aebce22b2775fa4b769623994430dfb288811685 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 11:22:54 +0200 Subject: [PATCH 46/71] use dims from variables instead of hardcoded names --- .../entities/rules/depth_average_rule.py | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 63066983..37238b8a 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -45,32 +45,29 @@ def execute( water_level_name = "mesh2d_s1" bed_level_name = "mesh2d_flowelem_bl" - # These dimension names should be checked. If there is no depth dimension - # let the user know with a warning - dim_layer_name = "mesh2d_nLayers" - dim_interfaces_name = "mesh2d_nInterfaces" - - # TODO: is this the way or do we just take the dimensions available in - # the interface_z? - warn_message = "" - if dim_layer_name not in variables.dims: - warn_message = f"No dimension: ${dim_layer_name} present. " - if dim_interfaces_name not in value_arrays[interface_name].dims: - warn_message = ( - f"${warn_message}No dimension: ${dim_interfaces_name} present. " - ) - if warn_message != "": - logger.log_warning( - f"{warn_message} No vertical dimension found, returning original \ - values for {variable_key}" - ) - return variables - # depths interfaces = borders of the layers in terms of depth depths_interfaces = value_arrays[interface_name] water_level_values = value_arrays[water_level_name] bed_level_values = value_arrays[bed_level_name] + # Get the dimension names for the interfaces and for the layers + dim_interfaces_name = list(depths_interfaces.dims)[0] + interfaces_dim_len = depths_interfaces[dim_interfaces_name].size + + dim_layer_names = [ + d for d in variables.dims if d not in water_level_values.dims + ] + dim_layer_name = dim_layer_names[0] + layer_dim_len = variables[dim_layer_name].size + + # interface dimension should always be one larger than layer dimension + # Otherwise give an error to the user + if interfaces_dim_len != layer_dim_len + 1: + logger.log_warning( + f"The number of interfaces (= {interfaces_dim_len})" + f"should be number of layers (= {layer_dim_len}) + 1." + ) + # Broadcast the depths to the dimensions of the bed levels and # correct the depths to the bed level, in other words all depths lower # than bed level will be corrected to bed level. From d41e96e261f9be3daa6726aa6f851df2bdc50c1d Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 11:40:12 +0200 Subject: [PATCH 47/71] add warning and unit test if dimension mismatch --- .../entities/rules/depth_average_rule.py | 13 +++--- .../entities/rules/test_depth_average_rule.py | 42 +++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 37238b8a..a9b3ef64 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -52,21 +52,22 @@ def execute( # Get the dimension names for the interfaces and for the layers dim_interfaces_name = list(depths_interfaces.dims)[0] - interfaces_dim_len = depths_interfaces[dim_interfaces_name].size + interfaces_len = depths_interfaces[dim_interfaces_name].size dim_layer_names = [ d for d in variables.dims if d not in water_level_values.dims ] dim_layer_name = dim_layer_names[0] - layer_dim_len = variables[dim_layer_name].size + layer_len = variables[dim_layer_name].size # interface dimension should always be one larger than layer dimension # Otherwise give an error to the user - if interfaces_dim_len != layer_dim_len + 1: - logger.log_warning( - f"The number of interfaces (= {interfaces_dim_len})" - f"should be number of layers (= {layer_dim_len}) + 1." + if interfaces_len != layer_len + 1: + logger.log_error( + f"The number of interfaces should be number of layers + 1. Number of" + f"interfaces = {interfaces_len}. Number of layers = {layer_len}." ) + return variables # Broadcast the depths to the dimensions of the bed levels and # correct the depths to the bed level, in other words all depths lower diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index f3834e12..beab8698 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -129,3 +129,45 @@ def test_depth_average_rule( ) assert _xr.testing.assert_allclose(depth_average, result_array, atol=1e-08) is None + + +def test_dimension_error(): + """Make sure the calculation of the depth average is correct. Including + differing water and bed levels.""" + logger = Mock(ILogger) + rule = DepthAverageRule( + name="test", + input_variable_names=["foo"], + ) + + # Create dataset + ds = _xr.Dataset( + { + "var_3d": ( + ["time", "mesh2d_nFaces", "mesh2d_nLayers"], + _np.array([[[20, 40], [91, 92]]]), + ), + "mesh2d_interface_z": ( + ["mesh2d_nInterfaces"], + _np.array([0, -1, -2, -3, -4]), + ), + "mesh2d_flowelem_bl": ( + ["mesh2d_nFaces"], + _np.array([-2, -2]), + ), + "mesh2d_s1": (["time", "mesh2d_nFaces"], _np.array([[0, 0]])), + } + ) + + value_arrays = { + "var_3d": ds["var_3d"], + "mesh2d_interface_z": ds["mesh2d_interface_z"], + "mesh2d_flowelem_bl": ds["mesh2d_flowelem_bl"], + "mesh2d_s1": ds["mesh2d_s1"], + } + + rule.execute(value_arrays, logger) + logger.log_error.assert_called_with( + "The number of interfaces should be number of layers + 1. Number of" + "interfaces = 5. Number of layers = 2." + ) From 1c062c07eaf02cab77331e97f70253ee59dbf438 Mon Sep 17 00:00:00 2001 From: Wouter Date: Mon, 1 Jul 2024 13:53:48 +0200 Subject: [PATCH 48/71] feat[DEI-185]: reduce number of local variables (pylint) --- .../business/entities/rules/depth_average_rule.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index a9b3ef64..70907ba9 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -39,16 +39,10 @@ def execute( variable_key = next(iter(value_arrays.keys())) variables = value_arrays[variable_key] - # These are the same names as provided in the parser. So these - # are present in the data and don't have to be checked here - interface_name = "mesh2d_interface_z" - water_level_name = "mesh2d_s1" - bed_level_name = "mesh2d_flowelem_bl" - # depths interfaces = borders of the layers in terms of depth - depths_interfaces = value_arrays[interface_name] - water_level_values = value_arrays[water_level_name] - bed_level_values = value_arrays[bed_level_name] + depths_interfaces = value_arrays["mesh2d_interface_z"] + water_level_values = value_arrays["mesh2d_s1"] + bed_level_values = value_arrays["mesh2d_flowelem_bl"] # Get the dimension names for the interfaces and for the layers dim_interfaces_name = list(depths_interfaces.dims)[0] From 4ee1bc598ded362846e4d1fd3518d5e66b795148 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 14:58:27 +0200 Subject: [PATCH 49/71] removing duplicate code --- decoimpact/business/workflow/model_builder.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index 791cc510..fc9deb2e 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -160,10 +160,6 @@ def _create_rule(rule_data: IRuleData) -> IRule: rule = ClassificationRule( rule_data.name, rule_data.input_variable_names, rule_data.criteria_table ) - elif isinstance(rule_data, IDepthAverageRuleData): - rule = DepthAverageRule( - rule_data.name, [rule_data.input_variable], rule_data.output_variable - ) else: error_str = ( f"The rule type of rule '{rule_data.name}' is currently " From 3b642348c7240849439a5e0901e854ffad7898f5 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 16:21:54 +0200 Subject: [PATCH 50/71] reduce branches (pylint) --- decoimpact/business/workflow/model_builder.py | 159 +++++++++--------- 1 file changed, 84 insertions(+), 75 deletions(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index fc9deb2e..a174344c 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -92,82 +92,91 @@ def _set_default_fields(rule_data: IRuleData, rule: RuleBase): @staticmethod def _create_rule(rule_data: IRuleData) -> IRule: - if isinstance(rule_data, IMultiplyRuleData): - rule = MultiplyRule( - rule_data.name, - [rule_data.input_variable], - rule_data.multipliers, - rule_data.date_range, - ) - elif isinstance(rule_data, IDepthAverageRuleData): - rule = DepthAverageRule( - rule_data.name, - rule_data.input_variables, - ) - elif isinstance(rule_data, ILayerFilterRuleData): - rule = LayerFilterRule( - rule_data.name, - [rule_data.input_variable], - rule_data.layer_number, - ) - elif isinstance(rule_data, IAxisFilterRuleData): - rule = AxisFilterRule( - rule_data.name, - [rule_data.input_variable], - rule_data.element_index, - rule_data.axis_name, - ) - elif isinstance(rule_data, IStepFunctionRuleData): - rule = StepFunctionRule( - rule_data.name, - rule_data.input_variable, - rule_data.limits, - rule_data.responses, - ) - elif isinstance(rule_data, ITimeAggregationRuleData): - rule = TimeAggregationRule( - rule_data.name, [rule_data.input_variable], rule_data.operation - ) - rule.settings.percentile_value = rule_data.percentile_value - rule.settings.time_scale = rule_data.time_scale - elif isinstance(rule_data, IRollingStatisticsRuleData): - rule = RollingStatisticsRule( - rule_data.name, [rule_data.input_variable], rule_data.operation - ) - rule.settings.percentile_value = rule_data.percentile_value - rule.settings.time_scale = rule_data.time_scale - rule.period = rule_data.period - elif isinstance(rule_data, ICombineResultsRuleData): - rule = CombineResultsRule( - rule_data.name, - rule_data.input_variable_names, - MultiArrayOperationType[rule_data.operation_type], - ) - elif isinstance(rule_data, IResponseCurveRuleData): - rule = ResponseCurveRule( - rule_data.name, - rule_data.input_variable, - rule_data.input_values, - rule_data.output_values, - ) - elif isinstance(rule_data, IFormulaRuleData): - rule = FormulaRule( - rule_data.name, - rule_data.input_variable_names, - rule_data.formula, - ) - elif isinstance(rule_data, IClassificationRuleData): - rule = ClassificationRule( - rule_data.name, rule_data.input_variable_names, rule_data.criteria_table - ) - else: - error_str = ( - f"The rule type of rule '{rule_data.name}' is currently " - "not implemented" - ) - raise NotImplementedError(error_str) + + match rule_data: + case IMultiplyRuleData(): + rule = MultiplyRule( + rule_data.name, + [rule_data.input_variable], + rule_data.multipliers, + rule_data.date_range, + ) + case IDepthAverageRuleData(): + rule = DepthAverageRule( + rule_data.name, + rule_data.input_variables, + ) + case ILayerFilterRuleData(): + rule = LayerFilterRule( + rule_data.name, + [rule_data.input_variable], + rule_data.layer_number, + ) + case IAxisFilterRuleData(): + rule = AxisFilterRule( + rule_data.name, + [rule_data.input_variable], + rule_data.element_index, + rule_data.axis_name, + ) + case IStepFunctionRuleData(): + rule = StepFunctionRule( + rule_data.name, + rule_data.input_variable, + rule_data.limits, + rule_data.responses, + ) + case ITimeAggregationRuleData(): + rule = TimeAggregationRule( + rule_data.name, [rule_data.input_variable], rule_data.operation + ) + rule.settings.percentile_value = rule_data.percentile_value + rule.settings.time_scale = rule_data.time_scale + + case IRollingStatisticsRuleData(): + rule = RollingStatisticsRule( + rule_data.name, [rule_data.input_variable], rule_data.operation + ) + rule.settings.percentile_value = rule_data.percentile_value + rule.settings.time_scale = rule_data.time_scale + rule.period = rule_data.period + + case ICombineResultsRuleData(): + rule = CombineResultsRule( + rule_data.name, + rule_data.input_variable_names, + MultiArrayOperationType[rule_data.operation_type], + ) + + case IResponseCurveRuleData(): + rule = ResponseCurveRule( + rule_data.name, + rule_data.input_variable, + rule_data.input_values, + rule_data.output_values, + ) + + case IFormulaRuleData(): + rule = FormulaRule( + rule_data.name, + rule_data.input_variable_names, + rule_data.formula, + ) + + case IClassificationRuleData(): + rule = ClassificationRule( + rule_data.name, + rule_data.input_variable_names, + rule_data.criteria_table + ) + + case _: + error_str = ( + f"The rule type of rule '{rule_data.name}' is currently " + "not implemented" + ) + raise NotImplementedError(error_str) if isinstance(rule, RuleBase): ModelBuilder._set_default_fields(rule_data, rule) - return rule From 4ec7f4e52119e9285ac5eb2f400438267385f460 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 16:32:56 +0200 Subject: [PATCH 51/71] reduce number of local variables --- .../entities/rules/depth_average_rule.py | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 70907ba9..d1ad7a72 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -36,8 +36,7 @@ def execute( # The first DataArray in our value_arrays contains the values to be averaged # But the name of the key is given by the user, so just take the first - variable_key = next(iter(value_arrays.keys())) - variables = value_arrays[variable_key] + variables = next(iter(value_arrays.values())) # depths interfaces = borders of the layers in terms of depth depths_interfaces = value_arrays["mesh2d_interface_z"] @@ -48,10 +47,9 @@ def execute( dim_interfaces_name = list(depths_interfaces.dims)[0] interfaces_len = depths_interfaces[dim_interfaces_name].size - dim_layer_names = [ + dim_layer_name = [ d for d in variables.dims if d not in water_level_values.dims - ] - dim_layer_name = dim_layer_names[0] + ][0] layer_len = variables[dim_layer_name].size # interface dimension should always be one larger than layer dimension @@ -77,12 +75,12 @@ def execute( # dimensions and then replace all values higher than waterlevel with # waterlevel) corrected_depth_bed = corrected_depth_bed.broadcast_like(water_level_values) - corrected_depths = corrected_depth_bed.where( + corrected_depth_bed = corrected_depth_bed.where( water_level_values > corrected_depth_bed, water_level_values ) # Calculate the layer heights between depths - layer_heights = corrected_depths.diff(dim=dim_interfaces_name) + layer_heights = corrected_depth_bed.diff(dim=dim_interfaces_name) layer_heights = layer_heights.rename({dim_interfaces_name: dim_layer_name}) # Use the nan filtering of the variables to set the correct depth per column @@ -91,11 +89,7 @@ def execute( # Calculate depth average using relative value relative_values = variables * heights_all_filtered - # Calculate total height and total value in column - sum_relative_values = relative_values.sum(dim=dim_layer_name) - sum_heights = heights_all_filtered.sum(dim=dim_layer_name) - # Calculate average - depth_average = sum_relative_values / sum_heights - - return depth_average + return relative_values.sum(dim=dim_layer_name) / heights_all_filtered.sum( + dim=dim_layer_name + ) From c7f4df78920312b51d55d67dc64b19ba0d836b37 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 16:35:58 +0200 Subject: [PATCH 52/71] Update rule_based_model.py --- decoimpact/business/entities/rule_based_model.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index 0dc9fdd6..a25f58af 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -104,9 +104,8 @@ def initialize(self, logger: ILogger) -> None: self._input_datasets, self._make_output_variables_list(), self._mappings ) self._rule_processor = RuleProcessor(self._rules, self._output_dataset) - success = self._rule_processor.initialize(logger) - if not success: + if not self._rule_processor.initialize(logger): logger.log_error("Initialization failed.") def execute(self, logger: ILogger) -> None: @@ -177,8 +176,7 @@ def _validate_mappings(self, mappings: dict[str, str], logger: ILogger) -> bool: valid = False # check for duplicates that will be created because of mapping - mapping_vars_created = list(mappings.values()) - duplicates_created = _lu.items_in(mapping_vars_created, input_vars) + duplicates_created = _lu.items_in(list(mappings.values()), input_vars) if len(duplicates_created) > 0: logger.log_error( From 265da250d1e057c7f0d1a9269c3b97f026adf773 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 16:53:38 +0200 Subject: [PATCH 53/71] fix pylint --- decoimpact/business/entities/rule_based_model.py | 2 +- decoimpact/business/entities/rules/depth_average_rule.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index a25f58af..cd02d552 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -193,7 +193,7 @@ def _validate_mappings(self, mappings: dict[str, str], logger: ILogger) -> bool: # check for missing rule inputs for rule_name, rule_input in rule_inputs.items(): needed_rule_inputs = _lu.remove_duplicates_from_list(rule_input) - rule_input_vars = input_vars + mapping_vars_created + rule_input_vars = input_vars + list(mappings.values()) missing_rule_inputs = _lu.items_not_in(needed_rule_inputs, rule_input_vars) if len(missing_rule_inputs) > 0: logger.log_error( diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index d1ad7a72..4da4866f 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -84,12 +84,12 @@ def execute( layer_heights = layer_heights.rename({dim_interfaces_name: dim_layer_name}) # Use the nan filtering of the variables to set the correct depth per column - heights_all_filtered = layer_heights.where(variables.notnull()) + layer_heights = layer_heights.where(variables.notnull()) # Calculate depth average using relative value - relative_values = variables * heights_all_filtered + relative_values = variables * layer_heights # Calculate average - return relative_values.sum(dim=dim_layer_name) / heights_all_filtered.sum( + return relative_values.sum(dim=dim_layer_name) / layer_heights.sum( dim=dim_layer_name ) From bd58cfc022b2d4ffcca99449781de3b2b202d5f4 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 16:58:31 +0200 Subject: [PATCH 54/71] Update depth_average_rule.py --- .../business/entities/rules/depth_average_rule.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 4da4866f..a8cc6700 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -22,7 +22,7 @@ class DepthAverageRule(RuleBase, IMultiArrayBasedRule): - """Implementation for the depthaverage rule""" + """Implementation for the depth average rule""" def execute( self, value_arrays: Dict[str, _xr.DataArray], logger: ILogger @@ -30,12 +30,14 @@ def execute( """Calculate depth average of assumed z-layers. Args: value_array (DataArray): Values to multiply + Returns: DataArray: Averaged values """ # The first DataArray in our value_arrays contains the values to be averaged - # But the name of the key is given by the user, so just take the first + # but the name of the key is given by the user, and is unknown here, so + # just used the first value. variables = next(iter(value_arrays.values())) # depths interfaces = borders of the layers in terms of depth @@ -61,9 +63,9 @@ def execute( ) return variables - # Broadcast the depths to the dimensions of the bed levels and - # correct the depths to the bed level, in other words all depths lower - # than bed level will be corrected to bed level. + # Broadcast the depths to the dimensions of the bed levels. Then make a + # correction for the depths to the bed level, in other words all depths lower + # than the bed level will be corrected to the bed level. depths_interfaces_broadcasted = depths_interfaces.broadcast_like( bed_level_values ) From bee7944f04840786a892ef1737dc3fc7f8ec0884 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 17:01:36 +0200 Subject: [PATCH 55/71] Update rule_based_model.py --- decoimpact/business/entities/rule_based_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index cd02d552..1092907c 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -214,7 +214,7 @@ def _get_direct_rule_inputs(self, rule_names) -> Dict[str, List[str]]: rule_input_vars = [rule.input_variable_names for rule in self._rules] rule_output_vars = [rule.output_variable_name for rule in self._rules] - needed_input_per_rule = dict() + needed_input_per_rule = {} for index, inputs_per_rule in enumerate(rule_input_vars): needed_input_per_rule[rule_names[index]] = _lu.items_not_in( inputs_per_rule, rule_output_vars From 942e78f11dc4b7f58b724d47581ee0f0f45f47aa Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Mon, 1 Jul 2024 17:22:30 +0200 Subject: [PATCH 56/71] Update model_builder.py --- decoimpact/business/workflow/model_builder.py | 160 +++++++++--------- 1 file changed, 77 insertions(+), 83 deletions(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index a174344c..28a86ab2 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -93,89 +93,83 @@ def _set_default_fields(rule_data: IRuleData, rule: RuleBase): @staticmethod def _create_rule(rule_data: IRuleData) -> IRule: - match rule_data: - case IMultiplyRuleData(): - rule = MultiplyRule( - rule_data.name, - [rule_data.input_variable], - rule_data.multipliers, - rule_data.date_range, - ) - case IDepthAverageRuleData(): - rule = DepthAverageRule( - rule_data.name, - rule_data.input_variables, - ) - case ILayerFilterRuleData(): - rule = LayerFilterRule( - rule_data.name, - [rule_data.input_variable], - rule_data.layer_number, - ) - case IAxisFilterRuleData(): - rule = AxisFilterRule( - rule_data.name, - [rule_data.input_variable], - rule_data.element_index, - rule_data.axis_name, - ) - case IStepFunctionRuleData(): - rule = StepFunctionRule( - rule_data.name, - rule_data.input_variable, - rule_data.limits, - rule_data.responses, - ) - case ITimeAggregationRuleData(): - rule = TimeAggregationRule( - rule_data.name, [rule_data.input_variable], rule_data.operation - ) - rule.settings.percentile_value = rule_data.percentile_value - rule.settings.time_scale = rule_data.time_scale - - case IRollingStatisticsRuleData(): - rule = RollingStatisticsRule( - rule_data.name, [rule_data.input_variable], rule_data.operation - ) - rule.settings.percentile_value = rule_data.percentile_value - rule.settings.time_scale = rule_data.time_scale - rule.period = rule_data.period - - case ICombineResultsRuleData(): - rule = CombineResultsRule( - rule_data.name, - rule_data.input_variable_names, - MultiArrayOperationType[rule_data.operation_type], - ) - - case IResponseCurveRuleData(): - rule = ResponseCurveRule( - rule_data.name, - rule_data.input_variable, - rule_data.input_values, - rule_data.output_values, - ) - - case IFormulaRuleData(): - rule = FormulaRule( - rule_data.name, - rule_data.input_variable_names, - rule_data.formula, - ) - - case IClassificationRuleData(): - rule = ClassificationRule( - rule_data.name, - rule_data.input_variable_names, - rule_data.criteria_table - ) - - case _: - error_str = ( - f"The rule type of rule '{rule_data.name}' is currently " - "not implemented" - ) - raise NotImplementedError(error_str) + # TODO: from python >3.10 we can use match/case, better solution + # until then disable pylint. + # pylint: disable=too-many-branches + if isinstance(rule_data, IMultiplyRuleData): + rule = MultiplyRule( + rule_data.name, + [rule_data.input_variable], + rule_data.multipliers, + rule_data.date_range, + ) + elif isinstance(rule_data, IDepthAverageRuleData): + rule = DepthAverageRule( + rule_data.name, + rule_data.input_variables, + ) + elif isinstance(rule_data, ILayerFilterRuleData): + rule = LayerFilterRule( + rule_data.name, + [rule_data.input_variable], + rule_data.layer_number, + ) + elif isinstance(rule_data, IAxisFilterRuleData): + rule = AxisFilterRule( + rule_data.name, + [rule_data.input_variable], + rule_data.element_index, + rule_data.axis_name, + ) + elif isinstance(rule_data, IStepFunctionRuleData): + rule = StepFunctionRule( + rule_data.name, + rule_data.input_variable, + rule_data.limits, + rule_data.responses, + ) + elif isinstance(rule_data, ITimeAggregationRuleData): + rule = TimeAggregationRule( + rule_data.name, [rule_data.input_variable], rule_data.operation + ) + rule.settings.percentile_value = rule_data.percentile_value + rule.settings.time_scale = rule_data.time_scale + elif isinstance(rule_data, IRollingStatisticsRuleData): + rule = RollingStatisticsRule( + rule_data.name, [rule_data.input_variable], rule_data.operation + ) + rule.settings.percentile_value = rule_data.percentile_value + rule.settings.time_scale = rule_data.time_scale + rule.period = rule_data.period + elif isinstance(rule_data, ICombineResultsRuleData): + rule = CombineResultsRule( + rule_data.name, + rule_data.input_variable_names, + MultiArrayOperationType[rule_data.operation_type], + ) + elif isinstance(rule_data, IResponseCurveRuleData): + rule = ResponseCurveRule( + rule_data.name, + rule_data.input_variable, + rule_data.input_values, + rule_data.output_values, + ) + elif isinstance(rule_data, IFormulaRuleData): + rule = FormulaRule( + rule_data.name, + rule_data.input_variable_names, + rule_data.formula, + ) + elif isinstance(rule_data, IClassificationRuleData): + rule = ClassificationRule( + rule_data.name, rule_data.input_variable_names, rule_data.criteria_table + ) + else: + error_str = ( + f"The rule type of rule '{rule_data.name}' is currently " + "not implemented" + ) + raise NotImplementedError(error_str) if isinstance(rule, RuleBase): ModelBuilder._set_default_fields(rule_data, rule) From 51d71c6c7f0c0654148bfb4665fa814bcdcb01e4 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 09:28:45 +0200 Subject: [PATCH 57/71] update with review comments --- .../entities/rules/axis_filter_rule.py | 2 +- .../entities/rules/rolling_statistics_rule.py | 2 +- .../api/i_rolling_statistics_rule_data.py | 2 +- .../entities/rolling_statistics_rule_data.py | 2 +- .../parsers/parser_rolling_statistics_rule.py | 2 +- docs/manual/input.md | 49 +++++++++++++++++++ main.py | 2 +- pyinstaller.py | 2 +- .../entities/rules/test_axis_filter_rule.py | 2 +- .../rules/test_classification_rule.py | 2 +- .../rules/test_combine_results_rule.py | 2 +- .../entities/rules/test_depth_average_rule.py | 2 +- .../entities/rules/test_formula_rule.py | 2 +- .../entities/rules/test_layer_filter_rule.py | 2 +- .../entities/rules/test_multiply_rule.py | 2 +- .../rules/test_response_curve_rule.py | 2 +- .../rules/test_rolling_statistics_rule.py | 2 +- .../business/entities/rules/test_rule_base.py | 2 +- .../entities/rules/test_step_function_rule.py | 2 +- .../rules/test_string_parser_utils.py | 2 +- .../rules/test_time_aggregation_rule.py | 2 +- ...t_time_aggregation_rule_analyze_periods.py | 2 +- .../entities/test_rule_based_model.py | 2 +- .../business/entities/test_rule_processor.py | 2 +- tests/business/test_application.py | 4 +- tests/business/utils/test_dataset_utils.py | 2 +- tests/business/utils/test_list_utils.py | 2 +- tests/business/utils/test_version_utils.py | 2 +- tests/business/workflow/test_model_builder.py | 2 +- tests/business/workflow/test_model_runner.py | 15 +++--- tests/crosscutting/test_logger_factory.py | 2 +- tests/crosscutting/test_logging_logger.py | 23 ++++----- .../entities/test_axis_filter_rule_data.py | 2 +- .../entities/test_classification_rule_data.py | 2 +- .../entities/test_combine_results_data.py | 2 +- tests/data/entities/test_data_access_layer.py | 2 +- tests/data/entities/test_dataset_data.py | 8 ++- .../entities/test_depth_average_rule_data.py | 2 +- tests/data/entities/test_formula_rule_data.py | 2 +- .../entities/test_layer_filter_rule_data.py | 2 +- .../data/entities/test_model_data_builder.py | 6 +-- .../data/entities/test_multiply_rule_data.py | 2 +- .../entities/test_response_curve_rule_data.py | 2 +- .../test_rolling_statistics_rule_data.py | 2 +- tests/data/entities/test_rule_data.py | 2 +- .../entities/test_step_function_rule_data.py | 2 +- .../test_time_aggregation_rule_data.py | 2 +- tests/data/entities/test_yaml_model_data.py | 2 +- .../parsers/test_parser_axis_filter_rule.py | 14 +++--- .../test_parser_classification_rule.py | 2 +- .../test_parser_combine_results_rule.py | 2 +- .../parsers/test_parser_depth_average_rule.py | 2 +- .../data/parsers/test_parser_formula_rule.py | 2 +- .../parsers/test_parser_layer_filter_rule.py | 2 +- .../data/parsers/test_parser_multiply_rule.py | 25 +++++----- .../test_parser_response_curve_rule.py | 36 +++++++------- .../test_parser_rolling_statistics_rule.py | 2 +- .../parsers/test_parser_step_function_rule.py | 2 +- .../test_parser_time_aggregation_rule.py | 2 +- tests/data/parsers/test_validation_utils.py | 27 +++------- tests/data/test_dictionary_utils.py | 8 ++- tests/testing_utils.py | 10 ++-- tests_acceptance/test_main.py | 2 +- 63 files changed, 182 insertions(+), 145 deletions(-) diff --git a/decoimpact/business/entities/rules/axis_filter_rule.py b/decoimpact/business/entities/rules/axis_filter_rule.py index e586d13b..0277586f 100644 --- a/decoimpact/business/entities/rules/axis_filter_rule.py +++ b/decoimpact/business/entities/rules/axis_filter_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares and D-EcoImpact contributors +# Copyright (C) 2022-2024 Stichting Deltares and D-EcoImpact contributors # This program is free software distributed under the GNU # Lesser General Public License version 2.1 # A copy of the GNU General Public License can be found at diff --git a/decoimpact/business/entities/rules/rolling_statistics_rule.py b/decoimpact/business/entities/rules/rolling_statistics_rule.py index 0e1319a4..f0078dbb 100644 --- a/decoimpact/business/entities/rules/rolling_statistics_rule.py +++ b/decoimpact/business/entities/rules/rolling_statistics_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares and D-EcoImpact contributors +# Copyright (C) 2022-2024 Stichting Deltares and D-EcoImpact contributors # This program is free software distributed under the GNU # Lesser General Public License version 2.1 # A copy of the GNU General Public License can be found at diff --git a/decoimpact/data/api/i_rolling_statistics_rule_data.py b/decoimpact/data/api/i_rolling_statistics_rule_data.py index 58667713..49e916b1 100644 --- a/decoimpact/data/api/i_rolling_statistics_rule_data.py +++ b/decoimpact/data/api/i_rolling_statistics_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares and D-EcoImpact contributors +# Copyright (C) 2022-2024 Stichting Deltares and D-EcoImpact contributors # This program is free software distributed under the GNU # Lesser General Public License version 2.1 # A copy of the GNU General Public License can be found at diff --git a/decoimpact/data/entities/rolling_statistics_rule_data.py b/decoimpact/data/entities/rolling_statistics_rule_data.py index 255f89d7..37250e47 100644 --- a/decoimpact/data/entities/rolling_statistics_rule_data.py +++ b/decoimpact/data/entities/rolling_statistics_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares and D-EcoImpact contributors +# Copyright (C) 2022-2024 Stichting Deltares and D-EcoImpact contributors # This program is free software distributed under the GNU # Lesser General Public License version 2.1 # A copy of the GNU General Public License can be found at diff --git a/decoimpact/data/parsers/parser_rolling_statistics_rule.py b/decoimpact/data/parsers/parser_rolling_statistics_rule.py index 47a17363..4f1424d6 100644 --- a/decoimpact/data/parsers/parser_rolling_statistics_rule.py +++ b/decoimpact/data/parsers/parser_rolling_statistics_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares and D-EcoImpact contributors +# Copyright (C) 2022-2024 Stichting Deltares and D-EcoImpact contributors # This program is free software distributed under the GNU # Lesser General Public License version 2.1 # A copy of the GNU General Public License can be found at diff --git a/docs/manual/input.md b/docs/manual/input.md index 59b6d5fb..0888d6ee 100644 --- a/docs/manual/input.md +++ b/docs/manual/input.md @@ -644,4 +644,53 @@ And this is the included file from tables/aquatic_plant_criteria.yaml: - [ 3 , "-" , "-" , ">400"] # too salty - [ 4 , "-" , ">1.5" , "-"] # too fast flowing - [ 5 , "0.10:4.0" , "0.0:1.5" , "0:400"] # perfect for aquatic plants +``` + + +### Depth average rule + +``` +FORMAT +- depth_average_rule: + name: + description: + input_variable: + output_variable: +``` + +The depth average rule allows for an averaging over depth using the weighted values according to a mesh with z-layers. The file must include a variable called 'mesh2d_interface_z' over which the the input variable will be averaged. The input_variable will be a 2D/3D with or without time axis and the output_variable has the same dimensions excluding the dimension for the depth, as it will be represented as one averaged value per cell. + +An explanation of how the depth rule works is shown in the table below: + + + +Complex example calculated output by hand +depths heights nInterfaces: 5 +0 1 nLayers: 4 +-1 2 nFaces: 4 +-3 3 time: 2 +-6 4 +-10 + +valuables +1 1 1 1 1 1 1 1 +2 2 2 2 2 2 2 2 +3 3 3 3 3 3 3 3 +4 4 4 4 4 4 4 4 +water_level +0 0 -1.5 -1.5 0 -6 5 -5 +bed_level +-10 -5 -10 -5 +output +3 2.2 3.294117647 2.571428571 3 0 3 0 + +In the example shown above the stripe indicates the time period covered (4 timesteps in this case) and with i the location where the result of the statistic over that period is written. Hence, the first three timesteps in this example will not contain any values. This is repeated until the time series has been covered. + +``` +#EXAMPLE : Determine a rolling statistic over salinity levels + - depth_average_rule: + name: test depth average + description: Test depth average + input_variable: salinity + output_variable: average_salinity ``` \ No newline at end of file diff --git a/main.py b/main.py index f011140b..d6bb6532 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/pyinstaller.py b/pyinstaller.py index 14cb2333..803e3cc3 100644 --- a/pyinstaller.py +++ b/pyinstaller.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_axis_filter_rule.py b/tests/business/entities/rules/test_axis_filter_rule.py index a6e4b4a8..e99154f8 100644 --- a/tests/business/entities/rules/test_axis_filter_rule.py +++ b/tests/business/entities/rules/test_axis_filter_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_classification_rule.py b/tests/business/entities/rules/test_classification_rule.py index fbf44c28..3eedb86f 100644 --- a/tests/business/entities/rules/test_classification_rule.py +++ b/tests/business/entities/rules/test_classification_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_combine_results_rule.py b/tests/business/entities/rules/test_combine_results_rule.py index 3a0afa28..236d93fe 100644 --- a/tests/business/entities/rules/test_combine_results_rule.py +++ b/tests/business/entities/rules/test_combine_results_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index beab8698..e51cbf43 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_formula_rule.py b/tests/business/entities/rules/test_formula_rule.py index 6eac4674..44248b98 100644 --- a/tests/business/entities/rules/test_formula_rule.py +++ b/tests/business/entities/rules/test_formula_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_layer_filter_rule.py b/tests/business/entities/rules/test_layer_filter_rule.py index 06fb8fc0..3c35b9bd 100644 --- a/tests/business/entities/rules/test_layer_filter_rule.py +++ b/tests/business/entities/rules/test_layer_filter_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_multiply_rule.py b/tests/business/entities/rules/test_multiply_rule.py index 98bbb34b..4fde6182 100644 --- a/tests/business/entities/rules/test_multiply_rule.py +++ b/tests/business/entities/rules/test_multiply_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_response_curve_rule.py b/tests/business/entities/rules/test_response_curve_rule.py index ec40832e..bf910c5e 100644 --- a/tests/business/entities/rules/test_response_curve_rule.py +++ b/tests/business/entities/rules/test_response_curve_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_rolling_statistics_rule.py b/tests/business/entities/rules/test_rolling_statistics_rule.py index 8b718bb2..f4735119 100644 --- a/tests/business/entities/rules/test_rolling_statistics_rule.py +++ b/tests/business/entities/rules/test_rolling_statistics_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_rule_base.py b/tests/business/entities/rules/test_rule_base.py index c71e90aa..93c0d8e9 100644 --- a/tests/business/entities/rules/test_rule_base.py +++ b/tests/business/entities/rules/test_rule_base.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_step_function_rule.py b/tests/business/entities/rules/test_step_function_rule.py index e3bd4b02..45ffb539 100644 --- a/tests/business/entities/rules/test_step_function_rule.py +++ b/tests/business/entities/rules/test_step_function_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_string_parser_utils.py b/tests/business/entities/rules/test_string_parser_utils.py index c9915a2a..979c773f 100644 --- a/tests/business/entities/rules/test_string_parser_utils.py +++ b/tests/business/entities/rules/test_string_parser_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_time_aggregation_rule.py b/tests/business/entities/rules/test_time_aggregation_rule.py index 5d4231e1..f738a1d5 100644 --- a/tests/business/entities/rules/test_time_aggregation_rule.py +++ b/tests/business/entities/rules/test_time_aggregation_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/rules/test_time_aggregation_rule_analyze_periods.py b/tests/business/entities/rules/test_time_aggregation_rule_analyze_periods.py index 232ed5b6..5df9c3fa 100644 --- a/tests/business/entities/rules/test_time_aggregation_rule_analyze_periods.py +++ b/tests/business/entities/rules/test_time_aggregation_rule_analyze_periods.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/test_rule_based_model.py b/tests/business/entities/test_rule_based_model.py index 050eb81f..ab99e102 100644 --- a/tests/business/entities/test_rule_based_model.py +++ b/tests/business/entities/test_rule_based_model.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/entities/test_rule_processor.py b/tests/business/entities/test_rule_processor.py index c039aef3..83d47169 100644 --- a/tests/business/entities/test_rule_processor.py +++ b/tests/business/entities/test_rule_processor.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/test_application.py b/tests/business/test_application.py index 2be13a80..a1c45509 100644 --- a/tests/business/test_application.py +++ b/tests/business/test_application.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -35,7 +35,7 @@ def test_running_application(): model_data.version = [0, 0, 0] application = Application(logger, data_layer, model_builder) - application.APPLICATION_VERSION = '0.0.0' + application.APPLICATION_VERSION = "0.0.0" application.APPLICATION_VERSION_PARTS = [0, 0, 0] # Act diff --git a/tests/business/utils/test_dataset_utils.py b/tests/business/utils/test_dataset_utils.py index e755cb73..c0fa7723 100644 --- a/tests/business/utils/test_dataset_utils.py +++ b/tests/business/utils/test_dataset_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/utils/test_list_utils.py b/tests/business/utils/test_list_utils.py index 4120b0ca..bec99c74 100644 --- a/tests/business/utils/test_list_utils.py +++ b/tests/business/utils/test_list_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/utils/test_version_utils.py b/tests/business/utils/test_version_utils.py index a321d124..92fd6fb7 100644 --- a/tests/business/utils/test_version_utils.py +++ b/tests/business/utils/test_version_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/workflow/test_model_builder.py b/tests/business/workflow/test_model_builder.py index d31a82a1..7562fe00 100644 --- a/tests/business/workflow/test_model_builder.py +++ b/tests/business/workflow/test_model_builder.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/business/workflow/test_model_runner.py b/tests/business/workflow/test_model_runner.py index f3ceeaf2..2950c2d6 100644 --- a/tests/business/workflow/test_model_runner.py +++ b/tests/business/workflow/test_model_runner.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -48,11 +48,14 @@ def test_run_model_with_invalid_model_should_fail(): assert model.status == ModelStatus.FAILED -@pytest.mark.parametrize("method", [ - "initialize", - "execute", - "finalize", -]) +@pytest.mark.parametrize( + "method", + [ + "initialize", + "execute", + "finalize", + ], +) def test_run_model_with_model_throwing_exception_should_fail(method: str): """Test that model runner puts the model into the Failed state if an error occurred during the execution of the provided method""" diff --git a/tests/crosscutting/test_logger_factory.py b/tests/crosscutting/test_logger_factory.py index d1959737..bbb3dd62 100644 --- a/tests/crosscutting/test_logger_factory.py +++ b/tests/crosscutting/test_logger_factory.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/crosscutting/test_logging_logger.py b/tests/crosscutting/test_logging_logger.py index ed6cf503..a4a9ef08 100644 --- a/tests/crosscutting/test_logging_logger.py +++ b/tests/crosscutting/test_logging_logger.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -14,17 +14,18 @@ from tests.testing_utils import find_log_message_by_level -@pytest.mark.parametrize("method_name, level", [ - ("log_debug", "DEBUG"), - ("log_info", "INFO"), - ("log_warning", "WARNING"), - ("log_error", "ERROR"), -]) +@pytest.mark.parametrize( + "method_name, level", + [ + ("log_debug", "DEBUG"), + ("log_info", "INFO"), + ("log_warning", "WARNING"), + ("log_error", "ERROR"), + ], +) def test_log_message_is_passed_on_to_logger( - method_name: str, - level: str, - caplog: LogCaptureFixture - ): + method_name: str, level: str, caplog: LogCaptureFixture +): """Test format of messages logged by LoggingLogger""" # Arrange diff --git a/tests/data/entities/test_axis_filter_rule_data.py b/tests/data/entities/test_axis_filter_rule_data.py index 2817d883..721f0b9a 100644 --- a/tests/data/entities/test_axis_filter_rule_data.py +++ b/tests/data/entities/test_axis_filter_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_classification_rule_data.py b/tests/data/entities/test_classification_rule_data.py index acc6a19e..db9bee5f 100644 --- a/tests/data/entities/test_classification_rule_data.py +++ b/tests/data/entities/test_classification_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_combine_results_data.py b/tests/data/entities/test_combine_results_data.py index cbfb0c17..94998631 100644 --- a/tests/data/entities/test_combine_results_data.py +++ b/tests/data/entities/test_combine_results_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_data_access_layer.py b/tests/data/entities/test_data_access_layer.py index a7e8e0a0..334a54cf 100644 --- a/tests/data/entities/test_data_access_layer.py +++ b/tests/data/entities/test_data_access_layer.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_dataset_data.py b/tests/data/entities/test_dataset_data.py index 7a9d798c..00126c2b 100644 --- a/tests/data/entities/test_dataset_data.py +++ b/tests/data/entities/test_dataset_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -33,11 +33,10 @@ def test_dataset_data_creation_logic(): assert str(data.path).endswith("test.yaml") assert "test" in data.mapping assert data.mapping["test"] == "new" - assert data.start_date == 'None' + assert data.start_date == "None" assert data.end_date == "31-12-2020" - def test_dataset_data_time_filter(): """The DatasetData should parse the provided dictionary to correctly initialize itself during creation @@ -59,6 +58,5 @@ def test_dataset_data_time_filter(): assert isinstance(data, IDatasetData) assert str(data.path).endswith("test.yaml") assert data.start_date == "01-01-2019" - assert data.end_date == 'None' + assert data.end_date == "None" # the result 'None' should result in not filtering the data set on end date - diff --git a/tests/data/entities/test_depth_average_rule_data.py b/tests/data/entities/test_depth_average_rule_data.py index 8fcc0d58..86c32ee9 100644 --- a/tests/data/entities/test_depth_average_rule_data.py +++ b/tests/data/entities/test_depth_average_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_formula_rule_data.py b/tests/data/entities/test_formula_rule_data.py index 6ecbf6c1..5de51fad 100644 --- a/tests/data/entities/test_formula_rule_data.py +++ b/tests/data/entities/test_formula_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_layer_filter_rule_data.py b/tests/data/entities/test_layer_filter_rule_data.py index 3a75e55d..e5bd82b2 100644 --- a/tests/data/entities/test_layer_filter_rule_data.py +++ b/tests/data/entities/test_layer_filter_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_model_data_builder.py b/tests/data/entities/test_model_data_builder.py index 9f257916..97cb85e7 100644 --- a/tests/data/entities/test_model_data_builder.py +++ b/tests/data/entities/test_model_data_builder.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -60,7 +60,7 @@ def test_model_data_builder_parse_dict_to_model_data(): # Act data = ModelDataBuilder(logger) - contents["version"] = '0.0.0' + contents["version"] = "0.0.0" parsed_data = data.parse_yaml_data(contents) # Assert @@ -77,7 +77,7 @@ def test_model_data_builder_gives_error_when_rule_not_defined(): # Act data = ModelDataBuilder(logger) contents["rules"][0] = {"wrong_rule": "test"} - contents["version"] = '0.0.0' + contents["version"] = "0.0.0" with pytest.raises(KeyError) as exc_info: data.parse_yaml_data(contents) diff --git a/tests/data/entities/test_multiply_rule_data.py b/tests/data/entities/test_multiply_rule_data.py index bb8d8bd7..ead5a3a8 100644 --- a/tests/data/entities/test_multiply_rule_data.py +++ b/tests/data/entities/test_multiply_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_response_curve_rule_data.py b/tests/data/entities/test_response_curve_rule_data.py index d5476385..1c966f6e 100644 --- a/tests/data/entities/test_response_curve_rule_data.py +++ b/tests/data/entities/test_response_curve_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_rolling_statistics_rule_data.py b/tests/data/entities/test_rolling_statistics_rule_data.py index 1c06f829..c8826b54 100644 --- a/tests/data/entities/test_rolling_statistics_rule_data.py +++ b/tests/data/entities/test_rolling_statistics_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_rule_data.py b/tests/data/entities/test_rule_data.py index bdc7bbc5..d97dfb50 100644 --- a/tests/data/entities/test_rule_data.py +++ b/tests/data/entities/test_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_step_function_rule_data.py b/tests/data/entities/test_step_function_rule_data.py index 5a1c9ffd..7d6d89e4 100644 --- a/tests/data/entities/test_step_function_rule_data.py +++ b/tests/data/entities/test_step_function_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_time_aggregation_rule_data.py b/tests/data/entities/test_time_aggregation_rule_data.py index ab933296..4ac7f8c5 100644 --- a/tests/data/entities/test_time_aggregation_rule_data.py +++ b/tests/data/entities/test_time_aggregation_rule_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/entities/test_yaml_model_data.py b/tests/data/entities/test_yaml_model_data.py index 7bedc001..29d72857 100644 --- a/tests/data/entities/test_yaml_model_data.py +++ b/tests/data/entities/test_yaml_model_data.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_axis_filter_rule.py b/tests/data/parsers/test_parser_axis_filter_rule.py index edc00549..a1cf980a 100644 --- a/tests/data/parsers/test_parser_axis_filter_rule.py +++ b/tests/data/parsers/test_parser_axis_filter_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -28,8 +28,8 @@ def test_parser_axis_filter_rule_creation_logic(): assert isinstance(data, IParserRuleBase) assert data.rule_type_name == "axis_filter_rule" - - + + def test_parse_dict_to__axis_rule_data_logic(): """Test if a correct dictionary is parsed into a RuleData object""" # Arrange @@ -51,8 +51,8 @@ def test_parse_dict_to__axis_rule_data_logic(): # Assert assert isinstance(parsed_dict, IRuleData) - - + + def test_parse_wrong_dict_to_axis_rule_data_logic(): """Test if an incorrect dictionary is not parsed""" # Arrange @@ -78,8 +78,8 @@ def test_parse_wrong_dict_to_axis_rule_data_logic(): # Assert expected_message = "Missing element axis_name" assert exception_raised.args[0] == expected_message - - + + def test_parse_axis_name_type(): """Test if an incorrect dictionary is not parsed""" # Arrange diff --git a/tests/data/parsers/test_parser_classification_rule.py b/tests/data/parsers/test_parser_classification_rule.py index e277f520..e6c636ac 100644 --- a/tests/data/parsers/test_parser_classification_rule.py +++ b/tests/data/parsers/test_parser_classification_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_combine_results_rule.py b/tests/data/parsers/test_parser_combine_results_rule.py index 2e4475dc..0c4d8f8e 100644 --- a/tests/data/parsers/test_parser_combine_results_rule.py +++ b/tests/data/parsers/test_parser_combine_results_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_depth_average_rule.py b/tests/data/parsers/test_parser_depth_average_rule.py index afe4fe6f..a704bb47 100644 --- a/tests/data/parsers/test_parser_depth_average_rule.py +++ b/tests/data/parsers/test_parser_depth_average_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_formula_rule.py b/tests/data/parsers/test_parser_formula_rule.py index e577d280..c74588d5 100644 --- a/tests/data/parsers/test_parser_formula_rule.py +++ b/tests/data/parsers/test_parser_formula_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_layer_filter_rule.py b/tests/data/parsers/test_parser_layer_filter_rule.py index ee1504b6..d8161e10 100644 --- a/tests/data/parsers/test_parser_layer_filter_rule.py +++ b/tests/data/parsers/test_parser_layer_filter_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_multiply_rule.py b/tests/data/parsers/test_parser_multiply_rule.py index 160e3f53..2cc490ce 100644 --- a/tests/data/parsers/test_parser_multiply_rule.py +++ b/tests/data/parsers/test_parser_multiply_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -118,8 +118,8 @@ def test_multiply_parser_with_multipliers_table_correct(): ["01-01", "15-07", [1, 100]], ["16-07", "31-12", [0]], ["16-7", "31-12", [1]], - ["1-11", "31-12", [0]] - ] + ["1-11", "31-12", [0]], + ], } ) logger = Mock(ILogger) @@ -135,27 +135,24 @@ def test_multiply_parser_with_multipliers_table_correct(): "multipliers_table, expected_message", [ ( - [ - ["date", "end_date", "multipliers"], - ["01-01", "15-07", [1, 100]] - ], - "Missing element start_date" + [["date", "end_date", "multipliers"], ["01-01", "15-07", [1, 100]]], + "Missing element start_date", ), ( [ ["start_date", "not_end_date", "multipliers"], - ["01-01", "15-07", [1, 100]] + ["01-01", "15-07", [1, 100]], ], - "Missing element end_date" + "Missing element end_date", ), ( [ ["start_date", "end_date", "something_else"], - ["01-01", "15-07", [1, 100]] + ["01-01", "15-07", [1, 100]], ], - "Missing element multipliers" + "Missing element multipliers", ), - ] + ], ) def test_multiply_parser_with_multipliers_incorrect_headers( multipliers_table: List[List[Any]], expected_message: str @@ -167,7 +164,7 @@ def test_multiply_parser_with_multipliers_incorrect_headers( "name": "testname", "input_variable": "input", "output_variable": "output", - "multipliers_table": multipliers_table + "multipliers_table": multipliers_table, } ) logger = Mock(ILogger) diff --git a/tests/data/parsers/test_parser_response_curve_rule.py b/tests/data/parsers/test_parser_response_curve_rule.py index 76e50a21..234ad6b6 100644 --- a/tests/data/parsers/test_parser_response_curve_rule.py +++ b/tests/data/parsers/test_parser_response_curve_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -24,11 +24,11 @@ def _get_example_response_curve_rule_dict(): "description": "description", "input_variable": "input", "response_table": [ - ["input", "output"], - [1, 3], - [2, 2], - [3, 0], - ], + ["input", "output"], + [1, 3], + [2, 2], + [3, 0], + ], "output_variable": "outputvar", } ) @@ -101,11 +101,11 @@ def test_parse_input_values_type(): "description": "description", "input_variable": "input", "response_table": [ - ["input", "output"], - ["a", 3], - ["b", 2], - [2, 0], - ], + ["input", "output"], + ["a", 3], + ["b", 2], + [2, 0], + ], "output_variable": "output", } ) @@ -173,11 +173,11 @@ def test_parse_response_table_columns(): "description": "description", "input_variable": "input", "response_table": [ - ["input", "output", "extra"], - [1, 4, 7], - [2, 5, 8], - [3, 6, 9], - ], + ["input", "output", "extra"], + [1, 4, 7], + [2, 5, 8], + [3, 6, 9], + ], "output_variable": "output", } ) @@ -191,7 +191,5 @@ def test_parse_response_table_columns(): exception_raised = exc_info.value # Assert - expected_message = ( - "ERROR: response table should have exactly 2 columns" - ) + expected_message = "ERROR: response table should have exactly 2 columns" assert exception_raised.args[0] == expected_message diff --git a/tests/data/parsers/test_parser_rolling_statistics_rule.py b/tests/data/parsers/test_parser_rolling_statistics_rule.py index 2d33a417..df17ef5a 100644 --- a/tests/data/parsers/test_parser_rolling_statistics_rule.py +++ b/tests/data/parsers/test_parser_rolling_statistics_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_step_function_rule.py b/tests/data/parsers/test_parser_step_function_rule.py index 866102ff..cc462d15 100644 --- a/tests/data/parsers/test_parser_step_function_rule.py +++ b/tests/data/parsers/test_parser_step_function_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_parser_time_aggregation_rule.py b/tests/data/parsers/test_parser_time_aggregation_rule.py index d84a88cd..41ab2112 100644 --- a/tests/data/parsers/test_parser_time_aggregation_rule.py +++ b/tests/data/parsers/test_parser_time_aggregation_rule.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at diff --git a/tests/data/parsers/test_validation_utils.py b/tests/data/parsers/test_validation_utils.py index 2208073a..424a9d45 100644 --- a/tests/data/parsers/test_validation_utils.py +++ b/tests/data/parsers/test_validation_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -16,7 +16,7 @@ validate_all_instances_number, validate_start_before_end, validate_table_with_input, - validate_type_date + validate_type_date, ) @@ -155,11 +155,7 @@ def test_validate_table_with_input_correct(): """Test if all headers of table matches the list of input variable names""" # Arrange - test_table: Dict[str, Any] = { - "a": 1, - "b": 2, - "output": 3 - } + test_table: Dict[str, Any] = {"a": 1, "b": 2, "output": 3} test_inputs: List[str] = ["a", "b"] # Assert @@ -170,11 +166,7 @@ def test_validate_table_with_input_incorrect(): """Test if all headers of table matches the list of input variable names""" # Arrange - test_table: Dict[str, Any] = { - "a": 1, - "b": 2, - "output": 3 - } + test_table: Dict[str, Any] = {"a": 1, "b": 2, "output": 3} test_inputs: List[str] = ["a", "c"] headers = list(test_table.keys()) difference = list(set(headers) - set(test_inputs)) @@ -197,11 +189,7 @@ def test_validate_table_with_input_incorrect_output(): """Test if all headers of table matches the list of input variable names""" # Arrange - test_table: Dict[str, Any] = { - "a": 1, - "b": 2, - "out": 3 - } + test_table: Dict[str, Any] = {"a": 1, "b": 2, "out": 3} test_inputs: List[str] = ["a", "b"] # Act @@ -211,5 +199,6 @@ def test_validate_table_with_input_incorrect_output(): exception_raised = exc_info.value # Assert - assert exception_raised.args[0] == "Define an output column with the header 'output'." - + assert ( + exception_raised.args[0] == "Define an output column with the header 'output'." + ) diff --git a/tests/data/test_dictionary_utils.py b/tests/data/test_dictionary_utils.py index 1dbce1ea..c210260e 100644 --- a/tests/data/test_dictionary_utils.py +++ b/tests/data/test_dictionary_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -117,7 +117,11 @@ def test_table_lentgh_all_rows(): """Test if all rows have the same lenght.""" # Arrange - test_list: List = [["header1", "header2", "header1"], ["val1", "val2", "val4"], ["val1", "val2"]] + test_list: List = [ + ["header1", "header2", "header1"], + ["val1", "val2", "val4"], + ["val1", "val2"], + ] # Act with pytest.raises(ValueError) as exc_info: diff --git a/tests/testing_utils.py b/tests/testing_utils.py index ee132085..12fd398a 100644 --- a/tests/testing_utils.py +++ b/tests/testing_utils.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at @@ -14,8 +14,7 @@ from pytest import LogCaptureFixture -def find_log_message_by_level( - captured_log: LogCaptureFixture, level: str) -> LogRecord: +def find_log_message_by_level(captured_log: LogCaptureFixture, level: str) -> LogRecord: """Finds the correct record from the captured_log using the provided level Only one message is expected to be found @@ -29,8 +28,7 @@ def find_log_message_by_level( LogRecord: found record for the provided log level """ - records = list( - filter(lambda r: r.levelname == level, captured_log.records)) + records = list(filter(lambda r: r.levelname == level, captured_log.records)) # expect only one message for the provided level assert len(records) == 1 @@ -44,5 +42,5 @@ def get_test_data_path() -> str: Returns: str: path to the default test data folder """ - test_info: str = getenv('PYTEST_CURRENT_TEST', "") + test_info: str = getenv("PYTEST_CURRENT_TEST", "") return test_info.split(".py::")[0] + "_data" diff --git a/tests_acceptance/test_main.py b/tests_acceptance/test_main.py index 9a2ef0fb..46b05288 100644 --- a/tests_acceptance/test_main.py +++ b/tests_acceptance/test_main.py @@ -1,5 +1,5 @@ # This file is part of D-EcoImpact -# Copyright (C) 2022-2023 Stichting Deltares +# Copyright (C) 2022-2024 Stichting Deltares # This program is free software distributed under the # GNU Affero General Public License version 3.0 # A copy of the GNU Affero General Public License can be found at From 244516b187e2aae9081703a2566a86641906fc3e Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 12:29:19 +0200 Subject: [PATCH 58/71] Update model_builder.py --- decoimpact/business/workflow/model_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index 28a86ab2..4ece1f23 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -93,7 +93,7 @@ def _set_default_fields(rule_data: IRuleData, rule: RuleBase): @staticmethod def _create_rule(rule_data: IRuleData) -> IRule: - # TODO: from python >3.10 we can use match/case, better solution + # todo: from python >3.10 we can use match/case, better solution # until then disable pylint. # pylint: disable=too-many-branches if isinstance(rule_data, IMultiplyRuleData): From 795cacfcff736c3204583dcaaf9db1f86bf9b613 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 12:33:06 +0200 Subject: [PATCH 59/71] Update model_builder.py --- decoimpact/business/workflow/model_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/business/workflow/model_builder.py b/decoimpact/business/workflow/model_builder.py index 4ece1f23..0c039fdc 100644 --- a/decoimpact/business/workflow/model_builder.py +++ b/decoimpact/business/workflow/model_builder.py @@ -93,7 +93,7 @@ def _set_default_fields(rule_data: IRuleData, rule: RuleBase): @staticmethod def _create_rule(rule_data: IRuleData) -> IRule: - # todo: from python >3.10 we can use match/case, better solution + # from python >3.10 we can use match/case, better solution # until then disable pylint. # pylint: disable=too-many-branches if isinstance(rule_data, IMultiplyRuleData): From f084d2ec0eab1152a2be152dc63b6e5845badf2a Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 15:01:50 +0200 Subject: [PATCH 60/71] added documentation + extra example test --- .../entities/rules/depth_average_rule.py | 5 +- .../data/entities/depth_average_rule_data.py | 4 +- docs/assets/images/3_depth_average.png | Bin 0 -> 24104 bytes docs/assets/images/depth average.png | Bin 0 -> 64613 bytes docs/manual/input.md | 121 ++++++++++++++---- .../entities/rules/test_depth_average_rule.py | 42 +++--- 6 files changed, 116 insertions(+), 56 deletions(-) create mode 100644 docs/assets/images/3_depth_average.png create mode 100644 docs/assets/images/depth average.png diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index a8cc6700..5ab28f2f 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -28,6 +28,7 @@ def execute( self, value_arrays: Dict[str, _xr.DataArray], logger: ILogger ) -> _xr.DataArray: """Calculate depth average of assumed z-layers. + Args: value_array (DataArray): Values to multiply @@ -73,7 +74,7 @@ def execute( bed_level_values < depths_interfaces_broadcasted, bed_level_values ) - # Make a similiar correction for the waterlevels (first broadcast to match + # Make a similar correction for the waterlevels (first broadcast to match # dimensions and then replace all values higher than waterlevel with # waterlevel) corrected_depth_bed = corrected_depth_bed.broadcast_like(water_level_values) @@ -85,7 +86,7 @@ def execute( layer_heights = corrected_depth_bed.diff(dim=dim_interfaces_name) layer_heights = layer_heights.rename({dim_interfaces_name: dim_layer_name}) - # Use the nan filtering of the variables to set the correct depth per column + # Use the NaN filtering of the variables to set the correct depth per column layer_heights = layer_heights.where(variables.notnull()) # Calculate depth average using relative value diff --git a/decoimpact/data/entities/depth_average_rule_data.py b/decoimpact/data/entities/depth_average_rule_data.py index 760c8828..99afa504 100644 --- a/decoimpact/data/entities/depth_average_rule_data.py +++ b/decoimpact/data/entities/depth_average_rule_data.py @@ -18,7 +18,7 @@ class DepthAverageRuleData(IDepthAverageRuleData, RuleData): - """Class for storing data related to formula rule""" + """Class for storing data related to depth average rule""" def __init__( self, @@ -30,5 +30,5 @@ def __init__( @property def input_variables(self) -> List[str]: - """List with input variable and the standard depth name""" + """List with input variables""" return self._input_variables diff --git a/docs/assets/images/3_depth_average.png b/docs/assets/images/3_depth_average.png new file mode 100644 index 0000000000000000000000000000000000000000..5f700c4cb427040326efbceae15786b8c326e0d6 GIT binary patch literal 24104 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/depth average.png b/docs/assets/images/depth average.png new file mode 100644 index 0000000000000000000000000000000000000000..bafead8c947b889a2772650f2b4e822fbdd3ae34 GIT binary patch literal 64613 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

Q&7{xDQo}VdHI0@T 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 z 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 QhklZkR*=enVCen-0P)8H@c;k- literal 0 HcmV?d00001 diff --git a/docs/manual/input.md b/docs/manual/input.md index 0888d6ee..d33deab3 100644 --- a/docs/manual/input.md +++ b/docs/manual/input.md @@ -1,3 +1,16 @@ +--- +title: Just say hello! +author: My Friend +header-includes: | + \usepackage{tikz,pgfplots} + \usepackage{fancyhdr} + \pagestyle{fancy} + \fancyhead[CO,CE]{This is fancy} + \fancyfoot[CO,CE]{So is this} + \fancyfoot[LE,RO]{\thepage} +abstract: This is a pandoc test with Markdown + inline LaTeX +--- + # Structure of the model input file and functionality D-Eco Impact is steered through a YAML input file. This input file informs the model which data to use, what ecological knowledge rules to apply and where to write the output data. @@ -660,34 +673,86 @@ FORMAT The depth average rule allows for an averaging over depth using the weighted values according to a mesh with z-layers. The file must include a variable called 'mesh2d_interface_z' over which the the input variable will be averaged. The input_variable will be a 2D/3D with or without time axis and the output_variable has the same dimensions excluding the dimension for the depth, as it will be represented as one averaged value per cell. -An explanation of how the depth rule works is shown in the table below: - - - -Complex example calculated output by hand -depths heights nInterfaces: 5 -0 1 nLayers: 4 --1 2 nFaces: 4 --3 3 time: 2 --6 4 --10 - -valuables -1 1 1 1 1 1 1 1 -2 2 2 2 2 2 2 2 -3 3 3 3 3 3 3 3 -4 4 4 4 4 4 4 4 -water_level -0 0 -1.5 -1.5 0 -6 5 -5 -bed_level --10 -5 -10 -5 -output -3 2.2 3.294117647 2.571428571 3 0 3 0 - -In the example shown above the stripe indicates the time period covered (4 timesteps in this case) and with i the location where the result of the statistic over that period is written. Hence, the first three timesteps in this example will not contain any values. This is repeated until the time series has been covered. - -``` -#EXAMPLE : Determine a rolling statistic over salinity levels +An explanation of how the depth rule works is shown with the example below. + +![Example depth average rule](../assets/images/3_depth_average.png "An example of a very simplified grid with Z-layers. This model has 6 faces, 4 layers and 2 timesteps.") + +The image shows a simplified model with the following dimensions: +- mesh2d_nFaces = 6 (number of faces) +- mesh2d_nLayers = 4 (number of layers in the z direction) +- mesh2d_nInterfaces = 5 (number of interfaces that define the depth) +- time = 2 + +Belows the variables belonging to this example. + +$$ +mesh2d\_interface\_z_{(mesh2d\_nInterfaces)} = +\begin{bmatrix} +\ 0 \\ +\ -2 \\ +\ -5 \\ +\ -6.5 \\ +\ -8.5 \\ +\end{bmatrix} +$$ +$$ +input\_variable _{(time, nFaces, nLayers)}= +\begin{bmatrix} + \begin{bmatrix} + 1 & 1 & 1 & 1 & 1 & 1 \\ + 2 & 2 & 2 & 2 & 2 & 2 \\ + 3 & 3 & 3 & 3 & 3 & 3 \\ + 4 & 4 & 4 & 4 & 4 & 4 + \end{bmatrix} + \begin{bmatrix} + 1 & 1 & NaN & 1 & 1 & NaN \\ + 2 & 2 & 2 & 2 & 2 & 2 \\ + 3 & 3 & 3 & 3 & 3 & 3 \\ + 4 & 4 & 4 & 4 & 4 & 4 + \end{bmatrix} +\end{bmatrix} + +$$ +$$ +mesh2d\_s1 _{(mesh2d\_nFaces, time)} = +\begin{bmatrix} + -1.4 & -1.4 \\ + -1.6 & -1.6 \\ + -1.6 & -2 \\ + -1.4 & -1.4 \\ + -1.6 & -1.6 \\ + -1.6 & -2 +\end{bmatrix} + +$$ +$$ +mesh2d\_flowelem\_bl _{(mesh2d\_nFaces)}= +\begin{bmatrix} + -7.8 \\ -7.3 \\ -7.9 \\-8.5 \\ -7 \\ -7.9 \\ +\end{bmatrix} +$$ + +This example should result in the following output_variable. This example is added to the unit test as well + +$$ +input\_variable _{(nFaces, time)}= +\begin{bmatrix} + 2.546875 & 2.546875 \\ + 2.473684 & 2.473684 \\ + 2.619048 & 2.728814 \\ + 2.690141 & 2.690141 \\ + 2.388889 & 2.388889 \\ + 2.619048 & 2.728814 \\ +\end{bmatrix} +$$ + +2 3 1.5 2 + + +Below an example of an input_file for the depth average rule. + +``` +#EXAMPLE : Determine a depth average for over salinity - depth_average_rule: name: test depth average description: Test depth average diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index e51cbf43..9daf5527 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -47,26 +47,6 @@ def test_no_validate_error_with_correct_rule(): # Assert assert isinstance(rule, DepthAverageRule) - # Complex example calculated output by hand - # depths heights nInterfaces: 5 - # 0 1 nLayers: 4 - # -1 2 nFaces: 4 - # -3 3 time: 2 - # -6 4 - # -10 - # - # valuables - # 1 1 1 1 1 1 1 1 - # 2 2 2 2 2 2 2 2 - # 3 3 3 3 3 3 3 3 - # 4 4 4 4 4 4 4 4 - # water_level - # 0 0 -1.5 -1.5 0 -6 5 -5 - # bed_level - # -10 -5 -10 -5 - # output - # 3 2.2 3.294117647 2.571428571 3 0 3 0 - @pytest.mark.parametrize( "data_variable, mesh2d_interface_z, mesh2d_flowelem_bl, mesh2d_s1, result_data", @@ -87,14 +67,29 @@ def test_no_validate_error_with_correct_rule(): [[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]] ), ], + # Added this next test as to match the example in documentation + [ + _np.tile(_np.arange(4, 0, -1), (2, 6, 1)), + _np.array([-8.5, -6.5, -5, -2, 0]), + _np.array([-7.8, -7.3, -7.9, -8.5, -7, -7.9]), + _np.array( + [[-1.4, -1.6, -1.6, -1.4, -1.6, -1.6], [-1.4, -1.6, -2, -1.4, -1.6, -2]] + ), + _np.array( + [ + [2.546875, 2.473684, 2.619048, 2.690141, 2.388889, 2.619048], + [2.546875, 2.473684, 2.728814, 2.690141, 2.388889, 2.728814], + ] + ), + ], ], ) def test_depth_average_rule( - data_variable: List[List[List[float]]], + data_variable: List[float], mesh2d_interface_z: List[float], mesh2d_flowelem_bl: List[float], mesh2d_s1: List[List[float]], - result_data: List[List[List[float]]], + result_data: List[float], ): """Make sure the calculation of the depth average is correct. Including differing water and bed levels.""" @@ -132,8 +127,7 @@ def test_depth_average_rule( def test_dimension_error(): - """Make sure the calculation of the depth average is correct. Including - differing water and bed levels.""" + """If the number of interfaces > number of layers + 1. Give an error, no calculation is possible""" logger = Mock(ILogger) rule = DepthAverageRule( name="test", From 057be2aff39a18cb8d83f49ada67246e5d4ad0d0 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 15:22:09 +0200 Subject: [PATCH 61/71] making generic variable list --- .../business/entities/rules/depth_average_rule.py | 11 ++++++++--- decoimpact/crosscutting/delft3d_specific_data.py | 3 +++ decoimpact/data/parsers/parser_depth_average_rule.py | 11 ++++++++--- .../entities/rules/test_depth_average_rule.py | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 decoimpact/crosscutting/delft3d_specific_data.py diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 5ab28f2f..c16676fd 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -19,6 +19,11 @@ ) from decoimpact.business.entities.rules.rule_base import RuleBase from decoimpact.crosscutting.i_logger import ILogger +from decoimpact.crosscutting.delft3d_specific_data import ( + interfaces_name, + bed_level_name, + water_level_name, +) class DepthAverageRule(RuleBase, IMultiArrayBasedRule): @@ -42,9 +47,9 @@ def execute( variables = next(iter(value_arrays.values())) # depths interfaces = borders of the layers in terms of depth - depths_interfaces = value_arrays["mesh2d_interface_z"] - water_level_values = value_arrays["mesh2d_s1"] - bed_level_values = value_arrays["mesh2d_flowelem_bl"] + depths_interfaces = value_arrays[interfaces_name] + water_level_values = value_arrays[water_level_name] + bed_level_values = value_arrays[bed_level_name] # Get the dimension names for the interfaces and for the layers dim_interfaces_name = list(depths_interfaces.dims)[0] diff --git a/decoimpact/crosscutting/delft3d_specific_data.py b/decoimpact/crosscutting/delft3d_specific_data.py new file mode 100644 index 00000000..3bcb328b --- /dev/null +++ b/decoimpact/crosscutting/delft3d_specific_data.py @@ -0,0 +1,3 @@ +interfaces_name = "mesh2d_interface_z" +bed_level_name = "mesh2d_flowelem_bl" +water_level_name = "mesh2d_s1" diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 1ed20ee6..56bf6ad6 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -17,6 +17,11 @@ from decoimpact.data.dictionary_utils import get_dict_element from decoimpact.data.entities.depth_average_rule_data import DepthAverageRuleData from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase +from decoimpact.crosscutting.delft3d_specific_data import ( + interfaces_name, + bed_level_name, + water_level_name, +) class ParserDepthAverageRule(IParserRuleBase): @@ -38,9 +43,9 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: name: str = get_dict_element("name", dictionary) input_variable_names: List[str] = [ get_dict_element("input_variable", dictionary), - "mesh2d_interface_z", - "mesh2d_s1", - "mesh2d_flowelem_bl", + interfaces_name, + water_level_name, + bed_level_name, ] output_variable_name: str = get_dict_element("output_variable", dictionary) description: str = get_dict_element("description", dictionary, False) or "" diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 9daf5527..f215af5a 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -88,7 +88,7 @@ def test_depth_average_rule( data_variable: List[float], mesh2d_interface_z: List[float], mesh2d_flowelem_bl: List[float], - mesh2d_s1: List[List[float]], + mesh2d_s1: List[float], result_data: List[float], ): """Make sure the calculation of the depth average is correct. Including From 070ab523f480f9a6ceff92b681eb9229da375aa6 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 15:31:27 +0200 Subject: [PATCH 62/71] pylint.... --- decoimpact/crosscutting/delft3d_specific_data.py | 16 +++++++++++++--- .../entities/rules/test_depth_average_rule.py | 1 - 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/decoimpact/crosscutting/delft3d_specific_data.py b/decoimpact/crosscutting/delft3d_specific_data.py index 3bcb328b..3295a8ed 100644 --- a/decoimpact/crosscutting/delft3d_specific_data.py +++ b/decoimpact/crosscutting/delft3d_specific_data.py @@ -1,3 +1,13 @@ -interfaces_name = "mesh2d_interface_z" -bed_level_name = "mesh2d_flowelem_bl" -water_level_name = "mesh2d_s1" +# This file is part of D-EcoImpact +# Copyright (C) 2022-2024 Stichting Deltares +# This program is free software distributed under the +# GNU Affero General Public License version 3.0 +# A copy of the GNU Affero General Public License can be found at +# https://github.com/Deltares/D-EcoImpact/blob/main/LICENSE.md +""" +Configuration file for hardcoded delft3d variable names +""" + +INTERFACES_NAME = "mesh2d_interface_z" +BED_LEVEL_NAME = "mesh2d_flowelem_bl" +WATER_LEVEL_NAME = "mesh2d_s1" diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index f215af5a..2048cc5a 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -38,7 +38,6 @@ def test_no_validate_error_with_correct_rule(): """Test a correct depth average rule validates without error""" # Arrange - logger = Mock(ILogger) rule = DepthAverageRule( "test_rule_name", ["foo", "hello"], From ded9a475500de0d7f0fdb974e8483db47ddb70ec Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Tue, 2 Jul 2024 15:37:36 +0200 Subject: [PATCH 63/71] forgot to rename the used variables --- .../business/entities/rules/depth_average_rule.py | 12 ++++++------ decoimpact/data/parsers/parser_depth_average_rule.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index c16676fd..46067fb4 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -20,9 +20,9 @@ from decoimpact.business.entities.rules.rule_base import RuleBase from decoimpact.crosscutting.i_logger import ILogger from decoimpact.crosscutting.delft3d_specific_data import ( - interfaces_name, - bed_level_name, - water_level_name, + INTERFACES_NAME, + BED_LEVEL_NAME, + WATER_LEVEL_NAME, ) @@ -47,9 +47,9 @@ def execute( variables = next(iter(value_arrays.values())) # depths interfaces = borders of the layers in terms of depth - depths_interfaces = value_arrays[interfaces_name] - water_level_values = value_arrays[water_level_name] - bed_level_values = value_arrays[bed_level_name] + depths_interfaces = value_arrays[INTERFACES_NAME] + water_level_values = value_arrays[WATER_LEVEL_NAME] + bed_level_values = value_arrays[BED_LEVEL_NAME] # Get the dimension names for the interfaces and for the layers dim_interfaces_name = list(depths_interfaces.dims)[0] diff --git a/decoimpact/data/parsers/parser_depth_average_rule.py b/decoimpact/data/parsers/parser_depth_average_rule.py index 56bf6ad6..8f7960b3 100644 --- a/decoimpact/data/parsers/parser_depth_average_rule.py +++ b/decoimpact/data/parsers/parser_depth_average_rule.py @@ -18,9 +18,9 @@ from decoimpact.data.entities.depth_average_rule_data import DepthAverageRuleData from decoimpact.data.parsers.i_parser_rule_base import IParserRuleBase from decoimpact.crosscutting.delft3d_specific_data import ( - interfaces_name, - bed_level_name, - water_level_name, + INTERFACES_NAME, + BED_LEVEL_NAME, + WATER_LEVEL_NAME, ) @@ -43,9 +43,9 @@ def parse_dict(self, dictionary: Dict[str, Any], logger: ILogger) -> IRuleData: name: str = get_dict_element("name", dictionary) input_variable_names: List[str] = [ get_dict_element("input_variable", dictionary), - interfaces_name, - water_level_name, - bed_level_name, + INTERFACES_NAME, + WATER_LEVEL_NAME, + BED_LEVEL_NAME, ] output_variable_name: str = get_dict_element("output_variable", dictionary) description: str = get_dict_element("description", dictionary, False) or "" From 14ed93b958ea993389d8f4784b72c3b913dcebdb Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 3 Jul 2024 10:17:41 +0200 Subject: [PATCH 64/71] improve readability of the documentation --- docs/manual/input.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/manual/input.md b/docs/manual/input.md index d33deab3..b2aac68a 100644 --- a/docs/manual/input.md +++ b/docs/manual/input.md @@ -671,11 +671,11 @@ FORMAT output_variable: ``` -The depth average rule allows for an averaging over depth using the weighted values according to a mesh with z-layers. The file must include a variable called 'mesh2d_interface_z' over which the the input variable will be averaged. The input_variable will be a 2D/3D with or without time axis and the output_variable has the same dimensions excluding the dimension for the depth, as it will be represented as one averaged value per cell. +The depth average rule allows for an averaging over depth using the weighted values according to a mesh with z-layers. The input file must include a variable called 'mesh2d_interface_z' over which the the input variable will be averaged. The input_variable will be a 2D/3D variable, with or without time axis. The output_variable has the same dimensions, excluding the dimension for the depth, as it will be represented as one averaged value per cell. -An explanation of how the depth rule works is shown with the example below. +An explanation of how the depth rule works is shown in the example below. -![Example depth average rule](../assets/images/3_depth_average.png "An example of a very simplified grid with Z-layers. This model has 6 faces, 4 layers and 2 timesteps.") +![Example depth average rule](../assets/images/3_depth_average.png "An example of a simplified grid with Z-layers. This model has 6 faces, 4 layers and 2 timesteps.") The image shows a simplified model with the following dimensions: - mesh2d_nFaces = 6 (number of faces) @@ -683,7 +683,7 @@ The image shows a simplified model with the following dimensions: - mesh2d_nInterfaces = 5 (number of interfaces that define the depth) - time = 2 -Belows the variables belonging to this example. +Below are the variables belonging to this example: $$ mesh2d\_interface\_z_{(mesh2d\_nInterfaces)} = @@ -732,7 +732,7 @@ mesh2d\_flowelem\_bl _{(mesh2d\_nFaces)}= \end{bmatrix} $$ -This example should result in the following output_variable. This example is added to the unit test as well +This example results in the following output_variable. $$ input\_variable _{(nFaces, time)}= @@ -746,10 +746,8 @@ input\_variable _{(nFaces, time)}= \end{bmatrix} $$ -2 3 1.5 2 - -Below an example of an input_file for the depth average rule. +Below is an example of an input_file for the depth average rule: ``` #EXAMPLE : Determine a depth average for over salinity From a22e324129aac06764061f3f18da88d308cf9fb2 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 3 Jul 2024 10:20:10 +0200 Subject: [PATCH 65/71] add space --- decoimpact/business/entities/rule_based_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index 1092907c..0e6af120 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -209,7 +209,7 @@ def _get_direct_rule_inputs(self, rule_names) -> Dict[str, List[str]]: input datasets. Returns: - Dict[str, List[str]] + Dict[str, List[str]] """ rule_input_vars = [rule.input_variable_names for rule in self._rules] rule_output_vars = [rule.output_variable_name for rule in self._rules] From 8515b698ad30b722817c7cca5df2cef9013266e0 Mon Sep 17 00:00:00 2001 From: mKlapwijk Date: Wed, 3 Jul 2024 11:06:07 +0200 Subject: [PATCH 66/71] remove pandoc test --- docs/manual/input.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/docs/manual/input.md b/docs/manual/input.md index b2aac68a..88aa5e30 100644 --- a/docs/manual/input.md +++ b/docs/manual/input.md @@ -1,16 +1,3 @@ ---- -title: Just say hello! -author: My Friend -header-includes: | - \usepackage{tikz,pgfplots} - \usepackage{fancyhdr} - \pagestyle{fancy} - \fancyhead[CO,CE]{This is fancy} - \fancyfoot[CO,CE]{So is this} - \fancyfoot[LE,RO]{\thepage} -abstract: This is a pandoc test with Markdown + inline LaTeX ---- - # Structure of the model input file and functionality D-Eco Impact is steered through a YAML input file. This input file informs the model which data to use, what ecological knowledge rules to apply and where to write the output data. From f44f6155600242e84dfd76011a40759492ec4ad1 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 4 Jul 2024 23:12:00 +0200 Subject: [PATCH 67/71] update manual and make latex code visible --- docs/javascripts/katex.js | 10 ++++ docs/manual/input.md | 118 +++++++++++++++++++------------------- mkdocs.yml | 10 ++++ 3 files changed, 79 insertions(+), 59 deletions(-) create mode 100644 docs/javascripts/katex.js diff --git a/docs/javascripts/katex.js b/docs/javascripts/katex.js new file mode 100644 index 00000000..a9417bf6 --- /dev/null +++ b/docs/javascripts/katex.js @@ -0,0 +1,10 @@ +document$.subscribe(({ body }) => { + renderMathInElement(body, { + delimiters: [ + { left: "$$", right: "$$", display: true }, + { left: "$", right: "$", display: false }, + { left: "\\(", right: "\\)", display: false }, + { left: "\\[", right: "\\]", display: true } + ], + }) +}) \ No newline at end of file diff --git a/docs/manual/input.md b/docs/manual/input.md index 88aa5e30..88e12c8e 100644 --- a/docs/manual/input.md +++ b/docs/manual/input.md @@ -602,51 +602,6 @@ The rule needs to be applied to an existing 2D/3D variables with or without time ![Result Axis filter rule](../assets/images/3_result_axis_filter.png "Salinity(in PSU, left-hand) is subset so that only face cell 13 is left (channel entrance) reducing the data to a 2D salinity plot for multiple time steps (in PSU, right-hand) while maintaining in this case the time dimension and layer dimension (face dimension is selected upon in this example and is therefore omitted in the results). ") - -##Including data from another YAML file - -It is possible to include data in the YAML file that originates from another file. At the moment this is only applicable to another YAML file. This can be useful for storing large classification_rule tables in a separate file (for a better overview of the work file), but this functionality is not limited to that specific rule. - -Here is the original rule: -``` -#EXAMPLE : Original -# This is a simplified example, only top layer of flow velocity and chloride was used and year statistics - - - classification_rule: - name: classification for aquatic plants - description: classification for aquatic plants based on water depth, flow velocity and chloride. - criteria_table: - - ["output", "MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] - - [ 1 , "<0.10" , "-" , "-"] # too dry - - [ 2 , ">4.0" , "-" , "-"] # too deep - - [ 3 , "-" , "-" , ">400"] # too salty - - [ 4 , "-" , ">1.5" , "-"] # too fast flowing - - [ 5 , "0.10:4.0" , "0.0:1.5" , "0:400"] # perfect for aquatic plants -``` - -And this is the rule while making using of an inclusion from another file: -``` -#EXAMPLE : Original -# This is a simplified example, only top layer of flow velocity and chloride was used and year statistics - - - classification_rule: - name: classification for aquatic plants - description: classification for aquatic plants based on water depth, flow velocity and chloride. - criteria_table: !include tables/aquatic_plant_criteria.yaml - input_variables: ["MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] - output_variable: aquatic_plant_classes -``` -And this is the included file from tables/aquatic_plant_criteria.yaml: -``` - - ["output", "MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] - - [ 1 , "<0.10" , "-" , "-"] # too dry - - [ 2 , ">4.0" , "-" , "-"] # too deep - - [ 3 , "-" , "-" , ">400"] # too salty - - [ 4 , "-" , ">1.5" , "-"] # too fast flowing - - [ 5 , "0.10:4.0" , "0.0:1.5" , "0:400"] # perfect for aquatic plants -``` - - ### Depth average rule ``` @@ -682,8 +637,9 @@ mesh2d\_interface\_z_{(mesh2d\_nInterfaces)} = \ -8.5 \\ \end{bmatrix} $$ + $$ -input\_variable _{(time, nFaces, nLayers)}= +salinity _{(time, nFaces, nLayers)}= \begin{bmatrix} \begin{bmatrix} 1 & 1 & 1 & 1 & 1 & 1 \\ @@ -692,30 +648,30 @@ input\_variable _{(time, nFaces, nLayers)}= 4 & 4 & 4 & 4 & 4 & 4 \end{bmatrix} \begin{bmatrix} - 1 & 1 & NaN & 1 & 1 & NaN \\ + 1 & 1 & NaN & 1 & 1 & 1 \\ 2 & 2 & 2 & 2 & 2 & 2 \\ 3 & 3 & 3 & 3 & 3 & 3 \\ 4 & 4 & 4 & 4 & 4 & 4 \end{bmatrix} \end{bmatrix} - $$ + $$ mesh2d\_s1 _{(mesh2d\_nFaces, time)} = \begin{bmatrix} - -1.4 & -1.4 \\ + -1.4 & 0 \\ -1.6 & -1.6 \\ - -1.6 & -2 \\ - -1.4 & -1.4 \\ + -3 & -3 \\ + -1.4 & 3 \\ -1.6 & -1.6 \\ - -1.6 & -2 + -1.6 & -1.6 \end{bmatrix} - $$ + $$ mesh2d\_flowelem\_bl _{(mesh2d\_nFaces)}= \begin{bmatrix} - -7.8 \\ -7.3 \\ -7.9 \\-8.5 \\ -7 \\ -7.9 \\ + -7.8 \\ -7.3 \\ -5.2 \\-9.5 \\ -7 \\ -1.6 \\ \end{bmatrix} $$ @@ -724,12 +680,12 @@ This example results in the following output_variable. $$ input\_variable _{(nFaces, time)}= \begin{bmatrix} - 2.546875 & 2.546875 \\ + 2.546875 & 2.269231 \\ 2.473684 & 2.473684 \\ - 2.619048 & 2.728814 \\ - 2.690141 & 2.690141 \\ + 2.090909 & 2.090909 \\ + 2.851852 & 2.2 \\ 2.388889 & 2.388889 \\ - 2.619048 & 2.728814 \\ + NaN & NaN \\ \end{bmatrix} $$ @@ -743,4 +699,48 @@ Below is an example of an input_file for the depth average rule: description: Test depth average input_variable: salinity output_variable: average_salinity -``` \ No newline at end of file +``` + + +##Including data from another YAML file + +It is possible to include data in the YAML file that originates from another file. At the moment this is only applicable to another YAML file. This can be useful for storing large classification_rule tables in a separate file (for a better overview of the work file), but this functionality is not limited to that specific rule. + +Here is the original rule: +``` +#EXAMPLE : Original +# This is a simplified example, only top layer of flow velocity and chloride was used and year statistics + + - classification_rule: + name: classification for aquatic plants + description: classification for aquatic plants based on water depth, flow velocity and chloride. + criteria_table: + - ["output", "MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] + - [ 1 , "<0.10" , "-" , "-"] # too dry + - [ 2 , ">4.0" , "-" , "-"] # too deep + - [ 3 , "-" , "-" , ">400"] # too salty + - [ 4 , "-" , ">1.5" , "-"] # too fast flowing + - [ 5 , "0.10:4.0" , "0.0:1.5" , "0:400"] # perfect for aquatic plants +``` + +And this is the rule while making using of an inclusion from another file: +``` +#EXAMPLE : Original +# This is a simplified example, only top layer of flow velocity and chloride was used and year statistics + + - classification_rule: + name: classification for aquatic plants + description: classification for aquatic plants based on water depth, flow velocity and chloride. + criteria_table: !include tables/aquatic_plant_criteria.yaml + input_variables: ["MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] + output_variable: aquatic_plant_classes +``` +And this is the included file from tables/aquatic_plant_criteria.yaml: +``` + - ["output", "MIN_water_depth_mNAP", "MAX_flow_velocity", "MAX_chloride"] + - [ 1 , "<0.10" , "-" , "-"] # too dry + - [ 2 , ">4.0" , "-" , "-"] # too deep + - [ 3 , "-" , "-" , ">400"] # too salty + - [ 4 , "-" , ">1.5" , "-"] # too fast flowing + - [ 5 , "0.10:4.0" , "0.0:1.5" , "0:400"] # perfect for aquatic plants +``` diff --git a/mkdocs.yml b/mkdocs.yml index dea62bc4..7b0f986d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -43,6 +43,8 @@ plugins: markdown_extensions: - attr_list + - pymdownx.arithmatex: + generic: true repo_url: https://github.com/Deltares/D-EcoImpact repo_name: Deltares/D-EcoImpact @@ -55,6 +57,14 @@ extra: - icon: fontawesome/brands/linkedin link: https://www.linkedin.com/company/deltares/ +extra_javascript: + - javascripts/katex.js + - https://unpkg.com/katex@0/dist/katex.min.js + - https://unpkg.com/katex@0/dist/contrib/auto-render.min.js + +extra_css: + - https://unpkg.com/katex@0/dist/katex.min.css + nav: - Home: "index.md" - Installation: "installation.md" From 43f35559a6f683b2bb012f27751e3ccab9e76987 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 4 Jul 2024 23:12:15 +0200 Subject: [PATCH 68/71] Update 3_depth_average.png --- docs/assets/images/3_depth_average.png | Bin 24104 -> 477926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/images/3_depth_average.png b/docs/assets/images/3_depth_average.png index 5f700c4cb427040326efbceae15786b8c326e0d6..302629fd0ec92918971ae5e229d08bae0c2c4da9 100644 GIT binary patch literal 477926 zcmc$_Wl$VZ*DZ_;8YF0f+u-i*?l8DRaCZX1-QC^Y-95n}xNC3??s6y3`@FaA@9)pI ztEQ%Us;2w&KIiOSd#%;sN(z$5h`5Ll5D>`HQeq$o2&i}n2xuXASnw~-0vvbXFGy#Q zqzFXK6#g;z0AMaGFAM=uAN%Rm2nKwN;2@>t3;}`e^6vw=X-4D@0r62REhen$u7B1I z*GHh1{r<7;X@0QSS`rEnfdU5Ut19^`iSdM)R$KRXaOh(B)>HyqKguet^{|$jA2#)9 z`!^wvKNI`M19f!^ZEVYi7t<*pwOvo zp7X@3>wSl&S^v$Wn-^ggf7vtgnZ^&z-kY;E7Hz?@g z;uZck5>o=DN;hg)r_%h@DqC6v{`-gXSf|g&|M$F>|KH9_`QIp&9v3e9pAjb}&K2zw z&yM~#ENB0JybO{aFE8oK1l_?G6fC{0-!{@;6?^C{j@A9f?~x%c3D&AOR*ZQS%? zHzR79pJ*M|qRh^sC=pAvn&jm^$FA1((6D|!3T*_ZW-ceLPZ@XekNa{WLtnnRo}XBu zKgG%8ijIEhlGpX8BSuL&a+`Kv_KW9Z)cU8*P90A^5UqMu--3pLZ3%cT)xq=Y*7=_q zKc`0^v~Sx9QKk=(6np~FnXjNrysC;es!PsS?Q+_C6Xd-4f51ElDHYtO{#wDt^qB)8MBZJxj}n+-jTUjoLlg9?EdA%-k2kEgxX;vM za%`ucd7PYqfMh8&680@N^>O*{TmH?xj|eRr|At+z_x~h7AsQ|=G}oC~p>3~RQ}a?O zlJr(1^Q%cYC&q|7-6#bvU9tp}C{SFB+V^>g*5RU45Q=dpf7CaEWnW!Py5}oGJoO5h zimtKl1_@Mv1x@_G;KO<}ukXF@veO6u!Sdj~-|VqaLgW;oDCdTYiuKgLwQOlGdb zkwZ4cO(dJ^0y))t-|P6;t|+XrDw(nN>=UuAk*J5316Kryo5Z~?2ee)}C~XcK>2a$_ z1~X~xHhnINzw>^ij{UkK_S4%sEAk|Z12ZI%X>nY;F?{ov?B&nYURYZFE1n5`r=apu zJ%)xg@DKt=m~W32eSfINx%mCttW7WEmsX*}JK7@deEa0JzeW!Y0*t4+zY32@3hd^O z%aU9sgcW4?^ZSTp*mL=tuo(R@pH7!SC!I^n+?A1GI4#p>^(LPS_`TQ=xBZplM0Zn+ z*(whtTcBy3Cs<`1hnLjWb2vSCS)|bo`TNHQrQ-mMV*ff>O8J;?83Bc>018$1z2v#t z_xrv+2!V(8-#e|nZ}cs;Ya#8*b5aq?)Gt*{^s8$x#YKv>i z_KBiP+bvabO2x4oTb@n9z&}bO4W`>^pxq@~kjrDND3GhOame{# z9Zq2fIp4dc8&10Jxt~qR8E)zckBP?Ew*6hyxq2Y-h09c5Gv9XL)@TKnR?H8FbAt;) z^<>}WTHm+Rt4f2nv5D{BzZ>rkML+HmeT1E_weHTVDB9X`yWaYKJos|$1YsbZ$(%z_ zANv>FDa6iKsOe0){EA37`&XmcGHwwQniVX6sID$}9_?s4T<K?OhuF_JwvBCR* zgb$=GgfdZrJ_09j?PY(v2j$`*zDjmRenQ2W)B_i{!)(Q-T+Xf(V@0*p#z1NqqGm%K zx~v=Ja9I64FVv6bv9b~s*our!J)gnuQ&FfgEQLUgEI6?12wl5RcnH;BMcQ5oTxg!%Q)7$C>h;{2091>_WduB^^*Mx@3ev zk7QpBk39um^o|EsIxWx$`VH&ccw_cYFU3|sameD5rf;7qvY4_7UDgIrlE7dM0l&M* z5R{^1U5{CZQm?R}et2c#kwn917jha{6zU;~AD-HKhs$@YrqNDg2j+%x|9cQSVk3 z0eT_u5#;1pwe0fqu7PsHTE^^j)RMq2CGbDA7)|wkphV<@{nrXvI8q~ClY|2QR)+;G zi$~}!r;BUE`RDEl00t>OEfaEgvcoE*PgfY1z^5q7E8GJrn&G7fj?S{|pY5N^F|i4} z>89NG@vd$k3_?}(-)qyD=^8o-D6+FkBJbS|qkU$OQBX3ragNuv-Z_5!_%YFS`_TJA zQ0p;i9XGyzSxEF&*6ebPOPlbc02d|d-070bvAqwMlCsoo^qC8vFjgr}&YC7J5lhj6 zl54!kL z$K;C5q1>JtGnJnj<$0hERcpcF>Z-)ZZufhELQN(Ou*X4eUy*J_7ID4v?{u6)?FkP3 zyMh+B8(^PRl6cQ0R?&EKFqwI^ekicym9oZ@Iho;coa1@XFROozenWfrrS}o$BkYbV zy~|BwjG+HWipgW$aX8%)Dd8M#O(8ZZPzrqanuCx|_sYXN%!-~IEKdp;_+*w;A_l*G zdZPCPrqCY;q?V~nRC~o?WH4^q^b4oMc#?~Tm*1ksbt2(2U*jkM6)45Wmh+~xN&C!! zx;)a`vU!*xnyt?YuWuhdVT}gfSg?f={!(+fv-3-A;lG@z1Av0Ghef|vJ6SD(2;tDm z$T|p#xD@p>+k`f$F}$o8d8~=MlF?x*WF``t>l?ugpt6(m$c$w!Rf%To>%`v@r4t?b z(Wu)cofk^_BqR6W9m-q=z=|wNAqhAQ11 zksQh>*tJ}NRVLce_N8PQ+ktZN3;Ji*s-$P`>)a4IT|re5gXSo?0)H)>Vi*}>!#BhZ zX%A{PB;zI)_TheLz+pv_IftcUqh<6{hU z;xyA;n5=(mpG&OdQ8MNCp-!%!Oz~_+V}zhNOL}&T$VEj+=|%irPfT?zl#~{+;A1~( zh7WDPm?o6Wn-zY!VDW$I7>enSA80NQ-;Svjf07L2ho0+j?rvt<{R~-n$Wx^uJ%1S) zMU`84QY?YFv#r9DH45-6QRQ#o9;+zpNdPE9=ekLWoGV4+9_@OHZ&OO0!Sg}sT0F~R zV|igLOqZ3{3fLG(yt87h*Pi1r^`zRY2f z3DnkSBNbRFV@P?+I<(6{n?sstTx+D?Q3{Q%b`tFOdG_ZZl% z>LNDf>IjKy0k#+qwR(ZQ@5d6aZVQYv#C(Llo4?XJ9~~yROqe-RWi;0`fI=Gbz>Yzw z(&Liu>+IxU~_12GAl-fp#!Ngg(w(q(f(%!ubrfaA$;*Wq_OJ+1$rkve{)a~%^205#*gHtYkG^wAUV2YjMD=~^Go^}7!!wrr!iF#0VvgSA{ zR-zU{+0yk@_?m9q7Mmm=!FvsqNJ{N-*IlR%uyRwkq666F3PP0EyS!=bIuGsEuS2)U zMh=)h%8VTb+P~zP&wO)U=j!Mj_(8;wGBeBp^Z>SRgKK``{VHni&2PaixnvW*773dE zM@64&4A$P-SzLJh-Q$a}9&Du{B^({<-5+b!NhmbnZWo0uT|X4isLB$;Gk_^QDT@Yd zmvcy^yEQ!C&G8E!j~!YJ<^1+?An$%uvo=G8LL%v&_@c$gP`nm@*uHLINCn(W53~J4 zno8YPLYqlqq5WA^TZ)A!mbTIq5rJ_168AJt4Ma?>nPghuM+%Q6M`Ii-{pF`+;EOsJ zBRtj!BHK%aD-yfa`XW+8n5#9>Pw(%W{-H#hK^3X};a_z90%J8JVm5Is&^cVEtc(Lc zOmvkEl$tdx1NO{vrC$9K=Tv9)@pwD+Yj>mVy~y70TYJ-$t$uiVBFoW)7KQM2-LG2f z=qL~%+yeXp1~$n33j^HQqO0>xJaGaKF8CIEzzvFuozsOKX7Dgvv zr&%GL>CyyW$oZuQ<3lQkkJzG&799I30`~LSTkfg_KOkc~SFBB~*oJ4P!&z@|FkB~B zk$^PCiX#O}MU?J9&4Xpa_Lj^nBGShV?=9~i@!!@4@f?nJ#;4gmu^YU4#hX9F)gx;O zMu)ycmNf|6wCsQEC1|{nY6&;jNEX{;__&?3Q`xN^6*Oj-MBitSgCIGe#G`Y)S1n78 zb_RkEQ1|8Se_(80#e8pSS^XfF!em1Et5}|gzmy9Grr)IX4F%efT2k<~*iVj`|hCkFx1T@Jkqvm~Ti>>S6(yLM83;Vz(97 zjn4utP_6N@Kcv(nG(RpS__}<^DvS`E4~U|0Hu#UGiqSsL)7;^XSi+LRI7OR@g#oLa zoxvEB~JN)tZQuq+}3s!+W<$K=`5N=TBT~N>vi!j&j%TUHD5l0=rmEVMg?gK?z znCsZUs)ZAr9fqTD`tahrg2J3M3TbH_AgNHe*x8$xn_HfeT-u5|K+RlY5RrylF~Co4 zFi=#@hO9~)NY!49#gwS3FOkC2I^$Gd=qHy%{%(!FOq!57dv77E_*V{JKF#Y@T(SR* zEH!=J@nO@4@}lRQ1L^)D-4(kpOZv`-vk{?w#}rq`Vc-1=(Ufxyr8D>O=5; zKP(7wTosOQ;I*gBb$dyM;E#}`6`PQ1tt1|8p<@2V4YODG2BlOCaWc6dkIDir=T-x- zsQc~Fbmb?f<<6G#`weg{wwnRh6q(l-QLIx;DwL(=3~=#tQs+u5girhn&nh*V%+Q?c zbW96fzqMBpMmsOE2ScHqtP5EJ%6`5(AY6s)#SazTbrU zQ-^*nnqyqqPNSBgbI$2?Q*^xK6~+t*kH-!S;t>v=tidF{Rn46lZh9dvDw}2RiL2xX z=sqB#cQz#d{NU|xHmiv?4qWSDVmpq&oT=vVf-0DO z?~}dqnoHY?7qzDl>f1+NjNfCPwF&ZL8T9sI^hXh~8d7W|0neH&3h8j1pM3nhiW-@4 zvB0p>vF;X_uTT*mJ6(>K8KCU43=<)LxqoWsy`09exJ{)1t-}UMufUlet9)~~qpiYN zOaSm}y#Qix!zrfTs3@Y;YSCuf#JDulxIeXD5YqAQUvce~8P}WMsINbl3U0si+Dn=m z_MHt^Xk{#S*%1)>I1t#q>=MN>y6ntxpRb9qgE9C6K}&Cs5~c{)m2@B9pw7FYg>={_Gn{GItx z%Z^duJ)f#&nU&345X1^f^2_Q!NaSKD<&DmXIj+g8`LpBOOq6MLeZ^@sE@Wjm5(y}e z90tHf4x=GB5M}=IxujiS_er<3CvsKhxVu^hTn)4kl1U}Yos*i@7L)6Q88gV87ftfd zvZHIXSRF5C$&~3){#1=K3@4aM{)rI`Tx=#$CZz6B6L!lws%e z*~71F<8A{bIq_WaIByR8cr!05JGv9avZ2wKUW)Khry)`SSRjAKXBH+228iqzV1AZdC$m{p z0s>Lh$IB#wv~#RWb44^bm<~&gF!rGsLrpIVN3M!SF^>1xHui|GA=G$PV=#+YwSC9# z?@+)keHI0c7D6R}ssCGdO?@F&w7e8hRXk{@U&$MY-~;G^6)Zd;k#ZloZbbJvd_$Vm z&md0c=qnAgY7c0XsZYE{MjC^m*Jye_OeA$)m*}R<1PFDXL5Wy~D3w#$wD-|AKp-OO z5SQy=*%Z#0&Z{>7f8mUg<}}Myut1g$jov2!)I~~$T?4f5Qs>KfQL!T34eKIo0cHeb ze_zs4C%@_E`-x~D3OghPH=-MrflRu2D*m%sq$mq_l&JIO58akp4~(hNIt&}U)Bll0 zN9ZAz>z3`ViBwd16kmu3sXZb{qi`UAk7%$k*)qe~_g+QpP)LxVC-R%)zFTQkB9Z>W z#c}yFG^%Re%vUW9h)8jv#F)}};v%$bcpojrV>cHz1~OfgjQ5yD@|q({?&5`55QFVx zrrWsql&}6QXP&m@JQBosb#=xb1L{aOp&(u)a0hf8Ds%FJL!;MWsuP`>y>pdJ%bGih z<_D8FgmSXSMh|A_PKAIqT!Bszl7`Yd35_)?bR3K&b@yp z_%WDTXdan3HzjkqAPsRg0XQP&8l%yS7C}<47%H|#UuQd|aFFn)ZfwXwh?`;ZU%~We z-OW#(=9Z10z}cE7d2oR9r<2c1+-H`j!pIv{)1&x_Ly`O|!M=kc*1n(=FJileQP96| z{mc}~oVp_2D|+!__26>iqXF6?w-(XwRO9#?FGH8$nXY^j|sP)fYbNM5x)&Co9v1QZ13*Cewr! z&~&_p5U8x(ngcpm);SCD6A|WqGY@lW#LTZG%I8bAQzE1_!l!(?;f6LZ*)m}XhK=xIw%>e;~z2;)Ds#x}y} zns>{CvZK@2W@utzP;<`xbsbvS%hzZ!Lo)SCcUf~kW>VhOKI78k;WOln_R(I`ClZHc>Ri7J@tR3_4S9V|#5*KJ%%TvO&(V(Dmbms!s&6zMwLaM4mB=|}5 z#D{{beZn^^QM-erwWvD-ks5qp<)QNH;Sdq;Ld&*s8aXF47jDca#oRLVB_{6O)SqvEkSk-~VE@R^04vKgjnU1Y2= zW4$#QS1}Y*9n6WstNsl}_R?cY@Kh!yKsl_++BmBAj^f$1^(Qr3^G+`A4zy~7U`w~@v!8Eg z%m?-J(g5a#ya|KTS7T0_W5oxPq#;$&ZZm#Iytml4@{=Mg2lJNPRvI^-0L?CST=2aca^T<0n6okupvoTy@=~=$+>+F&kqW!;kI$*Yn9~PR9Yi`|($wX)2`PD+%%6 zyu`U083>9H(ZO#j*<2;>!7_JbYXzGUCyi7(2BaiMf#J&+yRf*%oweG-O5t-(7KzD{ z>;YeUZ>rcv&tZbJv@kGS0|(oX&mSV@U?bILILrzXy!3$+Xu0waqSs?B;vDUa@!4D1iS zS9unFqc!#9p7y&IC4%aCHSLLdbmQJd%Im~?T=`8Wg%W8xfVTzDcay&Dx*+={jTNr# zufR5EFXW>S+w&f!|IHM%&mHY{QKH|?Z@9(U))#?Y9JkDRmp|cst-ala0+gj2B;>2g z-^EFikyUoS3mo@To{b`JBsR~CA)1Ujr5jcjFjq*MP#kkwR?FZfpSI#tQ@f+9Rg=Y~ zd4c$?&$@StOVlZX$9gD^ku&gKU4WOj; z_>01OHe))TvIsl>vI)2D`UNca^u_uB)_ppgNkd33iy50a3f`~3Sj#5~Tp<|FQEb1z z_*d&xyMjR7wI0ZEqY%DtmCaH@5b^M=h=<(m5m)vwHOS`F!(sX-3a;bXh* zGuN_4rU$JNw$zR*7UsE?cqh_G9p>*HL?EGZ<$`{4pQ0eYqZ47sAOl0#s8$*jR`c;E z(ci3^SeIRv=rfpc&*56ZTudU^B_VAIJT2@~MwPC{Q)K3g0VI=I0?VRO<;B*s?oLU1 zJjbSlid_D7$1DtK z+ESI?Af@k7O#k=C63TeNEGjqmxgNWGfJ1x8zE8?8=E8Y?VMM(mF0CgJV63Jp*26{F zT49p>nFsv+EGGL3txEJO%z=7uj*0~rTBo1KNxxJ@eq!>6<~+`}VTyRr*q|qmgQoo# z?C+QkN&>Mtx>Id4$+x-}&*;8)qpRg%xLP#HpzfI}oYP8T*6k;$3Ila1JA`QW!tD0d zQOnhT)hmcC<<5~5Y>oIwLV8zD)#tIaD8#@eLrLLCNS0gGN~_0x6whw zpbCjZnQUyYn}SayRd*J*Q9MrbAoYFc8_b;Fs^k@GQe1=$v( zb2L`1Y=$w&2F^)fL`*dn+qQ0WFTx?U#+qSiT;FYP@IgU)S=UAf z4X^>uRm8OprV z=7P>`%2n%sMROF-$xR(*|P#A;S~ zs-PGv5fVJ05U6^rCmA#hY~*GOpB=3`<3$R6sTbZCI>=p+qgJp^}Qrzb}U=xM?+Dj$;3LaeQ1 zkvY1!kcW4>6=Ht$4ahRcs@4=rRvb!I>@x<{#&1eE*3ZxNIlii{i@9tQ#qX4yzSH7vv^7rpUbvpIz3ufhE5y#Cd|u;S z91f=m8II3$0v_|Zpzx$-A1k)EVwUcwbI&OhH(UGHdKKU0%ctsFl_EyXI0XH;lCIdr z+p4=sHLwe`YO!s6BE-tVkY&^>K6i9lJ(XF`3P+4!_C`lgQS zd!Z650&I(Ivwe>rCXG6|bib^6wy1z3Tg%@hgOVbrS)y$i|30N4=dFSY>VSM%8>#5P9aNpx~(j)tLd2 z08}%LPp(zayg{eFc_{M=m+2*YXeL!gmqtBqvL^-&5}E}j;RGmISUwZc9Fm@*`O*B* zsxv##s;%;7A25ynn1?Bp2Nkv2#tJL73~R!2 zHMXmj6M(tG92}WvRP<`pYJ}wE zi^jIjXswg}QuJq!ZE}xzc2vrbE93MBo%L3aD({Qsdk7vNsinJfHrL5s7H$5wZx3>b zGEa`{=@}Js#7{zM#oa?eRIkTDj*mjRxUmoSqkIl1-bLr!Pp|i_eRDZOUy|TnFTVHj zKP*#STG!gzf`y_lzXYYBLAd#5aZ2P6VB3aSQCgQdy?ePt5I!W!B%>_}yb>`R;zAW)H49@ORyO#b=WN2TRyWLX0xK264D74f{J1t-{ z6~_rRs=FG(7(%*sF7Rh_hw?WGfoMO7N`8Rf>+e_FQI-tyt}&Jh7k*qyotk?dNR8Zm zeo7Tw>l5PsCe8A+c&AyuFU^XDt0rx}`i0v-Z}pRW^bo+xXWXQrz2SLZK26f}fZ4B4 z0CUKO#5ot0fV{k3f>N}9X0cT{gU5j{8OQG>@!QH7n%fg24aE0Wti9iU$wAwBih#XK z448XS1EFLzA)?tIVnWK7<)`Ss|1s2Z0p#T`BgXZA##-}oRm=L4y~a4(zs~7ai~VuJ zDNGj<8W{UQNJ6)*ACE8u+4{wVoWH%-dpAK{VF++~-LC7uA|qzk!3=W!%%#SttfV}P zAexNu*pT^o&*!r*;}nK(__!CdmOkeN(?SApN`#mqJ%VttCs*d?DGlo#(I-*PQEuu^FoW{pKN04 zyxur_0t|fbF-qQy-?qUnCmE}^QEmc@jF`n?w`S+u1Im}K1!!$?RO@W#*J;A@egYlp zwa65CfDo9Ms={n4SW=jE&tmV8g)YuOx3?~@pTW6otSBs@I*TB!5=BB=od4oD7Y91| zOso}%?oL}<1lpsD_efA$H1V&$7}ZW^>1QD52~m^FG)%kDUA+}fB4_^m^UA%!0v6C7 zMHlc&7inb95SZRxg(FTWUpJAqg9;P38X8yDla*!t*&z}updRO4sk&v?<&#e)Up?FD z9YS$K0LrzlOuX)97X)9*`kGZ?h>I!^3{zba!InUm0R+nJl1w`*?^Qvd&^+UDJcJWZ zUm+WM>nKY*ZG^uQsS?iMu9OnkG04_%`#o7TMoPeUL|#|uvSN+uJipAW+IfJsCRLm{ z-Xd+p3aw<($_2+iy&xyCYMd;540)Y}#px3=XIVMSjLT<3SYf4Iqu+lgzUh-NF_`7& z<~7%1HpmO5yc{g&;k5Sw{!-!cs(y$s&L_(otCL8=H(xkwiDD^LKN9Bd;amn549Eid zK-~&V)%AAKg_9KQ=w)@?5nU*4y$MB?f~G{mZ38zTsB4t17K45<*X+u~IX3VuLQBnU zJb$$Ypmv1|Y-S@Zp(H!vjLYDN?q8fJ9`7~vO2?&=hGW62X3GSV&68P-BI^SEsQtv% z`;y@Bf+t&5RLPPY4f=EXCZgO26J!<;obT_*YwPlq;7e>V5Mm+H`zLI$LtU_#I^&qR zfiOkN^2*CCJv6c9UWo`k(<9vc#}L^;5(_Gbr(jzygf9J9BG z2}N~JoV;;(6SnwWN0l?d?_lSKqA^g0EX<|H1=L25)34iXB(L@k+f6xfhky8oJB$ya zNl=r>ID9;$F};K4ge`#OVQ z7A|6ayP6$vEx&I>dXtFv`JNf~m6t*_nn6DCIs6HaotQgj>%o*hC+CND!4VYBllfXE z_jx->fwCWYK2SMj3`tsfyZAjUB7wpRCo=n5f7e!OB~XOv2?fQikiuJ8f% zytaa-xzKp&y;@1 zB>4Dpu@fTck$;LmzSza#szFt3{i>q)Wm)Q@n8I$HD4`w?uMRC`d3+v=K1ag8Hb0$C zwdc(A<+uA%=Z*fECBmkn0M28o?+WCAu%RS$MB#2W1;xJU{8lAZt)<^+N6S9p6orb^ z=^sRFEw+kDq4IA5pr+hDd6}^Lw#p7vnu%Z9M9p${XcWy^YZlJ2V$^j=T9Q&Hm6GfO z-zIO(=krx-qtcy}tzYUYfP3;T=mMWsnvPYd*YV-oeY@?pzf%ZIa zRT(?T-cW_wB$w6Knx;8{ek{gb4}fn21-b_t$4xl&k__j_(Bd`(G}nCY^l~n7|A^(6 z#fwth(PyfW70<-0=MoVuC1<>Dc)#$$driL-H~Rxc?>42vH>5`pWU=_vR&BFxEJ-R10ien z%9T+PFT!B5dSQ>)Nl*oeYOp$XcGK11uRHMt!*LQI&hs484Fv9@QfKrL&y~1AzGKLE zeoNg`2X6S50K8IuTH(Lndq2JIQTAO8ubBn__HS?D`S&o^9Yggl*jjGiT4t8fB7&MT zBOqAyZ8*=J3$HvNb(C-#OdQd`I%*hTQjEyghYLsCV zai;M`wdfL5qcl<$YJbN7_8C>F&-JOy{S0GsX>5b!G;l?)JF5eJ!15N}RFUsI;V8|~ zYg9bEiV#_I@xQthVAkOS@u(z8u6q(nGWE09Ier;GE#6JuV9rTg&S=yW=px7`xkr40 z88ywBBmS+CBKtqc_$3}dWUSS^Dr{PHUQ%%n6ncL>bmQtb9k;`mxp z>x0F0N@qBP)br}phbF0+>dc4IQZ!@!zALD{U9PC-FZh1-Vtk$YCBbg^@9Na9 z?nripKX?3}xt)k?wN+r~aGb~_U_C|AYqj8vF{ zs-$=O2gp+)wmy0YurKQd{a*gUU3AUe`@YQO`t8P8+e&p`MPmyAqs8^8AW#J?hC9Jx zd#A1_PQ~x6kQu!;2l9*V?`JQCrvilY54Tl)_va0A`q3ZHwb{LjoftnUwU<=ezeN1` za*H6I&K3nvm?YI{0|V&FA?T6bAATws00g73AAR#Jlq*)Zj{j}VX@#A{F@x2T0kyH0P3 z9&rd2Km*wj4>Y4`=ql$+!Lq@rNE6D9kqbGDA4o|ksHMl`Xx9~`oBGpElj+e;2o^bu zy)!GFWQ)f*79HPwyD^eGtKf#aQ?g4U@x@~Dk0IiBAx)4RuQ)L31zJRl*>LLcQQ|cW zy!izc@n44$GuX7kl2YjE=iDs2`$T8kW}ju_uw-Xn6LXPX&&>POG$8-_wCcU5_MSP= z`u@S_i!`v=WTiL~zjV5t@uIeYL=n)eb3rb!0FG&gV<>0_E@e=pY;$&(3GqM|h<2SK240$-^iA4}i2 zD(km{5}6Le3YkAH!8&xkHSFfzH;pwm7b7tU)rcJ6G5h3iEsieU)LqmBh-BFQ#!WGy zwrKc_h` z+csQZ_rofW$xK#Qh1z!44PBhU59-Tv`%eklwAm7>Nb!xa+-TNHDe%nDCSB|JSNVBS_%EFCdCQiz5?6H<% zF(FBYlkD4_Oc-6esV}!6>xXWR^Q#2xr>nxEqKF6mDu6UDh5%*qs8j_yXai>|?8~z5 z6IM42-?qB$ZI3$7B^oFGvkx9wrz|@xfqs~LNBxDayVN1rSm%Yunu~OhQNe?fl9;hD zoZ8K`dBu9yR>$dlT}`5q&pU57g3!bGgQ*)fYp55t_Kl~j8?{c=G7VzLsWsjDW@L~> zRk5dwdiD??TwG9YZG5qSk5hfm^Md)d!TYaG+Ko~SMNEsDpJGjrrtk;v12KLSRIj-jdj zl4!L>KO^GaZOD82`!kk{{H%y$swDA`gQ$S`T0Bj?P#M%U(pMJ3t{NA)t#}+*(G1&? zY>He(D&M36Xq#7zz(;IHK2_RlVs=EoNWufzPNT6Cwyf`=#TK8tbb$(E&KEwv0j7IE zLGsX|Hlicm8OypAhVs5xs3>3;sGE95LlK31jf}HCwGV|HO`g=~Bv>(mIgYb4k~rI8 zi5@Dn1tZ2xd@%*GUvVtxLJ9yv$;55tm%ntXC~zs7tKJ5p<6=PBqyUDVTk=yY?|oX^ zlaz4=Yuo9PXL#=|$xcQP(!*p)32)wU1g(Ux(a(0c{T{WLfwpz$ScZdzGS!-4X-am- z4OficiU?HSd{5w1&QH3(GB^gf+^@t2E#8yT9=e10q1OI-4Qs0=J5guaR=Z@x{glUv zRT9rpA?oj{3V+?c2^AmP?aDp)LByQ`;6y>NGu_M!tEGN(V+!x`=#5fq&}YRSNLZf+ zjA;joL-OjD5+~cL(YKC{vvatG^FXF-n(^NZaW;p_QRrtoH%&`V ztSP19eqH>(6fBMTw&o>Oq>;TnhK3&dlcx&Z>hXCiH29UN7#1#zRKZKXH@Zj@FZU%dqpz1Q6tVNxH7{+-?t zUu2UOy*ze)*|+bNRR=Ow2 zDDLyIBCp@N8nr`lttvZ0E7p~6jXHuy1n6D~J}D%$mMlP@C7xww;ZvtmkQ@=KwD*QE zl-_!Y&^G2d!dX%ZrO^+ju?i{p-M7?JEeA_awN=*u(L2)#Ae)36vc5__-7A9whPYBF zP`qDHGOxaxeV$Y}?mPmwh5w|teCIP(cJ?e(g>)P;LIw1zX@RmMPcvidOcl zS-ssHgG}-(V}dJ`eO@Vj#LN_BZ$^MTS>G0_brf-IzWl zfbX0Uyv4y>8C{cX0}}0d+_Qbl7ypX6$JsJwHE8vd#$_?zBA*bofb_}kG&10QiAvhW zPWlccFMJHHF|ROEVsWkHDXRb?otB7!|0VTO>$9?zOIp6n29P?n`uDAPl5660Imst1 zwC-ZApz~sq+eWGVk(lBQrMjpcaVX*)u(_Y@pc!~d#>wmrWR;G7qL(c>Z>6T)H=C1e z2(lBYUB8L=`UPbSih4Al95F10Px3cVT|+=txX2tT;BiBa!)7|hSgO>L3NBtn2@0+I z=NcqSNQ*Z@>>zp1bfj+Iw;g3BOK8b&(J=Ib`7E%h-SqotUhg-y5TOYm>#n_6AI!(+ zCEMQC&WnzrCP(17@#ik&o~@sMe$hJaCszm0|6d-Nq7wSDb8BUuJs|EMi`;})JYI6J z@?vyD+~TX|LUg-f87f1c39ouF>B+j;{k7(|FX7{5sBH(K7IAXJ;k0P|+J(4*fprK7 zVrmdouw!HlOj($?(gG|8z6q5*D3j&mSm!v2C5)I{(H8NuE;a=iN9gL)1e0g_4KIvKB?lqXD36s;NW@_hYs%=Twl@en+bW~aEEY9C#l`qP8X4|dW6A(#inxj+#s=S^fJc;g?!@?9awy-aKoRRI}=U1#6?WkEZ zcx0wKL%3ps)%Opt9;*R?j;{Be}XY|R2ke0Jx zlOW=c+O_56C-o$qOJgFPaPUjCGuu?W^Wtk4C1cAb=!4>1gxDB7(5}u5IJSj z6lZTsAyoYB{4J7EbTj9QtH`-!roZfqK|H3-s=?u$QR>JFPpM`>S z{DSHGJGS$c+kIW-eN^-C_HBNv7~PQ*&$WnE;MxhnIbAU?LMm;HK+7ziSy5bi$lTRz zI(ss|R<2JK_$f6s;)nWAWODb3lH{?{a3@t^y=e)dX7yoMlTuZtsk>S)!j!I^^X**v z7{Lnwv_A)SS8)(=?dXqc-i$|cu$SHvgj}B{kd);HCyhU!E*VN>NVeA8txY)}Vy1(< zcGS4RjZuy~_t9XIP{E1J14+f04eEV!4syE;myoh70@oGkG#^v1d|fHE^CGBbD!W@)R=i_^1K?+0R@k8Y zP_%GI2U4ZjZFqy|GKRl8n{ld@psG+$OOI_RqBv&7=QpUKnFsW<=|WPLHTS*2P5%{& z1DOWKWF=4)kbHGm`)h{rQX_!i*Wt4+I8_h&OcVx5C$u0hkuKs0GjZID&Mr-OioiZ+( z!Oc$v87(kR9ceAKDHgu7!Nrs$NV&?09x{YW2I;&j%jYw$Hmy|kSw+7VH%FKJQp)c$ z8XXz<)Y=u%+%XFLT!xe&4@a*rLliDM(8QFD(lkF8w?0E7!|Jphc6Jndq*wHo1Gzm( z^G9xeiw-R@)+E$f=f-ZYKP^3vv9QfRZEqe@H1a|)DPkx+)5j_|7|0PH#U`iGscnVrHXfP?z#O@KoM^LG$3H1aNC4S=fPv{vis6s^33^$^&Q5@I|q$G11c%( z+pin+uD_II&^%6!zmq}LUmKASkOhnL3$yVOb5vi)Fq=~_Hw})HuK6e(jP;!@U@~tN z5ptCUM5KU=K$DI;;i%z_X8 zzkQvLvx3r*|MpC3GdozQM@?AgSY>g^v^Es-Bt=Fx(=R1{-r{Tmd>EDS#i)1u?BA+O zd8Zrg=!^60I0CnHLVWmAd%9_brk#)Ws4Ixp-iYqIf(L#1AA>ZIl`$gKOZlT&6dtc> zKeps#?uwimKYq6ydp9a#db`qRpP1z!)-}i0ji6tK3-|E_K#E7{N2%5Bx7;83{6_3j z44(0ezmmn&>63BcXri2cT_XrCdn@@0ddmPP<|rfR9Vja1x&ye-TPPYoA1u&FqjyX| zocv{KEN02ra$XeIGPujNM3$YoQ#OLPXUBAsk%AL3NA8Nk&Vh5M)m#qF7%5J!dr-@tvR^8JL zqcB&2b<-mCoEoLjfwL**VwX=ji7z-PD+lY^GjjUqHCC2T1W99w9Mg*95tQao3@L zF&`Zd$JH<}Kx*bW+$Jf1EeIve<;1Lrx@kDVRbdkaTF;|}t^_d3a}&?}^;5u|2GrpU z=Iw>O7rv3IlK?;iv4um!j|UyK>hO_ueKzEAClbfb)8G2l_NcD+c%Tai$>jwy`amG? z_i5j)>9+D5;k1Mgdxx%MR&OP}f`&UWpni78jVl%&WEpB*y(T~tnT`G^zF>DT^O`S) zk9INY-4MEX=`0x376LJ53=nPGelff=#?(W)yX?Yvns#v{laYTrtL?OhkCxv026lTs zoK`p2h<-<~NdNOY56>cqrnY_0FImj!p42^t#59YE!~E3ivbK@7nYQ-T_ZYhG1>~uk z7u-9YR}q+ZgW5H1MHLdTTy_5Eg9+4BuG29sqqG*Is1-%Y4?cQZp;K{~9kUX9phPNi zSR*<^bcakjj`$h8^^Ov`>@A914vf^j@{(Gp!c|eCc>?ZP106-DO5_1Mm9tG@f7Pa! z|JV9ad+yZMyK6BlB1D9S9wQFSvfcz3o$Y=6O{&CZe&Xb81{6d8ae)5uF78cFju@lZ z(yp~)3Zs!L9Ux{cDE6X;OFA%o(P*8QJVTyACyQWwA6ZB-dM(a}#OIfvGvr|4?GQ@b zmxF2)%%?yYzQKi!XR=(7g0gM5(5-1^Wy5oUioHnJ{4%2)J>v?)EfoRH8?H{NT2xbdpEy=M^eV&xBH=Ppjv-Arx&9kX`BkE<9xdTkYWR1HT`l%y^qBg%9cVKJ|>&3w#y4eNGo?Ksm zM;HZPvvz*@lNqmXWdR1L5eVh4R1W)7nw^+pNhy(~Qcz?zr9mRx$NlP8zR|&k}qiXU}!8y*!>5brr-Lilb65dM(rW(V$rJOyH`PBe1rs#b$z{ zBGF&#*L^KXssi-654NLy3Yoq{m3F>fGuC?BdU{7r5;;rtu(P4cv-Jx9*hD#(Xd}MP zVG@lgGM%u7o&t^d%m*fF@yyMB*kzPxbF>zL-8f7JOl>n2L}YIrp4b_WOw8kqKM6z# zlWTlzQa<}pm`3|Q4(`L_9PoegWVDv&U@g!~TTQ;rP&=lD*(vSBRwqS8gbty!Dc-jG zO6%Z=F^j>7JT9|EMDww(o}IAr)(7QVg@tu;hMpoaNOsQX<7*B_e<;t9+^`dv5I+z} zfILk_VJU8s*#*2lI?KqP`sw_bTmYdn07l;oq_*7tz)W=UZx`&?ldgvC^`;bt`$oqz z0IX?KUydNUr(s%yQRmb{a<_Gg<7JgcXk1dmtGt;d#!BhNIh+oWc5*!C z6e7daZA}$u=dPNTc`9l#tza?n{DmhZa^dIl3c1NK2cYmI48d&^xr*M3+&D}+#}J~u z!!ku%qtQT#L3rg0`>g;Gh8H-N#v$*F5!l&-oe7nJ0A@_BVk-D4L+@Q(jkiRcyrC`U z17kvH1m2W=%opE*jmN=40sk0?BNrQ7{0Wuw6SY(BgkL)AH5A%F+jzIZA(l$Qxun&Z zRR@)z%B2{l&(niiZPiVwNju}e#)m+r9`gGIr(ib~e47Zv@uk^Yu|=Qj@_PnL`BlN* zzc|o;b|GarY59pOFf^|5H6`hVkO6aF(X{b$Rks)0XZtneKbj}aJu*@4(@UJq+p^~p zw-XPyw)h7w*;Tnm$w`~(b@PFL#l;eWK4V>n4WgEc_Qjbe8OxCI($CLVP%FEKIakda zN>Ys`_Dj?qtsqw;o$=Yg+7@6E$LO)vGs#!A%!#Dq#Bwgu7BquT3yBEeKUx$~AR^Dj zj~Wcx++oUc*U_k(UtxqSKQ-$N1l`vhEET`+22JdyD{v`Alc5QgPwLjn(lyGV6wWs? zd}_dDK*~rMaNQ*EHE3Hu@ z@L;12SfDgRqQe{zD4|WJ+XopN@qrz(bBs@(}p;q9A0(3 zZg!$%rb7yo(iqpQBS*FFTGk=d8c=@4Zf9E>_L@*J(oHF$K!Xh31tVU;E_O22y2=VS zZC-=3XWpo$lviVvMp2ZLwX-6&?%y$?@A(F^so^ZqkazH(I-H+qCL=v5>mN0;@V)0v zx{`w=-$tlqNU`hR3YI2b4(X}U50ftjVU+IO$1e{37$8l$g${x^nK7I??=;@t0e@ar ziwsHXI_;@BGHAfYQM!Eqq#DHeNYs%36+HL!kn1*Z40Rd$v$jz;-4H`5^+Fd_Mfb5D z!?vTia3!M&-WmX-|CxQ)o6Id1=)FM`41PWgFN{&f?d4p3LlmtS=WgU1 zNrKmUq_|Whd|b`0wp#v;91(4SFO)>$iykHpZHhz4ay-4Ou_4N4FEdB5_-VIVqC9z6 z?Ttnmx2-xMTtr$t&G%Evx~vDlP4wQ5>E?$6TpuoY&h=Xp5Zce3-ve_K;j(YTNRXsr z2i7-8^|PCe4vV5KY6317Hq$o>eAyEnz*Z=$7KYMySP6~Wg%bC8*2mak8#+HJ=7h_)Txj( z3{wVW#3@jOPA^(g1v{WYn1)}|7HlEX>CxY|ci|tww3PI{7(?&q53Mx7Ez46QkgA3T zhpRD>J`?D#+^b?|YZq_}5Bl#?8Fnp7t8+&q$bqBQ^i}l2&MT-mVezcst=47Y6{bH+I%`&9)9fZyJswpZ?{snnFMrU%t?^xJ0;KY zrqhmRVJUeczTeimM$L+is0P8Uu~iqyq3DvUh8{Cc7LzA`+iO@pZj2I_aLxdO>Wzjt zYz!pXA?O8&MQc+P7giZH`2qlzUjNGx%gj~z*;I1cwL;l)pr~JbQ4-=>!-PYFlH4);D?vCByYVf&Hz(FQf zv}9%+)Sdg}^R#v4C_p4lY3lFfP^3;}yR@pe&&SA`U+pd|+`pLT%&9nsSGkuS5;IPYEPdKY8EL%30lA^K%b(h1J1+PLF#g0dnX z;8gV|VV#wHyF9*R{blRQKx~U}Se(0aq?=w%<2w5EQ7&Z30H#3Wjm|><4Qp9fgXK8W zOx$!Gcfm0udMN_i6o$`Do*GdO%8a&)!#C>XAj zYS3@6y$VzvK<AmQf)^nLadlszjTnqI74R@DE?a40upn@UTX0rO-CM8AVjRZPHY31(Ipu zRsH$qks;%t5wQ6bKm){BuX~?q)>bP_>#O#5`*9_gRP_X554FEKgD1M5kF*1z>nONl zf-Xv)f9qO+b$SyVRxErr-QqpGMeY*5rX!Np2j0PvH%2m>)&?@Q%M0*s#p~IB(U>R~ zj;2}p9Gdz9&mf^UKXsAjQVkX{x_C4%d^F?O4wi?4FkMbv1`J?ilWVgmD)$}eT(xp# z^$9^@Mmxl1S5YMnmEG~3xi7yJ%AA_LU*$LidV#WM>*KLCuXW(EfOt33@x)>Q?O@Y9 z&##jpX3S+dfoS4YTY==nT9<(M_>OFTs>9jE$s$A>)|EoNXb>1q2zBO(9J#9)9Xpzql|wV6Iow%49w_b z=)b}IG{oB*Iki7K&{#6*I+Y}e)PyWS=5X9lC}TUax8j+st!0m`;U3=e3=dUfF z3s~L2bozN$-Ukn%NiZQoZdSo_IKJ~SWff3~L(6|TKs0{2_OFBioc00>zUSzXn_Jfe z4&K{{J!IcZTce<2*D?Eys9P*4Rz;n!W+V=MqU*r9?GHoCL1-Qi!6S`nZ24<%$aU${2c$B3M*<3K zY>6y5x!59RHZ4;{YF5?X1SS)lp#q%lc6YkVqlr$R{c)ETXWiAOT9YvCh=if7J!@7| zc8K}P=LQ~V>SH%fiLr}+p@&_cI|7F7NxUKFs7}xC_Y82e;QL5+_CvFkvA2L&$w#w4 zw>ntYb^@gNC(>0Pzd)I_zq(Mc?lu&ED?1}bwpe0majO(E^Q`Rh>6EzBL1`EoL>vQ?abht2s1cR5zOWBIu#sQK zdR*%c)f&jx7#Llgy9ydD;QWvdnjOQO@TzjLS-kt4tz4cx%E5?}9(i6%F6nxwBswt@ z6CcO*D8JO_MYvs)jg{-Syk%YAs z2=NUOyr5|-K~I(%c)?G``%jq=x5av0pwZr;r961F>yp8KNUQTJXd-JgI z1dWx|FVR>Ot7ZF3dyLn=PmgPPUO89wPE)RR7cSj$JjKHMUvKb?F2(Je^kD>(7xx{A z65>29KAZngo^Y3dHH=K<;JJhp!eB$}$Ur}L(6T(D0AC!60dFE-i;p_7m$v73ubE=4 zkq2K6Gh1f`;-KMdk=&$bt{`W0mMIKtk`vfq z!$@M_N!U~rilkvNz*)w^{UY(v(;Ca*;FUd@Dsz)7!1?g3pE_6lLYxrb4mZ}ECy_de zhLj0oJ{~g#@!Fvs_I9XPG6eaKur3lf!hNLd(fa04oaXTQ!AoGUs8};nRT6W^<`NrH zC61fCdX?L;UaT6ga+-+z^31be?d{?BzwI0a{C$g`l&TH>)8o?jKq)`ohe!2$rER^T zaoO7~IOP&FGLQ-Yimqm6XZkpV<;A+9KZ_m~rBJKaTCi}FknZQ>=#%3G6zQf>w6(O= zHpxUGC(#dD;#f;qf)=qE*A38XHab>z*nNyH>Al;MkZQJ@v0?+t8e&qBB0|SfCMlhl zY^jjEfLRXJPP0?8j)wG=IK){5)!N9zSR3VZw;YOJF%{CMtl1Q)^EgW=tFkhvd`gx2 zLUV|6Ug<4TQvwb6s2L^GQ{e7;M$z>`*b85BqA5}zS)PKf#6fl&u9Y$ z5qRInt!sng13{Hxm5GlqRzkxrAJ{Yz)DS84`6*p_lg+x7cFrw(vL>-A*GFfs*F>&- zbDVTv9guv-@!Zs!+#;qYsr1%P%!TlCa< z1(}Q)Q^aAo=p*w`{#Hj8*72DtVw;hf}Z;&^1)$?gjlK*!Ce2R{pHRy($ z4wuwPKb|`YUQe7WNrPZ~-S?`8hrRu7+6AU8_hn4ozqDz}X9bQ?*=bu+Ja2O*oGvUQ z%u0#FH7t#-CfAnXa-_ZDO$$YPP#2U>*RGT#;vPN`2IKtHG4*OP-y7bD(57D8%9MpN zlDMdM35J7i9`^)z8>*$HEGNHC0Me;qCeA8Sgg6)Mrq1_R;o=|Lj0Ph##$(EAcGbevH`3`_H*bos6 ziicS9A;TwbcLCNgUhCGwt~f(hT_axT2If5v8|`Q zk9ATV0ceUaWN#;9tG44w^PwhU4D{_XqjNW)1zGvtWf|yVnWLX%R7w*i3nxo#VbLly zKj@#Nq4Z)i$rZ85t@o2bD(Y(}sW(1b!gn|eT&U(P;!pbmC0pYOY@VuCq1BjUnMVje zvx+ZcCq~Pc#Gu=hvH65&zSQf{RHJO9MAHu2$z4~Uv@1&oGDh*Ssa2XAR)k%EFp2m{ zQ1GNEtE_QA5epbU-MSdf@vL*hH`gnh1`h+5QF!nb*M#)Ad_PTwk6Uzvg>s0e92aD# zp>SyY8e=vX^$o3tbes~H zoSvhi(C#Jlgja(z%Q8(8lav_2)E6lR{b%;kHMn&Yt0?C^LM5r7X5 z!13Lr*_s$$%R-*ZnMq&bZB#gR?Q^~r?OIJlz}&zpt7h1 zA=*Dgt%p)aBobKB!168VCE%>~h*pvikA}%Q@n(7*Wsa_L_x@Tna;I@_H$Ui4te^?a zG+G53vg*Th--1?p0)JZ9psiD_`Y`2eNY#1=OlK)8Yd<9@U$(Oh)m6OcDF6%-v_&NV z#xfMM=N~otWWO5%N)xVC*1*%&^F+mHTr*Tl)6>Q5qGV<|0MO&SqVnf z47My!jrlygIDDS`;ia871zzsJ%m@hkgUcH4ixMhN*N{PnXgP^ZL=}mZ*HM6M*O8^M zi^+|wn03I`{wo{kuGaf!#Vvc#v0&@f;s5D(ijqt)t2>fpjmKOI_ab{p9hJI;ZEaCi zwV445#iK$a2CCdVK3$B)8hy%k12BR)mz7f5i@|C|?d78R2@Y(P={w0>+fsxkNH+!9 zQ-EWEpXHQ!5A&L17BT`~B=XtIql`COml7Ndx%CKeuCheFSLSg$;AX|VXwX<$YC()o zgicyMx%YCOmwD#a-#c&9vpyuutQDYG-)V^`l)z|sJXBX>ggRtSE{SU5%Qw`&s8t42 z`YsmJaNKNlX4qrCYq}`2?ha4}+){23n@1j3SsqxaTN?u>vk0#6pZ=>>cx37T(D~g6 ziGW^uj2i_se}$ICK2ss9jC>g-AofNe9n}cvsp~Ze)X)0kSjW4Xem{g~x=27%hONaw zR#be`Wr@7g3wehS6;@R*Anxq@GqPs`2nL0R;%{4@@mHlId&dog?w4gAK3W~A%BNin zLo%7fb+^-!6}(E3#D?XY){T((;LRCRU{sEZ|2V^BRG9Id_~jmRNpzG7DH73|QH9x} z8Zyy$NrYB~`#C*$BDf*@BKvCJLFw4K9CLN->+H=TIClNNj!C2?XnP!kMP_PmWR&>Z zss)UB5JC!iPKFpBmPx3EUg&IJmOdewFN`VOZ_c(=_M_uPy0PV%eJwqI?UoNR9WEe{ zZWfFViKer=xZ6YkPt*dxcAm=p8!GPC=~>`7MmRU8)t(w|W^bmkQJq^eUf{nv#8WK5 z9fH9Z-J5m^;w1Ys+s}WT{pGVTSpR8lR3t*9VrhNQt`jn)Pe4O!Uz4&fUbbb>Q72wz ze6hnvDs*W#{LQpQVO49@Z}eVAP^N2zU1(%gfaP^hz|=J~r}xic|JRRUv#@5T8ff2r zxYJC&Tm`L~fD_kKXX~WA9~C4NaQdFU3Y&`Wy#I-Bp$R(EY;`FroPi*}{^MZ$P4Lo> zcplUpGjis0kl61w`ZJ$s`9Ax&nJ4?`7D)jpRfZiMhX5lQB|+mmw@{;rhs1ZCl5oMGG>y$5cX_)}6amyIBQ zGdG<1x6S3~6PotZ650bz(s7EmpFb=a0#)h2WfZN4l*ckH2DUPD>_v+SYKOh4u$kR* zbXw%`{4vlnACe7N(*$`>sSeJLqMZ@A;rg`PbNEUtbIK z{pRs{K>X&ClUl^Chh<1lM04?q%_#VC3h{Fm1C;paos!`t>de9(*Lhw|5NDfY6* z$sB6SSa2sA&Quc!Wwv7ygLq`))JX;%rQ!R^Pa};dSqEE^0Q-6@!pS@+749SCh$iF& zPIqXV(&e^=(dz!8%{VUfGjby!Lt9H>1&9`SvF$P#QzHAx@q~aI=eftLJhJ6Yl18=| z3Uiw3EH-m|n@zD0ioF{a zrg}ChK~U&4LnPrXT!&gB?ZYp9ik#A_2e3=6$>28Pn9i%$}7u@^UYnRz^`W zuX1a@t``8GTFB(PfH`TbZK>U+e+pa7aBq027(k$>zmL`x0yu`PLN5Z9ITx!hIC<@W zRpZa@3JmnmAA6yMu6%1^4U_KG+N3&2@ZR3`$%f9065VJhq%He)(Y%5~i{c7ydhuMF z`s5_BRy2SY46$(wuUuGIsL61Q9bRwYqe)T`;TeZqifgDy&LRbh?R4MC^wB}(p*1Ba zttrvrvk`{b`=jFXgN= zTDh0>SyL*J0u@VtM(X&5XFB%w5cMH46tuuzQCzIrphRWMB&}DRu@|87@1_^p>x)bU zyBJ4*bihxU{Sfz$i@}TSi^#(p40xN~U}gKBd7off2t8E(^=&rq^KbgUkokN-S&moc z=`00_`xHB00jO>N*KW_x9CU(Hb7Ab0n0w5ROXtoGB@f?g;)ZtJ_~yKH?u#D$BU3n- z)8xDE8WVsD*sBYs?=QN)EnW|3MWbFXyJp)5Si7$!j9drceI^Zmh24W!i;P(IA%PEc zxev`{yW^@s946OcA9oN%pTw&W%1$f2=Ip-Z2wT?>V?=lufhwT5hO!uZmhxt2cp#Og zK%d@C<9uyP?W$FQ23Xs|mDq0M32@~gCyGh+*s!n_K8>q5*bkCPz?!13D-vT;wdMNd zKTnwEkUqo^s=gxSmX6PB#ZMI(kv&0Db5qGJ<7KMH{YKA=#c)M-KJ=v|NuNjT1gAa% zZZ-0E=PFFE!~`$CL`RN0J%$~r=#IDa=m{zej*;bFrSDDzw79sHZS^<%FE83aC&tH; zq{5APuV$g)K+t!Mim;RrBW7K$b`shwS_*Ip3P=rcz8H*i$|dY6CU)R@e}BJ=?`ct} zB5+E@>9h)I?FbtA9)jAzwOw-?8xH+95F>HTsU&?mr2W z2o_rBj;k|7jiWR^CYaj?3$65ctOxEfi*FUrCBo06dlKBZm(aAi*;3?wS0AFfP5qwU zL~sBMrO<#;QMup9lg5|01%MUur!s)a`SNm{(0tm1q`Y{YppKjs-7F!Nw5Lt}9Hn%( z_TRnOIfx^B^x>KdK|!r_&T}&W|;VCN?))JLm-3& zkb6v3bOB97HUSenm1SsTh%9x4>~x#rYpdk6R#Ilswy0xf#x@ZkC}$s=l}!GIJC}}6 zr3D;7PNzzsc>Pias7cuj=V?fOQDCU2p^##5YwMro6sI$i(W;`(qKW1ouQ(3?=o)rV zaTgc(OreUGN6UGR@QgWurqvNdLvu$K@TbO)Dm(>RHy1XZ(be)4sM<%86*I)Dh~wn9 zmzc*;ajB^(l*%zms#B^{etT*w%`LmZ{Roq^G&^v+gB@wF<0reON}~F~5KpOCPQ}~y z669Asx|Gi_4S=*+%3#qcL?J;r=^q!)e>TN-`EeP$4dc;7s|h?GB+qYcIUUW4z6UVb zThpM2L49V-PFgROa#KOfhU1384lJ`MC&uuJP`svG`)D=7#-&}XxwhJkXFB<`KC

v9T*`TvF6U};hxmZx)f55kI00Yp!^em8@D^`ciW4pOa=(>3blWv#t0@K|eRbbl zZ6C!esktUx8R!g;gvc%Yc!lE=v{1{U9W#p6;@;o)xxEUrd5E-=3H z3-CjVMaSZ*IV!R>@mHfB3N46JBk`v>Rk;KCMaf*^O8QoGHbUb#&5_3uk~?W@T2(m~ z&0=-YHz#JyAUuASsa0fHxa8_sowXutM_l*ZdA`e^B9WzFAy+s3|vB3rrwZf zJk3CnQPYK51vcz)XdwZyC)x;5x6MJw)_c9HaV?FjgVg#$@ilzhD1`7U)6ubey5X2P zPbl*h1b#V&b;M=$>1RyHm~qyM#b>AJO64aRzWsMfr+!f58GJ5NJU#4Z8r355sMlAqaA>!xxi42jpY<3`{^~5uqiIP>Pz*LCnr_JK~G9w>7R6ljuiO^vj3gK zOs%;8^dpLdP%EZ3uki6-5Vc6g9a-1lBE`asLdtqJe(h?Izl18EsFG#Jjc}w;;c6RRgMLAPNR&Mm% z34=fS%5|y5 z7EuYGwB|eHA46dBp(vFe#N$KM)5NXOgKR zxS+5J57{Yj3@x-6Ww%zxp%6k!kcC;9Q&O&#sXbtTb%{pZHdz6-#yF{$tFBdNwN|hO z#MZa*J6Z&?|9JV!L9w!`ST5Y2z{zq6H!I0D7Lnfi93~$~Q}5@PWON_`mM_B|k*GX4 zK*85&1j=92?I^vXpszy@Kz^F?E3=f0dU%atTc$b2{a}R_1C8{ob(--*d7)E|S6iH& za*mhGzlTTo<*-(dv8-{)ro|It3A1or;&$EPd;4KnCU2Ry0TXVl0`qApt#JrL>7c3FKTNKphT8$ip4l4-H=>icJV*6# zgiz`#sQ(uMIVr0OOCh#++*p4hfqN-N3ELg`z=up)G$z1|{+z>4yt4dNvP&TL zwTCugnai3f-o7rbY~BT;7|h7SgUeN|Lp|wR5~3rtr`-Eu8p76lGf|L%|1#TLK4~QS z!;AvRaFfK;pFhbm_(8I6ls%D2;nn`T5pA*a(Y`eWI@K)s#(1CaUY^}7nQZH=4%wN? zRk%WG7n-Cru7xSHo``{RnBl&k8z2Q^fK^2i_9*e#|@2B#C;z!n2jz2@P+>YG4tQwX& zhrfSpOVvAVN;L(JQ`b;KIB&B5*{13aB~&|raf1%p0*(8sANZq*)p0`u5K83<*S+;E zS9G#ox76Zb!HY;~fJZrw`Bv>J-->OBm_9EwM~9f}2@%xdq{8^%SM#t2$AtbEBZQov zOt-l&DhvTK<3EryHdO=BF6O?-Qz4}^GK{?2SPM<5SAK#i$E=r1-!z~v>eDi(wcX48M; zmavIr9;Rr_z_sx{O1u*$&0|u61c4awvnp=7BzWFyQ`|W`4au?T^Ipi08_zaXG(=%R z8|;TdSV^)sjOP$gU7vz$DMf)G+Au@bx}r&lx^q~I|5d)d2`ge;4cLOTMU4u zyg>EE_ATBthB4&mMSYT}ucOQ38fYup6>fr;8@e?X?gWMLquLrCoSOx;h-GK4%WYd| zI=fuLhvYzFyGTjevNz=-eMVW>u3a_$q!x}=iV>aBL^I860GaM@6~ySwaK0?!ZekRu ztne{hnQ^lM6+Tw8^YT~uCFQ7uXeKSV0vOc5Xmp$^0IjI8XzIyva#_Xpk0r0}J4p=OTEP7LyK02jU zZuH(K#&&Y3MtCcpvFwx@V%mUAeK~Us|4ZQcC-RS&@#{Mr+Fsf(7h!i*Z7JUNCx=wl zvR7*6$~S4EIoR@?A>8tP($ZJVlS!_?KH$Ls)tBHlrp(KxGqt_Y+HcD&?zh6RhW$)f zxLcw~7*!g)LKj72wO))iOk;0L!PAr+Mmq2zR?$<1m0X_FBklTacd(F4cvw0joPs`< zz_cBw99FTzp&D|27qCJ}?wH=21t_2yhh^j|GpNZI%o*wSn9-y8nhcO0jT}wEEl%c0 z+yI*66fa|F)mKW){fo!^hn)WAq3CeNMM6E7Ro&8PJT#y_d)@7g&gpuGPWz7R7<0%*cCEn z@eGkp3^SuE`QXzW?x|oS!PouKps0Ajgwy7L2G?Sx)OY5{;({t9(_ z>N_-NzNrRv{TUWH0_GQuO)2cu zjP*H?be4d3+T=FH5UKTgO{|}1og4DGQ~lQrNpN;j&Uw&9W`K{r5CyCs=VV(TCpL;> zi#I~YQ&)bYIgwi7gIMw(8_Cu2CxJP6^2Y15$f2Mdd zs*{!lLfJqR)hOrfAq$ag_Mr({^%L)EHOmdu)fUqaB0~KXlVu}Y_~C%PqRec+v(Mu^ zn^AE&@?Y60ibqxL zkm0J(D=qVS`+G`AoMT#{Gzt=BVM##R60ieXgI3o5_c-{;ct23hZQU0_!I2#$3l?(j zz8P8hPf&T;xI(H}XnOJAxJHSINu!!?bi4=asfu0BU{1T!11%*cJU z7!kFgE(K8fGcBqbWSDv!XdKea%Im*?I;ywN{;d$D6@;Lt8Vd%{yceU-Q>mqTI{)!@ zRfYcjoByscuGS;<-r2)c_f4JA!uG{Kj904v3n*~&=aw+#{*kZohDo65==})_#ZI4Vxs2m05Ckrq zYw!8&J;rcaz(~p44fDn7s}qSIKz_5!X1ZwdyUEhJ8H&Q((`_1~YAvc%%~zGKe<>dS z{`|EpiWSP`&J$Qk)bkgPFbU)-P}s2Ykvq9`TA^6dXs+Ed9rfrqYwa(@)-_bd8NkVc z2K0V#ehO`ib1?-Xn!<$!Tf~|=YW&~*VO9t+%?y9gFqTpDHNg$C)M{eJm_!0#yR<4O zqR(t?4e|9kry~Vn4B>AvL%#MlmQN^~93rxwW?4qS$)mZIpEz_VEVF9j&(#bkBoN)E zi+%jmNL!caD|9)^1BT0aXg7JY-{}O0aL&Ssyv(milo==e-=krWHg>7ei5adX(2gld zoQiZFv=CtovCr)NBCasNAtLZ6T>d&|+A2}5V%B1)y&FCSGUR>SBDUaaDf!0iiTWy` zNf&o;}U0&kb4uIwcg60^5Z1!#LbpWXUsH5p&Vo=NQ9zG^GUt9 zLGB!Zndlr`xv|n%*4rWlr)YC(ILoI-UU0K`;fI#3Qxct+HCQkunJ-CYetDh^{VYnP*BY}bfH9SYnC;KvI)qk(7I9i-3O^(8A)Wop_7`H;A6Wg9CI~5$ zHE88|e{p>llD!<=&l~#vwdQ6)H z7vFo+>gXSl-eJNZKKn=?7m5wTr~vBn3P>LYx(Q9o?cerAdWoF_2SM0wM5g4bCU2bA_~63O?UG` z9A)jiSEZ3@jqMUi?h_St+W94eKf}oNe*-2Q2z8V!y?L*j^7IoRmf;l{W(Xs$pED2H zC|LN4p7kx8zd!I1y6+h+VS3$3U|>l3kM!<6Gg0fAm! zmCxF(LJVa8($ehW=@4w|yzwEBcl@>t+Y`8f8o@N4`6+nTFA@nfS_mUOIda%L?IaoK z!}X!e%b2iKO~57_^4eM~t7ek-3e%Eb77AF!Rw5|T>N%O24b8siRuUZ~$N|Xuf7`3A zqf)Z?X&EV?)dC3*M^ZtYqwr@{wmg>i(SKKLxwv8S#!cnb?tYGRuTND(L$UAuZB$}- zv|Lv$;>?i|sqw6oeP+}rjAxx~*<6EXWy4=`D#0Wo3s6($(70TFU_X^j>US|!eEWd$ z|CK0l<$&-6Hm#Aq&Dw@@?!ikJ-5%Vn3wCPrT=$36V~}{$gJxL}RU*A~{KdEOlVd27 z-j`2D>|JVNwBur~JX$rD?)-x<8W4~a`tGj*aYqJ_dc|bK=j7xKIf$d-6HgNMp^VOf zr;3iEDvK@25JF43mH??a`;I^m&jt?NGI~e4JC#tVxpW{Qd~sBSo9TD2!%Uv22}2#Z zFS+t8E-U8d*)3*r%a!bgB5S^d{dEetN*^j?+gHNu9 zY7_-h`~Tc6UUav{{tsR6{19myhJWWKyEfb2?Aol&_EwvXO_Ocgwz=81ZEv>UdA|PT zoxfmauKPZ(Q^)6cc&J%FwI~5+b`RV9d3FX7ZCga}x%E`3qq8KZMN!i+m;9&GD#TRj zG$iw}`oH}zk+#5nP~?0RC%4M8Bl+%kNg~X7NPY-i%Be!L==WLcSJed2=^ODa%+C(V z2jInNS6hO}W;5a6#HY;J9uay~dKp}~e-!QQDxpJ3K}Hkt&f)&&;*S0}=bb#9(y6>t zCKyR1bHF=49VeSK&ssT}R3#YxOR|q_**q}It(8?@s$@=i`Oyz^K%2!V9D0I$NSlMPCs$?jkww)Aj$-29WrKB z&6AL8k>_Y2Q?kN)D4E#iq=T<`hVe4}g-GCp$l}?2(f|BEq=L1y6$Ky!vMX=AdQI~@ z(!m9Y`xr+FGxzDu_dlMPwv>e}9GPx*6vVbXlq?C2H`!VNxQ_WxYOVQ$AtaEg@EO7> zr6Lu#ZP`L?RxUSnmYbit{ZE{&COQMHn}98z#7Ca?-%ONpgn zAPrnvSYZ;Ft^1zaeOU|z z7F%(WM!OEwc~7}Pny#0Fsci>`!IO`VWq2#f$!v7x+iEz8|RWl)U?e%fK zZHpF%|K|-V!s*bRIW3Iw&*2=0A%`AcU{$0<#Y=I7%p*&&GVN2EEPUS0E=5BewX5u> z!ew^i1AYB3sRtFgco-F0e}XUE9Tgu5TnIRK3pUOsXelIxQvNv0$Ws(td)##uJBqxz zMyxl&Tj2mK5lbjaV^Y@Zh;8MlkgM4f#E`VS-uSWfi&7Tj#r;ihS&5! zqOO)(y7y13oZ;=R#ibj&RAk-{f(hVWn&$fi&dx}QAgoigW;D-u^!Mbs>L5wOBQ3ig z|A{*gCah{*X#E?G)uu?h3C2HxPB@0eZ?0)l(h=43sLDp_WAW4g97pCbA z8!0Q?cBGEpK0U}OR7JI6*wmjLgvG`&7v@!EH8#a>jOS4Kz`{zanzaRZM+Kky(9q{r zM$5=C;k0ZVy)N%`%Z=@OOdkZu(F~JUper7|N5ajN#lsxVspF>y%4+ew^`|=&jML#t zaO|(yqRWBIQ$%s9+aIo;kw|Y)7;?NXDW7lnwtnT_a2dQ1(Bo+h^S_WW2pscgeugja z%{_S`HsrV=|IM-I^bf$n?cwa_LjTnwcu&HMO*rLhnQ4!r2TL547D5n2so*XU{hD%a ze^OL4+*_g-xFw2WxA-nKDBM<)_xXlM3`uBV^*)^AOj+ z_rsL++;p3D>n=&?20{*km%u^pvpocdJz0YYtgjn1f{#6o0;gG{;>beR(#Y{Gu>ZhiDp9Bf?rnJ~ zOwdGk-`YF$tm8+iY2k7cwzybp%uI|}s_#(p^!}+iBJne{J#rMvRBjSzy8(yr zoH!Ah1_XV{d&olO3Bt5)h??~jYC#+9>A~uCrVm-IckKql%-bKFUYF1*`<_?NT<bm~WB{?y9%AvoCg8dwkba)In!j_T@lxO6m zj=Jg>==792P5st4n0Kfq)GMH@AI2N8HC+%?`NQRH27;ZAw)ZY&8T zO9}piy_;GWsmkODfG36LdV{cKEKzeeBe%s$zc9lDl(UEa7i8>H5(F9hy7`|9xMM+_ z=LOCO8_`$AfTJV<~r zEr>#9R0N0wr+Vs?A9h>E>{k9dn4z=8!EUXppp|;D*ouOh2`;w7GCRr`S~nF!V8vBW zICOzA&@`Zfql2x5LO7<7snwAov=P+&_DFu)LF*L_DZfbc!+xu9h9lV|X6#(F`8Lh`Tyk-L(`t^BLg{1AVvCj}nC!>>F1h7AhBIw$bvLqIfRF@Nv zudsQugd((Iwzp2Ht_r7+{im7&a;8S)*&bP-An1a>Ek!UWGi$%>G zD5`#m`Xx4v-B3>CmobFPpfl;@ebSP)N_fF3bFvhNfUPDy#>#6wHCHCfK(kB1D~bL2 zM#mj8Yz0uiSa;vqTDPAr&)Ipq>VVI2-x_>=X|fyK+`9 zJlVu~E;>GtEmhUzTwg20JBJ#4iNVo{#4aGovZLmii8lxcjkmXt$q-*x+`flJ|YiM z?5JhHN$n_c`Pu`=3k@oYM>WvTgQ&n8gA$K&R@pT}k}b_cJKV$WpwpCieZUb6YU+OF z;oRi$z^k8-HY?aqWUJkAxfci1G^9jYmu+-?z(CBUef!3Zae5E$^|o%d z*H7$SxcU>!eUhVRQDZ${$&|=rcf?o(o0#j0w5{BobIGXLu2ytC>jWe3XNiT`%jDbzzba7Q8srQ{Q zdGvnO9g-tbd9kwjY?9Z;0*=S@!$m{j8ru@RPVo;kdG3`FV(X*tumDNyqXD6!*f6lY^bw1(3z_C7yD0FrnZy4V|Ys41}E@Vd*h zvi4*HQ#u|L*`LJ~4wvU!fo%FOHEt6KTcLgLro~A8YE|$=8fcm7sm22zv>*^gQr*%h zc=2rzGnlC8(w^iI=eUQ5HK8Ny@OqS*tNKkT&qdK@6@QZC%Pm#dwuEw9b)T9ncN@TH zm6hZ59G(YuQf;8T(C0T|*%-O}5vzF(y8itxkx5B+E8nIkPfZ|-{gWP?^``Yx6&L!D zc(r%hVeIpy@$^3#CpC0Y>kJ7f<#Y%x4kM9xoeWuf*Po$D* zoJblQIgX3vgrI-F%LA+Hp-PPkI_CA~rTnO+S@mx1ZBxyS@`+=u+#;H@vvu2)=^}6s zgVDF5b6({CBqR4f?g5Gr%tnT#T|Q8G1SuuTRle~{ItFNq{<4S0jm*kST;e+b6M(ID zjbP$rVGK#ukFT@!>x>$2a04B8EWx`CgzFFmA1M6GZrHQ{oc$4;4g%S!Zi2gL9|m|Q z6y+dI=PBq^;D#~FaiL1=xGM=7`s3?stxh!*&kh*tgBl2B(Y#h5Ma;QuS>~RKnZZR{Ea!HbLwO+1!#Io7S3R zj@-PSim1?w@>^~f47BQ>-YB-4!5NpW_>^q)6M~2(no9+w_o;D zZNK4p-{si#n&mv0c%27a^^KZEy8EkpZa{Pr)+Lo7p} zbe0#npF~v{nTTWTOqnl;Y+lUB2_dkmBr=@|i1fBUs~uz@aGbm`{q4@)p%CvKjwuM!$7^*}PwTT=k^XxWRaT zttuGaK|YbTn6pNE@6tPryrdW{!BJ!29p4UC;z3n58{{zv;PEP{Emqd7BBzZsJ$Upn zU@Xv~imzkQ>(-o{slsQy{G7PV@*_BAgKEzUA?oRW+Kzy|>V(C=Y)26N0EPy`$g{UX z0QrBcD>nH}R*H>AKn;VMj({-17?rBhui`nR#a5KMP0?P_zukaF0=S5 zt3(1u9H@wzehETIBP6UJ`klSx*K2es2Zo^TNK`Dm7*Nz)m3ZLM=4oG}`xEQ){@j2( z=}zf!ekEByFyN;kaY)Xs+XSyQ?QbUiaK`n;lEz?NktMY)X0o%R$;y_r@5|*b(!_ac z73w>YY}LaL%U3ky;6+LGfu#T{jMk%cfs`D_)?cBK^S3mt?hFq?8+zm?r3%KGJGy0I zpKsm63a(66CnZ9iPvFYR>}?X`ZI`^B$d-5gC|6RhpK&oOzWF!*`SAUZzN`#09wp3^ zwCe8xT*ia1K)L!?=uCJD4*!V8teMtVSWtbm^`Y+d5ni&p#Qecbhrevp8z;GUpV9>* zY4D86zgb-!1Ks#Sm2Q+lQDzlS-jV6>7?1Ti_DB zX&vD2jNz?~Eg^!J5+^7yO@3X3YI1u*kkF$4kdQarWA z8rKm4+n8lF%5!%OL$+%v!}U z7g;PrM%3+lNy@S{eY^bB4Y}O?o?}0)Ar!VJYBlTmtjvEjSThudBZvi?b**{udzx*= zG$CnRkh;|Z9o_VzaX8jgC2Yh=SMgd|(RPrZlw~q1(Lh;QNHpi9ysj0R)dQ<|-Yf05 zF9WHvOWLCY9e%F(%(D{)kY1jE*NIhT$*m+>3emW-jZJkOSM6^w_0`PX)>Fw(j|{GSTf8Nx?> zqj0O_f6N8>iaZLoWK4}kZnKHK6Atm8H{YszpY$IUPCT!{?`u545Tg0vk2}sDxL;_e z`|=ZVe5cwF;>^*v5eHHGM%d4C%w9=ub6(Gr&f`w+%;J;qH!M)WF6!>dCTRZhW{H`l z3y+o+HVU*AqW~wKIsA>YnD1dad`)KkRUo4)MUz!P_bWDJUx_53nWZeH3ccX2RabGJ z6GA4&?o(GV1ZKVQD0)3A$nlPl%Xl4FftDl-7#D|vnvv5s{xzOmx_^?&Th61zzLK1F zM^4}@1^;nQ{KI%$!n*aCY2)=+$nfGLqqb95xNZ$}TtY|@(Vx`pbK{D)$dXm8I3F2v zn(e${y`+X0!GM;{*@4dYj>l}wbHGeDDQI8|buk49VU{uae22Ovd|ac%kjWfKrZ_*j zur>VjPaaG@#+DWN22nYB_)FJMV&4N|_Teaf^q2dbG{l&ssA)sn*nL@KRU!zHstjM% zGc43)IiMRkwmEVp*8r9RJy}cvGX}Dy)u!uy-bMKx?(snLPLG z;EK;W|2t3?#J(3xwgNhBsS;p5+nP7$Wt2B7=)B*4ie_-_4PALd3jvqcuZwW>qN}Wy z4c8&9X6sCFqrH0RS?^khQ%_E_-4PH?M#$8U$F=TWsax!#nDrU0D6CN<;0+#zY^+6< z69beDX(R9u@|w2Rh9d*XD5W}Z(@oO#L4hZJC3=)rdxz2SMn{+Be#5?~ zae){LPP^oW`C_xdbT0kMC*irE&Byy@l3__pJV{~`Uy(wj8MT-0X@5oh<@@kw%P&tJ z9}QbpD$XRH7UcuQ&X>yxc?pEL@%h}mx<1EOC(XJNQ#~JwCs*hLd0-BoDhLuP@b7=) zHyU(g(Axr8w=CGxjFU3R##ryHm?H5%rcy-fWbgc?N+!_fO0Ln%$NKL|m>{Y_s1@3*m3ly=3|4~&Xe;j}{hERT!wIHKSD$AlWkF(Uzo;VNYdgWd$0Vo@rJ zm1CGj^`6?5BE3g>{%9%!@+3q_B*`of;}6-Iz038EzMW;9zVIhUD{v>QXXLnSkc^OIFq4cN?jGOKG#~|tQd+Oq(m!N@g?{)hfV8!880S5hoCz~Sz|;Dy%NrjBQ=D*@qg2l z^8MO^>lJ$apq(9Y030naKs2wv~M|Y3!JKD>eYZHt%*g7{pFc1uO$J8=F&$) zFYAWu7Q_T$LhZ=*yI07ZG(PZb!)Sb_&K#|t?RS2__#$zG=MbW*49FnyU%wto)exbT z-9V?+Wk2w#O2WY$EJ|kfATCkGVEKoikPM{i9tVAW>9)DH@T3iR7J9K$oiC2hqvFBU=y4uINw4!bp2)eLNDvpE(-u(;+G3h1 z1JT)`6Dt=I69qFotUdAzlh392f2QA2Icm?0kv%m@z9t}OGC5PChUEBduLh_-A-Xjj zlM2~^^Bzw~W>bpRk4$I8^i`&fxIDp!DUBRz0bDaR4CLFU#^Zv{y!8|0fdMe)%lxe{ zPaBp`YK(m&npkGQe_CYEWTCY}5scZTlIaVmlowOgkg zt11FfP{ZM|bWg|@xIv{;S2{XfstPle87a5Osw_NezN?p$Ye*BgNXK4!yF!Tui&CTw&b0F% zaGZ6<9FM!|7!ok-otUlmJ47#D&s|~TIJ8dqQsP#+_O$$=&;Yu1Aw=WF8Co>0m z{7syAGF$=pdl zW<=!t5rpdWMO%^TVB5qd^?iqNB<8nYl0A1yIg{At;}G<2KhyK2{$w2wFveZ9eS6rz zVd%Pap}*PwV%(A4Y3UZQ`qAUIphOSI)z~kuP$vT{JSjbmJ^F2su9w_`yifo53}5BA zmcE}VXzcP#YX$LL)>dDX2sSm{5XD27XFpU5Wc<@rAJ{DWrns2m{9pRLW)r@Nb}_S( zjll4!R(fHp$ejUd+k=ySzThug#0!)2T2R^0guHSlKM&zmF2|nz8+hk&vfs0yx4+-l zFuakD8O~2o5MO*!+F$q9*#;XMgwJ;j4F;1=if0VOfj3urC1U(8T)GQIj>Nbk%tK)x zuP>Wv+4v1yr-v&iM>U;9i#&;Zws;jc6kxvLTB_U+mRD7n8Lev@pMb!*s&9k99A(ml zq5p*V?1XJNL<%bRcY8-B(n9{dzofcf|GFPpTbV_Qx!_t_pvsGT0H{JQaCCWdKqv&; z%+`ikju$glwQ!}B#1k?&txSp5xy?Efc#ZVZ+&g1v0u$XQ7i@cNtDt?1G)0PZdq1p* z2C|;2dUNdBuv%)mU`a*TL{OiUp(OQ5w0KOVFA$Ya_FNcif#4C-o@68d&6GKKQ_X|q z7`g3*IxNWjybwCFL%EI}=tuXO<1bi2d!%*Fr8|AF)_BxTbf+Vl784A7F71fJ_H7`? z=aY{{DlsIvm8ADrt5DI76GN%jZNl_GN|#AOHnGP^TI<`TfYnJXhob!^@=BenS^eFT zd4@#C=KlmZ%%XUM#y2Jok(3Cf5SAb$vxCoM9s608gJXK=eF#zizFRlbLr8i4#oCuS zbRw(n&^kA0Tp%=eCvtm0^^n*;D{A)>n@L>Asu8n~0-Pyt2j#YiS>qol#5_&)+^Q%H zhn3Xy3{JaY6TJ=0*O{!wot&IWe6J)^LfDm5^Vgg&e1MbosP93ls}@O04-bZ?AgDj# zj(;VDp-5<~41=O`%mU|s@M|PxhobgRw@$%pu8pIuJ@A_%f@(O7*7u!yL11<2CFM5X zB|XU!z|qfxT%BSvX>i~Fg;O}PR>mVACA$e$DF5A-u>|{!eZZ&)fSCO6M!t}{WnObg zl5yY23C{TtK2^Y&3Y(xFEQG-O+wX~tkQW4;{8QMYwK5@d?d4uwD-jQLHT?n(l&XGF z6#h_-KidISC{^O}goovnTd-QRe%0(o-}lM!QC-`vP@mxFNzu=SN5^wdo?K5~2!x*2 zk)S-Pw;e*Zzzc-B&8GPKg|owbYo?67p8I8}>Fitg z*FJ}we5c8AI9Li+vtq5wcv96}#QE~4f@gXbu`Jx2XM{tRM7*Pz_v?Jl5bUCk3r?XB zKTxUYIb}Xu^?fG!ae#3N(!|=_3mdyqGt}>`+my(1eR*SEThL*!n<@#JCOf8tuj0}5 zT%>r~Q?&o8JGzsr8)Xh8i8|OEcOyNFHy8BpEkiriaM`5JQ6bgJUu4K80|p; z81j3!{hogVT(-ul;-q@Vwq4pDC`+60@ggC+65vCP6j z+X1{D6!$` zW3^_Qwx{bbg@%6$zF2l#0qNxgrA5+(e@3%6X}D7)y(!Jkc1(N$;=_tU&5EXGUuZPN z3wlqKm@D#zs+PzVT*elwyyIn*iDV51!*ubZJU>8YUrvcSI*PQR1gC3_R(HP<;>QGN zTbkA=#*2N`{Ddt3tQT0R{k<0-Zuqam3{Sv`mMXZ< zc6x}0%ciBtyddYTMeSua-*XUifzKw?kQ!d`bBrg*yFjFH@$$Xl4=PVHff$6O{-2 zUbB)Iq;{Mt9G6<=i`#7ht~`DiPV8og^xFI;wMcGFCYF6$W5+hFY?EtMfQR`?7OVP! zmZ!NaY$IJ%X(fatZj6Dt3esxI7LhGeu{7Esz>A<0O=~P~fPj{rG698x2{NK45Y}#a z;~QL}zSW3j-KIgugOAAfyEViXE+_cnuNg5;UzXna)4pL+G098Ip>tRb+Vuk)h~#Ys z#$0tnzDs|oqPvzlBnp-4uPdtSf#^l&)jEsye@}7QITd9o7Tt@*%r?Z+XSSuJj|uvco`FMcT4L zAJi>84-!Hb&bI$lxsHzk!o;*cmvKkmdBkd^z!Q6WRR@Pr!4$yHA>iaa&GcVCkLQG| z?gM}`aWlb-XtLpy ze-QWc4yez$V@Oc<44BCHgKF^Dd6LD7p+%(8%ibK5y9~ip^h7!k|Fhg$H0fBK{JFdi zm&m}6)?aQFAG*(kAuxdEJG6fu;QKNZ{Xc2=(4Ly}ZWe{dH)!e~9Yewyu1}@l* z`%ZeeW(ltpRq-%i!J$YQ$-*WIhpN|VbA8os>j!cOp$7{#BmY2h0E$F_a7PnphXlU2 zZHvXQOa>_zo&9`}?2IGo-saBXthK+07)bXzTS_dEe%4k|&j+qNM}IuXyrlbf=QYT5 z{Hx=XTnsd9#`-AwmgTOuCn2?5T8r{FQD-4L?atcV9!n43x{^DY0^& z#r&qQ=YQBM**QR9>X-d`bK?G}AAgY*Fukoie2G`w(?&v52i&7tf5aa_sxZ+MbtxWS zdc|^%IzH5<0|%5+fzOTv9|z-r1iPNo8aDwZw`ocHy>WvG4E>ry6aE7hXQGY) zA}>sNC?-8&5N>ZPE(Frl zdiJc<9hWNHaq|hxtplx2_dD|j5gUwSLQ5G`Vz+sXwG|jn2wH**F9<0LrK+eTMV}HI zTjYi?;KWfIOb063C?*2@iy)5mSQThmwtGUw&%}GjPjI)lyz`vWg>BY(C(0dU=srYm z5Mn&t{mlv4;P;rOWyts=Y#_pkgX0>XayS2Aqv~_PY)^!4=L24EiN)L^%`4BK5AxLffaBc-(JVOD(piF5QCi*gDbWpSNI-TZv*gk!lL<^(BdOI0}&%~uM(uo^p#%k03 zpw77N?9u#^^O008>gAfUYW&7*;g_s-dTJhit2Fkj^w6?GkLk%7U39&LY?}|m1w8X- zMvO!hI|c>&SoFp-(KN_8%J+K=<9UJp*5B$=iW;0{F3p;?A~buLX4~PVhx3~m;M4wP z`(-bPs&s=2?zm0@o@RrJefvF^flJV@;|EF1fk(*?;~pLp z^xc=bZhiiDXFnEU5H-H_K}z8B88jqg=xuRFYKC!r3vM~|w+UsxHQ?{xeB#7uV@~3w zv&?F5MJgp0;;isORWbu0^g~3;KuD@SKuvJu2eu2g#w3L59oX;L8WV9;B8PW4P47Nw z&6|6({Z+e8n6HW3qiHX!Y2e-ZbtP9P)?Eq_50j?MO@P8Nfe>Prj+aOI2hj!6`G^>Y z+Imxqsc!4L=X3@b3gz+AOrSsUr|DfBiCt}_RXu0 zpBwnS!iN}avyJ4}Qk7>!+Va#uOLrC52>G3=?G}HthKx@QjzOjO8vX2Q8+=LD?>DcX65$<3HX+I{ zjqP)k_%u)qnuaCwYRF_Lii6!l5)HgWj!OyhJRcWV!|`m)1CgRBj%ByyH!*Q2BzK1U zkUuYR#ota*R8fSq@G#YAV|5MU$IHU1Ng~pCKF^LJRb%=bM_^fqJHquB0+dAkEzH?m zB9}|i$NGyy(p>(X7>#%Tm^y2U+gEstwuT|Z1Nt#XGo--imcf3;A4(SdIYo1ut1yUB zF?iL^e5*#;mtOV;ivgZi+&pXOhpmPX8jZPy6Z;nQ9(H*MgD8d?ry=>D>GCZ&;K?YT zA08)EVlHOSPjazi(3~F%y$bm$nY>EJ|l@3 zGPQa(i2T*{3!3fS*F=Y8(V-HC)T*1$LL34f5RtH1H3|BbKEe4rfbHPp_1O;m$u4Mj zJcD=YXJnx3L0z4b!XlkQ!);!;{xo1jJe&#VnhqdYTV|!fgjHv=j%~f(h4oa~h456} z1q;+^$+a8*ty*C^f2<77aeH>s(kW5K3N9^;k`)ATG?^BW#%8vALLSq1OP*r9n=i`Z zG-T~Okvd9z69>G!C9Sq9IBo$k(7R!0gJIpBD_WTk%!NYt%=WL3kFvdfmv21-m$qvF znNWg{tm{a!rtkak*njSC7?RTeGxjAORREq@ntazVHrzq1)URr<6@3+9(`S-^exo@i zXD&I#z||q-$lMtgvOUI<7tA^&xdl^xAI1&tka}Qg2LY5-L=;*AJdIp0Vc29I;>MKB~1dR0%1Kvj{s$>oLQE{#sNu_K76VDo9=n^qyb z{HZ46szut}0bzQ<1~(vWqccXziHsTb zpnR!!kwH0vU9aVQoX>U{fBdcgwW3g!G}V2h(YGcM_wZVAXZn z_1xDn;K-IXbS~1Z%cpYG(pZt_=-`p-deP6YbSLu&i5YsC-%;_mItYBa-pRL~F6q=h z_QKZLoO2?gk{#M|N%!*{9_}}2scXq&Sep?wm`x9Lv^m)?#Esi8D2+QD=D+l5=_W(zyuBv=1emiW{r~ zJkP#IQG2NIICB^6JWQAL)r}Y0<<^Ff?7|112nq!IyY*V${YqB>rqj%zXzlDlmWIZ) z*gC)v8(tl8AinZ0gsP|~)9n-~MN#uNmZ`vC$p(s;REi;J>EqR-pTajR*pZQWkQDzz%yyxt$wC-l&xiZomryIiq3om{_o+5QrJtZ#W2dffMU9)3*lxwn0r zYWXMxE-Snz+VC9nXKWUreQ{fWg_=Pg=5~&LsrL{R8@+lcKqU>~)H69Qp{4c5%zoq; zTho4Hb&%MN3RH@^t6Wk1=}*~BI#7MCiyi$8Z$k))mlqT$=eVh6+VR)}a7)z*=fOY- zo*}C&9%BCf{2iW&e~OIMribPla?-#KIIw1gRskQVu1%<8(QMPD)FRVjA;0^rXcvWm ztjmNcr(yQjQgbA>wJa$$IN#Z_g%W_3k3FW`-xy_`qk7@IS-DEPNc(O%n+3s!CT)+2 zDW?uH=QTAdQepL`Kg8PTvvG2o`7azk5-F9vfjzlI!Yq9RHd|Wb$V91pl>CbLakd#w z&Y$Xwjpo5(s$pyEUq6ob8l=6()RK^lg;o&KB*0+p0^GX;BsARq6{^}~N!O%3mn2ED z?%rV%@d%)oQTVhK##?1Z#dRF>eeX7KLNa~!%FJP=MH(S_zP(bL|#O|JDlPVwRScko>bif@=efK_A~E-Z+z`#Hi$GHqDa+DNK$?5TVEAGJ4G zti)w6oeeg)h+=p4Jj>66{lXgcOeu88-?3dwlirV=M2t4C#rRpm`J4T?1RlZC?i^%} zCDYQqR7^|0P4-*BM5pSmyblk0+aM?v@z^o}-_85NBiIjLdK(LBGp>jmEe6C-4hT35+lDr#37*E1Q^1I(iT)P}(3y`3h$) ziK?uk?X*CL>w$kK6;b!>;m3d$R7l6X$0uP5Y|Nj^SQbFZ=HE@2Ik<0}l=(G%68TSR zLb=?4SDa-(^-Z%59UZQ7&Q?d~!v3Eh(A9Dqvbpign|k@~?XslNKnbD;CU?}+_sJ@& zOZ~%6I8i!=%P%tv?AA{aa^~)ZUOpf!>|U(tI3+&2{Lq7JZq+5H>oCc+H$oqx$cb#= zCo63f&%~mbixdJ5OU|RXW>0phcS6T;`d=9{wLYpfF(_FE6p-rpq4uQk+Bl%$RAY~l z%)p-*bvV~OGJwC2ePm(O^Qyted%L~z8PsY>uF43QHiW8>qDXb(ku?rD^ohjAp0c;` z&omC2B|*=dzxi8smBT3Ao{DWNhS9un8RqPI-)>*Ae1E577*g@=rSKI{!c8n2m7rgf zvU(fvq}|MIIXS&a)q!6(dY;1^U*b_g$c;rH`@5bqo%wYy(}d2b&Ux%ST7YIohkp`n zu%NG@G}K1>A@uaqh!x|(X%2qqTnxDIVWGCD(qh2~aPTyGL~nL6RypST+UsM*n*bJ$)R?!=Zn)q1gx4IgHu&IA zqxGTi+N6ZM-#3cLq>yxs%0-Y_Y_vqX>87{li=-D91WF7*xviiWb=>kOHFC&W<+}~r zYGo3IOT#fe>uRzNBcF<0>!^9zk|PG@rvjt=cVIbr@-lgF`q(#zC|^&zGpkOVv;kHh zBo-XS2JJdZmZ}I$W-Ij68uovYj#ZmYM5fAoV$M~k0-pc!aeNvCjwioH^{J+a%AOAwBOSXAg@dny6CjFO4w`t9~UC5_a`AvK|&|ZB@v*%LJt`(|Ib= zowowp5caf2KlGPr2lA5@C~S0Bz9&qtRt7F4cAbXC5A4VBuxj+c6xvcomYboaVj!nAk zK_A&Chs+wKBbd=_!#4l;4CYEWsmuv~+utGIHma?Bn1*9K<*HFu7y8$?op z8@KV}$1*nD<%zJ|N_o^JLK(K-!UsCp&9k+m-PGZ1tQ&75{lGiDJft%0DIRJ~4a^Ik zZURr}azj%@|NTHQX_yyYVJ{d&EYYZLR{OKexUO>%rJZ+BQ!(f2X)$1B)Oe|KsZyn) zEg5YC%n-FbZi6(|5Y_;+MuXQWAz6sfP`g6XZ5HofKpLhMrk423v-=dv>D$ebb^Iw~ zj>rLLAEQZe)DwXnx42Td66{L_RcHb3Nt;z01`7Mhj?MD!o;-F=Me&E|7O)PF1B33_ z_3Y4*so|PE0g24~jfI70jc0L~J;iF?X9>~+4?3DF7`xs-Brbz;sNoFCkF=-D|1Qat zSW(ld@%`-}`=M1wXQG@il5WMj{#Ri*oviBN_w=oftCrEa?fS<%&T7;4)9?1Pw=EN{ z_jkLMqU{f=_Gi9r^NcWuHu+&|;6Jdles(#9<3I^!|IKKPC>H=R94ro!#WGDZhd12Y z{0vEr^O~)ma4n((LQ*dx8f7IQR%<0?ScS$$rtP#Ec)?J-`BY!w>H049v3p*X;MoU*lkGCyb-6jW=n1NkcL@toBc%C@ zBk7W2`Am%Dz9%(1^BP;AjnB@tCW$e~7O`#;Gg|k-737Y=5!fRf?VVvL?0s#vs8{_O zCi0lUjs^i&$HFO>+N-gU_?}T!zV9uiRaQ&35?^yOlF3DmQe-$*yl3fiE$A(SXkzJV zjWI-W0%_N3*D4s#<>z1@0g<9xq|N-z%v_`tC`Xj+Zv0LlPq8wH`yNanrxrgS65PHD zIg<3jvIQRE9JqrQ#jVuZU4fAC{&e>um4SVQe9oUbN{JHwWj+Bu@B7+gKEV&Tw-g2M zzQ;|^7Q(+@L^`|<6Kj|44SPF)=h)tqZ!*=&ZYqkPtdh9s@TY7V%3>WI2 z682tIalu)lAIg$Y3l=@xY1kr2Z1AA*CqyM>9*HKr*po}m3Eoa9nxNeGbF$%qEUQXa zpjlQhz)>`}iEKyDnsYNV3I-bq{x{7?`E$j{xySYP!b2aYN$Qtzy6?m--ya>@VWJGr zEk@UBfayzdiq_H6vgY2|@#;N&cfUjp5yTD)aKEro3NJ!&r3^Zna%83lL7QK0Q5Y8C z04Cx9PwyA6>);@XDEAt7D>teLt;%0OZ|nTnGtAyoq+vx~nZvhwE5xK_7v>R?XQ;XZ z8C&e*KXE-SMrztP(g^wIq{Br3eqz+Ugw&z0YcnM7;@LKlX(9Bv^BUJ zF6mnY5@W`YroxKOfPLX)3HvXVlZg@PBcZCr^_D1ca(dL%w=Fim6R@1La9md-jTjOd zZ>-1Q>2w9LS~9B%ZPcrPM}dsQYjzhw2}@eMHpX$*&48R0ziWd!Cn zTGlJ5v=46Sh6#XuH&Uy89&ETEdzt5$dCpc;v7i)k6THYl7_o2egcGtcl6a&6 zv4aisDoX8ct^&bOj|iuAp2I8xhjYH%$S|k<^KD!kzm93T|KW(fgH5z@%aSXh&$BZ6 zO4H($6x%3Mn0dX~X8hej&rqL=R?sqX9HRWdAWM-%jxYp;hR2=GrtSpWMsbn87`MZLzAu1D@J8gmU@CMZYB1se8s7T|b2ycZ6JjXy%G;r1*ea+(wm71? zdf{4zSlM$v_Q>(9R^wZ{(k_nKuy1`n`j$t!tQh>T#9&#{ctRzA1*24 zq#}JG#25l2!lZ_KIX4P9b%mSi< z$Y42>uv{wTL`~=^qREzuahnpkEa&sKd3M6CI(Mg?w{yF1Tgb6sY)V3QS~;ut6RD`k zW8WsCtJYnfx9;L;tDZPyJ(0?_X2sT8O|=bm$I5~N0DsA_$c6?+51jL`N(4w#TRHyG zGT<`pEk>=(f=MD|3=(tB*<|r6C5#W(Fn%dy@$734d?1JE$xl9phv})E1`^po>-b3N zyc=(^SN!5{+XXk?Y8SlV#h-t$c}em)OdkR&{BBs`h-nu9NjiuD&IF_t$tjhrTrAqy z^o*6a@3NBeri(7N^ys7|$HuMRUbTY<583{M2kf>_e$qbu@sHb`pS#2Ez2kN}bm)N1 z&!4fy#U%$LQX-lV@ClFwO?(AeBMi?f=5W1-usOIZv+Y>|Cn1UU_!-q(9jmZKnur?< zb+|X%py8Vo70BaB1lV&Y?uWBI+o1Jy0CD43eO>Pm>Zj*Hhq)$xSnT%D)=6j^A)3MU zevkl5KwYl@r!rbj2UE45J_u}ejtHs#vk{Tal*nXOlL}irHs()S{q#wD=(gKz`Q&Mf zrP6lU4L956H@?s|v7u{%%~qMr*bO60ZNoH7-w>%hW@{RAjQVwDUfq>M!>r}L%VG2( zgkh3qY_#=?6@c%3K^~+|rzA9f*gB9Qim>Nb6A6Tnk)Td|2cZOa*49LJbUawM@Zdd` z-hPhzK@(1_Av|d4+`5Fx!y=H!MF??U;Y1c3;t%QN(*G>fi^L(YASNdBzJy%1a_kCk z)@((@^i;cL{eH(XB9d{)tnh+pk+ojS1>%-SG44QAa837xIIpW5_$_9IA&^#xRVJOb zY%*iho91lu)@`=;oO7%&F>R}flr0H=773uPa@Iw(Y0snxs$_6$HXC-}_zAmx-$VBC zf4Rdxcklgn?C25eh~!pv4!-SJP;e!pp=jqpdr?sYf94q)cX4UaPA|?|UFQuFMD8mk zi)RzYFNHJ?)7M8DaE)Pllyu1@m)Pe%_qmNvPi#7yI6e}2-1WSh?8@(cquu)Rzi#I~ zpU^z`3jv*?XB$tJxNGbX0m;b=s7lJjWW#3$GK2FqBn;jJfZ(4<2o8^<#szf$bT(@# zLyj$e*BAYq)LW`D)7MBFQSZ~?A`yaAljP{8yX@vXd8qXHOlHHwT@ak(zRh<-*=Og|(OvCiFO=lC0v`8dG1xkiS5}!V{H`GuQZfP8fkdZtXkH({;*v7bq zQsUOSWL$;Xweu_I(_3TED2~DgHI%Q7KR+IH^LEp?{R2FGLJPy zAnP5g2^0`O{U{AkaM2m4jtg!&!Um1|YNu&S&89U)BG=Z@k8+^uBQUBqyApug*6nmH z(idrDp-{80@7C<3NZ%<4V5_A%5d}l_iGqhBppBXbNM9ClK2pc}(y&whTDL=$s#R3_ zRw`xdqhpqwnX~mm*WTdowCUs!NVe5~|X+QlJReEKKmvtfD) zB?jHVRPac|k%bzYo_nKR_g{Y5_mnPg+bs|iNNS{e@LYij;0P43JInIH2Oap(NS5Qu zNme9|xGy8I+1QRSr_VWokAJ5g0g;550gMSuP$~=W0X(N=!b`vhsEwv`7D;6+J~nBo zxowtI&WSvwN5`$*4aBRxykN~UCvBgI)}5dDsNH@4=j`yI{nqccEvXA-RlcOiZC_=q zb~-j+ZHPRwI(k)PRwQl}zbBPBjH+p|g%zs^_2=5g}8w4xn{)hU?eHC3x#^HMH^jSeIy6J+Mk5pwehz#v8x;PKv z5WhvVk9@5m?pj95g3oqe*I5*aY{FV2F-u9%WpN)qhNVo(GQtsj1{18t(LFlCD1577 zz?i*VGpX`0rcH!$MI>-Vgp|FgGZK)KDh1|aaJto5w{BOZ)GL+@7RIo$yTgJafn8t1 zD}LfVKCkv{Q3Ui%Q`ZwI#M0gpuHlc})csfEY3s$3mYbZBAU|R0*-e%nAGPf>)3&)> z5ciE)T?Df#;!3mOKZ>az@_6X@3A_7&eRjv4ciW+Z2W|1plAT#t^yUxl0EAl$L>po` zNJGLnOb<_tieY+^(_jD&h~p!f3bu+oUiV*q#pa&#Lfi73Tbvjs1+Z*u1u{bV0Akcz z5Iw$SfV0|>loqmPT#^<@2@}wSp^+>n&{PUEMR@WeJb)qPz~3k)Q*W5X&=G|i52#!93vJJ2ow8kZs&Hp;Gzrdif3GH7hZCyjY*O&PLEq$ z#1R8;Z*j?v-hPKYbkDtZ*By7*;UkA_sakWeL+gh>&xpXfoX*%>E^pH*2(bv7%7)n} zscT^30>sxesi+Bbe*v{72mGSeMP&JkMKJ(B3wl`Tsh_;4uEpGV&wqd>B-M$k+F|MB zaa%rd!XEhSr>%Ns(X#ox?YQ6~d&bST+W3yWR@}PFgPjwLt=aARDpUNem^d-nl|?j5 zNwqIqr)eVMS+FpG=P*pe^o@{w{4vHf=rZc~ISE;;tVRpxLa-mf;NvyKsZB}B&4|2V zE%5QoF&a;}n_yjNi)3+bVx;eGCG6PZK9b6uuOoE^+DMTvWxdru+)2=eigIdvc2_lC zJ8l0i#ny_tKD*RRW<(-$2^(jZnrzC6VowZ<1&Kt0;QshV5(xrJgKub{-x&Xm?wVCZ z{BWnS^`1@VQ#M;j*r;%ec$m7C12mkJ#ff}`v_;h>2(c`-nMkLE$*B!|SBt0;_-|uP z0pStg$yi^gADc2zwvH}5CIWfId3){ZOD?wQt=nv3)10lTt@D|*Uyn9J`|5R38NtFB zg0ueglgfm^J7P1FlQumuVL9RWAVD67gmIY8PN9bm)02|UCXSD!b-d)JTkYH%UTDw# z>0c9hywL|cV8cU0qlLzdZNPwC2&0hDfipZ*{BhPjz%1mcCBjE&9Lz5)oB=c;hXs*H z_MpyUFGj-G`DpsMK4EfF%G?KE9p5XP`{`DM%?Q3rQ3p1Jc#g}&bv<2^;~=EyADXSU z#RYk@rL1k2q>;3N~qcI&sth)DZPCm`O?K5|Kh^)geJJrt zY&0Qa8IwQ^$rYL8mES~-IR;;t5&h0$7c!zT?KkkPYzf@jDkJ+~)1s{Eo+%YApUv8Y zaCSyy@|@kd?L$c31Sn1V(GiuehU(VB5w0AVLd z8>t~uQxV7!j2jaP;dy+4i2m@Sv=JnIw2C4^0u?ta>3sg&pGaWKH-J1~2cY}5W84YC z8B6+N9Wfq>dPpT}kGuD=Vf|{x5WPRe%p_GbS_IjtS?~iDUNA19#h9B97T& z!FSQQ>P0Ve(ztWaIZmW~1vs;iUnNXZVIhvD61}deJ=XMW@U>#nWWQjxP^)V~5n}tZ zOsIX(@;+S#-`Se;p>|@J9w{+S5Of(k3?Ie@E+~*Aq9H(t;u;t1l|7cl4Mp^cV>nZ9 z+)BVjlt3=VZ9-(!BSGkg0WO6Rtt2uvNE&kbRzy>nq!AphCjrx8PVYH4E?Sz^spW*o zA>&*}_Ie_WVq+W!#wHPtqY_flpehqWjM9YY5aBp9f+3hV5h5^MuWIb$t4@5zHJgys zJEb~KOY$961t4us5F1UKn4I#`V?9|AUYu#R+}aZoBo>jKIbb7n5VfT`!W-UW1?q@R zx}PXGFT70Az<6;-57; z_!>H8RMwBWHoLw=(WXg4XO%bRZvxi>tgK}A31jUpC!|~-fUCD!wp^{*NPpc5l7dH5 zlKNG*lq6{akaxt;bgIBhlY^VGVm6jZ*p_tKwvLTiKAp2tx4z5;lpU+#m#Ka_Q5f1Wh zJQtgf#)Gz?+3R?`$@xaj&a@h~((PJZ?ZY*PX_&qt60o7s0A<4W5Wi){ci+bgWHMMW z*zJXQikOcBra_#5!l12W^|n*OsEFK#06n-efxqF7{KiRwNMT7txPb|2%>D}Sjw(eZQ;p)2nTl{ zN{WRdxcpQZ?_@SD5UFH0E=X%C8Wuo;m$)Vo>lQ4f;8=|+x+WUN026=?@4_d@b?^(< zE3G4J(%~-j`))gGCX@!N!ulZC$1E35>iThua%`)vb{76Z+Diq$B3jdk+8~#fkSnsA z7O)}kf_uX>Oplh-g@@_MO1X0`u%bxIr9be)Hh1-PmK>jSvgeX*U-GsH3oEG6UI9+N z07R%mI0wLQFtmYC9wZy<6Y3&-FPPyxofBvxM3l9U0o?eGz~9`*_fyp?pqg@W8j<9T znF$kZFxi5PoQGc%S~e$;NUOSjN|QlO;F@No4uGa>u@A-C`rS@a39W-Uxgn6NiMTCR zI(DYkv1*fgvN#6Qjc}jyBt4@gMdi1uO4ZkTwjvS+0cN|zRWPZ?uyG^V-J3r2yl!KP#>&I|eCDY5JsR;O7dAb&zizYD2ydln2xZ6SH1Cht<*gtmG3F zgfS9#Oay7zt`Ac)KYF}by+i~*2!rCP9Ks{Q`o!3kMyRkVl8Lz*JOpRKLHDO5tDKaPYIwLZjroOo!9JZB}iZyFBTW!?c)ZnHG#|x1hCnDi7B8?)6;xB|525lf_XZRM!VU}*|2P9{X zLlef?fDM_QXA1Z?1FukM&SY_P{irWxjL=tba8nL|rY#nmfiJU{4 zuDkB{5yVq{-5)J&Fn_57Gtw>wmLCmqZeIn>B(uE+O^xZUwN%f?%3;P zh5QYml2@wfrZ?3Y4K4f5(r(mGA3X)ghDeH_^FUM(6eVjq)_3A?ZKNgyN%d@Th6!qQ zHKIDHj;&rG!oxI7-v9~nMsG*(VgX-9M92eyYs`qc>9-M$ZDEt7Gz}jgV{jL=V7?&7 zX(Pfkgb|Xq?j(nua0WhtkT?Q>rsbsOE2|sLTej@79VeXLzDWhm`vJujtv=-B7PEH zbqoRAaRu;&J~{y{F4*5yTe3+)McKEP)yxoy28$Bdv(ju^SLFh~m^)YyNEsJvO zQ)@N#cm_^8-`HvBvh(O^NFtwvRG!`BfLffGv|M?@CU>82Tdum+rY?Ji?YZHFcG(MG zVsjT_RDB){_#QH*LI7s$-oWZ&666pGKC4$k|KPN)Q=L4rJB%<#ze9>R4l^{M z989?Yl5aoe*A`^0o#%nRk+z*k>RdE=fOy+wnQYp|G`<;QkVF=eI4)`MvE^Yy;~euZ+mQOAk?@m<5!$kZ zh*Vr;k&`vrl`*%vre8zJW4Y>$Yv6PZVkJUKAydS?g|sr}AgjGTCS{Z0EFoCeK!b^J zPC`2x^rO0_%Fz)CYf7+fw3~V#EC`et3sK&~{{$k-2|lhx2KgP^55hOs<{Qe0e>$tT z!9&O!v3n;nn48fA3O{vihaJ7=1&*oW8N2+171ZVgyr8x$rIW&EZ#}g|SS*S8o-cgg z1`%6ui}s^jEV#k^P810i0W~DmpQ<*kDq@TVlnp1aNG)}GcB0Yp_>{}-R>0XOAPtGy z*JpZSddDz*Q9{xMU9zW|mk6EWGQ1y;m7BxpJQkHQ?6f<06Q62HI);s+IV z%>iJjIbTlwpwwtXr*!~kU?dyyvoNcw(-f^ z0uXkp&Gk2uYa{(H9LH$@GiUG=zmUQa{HEeK`9-@K+z^7PjOzpFgL@9sFnyz>xop-p zu~%~{E)vtV#SK%jn`f07NeGxM4C%0Mwv#{>mf%*>7w$wn#%&V)w zcpZjqbf$qK;vbn$fsx@FEnOFq$hhY-I1BkDsCo+XH1`n}glHGSJQZXFoFpK*Fu1N0 z!QxJja7Dse9m}foqS}l_FkF^JkyYUw$^x{o1>qdNiy#VEL;Y5oEf3w36dYC<6V7JC9M zz#3wOCJ~~BLpi&`;8lZkOHQajWtF!qFvA%;C1is9LQLi8hS|mkgc^+P%ECgU zFC^X%K0C4Gcdk#?cmC?_z-y>`Phd?uGx4}qLcejImw`4^LIP)^Bgj0N&`*4Kwq!m` z!}Rr>W^+kjDa-}}XPR9*&0f=;mX8%Q^>O`%Mi3&$D+8Z!It>v*4JM7BRgHUrg$59A zIRpjgWmT9(a0z@MA!y(ULMbsFNx@?|2#73%^Tmex%<*U*W0~dDrRiDn6`1f&+B{q z+aYHS5xQlzTNGJ4UTe58&CWBvYmTlD(H&*6kur5z6;@V6vT46Ycir;Iq)iobHlEEm zhGDf?(KVOqZ549W_vyyB6r5(&xLbBqPpnF4Oj#g_AkX%V@XCBDVFW)%NXPdbr2v}C zVH&1KOG6U*BqV?W$ypRf!&lO%4|0)4W%u0?62h&Jm>Jkzy}=)kg&9cOe2)(ck}MJ? zi$L_1(ufr&Cag3zZnL}gSZ;LOlG&o=^j%)$ir9wn(x{DOvI2(@_fM<~RT>QelBCyK zqi%I&_dgV2Wg!cJy4e|~l#IC(Hj8>7NB|N3mF&R^0d}3V3h5+> zE}=0n^)dq>?ML)J)CrBE%H;3YHK`CDDDIj8Vxze^UdJ>9o=cUgonEe5OT=+iQhsrE z&Jy{8#dCQFW?vD`b%gXPJ{-|O5pzw5t;scm*_!8o6MP_$I!D?4O4T+4uJ=Vrz|I8X z&u1fh(t&;()svO;tQ_T<{(PvTe)H?MTUI}Q%+Bn8&_>24{nSAk5Jy5k4G87gFX&G$5lL0S%XI-L8v0UGuMn^{Xm=Mnmv&s2qj?}`Wi=IAF*C5&5kWp>$c1m zsuG4V5y#xl8?H}cOlKgW8sok~TcnZCS&>w%F!(5IIJsGvg)~@v*s%-C3aQ`kN#K)^ ztuc#FB;<6%*dFkN@vHa5Wn^1btT-)^FHGoY2Ei{D{t)AGQzm1Zi+LN%r>vOa{-LPA zWVf&Lgy%ID?+8a5IyZz@qa4Bv;k;v{OV}tDsF&)b@`6iis}bufV-_byFYPvw%i5TT zYc`3S5vWGlL=RPXtV-0xVOQ_ede(AZQQkq6V}7lwur;A)Gb0?$tGzf6l;obnG)#|{ zh9vSyNbWxqnpn0;ZeZ}pAiR)Rp6)qkK7ReV!A@Bm=wB3 zA`nrw=2~}YPX-WtPZTx=^y5NM&Yh!gAAd7AY02 zmCssJ(r!gyvw&}n@~KMI7DVor>kX?k8XgA{vkCXZ$1|5q*qA1ZVmx8&f}>!sM?=c{!4DiW@TY=wqs0Wk1@o?TK;t+_Odcf845nB&m-&8D?`Jq>$}X<=Jh z!ec%ovL%TVzrl487_1stHy}6#jqQ?tE2Sh9>U@4hym>sV8QCn6kVXQ25P z%vdoIwcW+M2rJw5K@_q4g!>Tw1`Qj+BQYEsx}G4*u>s#pxA17NJK@s+ck?xbjz5j< zfT>tG)?8!g*AQM2dzVk#fm5a7YW9_&z% zS4`>LmtDpPIh53w5X538Awns(6c!!%5fmO`%`rY9r~oPj%MPT9)Bf=jQy z07KsaonQ!>!x2fy!5r)Ys)HPw$`A(5sq&RsuMX1;=5KU=U1ht~yYk+4aXVKA7i;b2oJH5%` zWxX$#EmAC5SA-A8^1dnpIAR*fi_EeD5)CB923R4Eghj`xoI;|F@a+i&l;mW#pqzIz zb#Zdqisf;E8Rv-fK{~02UNOTEZ_Z8A`VzA{34Q1w1Fy6pQtb#tGf5zA zuj+SiS(P!6L>))@ln2s#xH`Y;e*rXqOe(eIMLY4}gSPLsPuV|z_=8pxp>DMrw)@&= z+4ifRY2%x=*~FG@meKRc3foy6pvR;#Q^F7@ljl?xX)Ns6X*-{LlU@6LKWNvz{;l?s z|Nh%{&FkM{*DIg%f?I5S`yQLvxz|hbSZP2U$pbQZcH;9;dpS%`R9clp232y)3sx9m zi<1)#Cf=h-1dbTnSXJ8Hjs!xDmAJ;a1ZOZZ_!lFD^Jyf!hafsBM6edN=?a7kLwn~t zc!@YNwnl_QM4I59X#BbmQr(wG3K3x?db-bJs_>NY?W9uUA8Z6Iz#pPF5=I9SI^wJn zvZnKNY)s=hCJY);T~;LkuXI+eBY^Mg0;`bKURPJ>duW~v5h6z7jz!=vO@X!$JYff! zsLJgGR>C?frlGOiBcnEfJdUSh!VL-Cx+jf@HOJ9z9Xuphc*;u3g?LhJ559HW4&DiQ70b}j}+@L+-0-Vp4AyWjRMJgR6 z+@f_U&j4-GVMHWG8Gj%hzR?o|Fak#;apIZ<2W$~aKwT_WSOoX-a&u>-?~z1O0G;x% zJn2$Vq;JaoGVxDrFkz(9*3T8JFF;#rK)w>Q)G0mzv=)b@HWJoZ=J zT9a5HicA=QH6S`j-n#k^(#@X}O?`Fxp?x;Lf1lm+*B`Ru_up%+X4BGBGq(AvYpuL# ztBr5j?wVI(Z+g&UH8RpZt1Pn#Js(}ewZf_knhA_wbP86}H&td^VR9qxPIP{HT4~ul&A!&u{#1yWx%hk6rVV(KNf_z0_pS9>0uyVmMx@I{;uVcur3 z3;5)2H0zK_bdefI?wW$xmR_ofoz^+O5az)IE3F=+1KmcMvJYC8P~B zM3~fg6IQr@3bEAqjOm_EQuQ8R%d9UhOz1qw8Uz(g!g>_^77N0)lt7sJR68wUTgS29 z2`V_EV=1+Yrxfl1M&JU3a0&4xGKJ$%82(o8^sMEin9ysw&j^^fDxB(CSAf=OcRU0U z3otQ*gK1E}QYK^LdD>0&)XfWeWtBMP)va_-eXnbRK}6qRvk2k?V^{}2S$xy#^&I<# zX_y`@4N2rzknXtS4%aGv?sK2BcfRwTUp|riJg7MH1KtA30I(tiq+a#dW(478u?_DL zzSsLm(E==i6((CJHp&nv#yQ$HRxa|YFP)SoCCLlvtfK?k`i-Lrj4kZbb&y6!+;<32 z0ZTElLXwDMh6K!(i4a=O^OAB9-G+m7Pqxqs0Gbd8Cfw(c`vO8;f#aeIzM%V7L?*kV zCF_rtExBph%3HQtactZQ*_@4U+H51Kyb6@nWFycL0OL!EMnRYJJ41@yr%501KgZGC zcl1#qC_4vHci-*CK`)dz&}IFv3iB<}y%S3an_gW?_xh21YVqrP_4K8GuS=YK=zcr? z;C;65Q=hau(Kfc5$}O9|@;Vzm=R(ViIHvMNO@caDz>M=fC)48mkEWAn<=PSbhV-x7 zczgO0{HNdW>0~nWVk=QMNI$zxB-Q?q{*;~@&yT&xcbs#sopbS}cG-(xY0voHAF@lo z_sw?wPyd>o|6OmibCowe_hu)TYcXEa6#?48gcVElSmGSMvvQ4Tj3fd*S0f~mgcp)%S< zuE{Wi%(5F6cmnpJStOP%W^zU)*WtH>u9cRMoJ}Szr(8%W>zZin*x@CegjnkODlXc( zf{q>4cPV|bj%izeSa(=7xvqMz=@{R*KxGEk!56=e>IRW>Vyag%1X4!`AHsr|CcAs7 z9nhfSj}E!3H`}&SYuO^X(X@K2>$riDzoI5-2#W}#7K3a%SF|^C$Ig7*=PP9y!rpzUB$C^`HOqf3|P^)^D}vKmYmmidVeC ze(9Hf$tsn~#t~mX3Bvg1H@|t~(^r;+5n;eeI^;cXvBU=RuJT60Gy}k)S9YlgM*U@osEL_2t2W$!^Zk(z^d`7%wc*UF% z)$#aW3Vj4G{E-NT8%U9B3j}@uGlY~CjyV8apu|c+d^z0*Q@6lL8`(AnI8i@=Q=6>~ zJ8jGAs$0vWHkHQg60?quBLoN`B?$71mA>{k&F`X9XeG=a!zCYhE-FV8%oH;^uU<4Vn;K z0jP_21D(qyDYyH+szGT1+LeiGO?7MaT6)v8nQX*%k0xwWHeto&h)wL;W1~Cv*w*LX zVwZf+o9wFBzs1h|&Ntin-}xrneDllgdXddNFSyx8w~JtIe|+ubqY+GA&rU;fIZTh1 z@V#@bojNcAEGA=hb=L$6aztn}{`6f>_yB`JXl98EWRo3N$lxT4OCXSF3^lY2zdi^m zHUh>HV;NG%?k?O%(BhjXCp!L8`{@hPYy^4FrCW`njxM zUO6w|D{&1G5yvrs7O*hz`xDN(bj=>KNW}m>CK>miQN}+9la7;79Xm22DO-Spe^6NY zDCrxCTE`}%Z2yJtjjk2D*s@5yI*0nOB^cn(elby%J1)R4s$4UroXt&?Y$~78eIibX zR|JNQZcF47A0m-d9moFMkZJrq0qdN=972f(l1YThQg*kwQ$y8_db)lQ?F(;X9^hf~sIzPrZtgVTJ;P9+`oy=s^?mRy|M?L#8`|{HE%1ol!+08b! zdzYPm!!7o#|L`Vz_8Wf4Uiypw)2{vAH~GSzT`#!VO51i>QTg%G!%5?STn-2(d8oY{ zCdL>28~nhfgH08{9q2@@RL?|_A86%8lcR5jJfeqM)0L`(GAQtMd zX@kTv389$4+a8RZO$r!?T@5@0*962(_d}bR6v51DTrh6e*U=f`j~K$)xa*I~*3z}P zAC?P*ZHS$QpW{n9F=C?<*hX_ny(YspgsKNZIOG!{*UiKFE+d>mqscE^iq_fwy^2C%2&tTcw+Nul2F3_tS1S=<85v$P&6yE4a5EVYw^_j>X#HZ}6MfLrv zN3mE}yNsn!La|79eu%It!gpLg?Ilt{^-_bPnTIKZ7ieoq`#E{YFn` zW7o5v{p^i*!$kU;lgPb$_gcAJwjclTAGZ&F@Pqd5cfZ?y@ArPsGMea)9zALw`p}0q zj(lpThZD$)FTU72)+Lu*vhmHAkzffLoREZp*}&roA`yyYuqqk<7Is*G2!&xxCM=MS zce1GguCE}E#2kaHkk&;=1_Ph3_&zI=G>REWpv*!XoXsJBJpKWZVG#_V4tRK29>5Ti zCD0+@tuNkj0D_3d+~ljGILRTV8LPcvW`HLh?1DxbR2R`yQHX`s<1B*01(>9-fu}y8+?h9h@R|=j& zp~ZL|gd++cXm_-{n8@{PL=f@)!UX|MCkH~paVPL+#dA@cM$}f2M^@vrNXSiFnk>+K z;42kY(ue1>uEypsJY}A(dVuPO|E!*h^)yk`MI_%D{;l@h@Bd-D z=*E}Y#IAE}?5nVH{OlblhUw{-2G2J+K4}xvTFEJ%YYZ z_%Tf5DGh8kx5EFBg+IQaaASNjW-+p_LS%)N2#0K)Sl4w{I&~et>L&H^RNOU=Q+h2y zW_7K$>c_4z#DV16gb>4R2q6zmC*+mr65wMYlNO;)2|7otrTS85$RhZQe<$W=1V@h> z2`wbXq<(LromKsrJHq@y+XUgY(P~3SP7v=_CR`>#eSGiO+ zNIYhE<{cI(_&4|c9s$PeHV{B?9YOdH^j?l-s(yU##q0bVqq1o(B6Pf`-Tj=_n0RMPf@$l-V{ zXQPt7$3$?(^g5Lj$;oCsbP-ZMWDo+&d2DOg5HePjm)d<>Zg#BI?K+VwihPde6E;&y z*<>MUWdV3jlR{4CWg%UFzsia!NPJxN!SqiZ0|jfWRBW}~u~YjWwBvW*X|?5L%W8s~ zyW}dHnB8XMvs(q=8zy+Yx~X5+$F0Ck{>n}yX#z&i2Jq8f!Kq!ORXI#*x}y&AeQ$YA z%mYd;?fWyLLCJx<^OSg=9P00Vck6I=sN+7#uC2jb-q@yN~5KF zn%X9%Hc$BCfUb@u6ba7q1Yz&5?X)4)uQ zIo%S$6)7CJ=?nyV-Vu%nLDH>DI>zgzTSP@F!GFfCo56K`lo7O#FZ5Ba=(@{lW6atm z7Cefq@*c{`Tm$Cgd+oaeQEy!b`~{$xbMOzPT`3jT4DjlykcLF_shL9W{TioKDz)+M z3kg3yQZ|cc+*2nF7R`_`!#}*UqJjK!&DW2VFe3mam}7A0X7`3R#8R2>Ad7&j2dC9% z{`A&0mtYN2qK|DoK}a5ESqK;d-if7>PIDi;N(cWt0h3ND3sg!1^kOn)=}0gGB^*Ko zk~(3KA-VWuVy4Cv6-?;@6fO!1Q7#pwFCfRy(us{;k%WnB=H^@-2N`0&ZOG%e2+gPn zEK)B!)exN5HFxL|AYeKttdLe&09*m3pwL#<5_Y<|Zl~*AJ5y~*%5Q6;=<2!=n<=Di zYpGz{3I*Gg%vezpKIU`)7U%g^vu3qg%}yOZVyBNC(LFjU^qOVT87ptuX1UQR)kl+7 zrDjW~Put?DlOmQYR$W@LX1#8`Zc8BE{=69|tPtO5dp#2p^>!ku&k?mJ4~Sn@bqudg z8uf~H0TPNvAQm2`|L)IL+0W;*+LY@@0B|NCf7t$mKU2){2xRzrI+4|xXk&=^Sywq~ ztkzV6s+*%nzR>{C23Vy(!kRo27ynS?kYxHAFP*Vnopeg$n0b@4reRR}c86dp3n zMA+8^<7Tuj6HVVrJ9b%eaKT>o@gf_Zt=&1P>5c!93q|fN{b2Qh$`V zvoT?XQA0v-YvCdSffT4BgcDP-C!!eF7{e6?p_Y3L&LVDPw->g7P3!(xH#V1&!jZI1 z=Ovg5r-(IKA`2_g#tB9pr#-f#%GcI?S{ehmnRF%SqrGb=FSS)K9qd*S5jsM8fuCS| zOV?=W8jGrTRj;*P#Ht<8526O)joSPJ_u35G)-tAjEK*Ba0pV_tKvl?b&>$k@qU{8u z8I!opu$>~lnNu43#Lf*q@JcE_c!3~{t0q>Vw93a0J?4L%Cq9^ES>LreS)- z6vpHeoZ9WSefG1T_4k)we!0K?TNC6Dlk>kd-+ue;u4yE*An5D_fg}wG<{)z(_aEdh zCAlA;UW0Zq5J$arNtVoKkNhP7x*=RRLzBKVoNu#HSlQJ6&y9t=@u(yT%P)z`0`9CL~?wMHCa&6^kyO zwy20|zu&P^anuT>QA?*X%1JBa3vNowXmVkK!K|~YdbN}*DpO76M`JR-Shb~vik&)j z$`GFLs@F8%SJx81LMgI)aA z|7>GdKmD}{XKPQsQGKZpz@`iAAB{khbe~B2J5eVX|BxKqIS`JVy@)(A7FPW=2xMp- zaTyuWAKEkU3-j9^I16xC z)Pn^9%THez5)+=~6Kj?i(R3enMu*C%O9^&@?{-uD9W!^p=7@FHsYg~L+eLEq2OE2@es^-MuPHY|9_^4-JFt2j zHzHr~sIsmxZY5|F!U(fDZcL2N!M3_ACdAspO860BK}(oSG!EZ=i~-HfH=5SVF-*hs zD2Y+~gs0#6o!_zLxVC(IXex=B>s@(hZERGBbh8JB9ky- z00Qp!rU9;T4-R^UK)O$)jzjXr-_ZRe1unuZfq9pz%Fq#UH9(_0J_= z2RWUHIR@wLw!X(#5{z(Dt!_?K4g6<>qkc`ce%sm-Hx$)jqZbk{E=$K4p%C6yjHg}?T#&QJxUl&iTtEg@3@z{DZswlNG9w%nxswM&ay1F7=pmCTA)#kb%W-3-k`sz}B&GQaf z&sY-|0z;sb0mnI)NrOJZQ^Qvavw2Gga`nD`^cCz(6uJg_smlnruTfQV=BF&9_l0`GlHP{l837s;c5p8xg5$m}SZi+49=nKT~V@0f{B9ypJ zzjjtC%=ORp zIu6s*J3(ORk3}?mB2Kuoj7jjzvm1>_PAV=8N+d**0+I9(WRN-rr;=l!UKtl8cQMge zX5pW2wxB+U|29YWHEt1ZFo)N~?C>1~KRx`H#sZ1aNQj-4PRlAywDMR`h#Jvzzv7B; zrP^v+r4@WB^Raag?#%+41cVF`5N)LJq9(jRNM@6S0a@if5lrv89Tt(SFlQo_av>gh zn}vZzcI;8T5uaI6U6mkO)%{2iQn0YEa-ku_1kc#UcM%MbxaP>_MFW`U3l#MWSl|{EovT|6(=a`13ZwK1 zOsvX&&wJiug+jqsZ4Q9q-?7;p5 zcI?a*Oxx~a*5>k>xDruIc^jc|(8S@Sv1>Jvy@p6E zbyu^J>RB)w;En>$RFK zotd{ry`c#~JY$aH@lYO~Hripdy2OF2 z_m~j%odD@T7QcQVI6M7^c0$V>7m2K??N2qjw$y>7u8Tmgs~ya?=90EW?J~;b4U6up z@pK)82u#?lDqYom@FQa}LuZYCqaFwW)=b!GH|_NC!|o=~6N&Dto=k|TY~D7XcadH5 zqLqUFBS3?F44?t^3clthJY?VOjuG&@F5*}bJ}pZCtUw?klM;#-BoOyHJsTI{ z9m^-(zc8lpfk25+jp>@*wraW-*o4U*;2nu@3?x?=ECDW~vN7(8B9aM}wcBlItZQ8A z9w!04Cst~<$if*F2+bBXpe$^Yh@8&WVwHN;PA{CclSfb3(IW>Xxwj?# zipEysg1!o%`Ob;5ZttIIYkUUl$~6&p0wJ@YXkFz-12>|Bk^=9PAULfyV_P#cfeE$8 znkLDr$YWh?g~_NU0=ckKv6{$NU3J@c-#wlmR6Z$Ewp?Ad#mbVCbcmcT9wtv^%w8Tk zNbezqJX7D!QSS+XqSC7Uaeu(ab;K$n=a9&Q%PV$psbUM7s8;oSv&pDPWXg7r7F|mM zd1ql1f=gO`Coi(cqM9|mrw!_rnw>my$W9zOXm@@3)3z|bU?Z8VttV4@24j}lw%bxO zn{9gcUdxY-dY>dw)*$fEUsin)LP1P7r$V`FW<{K7 zMH2F2OTP(2AY25}_oxo^KVc3+tmBRPITjGK)0L#Wume-Qr2 z_&`JN{@hBCQO7-XY`t~ixTgEpM5H_>CHGWr>O2S?yUqv-ETeIaD^NVnf}23Ke36Up ziA9F7$pSpwSs;06AzAc;Tg-xl$fai8s;#O>TiaJ|lb3~qRo$d60>@%PQq4`vDwr1+ zf{5(_3j-#3UJ-#oOWGr3fF8U>6H7wSM^nr8i;KE9KB%lF_pogvXnSLNjRpdZP|F;k z%eYooHN#34AyR~%0eCV@!}MtBt3o1)^+>p$vvajt-S{=6kAM8*_A@{8Ga7(#`-NZl z1v~%z^EZBZ@)MduG$Che4fN8Q^^d&YA|LsH*`L1Mddlk`{h--L|3c*R1J?Z9 zXRLAZh}DlDcT$NdoW#(Fk}*}|XXn0p0t!qPIB{bJ!FLCr9SB280E6jeOr&Bele0+? zgn~Xp$Of7yatD7neP&S&=2gFwOS%Fmy`o(v$7A>E`hYEP7mgDyd;GPkfcsRdWrvqm z?C|ok9j{jGl={q)`qFZ{W5-UP5K%d0haTEzCr+NU!VA))C^Y)5JX)08QR~9H?LYpXMESF9B?h%^DG~uXB0HvFOa8OrU zxn@Hk%FHnUP}QrqHsXs>m~4EnZvp?Za@DnhnEf?D(Z;H6REVtk&==9Lf>TBJNzcKa z_S8LyMHd$l8!3<5NNG&3WA12wwX* znETi(ob{V55YQzlq(5stP8STCnxtr-hVHwd_Bp&#w}%$1cC;x$Lf;Vq0Da?FCTY`Z zo22@JCzWyK)Vy_hE)P6t_k8vMMc`z(>3vqy@z@i5v~gYa zbzDH)!s3LFg+3Z68n2X(MKTE3SR)*&^dH9{UPD4D2P(X5ig=JKY06ToU#im9TtLd7&=hQJ?V{Uv70p6j`CJ;tE^VF@JAh4UrVu!dN$pt9+pr zqKz6yjvvbF!ksk{bI2sexd5z2a8(wOgU-u^4_1$l^ z&9{7uZMx-EHh%NBSmx4aIKfO#&*^o}wV33!`IFWb$z1-c_u0Z<{;8dO=dap{cmAdw z{lL3zHW{__L$_OW-<_6RK4Xa$Wr&gp9y=}+Q<#s~DlDeY>~xZ_QC~%!^jEY~NZ3gE z05#xCjxWv&&;_0lL=iA_hJ%DO8&k&rC!e^~#*&zPS-iu&5|&F62s>>FK$Dq4*8!+k zmMgY=>WrNf5k9>CAzP}f*iv=LGI`9?NzDj?H%Z2WNe0hP))Y!F)qESX$>4aO;DseXtoe?=)s#-aM~UbqU4}!W@EX+XYp8_YltDM+m?{TgjpoeWU9K3j&G0&$vSfRF_mjQx~oYcKC7X zmuLy&B1s6o_=vZ}0zLS)ULk1^H^`lDydWHOzfASlb=?bpW_&P-pNjyF2GFBY^a$A_ zLMn{JYOyHdw$N-#zzt@0H_LM`%A(^CF4+X4AbfNmZOWz;_VU)NN(c5pj?tE~3Y<8b ztP*FOfp=IV2-^dRjIgIR8d6~yZYK!3tQJSxyP~nqGvK^vJSGAjwUlt5ut44(%G8z6 zLMRx}RN}V7^>xZOd^$U(?a=k+i_=$yL_Su6p#7)+^q-!x1d;?{ggBDEk{xKi>?DkU z1fd5)+T{=b8CE{?heWw5sd!{!#%yBRB9k+gy672Jy7?70cFW7HbmPmd{Mt8K>9s$g z?_O$?FZ^bky+yxWezlb^yV{adL7R!`e6-iHwR`{Bx*z?3b^hV~)_B)%*}@(-ya7}}r+_AE#Y6Ym#J~K5C0FKy z))C;+?;EJ?AX^YPPKZFBTh7^L5y6R6+{Sd=L@Z)?g5L`GA_6v6IaiJzwN;UukuF=B zWvo;lw|pvNqq)2Q4RGy?giFTemO%7$ zvtg%1un0b!)fG3VbGB92pGc(KDV=A)vtXr&YxB6aK%WGrbEn7%nt=f9dhyy0Og*d~ zWz{3nKYmyPA1=t0F6He6d1o<=ueKCW^WLwc>-oGvWjI)wc#vzFG)6=$W7)jLQd!H6 zP22dkT{f|Omrd1amtS7(@CVh*Ys=z_41vGR7d0m$YxWdb5Z47 z(d4?U=Ya3*Fg^W~x{Zh7S*$m$DI%E{TSCZ$gn>6uHne<jNerWoW1)L!|})-@(s3l~Av8kl8o@(j6AYq4^iV zRefi&31P5=K#fPDOswd2S@^op*7$1@T|wkr?TQ8#3lyu|HB7zEU=(%r5KIz?+3Cj3 z<-;^gkCH+!{Td}C%pd!)AM+J%OfqOAU;5IQ{;NDcKfiItlb0ZlXix_}j9<%i_K*zN zscBb(7xT=(Cxv5>h&>dLCR-#?Rsa%0rGmtZL@J^g8=tkr%$)L!jbC}S&0c-I?YQ-o zcFs4y+72!(Tj|>8*`}LcX45ynTvM zc_sj*uAEdxLTC4t>15V+tS_*OjgHxRCT+b^N?<9- zR9)AEjy(Y;CLz`pvJE3d5}(Eq8qKwAK^q3yqb@84!9>GELGWza4}u#{q793?1No_1 z%}&%RB9?6%&!%jq5O#LKJcQPxrTcI(NGVzhe-8dUzCZ{)j-9?|=7QKF!LyUkV5b?* z=R77RCzPu^M@S|UOiv^jQm(5ziBwyORHF4w#uAo_YXVTlmy(szzVJ*%@_XxzhY8Wm znWU1bv=xd4D-?=WoSd@B9lJy__t@+O7uohpFSY3{b2hVOyH#3icI5D3Z;O%DjwRDs ztEj9;^(+@k)7Bc@WR*nG7Bu4>d}zN_7SC8q&o|PpSWNwo?I{baE+w{TJn7n0S_jPu zx?nwojc1`5O$F5>QkkPZffA~O?dh1bD*cX6OdfVc<@Zn`!}PRIkS~vgtG>Y)tTx-~ zLmJcSkMwQC4mT_7I0%!k7-oEHT!SO*%@6q^Bo{;wfrRmZ=~|};)3PuH{KV=ps_{ON z&Dc~XtM|l7ln|uzz}P`~kc2Qj>sD@(hQHCL`SX#ct~t2ony%l~udBi{FDHzS>*!Dx zo?#Bg`hcdAF#vwYbqiwbVs;0+2-Sr@FxkU`t#^e5!U17IPWQoLGo?(LOowf1iTj9l zk%e-qe%L2ln9l-Buz+HO9Nwc5jp};r#={~u$ha>SRN25)g0cHTA_;LTEsaIJXIov| zn1o(BUf0nzxHf_~&+OFvX=}`%)YXUE{SDJ2r!cC%Mrl=@76M6vP-4b?qzu9QMoW+= zKmx54aTwX@1)#tI96-W|1H!tAK>)}rgah~>VICbw*r{u?XZ_BWPTKBN0%YQdzV=P%Mwh{kPNfR5R` ztMas0k^V>Y8#_~|PVtmQQdx^8M4+;1<*YuZtuMmTizr({b!Q?#BZj7dj*Hz30x43) zUf$}-Da{1Y4KuWB#{{BGOPGfMO13Vms;y47ns%^B*r63CcjI}qrDdClW-L$33V2!A zgIOoKVeZjCA1pirUh#4CtoIv_MDHQEfqJqHW8ZW5InYqFi+VaLH-Uhev^YPdi7Bnj z-sSANlhr-5aWWbOh$)(km@gJ!VGb+FA!004z<)C#^6a!$7sF4r*=6tXj#YHy2Jq(&fIA>J(;8tWwqC~+G7p*AJ%_ozV7f6-_!btu!kDHHxSOKhS{q!~jONWfd zG;fHI2`!gIoK_kQ52lUjY9g7k84=o&u9?>7xY{+YNyZo1=$bq^fSjAq?j-yjA^%Z* z&piXU2k9RzGUSOrCM7fqn9`W^0uko;K#K8+LZ~2%Qd?TT0_23>iK-k-7LYN*f)Hw` zr5v`9tBb6)t*+0fYYnSt0%_|rRIQj{n@e3wO|Ch}$uXMJiCj{@jo3sXX`_1YJ6iNR zcDh}&`F6|ww$P5dF)P%JQ=&6c%9*zrF@Yva55sD7ad(avtDbcX5apY+^g>i4Yn1?v!i==UWN#=LLEDk3NX zhGr~-M$Rn)Xagad1k;uvss2UZ@&2P95!QUGKOM(6Va%<2BnWnesYoDVPkAUReJ~sc z%;0(v+;lMMqQQe0G9DS_Iy7LiPGBW70$YXcS0!XgK68^XeV6b!9M2*Z_tDhY<{D^D zi_}Hureg`!C#CV0uu%!fW4WBo2*c(|CA}}G{BezE%;74F*NnMAL|XMtsZCrE_C-37 zN3{K+{P-&dcOKz_Ug3IRC)iK)3l{VMsR)-*eYep>8$?n#qIy?EfR}VEA(jZeg=sq| zF`($-`3zRHf2|WdV2~b3<9YV)L!ZQ_R$>ec(-WMKbdjumSD z8lRemfP>vZAei{RU@}4Sbl*FHiEm%$$3Z>?j1Vt@Uk9)e06-8~wY(xJ8uLY?+ZGtM ztkM!N5_U%90lMnGeh@4b$iuRTu;K#<`3W%M^0~E(Q~v4U361ihLx(({5ZEs1*j9DL zP8>LBfBSpCWgmL`FWcY$-mlpofA`DnZ-4Mx?XF+{8GGn=f6y5Cy+ z9};lu{sKDy9^iwVqy(sF9b!0wYjQ~nwDXeGOZkG83nd#biBJlhlbMXzQd;PrwDo90 z^@>|-J!UmY;T1{fOaN*sM^b_T_jIq8D!3woz1Xc=t>3V<m*bn%xb!3B(AoF>}oOutVfs_ z2Z}IkKAg>@frhcAe&9lZp5rMA0>^4KJx9WKbS$Sbmx+;?ihF1x78a?>md&JW zQ#xaFDNSUkTy%%F?m={&Y$|HwB9Sx7oAPPfrt>!!vX&Kz#@tRA75u&2q^>$L;ZbhP zf@qCkh7o0-%v46I49Q$rIAaG6?zh8-4~S?Ux5Eb>vXe)T*pXw$Y;kePs`ZvtCBQ(i zhw15`=t~G1QG63!L+B!&6B-0Y7WuL3R4EOaWIQoW5rcxDjDH_tr@#Uh)i7Q&IYYY)oWih>#UD9`lSzWuhMxg(bLy z5L7*;aftXtShJcipD;i3wU!;L)by>{LSwMI*Sdr-T$sXV-@^u_qFTncn`Jl)L6}D% z;8>=rs&7Z^(KiHu3_5lJdVwGdvO<0Jf;-8I+6m2NN@ZeUCCw3b{eh;dt(gFZX_y`( z(XWQ-2~L2Zn`Q#t&`=GI(M`w$fT#=@x`uIs{A`SU9jk}70Rj*$g6iUX*3}V6p-9{u zgcfXa@40sR!TUX?Av-HTNb8c$>jDmZ(*{JvSMTZ?K#fC&&>g=W@Po4AyEjNkrmgbi z=LsXL*6uuV%;xjs7Q5~SD}L+uS@xnUtY3Jx<)${jGD-}r5I_iy}y?R)$GXY+se zL2Dm=&=w!O+fLv2IqR%;T`FILX{wyT6(E?d&~7-D%yx&6_b*PD-$Qr#=`-LSd!L7bXWUPH|?_ssIK2}ieGMa+;?f7 zxSBPQTs=2Xo)z)sd{#MaYd=OF#mPyLiV=Q+>u4G0DnieY+sB+vsb zJYxlkxut$z6KI_gSz4@zK2Q+BLJJ8Q0^LT0g^(Y0V>iFjr+jBE{pv!Teh4lRL^yy{ z1x#f8(`msjb!*p-gPw?Xd?w*?fd&tsO2z;POq2!sY)*ucfa3beak47`&4Zfj;(7IF zOx1n2n5bXtf4_>#fZuwzyXyDAmy$>hzUWYbm%g>-cHfR`JRhw#?NqgGr&ii_M#9vx z#=y$Tvc-#KkJ(5%QLEaST3f=QFq-;fT~d9~$U?9oca+Zwp2n|R0eGuo6DyPRFvX`O zOrvFF!6spQR2<iy5IPFjoo>-2~|?_Vm81-4Xqu;XwfAS9d)LUO?_x{!|+UI`# zXYF(U<7e#P2mjRO@4wql+;^9qy6wMQ-DI^{_1&7u zSuvH8p=R^(5SHw zHd;c0YiE-&D{0)6(s3&#= zAwgbG)a&kYw65_V(Re3VJN05kxj?~j9Xv&2i@Q_!>$&eF!PdcYVp>iKuO>8BM^h=C zt2#?qBn%Kw1au}uT1(dR2D~&00MxYE(;m?D#@0u>%1AwN^Q4u&m7i$nch$NE=tJ+e<%jOK>VXHXa^QX^OE}Q8ay+exgjJhp_S~<4 zSLH||WviMzy84bivxy6t7YNUdm2KFWXE`&s`G&lMI2lF`Gr>>#j|hWLrSY%BkQV<}1$C za<2POS$J$bt5wy5*mFEfzRqZ(M4N*nK4&;t*85^SW4V|n2Gxx+W#eJ{HZ&M|+&&p0 zSU^VUOY}QJj}-KZFDY6iCOR~Vs+f~bog%?Nlc^@2sP2znWnN`vVlHUX&MC9diT7nq zVwp5VIB7XTm*{)Uo35F9oHQVfk4G?v#PX?~0{W=;I4Od_n3Kbb$kc+!)R}t6D($Xv z#}=DS@83y{QE&wfJA1Z=n2{PI3;|sbVa;)kf6DCAC93BH6VFR18LOd*l!F$Jeoe~i zB_m-D6FH%FGAa+mlJgo6SrIBs$6ytA;GSSGgN5B?Rz&WaB8DChmJ5pDajnrLdxB?# zVF{7Y5tVtwmUTS(#j?ioq<$lVcXWLgVXPn?l_$^^^K&VyiXf*2SiUx?i z>eTAC-T$^SR36t2FMAxqso+3>_z|Z`NWS$?;%AxE<#z|$(t3{0&+AB zYJ;&&TWn%(i;XL9x%?Tn=Y=AeH^0QT-Egbzea-jT*v`E+s$3S)Y@RyqU&G!HA->@Se_`mkxZ~mMu|LvdK`jP#%dgLL$KE?5cIbw4J?ZwQ`qNQf5X{#*( ztlD_{XxYx47_%+qf~7=|q9RCZ0$susxt1~=2<3<-juE}C>A9}zJk020BBGlor)<0O zbgAUe{QTK5+cQ?M9U_j~B~+9|_HueIzJilyr%YI#u(MG39;f}B%2pJ}7gA~8k`2uZ zdk&+K&OqdFme+)VR&k-#uzAd6jk+(sAvDs68kva~k_hoc8$x+t>07jkM5m}VI@S^i)bMa}29O{avl@I5mlQmr z4C{Or#&8^dmk8n%tETS>O+_Sxst6;SEwI3`CW6%z(ZxLojXfGu76=VU9@0u> zGT-dliE7(w^@hf0#Ktuq*)=PxIx&{fv<|ivgdQWzQNLg%!o)*IcR-Z zd)kj$~C*}M}OM(e(U$x+_PR_o1Xas0X!=PH;AFm^{o5gtj;bE;XZz2UscWCvJ|DO zayK|eAACPs9oWXdsmFvuy*9$XXd;QIGE4`)|0@!{z{}?cWpHd@)~60`!cv_fD3C0i z-ThVVh8eXqx7kXY=9D+v=F6|P-8YJ4-tc1EE|PiPzyE%lyzo*Ro!x9xd(O4)siSuI zPkz^q{mJjyZEyN__Rnwmc6;DAf8OrNzjaiYdb@6|X4R$r zO@*9IXi_LAA@OQcJsWnONu{%v&K511%Ug{7rA72s6KN4icGiw)5{Oz+L~2Y#iV1Bz z8?(t=%BHhfo6hHLI+xXi6T+0BJs~6rD?W3YJo#=EGAiOao69NZJsuumf^dpu?g`I+ zO_PEqzDC39&9)}xj;&~tU1H%&yJ?kX%eO-FSdFx$o*CLNXc&_su6EF14zDK(<< zB~>m=gX?PJje985Pk9~DgvC>5D@L?CMK>cRoY;m3xaR%UAF8q&&-HJRAdT0bH*5dy z+2`1+pSj0gb^UJp!CTI^S6;ir-$ODv29il0rmvsGSjN{^qh16C%u=7xcVK{9J|K_~ zH)Z@E+iN4n&MzzmWT7D1^^*D{V+Gd~{QOwy?pckbL-ys1orkN8T{tG+# zHy^ayfB1Xt#E1S&q_J*eS3S$l|B;`u$?KnQv&4$jH3{sEq6o7K*I@AmJT(wWh#cP| zB{LBOX&zz#(4#p34Z|Nm7lGecQvh8HWg8Ul90O<*F$1O<{qnwvTfuw})$ zFBTCw>Izr^Tf!jmdsVrjiGu6Y^y=Y_98d-3%9x5&9JQGyF4{n)fl%isr>r!)$x1Vu zZ1ZK$u=8(uxn1z0SJ*Y*^A@}Md){obd(X4!J?GivuD#ZqKVe7T^9Oe5-S4!26w&_s zH-D#n?7#mP`_Rw)nEmC?{=ZJb)2EJG_QY|Ujwh@n(!`2x_8?D3<0AKQJs%dJq*R8C zCX9rhx!O-Ul+(a5W?_8#Y95bx8Y8qKQIl=Ch;DL9ZBHtb@g?6 z56HuJZ1>q#H-kjBVOmNjR_eAIW54&ftqC_VTys6hr5~YlAb4S67>nM_>Q3@>O_hrf zIJl8ObZh#|e){M*U5lp*K#qw6%y{)J4TS@2n$VCSw=CgpsnvA+>Z?wDH3&h>)iO?g zDL3j+4MErBBOp^6@Et*$jRQ{UI_zG9)*qn{%T-+G(<=B!A{erR4)_`T;L&cH<0e{5 zwj8A`5K37Q54KkuO&u>nyxO*P-Pd)as^?G>8PeJAGQ$usfjkL8JqZm01(nK z8csA`JlyI-_t~MpdY^ql1n84L{N2`T)~qk$c*&3ctnGUBciXgxV}A2a9j)_4;9RRD z)B;%0R)z^(SB8)|XmeZu7XHVi*%e^9=1{;&=o^@)AHjD_9uDr*2hzc!Ap(s{s@8cB z8NwN{s|okSS1+Z>f>q{7{g{*hWv)d@xG>s_a9_xx09~0y8xV5cX5*SVR}Dz!Gxy~R ztmfo;>@30LgdY(T8YUy3m~`y|1ao%Qikmju%q3UYwimqEwkn_hn%CR8%EfJaEW2f= zCFi!=iT(TR6Yuy@WYsj{U`-SZDuz);e&X z%CIKkp`%Gh_fcJOPoPpvFqqBGR4aC(vS>$^7VK25DzXg$TvMAQESF-{XfP|Itwr0g zq{)Q9;y#tCe(Z@$cppq_ZA}1d!Pe39W3S$pu0v39oapIWv_IxE+O4Jfvx>VaBD#p# zyHT@+R?RBiw$&u)EU_SF!DZi?Ep_w5x(`YVh zW9h7AR9&C&^gDfwXF5pqtq_QveiSl&-opzi(GU4<@Jb$NCa>8$?Rl7&N7q;~a!X*8Cx!dwH?YX) z5RG;E66BGvX+dMYz83ltA%NKH9)D+uSw`cE2n!xF64VsAV()2Og>d&lZw_|R=e#aD zjxpqA)OFE{qA5g^O8wUQBE1sq=JIiy%*KSxA!-3zIWjJ(b9+@pQ12@p!mb6pcLjhl z<0((*APH=kzqb~PR!(PhqnLFa7b6nBdpZ`gG#dZ7l{F4iDks7m(>lK29xoV-qn#z_ zLx7vAM^$aSp!?$6iNISD$wfIqw1_4Po?2bste~g1N833}!}M4wjH+RJ!V{qth-1b| zyd@20pf)Z5fDE#F4!_4l%=wrGvIwL=3M~#!**Oh-7Bb+^Cakh`9QOb-UFF0*ciQLP z`!4&`Fa4A~_!oa>t;&k69NKSNzV*9o&$oS#mACJ<(ep2{&hmoLQ1?}4H8s9=04euj zB{SEH3G_T5x`2x~hWHG!6NCFV>KON@)bS3gPUtXAZIA%{LUxC60lX7Dy+V@FG$8c@ z{CwxZ)Hk$oqDbza#CBnM)fHmmK1_~fA`xm2CJRjVyh1V{yOhZn^C%C#*MFKk@c9v0 z@^S>y{uGG*pgXv?T?R^XgZB{b1!GKdE)FlO@H%$%hrXRLI=#Uhw5 zvOPDy)UNuTH`l_OUm7vwiRl-)bNHg}2#z ze)d1x(fjVUlMg&#y`x8M?ZgT9MPw!=?q^jXzbpY`xq<1qsrFVqmGK`#qqExSYQkz- zgWW$=UUtiHe_E07n69HKNOjkwqdNJdtYgrY_||ip#0a2_wsx>P51#M@euJ7w2y)_Z_mij>7&Fv|*4U;juY~W+*#8S@>&1yQ9w4z94DU}w< z6zQa&GePr=HWJT(G$4{^r@`mJZ-eK1_UkY`_0m9l6CItfV!7n+J;1m69*bVm>aS^y zG2A9t%z=RHnm;{m`X)PGVUek0WuPPLF+&Ey4uXth8S#!opHQD7)E5gvAeW4Lgc!`p zbzLKDzTic04L8@ow7ZVhPkkr~anz;2DtrVnYlCqd8(7eSdJqpK3ttN3IA4v%41-hly<3 zwwA&UHjM9#?xS9>HiRH{T=SXIvD+pJwz*u`h_$KK6*NPVJF6@XR9R^&vdYSj_?JR3 zaV;8W!Hw<({*Q=AcGe;q=Upeb8&w>pVS3c`1r#5qCp3ACGrcmY6W41n#z`pw1%v{V zB7nn+MhGOP4G1Nm$1xxozB{+S_mAw(_r1&h&v(4sKKTc4w=+i$+4$~rZ2GdRY;^DW zw*95wYWb<@kf*2I^nq_=ckzs^D%bYk=NilA@k3TWe%Pu<4_WQZDeJcyHqvWbq}vow z26BMIHPSET@`W<`4giGsxR0aCMBVb+TGpOF;lK+HIZ@H~K%fJfe~acakQYK`u;tc3 z;wQFQj!7YzbpO1t{U7iNXk*q_JE;r~tSS%TF~W*p+K6LCVl*)juZ@;vm~zRGWK8ltTy%Zv?Tc698+%-tRsRgk({>4HC}=?J&=V z{KW(_d^dPcqVD9uGaaU`4#mn;_XF#yI0T-A*oQyL78Ve)sG$#$NwDjkjLE>-g%6 zZ+grjF_GbbSL3;`aEDlrY&FXqf@T)iCygM-LLz`*#bW0y-m~ZpD@RWENvpD1$I#$j zRaXPf-+zzF6w=qyj7z-XK^mHizrNBJkb0P&(B$OB=R+2RAeV<#*g%+@s6~vB%+ZFi zA{hS{Bu>mP|MaJSXrF%1AK5!Z8sGKZud?~Whdf{Wx*xD@H@(=#FS^2F_~F9pb8MsFmE*sqX=CBxuZ}t^w1<@y7$;69W2JWKHiO zG_*6I9a9@*J$SHdFO_M3NDI#ccPO-@L2C*b!qlevh#cW=0BNCaPB!%&5NY@B5J-u#dm}SM4*u_v?22qyJ#lLq}Yjc~~Tq z1qZkTpuJ709nd195oAJUSI|8}X#N--iwK-bg0U;zk5-CJu zbT(-Wt6$ZuYDbP6WD>s*(^E9*(WH`)mhe0YPgWvsq4118D#^$C>URl^o6%IvCPjpN z?`!oFo<3UimPlcx+3_((V(}KfhU@^t;y(PLF<0ZZvL*ud`Gn?PFI?3nCb4t*oBb4PrG27C}BBChyJ($zR0iwTR-5XIPO46P}?#>ksE$M{ZD z_;c&G&RW1S7OS|1(L?^EY$ltwG1Y-R^AUo%c1H}jp~A4c59L{E3KK<6yuv1P%dLFT#fqY@6l_V;HnMh}CB$ctu*py{9ZMWpi7K_cyS$^j^HZG!Bnx3|?nHiBc zbsk;2Et1n*IBlmzFpu1GhaG{-GBlu@&GSGKt znr%DL?b~S)YhuPNwP_C#D%~h(IH@ap@#-2Ibt}xwT5)ER&0Kt$O)GDI?v1wPxi{P1 zZ+Weq^QzZcZtG6VY}sLFP8_$-N|^Y>yWeFW`M>|$e(wifXMg@9-*317{%_bl@BE)O z|Brubz2gV1ee{55U(v2i*=ai_Y2ryzCx|gbo*>JfRW;h)zf*?v;Wg2xuj)J|JT!^S zU3$zS{+P+vt*(iB1s4sG$dzVG#IfVrkhD4>0s~~zSFkE$HXNh@Nj%#;Js^lq@XvbB zL`Qn~al`b~OgtuBR!D^GDW?*`9(@1Q4+Tu%oF1zQf?UWVKIwQ?L?@2Vp7EJY58>K7v+WB+ZeB%c`$} zMqty3`hPkm;+%|#Oh#=cpVGLZ|Es-}sTa883wOLsDw6&niYOJ>o^`gEu`T7iO|aXP zuE(Muwn6QzwmrlT0(>c%*6(>6Q@dlf&ZSeXn1H0R7|yGz`!O6LzddEPk)%Bk8lMX3 z?1e4Eg>z4>q~SJ9Pey{Y5&JKgNg+b`lVK)Cl3ugB|NM{b{`dc}z3bn9v)%U2-?W7z z2W)KDUVG;2-(tJ2yw-MIb*+PFM$#m^qM(s;RwF=Q*n>G-8nZJtO5!j=qXzzl04%;U zn0$Tm7ASH$M8nCMJ~K(XrcEHqs|UtSWkob|Ha#Al z$qvE-UbPA3=g&2R`Yx=N6wv8dv<$xbP=E_r<+`*h8c4u+5C;zOj%E@qC1zGK|FRlHTpk5F7{UMBD+VIYxb|Lm;%(CiZDNW>PFX^jjH(C6|L>&BJ zDJM@6l8Kp&e$%sRiyb-|BA=^aqGD3gKc0CY<{|lSI)}bU8}Qx*hK)2Jm)<_~^@kOvkiOxIz| z<5@^heD;0cS|reS%C&s>9^&H-IYqE^fn6k!AonCj8e`d8_a zOD?h7Z@+!x(^n@UA+ksV(*&g9{tx`I-S_@KwReB_w|HJTde|0^9I~sw_f2-ri(YOs zmp;SNB5n{YfXm~q3GmRuxakCR^J_su!bHm};9~2NEd^+R5~M|3#wTzV@UZ&Z&Cmj~ zFD77+12k;m9=;%kdjYVz7ZSfqvpU}inzG+d1T&h-SUj8aiG4z3W^~&wD{tLtljmG$ zQzDvWkV~U3=hv{f?dfr;k|o_)+T} zQ$BLk$)vj`L=!4YAdu)-*7Y5GgF`OKEOcU#7{?Hpe7WB6mFAIX-x3K-Zei6Y6XGCI zukebdhiQ(s2(N=Q@R=N>vyUC7r*5L3)HPTZn>}0fmA@@tA-&vUE5NSjm5zigjR)~V zUrEe3$_isLVoSKGpxx6GcTxt~Y@l(|HHfBwuO-?>h^7a?XY{E6l|X90KceYIlep6B z`YWW8oS|V+gXIL_l#1$!JUxl8a-U=<0XZ4(b|$2={Bm+T-I> znZ+rkY}&F(;h-=r7L%~9x+Ih#q*;-_LMr7hCX8dEC@iWjXM}Z>-#3ns&_>9hp2iQt zqh37n0@{E2JS7Z*FNs}(lxZjqK9Iz|C z>j&-f?|h@pTymAoUVN1U9uH}-a+;`SVZlTIHPI{AXc4OqLIepUEY5%o0s_88qC27! zpf@;ya|wI|VJgH~8<@YrN+fcKiQ}fS$)V2k98WDPKLAHX;GMFz9Ao2vCa zQ-uudrkFgwnOQ67HCrrOerB`frZ!n-cFwZ9&$0aO3oN;5tK~4Km&Pnz9Jhps zX)=|ysICR|piQ8JNbj@@*M*oQMRd@fLA<~}>KO>I09KXqvgtDkqQ^hgAP`5@hgH~U zDr2i1ONua}#l)8@Lx`GO(X|S+DU+11*yKF2o)7Jj1c`N5raKkE*uoJq>WUP1SD>9W zG3Xtc@}UtyBTaUVp02~|K+DJTVrmTM=#}TOF_{c}L%lV09RvjTD^(pi4$Yx&`Nl-2 zLU4`r_>`r_CaiGo1vdTc=iBTzy})Lacf9g7HgVN;mKX8QDYxe5?Z98WR~e%D=k}@p z@?&g^GUsei;&j}Z~cmd#fh zYJW}4DoZ{oqDcd7B(ICtn-&QPjWeGIdGK9Ngn-03e9!AJJ#`a8lw>-$Xt)+$owO>F zL!j@rGEb9`Iy^>*mM{3wcZ7|CNV59hA2H8+<53IpL=OA5&}#Y^BH^QqITw=0LOn(d z{?7OcBjlph^W(q+osS^8CNTAHxd9qN9mo9{S58p%E4So$%8zw|FgZFeJMP7?_LguE-*>FZ=HAp41p%%y2F~$OylTSwfF-?|KjHT(x`v zJI5=u{1g={Qc9Rk*;(+0rk8lSu?T*fNsSAHPF=sRdg~teWVS@6mvArA_1k)nKPbZO ziUjwTNWL!~624L15X~Ww?O__G$4Ye1VR{nMXWspP?a+PqT6*hFyZCi)uxXLTxy!Bz zSf&hc@jn1e8c2nhGY5nM_#2FIh=c@8KbMEf`DDH)#L8d~TKss>E<#Z7%L5o8jerHz z2EcK@BLOVL5ud^VY2%I%GGF)t&_#ozcqoI;7f^ZpMiEJ*W0Fts`W+u2_!Sewh|Y^d zSoz5IWZZ8}lL~>zRRWz4NlvA6mdX|^KRIg!Vm59QvDvcKio5q(Vb>lJ&n^0Xt6oJm zMTjz)oMl8bv+PYP;LbXs3y$xs;zqJ3@QoKt1zy+htE$7QCWWqmwNh5 zBl!XVWu7-FGcoPCeE!8Em^a#H*JR#k=e_!MR@}MA3L=_MN^-Vi^?0gJ~5>F7e;NhAr4 zBZ*y{&L)Vw52pUGKx05G2d~5Q)J*g>o;Bo*PKgPXU0M)$*!q&_3t@FIVkZ4rL`Y-_ zqQp)$xKgkqlrdZ#A?E`6YK>p zJR=4qQkB@6?>$>X8OS%`PX)qRSz$_lq^%)AZ zU|Dq;&7|C<&CXM7D1c^ERdJ0dA=_B}jj%=-CF%rbpQtqL(9(+TUst)hg2JxfgJ=s4 zozHyGRJ#rcB!14A{fB9o9xDaZ9;PQeZN2r?cFwJ@veK4amJ~@zD<^tw<)%eeTejM1 zTDRS>H4XN45exk9B1p~x6~G2^hqMWS2-_tB7Qx362^sBKh+hUsiwubbAyZ>gtqa&z z*oLds6?yAQl4bQ_06R2_EX-+(^bIs&Bw?L{CQ~}!KyD!+EYx9=Aag&66?1wp>R#Za z6nYxbE2N2XF;PH>I4=0r^{w7+T3`2NlE`ZE$P2|GZ5{$cgbPq7e&zZ)(z~vdN+~C8 zB%QL<=(uG!ZBgE8>A5*4ndLouZFFv{jn8ef$+_)T9vc(U%vdUuwW!)7qI+aZMN1Wn zR@f|ZI=jizqobOs5*AIRDY26=eDu&zV&Z{7`gUNdH)UrMWcLhAx=d`e7n6XKos9|6 z37R*ErY=ncZkAT2CH;Hq#JOr8h$0$c{G=ds5Kvm1Kh9%is4s{alt-^TYbS)dUsyB~ zotZs!hY^gZ?ix8$9?uEAAiXH_@5s1?~X0jJ(D1d z5Y2(#uJVpg~0Lt@? zo`$>CJa!tA$R{bKM#pSw_g>q3?R9qURae`&S6^pW-SSeqLV3>>*VyhWuCjBlyvC-t z@32ifw%bIh;M%s4WX5Whiq&gXYquKK!4%P`TU!!oPXM~w5kRn-1A?jh1W>{mJ@^N* z?I4-00?)95R#Gp4w=o5=>XG9iMrb0D>7g-P2VybMocZDlWnoqzF#>#f!lb6a6w|plyx1| zC15U=hNcxq{hmO7O=VjX`|K;n3wbMuV3xLSx1tDVqENE6@`Oc76TYYQS~h1rwXYRN ztzQ^3o0zlM>{d%n%~(!3KQ(EYV#$&sT}gaC^%}r7w9iIuK3_Jz^mf?zThnK6PwJsR z4hT<3gHXre%pO7xg~>!kcM>=VVZKObL`HU%_(y%2V<}!kh zM>Q!!?0bF8UTp~rOl$}w!9UR#X=#Gvc{+Kd|0wet*Q1Pq!0EHf9Rw6*YO!%FpIKSX zmXf2hv$pw?%WU`aZ?+xJz0tNk=O)|v%GZcova)=qr8n=iQxER*`k$T9NDlJH?>i|{ z`Jm_j{^xgi4xjgJkj#^IdLp%L^Lr5fWwQ@<{PByt2v(lIQ$sYpnM^woMTYY1sXV;ga$Zb}Hj`3O3eX0_=#Q`;P7?Z&@ z1g)uurb-zR!F4;)sM+yW)6MIM>x_MH7|R1>(HG*V zJP>WdA8|c2!90hg>PvgLPdR1Q`NX${>{EAyWrS4_e@GC9>G9IAk32~UV1*12G#u?5 z!FYKXO#124sO3a%O5Y-F=Rof9*5vyz8!avU%YRx7azFoaZjS%(h;3rR}`@ z88)$Ht3?ISBLd}EGHJbf%|--*XdahaT>-BoYDu3}k;Nqe?6L@FRe+0+;J`=ExBOCu zoWO$s8i*r1*Pw}XBH>4%5rPo0TF`vA6tNs9O&kO81$x9W;S=U~0`#t{OqhcFFacix zvQ?2mNFZbhlPjbKQWQu`Adn$LK%>ggGp&5Hf0>;mhYh%5JT@~67d25WlneveAD73~1|^7kq)C8kURqVC7( z7tcDzi6-r&_k&kRr~ZZW)d*@z9UJ@-ea9U%6Y66m+7Qmoaoh_MN&7RIuwtEEXYzWU zc@G1HhK6ULb2c*f8r*lF5q0gQ@<0o^s`m2F7crjpR?Bu0=RolQ2wAe8RJs9K zP@&>^eO4a2*Cx(6PrqZGVY^aQM0E?69@R`J&Xar{C@<-x?Qa^yrNaR~|whIHd$8m7lc!yfV^ zB_?-3DJ4*HLf{fOv+o935{AJw*4BGYC?JFQudvI)nw}bvm@1boJ2qz7(Q%s)(cJNj zt8LpASKH33uC>c=xz#3jonx!9g!Kv~i;s<4Bqf5ANIPh)>YnU$(&)DQx^6n@;ada& z3(nrGUWRlbg+pv86deYF0+GZX<0fqZ5<#Z}*gUHc%7sPEF%I+f&;tuOoc|9 z$DYkWbEXMRudW@X+@CD<0 zZx3b8!^xhN|7byU6({kmBE_W0B&zw{pS_#PRTj>}#}-1Y`AQR7h!a`UZg9n$t0O}Bo97AFoz`biAlsXMDS?3marq@)v?81%LQ7IK$eI*nT&@ z`zuyO;MkL!J*=@@uz2^TOIIG*r@AxI3uO*x`b?R z91w5B=Id=cyi~QO+AR@-K!;%MnAAgb4P8U^mBg%ZEMZic^Vy(+(F?yt5Cx;%e6Cko z5`WIcYTf-y+2A3CZ@KVkLgSx6<-;^gkClc!xE1D*Dqsa>}M^ka% z%8V6@PH-rJ-awGh`t=34-8H~VzlrRGa2$Y~NSqp=D?)-}Jn

sz=|6HG~=8O#C(V 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

bKgi4L(!lJ!xo>GouYnLU`R88f6jg1d zA&Q*1J@R>Qt`m+ANfJIhoFuumm#9_Fe6rs$nY0^mq1%jGR~m6gw-#INQYKRp+0(;5 zd9y~+K3$C$^QzAA@VA*3@@%Jd$iuxW-FVUJO5D4;9Jet3-N{Ogn&Eleic~9r)B*XE z@v6{R4mFFZbvu1;%7t0Hde9Y;;AJELhct)L4ID@IO+(|f78v7sh5Fbd*o!gKg}2 z?kjG4NFLP^dk^cZ>s9XbV>!JBVYkgA5I^g@E*oKkBQ>=P%nQ`njTz3Zv|6rL&l3==*{tCO`(eCWhRaP7;@cP@;GoD-3)kYE7x`3gaPR z*aPgg0lgal+%88C$vHz@Kq$Oc(f~hUP;2IKf(5_?yV^X1*%fm0u~uII09|My5!6w; zmaqCux`MaK^-9`;gS*TK7!nK};gfiB58-ebaJ(d^~T$|N8u; z43=uatV~VPdI>~X-3m{07!=%6Uv|#ky`^kz?zG4d=HV8OnL|{TcLO=VY02?5@XxIt0 zsN@d7CFzIExC2g-d+w=Um2vNkU)hy})ApLmB$CE--0XB>l~<*1!hbQnaOLp=AC8Ih-R{p z`H`>Z6qgDnj??<7YcOO<%@yxn_}e6(V?`o;t-dqa{uQA#Ro~Cj*-Ps%i943tkjUk@ z6XKv>qJ2>fqa;a+W*^atkOT9yPx-&@JbrlA%<4gZuy6U^$DaL~eAM)bdkV-K2rZkf zR^nL;Y*GNzJw{xbkf*+bE?!X>Qxn>QIJ%I|GUdXZ?9U2P_ILX_W#d)13m4<G;_1ht|MNc`J0EyY{PMqkdtCb9 z`{JEH{7>WkKmIRc{OCim|Hy~34B`$$r&t#Fpdju7Acc6zv4qlcil0W8n1Fo?CyX@f z%IDOkQh$Bmx0(&cz3xp^CrKntZaHl~-nk*e(qe--1nlrThcCY<@JbjZ^AoPoI^<_- z?buTYU!i`Dg?bWX$F`W!UNpa?`}|QZ^0Z*OIHX$ucxgx?Llq?kab}0l?i}Q2cjc-y zy0dgPQ+APAdj6AGseg?VbkSff#&VNMJ&{StbSVK+nq)-7BQ6lk9Eyo3#|~ZwGX(EQ zsZc37wUhwk2?LTRt9H>rYb-%S3F*J%z*avcxkv|U26z&mnnAwx57LaG&rva#q`zO5 z!?Dl*iDrJG?~sAf>lwNseS!c-%QywZa#0J{q_oPbP%9v~-}kj)FK$f7aU_UzmZQ7W zh{p5~z&(OgD_Lvq&~H&mw2(u|UoPmOaN>ysQXs631@7mOic$~i?+c~Pd^F__AcvY) zi<7)`2Eq$?m7v7tXxNM++K+ROkm4zi+W;;=cm*=e);@uX)F`Rj&OV{J<0(LB+_nkj znDBW*Q7R2YOmeSSb#=~2ppw>}nlxX_=n>;7|6SJ-oEiQCbeePY(s2T&eGXWMwz%V8uIK1(Hl;~O#?cuCjG|f4EC|pMBmH4#9@!M|M-QNXTQx5W|9)R zheGWs5G3X-Nq*)ajP!T0Y#p*BuGue*fZ?K@YHxk9Nk8iJC!`A*!c6iwq)%!>A8@!c zPGN1{TcL{l$=iqsem4NGwg;ocMt2I+x+6CnJoa!LLlF1>!;i<6pZT%4!Ru2$_}%gF z-}yh|KmUb45x?@ae=6Shm){cG|Nci~|L1=y<{gI!u|wLXeaAh~xOhA7_v3^A=7-~{ zpZZtvuCM=!csIv;{^oba2mbc|84v%x|0|ySsec{Y54|sX4}CDlkmFyizy8Nd;D~W= zJzUH-?@DLdO|9=}LU|7+agMT{gYd12`H3%c>2BcGvF^r2(?mmoxP>4JCW!@xMKU0I zW!=)XL>zKn(I+(pO9eZgg#xW}g__ee#nb9yntqaN-1i*MX1%$Cy$z$lPkUJNwGn8Pe5d8E%F!0l>QCwhsC8l)s3{9eUVlRPO|i-d;L(cGMV zI=nBd_6jN0AzlAJ%{cBb1ECqk?U0NFKRgr zCVa@fGSKq0+H3uYXOWjanz8Njt||~izjyb z8OBV1L`LBp~e9fPXU-;UujAwr0U&P+O|B*Nv4dP%p zh{N$HR$lx1*!)_bGAl^>2#X-tcL0431p;=^u&f z|NdXc`~T`!#e2TtPsigw2)X=w-yK&Vt(X4&zlq)>ABfRokDR)-7~Fd)HMI^o$D}@& zw=TEiT-y*~kZ6Amk^<1lwu1AI+b0ds%q8$T4EZR%0jGNePlclrhA3JWk|Fm=ei!#VI`W^Tnt@0+AKo{8mX9PVPH z1NeHg6Bm}3V-wI?CLgr`#tu`%W!$N{Vw_Ir=@SGandA_2effv zbUX`*ylt9bU+SjMXZn+pRi8F8Gxx)-R3z!*0|2_8TwM$w*>2q z*=AfjIwDgneTp{avnDwY$*HSllTg~Wq6g1bO|MA}@-jEj%Pk@HSDP3b&l^`> z>Q|K;W#)BNsx*-LZC1qaW@4Ex1b+7Zw6WirW(4wVC$Xrk96pKx&(_6Zmq$H*IgE{3 zGu9RxkeWhd62UlMp}34|Nn}|-Qv)AXB{S_7M+1@rp{y5DvI*(f0h^{;|07q4&o2hki4>r5Rdnt~;qIV0w=Gd%Ngoi&w96g9NpXT8NAe;xks`t2>aPnhe7xOgdNS!lI=~ zOz7#7WnAQeKB;5AD}JX6q${0H3Kfl7aRXZ6`A)WX;%NI?w#h6`(gR-fi%pNnQ7S`sQrjasO(Z+ zgVaSTf>)9Q@=&{|qx6_#!0$Sf_eK!9$uw72d%wz|-6L1=k(oX~l1KCGajshfrdgIB z<%$M2mmCS!b}miLT#zO8I`^>E2T%Y~6QN0865y)rYvVy&1)%!?i`Q>3S=_q19JhCo zh?zXp)T)8>&vcrr%7d(@w=z7Dn%eZ4lW6+Ny(An`;IRY`ptBvl*0ywVk@OrM0Kmu7 z1khFeshY4MDm5bWF|27%v)phH`=cQf)FkU7naVb%4id}aRv<~@GX+w@HiS6hOP@_mZfb%J9h4zW$U{<a>jZ7JF-_rSL8IM?T&1RUT`lOW&d2roHxAx?&4;oAl8&v*IUxyE~1CwHQ;!6*iY zrYO$mw+`2|C{Ko6p?)dc@V)&vL;27@sdTJ17UEoUKGy0^KGvfopN|5CuN9fBh-5_~ zP5FD4yZmnQyXyTcoxN0^oul5qK!4|rF>rHB&=aItFeQEJ=%ee96@BY+Y;Z2!G<^ys zIFhO^LgpsKLLY2}=|dNCF&@W|r-LK%qR-Vh_v#0KGamhoUyFDCvmc5N{M&yKAO3g$ zDt12f{@8x(;duC;{6Ku*8{Qi4{f4*1V?Xjkap|XiG>*ta4c{>&@rc)RANz^1#qqMQ z{g!yeU;Ng%=ZpSi-1mq7WZeEqpBDGL@zdkQpYrK(&Tangy4M=!xNO+}A!GK=B!m=R zT-PGt7*OfyFwS(SQM;;NqkhOHLz21m>ec=b;eNzercUCy+J74^2b8#4u-;y; zdr91OXUyMnXWaJ2&x$)f`7`2yKlax6_^{&?(u_=9ozgYQ4ZTNler zV@K?pj8d>o|9IM8zi!Kz!aMbKd7suAtq#r`Jp2@7#eQ*7^7!=LeuiwjPW^T%%aAfn zk0w0xWBSPH!WueCb6#>=r=7HskjX5a$yCsImY(;dW3n16iA|ZN1sb(Z9tPG{gHu4l zfjR&rZ!qv&Xydtpv5x5aN(y2*Uis1oDu@=JIVbu;M2ghNXRu1YI~Us2RA(akCQ;;E z&sVEvUIK(BitHeK)>JBK%|O|JfhLQ6$ey608CL+8Osb6%+zW{WK)ALt7kT|uNpuJ} z4#v^ojEl>wareqbT&zLbYKvJ$9l?hXB3Jtw+G2~c-rlXpee0dLd$ki6d9N8u-$KC} zyh>+zciFMcggvzvNhWCv0VvJW+~4*#Hk;t4hV<}c0(k*gEx(IZD0_qRG}U*Jy6cq5 zHqpGScD4`jNg$6TkxYQ84d(oc{N#>25?3n1ty4oh0YG~k`#f98qJ&IBma5Z+e70Gb~RJiYPouM4UD+_KFHyF-xdG)pZ%lw zumAF&#;^Uz+v8V%^zHGlzxA)hkG$4EbFa|7N z0w;74k~_LcMm*>}@!^Pzx2IL;>0UoB?G2J-83XoQdl}qvyvxx(`5*ZH_@%%5H{*Rj^Y7y6 z4@xjU7~3Cygm!VU5yTiEkQ9ptR$IK)pVDwY*4rJ=#3sX&?HCVKp_#Hf&!u$*4AW|n zae<9&Wq-tmspcQZ}sZwe!KiVY@Jfm8py0Ru<>yxUfmQ$u+TVzApAB#D_GE3rp(03TyB zYCs-p9VD-^r!kYbpZIrlEJ#OOLGpgjkNo3!(>Hu`O7gXN1|?wa;t}%{y!!x9p8>A$ z=gMB7Em6P)8k(C0y)8 z6%xt4spORYLz|Z8oE6Q!!tHn_YPd^%ofIaVH>Y;o#R!Hw;+dU87}#8fK++;=W`5~E z{%pMSpZ^mwiTI*VxG(NJ*L{{C9x}<8>~pr2ZJDkM{O)%Zd8~+~=lqQy{q=nRjo70L@4b&caS|(cz9#;#({X(;9L6ESuEMC=_#xP2 zU$24JDQLEvIRUn*suOF#W;@6g^THH-@AM% z2G=fIx=cfG)Uh53*@x-NP;vL`q4KcZXCC88B==n?)#+YVw>3>W!68SqwzZWEO>vR5K zd>kZFpO-e$D_E0&sHx!AZXuDoVk0dgO9K5~! z!S}|m|Hu!;XF(!0e;72}P!A%v1WTW{3GB{I?j=L>{w65VBQzbUQ50b8A)3S0LK@K5 z-@P^^PfjS>vT~x~chnF*`kM>!@J~Jx_rCQ`>Qc0-B`+uz=NfKe3F6X!=J7ax`<(!* zvEw8_OG$9mrsZDU*4@_Ny_ze7YU?Q8287$3yTrZJ5J(gcAmICyU(;@qO0F@8x4JVI z>R3$4@jN7Q?%Ji;eEF*Y{4rAUBqtsNp-aR%ODE}Pb^FR{nrAOV{I*92vD+WZo|2f& zLG1J?>_hY|XV%R&;7zrf-1#WAj;Dl2cs}5HHfdN+Nn-t9{?ea~&;5@7JDt#Vagc*oTx^$k)|%go8*>_oR{V_CToeSzG4RY9xxF; z`pDzayzTZFA5NHDoJ3u9O8=v<`YGC*Ket;yySMA z&s!#FCT^a?;!<(qH(XPhEG+Y4Y%#%YG|R3a_P<|*ME>kQ`UlxI6^X0>Tas95Aw4S6 znA%>Bn}0L;c}617PP!TE?)s!pi~8zX_Degsg5mau-s@0_tEc2}^{#spXS#Q49!7Yf z{}{F6;)`Cw=aaZ_-~EYOg_MasVv#0sh~!kCI)v~Egp#pnh$-<>tPv6&YZ{razVl~O z+j;(z-bfjWPj<$~<&BXRERdnFrjR;=QHcfmTBo**GMLZYxX*9gci3lqfp;PSs{)S$buS_@yc+{vCGAIjo<1w zTH{y(hYhH1nLXvwyMEQ2;?`GvOu=Km^f`%ZATobkPuWISuOtZ^K`Q$ko@36VYgc>| zD|g+K-*xZ0JC+e*y{CAxcK5wG7wq(>iCJ4)=c2p5!f(`<=Wpn>E0-?Czx`H7Bzet9 zFD3g_wf|3>`s+y7yF!T;x58TFCjD}dfyz+z_l?5X{75r$?GB~F8B z+auK2so7MkrIyeOjG?H{j;468wLBVL>jE|J)tX5tHEllefkjAUJ?{InYEsFUOr88C zDQTeKvwz#qJQ*uUxfue--$A?dW#mtg@!#I@l+%GMK}-!5*Sc+^zA}=ej9H1{; zh>49p#50k=n~cAgS_UQ}wHcc8-Lfo$sPnxVPqi+cB?&_Dhx@NT`?K-$|Kz{dL<-o} zr#ejb8_Q(!cija{5=Vcl-p@$n*-5tl+uruJeBanQAGOW%^#0OUe1;cZ{6MtZ%dw?q z5rNI<28ZBNMNaJFj^i%lP+wh1*$D!ydDy3N#4$eXR|n}|sYd=V1<3Tpqd(*tG4iwT z8cJsO7k)k(2!G43eJy>sEM!q5SQhz-JH>BvN`IG_4!{h*OCMzp`=cb3H%Th}-`}&( zf*FqXlhKGWS@y*kLF~5ocDbH0;n|~M63vB1o3SYl&&BHcS}YCrwg1 z&wM9=F1XVLkJPk|X;1Ugv^e9YO>pn%>+qhu1Er0HIml&s#5fAntti>v(sPn11Jjua5ElcKoYv`ufxB$~dah z^D&-m<0@5{G)vE=(!XZuc~3%4uD+#H8ipb#N1ld2AsLZCI@rr2vJ(qKfSer~lI7Nf z86ccj$%dy_KBJL))a1v;8euwkhyk=xL>YIUOIYcs7 zQ0nLDe$baDlXz-4h-VCsGwMfgI)>a$qou~|1Ta)vz+pQW#C#VZz7FxZG8)H~!8oo# z^7eT(gpXk%w(9NJSZZ>AuA769A5CIsJdCU3L0r}EhI^_l)4#~c%ZW(M#t5EzeRM#c zgIoa60*DR1E=4p@_vDDyI5bsNE0HC&0<>+J?go_e5F(wE8sBAGQwBqL6iu{`R`eExCFM&o zI$n$&Sn>`P>rY%vRWv<5L!ZABtc$spIoEqm`A%V^4oP>?&`dWxpzS8Zd@g%q-VbTN z=>b9xlQzHW47EgN`iIrY>sVi`Lp3D_l+8(W8v9chPL1N3{xI9NKh{m5q?`;Xvt;mQ z@|bPFZ@!u|YiIqrX9e!1JqpR3rL&hF{PMTPEB@G5#m9ZcpN&uc%0Cyc`2AlTFM9QB zqP4LaM}zGQw!Qzs--y9eAC8_e7N6kt>ZRC+G~C#^5y4oUB7BXIboKp}+=&?sb1xpiFotCXA#y)h?)MAACB|)X%2TKcpa>(=h%1mD0!)TNFk}yaF6^3{qVTB z{xHrnW-a|PHS}~l$D@nI4#92(B6ktX#X{tJxY&qeadd4h&fj@gT3Xg_y)#ztzCXHm zzc?1UE3ve;8Pny}xN?K~bG=)an$BIg5Nqeo#oE@nxQnvheb-%a>utBiV!IR5S}iG= z3wCPYzVR6y!{P+JR$KQ%~{@~w=AN-?V7(e@cf8$vKX;Lt&4(oRF zXN4Dqw(6Lr-}_XMd6u64#30kuCvXfjJ31;|(4%fL$fI+I=C8Y~N zbwNg&in&HVH=u@l&WBrA>G*C;Hch)N%20?1fFfFRPyH1a=H8c@(q)b|q@|d@&8GmE zc>{q+)q)!DDT}}_@ftu3b^+EMS2aU^w9pt(xDN0y&g)?#c#4Do7kQ443!%9@nZ~32 zemuIj6W5UNHAFS*4UQ$+r4cpS*ETUoyTEVT=#*|7tJzSqrzS&FxZ!qohQkES<#sF9 zmzQ}a)CC;*ede^QE)O00kgKNGV8E*l$bYVW zM38{kHF@SfyLJ_-!?M_U?3Xza@JE@QIJ~!=OaDs)^NgvFdwK7Srg3#JNmBUKexIWk zm--U)acZ{>C6(^+PCV9y_8#zjwuh70<64P8l{h8a?IR_9KT8;&C6<)KkX25SA9?O9 zoy{c9t!$i&bLY;-CdZxk-yd7|z9?Sy37--#dEF<(gP;C6x!B{vOJ5$hyyU^S{lN!g zV`Dwm*4AS}znbsw#p0+Jm*4lE^pU*u;Sa^rk9;T|edq)6)RT|LK4X2PA0UE><5=rX zYQjYcafZItUT~E!xWqWQrM(iXt#zyo(QQO_}^6^iHWqiI4fIH2#P=3lKc>+N>5A(!5(uI97Tjm3I1<~>%nVsFa0 zXf9`4O(D-G*RRC9+R5D=;Vp4v%(;VFJL(tijLo}V94i-ZjrO@)AZENmNE_6r&QWW& zt#z_L%PiKyE@>A@C2ivP;k`H_$;@aBocLTs1u@LgUxc}GP#@~3s|p|TJE5Wq=caXx zm&6?paXt6L<|LLK!Ss&IXjTws|4C7pTXD+oJoDSH??!{~wK)|A8-! zPkHNKh|l@P?}*Kpy)ruIFItn|GTlrX)qdYhDrY3~_ddZCsK8V29r-^T?(5&Bcd)@}c;YuX_nUAE)nOhPWVKNt6vC$-yr=?BcR+}LxtJ$sUW1HwJsX3eKIQ>wch4_uX@_)pezvKIWY{?e&i|U5aSYnb(FsHtAwlfo;TQC|h*=F;&o1y;h5B zs^2SZq`yCPV-RnD=R^7ZSuz`2zA9Dq_-IHso3r2W_1_-%JorFbM0{oi&m+ElAlM#?AqTO0?S>SGUKi2Zz7dn1>++<8p*`L!$St*6 z*xpG-eqoL3kX?ZWeG4s*ArMUPUrAtShey4Au z<9!|>&$y}E+)U-T7uU6M22ROWQ?K)f)9qvJ{6MU&%gsnLpsW-IS6ag|6Of%TJdpZhY_Mx!!j z4kkJN6mSnG?pT#@oGDH2V8BvCb2ga9Ib#3S-}rA}*hyS?#jBHa+J~ufwtxDH^4|Mu z-Esp9%VzY2d)GQ~4FO=pb5vS(OW5;U8{D(_NxS1ujWUaa&2}gD2Ks~_#@hNuT-aI% z?-rudSV~lR`k80q$G_#TMgPjB|889WZjr#7^L*nQ-}vn3>h+^_4F67(eQ=gufF$T- zqJ!$Ua=?=q&_8tymq-{t%rFp+eWhMCk(!3xW7~;e3D@xnFJZ!#*e#`5xQ7o@=3D@ zWdm0dR8u3D!=K;CBb~?_^;7B8Sb{Z2V5V&T)|GByUYmN%o3L%T)P4*B+K?}(ok&<{S#fi ztZ6>u98v~%ka2aW`@m|h+U7pJ{vZYrKo|B1ruq0NdrIznC${*#VUav+4<{xGb5hA8 z+Lf}{-V)hEeox;m(zVerZUFSVlTn6Ea-!6P?9Ax1b!)=)RwLFpTt(S#8dij7U9WS` zLfRJqakbR$&%MqB>W)Whh?#$5aY?e}6Q-Zc*W%n_J66?Xlev?@9)O;v?%XFGqECK4 z(<9nRdgz3bW_kL+34LM0WTY>t?gsnQ3D1G=k^u0m5Mub4eWp*od!tG0GWqZHN4#gk zO-E0d<3ZcaCY_06gJUSexqB_cNy$m}QolWS+`g-^zfT~5DkpJ9oo=oW=O!}O~= zeTH_>L=8Usm%<_ARqfx1eraFyjLznIv^LhGv$hczU-aU5(d*t2_rLy=;(<4OQhe;^ zy*Xa@IbRrezU-B8*MqN)`(FO)IKK`lSy{=g1#i&3AL$R%b>U0q8F1BUrx9x-oE~115Fd{Uvc) z%gkb8h(}^5=bO~xr2wA?WRZ4JlP3vt!J^hFLus8bR)gaNJe>A+V{qjej;CXK{Zb5` zemKTgo`~a7KaTo)adI#QqbO}>H5zN1(Olb#6-aAy<9y7muE)63i9Q(9x$ExScJXlQ zVhonoqTgMM!`3om`zUrt(;UlDZ$enxal&hB>s+)sIvnTjzBg{U@4hs_zy9^Fk5_%{ z>*CcP_wn)Kmp&NxzT~BGf#2r6_r^wS-EtxBy7RVJU+YF^d6}`B2uVB9#*dsLr2^oN%G-AoMsSLtTWCdjY31B(J*fjTgveKllX*#GcZhT$)y-txEisxd4OZmojL8qT+zIpWS{; zCr!10`t`Z9%kF3pqwzSeTUvr(L5{i{I-(oI*Kj!QO`So{x#l>{`1&m#q|~ers%Bx$ zx@!RZg~di}0`ePzJ=YqWO%3FY(NSC)PSU)dK7b_mo3$>*B*c;5+QvnTVL2_Y8o{#d zn7dCbaXuuMS2ckqHIP1gwSdM+8@PZ;!kd#Qpt@AT3K?wOXRZ5zKBb2E(ZnQy)MwM! zmJ&{brP~fGd|pMOZ*#t(q1>C@xOR2EvqOz|j=M~#H#pqZQP4J6x`bX}uLJ|1hs`Is z*Z=e6*ol-n(tn&J)sp1o?=z#WsR5-un4{C2?RmaGqOCM>8wbulHKr}AVP-tp2gVX4eQSBP z3OlJKr@tFv!mTtlv-;fAU4r}-+EnxVZ41KE-q?)IjdOATOCN~4Uh-hH);D6xI2=%- zqm|7#Sy_vP<<+P|FzcOm)Z49SEU!eP+ll6KCl))cm~XY?7%VyBaJBV3m@r2kZa#2G znNx$w{ZfNznJAx&2c@3$Wa`RzQh?)CEutjlqZadCF`d z_c3wHi|&ifyYG$*_uLn2=P$%M*KOT$F;-W)v9ZdrwgTxDxy7P-tV1}ptaWQm2(VuG z#p307UuibdEywvz{8M3|V!?2CTCJ`RhHsP8!jEHrqK{#55?4bc;21)uT4{|un-hKdNHVx3o@$pg-IzzwR9X%Q5x=`& z#O=#mn4-4QK-C%Fk@voqRl23b`ZgMpq6WB^g*c13C$|1Yo#tY+8%wdw0Y^#@k$mKC zJLIp4#WES%N04=4jlQ2{r}q*eJ2&ePIm*4-XmXT=HTuCCz9YjHxpz2V?m2$e@6}bD z3rs{V4x(G6hT891v|*R`UFvA;Nwt;kW$SObw=H=sGqEf~jG>MYX#o026Sun`9nmi) zkjGJyR?W-y3m==>Wc!lZ=gP#MJKpe`6C3TRra(2h6ThJEB&lx3a7^UJwVKFEAGZ6Z zW|Mp~P(5v^w)NU0#r$l#ZG)Dht{x@{;{S{|R;02@g-ky8d6v#rDyH6oMI!`S7i8&% zF>xGf)C;a6D&NGa_ZD)f z`I-`v-$|oE-i?@t05{KFi2BC)Xlz`_opSUmz4(gP#MXnaiM5x$Dpu}%ajf6-;y8cL zOQL)J*63ciCDv}aHEz4-p12(%c*ia0;=*zx&UYJe>slwyZ>+@m)wQ_m!o|4vmfI4O zTAk%srap$`a-#xqKvR72^V9`EwAm_mBo878%e z$><55kxaj*{9f>wLO92OgY*KT3c$Jwxdqs} zC+ix3trk@cMLM{f2S-+u`%4l9E8E7Ek_ocpuX#1QFl9R?ubh-T2SC$5P+uO~sLrv- z=iG0a`_=$v%}Q$3a?8hqNt%(3op=n8btQy=Te=Kze{M(FA*qz;kmga#Xy_$1DYmM< zN)-We0@GY2anl^`L{`jFl!FOPSAfn^Aeqm_dc(F3Cb(K`w(D_`N$c*eyYjT+_SJUW z$^^B=MCGm>F37PzsG)Ji;|k>PR?fR?vm3W??rMX3@oWsuq)#ny&yYpruYmKcb3S#le@N^- zY>OnC{9eT_%`hmG$M|y!14WZu1cWL{8mwDI5^w%oTrdi$RD0v+6qrbU_Iq;3&$D#) zlDGpLF{T~MnuXO+)Ay1TDo}_L3Vn__7mzJQ3tTYxe|HVLvQnRV{&wg7iLeH#Y_ytDmvD8LW2v(iwf1UiE`zaIgN!v-R-(1O8nxw>SZs3++G1Sa zveu2eZ@Y!DyAmC@f9({1;MPlC9*q~hEZXjCJ6OK<&-<98vy2^jjFl3tFHAr6{AIB9y=bDimTue8f z##MyYt9hZE)^-Cquvw~pfB#~zDceb0O1H{SRDc;bnt;=_+W71wtM zHch6=Ga0iy> z6*iR$G{6qv%*O_JK$Fy-X`+@y_QnUX&#}v3-QoK57X)-QYj!vi5(Q!MQuC-oc_EO# zcVc#;PN>LxF@*ya#RpJ{u?d-xBpI7c;%3pDAOsN4msFaU1a+8&1|0Z7$#hQ>`4Pl~ z`YQFe09xZ)t^#%!$ouwAH&=*j3UaGL@8QCq2IVeW>H(6xf>Ch{BQY+Ut)P}tt*WLj zHMEjK+b_3b1PCSAUcZEhtmfA34K=OlLn<+n@HnX%r%^vAiQ+MnTH|Cs)*ylxTiv*I zc|BGdE%IPyveH}wCCxTW!o_uJPK8@ZxS>Owm~4WDg&JipChYb?Gk2aylRl+S6FVt) zx?nQZMCYy%bqd&~ozpzc1X!O(7~np+lMiK^BH62$bi#GPjpwQTtWh@2XFen0-B3JF z?G55l!203cetc-V7a!vDLlDRt^bHf&4$$sfkkw#NR9(^rD zv5cE4-K?Rs*Ur+}O!lk{mBZl^UqVQev}x7Q#GBC`5Tcgr2-OHwZa3;~CFi=UvC&z{ z@iscuUWs{7Li&@3&we3EOa}M{TQb4{U2{+~Y3+|^NKST;3hxsN>GByMu@9QQL?!vT3ktrblO=K5Nj12PGL ztWyuQne**toYWhf!@bGA&Fcmv($H$Abibi}^nuK%2;ifpUopz@sV9nBfBU;aKQBpg zCB-JoeaP=s$g4TW4o|?WbQ3Vd*EZvSXE08eC0&=CGp_6pW4>NbONgu1#jxD=mb#Zk zn6@W3od zX2qc($5)zKHTmkl*kiCuQiQJbpH$iw%n~e+=owcIv}?nI+)YJ^(!sfn)Ti`!oxy29 zSOIXQ0U-gPGp-l|TqdT5Puk-hOwV=%22;i?gfQ^0n2|z1V8RdBFV~;J)cA zzq<{g+Bh|#YQH2&n!Z!L#fu;#@Q9m&y4py6J6-%C!PHDENLzo&(gB2hiL$nsfK~xb zV@a;mnh>I;IGRT69s;gvJjq{BR9n1SZ)e=e7SAF5Qn^-BSOO$ zH~^#mmnS?+?w76ulqDxT+lu$5;RJH652{l8coe%x>U(^*@4^)Q7J0_k0s8CoiEEs9 z4I$wM?YDnmY&`PjaI#c;aLi%I5w}ZIgL`dq6dxK*;=|;9+58}m{lmG~=REykU5P0X z&c!oM^pq(z3-&eoq7#Jw7wvE9Cob?>qdix69xf0_vmxiYg`5Pk>3gnUIPC~t?@Dz| zc=lyAllq303A-c-;d5HWlKieBiY9?RwUCyN_cx#G=UFxq=sBdX}{H+s+C1tl=5k#wjVpf zlFr!gIMkpUdM05{29BKWSdAJ6+&ID?uG#w)(pXO zN}aU0xJ#GivpoxOa}i)6d@2;g0p|+qwCeVZ+&@kC918qmkjEjU&0WeIPtHRs4U8|` zh2)CsDh~ROJ`@{wyPHrUbXs`QLXgi9tT}C0?`K;nC_1M&cS$1M1uRY29OAGdg}Z&( zUMd14!jgXpq^chdCwwS1LiIkX&%xpEnjCukXfJe_qMnE+n~p=RKzhb(im1M?(T z&22+E2JW*B(YOIY({#`Sqyz~8O*3c4aa1}duOyBP`ttC-o8Wn>rKCJffJ%QI$w2}y zgWA>70%q=w%vBD232J4+bg~y1is?Bs&SVMleD2{EixOY861#&@T;JV?08i6AZ1|yL z7+e$ba}FYT_u5+AySfo~bynl9m2TY9=_HwS5AcO!fQr1*2u}8qS@VfLNnS5K$WrFTs3NW1vt;4Ow)r&EK=Wf$mUw3OvKGf`pSqt2Q6&?OM1~jLzHo~DCCJ4ujL*3f1W5!}iKFAhmDOdv8D-aOvb5S&@4lv=IBlwsrvPa?s#W#ZQWfgYd+U>9jkZh8FGN+-w%3}aIG7|GY;yyN zvWOGlQ_Blps{AlylWmt}0AKSZ%OlPfZS}d^ZjYBg_&~hk!3X2Q9k<7wcis^lT?9^( zA$VqF@NA_SiF_W@%^kkKeVsuhK`RoZBvG@4VQ{)g<(hg8B<`f#=KEZAD=AUBb+U%+ zIEe~uMSDc1Igb`fC|s9e$~#^R4M%D`oRG(&e6k( zE3df#5CM@mUs=;TB9U@V*||lq@jnYx@+cI~`#{Y2(N&jjPbS%YdbfvEJ_0?VEAHD0 zuul*BfPSCc53@~#)YNiGQ~)CvjtJe>(aA&|pkzobgdk|$jG3wFya#CSA57!gpbyC& zrOByTYvlr;l%UC5{Rmm+GtkVMCRs?2T2G&it(aS`%^#)tsSTNRp@|Z6i}P1%^<2cF zc15&3anTKBXhXEr%6U$w){N!FX0#T_-^BxJmQzTOP`OGSVn-b$z1yP+1achLAc?-( zP6LF3F_X@OW6El zdInnNpgbj(qrw3F(YB>nYM?EhQ?G)Kld|EbH2Eu_?CCE_UDa~r!XI4)n8013uUkZ} zNF_h}ujiPz{p{J^N&dENl_ZGvjho4!=bI|RSba7R&#!zYXX$JweU}ph5Mc6IIlDuNsAY9y z1YLvnDaQ@)U>m|MInISRX;O9$ZTL4vp@H5w?Ybp%x5V z*!o%ypalY`c90xTFzfAbIHTixK0;#|$Hfk1k zb$*Uu9~<;o)%!1&UA82%+d>x9G-f?crd0D82ys5p9?cIfoRIm z&#=s$4&MSs31s}|{A&%suw3vG;^WJ>&FngV-7Dar9$vGLGHp0OGaJWH5>8bbP9LeGVeQ&h$Yv z+)^JRxi3-UkPPlZD%0%c;vY@p)N4YqhY(87QyYC_G>j|50mm>dLoRh(zut#Pa*tJ> z-#G}nTA$V0d@RqOq(9?4hubLfl9RXuPV$(2k(&7DYF76o*5STdg|7+Sz1;_pa|M_r zpwvGF3I4qNgf=Rz>Syw$qo|FkOy6qMQ;U0=Bmh3!iZGfgLU}V`^j;qM9py23{>>qR zX6bAt7kwz8`J6Ois+HFda?_AB{O*|Laq=J`FA9!4etV&sE61OGa|(E6Fmn3<*Q*6{ zagIy%s$L{1)r~^jvJWP%@@j+y1)n?*0;wr_jBu%DePqm2h>zN}#3%_3M5k=OlLZcrT(^gHJ7J=MSR-7eI{^LGc zE6Qi@>#KOK3116R4if}U+h~r)0EQ8e-8D+GEHQSm%t2zJR)Jgy$9OayqMqT(`jio`+wKCZ@x*oWYPa^28a{(nc&o=NLUY>t!AB=L=uu!fN*EwBsKuvEh@I9l+P^ac7jUjn$IPGhA_!6Ce%r@&*6k} z8>sh?+Hjr->iLPJB*U0UJV&&}ArqK1*Rtm1YAGoHF>QLp`RTjJWJ@oIg9F<0kja&- z)KaJ=bOF;g#}$a>Q~gm~<`^=Gnd=H=-Du3m1{29@V=lE4K0==CnWDHS=66% z$ZL;!xj3r$bb20>IVE#a?2-47`+1F8@+QwhpH-+O*Pg^4KkShC&WJW4pVTzaSByDo zpQ)0h(8<$@sUnia^vEQ_ar5`pQM4fCn5DCuG(YG5^Nd-Egrr4+Wbk|!VTgs|QeqZk zSR7#(Cm9rDw6>@TllZA!*BvB%c{va2mslunIs6sAwH9!@yqCU((ikltj(5ZC7}+6B zt{nD3eH@MaAVf)MBy=X;=6AkIDBEB}ZuUT)##Gz@qjbI5boDc@?o87)O2T3-F>Vh* z>zTnI9^K!IC-(Lbh_!|oZ&xj7K=jd=7*6By!9ffdgINy_$4c4A0enodYZ%G{l@1 z1&O3%PZFsxE;;sSax8On8SAOBMc|fL<|=XWqltM&?vAEq!ulFjLM2AQZs!3P;#i(C zzMUVqmJ1a!#0PPx)D_H|4ev9ZW{>9uN&=?@N`O;3lc*Kar`o@S?n%=IgHud9NG+ff zutbc{(2Su{HG^Gqh5)c=+`winHrjQ72}v}~Arggot`n4t8OHG`8A+1Dp)4;Ul|-m{ z%0St64SNUIr@@0V<;2c!Sq6wtiA5>FfCK>&f|(RfV%EqSk^GMHJxmf*i3q22PtPw- z-UBk;Au)WA_3#%t(374N6kwREXwQs z)S_BGkt?BzlQplk7V6PmVgi7;t^kZ3+Q)?>f;?GqUxC+acvehc3$&BF;;b=QbOBIF zyNhY&Da#4KJmtRnHaaB<)P^W=F_VIUivrRVUTdWEo?1H6^aM&aPm2Sr60lqW512X; zE>ECa6NvWlaUp81{7$W(zu9+AYB6_2n;q+Cw#f6bEjX9D=!4cGzYPfF z7VLL@SuILE7O2A!;D5NVl%(B-4U&8VYxHSn`$V;t~8*#vin~A~Nb551)TQ{ehe{fF5xKV)5S&eu> z6UAryj`(SRD8y60LdTcCGeY=(G4aoitFWjUJEONUES7Gz#S?F&dXR#YH(1Js0~Kf#I3KD6WF3 zF5dB4M6Seecd1fv?;UV2+EaM-UZRR-WakW9$7KC&<0B699f767xwuxWFU1@#iA*7v zGPy$Wh$9I;quoDo*Fyz`+Dh+fwbHA{582K|fX=y*@)m*dxp6*AXD`j3&I^>pGy^Uh zbFl!JlVt%u$Bf%&IWTi2qFCWDWaK)D3PP&;i%D6tk7PnX^|Rq?+_7aTC0z%sz$#%h z0JU+&3Mi6i0utk0VB@t&fMvl>iOI&jy}g6nYdF&HWh!|+T@g(A-T6l8I!)!AS_p?1 zL5wL?#tS4PO_+X`pz)G zNV^B@Qgj>bScM4Yl9}{*0<`oSg(S`|7NTUJ?-qw9`dnEK2-dl;hi0$_H>nG9{JF|G z_qGL4-5*?&n7Jmo&Z7IwtdFE0vS>(*nqfoK1n9R~cI0t&VTZCAPQ(c&cZA`3@10?Q zNXwM3>p>n$_{-F<1u=DXr7_>sy834$9Oa@SzNa-C)TIk4U0rO%I`v#3kGw|hfQQ-v z?%^UWSNt3J-RV~?Ynw@El{d>RHAFm}VsuxfPmN#p2Ok{g*(W(i zZI6!lT%P^mfaldolb#D{B(S9~Ir+FXqW#bo$m=+&RFT9g`91@gbKjej*W7&W%>;9n z&So-7f|_@=WrmER14joCQ2VClP!nvs<~F2dY%)3$6N`II5w6R47B;{vrD&34Ff~}> z3r7hdWuA~l`(Ix7+}IIAOh$RgQOIY5V{_{i-0VTF7M4U+t`rLRMN1}mByX;Db+p87 zdvcT}Wx6&vAfa^Op?-z-$0EF?wlqOef(1DOCnZ{S$aA*^CNW0qi>^9X2%byg>~3W4 zsHK)v%*eO2xKZqNK^wBcH{oN$O z_gYGN2!6WxDDb(ZtF2&OE;JIe#c_A;a?z*QWnFC>>p&&>eIe^)``AwIvgPh&5?mMe zxMiijpm|Ul$EyU=Ilz16GqsKQT_N9gJ0UNBb>y4B8wCm4luz`|Hv8uqsFQDh%j~;v`Wja9@GRRk(}qZV!B~6XW*KLB*!Fp3v%FAk~U)& zCL!Q1!i->B;HH$MDpC3b`I!N(rc>V`R~HL#6d?z_8Y^E7Y@Glp5d~zbyy})8P%H5P zeZQ37H5LF)7nuNzYF%@&424MGo0rsTW|FKP0CHvP#XSg$CeaaDr*@HYNhI|>9F0e@ zWVoJgH#R!W^l4n=_a)AAuWpI8#LNlHFiIl&;R*FQ8Ic$HAB^JKbQDjM-=)bQu5-^F zz;$m7$U>S&)6-`~o4B8LP7bu;@e#z1Nlo8EgPQw1-1)(kr0(aPt;&6JM;DIV(h%U* z_oy=G7SLYGFhlG0R-CK1<9xFnTa8YvLM)A0NsGtSb`hMpw@=u~)vX;j+RfPHejBw0 z!b1%br-_Psrq2`YIcMPTaqRYnvEQQ&na3w5l2guwcuG1A!afJFrK6<~pw=bb0C>Lk z4oR<5Om%Ok1cetTmt0swTjUB&`iB!ii@Mw9PP+b<{moad$;qGlls;IJlS@ucHs)!n zNM=P4E3)YKp6~0;M0A$UW=i5hzxT;XK6H(_G?>H_eHYl-(+XMhNxHC1fkPi$g>12_ zAXRbyVOZyR0#o_EV8%S8r}QTg3vA@qmYTBD?%`ds?{I%N6WD6FYYe25-?>FvbPTXx zd>9d6DTf%BCUJ#tu31GmDhpI}xdBTcybVBA%odLfN#sHvOQn^=g(b)K&pgBq$JJcy z9URB*XpB&tGztN)5KjJazk=%u!un1t!5iIRmGQK~p?_nBTT_cmSvm@>oUh4WA8JkL z*2nRsaPF(oDO`ki2{Ne$Qan>YPHP9{*2*;y=eXXs=c}0K9xjZt{%Rugjd9KcB?&jvgMB8$f z&TcBtaF(9;SiD>cPw9`pyAzgg1Y#AV!drBz%>;fE7M$j*Loj@K- z!17({*5lR5#ueBTe(&*qdprOf0cP?vQ1NDWHO_TcqKjl-gTyUUmkxwR0y&@B2FY0Q z^VIz0BA2``_bQsRBiiyf1Gw*voLH2ssUM`#Nzq+4dJxhOzwmhg>`rECQ;p@e(JYH) z&Ow?tyUkc@*J6X;HXze$OgL*yavMyRYs>x)A$3;_o^StDgF;ir(uw|9Jp0AtG?||u zj2zQOIibzFXohFP?*fI--hNlifF}A<_9NTWXKdR<><=Lfw4dRBmYsk()F9ipbG5&d zq&ZgEknB%4lf`QBOm$S>SEn`~e2>0y4x z?X>QeUu;pMeEoy(&u3@4Il{>-osC4dn57pYfd@Gd)5nAfHwU}m#P+D?_k4N&>S~C0$0Lr11sX6w9fy)q1 zkkDizQ0C4I76x)qv`LhMd-?}XB>AuiDYffoxsU|SHgrPLgrj5+`Ks3;n~e-At{;-VoCk&^Iv8dC{bRM4lz}$! zTDNVR(%wh3KVMUJo)e(1W-{B0d<{Z80!+Pjc%+$LA1@}(QUuzv0JF7C@V3o(b|qLk z=aOHB?V#N2l=0S9JMLUriHjWwVtoP9D)D5NU0?#^^@KwLSflPuW*mdWy8vkuve|-o zIyo3aPtA!My*0kyYS+of=UXN~`&}-O;&+7)$$6R>`5qdOGe8nN`xWo21z8dX4;O&V zL7er=HBM!RvglsnLNRNat1r2(O6FzVJ*v-^txDOq`21U)XS(^^Svp%ug5Y>gKW1>u zv1WgF3>)wCsXgPxj_L23Tj}fcl?=|!HQA@Q+UH+{8TtS}h(U=xfRBO;{3o$A7vO^aw(`8xgLSmR$M$g!0K^AOT0D$(BjKcO&2XxIb?EGPegKa45b zM?Z1hXT)c}*Y(BU^iP!FdQb6;!FGz}`iQzC+9HHnAO6anK*Bj!<`^-AHnRN_FKl3v zuePQ2cCPY1-gCXvPNjl4-2m%0+pSn>Y0-IM(#_i{8l!TS{>L;!-WMooCa6pXrqm=d zl+;wY*Ql#})wDT~O%BQ&*o-wpU8pI`YaGmiFGwmu6HL?0%;yPtnAEoUo#$!dU0Y({ z*ENeQhA|6`QRuc`n#?ViaH<(u;4oh&?3~2;6JRBkB?;stK3Y7@aSOOb`bE<@gBF zW=us%v>+;(s;dF9{UjlfEZRZ;p{y_8CFpa4U?+LX=fig<{XW&C>_H;;CP?$VYKF^z zy5wbf7HA{m&1w3YQaC3u%d7cb_kp>SMTn**TUS#{hRbShlVN>^9GbelE_r)SL4ZHy z@m&fVT$fv7jz@82upig@{kYm6#AQhHjlEvckYQ)8MGu#!#)wGp+g#KdHb9Jjm%}W_;lF#57a^`X&9^{%Ze9 zfsR+rF0CV@6~$xtK%&f33_lJ7vSv~ zqH8pY1+{gMP{&NJL?<5?yGYa&o+aDa`}tkBp`m7T$l&$KL0le9b0@2PfZxzt5>efg z)b2W0*h)6IevR%%qvq8xMH}q~*sm}x#uV(gVulu)=Q$mmSmTn^_UnRRdzu{UmQ4X# zMAovC+oF<}t!)_<^yfLRqrWG=NtAOQ;S8U@3J~*=?D~9cbKA|atQ(9LBimTPbA@A; z&TjI_&C&~yBq=3y10Vyyh-+?rHDprWflRpbf?%kYQAt-*hLgF($AReJ7b2x0N`#WD z3}`E{Vyqu1^&+L3dLviQ7Gf&st=1Rfyy1WvF8HwnbOa*E)bIrD66|o3@65E zJV2vP#z>EzCvyFM`t+~!%_U=N{ zTx`;Al=D;@%bb~$zh-*-Y=i4c3_AOXv#^>_o>2B3Ikitbr-o-W%(;4#-*nY*J2+Q` z=ib1lsZ8F5Fq$fISP{hPcaM)Gk|ysvOJ^@NHqWJoO1B&jd%aK8kS|4sQaffi9Q#eg zdaId26hk81R#Y9}5&clt9uXuLYS^!M;Pws2g;?mXN#sn78%a#=Fk}DWpXZyB2H98n zsC$WIMuE0P9!Z4wEh8jwg74LwYl1g-$L&g^5nGzE>z-4D`2pkH&|R8u)xybnG+?(E zPGYTDM_{i*h+J&fNSCDSto%EmZbqQcGLe1VKMTh1xiXt;oG08@+VDos4+@exz7#Da z;~s%|Y9t2AYE%WW%aq~JzyU+^=4HhYn z!`L#J((jbHN<1DzH19+T-sUsp ze6R6-x(K+fuTdao>FlQe5shc*c}a#w$elbGFlF^&Ns=wKPWq?hf)0RAIn+Vxpi2!9 z1HHgz8H9Je0Ao5pQ(bzi$~%rc~AL&*RtY7sRZ zm3+B7`4&x6@t={fdS?#@y#OspJlC1j@cFCYjkF8+sCBYTnzPbSm8%tn59$msD(y;C zGgBuJKvMHNw<8HZ)~VDwFXBi-ksnGP=?`_Fe<7Iw`183Vi+f^2Ww@8*HiP{FriIJ_ zoRmkPbv6>Xo!64gQt#(TB;}y_=Z>9xia(I|J5<`IEv>&3(IQ9g>>$u{l3__)kR;`H zL6cIxCNRm9i&6}xY)W5OYNCl;FG)$Xb)X4o)S~UE(Vk0?HD4uvd8I&~4Z$-bznpaG zK)J;klc-yrewPn%U=48_oDsJIAoeIEPD&T?ID<%p`T3YyZiG zg!FSYUKvpVvg7xe44@FP=rv%BAq>1;rhdwv(JhfzM*DZ_MITx-h zGe!+Pw9#<4r)F$G1lPgHCS#^O4|Xm<;3lJZdVi4n+8=-~Z8DO8NhIeMtXo;cvsSOg zmZ8_kYZW2Qty5Q<%~*$!*1;&_ySk7_D@j@>sNYtz?5Z`Ud?T>Lc&(biZ8sP6Se=8D zBIt8^Vv?bE^dH?HxeSkUoioG~D%sbvG@X#AbyYh`o05s=iPiJ&vIW_9yc@#ItrxXI z`2567=N;SGJRQ%v>*#vm+>(p!PCpx8(rd&#ldnEQvDcOG&QXqA-J=Ozr8Fr!Ks6C?Q7*7?(iB9> z2$W(fp_d6((&s8*L4}W*1UQGbtC`iF8A8Xw-{f*lnVK3kyGVpwZL3B}?P%phT}(R# ztkOA}JS!UMd&}*o@?Cjf&XOQOLU_&9cCH$3N=zg>kTVX;2+rjMlObIIP99l^ptA1GKttQZ|BaH>wrhaOGHGyq& z&JE7pcJ((v+fOirP@di&%*#Wm+6ku$Wno(@O*QkRaKWWLiomr7Be}6Q+td`kk+)>eV3e zNz6GX^FKZ3^ygVRV@Xr_tJ!UZRVL z!p@RDzVs;tsK(q;uDs4D3ns@LFAgVqU49{!h>2?BBxhAxYj6+7p0Q8o!H#yVp69B; z*Kg5&s&Hov*betgtZ-P)1I!uqg4fgj>!uI(;L=}9KUBz4iv7lPWB$7U7vC|ly;)L%lyIJ`pjn8ZB zP%+c~al~`!)aG~&{5VTzHaYvu(hHCh*!U+7D&;v&Bu*xSNrNqEmeiqIfJom*B|QeD zgU<0;rCjj9QGKPvchk?QO;aD{mAUsZgvnT55-!gJm$7T`!Nu?pOZYAaew+yznlY{-oc6NGkh32znXDXy-h0~c-G=FLG zE{lOCBQCahUNlVQZsBC6mO{gxldgRt ziK;z7vd{bHNTt8g$4~pLivu+8t9iCyYH3GmMkrsEs%;Y`g=#yTm@Ct^-QSC+#S&8u~{PDMb2 z9Bqxwp#fi_%G zK09#AL+g#g1x+?fXE>E!GE2{UO7k#-OA?dj0^UfQa@3O?peD6NCJBh3C^4vffRfzs zb3VjpuS*@8KRydgf{esO0CixxXhL(j8cEF@!-Hv(4Yg`suV0ML(8d50=uHBF8dFJJ zYACaW&;9SM%1$?>C2A2PYx3T1vG!b z&()R2T9fSNYHYwKv*H>7RM65SZe29X6f#!GlVDW#i8aV~JvDZ2lXeI|E zvKW-xMI@_>^;oa90r?gZFB3~?xtoXAO6{J+v7BpL+xC3N;d`%hf)vo5c+~(n31~j@c?kH1 z{}6E1a7ZpWgUOSL+jgWMN#qUydh<|gkxu$dgvP~lU+xiPvH|(N&|He!J9UU;gR)8J znYYB@)`b5bM5cfNP*n06q4!MJzqyE@y~ z5*r-g~{Y!9D_0=#Bx6$+aE+q8kP zFjWTR?pU@*ZL!3=<(WtQk07=kv$oT-$8QXydfcPh+s)mhJfN{%QU9>wU zfl|9YJ6~w_@Tkt$x5iK_8JL{G>a|Yjx$PB1a^Sw)hnif~tvv^Vsd?gq zL^6qopyH%0NCSnrKt@309+oD}oE-k1eu<<(Oky;D6jSP^i=LV=34mtvHucsVEyxJ+ zRjfrd3LXcX?;62!U8zsz&KvJ-2nml4^)k$aKAsX?gP{)q_8uflCvaO@Nmxzc35{jj zt1(mKQHKmQs)JfA!GL@w6>&)-L)lUTz@Y}v@6>_{+Lle<9ksgp1gZ&5bFBoN^E@{v z$Ru#wn?v6~?~&$jl0fO?W!-ep7o@X)&=z@6U+-IyKig;sDb$QKVuC16_tuXqon24+ zj0_-YbWny}+e|qSmQQDCYr|FQosChEkW*%xA zD=lP2Dm@Bm^pUFhdG7aFI*W<^PhVAt7}5z0=aQ~D^mco{{*O%rK5=HiZ-)ArLd@(b zo>dlLm`h2%iXr+BtJU-@1zSzqVra1{aBz;q#8{e3twXk@LaD`eHF(js7S|l-9Z#r~1eQZLqz=D{-L`=Qxvj-2>&CP2 zk)7y2Tgov@XET*qY?hw)W*JQmD_rCDdFgY* zJ@Q_X6M+N(EBL!!||&9TNiQs#&Zt z6V&)nuR%^FSpdG<|A9?_S5P0#?)vQkn4B*GHl$Bq@(3|@&t?}TIT6@!i%Yfi#}mBN z%&FCIU+6vBYI{12oyjOaPs?MVzFfz-Lb9M)$P2YfKrItoCi2WS;X7M3H3Vjm-#KY< zKG)bHstnBDHnD9L9!%EPw`w75VgDDnB~j^!&b5*-iK1E?wU9~pos9G5S>*DDTrb#@9F*hxH9PTSPo;gQHyh}Mr^1V zpg;KBo%A&aF3~r9hBR&w08Wpr1%*oDXQ!nM`bbsUj@)38LSd zY=fH#&van!UBi=nQoM;gX;??8M9E=83T~-49Drytib2B+C~gl=E4#m zv5!87D6bh6fqvbhFII~}{H!~Ucb2C&i9v?ya(tH6*o;Lo z_Pv5`5fr(Iapwq@%s37mb`mdr{gPx-BI{(oR@*PGy6Spcv+-yeH-?&zkK$T?8rMc6 z>N$x4m@}9R5uPBFTs?UF;aI-=MVYrdnQbHB>#HpuD~viXC^TLhjN^K5m}7s9w!Cw> z6&E31`nHQHhAz`5)BWoi{z=$+lw}7pYX~H*Oq#bv2FsmpA&w#1R^d0TTwItgG(G_9 z%bAYovZ&MXU!pXW_SVnTEn783dzOOs0(CPI$VqOFV0$j6kClG;3c=Ko``T94!?{j{ zg2XZ1jTR)l&SM9$O@G)KmrWUF>1?JlvS#UdPmCodQt*}6jJ=1XtX%i3KO_J7a0IRD zb9rI-a}xOGyqw?Uw|+kTU0iVI0C`ZAz`6t#eNfg;r9}OUbmVqI7qfE@?PEv=A0(s_ z8^Zu80h?9M)4ZR9JZR2T%O#*FQMzAiwH=qFxC5x0)Xtrd?|5{O6U5E{vNoE;7=WEZ zVv=A1ViFytTM2I2C8dD5glmb47;aW+Hy5^Wjw!=TNESIHknZU{0esc?&C$5?fRuo0 zYwJfO(V0S)T;-^#C*x}#9>hMc+W_{yre9%@drHF9;K|wraZNcA!pgi|%1wIYiukQK5>%GCIR(4$#>R+#{v@8>?PUx~ zC-wT=QLHy3&M(i$=JH~!wE_IrVyv`lx&L;DLsH=Lb^=z{Drrv*iLX}BHlu(R-FCEW zRkEy-!^%{hWw&mp$?uYo-gFc*S^0jJ&SuI!$$ttEl9VJNj9-1L>-0MXs3xzD8A%!c zvP({kV_Yz0A@KCS(vnA4}>t~W-KunflB z-QhX~Jk9Es-O<*iP1C>Aaly3;&o0bNp^iZ}NOyu!*2(fqkQM%l<*1BD^Rn@^=1BT9 zRhty@otHF6t1T77p7q7#9G|Q2RcvTsa;!@ZwW1|~bc}irj?~nWmzv}u?Y+-E4VHd+ zi10d8nAa+%alK%tt^_Uye4*0K@lI#E<^0yE%*M0yf~0DSEZhA#_yMWY@A8%Z986X6 zyZjz36?8HV8oxU@Ju5+uCo0F1FjRTzuP0%3aZL@;aiby0)4)-}KO}H5vIQ~kkc&k$ z>oWM8`VIli`VgkpiOdZITnCJE|5(0naW73rUBJ1E^xxt8XNexi?nSQuVF7wtnty(; zPm;i@pPo}o`Wym$NgO%Ksh(+_1Z_3W5-mxcW%Q{zVfx$(IZu)f2>aPAoH!-Cl1a&< z-z3G)^CD+t&|oI_o?q!513;l8%7T0R%=2|2gS@<_6Ra!pjTTol zycF6t%33^^Dl%9R%8E! zRcK}K^B4_Nr4X0?diH;a7hH>R0O?}P?@tcWL@wviH_tv#H>59%Q}#6%&e1Qqmsq4L zhJMl}-7rQIxBb*tSQE59kKog=Yze4f>!6ZaE%I7|Z#mKmK1)B-&Bt*C*-9ao&-ym% zLoSJPj7iXpz1X4uyQzahwiueq0`NyS9`~0wcgKN(s%>Skb^XyZKsV=V9ohvy_tSsz zD4LX_@;x?O($09C`}=EI5piu_g;K+Lja2z%{@^feIRfm3SNGcQFn%q+zojXjwx}@6 zd?cR=*CyRw5>F|cq%(=LM4fs_@E53KvssTd$ojfMWnFXjaUtPmKwZ+(#XVA3;45)o zyc&V6yI}aW(IjqgY(pk@hSRvwAI6P=+S-HIyK%!@GR=tG*-K@npQRTh8OA^Wk%)+& zPK}i>q5p$RfD#17iI?H$U^KarzXY<{M$o~Zrwa&o}E{k`lqp@X{HH>x2_Z5xMd=opYYIO0H;p1 ze_X@eTnOSW43ernu6M^7%|~tOq?tbVo(A#U643U@74VcXwRf~*YVLfko($!5f-p{7 z$L$fB1XdfoF4Y12ML@D>a;r8>g5$w^zT&V2%JY@*x@(2WI_OaD{f~GS)!x*$RhqRq z3UNBkn?IAUo|@W9+kwNge2SJkZ%KYm(B5&LwyqW*b@_gcNp6j2x1J|hvi+*#BT1!%vifdj%09bEVQC#<#o+c@G~gH6KiwQae?1A@ zHHd>Gsc5>?il3ygDe=(ksdg_h;|Sse!BiMEAb+20_9o-hwVG*K(iv>|IN^s$wE zueK0U$M`f|A0EV0`(y4of_!OK*6l?tza$5|@|6R)EPXGrun@ySp0vE!hZ$WCKE|ea z<>ExOrks|h^z~*lZtb+=7LIdZ=L&+j0=Di%5>2&zT7#bTW#mF}xl7qImLunwzt#aQ zITElwIH(JXaH{sxyzKwRyOfA+L&7AT`k6KuZ??1BrMloQ7a4)w`a~Och|}`iB+|Th zZjg{0X~F0q)?c?HlNfH;9q;AyOpPyXoura`xhQG9Rf~<5F)%erOXADUGg@0Fw2LNn z+cvFC*{-6KLVyG_(K=eqHs2U8SHIBXT+!bXw=X@D=g!jEOl20Er57eib|fwgP)!Lg zEK%#0Lznl0m%f2g08{!L0%QrokQJ{HT$610Dl%j$z~^Cd@q{GB{EgAp1Hko7$rxmw z$DdNL$Rh95htjPH)grlAMN&}qndLl6SBEI(Dm%^*nk6rqku_6$xafl_WlA99D#PhW zGI9Y4#ARMmF>k~%2r=Mdj4@a2O5iLHB})y4uL}Y?`N4rGBfn~c6=40CZCEs#ej`8& z#sX}v{-d0laA~+~Q)A4nHX%`sMrz@twTFje+SnTu;%2BHO|WWV)wG(Q+KnZyWe$lI zCWWo;a%?SkquX5O+*%lP+${^K1rtfp{0W$8>dB)NVV?TCsHbRw%kyy(GbD%c;nao- z=8{b$hA!hUq`$ zgQ9q;3EtwkK;1T(41C^hS?E$13F?GbiKQ{^40p0K8m0!RcLb?tLYLsXXh;&!;6bl< znz6pzI_)FH{Fi<0w7=05RkbqNUKK$!=^F4`rJK(&Rek*C?`G-jB=M<6k6h*XcI|V# z-x&?j5dVP zu5Nd5%(k0g4ws2nS`zlTkLhVhl?G?&Y8aPgGjHgM+-8;YA(8RwGt74e~D|mB*cD_0o zr7viu{q)e?!2DetR|GwyTS)n%NiAQWW9Xm+33@OC z0otIu0+`Ze?)%K4X;Ue8NlBLXk`qnJ4sU_XIAkL}sVQ);Rzn22=d;^2y3$YWfnX$o zG6^RVO^+sr6UhoBW(AO6LwYsHxr9{GCje{qG~{rNTB(H(Y40%+8N~JS=(7u`s$}f2nC~1Pc$8xomZUv4u&Q6?dh`x%Nu-yeftOXxKz`y^?i1ZcGwlE+GumXbS%Gm_G_ znq*T3Vg}SRM27j=3m|L<0CcXh_nJ&RUw+TSd-DvEQ1WwT%e~yKBP&7jx#|P!vs4q~ zWM(d!i7tkw=cFEaeKQRcT(ST&1UuyL0pZ6lV2g@wP2o#F%#1MaGY9a zwL*qF8XSxv1cMllM-&UvN(a?%t;sXz7Toi+{0afQR>}9aQT1AVSDkb7Yqll*rTRU` z#_2V)bheU$tqa@?>tqxIed2P9QwFVqu*}3zQGVV*kTRyJSX1Yx64u7uQ(S-p39U;Q zYx$~HPYcN{khKe)daOWd6vo9mtrGSYiCXFJ;*y;n{A0)&dsY_|Hz3G;{5d3U>60vJ z^vJ+J%>J~wZT2U`xElyKISTclN1>-!gA^UbHX?nfh$J7&}8eX@Fb98yk#KU z40}bJJf{p0gI$$ettuBa8RIsSV?QyEzR!IqMiO1I!`15Ir;#dhl{A0eOFwGQ^L&Z6 z8d6F7HqS#%uH#dDNNk3br%xsL;i~nO#!{?vnB2R1gF3mm&i3~jhnwebw!u{fw+=m) zQo$EF6QOc0wg(3YoW_qVs z>AX;h0hJ+VP65R+BZ#Q6QA4&2KU9p||+E>~>x zSu=u3!dT)iMiR*$sAS-2$&ITb>yRp?Y_)_EojJ(M+~Fh+rVs+PO#q_7v%QbNulYm& zKml3b$pj8S!cYcPqzwNgWPQaa$B`p zY&tnGA=n1F9U)~rnLptE?sMxat;8*IrL`o8!;mw%VvxFYG@VH#0adkNE!uGv@Y`xZ z1S!W_yOlnIeI)j4{XtwAAJ8U+m|J2^uxf{OB+vGxP1I&OajiCrN#Dly92X?%Lghq~ zQxxaR$;uQ~o=a*2ZPUbmzUNENl`xKV^ddQtcuo3P@mhsEF5yVLE>F9ONac%H@S6wE zP0~#pNXpd+R4eg|f0*@9qj<=qR^r}iqCQfiqp-m9Xx0I5H5Z(C3zNrvOwRYLccKgV z&OLrP#z+wQ%i6cRrzGDPNA7W}|COuyC%g`5+r2?Q2BRV8A4GkLNrQr@8POGBsaB8q zdW%Wh9$iwdM5i5WR}Tqzl_ZE25zps;`ix9fo6Jb$*-R-+@jBu$?L%tz1r3rG7WZ%7 zSZKs1eN2+H%rbpcpKAp`Nu>)Bvv<%396M7avLVdH?f!Nd&zi?C z4JPsQU>MKz#&NYjPFESzIs)Ztt>BJAmi@-DBUuz96)YW78EryRNof@3v>k{A5>%s1 z=pN*I$7W@5Py@P3zgE~9F|>2*PsuVM;TEY1;|Got$u9RX+>Loj1S{>E&7&nl%#p~s z9jz`%iOU>XoN_la>&<=a{tA?8`>oTm^`e}|@FU0B>^aTx*I{3Ui0cE^#L z%)0m~c~t<{htxQa+}FgTKsX1d8NVyEpEuP9Q!R12rf}~=2`hO?jGyR@;!)cDIunHu zXWi657c64VIqeh5yDAy<6HSdIcy#(?8RyJ}e3yz8u9>B?n`Tev1x&)JARxKWRDA-d z2wO^_O0@cvNDNYg#ejB8KuyZ&tHWjBFaxX{ZkeYxQeZU8!?~i>H2GPAYTU71L5o*c z6|1?^j|hCo-*doIsMPL|rx=;0R)~k@TFnl|1r+Ei4WOo`++l`8n(3e9&zORy3y{N$ z5Vv!URxB?yVo{Py8QhX^3b0QBS65Cq<|NGxCYBoYcH&S)*H_}c_4PC_NirqW?nNuW3gBg*@zgESrh>IZ zoN0`@B|!lg)eH)J0$mbY-dpE6h?+i(>8{SJAYZ59lFo3c6Q~-%)JP`TE$z%tNw!mi zN)oCCYFD8z(TYp+t`0rU@6;Za_>Wnja=~dTWQxg$Lvoe(Wa3f~NuO8yisf>V5cxUj zIbmtqyFQ)L7a)Dy$w||_h*uYnAj#Zsp2-fvsd-*s0%LTlHB|#$COp35UOsDm9@Q!q z6CL$}RJy`@LY{s5+u$JjOzvu1+O?CotJ{jZI;}LDmldtgrJKp(&965TMccCaY$|Qw zNSdXynjAA~$Wn`+&#;h(CgZ%@Scr4)d`e z1#c>%i;+TkA(6g6fb{7$vydUR?pj#}2VJ032pnH?y$S)yHs|NOLB0}8Eg|wP1yOZ~ z3hP}+x431SacjuA79ZV+=2HP6mOB@CMzh&SnN*Rsl&?Gl-HmiPxJo-p&<$3uf3%@@ zt{W1JcJ_M(RJFl|al15{#179xWrZYN-%oK&<--KhuYaej&%K9Zyb$`*mSUOpvYoTP zWGQCptftxX`5mTLzVemvu6Mob^waM~Dg#tdaezD7yK+^4l?)18nzW^alB_~Byhf@c z0W1VF2O6)Hv$BWz6{Ao|0{8-X>pR#7x%x`R2@r)WDJ5&JOb2$$#r>3SM*wtxjD(ML zug~KWWJJ@XK79hX+Pe%@17Vc@0DS-&Wf5%k4kzhgtv}wB5*8ee4xoASlrPxlkn&H(N>a$qdR*I*y7sR^Q$H>ZExyvCKBG@+97# zx%7^AyyNuUNAIdq@k9-rTD%T@xW%iQCC$d7jif@Cll4{uGTDaQL1g&L5HSccim6pt zAjznYnd}m`{MkL5-OZ*qq3^3t#lliL^^s{44thG$`d42cPpz@OE>IUO)9R%c7qe*=jcl7s+!OLNQbr;YXpS6(V zGF}}u7RjLAu0GHE<@bykPBiq7IICc}h9G?&LHs;KTa&U11_`+BA#O=pT?}U&Ni82+ ztxk0LO`mWDay5)viG(oV_t~9#B$sI^;XCJt47=okz%CA4`_Koo%`B61#^v55p4lJ9 zHU!cY@`h}Cn$J({4It~I+%C~_>r1^+tLK6$w`TMPT3!+}xsPR$JSL%}?#@NFN0k(? z#Riol;-Bp`OJ_F~be^T>J*g>LW*|GDmBJ*Gs{eHKPN@`BasO2bqh!RNbF?$uG&>8* zMN%sdQJUbdzK1TB0n2++ZC>qO@jrBD1pR$#upNW+c9#H2NP+|^84tNgFfyJQ17B@Y zA92-vWL=%CSybS0V5b>bUq!BWvCPRFWP{%{r^tEo-T-TEE5`lWkj4$j-^KOSxUjww z9Vd;peu`=?HFqw>W~a%~hz-8qFuvPzBW`Oi#2p=XPpQS-YaFXJ2xTp9S!u?_ZY#Dp zcauC;m9lA1wW0?5)wFeEFo~yjd-2%bZalWX4+!qZb;zXPulY%nSq*X=$C_u<%+Ur; zaJ(N<=l$_G`bSI(e9qP2OeDGZg?2G!oa9|;c>&P1?wYmqGgV9ML_AX#&yyQ0sN zhwXFdo{~uOP-~dxGoKIV`fS}#R{zan&MJBPkdx?>6c{8@7Flps(>w%_HC4OM@Sa*^ zK|1xC_9Xw3cJi4C?DX6{H3O7saJ&%LrYCWIauVA-b6p>rP6kcMcq3fzX-~}i@@F3Q zGPR-APC!{M+k{EgoosYFaI$m-rY1CF|JjFH28y?FPE*$7rdQL=8ph|y;&a5&~OIn7EfN==s>A$>j&x;ZZEvI?wXQ_{? zrf}m`O5XPnTKl>afVZx8cLC)_OVfT?z(=vDmknFotWw)co?3)-A=p1KL=h;#Db5ql zf#Q-2bBa~yIUJa!vzP3Xr0<*=cGtd%5f4)Cf>_UhdvORfUW9eKF#@q*elC4PPVMzI4RT^>*3 zq3vFLaHk&+Ln5D`9@jZ`!Kqzl9nCO1qfvsQlDw0E#9Xk-ZNSKXO8buiV?#_BQ_gs7 z60_snp-0UeQxk2h7T93x6fMcW3y*A+vS+vg0N~9zu7p>kl8=m&C7zPlY$HM5-}tjV zbG13o%)x1>jyCOTT(-R4+_{g0GtGRQFR4;P=;Sou^8wlVlz8&=Cnhl`SN_xtK1=>+ zTS=eKaR_Md(b=9LgZJ$Y;)DHhJjMj^H0^kOFi1bK6B#i1(%n)BvF|w{6wxI!%;%y> zP4btMxf2{0soix_&xwxT)l5qy+uG(%(?9>uAIjsM?|UYXUwHpB@x--WJbAsx>wdm} z{OW!_n~FG^e7%`?&eGXRbg}gP)34g#+q%Rw9UJr;$3Xhk<}2fY{@sCLii@u7mjo%G zjOmLR50+O2xa?nyPsfse!&*)3hHCB{cVe3wIQ^qnn+6Vhl=9I;;s|Co>BH7hCkc5q~qPvLrZMdx5qK`4^7J@F)%UH2wR5k`s zGiZL`6lE44)D{kSZ<`!K(&VX<)Lfx$9c(ZT@ux>$*DUWi&3&aIp?np&OONdcUaNpe z;g!1Q_@cxTKC#SELDpc;Ns>?D#?Wl5u)HmV?u!WDYv8f-33n~+Xd{3>Mfl}C$&Cjq ziY4f)gIUWSv?q(9^q=?h95Xy#8h0t8*n z@jlB+aF}wvZK#&jvdz-jO``lPJ&&m}YfY|SiKTuoC2kX(jX}#~%ZPCsLid=J80nkl zATB;L4rtD0usMl4U~>{@FsrE&v6Rdm-07!x`gkP}>YiNW;6U{}eH#sayMpB3P5-oF zc5pD4-BBFWW%vqEZf)ZCk_1C`NEif6&ArDb5*mn75=mDU*2C4lCU>P+ZK+)VtSFA# z>g^(}J29wXGZ3)hc9z@C3{>rIJcc>a5xzGX#BP5-uI~-v+J2v77?*bj@f647H~Jjg z@$}waT+&o6F{E*HvWHWqcGU$V;8Qw%A09100=fSb63GOzJDkMcWR#kMrP^Y2Xah-| zE3T7}Q$NjN;9P>@{%9OK{XXR%rc-&YY6fN1A~s+|E(8+XGt38V;c7!yn!5tj*qXkk zW`y4*k%D{GMn1x_+M4#}e)?k>z9VB{GI{#7L@`OJ6AlxBrf|*7x;=3DsfMGFYm?gG zG==k{zKs%M^KqgT%zYmx(=Z(S97O-};5a^TV?UmuUG}F%co=dR(r3c8IdNynEq|G~ zjLBKZs>NoywGOoBxYvvQo!#i~?#HAD3BA4@hdX;QG=*Wz#d=&$Fi#PjX%d?>G}(%atl zw)m!R`le?O&B`Bn%+m9h)DRBn8!iUvGZr;h8jM@NzZzq}1tF=Ogxna&-US?nj9E20 z0Atw2Uv3EC*eSkpx_=mP0g||=&-Au zB&~xBW;}FrvAoU;l3!Q3>t~-96Yghdo;BKGlWWg|dxk6%FX!fMW21qPxi{e8|0Jsh zYj?4yRweHtmg%d$+HA#Yy&21rNbV)c6e$#hC7~HJmShzoccj--UdQ(nfYZq^c zFaGP_6^q@KG(+n1CIQlaOf6(C;s9Bf07@5U6dy(gH6WrSEJ*Z6!yJq`z4Kl5D2*eg zR@3k}KlgRW3bdXYVhMdUo51d%(@kcU@eOJB0>1)eAzqd~HN3-Kl6RBe|Ff_B;`p3z|Gos>ydTH$JS5#~ ze72_(S~1gcg}}~R0aooo1|gnKGlY|xVe>4e@I~5uDaoI{l1l%3yS>=CawWFzzL)E5 zw=x;bGa0xzrnh^8_9=!x$?&w-&xydkX}z5$j|Tl{QZB1tJk2qJ&>YPWMz|NcMsR_^w~r{BtF@r`eMYAIA zMxu47T9}TI(xuwl>@rtkhYtdd?OOnx~j~F?@K>fLRkUrqfSN!95dOH1B z7mB<HKhpck(FBr;{mTV(u{eBUxl0jpH(o{2(c0_%iegS#mL1?v8Ytb{_gb{Ng|R zNAdDM{+3wktj8RLNV4K~fY0;}(!4x>JU$fyA-8i!Dfp#7xz-!U35Zz6Gb4e#9T)n4 z7ilDw?1U-^QyV}gnHKby-o3-`o*7*dtdj4xcZKtN^*MJr+bW zXob;aZ)m0Mot>ClYJwLwt^|8Nb|3jrJoJ3TTA>nNkMl`e;4vyX|>~(_uog^=Tg{6VV!*5 z@!j7V*Wdf=oFv40<@1+rCa^QA^joJHiToX=-)$1PdCRTwhrjtdqmLA)sm2LkRleIi zspi+*qsgxZ*rw^4K`UUH<{0FM0EUYdio>#`L&5>H@HEvBIe80$|MbhgFh1u8{u$>n zAOS8lZA*Yf7b#RfL|06DFD2b{KtG%yksoj`0j&727))29t3&!KQtJs4>*bN*V$`NV zq&VDSP+(QctpT!nz5mOvsKuZ7=K#N&O3HrB#2^R_T$K&zOP2SadNk@=7jl5Ab+!Cf zCVgRel?2Umy6a$~qTGT|6LPl>C@DeDQSa-6NnCa{Aw+$& zzZ>!B!*THyuSl()rsAADU`C6Jb%=Q}-CJ*60#4GFBSFhn23RCo`Z_^|C`+f=K^ku) zL6Y$vB&njT3HD0cOfY02iJT1fxlbX(&VK&{68Q(d`)@~o;%+)ll1>g>&1;gjtT*?w z-sVU?{PX8n^4akGjn$bxo3w@6YNt8FLv@*8TnLapOw?t2cQ2lKi1zNZV=x?0R!YEg zadPC+SZH;!h61OAaJAEowsQ)z)fC$9%F%kW9V=W@1c&2TY_`(BEEgb9f62Jopasfp z8{`&`G>a`!JsT$@$+qVBzx!2xD&G93-1?KtB$k!d^P`nS*0;{bYrf_iV`+6gzc(U8m;SK|xiI>ILZE_+)|T87l)jfMviZJG zA97`|K7RTLy4SVi&_y2##rC->9nxR)IV=N&{=-{4pnX{(eE*^M$FKg2ABuawWn%;CHMR63G~3 zoEI$Cf`o9!xOR_dx;W(qZ|aND;$HLA<>_Dk`MCe}pA=91$Dhdh-0>M-z*s)YMR8(V z`dpKLZfD3ni$;{>y?JNoBdtg(6I=wT)xcKa=NxN>{BePvbA(vp^|?ZO0nFo7vZ*iQ z?)Fa9XcNb>JDhp%{YM^($A0EV5rLTm^5gY1@2P_I|bz{#cmZ8_uqF9Wt&f-Hy286--!S8o!=P! ztCwDoF*GBQ|LZg(k-x+AyG9O+c88S40uYq<`h;EF@H#7j`2tVwZ7zIDY0W zop}BC?;;rkgn*9zN@^PqPtEEQ#op78N1e8?wwjLA=qVu!&NM=j!`!ik?+y5?8BC2v z{tSuKx6k_LmVuU*S3wQRnjp8;?&N|V0~{Mt^e(boPE`7Ps%4h!Ne-dnY1SNM-dDa@+%O2H}zgT0Tu>5p#NXA+a_$Cd$cCULd*&Zod$N*Hq|Nu+}>Wc$sBDzhO8S&Vdvow#nb=c-^6Ra{4F_-C7rgV0=;>=VqOwx zD>?3LmyBW|uuyif$jv8KV45z}d}42s!ob4GG~3w4RbD>@V^tKi8jZO7o;%5ic}xOM zR@1%R_~~!^Yq5X%=^2SUqp6I#S$f`+fN*#)jkS6$gXl^c1P2GJnlYtCov9P1=*LUB znpG!n0E9_a>0AI4EHl&$=Rgy)qvsg*COQX_%65W<00|%x3rU|Qhun|#pg1|}Pbn!W zAz2R6FE0r#`H^duMZY15n?5xcAx&!Fx{LMb0!Z$(AkoYHmrny}_aIQYx*I0u$~{+V zdavB^hFAAz)gMU{x7yXoA!G)gad1H0v<*=~$)WQ@E-d*|APM7s~J+7F43K1FIQT!}ayG7&&FYt&hv&8-&o zTOxl-;uFyvbwK`8fYkdO(T01&VLSs6Kef9T*N5XYkL7MN$<&yRsJCG>azTqifPe&0 znxw4Dkf_#D3*cOc5zj#lh7)KFVplt+d|c;wYD1ht)i@Z=WGvY7y&!I*IO(VvNuMIh zr$!`+IQ>fBCflyn>Cl(vAbt9X>7u~I2GFmy7Gs^m{lw3$wBnZaPTaBDj`QuMxOHVI z?%8a{1LwPO_hvUPt{S+VXAeLuTP;PKJdg7arw$KG2Yvz!`z7Wv>%IHd(iL4{(e7BnA8>^pL0hO`u;c; zsds}mG7{;=op;67op;9St+&VG`ng!*xcG)oi~B$G&G8bBmw)z~<4u3&>*C}7_@9o~ z{qJv$*Z%Rh#B0CoE90}i={w?+zxEsBGrsn1@#$atP4VFG|B`s=@B89-@teOmE`I9g z$HpgrZnR(eifF#%<U9Py|B>t#aRW&f9X|YDn1<;3j}bW|f>>>3n=rRu~@U!RMS2_#NrD;I=>tv8B@K zSHt-k^xO90Jf(5BBUBm|)RRQf&IUE_P25GL7lTos?*U8NAc>YHbb!^V%}GEL)(G&r zF&V{;VGrqjkY?Pa+CsFNfFE_Ry?uTzDAH%r`>Q#-+8;q8`;f_gT!#Dz)W$?xs&g&m ztiiLUn3Rc$#`ohhaK&M0W!5dFU@>7$bMiNG&qI z*(Z!EXWTtkx;iBwwCjnnKq2cLI-x$dYG+rPjaW6{JjC<@%u5~(sp)7(choObnJ{ud(iItdyvu_y?Feo z8}Y~!H{!~bT{`U~=6G(8{^q;mUBC2;@oT^M&iIvI{Lk^#}|y&B<}9kM%M5u|%I>_%H?_7W6;5Eu;f%6T3K9cZ?KZM~22Z zNTJc>DrbdeyO`!zz}B`R3SRc%-_*5<6KnRbo4Rmpl1m`Yk+*f5nZ$h46<~oyv`0vVj31mJS+6nN^YsxM_64s(^ z_1-3NZI;e%viHo=3y>U$nm3ARAQ?q2W41<41JZpMKF z?9x0fAWH~2KgprsB2aU)Iod!lv_yign#amy;9eQ^QahHKQb?SCYUlDy?rob$$O@ZkP~#w+yPQM6C}O zY!ZH>c9Q$>yta8>mv?sJ$?I3+sqO1LzrEA|99kDi;oK7U$R;|ilU_vh1KPzc$_zlR zDc6}y=_IdjovlDR-%IS-*c$FaFuk9%%iiQCRM zKp!Pmb&KIT*27@zc+pBW$X+SkUbKkl{hir2m- zUiQjY#;afR>iC$~ye96y>-Kp0J-5ee@4Y=f?!|Y+$KQWfJh0J@2evx#;ASTtSnKkc zSB`sD+i{WpJx~8zyYJp;-*sm!-*s1-f={Qp3e_=UP>=<)ObTyK%ehm%5wejx72Gss$Yl5z-L0z&7!%L8RV-{e0#=AL}T7@y=V%(iu&qXUx*`o*Wjt#^IX)TE`Q>h~Xr1 z03@1vm{k)<+)Y#c%LURg36tbo^ zpb#ekK@zJpt51?zM}5r{MFpQSbR|jpM;cUIk|MkyX{KM=agq$dI^!S$t`Y>xpwE+O zjq8k~rX=n}dj!Ea;$9$3N~Z#-V4-$N_#i9tgk(Tk>X3`2lO@1PE!-l&B!QXBdI_e( zsjIkk)}8={YEvcF<G~2fd|j z>(sqYdoEoAjl2wCe2)oPK_}6&JgF&t$f6EO|fV8b}A9m+NYB)MORkPq)@wtr@$pgq_*U zSf|{lMjz)nNs?}i#&K;@7H#cQ%{{8HJ5qx`efAlDv?eh|;^LxT$((K>D>=5cA|RyF z9~JxxX%LU-+x+Lg|CPYY*C}Kaw-xdMTj+A+=O^$Z+n9dE`4S(sar$QaJS9Nx?e6Ms zlR}@nVu_dfFWcw6UTm;`?SQd9Ple6h>45$&0V>8^LwOk&vO`@IAj_f~#}?y9+@lY* zC2-`)uplu)#dSM7mC%=0@~BpDFac|*S85ckG^vzb(wTHP>*M&AWU1}br&#i4dt{9% zw-}(m_W|!EaqbG_e&Z7Lva1>O0}m8ba~Gh}(zaG&-3ScLozb|reK|=Y=i2gRWjb~9 zZl^cZYNHm?ImpBJiJ|1`(=dC>m|D-g6WGl)11&+rJ{YSDmwSTOvV05l1;=gr!J7;B zaO%(|=Nx1k@o$#SaLTSeOV59DV2t2Wk^{||N^(w~I)xbIHctRtBx&wyQ(_7N2z;L* zff#54mZ2Y3TT8LkZlngQiVh&1xfOx*+Z?HCU$SGENv28 z3`E}I{>6!!`vV*U2(Ttn&8y}yC!;vgY;|ffO-4+K`BCY1cL&4~0{n!~4X~1t_3Dn>f|D!Y;k=F#mG(DOk-BT7#Z?vbrgKBLPI3);>1I=G2)Ty+6J=PkvvPx1D zjco)d>O7zmyoAE|mD`}9`^{eO^`kfF^PDGuwB=($lFTsi2%J=rZUFhSKiG~uxdud7 zZEdbfKYcAeSdch1Bn{5tRgvM5JrMl(yYtg4~A__n5q09HC%h2&2@h z&?a**XnV(;#FCUgT{MNybf-6r5%)2CQU~&;nf-)5HerJAo3FwYZQtio14i@cvOR(c zDR<_f46Y`3g}4i=BzpDv!&qz1#rbv(61bG+`o+^Wu>NX_)LbPcr>+A@A9HN?iloJ@@*)Q^Z{^xP?O!?k#Xlov8@%N<6%LqYW3h|jBsE$TMguR3GCGIj{ zR_YBfpp`<43;7hd+-)ky7WpR`qyi4}WBRaeNiJS=QKVzV-Y-s9L`nT$>HxjQer$nh z65U1gXLL_(Ak424%lO|jydsIX@M-9=w(Ubb8E#3Sg-82gl1}ec-H$g~Cvq;xoXUNT zSDZVdIVQ-H;ZbhNJ6AIa6qZ}>|oCyk|2Qx z84^N?k`bPRS&(WmIU1v@4ocPe&OK>`9XXYFO?H5v`FXx15^&&p%|RkTPUsduMB&b* zBdFnV1-BquK->E&SxaJ-lr=M(w|*|${b}qD$^weIDqy<&$&;SGlQQODR zLlQK#Wokk-{V#Hzl5_g>kdG#E&Gl;ATsba*^E=B`YCwq~p0zps^Oh*uTxuh?M}3HK zKmGYOm)mh`XBkkeCt<55i$lny3uV-D9P%B-2ejwI7-&0_aqLb54H$j~`mc6x$_R$H^MLYA(#MX_>Tt;vR89tIb?E&q%{^|nKCa?2171wj}PL* zy>WbKryo!4593CE7*npX-=@DD6>UlGxo(w7N#ETyi2e$!qD}o=kTZv{<2GxW+}!J3 zp~A&w?qc-x?tVOUV<+BseJ6h7>P~#%+HO3#H;Aj;>*?Mo9^dW9!`FA?A&w_Fcb|UW zK!CacL3IZZ{m~S`+&yRv6H+Vw(Vo;c+8(xqLWf#ADLY>$Ryp2y$>dPT@j$mq#^Nu& zB)KVm)RG>xbP5alORFtY5CA4q`188ysn*Yas0P!l%tqYsxhLZBtlIRI+gpvex7&`+ zVhy2n0l}E_@&d{T6H@Ro{F#dY4Fxm;`&{IBOQ#lhbQ-ChJf>U<)M)`Acke5{m`~** zl;n(iswGs&7Ek@Xn5XIAj01fPHSa4}38BEc4Uyy7;_!9iWO*&WyBJ2iR@3VkuzhS( z$J@RZ8?cj~^ZbNm^4Ic}CTh#T=R?O3W7j96Pj*^DIM>q^a6Q-Yp6B|!tde>1CxI;E zopSpv_+rR91G&49NaCMDG8Gun5%wA1dyF*~0V#mCdDd!;6>@c*5#O{zDKMAhlbfZp zns|h>^g^U+5V{IbIXTV44p4~z$-&6H#_*B+NEVBa4`U6WbOHw$IKK>Tfj4q7gaBm@ z=4JjS!@XpXaX|wB$Pg-khWd=TMFU3Gi9AwsML8vSu4wlAN)sW$ zkt|5A+(AJ=7VsoUwgcQTiLZ+@>Ht~BW#fFcg-!17LK2H$?@z~n?xk;`<{}-}C2u8k z&|w~y&=5r#e3%=kFzG=$FAaL}^v-VXX0ya(bbfU;wmPk7z*L|~amXa*!%$CQ=pgr~ z&B=!Q83S#1TtfQn4o0~$)rn7XR!l(@j!Ib<7hY{Z(3*9CmHL3lu?VsCIZId#Qm-~u z^YgRQF>NiuOE&}B;)J|>+}W4-O|7Z@!b#a@U~kcx-G`EGC5a@P^r7N;yDDEz=LC|w zKbg{pbbpwnnJUZ61mT@Ei#w6|9BgDsx6bkt8cma2?!@F|OZ#SAKayH!Cn595iH7g@ z`-3<>oa7$rcWx}l9qa8l$As;6nhjU+aOh?*&xAiuzLMzFL@@@k?DMuoSt0K;9v)j> zeOo87Gdzgv{ZU+k6h67zix2PYKpd~fV|)F0dN_`2Jd1rEo#mmiY1QEK3Bu5ETptzp zgiAeFm+wI;_u~5gJ{{>WSE*m@G;=Y=B80~YR$=Xj9GKLsvFc1_YNKj&1NQoWfBr?b{9Qec*mgR%UHntDq6HAtC4s0n(FkpAn zbahvE4d1ZGHN5K`*O>qBy4R|1G4xl$q&|zip0%I-PS0~c_jq0ZYrONm{Hb$opC5hg z2wWj}@plIRtw(DdpzOc*{`6l35_)2OtCm$C+jE+b#u|fs0H#1`=xX{_N+8#Un5G{C z+6Y#mE2SmQ!AeC7h*!`^e)5gK*$%(>juF-#)$8m}1JGJzo;!AIR8X zJ*LdkFlOxnt>d(j+smuzH0x;`S~{zs(4`2yA)__+`j#+T0>%CDKkDOtgg&FgBJ8f< zE2Rml#TbfNgd%4JIsg&*!G6_;S&$C~UDILE+7MfCv*}*hn zrwAqv3!c9lX_^@YF|tm%IG3y$f;_Y)^7N-P~*sL+tl* z(I9=XQ9(S{)xH9uo}E{6D<%X~N`{Mhlom7n#Lv+7XnQFOfWo$DIctluTtgEEL;^XO z94!L3fUY@1q&p)cp|1y&uB1Mf0ci5yy$RrX6F_mEzM++Px;<=92U~479E{0Y+9Ron z07y)OnOSmoCRxX8W1;L&(9JXg!zm4GuGJ=h_}!gB`_k@q`(pazF#;R(B$pfQEG>!i z4#*+$d0PZqzi5Lr9JC%xM8J6M%8}C@w7WEMb^zI2%Q$hLNPXyQr0Oxg#WvG#m>LZN z|E|-E^Y&&Yie1W(^U^R#(r!Mb$~8W&2Qrx_X&?ayS{3Gcf`X%jr_>|WC@>)4jGx!k zO#ukot5@yG)>8Z2?t1&&{-8Zf|BF7yoXsIVsrqR(3x`%7R5{Ci&!=Yrc}MM+UcYMJ zc=M+H%<-tsp9}E&j;%Cpml**-Zd5wq^D9;Xz}I?A-(`H$5d~!WwteZRRLS1Q%+)7p zm~>8`jK=N7WSrkF+h*42yAdRw4A$EqlbL4vtv*bfjIG(^JuM*MW6dLU=7;y?I+E8x zfX#N+shyzAZ6;wm*bo+7<6Z!ZI}N{Yt`@c(6wpxu7@>;blZT-VKp!BIsa}WmK1v<< z>{>G@5kKS82-Sl;XD9QY;9KA&_ghbuVn-W7Q>>58Tn7{(vP6srS@XLagVe2S;p;E= z7EQ`Ll|F1c*FV}^tJG+NfF$(J8YMb+v+(WO%{|tFwNhHj`UPE#5F5I>lA8$BbtfWk zE#Qu1{yzsEf02vl`%oNG>gD40i7VOuYf_NqkRH;TvK(; zvplEQO3}XUYrU_*l#zPkCBCb5ls=FOjDYnxW2=pTG86Y?e$mcCH)xG1CvMW$+_JVQ zL~^Q^+4ET(cN+ybe)4bGMBx7T+QY0m7K#$cw1W25CsIf z0JQocIC&Lq$<)P9iNA)DkB2+$!4L=xa|Yy6N3AP@S{3rXmx+X_ zo0K+ZlSw-rkJD%8MObaEwe#?Co1UH&5ausMLk2{Wwh=seH-R05jd=>N(GN`O`V2^> znOtRZ$yosu48CLJg6pM=GW)z2kn%$TlkcW)2CEwZQCt`>9bk-UN>^lT(jH88a=FMU z7|WB>KFl#knviyC^L1&1_>T#Eq9LJ)yx_JtBH|=R)+s#2@+v2Z)g<8({?fY>518L+sBh9fEvh*m09`4UQZMFK ziKsPOe+uN{mO7NMX$`SNZ0!k_f>~+8A++W(ezRuA$>&Ru?UiJiq1w6`Pz<<|HV(Lgs z>8Rk#JWoHPfm!ASWNS-SYdAeyZOSw6&KlX&y~a1Mc$dB~K9mnvY5#Hr1G#A5iD32q z-e%ex;XBU;-YGJ&#A}_Sfzu#+$_jL2Cq(|yP$Ks#{r>nL>Cvh9{qX}oEISKc0006B zI9a`S%pY)}@nNR4z-SMdI{~!2g)9(eaG*QqFHK9#>rjys@uD{mIDEA3xh7ebT&3%KO$1U8^2pcNqep&wgn zzw|SIEkp{!3pmK@d5XObA(gtvBi1%H+jWS>Y8Z0qe~NfT3J-9;IA4UBoTuCnp|lAg zdv|xIJ>A}E4>t$-4uMt6v@7=@nxg=}QGg%DPum9|j>901=N;h4VaSnwJB$el&1FR_ z^&B&fF##lLGB}18$V$Hh(9$4Xq+Y?iFYN5J zM}t9Wnav6K#~76P8S}_J%Cl?CO6rEGVm$n&D(W)Ngum2Z5@*`SGW}zqDUlB(A%%I_ zI0HnTU3KPI=DnPT7WW2_OS9-q8!HE8=JwXACM9Pj~ylgM6DlUI_qEiTuJpEJYTm zcpRYeEd92>v6Zpr0~YX@aTDy&1C~;!{3GmK-dKa(PnN%?z>7Ll7IP`)S7!jIMEUdd z`>TxqN0U)|GoNPO6a;^(4|EE+(h*Fk1Y=urqHzF<`3U?BH`i(_*3v#jn6d_4%SzK- zc&x=vw+M=*O;4Gnwa<6Pmqw0UMpyy@%`yMnV{NEIx%A|)rf8GD9pUfejM?$xy0-r# zBm-b(qg&9u3sE8|Z4g0tH^K`L%woWIkrtbf#zN8ayV~p^KW6SPWi3D*I_e1OZFZr#%^L zrOZAT`Bzq7q@MT+pJ^J&3R=k%@8~^x?f{}`Aj@ywI?Q)U=>C>k!QCL&=X8m~HF$*n zW%d>XX>4gkM>&r}V7amwBiFHrR0^^@yXb4Ksngh{Fq%&M4DFGg>Cx7DjrINUKi;FS zsQcpwepna$>l`9NnXXCZwTQA1?@~HQXdRZ^{ob<5g2ie zy;qr__$%2S>*4NpduM;Yy}P#?U@)x2z%&x_kGZ!k_I?r6Y zN}sK)m(%{y#k8H=wPUbZ{-Fk$DG0d*j4)8+VtnL&tQ1hWj=8WR&hx#o@_!GY%0+3v z`E-1C);>NuZm&+RGrKcK_-MNJri~&LF#+PreU-hv2d&-1&5iajp#4$iYGshf_xdfPlQn;v zCoq%jDm1PF&@y&Qp$*mr0BKHHSjNgHT1V#_1E<G{cV zmfuBtymh;!VdmQ+M8l3&cDCXRZp+768Zgb=y2$&!QqAmpY(rYh^7FJl4(pR|KZ? zg(Hv1y68fsKpR?1KwUpmD`-cCEA;`8(QEIs-cvss+fpW=8##(r0m-?aU`Gf9u3zih zphZCP&El%P&SEO}gp`5SqbmZR`k8{VPOn2pOY84EdEJgb`KX@Z_*edwf8~28bMxPN z-XA~sqtAf*;|G3p5|V{B??EnEd9^4@azwapX$wg;>$AWR%|;Q395jIi@__HVHPpX;kSZN5!_j2Yjwj=4 z-|p6+{1+c@*}5?-Ezhlhmi$=KcIsG~*qlsP1sKAZ1pMePj_cpkUfm8D!VI(kaB4cb zoVVkE;fsth6A~?gzzb=G0KAkQs-tT2RGYB#x&ynGsfHfd*4*G$gZ zs{qIs<7qoh*)#o-$-~bKpwnlLJSNZR<~K|Tqj6$jBEU-Nd+fx{T0t9cJ5oh|Oz^nRc-O z-pl4@)$4r+Y&wm6qUsx!R(JtILRN?k*=1>bQNIe1)ooFmy z!gsbe+UIsR+7In*w9oIZ)n_TI9uL+kFbGXQ3C;M#I+~E3wUo95xdLDtDfIkjh4edBRIc?*! zaekk+Xw9+fF>_SDt^T zYknmVy$7TJ!w>ZH{`d?I3{?u6{HvfA+PKa3@XU5qN0X*2* z44`6$3F*rH)wFsl5S%j%2O}5!F2I zwqh$VnSKn7&Rw_ZjRKSh%giuc13>#rGkX@`b2jaH5P@wV%yE$CN?I=A_+&P1F9YW6 zAKcA-0hp^D{AJ3NHla*m0mb|hnW!*1+St9VtpbjMr~oPqWN#~Dr2IUKS)T7E-@UWh zML<-5Vg`mrn>G$E;_S{>36RHZ_yYDI7_-Yfz*J~CyN{RWV?OFu%qC~wF0GrsM7-AL zyibtT=uk>?%A{3Q2GLy<~JtwpDVFZCu>O4A68y3^dhgpFA zMXn3nNL{N-DH8Ky+%kgs-+H-fr)mGIl=CXrpO&i#c9@m0Y>e}CK-t>LnSTXXsy(-D zG8P+o@6{Tq*_pa`a~}}xxAalwhCmNHKq=>KKDI;Pq+4#binoY-0htR1qLgfBt9M z@C#q93ygUQF1g2Cw&wQ&@(zcC2%{TyKIA*SHB3EhADB59TJbu<=bNeM{_{495I4>| zv=+@H>u4U~P6TuZy7i#YtxhL=$Esn+D?qs{AMqa-^HQf(*1q!9UA%=z} z1k9$Wn~1k5M_Mzqqc#Ju_Oi~+PwP@H-529U`*1W5*c}&LdN8yf_*#<=%yrl3Z_2@U zSTgLBjjri~i_=k?A0M~Vmv7pefV)L#)$xlL?dSg6zuJB_=g<6q|J(L6f91bzKmAw! zYWwKB9~Ky_^W%@(%TGRTub)3}Z=Szs&p-O4ef;4k?d8YM+i|{smG{3iTC|Td_Q&&# zN$8Govt5StXUoj%Kz9Vbi_pfFzFt0Gw2eoP+s2o^+&=h+{$WG=_jLT70OGF%qQ4p# z^?HAN`q8=A{qX}o5U=fxjmlF7Pzpu>Br81$0ux46k%hUIZxDdxI+Te%GOWGj($YkA zz-dWd=QEArQix)J)y8Hq@AB`w#;_~(MhH(aPL)bA9+Ag~s9~<^nG*v| z-74S$(aQIA=KEgP&Wtg9z|qbo;}ENSY)2s&uR?I;7VLT3@;!u*-%LJc)}0U$+BiFp ztf$WWL+xTBH4f+Rjg%>(dUk0%n{c^Wc2GCGizSXq?RLq+Ejuz*$JR3n4?9l^K zHUjzpUs6AYR?V%>%$a}8{Z4+6b>umIcJcuQkSpcS1vdaGnlcM=ea~x2S4txg<`gz6 z2u1Y1bQ+%zh^CP}+!};=Z{?cIh(-Dc;0*H{=d66B={ImK&8opRzQB&}`#hi(SD6kX z3n-^Q?z9qo7?~QqH|ECE{ff)YdDR{!L0ZoUCN-(@YhD1x@Z8#AgP*0tXMF@DRGsQ@ z4_AHwp_{gVUHv(W5K%sg`SIdjng-yfRwY0ry#KXwT%cA+wFt>{q{~k0f23L z#f!{;0*xqIevc00>nW-!>Q)fge%9r~%%vSZY6PWla`S{BRe=vVfk&qM?k!omHW-&`aB>_ z1_IjfoB^7%fG5{%hDP*xmARYp3Ax6A-zBZGm1Wgh!`y|e9|`dZje^H|a0(4vgt(36 z_J~VF?v*O)CUdLLg_N0l`1sjPiRLjlG2?3f(1HSU%Fe%hcN)QF5n5Nu|maN>)wbgd?3xBhH{l~xF_Cido@5(2cIZUW~F&bA+(qA|_ZQpo( z(thF9sQu#6xPANNtbONfT>jn!>BG<-Fnf}|d@YUDWSZyPl#iu$(2(-G1jKLBkNlWr ztzfAzuZIVRZRf$`_Tb60w*T<34YmjE;K`Hr^s7JG-uddUX&-$3$J>*yeyzRxwI6Md zKL3UG@N=JU58nTvZ9ILqtv!0TZ9aat4WE9{cAvf1o__H8_VjZfv?n>sv+ z$4}dXoR1zoY0uty(%yadX*+!Uq-`BOZo`KU+y0YB?a{mMwujI1{Ct18wBF9p``N4= zzVmMTU;JUBM!biGV40w!nyXb4H} zCBuhEchgTkg~2oREeEXih&;@{1BR}R30n=}>&zX=&t0h(%^VF2KfT)aD!+5uMl;Kw zGgl(82(4o!*Ix%LIe`sCT`S#p5dvB1I7p*m0{o`{G5(eUOQhV`P{*`iwCq;eD+q)M z8F*y!mV=NJ`%2oZuYe!gxNTGVwp15!fEt}U07a?j@$WS z*1>_ksQ$p1^hp*;%Cu0r$r6|sfq7NCVN^nJggQWVI}8yqc9cI)`Uj}i-@P3DPH(4A zF%|t9rWyu?QQ41o7y$Sn0B{h=+%@CNMSC$lZAY_dr6J*W#I!ybY_&(jopzAxyDLG) zZYfNG_BH*qo;iUD3Q(ZQ8O<)*Oms@>(p?yOUCMtc-vVmg%oRpj*O-Z2!%+(Eb7=eSBE{*1GIAL^4A$D9H8FSdw3KtB zefcYpnflGr&Pf-TSQA;l)%FL&bpKk>4}Q;r?(6_l0XGEVTxV{)I-RtW**xQ&K9AsMsL++t zOs20z;mf^hUfMU?_}hG8J7Z;TT62!__sy$W&OEyrT4`4hS5D zc-d-H+ISkztLv2rz@DG6Mhh}+Yf01-2r|HJ*4W~rolfU@W{WVlR!Qo-|b>pf5?Lj60r_QxLXw9n_&oM3i;u(RESxy@(eb~HX|FGnZsO#t$1+R=>rI{~g= z`whRL{jdJOKi_`C@A-r6C;r)=YX8Xp{!h1`{1bn={igrj|Ec{?{^O+CTCy|6kj0{g?kt&VQ|a{eS(> zwy*!L-_ySKJAZfk+VA>j+v6YkvG&CI)vvdwU;BD{_eXzCjmQ1*{T+Af;QsiO;}ZUs`@S0C!|Jq=d~Z-C`^G7sUHm!it9GV+7%1_FCV^u=AMv&?aA`M<8SSh?@?Cy@XJHicjJa*jRxp`>UWA*u_QiNo8VNZm&(dG!g?XT_buf2? zK&tc!qMd%^ADaHdpqSsyA!FlOK{3^LdGFQO`00E8Pw7d^a^7^7clN4Rnxl~EA8JL^=R|x_G)`9?-d6vZ}^V_zO6Z9=}t#+cxyw&rB zPHWFmev7$xDP^1Agc<@7kSK@-pfgtHtqE+Eu&x(a$~9bSj3>dEi-cgllL%~R6N$vV z1aYZ)XceuuE`(KqIn;-yu?x=D**IlvEMG-%8MbEubt0#?GiNt4Q`b`N8Vz99ieQ%0 z3rX+Ks-$lmpSEvR68mv`nRWg;!0etr9GzyA-l-~I>wQ2U*~{|~p{@%w(N{qz6#f1~}efBoNRfBet>`SyqZAOB|i zy?^GVKn-_z-&cFcLfe=^|ZI*ev#MHHt<*!A{ceJzrI z`YwIAn$L0~dKzsvRs;x2TujFoc9gb2)w_An?86pnYy{w|)L#zkTk2HgMQJ zw?Ay}?rpUv8Tfe|qirS5kI0ArBd|59+mxb}K~H8;M?ZAkdo8McSpgZ3!(04OURP1coh6%=wx+Z4tu zC+PONfG66{+qwUi9_BjV#M%)mw8_p^)`rPg^vu}gcR?$mjCw8*QqE0D@Q=C4Pm z0W9;-qdp%6I_Y;789`;rn*~M6P~k%**S7vL&h(NFYY+WGBlsZ8UcpU==8eX&1e^%r zEr3^ESi(4Kf}D<}H8+&G1hjN%Y1KU~bWIz$NOUVq*JN&lE*(U8d6)LCh%Lbq2#s)` zI!N_Jn?6H86rI9oL^m?8eZ|kxe(^IF8vrsl1C7=k>j2+MKAH0?CU@C7LYE`hu}bij zyp$m$oy6_qEcF=$lrD1DQu?e@>CluE_?~l*oAQ3t+^BxQn zN%t1`EM0S{2DHMcLj(kPV0>K;?+lMt5moENjFu^&CfE541Q=N6QVZJCm~bj`*=;%Q zOwWjX=s`eGR$|_$Pci0OlPKT`AXMaQ3ay-ZRjyJHBIGFLhLF>|Av%_@Z4=eCfQCxt zC~Z~hhS>Cpmn*{fYb!sTBW16p)%GIZ%s z1relw%jc37Ca+pc5a6>Z+8Su535CfKU#99eXY=-YEQ)r;OKB$N1R^#g_=!c+Uz8VJ*{@|VroQ~lia1EO#IX$kY3 zT<{G9WC*BtAVHheir2wJ*t(A5Vh9LMrWd7b@qs*5A z)HDJ};4@c2Hdar@W}5N^(@f@=Sjymowj#@Cm{WcO_Ux@K{ZSX#jFG*xFWc+sqP@=C zISH31;K@YrY)@*bz4jzvSMUb`<|+&lu;7&}h00_y3y8P~(A_9a+1q@W;_@-}{p4jy z=)S&Yn*J9R4E&4epD|x&-4w0LJTg~|Yp_&1OBrVY^in+$=uDt;C&;`ktBPw=Dy^7> z>QfhH&1aM}&kw*~4bVV;_(i(c`mG$P8DGIRp6&JgYSBgkVMp_MX(r3}F>9`7KAKjg z2H532VI&`F9?NkG+}g=YQuLe9fMMv>gN@AZtS{@2@_>J)`Z3jK3fCcMk^2n+-Zp@O z=enS#8*+6{T1d5!w^k4mYXl&tp8;Kh=*#iAc8>yR1;`=ofR#Ps%Oa6=QoGkg=p;b% zH65joWj}a68nvScsN9xxqIC+cW?2?_K>JzD?7C%aC_Od{U=ju*sO3KQ5H|Vu+fI@z z1Hn~*(IUbE_njBxS-@)#QX&`=QhU<=ZpHENdUne3>NDYaoaF5(=<(?J z$My8z{F{Gsz1|;x`_aee{`i3(K#3^1ti5h-Bu!@RR3Jtck#$syKOTIB*+E<-UuLD z4e>&_I%5IoogK(k4`+b*O=5J$u4`Lp!K(2528QQ-hmAq;IzYndQoGbKc&BKz@9D)IK>mZKDus$>9>5mxy1Tv^qAci%a6tExn~=5l{t z7r=Xi2?T)f5qp{6zcX62Up$$$ZycYrzj=JzzBxK+-#ML!No00lO6rz6WNH z02RUr*b}DAU8ZZP&1jzck#B+f%t4w&3)#Bs+kJM;BY@&Q0t7*2E%k680h<|~N&76% zbIK8lj+O@BRk;Qs?Ll{$Pnp}+u6tP#CIKYe8~ATtMz9&=qIUvlo<FBi}X0%&ET6 z-gH-KHo47ghb{oF+D{9wpKDvs(ABfWtiAZg-)N7%^rZ-@1lv%VJlk5gc|lnyZr3^f zQ*&uS%;fxhy)bw}9Lzc$i14lqB;x|Z4rZxFf8tx7POX#Mitcc$Dsn%I3# z`Jtm}8}0ERbSTdV+Y6{n-=|#NWewAu%C9*{1q3j@ieUHQXwtqFy7~wnew?wI9*AT=E@0E`rgG0=NyLs+zKnF%E$6z^G0~h&@qzQcZLr^bEQa7PG;n*&qwH)9f zIXRPkfN6-lv-YT6mr#47h~Yd^;Kk*<0PZUAdE4IWfV%4}>Z|mLJd4v1X@qjttEkHj^|&gN*0>nh zB>iz3Fga?|`MB+*AKsUkeYo8=MG&V?wl@ZCm{TP8*7ADW3nMwmeA^3H+|6qxtIxb# z33IY7z4Cr$E3UI_`r4b9TN%IlX`8VB1gc5rU~J9OYx zZAplc$}1|*;&qE|BqHW|ko1)w$c~{}IvF}2{Qo#Rn ztbAd4MwjI)_+#L_T{I$$?f)Y(Mw*zwl?Lx~UXk~t( zRW?&F4bUGT(Hi2*J=_HDx@OCfq0O8Cf|#8}ZU?jhIGG6tLGhm(Znd3&9CIX3$(gm3 zKLU<2XyAaz(wyhJbuKZ?*P#I{0OnD-oMes^jZM9opS3~I6d_ru1&nf*fRs5+lMbP& z51&I|4v2gi@bYFdEkDVd>sju<$~{>lnRk4A(FgT#e3EOwmGda~>JE#?+Sv}x97dw% zl^Nnw_f^vG)Q4~?ct?Y2ae+;jp;Ks<06;)ejz}q!1l0hZ)l*$JH)cG0D8mK_JzHT%AmkOiq@v9$wWxfT+ z@$qr{cmLggxBcNi{D<2={*V9T?YI8c-`f7bANT|H-6YcA5BeZoNhZy2kp=@1L<%jg ztiu`^ra-`l6j-TQP{w@UK?b5|frg=G!jn2NTmF&EAQm1eypFu^!4b4V>v9+nak$Am zES(9hBNHVsh=`EvMNBTYeUWq9gAkd3Fho4RSyvdZGJ#-*Lj=U0w&#I6OyquaxswKK zJuegrJ3f!J8Nw1|jqs5or3FH0&TfI<$hBGY z<4D{5t!Qz_AtDlze{u#qowTFTX**xcQ{S|EV>#`$sXy&gK-djakGz6ug#P856T)#8 z0zOF@eGK$n8e4QE@9QnX79#1)SN6UIIBfq%ds4(U1a6V~UZi~YmDxKd!k?G46}ZN{ z_#k3Ow~xrRUX3g5u9I&n4PLncVI%iRqs~8)hIuKB=Q@*IIeNC*nUluYF{HH!6Sl{8rfnOg z58o^Vm8G{cw){db^7%Z>)f(vji|M!2k*fzy32k#R%M@U24ARv#www8N6X56BSsQic zzC5Y4MgqhDht1UQ!CSHMYzkF%=+CA z?RYHzY330C*MSIsa6&5)4xKckZbDC5j{wgcztip$+Kg3cxYv8q+>qRCCQ1w%e&Q+D&69c{?*PdhB;ZyXKhpX`}2G-Q`6; z1~BF~?LkXfs9dj$p?K!@<5_5AK0e5t-%a^$1Ij1XNv@@hEq_NKFt3ylPY3Jmz07eg zPR2l>Q@KawEV^jfhFIWJG`-xM%8jWWOb`e)$vwd5S;{|}F50UAZR?xj0U*CdPeb#k zp>=P5?r*e*U-_{j8t4#hwmLF^@7QP{#HMd>;5l6hGS7TE3!ji83B{3`X_EOSXQ=(o zQD;^c7P#6A|8gmGCpckt6CgQnFC&Df$Ev>f$FF|$QT+$};7tEV|L7lW|K7j%@3n7! z^P6p8@7(?U_U&(fyT1G5fBcVEdX69DVX>72eR#qZV$!MHsM!k@XvblEv+;_qhaB%N^SxKA7E;ovrfeI;`kZ=D1a>U)|#K0DJ$vGUYa zii!|FW+Xt4MnYGTza%dkhLw+DQ9Wa~6BbXV)xJ-^t}7jA<64IBWCsSqN@OVt(IQXP(-M6degY^|syG z@zrYka6E6%OIW&$^uC@mLc|6?#*}IPglOA)TpP-amp+$v%CpYXZZ77wd>n^ERPyH8 zc^ifJOPnrk3ExlJ9$QlGgeeMKl8ByGa^;5B$Y^zFu1^8TI}j<^G9O2pZW{HI0A8t= z0KD+q+?Mud!CdC~SE(m6IY3Z8ngPI=5%V8L$%mNxQ#oGbX1-YAE;_!RZ7tAnSB^hg z&Uu~_;bA%V+QxDihQyCl@XV8)VWlS7Pd^PKfUF5vSkj{eKg`(JW*oCdxCWGaK<4sZ zKs+}9%s#{YRv)x~ayk-%r{@66bp%fwQ95ISM2 zOO_Bci6Dwr>R#)FP-Z@z<$7y}VAHjS9aJ%6OCiR^1*`z-M(0^Wv|-G@nb&B|Qp&VG zfu352b=J}=>q44Q_jl867p%;!p8Ct&Cfuifx!>TkS_mpSji5Tpnn4o;DOMH(&&f5m z>vSB@2&TRY;)ia3>`FP7-}K>w(CkN&hiB~qbZGw_zYqWVQ=a}N z9J6b4CIh0AaZwq^;bm^ntBfB|`_&mX=9Jc2J5OU zH94&^W21hhEd|)~d{&Za1OpM>b*+BPfBM5&nqPHO<9tup1Ae=2H4xuj5eRbbD{E7( z8H5NwiU62pnm)=pth(?c7d*9^IYVd;Z)07k!Rqyu8jf`VZ#AwFPr0$z__Ay`%+34b z(~mxT{{cVNvH<_kANoV>pZRD0nf4$4hyP*wOMmGvwg2Eh_z&7&_zQobe*48={KfW{ z|MFkHz54&Z$DM=j?A43*$tRzbv<0vMD46-B0Ghn^!@{Il1a4?rT$5RDA>aOvNmYPE z7MQ>R=|z}I%eTu_xg0?N!f0SDAq&!Cq$SwQBHRl~B!zP5&XO+8AL6>WUgY|_g>6yO zbkaBGyAbrXNc>FF{Pb)?XkTJL6|p7>tD|VQ-7Ip8nNOvJz?CB{_1!>7bDh@OxL+U) zjS}ED3XvGiCgn^o;?=&@ry=}yWnk?@6IN0#%|(hS&03mJ0U44QBf>WUFN?*rwh$yW z)0RmeQ|WzDJ0yomy8JZ}!=>K;`Wk~n-1HwZRzNV%MPLmN##YYxsr|xkG{uzCZ;^a$ zwPsh9@=eMsX&5jw2Fer7SZSINtQ`6rxktM0ByoM7x8;Zrc+(<;W)_hn@mIq1)K5}( z=}@Hj5CkxZ1m3j{A&!x*=d`vLEA7=H683Cb+MUgm@gU>zbdxY4ci(#3+T_DZs~S=s z0(&hdUTT3c3z+FS`PM?5muoLvj`-u8i)sfZ%w#+ZfS(uf-%J}G3~A>E?O~YTei&5c z{algy=2nB5IpYA@1kanNiggHN8I4TS zzL+xr#``Lh9Hv?>AW7p$dxREUHhBz(IRQ!Q#5zSQF)`l(@iIp+k@r2PxqL(b0K`%c z0HQX+0xi{0d=&BPaB<#|jl@>if2+&hE>yC!7v~6ZiXho)F-l33a18r*rp|q`A zSZF-W+1^g(>1pN&_XhNS7}~YFu^c)WnuUm08-U82(z>Fd<`*hjv?q0~-K!#S0h3ao z0elz$5NRE<)CgJ;P`4SHLHH`Qc@DyU1+So=DN7x9)_XKFy26K(h7j=EMysL`ZcABhTN@&6nGw7HVAli&0QQ$! z2q+iH&@#Y0%dapDkO`2fQK}j#byh>1cUP{%EqOa}xa+&+bDVwQNfA9_7qz%a&DSy%Q0Z?C% z5VNfFb{*s`ZBzxkWUPzf=QKa0GNLI-OLBk8FzRUs!GZ7Twe^K#|Y6rRF@##IMXa0WjQc%wT;9wyUAfZCRQn(3)G;RF+7t zA%y!4ts!h@9^_)cM_o2jKQ!3qt|=tM(Ru=?DKO`q_)goMZ>p~7xQ7B|?`4j^n>k*u z5zrnFr4!@R*fs53Kv*EkFE?{K)oRnsIR{PKZrV+d;oc!%E?|Zh;uG9;-h>`9$8HZc z+oRp>@(HwGH-VhMNt1sx9%l^*Ze#)Kb}vr4q`{vBNV*^J<_E8z z&~c!Xr3F3I7n^GvMVkeL0-H3bWmQTaGP&z}*YbTFQ3BBRht9j+nl*OnHOP4L_pEeG zX@~X1HA=@C2Y;pEP36%XfrfYh5YO!ZfP8b-1y||2?7oKat>s!{!4e?2^mXcB-Z=17 z?iIuIt(?Gwk}}n&K7`Jq$r)VZ{WkhD|GgZw4<toCW82_Uu``I{wOE`77-wfAS~W zzw__>JEf)k7yre7vHcVO#6MBKlz;k9|LOMe#~-)ZY}Wp*f9v0B|MWloPk+z9@<02} z{zQ4n~W*VevWG<+Hmn@nBNtxIP4$}@$wMDX82_ag_Yd&vA%0he{{7Vo9J|2P% zL!o;At2DqCj20JuMOQE0w>;_jow;3r4vi_ZO$A}(wAd@6S)b;$%p^sLB8i4z0HLoZ^Y-d=6oNA? zBC|h~4>CkLb)wAx9MvgRt@0{ATz*6F^m1tgQnz$fr9Wb(@f_Rj(b`T5=!MATJN?6C ziv+o*2RQkZ-%@wXi*FILoCAO~?%nL&+AP;AuYg%jj1m)}?c!X{?03PL+&HC*m@MY2 zU)9yv&TSocIV%uqt2aJX<`rfu0`$!o&|~yTZF3Wb3~Q6HW2b6T|Jv`6IY=6V=o1Pnnw6{K^EqJaWF zRDx;DcUw@tYd4F*Fwf5X4^gN2piQWR_9?F%`O^>C!=3|_-Jh_;s{H|?Eb5cHrWp19gll0Xm$J6%F>$CRp(YSqbGHKs^ zbJku6TAEEVhc0^XSs0TM7;nhz-;3D)+(r(GZ%|UYjX%y*C&_hS9yV9Cl z*R@yx3Ug$o<}#4CmH93}&04V)V0|BYQLt zkUGzth22BA&G0@#EWnz^rXsf06g1Q+|NZf4hi-c-4~zLf{*V9T_VYjg z^Xu_gmlkR{L{*?$5RV{6GKCZ}0x}gPstRCnaIv-s~>WD%}5sERB9H1R0XyBNhloR#Dqgr!WYQN=S_NraR}Ntiyg2;%n@6Q zPOt$f&f=#{LwJ~$kkFD;gFF%F(2D>b!7dkd(vH-w(&*qZ=<$2cTO-YsDN+n89 zL%>lHyMU`mLAlWs2&`cqQUdWuWx8|bzVf3>n`sL~_FE5?i!SfW z>k(Qcl*YghhWx!YQ*HzkeU>6H40Fpd%lN$>+5S>mo-j*uu>`QJoBVc`x}VJD9Oa8D zs4H`RanloFpN<1ErlbbIvRgRb);x3i+Ckv3w>@ne4Y@gJ zrJ*4-O|G+HK=~r3|I7ts4VX8d1asw>)G2dVARUZV8ok^vrH%PS zCIYb3Yn(Z0(*VIk=ud75h+PWc0RkgnrQWsE46|(Jkz<^>RzY8>l9@RO{ToJz+Rj=7 zv~;C(V*RQ4Tv8-r?I0w9>L`4@!MqJ1*5$i0OYV1=Q51b_z0`K*F*(5H=C9<`Erzr{44&xGru%PIRZZTC#&0^h~}?c2&p zkV{pHFLk$sTMcoZRl!gIVeTd@_-#pc2)@>N2G++8R)jI(H&al0=w-eyMe#=w3pkZC(iL7e($EP2?ci)oZ_3PK|U-%dPh4x4O z$RBCH^LPHv_HX~&|91N)|H*%{{rNxt=i6qO%-?#@LjK0z_!|ps{`>#_zu*4spZ&A- zJ<~VvDYD!5d@S$G;{WA;`Cr!S_j6!+j53v0B812Gd}YR|?=AL7Ss^la{*2vEq%Rt$ zYclU^F|CISBbLl`v@pKw7u;(7LcB0Tj8OWMaim!e<;)UqCRsFL^uds|cyoD(b=S(w zE^fg{%Hww?`j3PAb`~sPWS0(FKKr_Ud^W8;ViE9BBxahT+P-YcoDrg43?Kj(pvvm+ z#Pv41FJKSB#iVN|gwz}1+1|8|cFs_7V1o%Bk#k;#VO*wfFn!ugeF!`wfPlI0`nHkX z)L1DZr0_YP1Z7GgvfK`tPHBNdTsXC_EU%|eI}lO_U5I=GIpx2TPO@kaN&N~a0qK}q z5j)rBiq*8qHise2IXk$~ue2FJQV~mBQu!&nOmg9pm0vR7-JO^ZpiIgpnFFs5|FYxw5a;d{JE*VvDdHsYmx`oxaSpv_B(BZ2-8UjDzIh_ zav#_UXMMIEB8+k1%=x~ONv98LEUy4;!V72r%&jm@ZUyD<6yTRpPk&$4E*1{;_uDLE zbC$E77ckA)o#_vw+6j={VFJ%Ol~azHaXHLOc7v;oyJ*gKeV)&`OMOyqa7Fro=8-8; z02fWNda8?lBph%ip!LpJ&K7Mvo0NHMx{w4}l5%G3i>#lFckZY&{bYw4+QyT)B=2YK zm3c_s@5KT7l|MHPSnPV&?mo8!=()5SdVgBwdLt>Tv8k-VA{gj(yhf(7$= zxDtS~A~z-NH;W2j$+Vq0numj)y;i^rh||}g;Izn9S@W6ySwLJbXhhLJHAh#_grXUl zd)*`-LFDwbEp2TVxO9|hKBx9c0FHj~leF^@foe5#YdaI`AmB#7T8rw2-t)8O0`ib4 zeRmiEnYF5AeF9e6NV|N~0wqyWOiE@7l>Mz*#nhfJMNPRgJq5z9UVM{sySieFYZxLqo(taQBe} zKhvmfXFkfPfVUA+<;%5MfWEyyKK-x;-kL*_>Yx7UpKjmy#y8q%G%5f>gZS6}+F!f9 z;%`3$D*#9YU1*{B7gC*8?a2u(@r zDHD;PK|BqxU{VcRMC@Em^GJ&|PhIo45H%?~n83PoJSks#8_XS81gOcX zG#6E;5TK5)(kCewD51RrSc?GW9udUM`o{rOLbE=nDp-8W25wx!%_rrt%3b4DlK&(aU&)Q>1<4ydd9 zJyRf#ylAgRvvxY3x08(L(RkME(fxWfZqHBU-<-6MPDbs+Fg@EW3UmmoC|}wKq1yYU z%{A9B|1g@&QBm{8u?H2=cA6L0Ws01p-{%2;Kl?NPef#23P=*{Phbh?8k0aQV?rSYZlC(z2yAn1tosAyYW4S>FooSYJXNn0P5)-rSjP3QCYI&=e| zMDzAj?z1xKryl9+vbf~EU`m4Ac7#D1>9q*!QomIYQ^ss1i!;@$^=U5DnCJNf2nRq% zc-;tb70GjfR$F&A&>Wt}_mN^&f6*w)b|1Z9AY7|2&=FR1VqK zbAs`5X(es5`p#Yi)jW(P<{N+Yuhg?0+}rMtzw_}{QMq^DeYXg+k>DshjgYi^DD>h)*T54Uy`Reznd+JiB_oQdt0GBwGXurSP15tf**Q zG&cZtd`Y?nloknC?B-HZdf&RP6VdWxNqxG%W(PkOs@-8KqA_RHA=g*=c~(Bw>5vYG zS-d~56NGAH0mn|*ep$Qb=6Zr~|wrnf105OL>b#7NF#x!j7MZs)g!#M@!DzL12_hhU zBnj|j(M|{;VOF8vZICi{FpBhB`8uV)YB!ubqcp&ov;-B~oY5p74z}9E-9gS_+YbXB zW;|1Y0My>D@qDT?ItY&tP;(~-{F35w&=}>rJd2hxRVmH2G&8sP32H6$^i5ea`Q3S* zYtPf8(~G5cbe6t38>gtN3N`>P-uB}xbC2&eL5VPWa=zS7FYSyH@Eu{6JB{uyU%ZTu zC|<4I#ldQ%cCq_q6q{q3Nfk)%Pfsd*@jzXVYnb=y`h*5cy=sZcf_)jna*+*V+=$Xsy;3 zt^xA32}SkkM*1MDHRW}GeE_o4ZheAmnF4}A%eq7`OdnHnSig7>dPWdE2@~aST3c=U zK8H4z5SlhiU|*W(0O6v|X(#0fQ#`Gv6iWM9yR1~VgyH`9l*4>|>kd(#j~_p7zx}uW z_DcKX_&Wu~AQFGKgCFGo&;wzyxDb^}lX9^re<}>fUctMY0$3~p#KXeIw0ab&>FvAq zNO2-WD-T*01OKtjjVzLYMo!cPECMPj-=jsJMG1^mBx;ypt&=c(3zrX#zzXG*#wv@RUa;4*8ZtOlo9SHL)luE;UgwJnQKS_}G@NBjy@LAE#`3-U3pxp$n06fGd zgk>XjC#ja%17XRtFcwkIfMf@TA#5Qa9eCB7j-@mv?JI|OpYvDd%n%P9bcQl*=knRWwc(&yW07cluf z0F*HTsDL;CWEKWPLuM=;7GVh#>GP7znbmKJIFO5u>NE2NBQ^7+=>e?rlD1|nORbSH zN*T^Fq!d7A4n=+v_E4nAOWbXDD_;+#4Ke|{TZu#o~0Adujx+1 zY|?k@_BT%7Nx?kS|1=+&{PZAP9>(Va1DKKn5Cd+@|1D($>gJCi8bI1S;cLs}Hkwb; zAB&nN<(r#+VrJCG7@@V`jlSOuU@&I6HLrcnFh^oIrS+;F%aJ)G6-c_R=F=oaoMf)g z!c3Xf4l9!6?LOw=^hfCrv`ugw-&(;?*0ki()&Vz;TYjJU6MBHq-Oi0*gBl}A-8Ukz zlrWq*;S%7{=~@~`!UZsR8h~NXd?sylqJ-6425g;&2GQK}|31h(0S>tz96C4U_yjyN z?=wHF*W6MXI!>2N;s+5{o(3E}-QEdU+Aj0)Udj=KqfWrBh+_gVv#4^eGpFPuq>(S7 zGc_O#7TrcS(ykKzfSb%s04dy zZE#(xv{MAa08PSKPyKZZ(zB-c2cpO5>UqW{Q#gHv)~8-YxAe2C^J=~1y`Hq4s~yBv z(k2nvJE7Os)I0@nmm=Kl1J&sh>z1b9A0feJ46H-asp&7lm;&qoI$IbDD7B6Sz!^8f zyc*a&ix@o4{gZ&i^YqI_UV%+?GXqo>j?1D}z;Ec#4Pc%A&g4P?`6&vi zkCL|o)y5;^lCfd^B8Uz$7w(TwKlJ`veON>eK{G$-17S-I!W^%{AEQm)@BwH zLMMfeS5eQ1PX6V-NZPrN`6OTWa+bTJx`keQ86(Cn_ERok`XLb`-nDUm2#RL|CwHb` zS2G2b{}>{dRbJW|47SXHKpE+;LlP7kxkS_@%;mR(FqBC)e-4C*Dbq76-zBC|S}6n| zge%uN3Rs31NIou-6Cf*M7N+4kjDmL5b=py%^Q`MTkZ%Nmm3gp zfQVLvBm3*ItrO2GFC{J2gGkWt?(Dax!`=39OLXu?+YM10rXOtiwH-!NIXH8z7T#&d z)V(J(?ow?!K};^L_620KZ0D^hV%`9owqq|`#P`H zh54VU+U^>!&L&}4f~LAzj7jL>&LHJ>&5ORr*k}_<+nI7D5O)H%rCs$Gg8$1;2%rog zz$A<#?JnVk`vNoJ5e7NOAZ?F#UD2PPOc(8=Fw|Ew!bVjxOzKvPmG<3~Ic`w^qK>Q; z_3D9J8B6WXDRoK#Y;z`M)ci`_u@XXsZ9w@0bId1nU^?bx2GD9KkRtU6%@6Gx)8X5G z(8itFv1K}Ls{xC9o9TCc%~=Nk%_4NAQYB?R%1~kZNkU)Is9ew2Z#837b3BaRI;Ryg z>Cggn#&vUZEYCA#Eh~V?nA~Kn0ku2&a+bL=zm!XHDF9-lJ>6Mr&vrLzujKu$tnt)u zf6xQEYHPm;pU6)E-_#YoJ#^omd$-y_3G8{Q!Ouf!+W^fb7nHA-Pz4;8@NSso!3YFMe1H~sk8pZ(ePpZq8PNxlCyzvkD} z>ksmvWx}*M?USBg^9u`+J1$3lsa?8bHGp7Aqc4b-S08<@KKc_NlrxiW z5e9_0a;^vVb_cY$xiNxrr&8g`LC7M#yIA= zrkwB27WO<(-|5qgZ$+u64rf=Z?f87Ty_xmjFO5rpM``M5H1bzL6lw1r;H${gjA6|a zuep{k-k*KbF{yI1@GmEUtea8;BJ-{=>=(e^+8#aj2ONpVowM6&(~nSvlk>NgL#l`;rwOPvX!$CFux z;wm6pIvv?OmdiJBFErgYr-V-0MsuV5<5Lz;=_&fk&T9G(m`4j)gVu7Nz*Bzfd2Ag^ z8C+{seF(OEl+jhfN4YuW-n`T^_-#tRWeyHkF52!=`tp1l!GinFq<}WTo)CMSi8a34 z4dVXzRSz@xANT`!6oLIae#h@T`#~Rwq)BTx zhf&_ps@SmqRfq<&nB7|t7sRjB_XrdTJq*f(ugGVTSza+%%vnGH@M$sf0Yel-{Pm!g z5W5h~?mV5vl7&Yy7Ij?debniixyP;w2({luK6e0id1dDagd~f$00GTno|oThE4eIA zK2D>6VO!<_N6feCU%J8&AwoWN6-RfBO#LeNS&O`SMqs9{So@q!ConS z+qtU{j%suJLa%RuH_WNdbVtxZ8foK}o#ic0dNaz^@Y_RGR0(cXG ziN-QRKkIT;iGOs+`r4Ri`qu=Q-Y2h5#4k_u5S-&+1tN z^1QT*xt&8j0$$qy=Dsq!=N@HZ$e9uqw1UYgsuIViUVWaVAJV73!1N^A&tt+o0^ZW! z1>*DBJ+>XB5tI!5K^WD382_M@2L*vk143)ON{|I0N7>h=fH$ZZClmKHbrYzQn z6q9wHwHF#?9a6bbO5{1;kD`&PoZO+&2U{ znpftpHPqLK*}hb!&)%S zx{!m0*qY#rPw;hCfLu<1R2|f>_(J+Ag?FKkw$SII+xE9!spxG0aVNmiXItN1ll^rO#|f4~nx zFruu#`qi)2V*So{zEfJXFMs*V?VtPS{<-!S|KeXPAo+tnm=m&giz;CHvn;-ziYJpi z#OclA&I}PEb$gaMIBNw!;zvnpD${I!6J>prdyWJ{*05t&iPJ_qa#>V-~6Cwy_S^Q^o|}O3?bml_;C?1uBwe;t_Mh#79hVC5Un!t zn3R`i^4ZjWe*i#fVDrp!zTXHK%PWmFP<|bOV=H}j5GH%LD#ehkG+R5^TnUp|Yfp!( zVJvGEFcBDFi@ZVe2$cJo z|HHgmH92JZZ-0n)Nw zAG2Nnk$HVR3EvDYUCy)i^I*@vKR*31Xa0ddq~Kw$w(HFA{@uU3{l4G#``YjQy}!2t zYkuMwvw@N$YQw7~hv*xedIB_%2|G^>NTlnJN+j8#Tn znYksjKAQJML?c&eeL`Fi4aDX=(`1x#Mf#oP9Od^@^~-k?#3%&9zR{%f6kF8FGd)`{ zgJgUoc0GV|CiKD#NnN<=m?Q$Q z$FoU$HJ!9i#%Jw2qmzK`5IEYa44xpDwUkABnt>`}KS{ZhlqcCR;DxA`HZLc@MAKW2 z@;WF7B20)VlT6x%80#Y-+aGPQHZx_t7*A7&ar-!g@J&h4KqWJ|KJUQ*S3yEfQa%@g zc_xk2OH4fk4kCaCmcdf17ttz zn}FKO2op=o7j1W=o9rr=UE0mplmAx=$v6Z2J^J4yM1;yeEaPU3BnYm2f9Xrl9tZ3) z)m>*^tfh_{nHvJocEc=~9_^eYPhTFDw%t@9$Lr}?^*@HiFBOn1E$Hnt`Q+IKlo`_4 zs}m-aYLe3XB)(gdZy-}a*bV$rYF z&>m6GJ)Kki7C=N;(dRVG+&N14$;31h=_WG_`9CuwCf(Ut%8*m`B;N@hkyht$xYaIG*HGfj zfBwLsdASBHttjf&lkH0Zw#l6&6GiS)!unCJdpW%f{kX_;X6+YGNA0^2NC~t|=-Lr7 zR=fbMDEE<^tTs#t=m8pB@GgB}EmgAY%so-gwC4aLFimKqNj(byHYY1DX6n;}^{hX^ zGy)b^dtX@x%1)3z5LDsuNaL^}b;{ei0>T;QS z1|){A57NFN4e!RF?PoIVZwbuYELv`_c6>tbRpfn@MDrV7mhnD|WWYDQXW8gl-f3v5 zZCkkmRLZ^k<5Q2fqL+ZgU;Ar+ZToG%?YDgoME;)N^Lq;L{kmWG>;5(n`OZ7XH~sM0_e|#B?*SYXh|H?YvaMGOIq)jP(n6wrYas^w6G?uSGV`X_ zP@aI5e5mWG#rh(#p#5H@_@#&httCL0BC|OAWqvE-n)jyxD94c)0U5s)kjd}4ycQWr znl_GB?#=YP2*Wsph*oc$=M^XkH7rN+{Ly40DrLS+f#Z|`Sd}Iyi`X@YC5f7Li(~UV z;H~>7b8kqZokBrXt$W4B#Z>|eVbg2Pt| zsHq)Yv|S(My`G?rE6uJx$}2Mo<|CCv)fNi zQt%|>H_0`m?=owqO!?+$U^Xz$Jo9ex6`>9T0ctTi_3;~jEhc@$8i0Ni;`_7 znBhe`8i#p|=Iy(qfcP+cJ7&!0lQuI3>4S?!1fN__gKu7bG@7;#Gf!V-&ODD$^m<0~ znla2+U`MM<0fw0em8iTRcKR#x*4)*{Rga7vCTL60n`_qu(yW>{`V=$DH7mJ4{bu_3 zhHD7niwg>~Euly7!`ptKLgpWh7GYViSg=}IHuU!HW*C12kqR`)No#fua~7}+P0al) zBHTX&!qLP7D(InHgfwW@F}DdBC~Oxv2$%yUN>5Z~=72GPjYhJB^#B~&HI^M3No%Fj#RQ<;1*@c*rE#1rQumaP4tBRC z0bwj5`Xp;7HMBmQ#7*>wX1mhtSfuKmA3K!FGk`&7XdAymT6CE#Dge<;w6^kaYhN&! ze3(F|r0M9P;3aEOTkl+(Y>bfGbLN`0fZzaB^>LIS8@hy6ICZw)x_e7qk@C7ypnz)X zZ8aA?OCMP4T&#|>R^^nWjb+8cYhI3LjjPliSCnDEZR**5P&4Ma&)8HDRgT&qBlJJZ zxInI)o3^y2QKq$?=Nc|4+IcDdG@T`2drbot5oib!`quLZ2Qn=L>jvx+ zJTHo8+#jEQ)HJ<6KAQsrm4bwJh89H11!qZuR%!?mjU*F@$ltvX0O=4&o<^>S3!;~W zZE*u9m1sA_sZu9k+Bujh7#%y5=-?1xM>G(|J2Np5QYQ8=M?N7UPeb#{*X9^gCmrT@ z&noFRl&3&QO7tWtc0@662tsZd98Q1n*0md3$P`HcTT;p3cVQKf21i#QafI*|YPK|MF=6cVLA? z=2f5ij!9Qpi`0wefyBzZeUjn&I3VTqcw9tycevdi?e5iX2Wug=Tr?|~ASWPRk)r{4 z%%HT82(459%GJABIoc>mF)b`aSCEA1MS zEl8?d46bV#Iy3D|y}#ovb4#^riZV2Or2{gm%6Gj_|F z6LtuZ(B9ms00HBc@@T#9`lf(+t}#|GX)H3vZ}Rzh#{Am>jNchg+qcff?W4R3I6KKY z5wLX@D*rm1^y$K*RAb#tvBe_0h8B2Y75m3p8P2XVq^4r-$lkZiz0OVU`)qKJ6-txl~x8AKh zfe{25GaV?@f7|Id%$k4iMkSL*Q?iyaKW#G#xR@^l)*eON#f?f>Z64PXXrco|HrGmM z+}p5itl*t4xOA&W)&SZV&{g>*b6eHNxMjju@P;*#YrLxYoh8S5*iX4YAG0X!xO$i$ zEE(1{uvYFHsfRg$-igBAOWXKH=55g*(cF&$n1&*{b009)ciCAgOG70^PhI&@%0XGX zX{B$}K|dC_%zLgFz$BVqfn8M`A&`k&bURI{4J7i+&5iU;-%58o&nLWFi~3RDXtOhq ztu+g%)7ClABD@F9VlnZ2eJ6z(i$QLy6R6d{=+;%*epfcMZVl1QmoIwOMP+IT@RKS` z>Nov#Fbvnoy(M-89HPT`A3@VGyRgYdXiL7|OiShBWizaV3`lXoC<5nn}R0v_!xI;1Gso;W1Sdam_-f zdCS_U&+>lJgc{e+0xS?x2f#_=cCfYH9)_TDj3zUZ zSqE8+bh(nj3epjgx0h?x5ilxJocCyo@9uy~s!QtRHlV+Kb)zXu{ifG!cy5Wx}c>2z9YX!yj@PUxib#d(=uZ!3@rmwe`(bIRL{n002S+!jAbC_{}-x+7KoIoSobXD9nSE-X{+d_ym~J zFwjc#8PpC<>UEemZ=Yd)Q(&CKp-VAVZk>8l>4%u3Mn z7fO>uyH+W0QilR^Ini|2$TR@Zq6GxJik!~m<|A#j)AsI#E=dDI5 z&*)jk$>sutb_WnCBHD8+4OwW@e%kS5IA~8p^Bxbj+k>q^fp)(WOVJx402|D)n0<&@2r=RfP;E;O6O;=`(o)v;im9V27ZJ~^K$wlZ z2QY_Ov?ka3%}=*s>Uxlc`d}jx@z!P=Y=tlfqXlCX5xHLCAP>}rNCaGP#y$%3I7c)? z%@5L;gFKgvNVABU^F1Ur0|=bn5mKgKdBe`re-%J;xzvuP7wyB*xV@ZA3v9Sn+dXVJXj6ib%AC^H zv?}W^^~$`=lq|jwxje6#`v7u!spn}7U=F>e`8F?EYWQ>VTR+QW9c3PibT1(dh)p<2uLo8<$uo>f%l&MXSP zAf&)8-{rIG`0+4t)8wLMOM8Y6}k5V($d47I5DBq(HopG)!lW%BwnZFSEG(sf4ZSSUwF#HhV zJI11Ih)8Hkh>kkbNMd@-IY6}Mh0vw%OI4Bn(LVdxmL@BoqzHPR2Vx4Z&c>MDqnG0cbmE+wR(W0McsO)GJazF6H^7g}?+c*;jU((5{?PJeBEHzg&md z-2|kD==H#!j8SU3l`4|BX%;xu%MZD+yj~grfQLXr8)^3s5_oA>n2yp<02NJ$eZ@ts zhq|``;Q{DPz0>vO^zQjIb|M(1DtQyE6`Y_L~ zzRq0q=Y5$H^BZlu@#oLwtfce#zUF4S3**wKeCX^9vYj?CZ*8QFd-?uh`u<^nBtU5g z44QHw5$5Dd{u9gq%xa$*YKjwPXh3YCSW*0$KeN1+RwwP9r_pIzwO#iUov^lf#-Ctf z&u=?}0O0_v$a9)*a@N~^lnYDdifuq8$pG>?>FH$M_N4xg<^)&M+b(110U7NP{ImnsPx(qw2xz#f>XurDj z`go?!Cq$R4f(dhfeClyKWcSBsabS!lIG;z-4+6QhCYRVCOt?qYVfy@bz^wv=VVt$A zK@O0n{CP;Jbp~8ym2}No7D$aQNvngT4g&k)L39y83%CPVdmr2CFU-HdMV=GxTB%L2 z&7e7Z#_kSj6W7ax_iT5&JsNK3{jfc;TgmQDp4NhA0{v`5kG_^fuzd57gFrQqa^E zYynz)Y-mPlI6gTYwd1qXB3k=Q+&g>i>E>2D03LJhZ$~)Tk?T?NZzMb8vc8e(T({FO znl~YUPUifIw9kn+^C^<9=PG@I`0s6}%=Evpqn$48X8I1Hf^Ukh;E>m6Fw-SQx zsjg=tBOoBC`dyouibr7r-PDY5yC(B00E@)VCsm%k*x zhk0rIyHK36L$jok$|%)eZpr-0AmfeU z(s@RcNuEu>b4oA@?XW4tDC?fq&vt{aGJjr){7sv=PXKfT+H$?fe9^{C@w9KLok!?g z9qv}`)VcCe-fG^g0d5w66?zBY0-ch3^Cxs|xrgL?YlMrFU98q1?L43Z#O}UPDdPaw z)bnM)*HPAteqgnVte1|7;FP{1JnLKTPhK7Rqy+ffU`+#nK)-y(@&S7f=vQ!3>ck{o ze*C!(-7eqOtnUKbS9hMxKub0F(kM z`BLML_s6Fn>9+ghvpQ(I(8d=LJH;Xz8)bHWxxs7H@G$W$z*L)8*rVIdt z8LGAo%r8A6Fo1I-fFabXG+uUg7!KM&Km-jaf<#lZX?K|bkVhesPXjRRvT~4D0BUP1 zOg!ZVZ&dk2OwP<_Ap$Q)C+&DPPCulSwEw1vAp+LhR?=eLYqICuU^J=Mb-qUIw5%My z5d(xi5-EaI8~qPb&j7l;fSsMKt$;yJ?`aconR4uz3P{&R{QRCI3t@ItAos4nD5y;=kGaNpj&AZvD@1}uC zbS(e|iI`Q6x|}r9JDcm}+cZdBM5wB(eQJS0OuB2|Iym$kfRSLK*O>e5*s#8WXfkVs znTR~Tl8+JL$It`FGsljkILdsppY1SxhFY8#sLQ|9<09{8xonQ#@ABHuSUH&!yZLTw)qdO=tAKUd$3dPexNKV< zxOCrUgd3@ZS{Q<@^-gnYC*Rb^5n$fQMIQ_|+mrOyVde#GSZQE0dzQmYtc5}9!2)3Z zs-LU~`T^5Y^PbrtulcQZI?9PrVsCYY`HZ z3$UihTAN+J=C{y+ltJq){X7>K+I`cIIrVNes|DI-9mz2$_aalX`P#uIz?3TFxUo&!@|x!iOOB9kwr!E&CrkNoTbAFf6V#i?se|RDrm( z#?$nZF{>kkLz5_wk_Ak;cUnfkmfI7aB$uQ$j@Fi$I%O7(%=Ok(Pqow6gLaiLnhyMM z%oS!{f~$&@!XWq3$chKxJL@PRI%VjCmjSPD^7#O)KvTaYr&lfvG`>K-IuN||jdFZb zb0i0PWh^KO1o?FTX#S)f1m~$m2e=%WTP4KaAD?>MO_lrOGdO5_FeE-Sa@jG3+5w?b zL}W2BQBn15wu|W=v7o)uE%im zRZ08Bkc&2?jv-LxcapPA(6`{}D3YYSZ4#LasNjnR00G9O-AY|&A$&|Z0Hy_wkm@hb zUkk8cF1KsR{xHlZKy^RFfM4JnL}xNBEs^NSVL;u3FsH+Tjrg~6&!F4{YM<<_jR26% zzU@}d?JzK)gQ>L~=Tjej(M=%f%MjRfXa}1in5d_eMglo7%*kR_Os9x?>helb<4Dhw z0L{*VGDc~eF%nF5nNBZPf|N}{w<|-D_BMD(Uli7)0v5mHx5?lV13Y@ z?Cb^5t=AmIOfMtR&#sv2-B;P&T8|ECer#YYP?zMOK_S*Z-{oVGCEg!eH!vNOPSz%Ubo3YqW zo!{BrZcl;8oW@(ZqEzL~)7D~+VWdpw^1>mAL@B_-|IBB_e9}IBXAJq_o~KQjp|#Ft z#@E>B*YpK%P}?r*$G84S9}pO)5sV4PfEqzS_6R~j?bS~}%NU3>MkCNH+AZschRwQk zy|Lm$SANjwW!5vgP&sht!23-A=UN8>r8y@~8w;R@peR~emWzyT$|>_}=B2r={9(!$ z6jDKESBv&E>;KUy89?01d6;=M%xe$M zN&cFT5w)4d=w?meiJhN}Hxm=OdDD`XfKOpi>puEU}E}EM zmC^=n1lljtcXrjO0J8j+OR8@=ed*?DyQ0}jQPOjX#rZgz!-P%gbM6!p=5YBP=ge&Z zv6LLzj^0}l9RR!B{jTk9QT0Rdx7x289!nkk(z#FSlk1rCKOUj~biCG^UnxxpsJU0= zb698m)N9*R;~l|)wM1F<`zz2xPu#ezDTFj|(NBufKU z3^8Zdg7U?=4Cv#7a#{KKPA8Y`WI{q^dc6!tVs6etFJRmm2w$7kJR9(t%|bY&W*IXV zF-OcQiTCA7;4tlC`a`1G>zi&uItwA-TSOv9OqH!&Bx;F*CrYKt{SE zG^tJ~3cw%%b9$%gTMF`9y2-epV!1=Qj$))4*B6ttHN>0G&MbZ7&>zy`kkC8jN*U=Z z?39j{shJ5z;7_HZ$S<7!mvhR`DD}w3`exhQ*sMC;EYtd7u(a0^IPyF@G%!68O6+W5 zw;06N*r>;4#x~6^rfwISN{N)dLiCx=rk8>CsT<90F_`NATWw4jHqeimU@+zY4P*wg zG}6P=Z6ke7Gf{QV{TMpto?G$_O-0n4GV`J;JEW^@vOYm&(@2!mpD8pfUvbP%mJaFM#eU#QO zeaSU|Hv3tC|K|=50`7O(J3BiO2DZ~z!?tgK{OWi40yCd7M`)i;XVa8oeTODwzR;tXHFUglluQ`-?{%?daK9y1kd9@BjCF(+tN#BS!o zPOc}6uIJ%2VKk8DeGd-l^oMqfkKu#TqDushj-)NCnYVdGOSsZ(nB%DzSDnnPb^y=@ zVAi&?x#vmd=0QN+AZCzu7h(J^5Rayf2Rd>A7w1GnY+|}*39Hv-)#Gz|DnwP^ktqwb18yeu0}K@ z6fN~!FO9FW1X!6FvZkxg^Os``Ya%eaafLpZ?RPl$yGsH|P^F9bXJDNZEEQ z>$y7t4XpTd00)J-#o7`x9Y zEeol<{8_3#S$J7_q7r-l%GK1BS%j&9$ukn|?5e%2T?u+>2tF(b2TiH6UI2>IS(~L^ zmC7N+2k5z33ou0_(g(qYrByu+k@DOJ+aabwG>ASh`zpllBp?;xV>SY$i|Pa-nTTUyR$!#iV`9 zt~8U=_Hs53@SIof$A^*i@};5RgPM2w27Cj$x?~Sb9Sk$(Y12jkGv8Muq`iETPBVU$ z`X+sY(Gdtn0p@-qW#5^Z5K)ZeJoRAe;hgW9zH|+dR%6#!Ywj)G3WKXau4XfZsq@)xujkgH?1>GC5=L9 zuJe7mt1X97MfAv+(a2n9zR@CtQDUgB$$jMnpZUOFags7=H9i*gdwN)-Zw_zhV)&wBWREG>z&0&>VCJIO2nj=CskXX?OFEIssz0D!Xj4!sjFw2^B|e`tB; z#WBt8#MK%Wfr)Ge$rkO01oo}t<0BHxOvS1?F zX0h<)sl8USyt>&T3(M%`2A~Q^Wa62ehsowVOWDAlGTk!|!38ctUqYmSx7?G31bp@_ z@i=aG>7H4gw2WAHUzto46grDCOR=;(M`4&WmDX90knDTP0*(k&e{RZMe5D|{ZI$#bpo4Zn)VfX~IWxB*zV71} zR(T=y%>rZ1?-`Raf#rUJ%T1n7E6X1?ca-lJzdlK_nUXG-G9z=Em&MRB7b==HCoSr$ z^z9p(Ve=(_fG?&mMU?Buc?C}SOfHr?xF)`IAJeP0fq~?+zWBoKUVAjy4bTv44s09i z%-YnM_7ed7=w#Nu@n+I~I_F>e#FaRa@kHZ z#|65W>&hTl1Efd5Qr4+^&+MQTkYQb+V@$yaApv1~y=zSY8Q>?6&AjefPl7SPjMm6D zLC{%W+bGTXlYq)c0gzjvcQmH}j2TwGgSoFv@ey>D$~sW{+($U9w&n3ajkV!{fFJ-j z2w-A$0pco1awBswG!-C}9pX`d@}uoRxpvr%#|KLJgOqLQvo2DV3|i&AK*EJ z(sAgg9ze7G(t~<#Qg@Nu>y_n0o1TOoK8s-g{=t6xp@)alD6F+pMDg5ygxphgS6-foy&wqqw+Zm zG~^&7lUbbwhBz=Qt_DoG=8VQ^#>qH0=Cf$%ir~(D4Bg#NkVdL&By&lQr7Rv&{CN?M z()^@M=FsabIsk^B%{b2!c`8z`n~H&xfXxt68ZSPH7^{6pfwbBDvOoahL=rA}KZ_7^ zu6>g8PT&l{NSgid^sIgJ%~AXL*RKN#PQqwysGnA+*#cMiJ9#csIFmZ|&CjhOq5ZCZ zfUCSSbXU^bwK20nN>;L%;T3~NatY=KqJlSP6+L;ltLjG zTPw`BJ^jvbWi7-{zj_|CZ~8M}a59~?)jacHjep&+%-+)NoClOJi_9;=jB+k6S8_^u zv(#QqFALz%rdBS*RoM`iOUocK++j@YmVi&)gjixq{UoKg_8|4!TiiO55d%6vKni*#ndd0ldD+4#(-N(~k6Cq<9w`N2j2UOY= z7Z?a&9A3T%C#h)p^k8$)--|l0cxiiXIJeg)}(!aoY*XO0{bD|Tp@MoE` zM$CTf8=*~T2eG5?%O60M6OFS|3ZRAtNL9m{0u=D6L>0In zf2qu>_N_+mrUcL0gI)@pc?D?Lp6@P-`BmoAJc5Eb%M32)gTcdgVh0{^{_Bit{Yvk2!Fn~S%nKh_Q=(N>9LCIee7&Q)PSB*#N!*`g#j9(ChO90IuUt=bEYh198 zv8Ff?5QJ7Og+>@d0d0g?>znozZz+(TCllJ&)26M^0GjN|ZV|A22vE}a<~#^Z?m2c> z%AEk)eC>ocxnjtjVd1R$Y(oP!PM=1}VygxquNY~vTpVc9kp4p6< z&aO$rNI(EZ76K5n6k-ZshHjRGM|)UFu=9EoLc?QCkid>a$6>Mvg@oXHTal8(jLY#k z_gjR5W0)dq7mj>E(?_DTWCgAOT1=4TUzB^0dXhTxC~!h!2~eiQ5XcVnfHLNW&HM)p zxUZWcQ{R;Ds5C*h=e0b8H%#KIMaW5+7zn>TdsN$MOBwdh5uFUQ@)fi#8flwDKHsFJ z5ZbHM2XU*NRdOxtfP~8RcfGV)k;6kcnSiby3%}A!_Mc1RWSk z`EoM??U;bc&q?3d(E|9_ z`wnS(_BXde`b5tA$c~!&O~KfNbdzp0ca1lLySexr!IrE0Mx|@G8r?TJ*TChpA3E4VSe=Y zw6CMIZ4`!FdsOF?yq;M;)vxvd!{vvSelrFqVUQY_N0O=nfpc$wjs@ye7$9;G@ zY2P^=mv#~JdYF0r?hdBG1j#kQ9MTWngb6TW0%=ldbubb!wty*(6o0OxjN_Y}r(xjo z=xL(%Wh(YMq|X3IV>_A$K+l%i>&aF7_;gx6r`8Ohag#Z% z>qXNLEzE?l zc3x-A0(thxE}>ch0gt(?=&JdY%S&su8yZY=2JW!v9HmY6Zs*c7PJ<=me|{@SnkUu( zdO+Bh44khr`t<5-+TNrutc`IhE=oPcg{I4wN-7zfL1VH4+G*(TY3ihB%EX*;NsrdtC)9WPNaJc( zncNSYrYxFbpjU24yaDah7J{wPY+=ilrJ}_19d{qf41$EfpUPdCwH*px&!GM6X67Ez zPy1|C`C#u3Hd7}+nwE1l*WI*_$BXuJuTR>yj>ql0CzHy<`C>ZBnv7tZxx`u`?V7%& z+2z(kjO8wX_B;Dr3LVMX2jY9%TYLTT<2HNou~EO@t>#mXblLs!Ssm9$ud^sZ^fC;W zSsXymwZ)mmM?+*GS)5EZqV5I{$?FbM}ITBaf_#bc}>o4*iLM;OXb<|Q!`2QEX+s_F(ATD4syK7;dUBA0x(NnEJA#d z7M6xF_s)Zu5cL-!@Xx1qp_oLfUnvRrVL<$LDl~AWUl42g3;~hy)lB_LbC>6d%C4=x zQpcVmNHB{a9=k3Ka$gum#$OIc61-GCB>zbWy{LCXP*T3}$#?-#n4>xaH_ZC>l6@Tx z%G^xzlAp@dCAf!%PUI-9^zpQt5&>K0wB6L9w6n}!xATIQp)_`><5ljbAEu*_i<3sO z{42v;fJr`MOzOZ}MSI!>9{X=Q*6&1p?efN)le|H1x^Yti2e` z+VR=AEvC~j&+FO(?%{Uk`R-Qrxt-PpLU6S(-P<=aC!HiZj z4#ooD&9hTaU>u{Ir!&+QVH9{pQ^vL9GK@&dsLS+cE;Zva$5t!o&AgceWzf=>HYxLk zc{IcD)*qta36y%Yw9x6BN!AiKh@J~IG$A9BF0VO2yDqxAb{)#~d~>bx%DI?+Mz?6> z2njUlXbu0p3{$NQU2abGt^cmePZcP1(4JL#pv%npyb4a^k2y#kStJIT`|3E3baoax zB-bOMjHZsp%v>RamLL@HbDGm<^#YQNxqChw&)T;~)69pfcDT9Tp6m`orz4i7E%MHm z@SJ;q83LpfV&?tptc&lSP0HkMKFdFAvYEe+w^F|V=c4851cJ?sCNCE}7D{e|FDJ$a(7!Py?9m(&ZGap9){qE6e0DJ&-zPsBGoHpB>(kAK4 z_{diMtou|qJzRdGsYzXbfBfplJ&61PAHPznnH{|;fFQ_XE2rH$db$fyawa+kPAdff zSc)Ckm4kKWx24U8i22PX`?OXhOy&;S9~vj-Na=$L5auT74J;_O)2l3Sk{xqTZpo4g zs0)EApR}CToaac`?Os|+CRiYKhuJqwS-$3;#wX-E*D@g@a{T-(LBR+>3J{4?Y$~5o4!lGBb1@3Z4^d$5@boMF~11Y6oi!L4O0f7 zdmRBo65>~9XYJ)^)J7q?_7%R$crC4`yu4QWqCCqJ>7X$`gudoT8sn9ABHdS}UbUbt zaE4bE69r;Nxp0zF&QniwN%TE`%uC=Rztv71xm%R?b=r*yNm+7!jgj(=6Wnl98qAkx z)AlOBk{|Et+Gg4$cU|{GllWZ(u=T>c)|tTV|Cu1ykuER@sbfS7FJ-PcF4Io=9)XUN zj0-d3$zs~pZ!X(jgqDZf!?qiNAdd+T3!6;iSF?n+Jmcy-ZSBI=W%`093X`MBBAC4G z$6@-fBCct(^O=QVlKI(%HFGOKF#_{J1Vp~2gu|i)>1)V!-@*dJ(UXr<2g0ln*|m$x?4w%jOBifH|Ws{3dqNU71CUipONe1wBo=IZ~P@bNGhQ z{vb#l43YvZvPi%=OY4&FtrCRdF2|wz;H!5UNUyn|0IbE1@GS>5GM(>jc5_IXcCz3& zzyoPl*UKrN&s=BXWyTIwAvp)fq@XO^oPcNOLqKKVNp4)K&6E-T+ew+8>Q_Jzz#&#MJ-=>?X7*_uDy#*@IRw4B#g9%Of=AD$l>Z-pKRU zLiiB>+x|%Z0YHE$fGTPEkZ;j?Px~XM8g15|v^5)>?I!QfLo#VJ_~~?0Pd9BzD^WU> z)K{6c14jt8@njb6t^&wyfSvR;8T(=S_UZPZy|X`T4+BPrwUuo8Cu3ljAZNY~Q@#md z=4igw9&c^5XIq=?Nq#%rOr1Aq6`6sU!bte~ICCTCa@rkIUK-Sr#Z7^f4OqXJOxwq2 zqxL$)`3}?-Cl3>I*mb0LQC>5kKrcoMbecN|cL_To%*^#%3V6AN$CUQL+$k+e%1}Fg zllfTlidI5h1g5M6xD5khImPb>4FGBYHIuYFa5orb2>m<^n#Q3t-04sADz!*?ed|K~ zOG6}}C)1!97h$EIpFUw$112DwWq~%CdzcXBOj9<(95dfACt9RO!^}4U3K{pkfEU6W z!HHWzZb@4K(X6eMS-V}(X!hZKs}F1QLFQ-CtN=d&DN>pdl=jv)D1G>tJAuSlh$)z(I-lD{?r`LdG118=a)# zG!Fy^+IfX5NTmz19&_zR=!mFa5!0fK&70Dg<+l#d(9&F*Iw*&*#I42yq!@aTHtmI8 z$lq$7o&^vALvlP;gm;9ZtyPN~gex+f)!J!uWdle#)Hl7f;!m=U{Vr4K$IZFX+Ov{8VYmb10Cy0;-3MD9)mWYLkwS?Byl1f*V zvH(yUq&;Yx6kO`cm4t>6eX#z3=hFa3YqA=Y|5!UJQG3c12vqbT4I}h+cbUu^D};p^1woiz*jldV9-L+IBEmOIAxK#$r~v@UM~(xxdlmqO#h8250%+yK z1vqu>milxFSgtJ+{v2_SWQUmThSA@pnW?f#bU6#GrsB+ed0Pa(cJV-5QXVZ=9uuOK zwx%7MAt+LMNLGEFa)UPj6jY_8%@U{6c=qj4Cvj1 zo%Ypd58Kz?ec0Z6uw5V*kti^SHy{f6V_K7k?m9qABHC`w2b9wufF5uRLEQ_HwpE@4 zzMOu?DfeK6v@%~fJZxXwd(hq=?zBgn!}cVv@9gfkceZ!i!vNVz!kjwui``B= zcMD7o+T%^y(T&TpCW=O)0I<2@shx%|cZ zVb<0pz?BaBhd0Cq9S>}A62`HyZ0V7b#w#b0*6bP+&d*1icn*~uFDV0)`Q%DNNaQX4R&5715m zJ|x6fdW9xF0=79uV@7CK?*fe_oUr;>uU)GTAoB0F{v_aM`8bTkCmq1J&Bf&;H3aSE-E(dXj6ktSbSP z`ziBL#&ef@QQE3MX((AIDm_x_1DGAn<{8(ly{u2*Q@O=CjD!Bmr*Z*F2LtK&2%f?+ zm1elI+(=k#4kJZBB4DF6>YDW_c#`7c>YB^VdhTDz8G4a%GN#4|FQ^%mzS1{*QRy_~ z@|2IW%=8%-&vP#enDM?pKK-}{k)PoK&~)u!h>%4b!UxRVC7Rt1f)g@BPu$Azq<()O67g3RX|nt zf2oBmLZE{G%gJKa7K_{91scHAQ%=VGT)-AEBgNfmBKbR7n2^fyS_s!Nsr0(BYKXQw zU=9vL;it1l%d;LyI}5rrJ^@2~m8ANSFR&siBPoj3w8IWf9?A41z;Zg7go)ewYqdSv z9hN5R!7xNG_YMQN26^CcB?J%n%6B^ExLL37nYZ^imS>X~xpNvl)}LVJAeEneS1~Cwv@(N&)|j zdneLRG_fB&SVb3KY-07p#nSUmYITMhGYm8Q3>o;jnm;f{E#mo?2 zqfS5pR!f7P`6#a&)4uo0(hCm0O|K#pe0+LVzD;(H7zSb5vhdx#t;_{(8kxhX2bd-; z2SKSc?wJSXT>*&{I8G%*bMv#~(~6;@8$dp@g(S*{i4&4Yl*_YQa3vj7H6{bA;<+^q*ptnN>ri`IVI59w9R z^6rLnnYk5#IsG>*fvjuRL4}_9Ib)btdt?)IjA@yFZ%@Ag=H(L}+Q&77FanH7JyrXb zn}42XK7>BdteMRYa}u3%miaXIRe)jUBWp};?}_$?uGJdO{mi?B7IadXS;kfWyWlt1 z(Neyg*{?ZkF@oVB6V03g+RzH?2{1ydfhopyJAN%vGd`5sqzzdn1-AFHw$PbD1n%w7 z!C`38Qq~>qwm=_(Q(B#N;(NxD4>thnVA+#%7|jA=Sy;GQu@)FNJcz^&u(6AzaodI_#obHoJBXprJX5c69fdLX?`4G+ocm%M78AusHds#t1 zxe)QL=sWdD*%m(_q7dmF3PfNcKxe>YXiV)y^4{J-`^tky?S~E?ws&^++M@uU+W8^3 z4iK9>TUid~S4EP}&qE9+m&*ZQm+j+|S$lChZO5}oTTcDtngbL7hAo7Y$qO*t80Opx zKpB)NnC~JYyBEf>n|9Qh>vuyKx7RQ^L}epPMxF+*wGH>#F=aYEnpJtEVy?}FO zf6@GQyJ2EGVb0qnyqI@gJ4(Aj z2r@UP1;(ux44dPAX(7$SoP6uTPjc@?yUDq_u~fU>eC5Hz_9G7;RWj&jVUULz=bhBK zo9n{PQg=esxNWo-lZ*D@>(lnh(OCt2?M1NQX26&A^M?=Hm-i3a=Tgtli*^rVf7_44 zfNH{OQJTz&#SLHN%;5lYv?@cGG3-Dfvn^L$x6|4-Gjt@Ak)U{b;p|bri;Sc1xgC^G zUIj>T+sF@@FT`ZPMT9-mIgrF#!9fGXy@FN|kO5j)TWI6?*4D0JsShEGkb;(l1Q(q~ zH*ZN<(dm3$AQ#9~zZcW<_9`IqWIk<+v~N3&;FuG{+Na^*n$(!pT~D1!9py1Uu9`(lpHyN@v4|GT>ZK%qtN?(Edudp}_4S?+sR zuEabakR%xGg#PeDl=Xvl@>%BS<6QeVbW4JA0Wz zvo>nStI*m-=nh|D&!U~&%6RItm6Tb*eCb4*dFh_`B;q^zLb3P^dICJ7dFDfgEca(# z02S7jC8dfHf@^1`yHOII|8N^;T-$(99OQGp&?VZpN0>8kZ zo2&5N5C-$WeDeGc4u@s6d78d_Fa1(3WB13W9{0WU86GA&bEI5eWqQ4p%1K=37w4tI zU*wgU&sJ0XWy;hM=1ul;zt82zk<<0)AZ-t(EmOY%&gCUZm$aKNNNX0k#oZY(O;Oht zA;9heC?+BDBzBR%%s)V-gHN2Y0EXJaj#es+x3=VS=6in|UkJGQ=Fe3_?ef4MubbsV z#6mEJxwiJ8PO<91d_;!43Sqjqn5IpWJUc`z0GjFeCd5;!BItQ3@2|r=L?Y7ip*m9< zsxTXAI#vUcfFX=(JP)wQIX$1H59g^%-z!&L9_rg1tt3iCV3in=Ohpi1e2GS|@X+IF&%7pF7IEUT_* zrvu=z)5>v(+KaPk!0=hhOy4YXNC#+#>7Wk!_*H46h{oOY=c9n0N5g=to!x-pLBQ); ze!mL%oVAY^llIZ&q?jRsU#8uRgHy6)j`pwZ#U5ZvgI5GK-;3k~nh^djbfj4|Z#pBT zrJ!-H_M~03OXd$>S^lH8lcQyKFRc>Ep5~^uAX8RKmd}s&h=xj}?mWLq%XAe1V{s+< z@uu{GN~E4yQjGaL&tazH_hkO? zQKfmHHQWoxki{S`87qExqHQMuIirm6q{@^UMbi0|^v_00WgXZAj54=64iQLj)usXa zW9gqR7g@{paL(9dp1nHixJ_Vc3KJ`7)L0TB8FCo#?U(N;0m3~7-kM; zy4HEAyqthwnQk*COs}^4qp3FzXcD)JvZREz$^pw{+3R9Xbo#`CBGTXM(lSlsWogGs zNY5)_D>FEC@3|nkZJ=T05|p#FnOSG*!g;Z~ADP$aW!7`nA0R5Pr1@`8eqbldq=a?= zEsrR=T(mjQB8c<7=5JdmjI!qNfitu#w1{TV9JWzH33Mq_0ExvZ;{0SWPM-v(W?gdA zc(fg1c_+YV08CpKslWaWy|K>bneVgAcm2llU_$~9HnLXmOGE=sbG>a^GbCAO`90s^ z4f+bNkeZAIiM50a4>u|68Q>SxS39BQdhMfZ;0i;7TW!x%F(*oekc>_*Z(q|Tx$nBY z`uU%2dtdsI$~a+@1Adklp*;Y&!%`(c{Q49Z0)5Mh9ngo~kD(uf{y)?vWU z-qxT@5D2e8ptE^EW6nwl9)bj0MyiO)^kqrI>XAPNw#s#e z$fk_bfV9`sQKa=rJ4*c#E)}Km(np-=`21UDTw7v4; zy_wA0tCMMaa~$dW49o0eww}5OAE^lRfEbbNS0S+1xLLrngv{luxN297rSz*Dj(K(% z9v6VpTIX7f1fx*5a$-;C8uO}47(fwt6D5a8e`86Ipf$%RW;b2)-BXV6pVEg?ujKjZ z|FD(J#`MEonYoSzNWR62hD--x>gGh)bHVf)hKz4mz9++8h3N5i5&Pr~FTVQ^;=eBLaknG<|v-|j<> zK47HWCeQ+7Yg__!1j)P(0Hl>8NEvHdCz@l2k(1sAZ33_gXyjWuEb|1dLpRYB^rd!P z%G@n~@XQm`3Vhtob&kUgZZfNFKT-pKY%bUyl}8qBF>eSz00uKTkW_w;c^^zs*P)-> zDF|j+&bg0Cw+HeFi0J_wgz&7B03N=X))(QLR*@g*I}u#Dzbu8;4|fl0-lJFN5gfrO z04xN@6$r-d;-d&)AC1TDXgbY0x@ivv z>+LZ2z?-RB*3NS1-=e)5O+z0DsCI>F~u9$2d%phhF?2KD@8+~xs>%XXY9 z+K^F5pHKh@ID~r9838u(U;>hMT_bQ?i{)=#z+JEQ^1T9UXiSPN%N4f!DKCmY z(Hv%Ma}N+}TUTRE6KoC~$fA%oaz(KAr9q>479h8>1i1E{&-mc8n0WSTi2LIJZ8U_h zXo1u`L!i}5xiwYh{`l0RbFus5GdU1f8b*N(l{YKIPi{opZy~;jW%;h$g1zl9XpwXP zrG+Q31&|bwAq@)cOKs~EMt0|%?I2+RNvk0^g~m{0BOeNopK4JdqLuJ9^>80X3WU%a zbY|agp*dQFsq@3E-5U^*EZXiD(}~q!Wj%Fb9zq>xAVegumL%IQ0p^W>&GlR-_#wpN zJfLD8Vl@xQLvTDR#G`;Z7IeRY>EK?Fl2-E^q zv~jDcgSyCJ`N`urAS;9~gsK8O@}6b`h$4+I(vg@!?^hbiyX6)F{rdbl621dWgZMA26*h| zu)8rRvw6+4ln*GTt8<-k#_;mId^S%0j8*23LxiHh$!?gPz=_{2|>o~tjhg90J^x0_yoKfa^nWoe4Tn}i_(5@2d zGL~{W%K1rKCkG{%=UTJD9CvG>g^VQNA%dHWisOqB0v@?9^uZt_G3cl|0b`!Sr+6!X zLivJwxN``8sf-0F8?7zBL7Qm02|;FsC_cnYG2Mg zdYI=t2#vY?&M&sjFMhcM7a)!+4q7Y+tb+x}dQ+<3cDJ?)SW`OKlJM1JoVnK{z)NV& z{072~1I}M_@tI1A)z|0^ZK1xN&=TS~-4YVQTI+#^w1RZL^$Tt5gD-XBz?!{k)UXN^t$W~{6xzFmhVMbuVuZm9^nP(f>smU z>)GgSUX8!+ukklDDQ&6Toai1tl=^V5ddPggzFfQrFsx_a&JSfP-7abl_29Z>3<-lY z;2u&wp((S>?)S&19(P>q{`d?IQYO;}6M;#N09r^)eK!$(v;J~mo)~zS(4FPKmg}zb zT@kLZNm@G#3rGQu< zW#>K;A;7p6!0Ikiv+n?bG7*Ic?dJN!E&helP~>?b&g=P%fzS?MC>o7yE$^;vHoHITs?}VN(9;OLJR5~cO+xI> zQ+5Z&Oqwexe<|-d;cKU70b(Oj-?qd%Icu-a089QqqN^kI=0a&Nri*FD;XLD(?@9k> zxyBY|A=;x1%s4b?lJZNEPa7}OXIFqx-dAvq2Bcqs5*pHcT?dmsf(bjd* zFXO{+0ju5Yx@?+)4*b~oFTVkT=51UewF1!JadllF)CRDtUofPN2n01`5cH75#P z64sBqZ z@*TP+V5|hd9B2r)8-BJ-%jKgRffSvhg)Ev^f=9Qw@b^;(`#JO5tsD$_o?tRUN&&f) z$xcvKh|G)atwH9A+=W~vL`8SO7VWjRtOu4JZZ$_&9pv% zz7pE1Y;!VnB5Rbpk_yt8$ygyk&VJtd0T@G*-6L=0^U#a$grK1x_w2Rbf*61j-w(@-%htyYa$|L@lDFg7M zxS)M5I*>jzUR+-QajCnC7S`6aS%3N_&(;3@tXYxg=mR>W#@tZ$1E48P0Ne7#58=Ow zKz&UCka@Ee#4dXK3;VKJYy}(h@9tw%0iT%*+KXTDcUMRJ^mOiu4sbEv(p;u*?vGDD z%%S_^GdeKltQ|Np6P9ENBw8{kZU{lXle}00)HjQHfMFPHJ|m3$bP!D7qZbgSmG7Aj zrdbejmxV4D?Xhw#y3M?Xj1@8WgM|;SVT$|}NzP?9%Cn0gWA0gm6=j<5703D6CjT^o z%mIKV2CRIIx!a^ zgve(_cIN4%R$!4oqv*r!rPa2j-YI7}Or6G5&=DUc$!+;V?Qj|o(4n=!SOy`AhnrjJ zE@rCUJtR+ijgQmMquF@?+q8XrI%?lJK5oxPC(X_jcG4)Ia6WJIoCE;Ag@ANRJvgJM zx&@$u=hBb*B=yRfp-Ec;WOD(~j4<9sggSsnj0Q+4z>>P}<{XA-GYuObPW7}57%lVF z8yZw5)11ePSv$L0v^jfF%HBvBTn3QA)ky9lkNFWEq|EgI>WvUm+oJ)Vsdleu`c%F2 zhuKKDz;NgT3;LOtIbDO9=-&+hQXBGJB{@$Yntv66nl|5Ley%VZrwy3jAlKV>d@t?9 zv^<)2h1S7?&C$J$Vf*}}N9_xb9=H9CLFOB?_Ilgc*l1fD>ur#err0)bRsYmYP|-MJ zGCd!MAuZa@>Q(#P&QkmG!B+dxC%f&3A8ohCVJH%KEN5UUg;bs=0y7OL7X!fpqcB+k zYH4PTr?zP?kij4G?l32T(RPtJzOtTrZiV@5rX{`iRx*~g)n5AgZ9jkmYeLtY6SQcp zfT8rMlQ8Ui{<@Z~wF2Xp2{#~!MxKuzu#W=OJjxjIjpg^flM}#k5=sDrt{vp#cwS~t zZXAwZ%9>_gWzv2&Sa0t{h?RvwE=0mH5QZoMMS!Ed+0i4yTwkx9W|$!U%2g&G2_Lh3 zKT4gMelIdFm#sBxMBO6D@Y@5h_~N431S>RJ+8Q)hkRRX0jXcYD1W!Kc<$oQzXeI%N zgUnspIkaAyBSH*qIl4mN$=j62{Og*l3dDOkTa?>CZJV0!2=Y2wKLM^XRR}B`79CnG zML^F>yj*~}#sn?ME3GIC0v?jpQ8bTbz!tGUqAx^nKML4;N1L*CX>IY7S{=Ctud$|3 zzn&v9b0j~~@@l_uG#XrVpC!ySrx}lvJVPK--I%uO`&mBXBZA*(jVTLCC`?7`pB%y^MUl;<=BYLf1MS>hPE2j1f#nol5#Axj2yG~55eR4pu~grl zvMBwO?*R zrWnaE_d9@FguezX;|1VinY0B3z*1L!QkB92qszSopTY~cLon;uc5IwFdtC&)qelkfe(u)P-o|L)d$`loAUM6%jZgz$3rT;om1@CL>!@S87+0i=BxA4Yn9 zb5Y0pD*vYwLr+=hO`TTI$o}~S<9=MR-Ese5% z(Tl1PJ|B^eSV=%AB9PEzoqC4_*l-_CS6^10QBj`wX}&FEgQbrcY>d zUYduYb>%x(^EhkH1kPb@pM*x%ZbE#RQ$}U7$OD1U4t9W&0FeMVWtaoBX#|(;j5Ux$ zpanE(S

iE*h3s8dlb%Oy6p!=<(;%S$i?%L!J2+l)^fKu1l=_d^Rgu$9;pD9vz_l zw8NADXF!<0c`9$_A`3;dbmf8#Jr($7Z)k2VcG*EW)~(Il3)m`yRiF#wED79r%x)+IDD^o>UnoOAiDswq9inadT(sYKr2o2qAS#gmQwHs)=xaQMFb9CKs(m;)YcI1t ztZ~}aCt0IUoe|;=0xoI(lw(}Wv=olw>7CZ4&-7=WResm$$FhE;ZRy6!;P57ZSpUiq z$t}g!uE*(fyn#lNMd5XL<#$del6`;056n%pl;P{8DJe zQV5@}T%L0Ju=43DzcjyRkzj-+bw)BqFhygRi7D4rwBhZmI$20nm@@JLNS5X%Wuqr| zI}rGDS=M=54FPgfY3xGiX|8CUo@@^*FPt*?@zCU*W#LW(&Jd#IOBvH{C!AUbyV(LWdmzrYsY$(-0tn;fG<6hokU{x?h{?Z-rNuigPt1VJDXB;Nvm zc_uRxA~?Db<+$knd+8fyD&}1M!qj8%HQ&npZ{9TDf$6T<=|Y0m8fPs@af+GPflF4JNfS-wnRW|tWgOwHVp zAi4Zja~;Qg%u&!!&4n6g;D9y(P`xY$?|Ptsz_k z*e3K}W-a((Ey$RKH)2t8Awa&^H zScj!gmgSdCJ1ST$uhrI^m0LDH^mZe!w98%alFRob=c@od8!A+JsT;6K!&!cgdF5vE zaJU(89Qu;+Lo%Y6EB%kR$-4+}f)<6vaA;Wt6{Vi#H=X{!Kfb@??WA&l566%H_>Z^0{@4Hd?Wey# zN15?%k6N~w)Ls4w!@UI^f+XY(w0E-A44g^Ge3r$;iC=VDEx5cEl1nipd&C2UMgWL- z6>*wtm<}vF8WTykcULw862c9`Jnb^WL~9`d_0u7@SH#7_S&Y7<|0T00~N9^~ySdIdWqtwv`bnRuEui)QL(V*7#>OD%+5!HW zpSicR8#QIMF3c|1NV@;Yc-}ran}@jt)P;Rie#_i53*$ISTRsUh{y4usA1~6rFys8V zmcC%B=Kp3-^GU}0RhY+zlWF@G11 z$kkPT*O$N~Ej`)<FfIu9At z+aI{is%lR`DAQeaUlf%0jYULI6v{M?Ylod zql1Ku;oq+HEFVlTL@EqY9F_jv|@ zk?Kj^*Vgl%S@=;14s-02t?g#ZMA5&K%Xz?KfSZ0ve~=3Y34Rv}n9^*r!m=Ys-P=@-t~Cjlz9`I1l= zA+@hKd76*iU9QACW?BAKIcQAnNxqUV02ZUw6YvIn<+Zyvq+Z4~b(ANLmdxB?@?|=s zXLWCGY4+Qe+GA~<1|d(+J+!kJ=gTm-kHS1Z2>|={$yxjGY}DRdOxhxnIZX{m`mH=m z9#7^c8W219?56Oc@^34xkFQmf{87DwLGvF>`%<5sd_K%L32vcf(04tRk#Xso@tWFo z-p+D9O&Qlw>iC`G)ArrbICE{0xfYO@XGz*Df>w&6SEsY~?W1Y?h2sFqFctft4QnQ=x(y96ALp4c0_J3&P#n-$!) z^D4AJ9#$#aE;Gjji|}_=Z*zv9xO81^bPp}Ot@a3}J##|Ot!XEi$HQS|jbM7F<)kpM zdshdL`Uzc%u$?jr_~n&(xBM1!>a!jY$zIWUjC;A3qzS1*ACvRcr$AK3OC12QVng}s zBSc80fz-!0>HF&lRiSkO#@qy$=;x6T)dPU-eywR+UMr_&*8VJgeGxj$Y@$?jI+ter zx+28AguIHZSLgI~r@NhIx)#`z>I*-#sX|1Jl!G^QO)9{T<|qtCMAHc-TS2M%pU*pi z<}z#4QM+#Cc_?#NBBT=c$M=0;1NX;gbTBDozT=@;1}1wJZYDm7vrbZb&g(3|dS$}S zmDeF`76uSg3pRfiWcdmfz#*{*h-Jm)t1xvY=P>6G2h6h~jYHUIZ7fpeKmiMU%bc`@ zz-QGb3(CR`dkz8WWgiFhJ)h6o@nl|vffhj$T!e=POzjY5Qno;#(PG~0CNf$~^6U_7 z&(31k)=H<4wl1=$uK=zhIsvHxl`Bi@lL2KI3Zz(2&0Ed{M+0Bg?f#)$4SmKl7dTA!K)v z=m?riF}W05gclQ_(JZZIo+E<#bqK8bRj^6=yi!u6y~etLsKIdrK$ako69}wG(VXSJ zU`+EIK`s_+ZB=M|LilKk)r1*vJvWL(73JMBrBT5YcuVL;^O!D@G)Kg`^b z1%PmJm9|`SatkNE$b7Yj_-XoE`Wt4Xd45k<)lvSDVGQLf8HQ*For~qQFw8KgDGf;& zRRob)`VupKZ+|OuVb~sQ24siLP1BB9z$R^}c`S!2Mq)j91XfYe;^{3e3Y;0FMRMPK zk#^?UQUx*hKiS!CUwHbUJxcjZrr$X^ZQmT7whtG5zA@F=+Rm;x7?Dx&hrt#j&NG4NT?7@(5(`otKcUw-R7bh{4n(m!XWXY8`t!qx!_V2#^}_h3-gThWhx zwK;9ya`cLp%nnoqIBv_mjpi#N^6u$uVcM zPIKQzZkAPm04~K8HzBjY9M-l}wVrShG&{|Fk%M$O^p-Yqk@C?$g1_Ly0?sKHEoa)c zserl6LL^JWDB$t+*v>IM2&Y_I^6U~sJxhzyAkPKfP(pN?@C)#93Ao!#f*TB)#_ff# zU{*@471j*7hFKK|(KSx#4c?lY5Y95jD1D>lNXoEwG0(vPH%EFSGdY&|T<^)<^lvV@pkMHY9Z`~iC)nT5N zNe1x>lVuWN`r%*3ugan|*};xGQ>L4cF$9?;P3_M7=2{>VLnM_k6_;8bQObGuN8={N z2>?~wh2?rEskCHazOw`JOKML08aZW2d5FxC25QCFD*=%7GkJhOVgGyF264k^P9tf?5&L1dJ${E zR&pgi*x71N(w7ec#wGi`yzDtL1reQPJZTipG9E9dwpE;!W=8JAvk+*}ts-O11Hn|x zM-SFF0vH1v*8>`JK4gyC5M2($a#z4y0@^bV%Pf}mn4fu6j`VFBRgANGF#l(MV&vG9 zcIIt;Hm^^)2jt|(rVmBO0|NXM`FB3q9yF<1xPRQNgt?`!)^gezrvP=pbtiIRQYo+U zsAfKtK3M0b9&0z5_W`?y!<0D~ly*s)sOJH$$1^6_FzYJ}JAYy7m=dN~8v2yQ)nq&U zv6OMJBTEHFW&QQmz1;_)j;n?|w|8k>ik_e|nJ?yap9?@HT4?<3ViLL&dL%eczz371 zNaA#T0UE+BpTWCM?f@qOSgv`rxm9~RmnP9~IsMkPbXI$4RIam+I@4>9qz`?|T1v6C zo|u=90{+YwE*;!a%%>7aa`w#vx@!slzydaz!6q-ws<~cs-gEPTkh}=M0wBkk%eCiw zuG>nP1#m(;%%2W%Ss(a*XU?Y1&(9|12MIn`+NuB^E->Xsm_D_viq7Yi+fkFc|-S-t3n9Q>wPRPYFzP#U~NIssq@ zY6-E$OL7`Z<+;@u0Or;nw}X?=7r^cy^y9(ipxms`Vr{6+402OhVDi~`<_Xm&qN*tg z_%Curq9izqK!{f8+w0I&+sxXf2Jl8Vfl<5wEfbZ$7w|98Nxz{J9&@oA5SlrrAMTIu z@3`-&&-93do0&@@t1an@fOS)h*K+>PRV1TgTv?=~_&X=*4n6{ivZzXLR12J>PihuG zf@pS$(ove3T*72RTLxq@P1DAZa`{2J|0dTXDiy64=4dwt1P?eXuy)QF`>K4@L;*`T zL_?(TTCianf=9Hkh)mug-CnIwzH@*QE#<{IAE~h9w1-w8^ra#Y-`m}5pF22ck9N1p zZ2Ec;@OXOMK0X_l&kkRwMLH}rq56rxV`(&jmJl1y@{CIOoBG$0>rh=v!X(ecp#C<>$QiA38wI?%Y)2IuxFVqW!wdvXNem2t7tz+QG%dCyGGZ7#33ot)b%8)5KyztjV*df)j! z-Ie;%=IG~2WS&qeRy}h1t!I-3f)85<)Hj0d=0UG96f-Ly@d1_BllSih^T7Bsg z05ea@r{1o&^+=awouOWtFImI1XEGNI0}eZFSuO3jfEF}_sn~XX0xpI@3{v^5uQ2P{ z4JqSb&ZSFpiLTF@$ynx%(XI40dB%+~%LvF7C~c0i&=iO9ArSJ{mEi(iGtVlenKkXg zoMvH2TWORDFYdH2zAZ*~Ll5nC#N^7_!Y5mh3%@({l2+>~^B-+=KcU;Ynkp}gZk+Yy zdXdJ0#0b=?$J9-uDYFGq+Ec5obb9NW)KBvB-NAZ+%SyMEK0}9qDu4^nv#yH(r5Ci< z3iDdLAzz#8z#a0`6%)+41V5{kRu26JD(`5Vwe7t!i+t97>QWltycaa**K}p^1D}bx z+@iVwz^@dD%M)@G?|i*???D0Xler22V-=Q31v>!D!px6?eU*_nxFlf z`{VmLZkN~n@mU-eWNkZ_3C~=T^%tguIQB(=*%iplg?&%gO!|Dr{9TI)VtNRH!$Oy4 zN2IL-fdvRsObs;Y$}@}TgqtEf9F7qw#6}b@M!B*ql}w09D9Fv_t)F5&C4?r#20(Ou z`84K!<)!E%YOd-jPC6iS58~3JoYRIZe1x+|R<2>XQM+KTV*2~rtL^>WVf)b1LU?B(0@wDH4v=0e!o+L=V0XzCXugx4nQr7>9CH57b1;nMoHUC1MBYh^ zql3ZJBlWEs=e1gx?@7$Q%@v){=CgLWM)RQWr4dVk{PB*{M<-!YC-ZJz zI-1es>8BBAUgE+()C9cBGIZmZ=ZMS-Z((jF_7zH&^XEKbi~qzfFU5-;6T`vstsX z-%TjGxw4)*|Nq$g6KGwt^sW!vXZ+?f-+SxUbZh9TTCJ8Wvf^mKLKsP)kwJh%ys{Q+ zCC0E4;utv~92;W@;6X-&#Kag!c!&WDB+;TJfdpzb66#hW&;Dq>wSZOU;W zkqL-Bjk`6*bqy3Kow@2ft2U{H%G`2|;hI;OEz}j2Qi+Zyy@}@RJQxoE;r%2f*K67z zPs(64t={!>YHf0p@wC~mmpWwU5ZWS7R1a}ABjSpREx+k;KW3DKlVU)omc4o%Oa;2Mx`*0Kn7%|2MD`)KA3R|S83!|06fSv_L zrry%qt-^QeIusv4hrHv}{*(^v*$V(9Bm12mO~2q{ep`iXuePPJrP2cMS(+Zv4j?ew z!ZLQrJfM8wG<{BUxe2{5R`0&F!ReH#E2pOzbf%r!VBF2Tu$J+6m#{k3ZA+vhx;PP0n1?Vxh7egBGW1C!gtZdR7YE}(p zxc#Wy&q6$9hFwHGsuQ6e7od+?<+M*U+6{||jN;5SeD7;w2I+GXnd|ZOJAtHsdJ4VY zdI&+epgq>a6*MAQ_V2XsV0$;A6v>G$NeY z*lM{aw_v^A=jaRC^#Z$~X+fR_psMdW$dc98a@pjbO_RNIpZ8b?4T|esfFz(XGMUe6 zvoSJDBVGrF-&#k#x`KC=>jj-&9>4w}|6LyM(oxB@GHj+0Am&(rd>hv1KhOG!Utz?! z<@^R_jG34Z^$uB5*NLeX1R{yAiBR=En312gLS<~HOB4#`AgpOMs%J^YcZyfxHav8{ zV#K3hi*hciqF|wTlyP18Hk^#h>G6!`9Rnh2%%4`B-m^^YplMG577Atou|me&luq1c z3Wd`gY3m61t62LRonEGfZ;wXh^}YRaXEXq8Ps<`GU~yh$jp*iDWLAU1z=bhpyUj}=P*{NgVDh6F%r-Q#vdKi_f>FPbnR=Y#h&%g z`c(n1u-3!IZ+tc#l3rP-m0Un2;MN1;RF?qN$9a!{N}+FzRP{Je7VWTHm4#F3nfjv) z>mhxmH=qM!nB0=nZ6cla9#Shkcuqw*#Vv4KTvlPz1KelYr~_zXM7dM09Z~i$XD0vB z1L+6*Hp-!TLF_w0hShfXY?~>cT#c@BFd*O6`7T_T=+$*6A7dxaK}*tI(WfTZH(kpb z%0(sV5J+1`Cr(ZJ5P-1WDoz2mLHB(_EudGaqrKG3KG_=$j57$%IRP$BDws@f!Yig_ zaW%gEXpv_wkfH&O-9vpac8;+ChvAB07o(VQ5kMpy2g_K1Y1Rp2Ob5PlI@Ku<(-0Os zxaFSr2Fy_AT;x}{*H7UCA1FJTpuQRl$MJ%>MWvug5Fx#3uqhG+Qv!!fEFxn|MpYdF$OO4lD z!f-PF&RumH8n*$<{Lx0`*cHIg6PkdWk!h@U& zXsw2~TW0FLcGogjSzqCFPx31{P5h5h5S<36T6Zi)!&lsQJAFjM>=)&RAqIA^?X)h| zNzbo!IN08{kvV?bL%L<@gB~G=%j4ZSWP7bXrv^N=s8mi0C$s5izidvod-7DMbzs)c zvO5>lSRoZ)c8y7Ssy)gC%;b~EMVSKEEDE%^&TYQ*qIhp&{A6~x$W#b=coL5k!Dif# zKok&iE|5F|q@WswgC59$749<-eT?#Uy734rv*rm@XjH$9Lda8Ko9*EMBu?Q99L#%Y z%!*0N708x%d)O~;9UPR~g9!}p6b6En)~zl!%BG-zO6ajLarz4Hd(_$0eCBT!Be?~1W!S;)hE0?f3V=j*j_*9&ud@-+&=_S6-O zCPdzuP0Bq^)9KhQm9@KaT9I^YCP4z_+MX;n;x+q%dopJ8 zj-9#mxL4q+kk`{X4bYy4?&hE)Xp}OiDD5$AHAKVoQ?9_zlsfg2MxFXL&hgrci*cYa zo{b8j9Y>im-OLo_Qpz@UlLlH=%G)RK+Y)psxJ`xvQwY%)Qji9Nis~KypidnV=_CuH zczvi3njgpq4|wVcGh2bP5!wHo)1=ZDxkfWq$c4I+7a0K!cxu$@?NioBompH);gpJu zsq`vJo#(pBcY2ipe#oJC%s^nte>w*M!?xMQ_}M#gftRSno0VZsg8~$(g8@AhE~O4=k1k6wSd^lm&8S)#o0ct-~M912smX`rh| z1bt2$yHl10=%H2CC-$7{m0|KqvKP>Ij;Us(ptjxaM3xypt>@bKY;}pN+I`$Q{qan% zQ*O|YPxb_k#$!7(pf2N?jJfT1G2kR|tnfCa8~bj$pxe{K@_K)mep+j`()KYz%n&Al zz4h92VGhqV!Fd8O&UdT1JbwM7YO%}XT{$Fb;a-DN;p6Fo05`EWmM2@`0gAeS#x)pe zQzZ=px!P9YwZZ4EQ$JpR4m1^DCcfT63d($1mU;!Xp4$l04!^rkacuYi6P0zHBHVKo zAsl9WqpKjP9?XvLj^b8PDmWB90t^MbK=AZDZtX1KASd{5Yh8BK`f|#gj)e*yjRfGR6dmn1axT|AN;KFQealEm^D|`D2em- zzjOFCMZfc^SdRCDd%;EYGvjcs{CsTUNU6JrU?qS<C5F)_JLKE6^jKUS% zx$Wcz%E(x%B_B$k>$1~(r?>Ho{#_ z(zlQGP(*9J@+5V;3ayx#zz)j)#qysTGv#s|A=<(c(vxv|kHPpmbQ znr9suWv*30qxle>_H|1^^N%*B2c-+JlpkxGFpTIEV=&#_#+;Y#3mVEYcvB^^c)DP z4iz4hm0)I=`YKA@cqP3@`;%F6ww*cWYvTl03LS1 z6}3It#!jI?ArY|=8d#Z}iU_Cq{ZpWUT>=Qa{len*&x2<8f8Kkj4E>zHcfR&o1!5o^ zb+_6oxvKnfA*UWH$H6HZLkm0tF7qBi_D+G6WIgmQ`ibJ}l=FF=I9E|h2^?>nuU@rm zI#+LA^#EU7snV{eLi(681VDN@tdB;BX`LGOffZ+5RpeQb&THZmQ8@F^n9tXNr(kZR#S4#PQ2`a;mgkgch$MbZ1JAq`gW>*4co0%rStSo==_eb-@z!3SA1Gue2NG zskII~f-%yDFL;iTX{r(Ikm5>hU!ATqt&olUR3#eifnVgW;ag|WK}sL z;Lt!BAe#p+9s}%*PxQuP>B3X;Pxij196e)h8ejvC06N*T8v4`2o>?0JtMRn*yZ}pM zT!ZKq^6&M70kVtwcDl&>#mc+^sjIm&W#thyLUK6gxXZg`I~ zPqid&wS0cp11aFEY2@Y-y5QE8>JUM%tK?rhI4ExqM`e37sXNxtpXR<*cO|5UGAd1| zvus19I;$;T8xNhQ@`a9e5{}ExpCl(m}bm5JpY~xgbX`1^)t2e5U)jx@z$n z7Oq}5yUE>h+!|0p?)HRwpH4svPT4xenA~qXH{g*Q40E!NwZL73;tF?<^n8754{-lE zNaH;Jn!`IQI8?yp=lsg)PxZfduJRCM*~eP9mZ>*S;iRB-F@{3SJ)HG&dNe3muql|0 z00it@Od$u%o-0OI2rr%kITt(4qkxR(x@rzbV}!8OyPQ$X^qV0JJ|o~#Lg27e|zAHB3aE(+qI(HwS?{}ZUbrv z$m()4sX8`V%jHU=Q66n~0$R7)?vT`o=b`4}TMVci9Zr)*$@7-{bO6tdnaI< zcY0^sjcH&Csdzfhm+MerfrQg>#+vdrr(ndk3PPNs6Bzi-!+eC^krT$J$p?ZK_tAHD z#ke(d0ZL<1mY!$BAEZU;EP#ji_M)>L_HFG@4cF?C&JH-z2jBXPIyQAW91;y6s-ZT5 z!_#tqI0-Nj%xQo*li?E_FQu7uY&x#2;^*|K$|H?g4MOFT@}|lh4QsvO$K@V0|JtBm z-T>s>1?23Hk@)DU&**o8SUa5=L` zhvx^NQ&(<}T(@uQ-sBZTx&nR&y|>SJ@AKYReSxI;GZX*J_W^yBsUyI!8yCnp%^kT% z*-l;SU98zUYS`2~zx(_&k7s+SG;2RaH(nkObX@k-yLdpm5fr`}B<*n2_b@YpASXkxujm4^V*V_2szxJT+&5b()W)>@`ApF11uOr4r>x`XeyADmf*1?4CYe2`#bdUnkB zURQ;vf^P``vfj{}WFEd&Ku;3Y!f9tPsRGE=lnt(Fp^Ou22~ZGpny_5YXw3(PP=o0g z0gl%ZEbqIrR=(=mR{5Iswenu9RpWw|nu}#b3wDpDWvcXaaSEV8ps_`nPjp-51|Vq* zz_ft!IGO<>G24yT)Cw1{Eu0|~03wSB#DE}y2d9>%l`!qkA$??D#5-WG@qN0_9`;TB zkba3k_tk!?UvZWH)oT^c6?8>>BRGF;n#X{30Z9@w0g@ZYf5A$Z{^$bm3{Mc?(S9j;*`kBtb7@?7q{+Dyr_Bx{I=)ZY)A&bvC=4GeqhBs!HSG<-wL8Y>rL|wGFxI=X5a8(Vg7@+4+zUV-R+wuac&fat zvtaVLY){9T>UR3ie13I`x~{&~v$D3_fWGPq)K$hG99a9%%5bUx73S;w@My1Hp4nI} zAGoqv-oLfZ>w0X1Bb5Wu?4-bE7=HzFMw9D~5e+LMyJO?$RE2;IV#= zipqO?G%h;_lXAa5Nvb8sPp_EXFg-ki4o?@%2vqcr+jghrRCEH$fCza-B+Vf$)CD6> z3CdUJee)0>hI8m8H=U0A8tYkB!E4|O9PL|k)@ExuXor8HPr4FXfX1c2b7d~63ic99 z8JdMR{oYZ9ZUj>T4!=pPC1uKkLN5&iIc$i)Fz2HA1Wiu80-(JLy{z)8fokldNxtP1 zX9;SUjGzMwaeNtb0nf#hu(YyAS$oisAw2FPCP>ZZ2AmrEV}2J9RWD!lpk8F!uugga zJq)d}Ma~Y?xZo<+l*tyM)U>sdDiqj^f}LP*5e`t zn>}maL`U#+pXFgqJZxt*oa%R;k$K#x=g=L>3^%EvCv$-2vrNUiZRr7W-0{*_+iW%A zubT5y{b0Hux1G&uaA!~)Y|1tUUzzJ8G@NtzlPCYFEA20{Ku9<4i=Az60g{IphsN5< zp&FG}nvJru==QkiEedp!ibtJ?5m^WNkg=BL3}5gWPLnTkq5Z7UW<{zZA$-B6qouhSdJ=?H_#iwYUNi>`=0 zIC0yo^E3zCJmj<9%z!J(&Gb44U=&R<2tKB9u`O_Qm1xA^mVj+Yn}Gi)`D4dO1pWo%b8Y>b~ zw8z++OjDnq7vEPP$#;}t-}~-D$a;;!lgH*+3RqnY=K}bzbyv!@7GRPwTjla2 zp6M#-nzPRKEYN>~!#d@o>*7SZu&w9qF-4O}p?!XUBV#wBzYQHQF}e`4E>cq93W}@s zZXKmrL8o~Zr8Rp~BW1w&jZxmGd@rC(;$!NjadD%gq0lLhw40%cM|w_$x63uot&R&2 z0EQ|D=;vy;5%0A0X8fYvcq$#A&dLZ-Jv9B#cnFxCK@R{xo@ITEjS}3Q&~FE{@vZTs zys*1hZVnFMk-2hpb+xQh2gfwtfBB2|iP?p&9Ss41z}P8!Jxzw3WIR#Sdch2z5ah_q zV(W+b(98Iw>AF^Xwlt~|^4HBMZRTvwbY+XY}pS?#p9ZL94|lS6kp z6a3Q%cZZt_el*ApFY;RTh4P~IfgGxFFX*+;qAxfFzNYK3?V0J}y*w@8%K{q8@vMF6 z?1XZ`{IB-ArRs2CJm7)o2j0&qn<*pSUUdh?e1Ig^9wNN63lw8{cQ`Az1{#r!7L~l# zHN!z8VI=N!wSobuqrn(#joW5qhoY@|5)+3F^H{GOzNex-*Hhh;1%K2D`!v5Rf9y+V zUGzXQe6+99kp}z*&vpvm@32{ugnWh0Fol<)Kx^_ieHE~u`@Hh>e{bD!9(^@IXX>tcILE=?tQ1YogR^S>xx(7gHX#6zNW<$P$}57*t9I4 z_|R9Ey%%{7%sPYF#xS407Y|qb={Zr&E0_e55fE6@BP{3vr?ERxl=CO02eWmll-N$| zu?wdfyxzm=TWz(UrLjmqsG(<^_sKl7>r@R^~X@5r^5CD4rj_7r3fqj5C{1cUOa& zLdN%y6LqR%I;H=Nmow+P-$~P3nI4BK8Ll~iHkVZoD+=<6o8?1)JYh@&pu@YSBe(fZ z57tAEY;Jyt52q}R*}Y~c14hEC^O}rzLQ#$YRJ=C=TfpViaNVBNg?Z2>Jg6PwNewT;Z(4vrbGWW8 zE(e^NFH&#gBK4j_XKAReH5baGoi^Zdu>yKd<8lS+dPyJe8vfEuy+bn~cXik0@n8o- ze|fx{hfJl?7Cg$pyaianJTfQ@r3bBAi7F-qm+V#rneQr_acC<00&|>cNs53J1bprN z@9Z#;+=&PauB}rNRsAVU{LVU9k|0#TCLlREK7_ekkkBlT_B!QCcR4G+Rq%Q$vj-{9 zO&hq|*LSuyoBOH=I7!X@giVHhcQ7iiZ}-dVd&6>jI7xuHVAJX9P3ox-HEu|yqQ~Iy zYypMuRHOm#hkOPM%pC{Jn14;ss0Ha%SCun@Vg;OnvVyVX9&?e=veWVkP3vS2R=E`G zUWMU3e9nKK>6G)2{C5E;>oX8kv@M{{mRpeDDfBu0+Us*SuL2&u7w*BE*iYVH9D+9$ zh5~&tfRX#HXL^+9DQ!7?Qti!3CwdkHs3zYvhIV%{E_gS}q|ulMkO9h85tMp^ zVv(z0E8ubQQ4-!$AM>?I8?JKIGiMZFJiC0CX+%K1P04~Ay$9A!flt4w&>VyGIp4b| z%aDY21L4e=I#uo>EO$CO5KvM-_fZ!-_m4(pkF$R?DTf#?ZVe~sjNveumcBV4N8_?R z9+tcPVY#z6D7W_qp`-iR@7wq|`&BS#4>?t}l)Ab)vu+Jp$M*=@ao=J+JSuHlAzZM| zc1TTLTtg`sgp9f6BoIH^SF^72iyb^q+Zd>f$QjR?N4cNH70GKIvWNB%=)AOdP;T}| zWuLLsV`kXP9Q10!d#O1zL{}o(xL!}LUddC89L7`H(okZAq)F*0>30Am9psom#GHYa ztNb&Mqw$A&%)BlJIOQ4jtx@IHoY@fvIUtx)WcnQQi)yS|pDY$z!sycT$6u8poIJuh zPPtC|z~L7(351LhG}c)eCQr)0PQ#m0O;4cHso9N-CnT0Ip10~PblTNpb;(pe$V~3j z`>BDVm$nZ-$Rjqf=9;{iVz0Do-IRLDJNvPgt0$GdQikxQWeGk#_$k+Ttt4;!v?=BE zKKh-&eE?9j-HCq=Z}UpyvycriX}FYfP5FKyFPA`F#;{vv53tzft(h6zV_YW60z>oKeGmnSg)NxYD2DA!CQQt#wNDRrlq5jFxX zYvt6HoAeK;$na#L43NloQ2aLm2e0hymFMr@FEXZ z9rC-L$A$}26uuO$fUSAw0B8V{{mEg1u3dOk7pG`}qdcg$P{BIsaq|#h$1BJyMW?PF z3g+~wS|(rGhrb3)6=Heyx16=ZqioKvzYx-njBlfWI1N6psgb;<_P>flZ-WZPfNud_ zg3eU}*0ugCrwGim69gX*(ZkX}a2p@FgwhoAxKlihb#i?`2+s zUmf6Q#RMGI&m*9lzA|qmMW+9KRYiHK`1GWB8nkZ@s%WH0^Qz9#k19^{X6kiNmFZ>W zC7__S(4b$TKz^I!Iu*8|1J%pTWxn{Mb>e-#^vTe6_C2Sbm5v_XL+{bs1IKcl-Hu$0 zv|;#4qY-*?>=+Vzu*xg}0(}}X=GE?lJ5!d%($cAb5}N1tc>Xf(_OmgS?$k5`7`W)d zq}Ap!JxW}zW$0z%z#-)~vkhF_R~x zZ-JB7g&(Ml_0I39vplT<>$4YPAg?bPmeI)6zI|XkpU3uCBdYR<<*hecJZP@m$B5GC zQhMo8HBNo42{__3-cUJVKSwsg94;1m1d!~47BhLIo%GT8uo`bJTpPiAE~fF`EOMfp zEWYE~i&#lJ)-W3f!8Uv5JHFC5P$xuBaIrirtqV}i7wJ}`0?Ccm67594anZiB22=C` z_iGp&@)TF2%V5gpE`6dy!fWlza52vxzVc#Of6sHNlh4+Xq7JmZ&d9kn>-{NmA8_x& z!=77R0sAdVCwXnc34*a1x5N4S_DZJZ{4*5{Dcvk9JQAY(s^(maS zyc{+xpDXx$2Sld7YI}nq7z>59pRMi1>GS+qO)1biLun$(K&8hYlc)x(knVQav2D*&Q8PSmk|gyFW4DpB7M`*1{=*{j}WZ zE|ll6yq{j}Vpupmt@5NSI<<}Fv+p+>Ev)QrD>+f!qwoiBDEaa!Edsb&?Qv?d@wm>p*eIHxi7K&$*c``nl5O@7-)neK5`py2ei z;SN*Av-(QUsFMqs0&wXwJx?k`Jt6MDOjoIaLO+5-6^MsWAjUJ|b-Cu@W_?5?PG z-|B4l$~gJGvM?#P_#Cmoe|j(lk@AzCX@Q`1$jk;b;&imn5sXz5@u6XN-YGZa31}UL z*I?2BZX$o(n(vWrH`_A0aLmJy4dwDOg`04y*KpBKn>sC(15ls~c%0^iT$3|chrpA) zPV$~^@_rp&Puws7Y9(O<7;2QMoYiyaOv3#>S^fHt>Lh|vb$ei+S@O09ZUk4 z-5?;LUficHQnsxnF}yuwpB!W8Ov|kUjES+12<6{m>C(rS$AcYplrE2V<XUh(9#!B>A?~lR&O5dr!dEs zuXq#%b5tPCsQdgn5^9yIn7GbY|5IQK7;CP$Dj1WH+2?sLb+s-Dv}b&UOgp2a^2YwC zytaE#-Z&VP`?P=TRBx`C%SuM4e;(%eUHG0CJk?x9=XV62JPqphnu+H{xyczg#247YiOef12v@~%5+4Htvv#$ zCMhv>l)mf(jW}a-DZ-XAZuGrOC$XqF8I%}wv^7AUvT`x+14*P+Dq#M}hxw?apmeFH z{IolEk=9{C2Cgi*z`_MBdH~PwVI16wHT^4%0-~Cr4S87}OQC$PU)p#|PwCt+2H$5a zp{L}4lzHG$>!6&{2+>e=dse=Rp=pTA3TFdD!>QdC#F5Mi{O;)(Ya|Ge)}W2?NTyjcg;soe^-x zOIeY$I^1h{$~BqYX>~!R^2V8ys}u3#-Z!pjr@)6Q8*doyRzI20DvWP zjmlcKffdwW;U$BWvx^79P>`p0&*?<3(bm)ImG3;Fym^&5RL1aIf{$HM?P_5aod8LH zi~>^->mk@v>3dkR3c#2|1L6-LGyHkkPDbt*sCnyT{Ep=70 z0&p22qQEimdr9!ab4~s#n4I!{hEPX-W#8kjLKjMPDyp`?>E8zZgs|hHIw4`K6lEz? z_)hCofF+m_#2{D845Tod(jQb-JRk_?(Fnr|w5@*xmS6JflLW6W_z8GKx#f&t1u$@d z-IXaUd!PPNaH>GEfQIi(nUlpTw7yNRc zw^KM#5`Slm)YW!}_H|Iwt*Q*Ee?kaor$j%ZoWblki-;B|Peq(KQ|hG>x1K6A`BIw8 zf-&iq`e}*8>(2A_-*9;j`8Kh75Ah*?2$7tTFk^({YiI!CqI#8}Rq4y=Z9QIsmUxk& zf$ZtesS#~F_cGwh@D0N_^q9%#ri!VadjUIq$+)dj&Kl)8W|e0!aFLT5gS&vQEEH2d zQa5FeKvHk$F*HN17;nJMLY>W!+5}Vbym7>O;$6M3x2)^)LK_-BJms7QO-^qp&7sdh z@W7IJp1UbI>+(kbpuDoZSKjUq6OZW(hKDlQg>cfHvO#a0-a(Dy2K;BNy8=;PyD@-H z4IB3?uebPVl{T!{7V0UV%`jk1xP2j4yf0o|-YZ`O%*xBiKgK8R<8)&Ry^h``eS3#F ze+7-kG;3^WQ7NJH+HW8)dP_}!nWIL%sFS+E&?e=z-b<&;U4SXOooKlOVTJt1=q^KW zgs^FcV~U(vb+vrLNow5_e!_L8Hu4&`gk%V~&pT_Iln>U)*kv9ZedX>r0fw`a^7g^7 z-0z#YVN?zQ*czM3vkV;?H(j#?xCqZ3(`M0im&b!054V(imk+mJdbHC_9EN*jC*gD$ zcdh~;lz39J9GQj(5dgF6yD^uetE^3StZ)>lsc2A zRtO9EP=34`7jprQ{Jt)ZIoFCDvb1Mb$5NjW3R|J!_F(R9tWe-KgmCq6BF=JstaR!u zv`AhvfT2}UNSc4r-3;{TxQ&(K&b(z>^Cl1%2+hwsb!$p)N{nEnO+E-^Vt}^W@cB78 zH974=Wu2>ZUA&=(%3J*2-k4K~D1Zcd^s)VByp!!lK4o8NlOgx$AHBdA(`Y`~-cW?< zo${;)5{&-mpNOZHM+F2>0u}qifO5wqaZ;XKD|q%0=v#MzmD6-tKt+A*g9^x0xU`8= zg`925c(k+;&j8m~kF>xF;mvQywEbu{OW()Khj2ZluXe_>auaL)_P$Dt`%!c%JmYV# z_gdx2&6V=_dZ%1nX_PhSvZF^A;hi)ioF=5d0Mk+E(1&BFr@`qxXVMnuDy%m&!?YUq zLE;Vbtu)L*B@>ItnXnDck=TxMG{${JB1d7 zE%8ppV_4IpohtmO9II0Mip&al*Y)w;S`53YSK(Bq#{8$EEIB>~}{%oXhSjkRZ&wZwfRMXzLkNKnW_da|xxI%E;D*!8!E=xoz3f zVlyi$tz&|v5n|QD71_tVJe7JFV`ogu#q_zJUZ?Ecu_W!GPCiTdqL(6;K7}kgUB&|grBuJJp2Mo^tTw$47&dr^wE-41h#UN41xNKebNtyb8|w&hfE7D_!tEr+w+>e{F?2Fc;Tuk_q8!IUrB}z^aza0zD1U)ormzA+77|Bw zr7>R~2Z=tym|dfuYkD!HU!TK$^3kn>QF&u;zq~QnEw@o%?s{Q-=m=Ufwr*p&Q8rM# zhC!GD$c0(P*x7$B4!GV~Dvz%;%Z=4mdBRUv>F1_^9E1Bvz8wq#Sez)$VWOx}EFOfn|>BJp=(Jo$HuK~<$9 z@*AGe=r?}Q)M-vRyTg-*alwXZxaedN{?xb=^x1a}?$eku7itX&LH^Pvb21udt^w~B zfbQVp0z?gR!#6sBA-#%89mF%@FyNG5?G!<;X|nX%HZ&0F-+2gFP}P6!#d7t1?=LOD ztGhl49Gz+xJe$`y$^79RL7DwI1Q;iWFNXh=b0~1*v+bg%4vP8Y+o?q)U{+PRr|DQKwuU4|Y7HV(xz&N8-W|WO`Zz zWaiMjKXOL}EMyqZJzM*NKA62`^N&u>A%x159L%o;DTt`$DLTEVT5Aaw=TNa{VF-md zJ>mT|=E&({PvcS=fIltKK)MJ%-2z@+kNF5Nr_tm6v@)Es=Hi@Ft_TGLf_FMaWHNFA zoKy8qNjE4<5Re!$$~s2y9nS=OdN%c}DzZ=G)#_504va24D@vML$+X2fM^ICqUOF{~ zue?NA=#{IffNCB|1*50JCiij*AQkkB2#~hImf!U{db*2()~P}}oBZ30@vKo}Wf#v; z5Wgdk6*lLuDmpzT)}Nw_i#_Zsy|&`ddC`%*12{BKoVR*px{uS?KvQh!Wv)A-a6fg3 z2O+}NFb2S+76bPhQ?$rwV)GP5zc~6{Z-tvE0K+9rwXu#s?lr2nuwx@sj8Q-;BGWDn z%B!P6xjmWDhvxU7lK7E6=X3 zm#2EY@?^JDt^)wg`zXa3+o{5UEX%@)R?H!EdK%Bxlj|#Gv(t{ZY7awX4{&WPu;VW% zG`Hv#K+7ZD<#OF}lUuHXl4_N$ZaZEwJ(e{Ax(0}(X}cfZ!!ea7<#|2V0&GJbTJW{A z4;lmWPCsUh z&=`!Bm_l<&wIlEImGzQEoW68QIq7SlDZSBxOK%8mLhB~w*Hf1S<Y~KUG5ZL>^Vp;~{`_mltOT_9^?$U|e=alYp=BWSsDl z1?3U-%5l>K_B}UlaIKj{WRZyGF8=ckzxM-(;Mi-;@yoTzS;CYFumFXE!yk zqrP6}MhTIc$n|6T*x1E{=#0m-?T|WYjLEfCo`o0b>oiRHLw~n1NYoJ;mwF%74<2Tn zFhA*4WP-CK(tz>ZC!j?8O|Nj$uu%gfSM*Un(-+3BJHz7GTpka0)Ly?l-jze#2Bx2#u^u>sEpkUT7hC(BXbkV+_Hb-)Kp9| zKc`dGIe4+=Q6>O5V{kHEe6G-KgXMU{Q|U7Rk%G$?^jScZJSk`2%&f}=`#Va_h{j|YlnM|zm*qE534ziBL=jiq!d z?Dz!1>=};+f4utpnbR`1g?ej9*dlAFH&R*K1~@&k+9^+Mu9aS=!}m_}>LCW?aNi3!D&h<{x35Cys2HxLuSlF&)qa zP0M#YrnHessli#z)vMez(}YJgsx2CBp=f7r3>i4YXp>hG8_aK}uekyszt(ObhilxW zJyP$fCl6-8pl$l%I@fu)LzMh;#c@EMtTyH&kJUlSdJkh5Yp4qSX4^Ogx#>&3y;vwG z(DW3D{8v=5%v63%!*qP6_e&{o&-?6Ee$UB$Y$r9i^^VrAzlk zc7JZ;uUzqZZ!*n($bG>k{gi1bI$Q6;qTn7yxYEKxv`hsI{BK_gqT0?F0gMIY$~>p31+Q)raB_;l#dBkjS%2z%Oog1a zm?5JV;f)@3HU-cXj6d5i2vufUC)+8%){GLBZe1`ooQ}(V>bf@^^VzT!o-1FWER212 z++0O&U;23w`6I}-C+zv?Eae%m$u=TA&=2;nqw9RpOheVW^PSWA8nTPVl^-cl*>e6~=YU~kC-x<$vPoGS z#c_E&&_S179uIna)mMF0`Rr#ud;aPF`$NV`Dw%VjpkPXVEC@eSAdF66h8mGK)f=V- zr%;B`I876icsagz8bNU4!VFVL)QM%iX1eGR7JMhjbGySn!aS?0VW>U>>Oc?H(SE1kk$ZHE%0Pu8IQRDsAj#Aff@VFf7tCib3N8Jt zGP3&xSv6&jia~K)$Hb`^SK}uhi)ZV>$rf)2Nq-l}yQsjRdA+X-e80l8HdML@|Kqd6 zGM;ms^}MOP0fY!yQzFqhN$$Njn`E~jL6871eMf&e1?4=QG?X#69squYa*fNRzJh(q zRM{o?-n!WV)P?^en`ucs{f{;Z0IYAy;CG6nY|6C%Xs_v;)Q@_Q7t3bb)xFRN z#(>~jFRvjdj=#GtZKITLjgNTVsJyv%Q1&Os<$ixs-r66R(d4LHUG0=-udS6wR(sU5 zKIdUQ1XwEfHb$HJ-56b^N7BPEwuz53WCB`~F5JS-5DgC(UTDNZ7Fq0MuE9RzyfdC; z0Tg#&90(-qf<&zoePeq0jU(Sib_hf@zT~wdjP*rmJV2E}7dQsc323xxp)t!5>}8sn z>zs|SVj6_`~v##>CPRex4=+d8-=WK^wTMhC6ES~LOBa2I1pd`Q+ zuwe*MrmK_uht>-@Vt#So}X$?L#-q9FUjd;_}d2Aw++mx-7!xVfXBV9>Ls{5nZHrGph{&8d4wC}A(qk3*<|?`#vMOX}^IDv}&?59PS&#Ei|fp6rr;5$JrH8Ff4TR4)gc)92KRa+Tt%_UEi{)rt9l<1i z)>|~6)vH|Sk>|j;+!IeDN>LCXANzg0O#rpT{P2y6T?^RNlkvV$rgbquS!?x_Q$Ew< zl>tD*RnqaiAuzHRveOB(QCU1YF6*u3a&4tku5YZCt1CT} z&T^)6-BrN6hI?L1ITT&GEdbF9;BmcK9^Gt}$Jg5Baqe~h(;Mwhd5Y6Sz8guG1b9S< zMmix3?K3Uqnr7%+DA6bdp7Dn&Ag7j3=vbeh9W;Ee5}^!bj=3>SQ0ut|n^IgYyP!xq{(wlI--VO!1 z;L+9ku6i8CV>?ar1kauMrFdFRV{&gaD)%Ro7z!@(xJn=E>7eUS8d&hnHsge(uI!nfK<6&R%)p{(gCVe^hRdpd)~U!TqSQ#KYc>t)nHyo9h_xH-}A>ilmw5&6RZV~!0AIbpfV1e<` zqaOJLW9ad6?6MOTWAAEd$5380Zc;Y=9R>)_}Ts7F_r5a{Y|6(xF2B$n-FsKai zQ0_{G@~Vr2yjQ-ip7?r?-u^9&-uG^G%Tp^(Cp(iOCqdubugq{EWx{2kD}Ph6`)4+U zW56S%7ul?*UZW?Vn?A_yIh1ctYOE@4td&#c$_-O;2{4 z?9gLu47C7UbSPc;d((ERM|c&o&6%rnSKcR^$9T+k*Op4I9+;qJkW8$6PL%k za3~yP2!)E)xZuuQU3#k&dR5`p>ymSeSA~R$ckAMfYDr7)TIQYHqr<^l?`slv^~PD#-#~3o$@*@D^0B9ZlgT4+AV8X$ENLZhlQQlX{MKV zW{1i1wtX-zI|u#J9}LUUXb9q)W#NOdK3g3uYkfEC6dT<@{Brwlw{cQe4Ljg>6<0{jtC@Ww(qi;=GoR9^+ zTR<2(4#px5`D!pdEe8jaG8!A_I7Jzha-|LE?yZ)mduwH*(+y~KOzZe!Ku{l7VkSlu z`f`U3cg_%Wnm^KoCB262R(R`iP?1-9ajGw|WcmSU&xw1R&!3hny%yuzLvf?jc#a_n zdV2zj?Hg{@tB_dE^c8Kh&325aop(_tUYKt=xmS;bJYhM$I#!9df|o7~gCX^E)vJqp zwo!VfM7b{rp+AA~rQ2PjyrnV)cuY^K=iUBv?`zXljiI>_3Q~~bjDdjJkPCED>aNFV z2#6fRcrMb|8BNRE{Xx>L+#U}YYdP}aJ!Bza5d$1v&?{JBQiTWk9}uC8s34QmF@UBF zx5+-(T<7o7wsGNOIzE7sL2xm~0YeMFyLNB3Y>E+(}aw4nFV)x&NSp}~4F z#8Cd{* zXMrQUFE7|e!;E~cQ_BsWEf3q?gst#{Ak}ad!Rfw>cA)PwjCl2ojsm@ur<@~b+Cwj& zpsUx^u~Frwv5I@h<6Z7O;MI_lo#~kIk>4>;>5DbwuCqaUIL$ob`|Nr{n+$`|Lu;;2 z^@QHlER>|rU6HQW)5Uxa{GFFRUmpA5SMp5Crr#sCX`294Fex2q(8e1}Kha$DNF#dD z?PYf{^lrh6cLoD^`!KUzhC?}PlLcDT!xPuB;Up(nOIt(s3++Vfxu-EoW@VCV!6Akf(uv#8Wa;@tMK=|uL?P1l(hc!)(E!T zWkTyy4_eE(6@-x6Oc^U^g7LbA9>N?!z6!8ufHKVor)MDf6RD$s&6SfQ1oi&uV!3lz z%Im{vc^#o}vyZYK0SFKd2ZK==PPByG5)45J&{2qXI5&Co1ig1`vi{(4dA_fVBcl|h`{k&*(t>0*HiG( zYbv561h(obDRA@&wmQf(@)Rw1HMqS$LP8lnv^+53J5peag(~O1_ zbQzrXvWAakP;bUquS2jNT_c#Q;202$^5T{Vchhh58Xc5M2dkg)rY_58&@Q)8mC!Q( zD1f$ezwPujr{(e@xHld*;E|i$LQaZK7kYs&oOR_m^a{UlQNFZCrCU=a85gG~#f%5r z<4Jjacdxv>vsYf*+b*|<{c?XeEcZtPXlhK~8}Ex!fhlX8ROQ(u#D)fp#S{2ARvK*5 zgsa_+&%BR;^XBJ&E%fDK-1Wk7)Iif?R8!^%$TVnC)_kY3*9-6XLp4j*#g48XGh zO)7_!S59+Ft9r=*d`m7s(fj6zYcR;;&@1H#6pfutEH9^v2ix#VRtN{6)M;#UtP0Td zp1RemG~%^a0k2NGIx{hW4#iAv`#CzA!E^F)jo}kK3EGr0IvJeawU3&$Pmnx= zGzD1Uf;q0CZ70yKz|U*}rm8Y_+j8*glG zVPhdp*W>iDMzkPLJtU+VNVi0f+}kIu_ic?s6u? z_i#3Ks511xg*8)wwSZXWuX;-lZ^KZ7QwpRnjWeIn2LfT~%l;TsKY86c%7-QnR}S09 zLySr3N4b?*I?D6O$_vGgeM}Yd{p4V;jPKn_A6)KM^Xng#LoSbZ<&c>psQ83PlL=z6Ns}Z{`$XwJ_@r4lpz-+0}Wb!ZAo(R0>}qU;r5~#}LMs*-jA5 zT8#04s$lu7HR|eL!GI-I2FJpt9P^9`Xl3+x(kM?L!oO(e04x3%FbT}`5crevXITtG zeYMnk?Pgi&wv&6%_!XyJt9sWPY8llMHV!DBA4^?q@LPjQEoOnk5$!ytykkDk0G9{H z^W~n_W`9uL-rFhL`#WVY9AxSSS&z^GC@q{|4bPS9D~<9<*Z3a;(|I=So98sS?-ByN zg~i;$iq*p_sLCpKYlUPH0NPh7kR_+3FVd3my<@1yLSU|SE!bBY8LR3!k79CKNMLKf zYmpnSpl4R^g2(c_z!I>c(ok749ue3GK~w(N7YaAWMew4JBH*3z@EXU(y0zOVKKj-~ z!@j!xW0SsD(Kx;R_JPTb_W@7CtN=A#kRzai&5jk6Z5(5_(To?v6|PhIcbER%?jIoB z$7P0qKXFQ!dL?$3`&}{apJ3bm&_{fF4s!*)70Q&-H8=_%5yieLn+K(tGr_%HuImM@9HZ;I!HHqn>gfm@JDc4x_%bb#R zXQ(Pe9r+3M(!@BmuC&Qf7xZXEXSW(;njThv(a_S!O58R8Px?{b>tRejRocvLDSLW4 z<9?nXt#eu(`$;)%pIEOt$SLVgDl=HB%~_EY4iSMR7NvBKF1M!3S0$;(8j3-w*u>VuONUn3fBBnAPP2} zPTAvmyPS6c1aI)%R}T7sr9rvRXA}9}J{Xl-2h-9Y)oGjStKIU{)=GJNqmwi(f-l>Z z++lhPQ2xOyw6nI?{;D25F-|;)8K*j>!dx)s!k4T9WxNIb#{B3( zX+bA#=)_!kCiZoKK@tI{f1x?*lAUfC^TfTXoViX9(BN=_P#)5^?kF*hC&+0xx4Lwv ziM{ElY)^*e{-BLA^_1Aw8FZxr@vy%ZrI-BXIMdgBujk_6&DYAt}*xrwRh1NjQOr?c;OZGn{_sGxkHi_to>lb18uLy$amvyET;bBc0{)_-eacXRNoN zL5&Ef4CNCu1=L#VS<-mml|I#DB%pDsGJDt4uXy7l&X`uUwK)Q>J|5b6uEnwX;$-n%%P50LTC+twZ(m2{0D`ImRJlfHQE? zr$vX)1Y^86O_qtY4Q0szoe3hXOTZal$ph6BX1wM}*`3bd5#+3V!PAoGm1~!=O!PR) zw-gc3Wt``I7Zh@jvO|MYKx-(4Fgd&}(4}n}L#-tYUw(I?OEy5@`5Kx|vo9|yPn1RU zKldw>l=148Oy$BK_P?^k#%Xlf=4_)&T|D-ulkmPqpp}fVsZ2VThxWGNOD+b|NQ;c7 zZd>gh`l(x1nr-^un9=HKc9fi%TI)1aF=as60_-Zw)J-}|yjHno%p-Kbb%ILwKvySh zs1xXe@FdT3Iy~W2lw*JIA@`F<_xw;_WDjtzJEr}n1v^pz^1T3D`f{O3H@h2HsDy*ui{by8y{M0L$0* zcFS7_2c?gIHucYyXye*EbCgv^ofgAMkp}*Od%qWFb|sERH}T=Ec7ZuGXPU% zLVW~CE()oDta=l?UjWa42&y_w=b{Xip{r8$#JR#d2W?Z!&NF_3Mq?FMP;_qJCXhGx znLARbpfZ&zXhfj*06$lnopKF3dhDnrcdAXs=cXiIU+rLEuGnG8*d9Si~^rnU>=gei~H*oOr7F%hW40$X5Z9?rbCwlFgL~ z0zN^W3)QmqAN*j5kD$_PDJDji24(;?*Go5Yl(PkIBQtOA_seZ~)*WD+hIXee!CUh5 z@+TM;@WrdjXN@6e1@wY?O&ieWY>5;qpIW}MJBt}wbdLlfTu zI1msB3~FivYl9L6l)_KmnK(TGhlk$@a;Ut41XjdEEvbC~RR(hL!)kNqomH89PtU}mAlaQCw_Bxf~nY0epoBGt8VhUp0 z%(G7b5eRDIGhLB)c&evhA)gJvceV2E{-E4L(2N0C`hTx>+JM$>xz_BK>j=NCc?6ik zgy-ws?I9?Qqf}7Zc^5egeYMM+Tz2%*2VCP6zM#XpyZX0-VoJyY-CQUOMq)Y(P}q4Ot>}SRHevi&NWvc zyC7tQVwh4dr@U2U?ziho6HZ9!#!P*sGQo zsfVExrtFw!3SPH7EeoK*)&$i^eyjchh7bZb;1O=SK9Tn zy&~PJHlx1nT%SOn>SdG%GOf?`p>6{iL3B#P znh?^9C35gA-zRef9|fx}RMTj7s#H+->i(eI1h_bBaR&qGZD%Sbyw}hia*n6vwyA-j zf49dp6M}T;C|UJ9ax6_KE5^l%20zgrox>)5R#KU;aeL#?l4-;Pr zxe1zvlw(Y_Q^>~dP56Ew0EIvG<{LKQY?PrXdRR5QlneHU5}xK!C!bNll(gs5UBDOb zuKh!O1@6Y7YoO_o)XQj!9>J$=lh=KX0c;~VjNKMkW(z~=r+n4S(m1lOrSI&cP1znU z=(|e;Zqkp=1l^}^Z_~GL@%b%uz-#-%@**Jl)&8*TBcs$khU;YJjas`VKur`+DdpL| z3@mjza#n}F9@E#S)YXMYPRV<%_0*_09@da87u=U0dUJ*H$#{(Vb9C&%W8;1-lfYZC=s%594SC*Z&fZ6%%^a#wXVWH_n@pgT z>07?b6p>z1%F**u!6Z+lKAHaGHw6?Qv6Oj*Q5C>W-6X)Bdb;Ls1hX4NelSH)BAEIJ z29sKwwxiE8`v^7xpD{Sb;2n$weB(?DyX}}$^6unfYXvU?7oUGo2kVL~3qTgMD)dU) zCM2FOrg?d5G$^kP_sh-69@cF?v3QSmd*zwlT6wb7E03BcsNE`C+-Hu;W$JHypQ=ld zt;a3_?!4NG+OyW9CKI+l1&|0>&aArTTxm4R_3lb}W^1iHcV)eNaC5c14*=+KW4%|N z1`s~o>y)QE9RO_$(1U=qTxxBYf>T>g?W=q@+Rd`rZ50>6xcJ41DZ%C`?-j(ZG&e7t zUYujbO^>5v>Ug_~Q$VOURIg1y8*&<3alU6BD!^k@lYbpTb znJyxbzf`yafieAIa%saSJd^mDdupw1p(RurfQ;Y=#tV?-jzPx6JZF|sh9YBr0zK7~F;(8!@fr&9{St;uj21qJZaCzX zxdn|PzK@{--N1tyeR|0SX&ScjMiSQZo#4`K26v#1TcdHjfo?dEg*oy!M!a-a4Q@fD zQ`UkSf3re*@hnr1UX2r85lC`RHXWdj7yP2vQV*w|Q+MW4R%tND5R&LPk3DJ2F~*#9 z9R5Nsx9BIsf%K^9)z{Hre|m+xzMRm{_G4DJBbz4Byx}UR(6!Us%Jv%b2~W!F$Ws^c z98Rb3{FU^9jtytZ1g`@CvB1$W z^qzW}4vkmtcjm}GNN9qx$0l2E+N+_6^v2Mwp3x&@fLRvQJ6*#=U{*)kj0eWUIy>Yh z0@)mZXA2f-ZJF@9MlaQd2CB?JOwdPl69z%AW2U~WCMYt}&)i^LVuENb@ZII{V8_EP z<=*8(S{3+It4d*`OI>Tp1vD@Y%p)Tdz!Ps#nhGZFgGuzzXjSRWk+G6j4<HxA)1BS&+TITDcgyymU;2Q@{%nNh zJ^)CL5cuw1ag?|pr)4rVL;H-?Np3@gSrT(!)Gf`mEyoC?BdT@GcgAH|SA?^kr{lSD zh|t?dknT^gi~*CglX00_KFL1Qk9E4`iS@N|g;%%GbG5l+fnEqmQmJXh+Haouj?V%} zh7O@eKTw}cH(4+0pnx**ty_>i+HIG|du@KHs~6pub{&A@Ud&fI%Vh%vd&OyefaNnQ zopN;*;MGQOQn=&mbg}#7YIzIZ^mb}sFjPFyg(K$SLlGjht&hr0OFR7n{U|GQGHf+% z$Z5O|PP^Na8VL4R7Tcg?dMI)Mu@-z(;(15U1vzo%Gr#a&MYVXQ&rYzmjN&Qr))?F_ zeMy(D*cVvXr+NXbSp}k&Zrz|iuD6bQJTi?>L(Dz-^hUcpyV)u?)*9t{rnVZHT9Zd0 z2o&dO8PnFg7$(Na-o!|GdoV5cp+6Uqby3LidP&>VKRb`ms)Qo=K-&V1B|L#wmAXn! zWoK9`cU)3}ue0+!x$JS}-p0gwXD;Iv)F9HI-ikxst643=6 zD<7P)tg{$`5f|iaw%cXXm|%=R%W^g(Tt_+fwgfCccu-_$-Qkmn?0=u3AqkFQ#7rxt zVXJ(j3|=V)Afl}G?&=9sZoHES8+2junvi<*jbYbw28l`C$)*s$BZbLBGmI7Mv~HeS zo~?mnim%Ff@FX(JSZ+O?POXMtIWCMaXNz=#R>q_GG@L?fK5O@}7VE z?q}o&vc)m8J&vi~SL>7T7*MARrRqxjK(g?he4&A*XV!&N_OE4fS!9k0&Jmpf;>jD! z@7Bd@^mFPBb`<=!=K4JiJvg=BUTU7l?^oK0{^Lq@X?T$T1engUWib@bFt@Gc*;=3F zgQ{0sQ0e!V$Acc{Bz$?i8;6S6sp@!CP=bqkF(7iczVbWp1`MM$sO5W<7(4^ET`Vy| zGYb&BPaCer0#)1f4CO1xGDcD$DpToEG3GGp+ItxJ8sh^S2_W=lDm~z8|K#9IGjP9* zC!nZtIjOk+Q5LTV06z&RUC?0+k1NWJnXwST-5~MnP940qXJEkr?vBtTCH+nyeRn#k!#N!f>fSxNH_v{!U zp)sy=fKbO-;BU$t=}u*+@)jUkt|0s(KdE)})da-UEMsW-_MJ*B6#xh{p_MkYu?{d_ z?;1l2ZRu9vG|=8Wqjx7~Wp8oQJNednKXUdD@=BFZ!?#`MM`YCC+j@+UPe^PxWIM|UpLurkT@01z(-SZz15U%v*2 zGQ?MimK&;fNXa3QDI2nwqTN9bEeAB|-KCpzO{gHWz#;8td<1PirF!492++cO4&1-A zupBv-*%f&L8rJ{`y+KF9o{K4HWz`X{riq~mS@1QaJZmbAK+T~EjTdJstaSGBhRKxy zYmFv=S&w4KF>SKFdiCxMM&;gc7@o5%vo9!=4Z&DjHao&n;?=h?6y2pq&!wO;3v(zt z**fT(Dx2vu+Unx!s z5h#Z+0>BYqq31DE3W5plH9d=E=wWjzKnqa8W!YNhDU;8Br$edq2`}!< zqQ$Df@TeXt0a|6|^BeP4*{!IS>9w8(j|wSwtnttT=VBlQ|3Fj*4e zQD^IA`A(r3-#NrEITW*6KTq4sb6uRVPMOAO$x{NsQve;59C{d!O>G2Nfgl<@M_QT( zjE;@~@^Fatr`i}|5Dd?=8SYVRy{SkPxn~y8@ENk8zKlP#yaXWStFk@VFLwb55BtIz z>GkN;-IbgQbz1W%SUh+=pzoUhV=WZ9Ao{QItNRyeYK1kBl+S z+rv70gm2H=Smmppa%ef|t9k$_g8KQ9@(?7MnUX(vpRfVip!eR{iM94pxoVEa7GT^k z53`phlD!bXfF}y_3b+OQipSZeC&ud&7 z`r@LyY$eHSj7e@5+*y9w>u3HHgNC07@Em)p!Tq$JM*5q5<+QrG#!#4*%p#bw%c<^C zu40rt%K3Q5Fd!EqQ9qx3-X8mF#0Pp!H)3X zM1hZIr7`R~+-*VkunHKU2<7f#lOxIoQt*DEOczdg?v!UD91$Az znSum>5klVpai1q>UFiVg1WgFS3YHKV_8E1v9Sy)l2e6uzo+yv(loBPyc}jZ_o+o@q zH^u@LLg*>bAEK8rb)wHyf_i_Crjs&vI4f;xwAEZFPp);#wO%_r!34M3e%aNlj$y!fXE6=$eU7V`UF_iWm-nt| zZ17w492f?HVuu#=5+&Y|v&Nh15pl|^#zn=`;UXo*-KQsZls7KaSmQJu$U4fV!|zFA z?`avlPWkT8>hfHTk+fG21;!bJA9~i9ak0!YwD68n$)!BkGAXOcc)NmMFmK$hfL;QGjSQ$w1p<_Md(vz4yFji(;{_vmU5`P9PDtyA5`C+|c#hSl~t&cT2KD7>4I|)XEcuej=rmAtnY2Hi;~b~biX2SnGGiOyXw0iy*V_N)bWvPdK?@Iu&@@*4JX$}@Bs1@(0n$yd;!7X z>g}4UNRT13YwcF$;7UfPDSKF@-7G{>Nz|zw0g-VqQvj5J(EeVWTS~bu_AuX=iHP-f z#!Jhy6-@I8ar2zb^ZO~nczlWg9`2QUgIxsMVYvd3eR6#rK)F$_x4UHn0JkcT1U(wV z+TmOSaIP!^?v@ze`4gU};78aqt{zU)8xw1+o(rf}DdPf=W_wEpOfQ^XXwwk6_pM2V zogTbD9+fwT2j!K$o$}hjF5gd(zDL2QI`JTv^Y%a+yjS@+HD;<2J=)0;$*a?T^PEo0 z>P2?Zi&UYk{Z9fvB`8C%9(P|)VLMnINILr;WM#PhhpYh0kBLR&#;yD*?3*pKI2 zC8AQP3nBD~2p;vOsJzrIdNh2p3d;7(Bk%>aV}PE5e`!HriUQ$bDwFKHQU3B%oo+PILF+fmE zrufmbW1@e7fia>z>bt`Grm^~ri(v_Zd#I8=tx;SL^AQ6K`6P_gpb&^iKc)cN=X4we zRK~gr=nS1$jpwWxBOqZR$T`C$1oy`RQpiu>r96}pJ)|?e#R5zZjUnIq`-Mys=*`c$ z3RrKbp+SO`YBGAi_sZ|ys5ej0Dp-|H6YoeFh%|n4rh`)X?IQM1gVT$ZpvJW)3?ol> z;R!N;w&_{bGp3hOGwgWSFN>WXh0_kprme}5>0R`R{AgUf`GAet)sPpUn%y!UcItn8 zTxY8q)JYz)q1neCV{)GI%q`sDbb-+QF^0`>noJpkIZoEm@3eSoqvzEgI{@Ak?G-n55R1sJ{)_W)#`9hueP2H8)So(S&9=^GEP;T}Ii5*qvIcDx|6TL+Jl2VPn zf;-CrG?aK$p5ubg%tWRBdc-j#xJIYL{kPxZ-R1Ehhm?1Dyi13~t^f^pa%hDK76fQ| zpPar{$jU@Ala~t0+$dfkFo6+VMJ*>IQ_h7Rj7-6TOsD;lV4VA%7IcMn3-d8~z7RSx zegq=rzT?8@V(U=ZU7L_spKaNk3YRE&gp>kBuh4>ldTzHx{hj(50ZMieQm*hdiL8aT z5p-^&sI{s9987B}hRIBDWIPPQ*j2gCt0Mp+SOge6&s|ppa`8Z&)UCQ^rVIiA90NM- z96?5=$ZS7P6nyHr8=fXnmzs9$D*_>#MDDo%h!_+vUnet6W`gm96d)AakKy zM_8}(oCeidV2nM+$FuZv6JfrB(r_Wq3dqEjn0iI@X4b731<%G}&c}mr!1(Sn{=-w0 z8I)n#k(hp6%=w}(-6G2yR!fY@)coeS}Eg5T?l2Ir{K}Q1pzjF zliiZI#xMn^0PT;9DK}Spwi%n`HRXQ2aVlczLN9g}B`_vt6*Qx3^gz=IO$jT+@LS@2HJn_9OFLcO#q~IQ(aes>Nv5B zW(Bx2on#g6P9G&YGPTPvUfe^c+o7F!!lVoOM?h>WYl84;Q*s#sbk>%j5&FY(8ETm4 zx$Y${h1d`7zSBH6Mjqxv;3F>zM4F+G`Eq}HR9@U4m)8%b#hk9LYBnA_3u}-Eo{$4P zEf{gEkIGO!kD+q`Lp&I9KFj+81%Z#?o|ni;r%@>udU0HMLwS1tl2D)V^c?cu+_(WK zRV;+o0s(nnfut=EC?Zp#0cE3nC_lveN$cD}M+4f%>J4|*bc{dVTNl%->1CaRwvEe9 zUuc|C=Ir&COXI0$BZpluqH$Dxn1D*It$BfkmxARIV7T5iFQW#Uv4Vm=p2_{0IiNlE zi?nRV7&4%4h^*yz4aPi!v5`NhUUY=*sOgjJKfa}%=8m+y8m>a$^S#YfUZXiUt8vN4 z$ew%VmZe|irR*EeJ;#(G9at{Kz(&=<;Mh3Kes%!l6}dS3Yr}hH0NH-=OXb=JK14rP zkFaP zgY)LSJGtKD8^7@z&);1h|9yuXa(TQ468UnimNRl70zzhx)BP3Be~fM9#qcTB$1R2sEyD3f1c;6w-WpT3-Cz=gOO-emR(o^9<9oYye^| zrbR7R!7UIlJ}&W#fFhbI*8>Rj0%?Dnw!%~^fwzM0St_vJ^;v?Xf``cDCB70 zoB|tApr^8Wv{Y#Gsc*+AcJ6h1$rf#KXB?+~R$8snZFfqi(Twm?S81)zQLjw@FSsWz z@IenMpu}8=dlQqjTWPFY1ZSOs24qi9%Mn8Ecs4EzeBYoj7nYbG?%-UwnTKr>AV>vK z9P^83Wx1ipj%U%IXISNquVbSCbQ;E-kD&ohfvsK<`{XE|UDMkf0i0^$Z?`I3r_XP! ztdytLR|0My+gM9*{bMU@<;LoIxv{ohwpP076Ia!%3JAlp6;YA^x50Q)4(Ox((GWl|DTfMf6^Dh=WR<&HURJ>`aAwTtXO)!g zwf`MY+o*A&!k(Zo_D0jvA0MJnP%^Yn<+cytaJx2Br1UW&?j8)vy}=~+R1YjQ1>nt4 zm>L4^ba5Y0c^euv<%tV|q~UlVn|i7pbCsAtS@6IR(N^i-#=Gj@F3>M)-#8`ek9AR% z{qpc0hLz}L*HFf-Y||# zo6^U1wg4)D=9HtM8^(#R`CR2oLV9?o*Z&<)e!!GQFx13F8A?vbJZ0uaz7aqs#Dh~g z<02p9uM-|)cnyLu3w`+AR60}y-dF(S8BWneE+Xgntpz`?B5#ZX*LyAKbBb4a>vQug zo@vNOU07DXbqZY%nqKq(J=)+;6dBp)nP+paUE?f~)AH+`b{5YF5(SUme~8Y|BWEn2 zamDhc{4BrLg<_6Fl}FSduSshZkZ(Vkpx<#+`1>nkLtTYsZt9@?%d7^c`l)uK^`=zn zohf|kr^vI_w%1uOxm^8|DRbnF{h58omz!BoGY_u{$_*I_&_uQ3Z=LR^ z|1~R>59&2;i*7UAMLDKiX>h+)cX-XZARW|HXn7Al*EI81-@`qs}`KAuEPcVCzI&?$+mqkfkK2! z_*O|%6|gG~<7HIwah;;oe3VXMv<&)2=Lr}T4#u%iOc+cBpq1;X#jQx!%c7@A<)8eJ zN;D4R?f53bJ%T_f$4|zcXz|@f(chkq%g*5_(}atHw{D}Xb`h$bMixQzsEey4RnaEG zR^XeC$5_aCtLOs-VJvOipl1zXlYEr?WvbR!O3=#oUZT#M(;ch!G7N+=l5y0v6 z$KYs$usf`lKK1A!^t%furOT_ykWELU_trVu69By{t`#^=sT9DZ35O4cBS6w9ph+Po zpd1Kd`h#+t-?pc-Bs+f#Q1iy#etB(Yue`p!pZ z&m`jRX=`$0%S@g%JJ^wqvSfTh1B^d(<3fZf-|7X{6X?qAUP~|INjW+a$Q_hEplNro z2LRqj0Z{LgL&o8(T8f3(P%vj?b-AdKI`{07$-y0`!zF zo!&kH%(=RCk2dY1Yy=AEHK`F27MubAPy&``OQa!J?)I8ZlpMrKIeI!gRhE)m=#lq& zB+W^;ZweIp#A_|(2&Ce>CgXp?Ipcdn7Fuq1hjKD5a)DEK;KB63H(lL41j*orpW9RQmdF;6lMWGAu zqG+I1$I!lYD$`ZR_c6jW`o@4pAR_&HSuufWS@o zXv2jm(53WkjznX4YpN<~1|tYM(-706?G8BpE&!JI)-lMQSZ$Z5x}CCVs10pOeQXnT zQRed!+BRO;K5-jAw;y$8$rZ)|x@=#_^K82SaTglgMedj*5t7CbZqPn{69CdCQ@<(u ztY?feo`DEVpU8uPDbHi&imw`ZTqlppcdlek*a?@b5A^ujiT17G3dYS3F<6@z@p6;= zZ|WmcC3&bzF5*W2+unJv1!Ti#9Z&eO*KC*T7_(2TwUSHL-LBSptvplSm5z2XK<*-I z&H1asa{Mh-Cq`yOAOUwv7tksnHF~=YLgHV!(5vnF1{I2rH~P!|G74U~_T_cFJbt~y zF}Xb6r9)D!8`Y!SQMQMWbaG~K>QRbfmYX4T6`R6Ni`2ic_&Kp>|5Lc#PY$R|;(LW= zrYB)CEjB$$mZc_691((8P#Dh<0!`2n0O@616T#|xrM4oRYhyk0TjGZJ-f8jVY~(tp z8C+0eE<^=zKrcdQI6Vu1dV8>s1vx5*bH~M1k*>1az&dxupi`~M>j)Gy!F7$bl+}&f z8KI;Rr1X`F$ojgHe2((7$MxAff|cjc4f}^@WuLy-685sqx+6q})D0d5*B&U3SRfRM6CEyi?kAhG{@w*zYC<_SCwLB~Lx|A~>y- zm?TFTjbNPvB2_ZJS}1i@u^Nl`=+*`RYLRD50FdJ{1N7+8bpeP;hx@Y$K$1H3CuMsu zDnme-@wV1~v)w9J*Vf9$$_hdpK(EqCpH#nv=|milnmD-vJ(YHpDt)66cg6dZi|v1D z+r?uhCKmXq5XbSB9hxZTm?uf_-()AXMCI~osxos_DS*C6=yaryR^%(Ho7C8 z7V4&lI=eq{ee&ex9_qySxmUKKBq|)e6mHulYh-Im`r2~cxySlT=dQH&naPPtQ8A(x zjSAHRQh#qQHZvZEnCS6w%pT@LIOlY+^dQ~n9S^NK)b!be*X^;1s~OXDDmOq+hVu+C zpbSOvea3+6r7!)8dNVb6H6Rn)4L{_M-<3at5f{-o9n9k;t8$8gZdL{^%k^H&|Dj`f z!CkgA)?6(u_|h{Kxk-KE9p_cxXd?U?suAetEP3cA9#Q_3(aK3{?DVMgtG8MQfxxFf z9s_V(QQVAI(mGfljoWx9)dRHIUA8W^@HDTaAsHHvhG)2F(tMQ4u!I%y%!GvSdIbaQ ziZRHbC0AsxH>iK3l=b#PVoh}(m=0%+FS~$9m?Xq?$`wkhd$>Dzi`XyjI(Y>N&=34p0kE@+|w( zGURh-zMMId$K`7MxRbGs?jYvP+UxRwbw4!T1#cs_;bo|M;`l9fZo(gOqt?l z+rZ_?7ab14Fv%X7%ES)~>xDOh60|1HL|l7jfB_tCgGZ&GlY+}ZkMTPvQZr^noq z)Qm5yFc7%bX#xZ+-zjVai>gb1tJ61&d9DX6&L3qUXig4|+YthzkO9d{2x2XL7wzcP zaxu})Y*>Z}Gzt!YKGCzsnb;hGgi44r7BKbQLy+tMdhQu4K33qm8-pOFCiNApBt?Y6 zP_Rt7E=buK4*_+DWx;7#EL=ToQ!HDb(na>A{xn-0&D1OL9VfHPQ5C? zU8J+rXa1w@m3TKoUpR~BUjKS4Tr))XyjFZDo4N+blgsCy12JPGT zE}o%P)YGxK$P&?5+++Ym73luX;;6A9^X^iy00e} z@IM3~A91ORY+N00_o{#em?{>>f!?Jrmdkomg}O+4PBXQAe>fui1!PH>{vMsrvjChjnmX4?3EAm;hyWpZO2#<^uU*pKxB$gLTa2HV+b%7=KFJo z#F5pYb4Kx)@ij&^yWA+y{O9m{YYqU10Ed3p3ukJx1qRxgjpUN`H?Ph0Ct18>QhzrN zFsG^^Du@T<7r!dQkV)?D;zAycbqyEgpa!vqNFEH|n6uJ2-^_4unqx52=)Ag!MNk!* zfUh!JLs@RLumdQ*n3324P-X`l{*<!i)H4%}*Lnm$Hw_M?Y+>`#rQzEl1H zOez(FT%Oe1sMoX_lRj3NbsAlfuq4_c)buoNnOo@F>P*mcn2-a$la{TvMzd4N&bTPo zmHEm6S7vL(IwdZTI4Byg8o8P6Nv#}7-&D`8W!70L#)Thh)&+m(I%I`?@H$! z&{UUtn3ciy8Y8MPVO<2ORQ2-s4IG!<^)4SWvx-(w0$p=1gy9u*0=y1FYXJczLwM?? z$`*qQ2rCq}R-+0MR*Uy8Ov&f0SmqSaX+gFYTr5)K*pv`Lp{%4uI4B#n!YoJck!cqc zq6$P`r4py`go=v!2pygx^9my4Et3f;LBZfOk<&Q}PzkI_c`YpL&Z3*Fjj2oTrofbPc+Ry>yF9zLTAp0% zm8aHM%Tt|RxzSlE*Eu&k-EyVZDpyu|fW=N}H(StQjp?d8^my8@^e5jR^Xw60a4?+$ z0%jRESGZeWgXvvVHKD%*iUM@O@#2C$82XET;w#34ex|SNcRjW$2tzxjjJ;D)DiGVU zuGa>BxB%?bB6Q`wdXXJptN|2mDf=_`M<112`+W?BF~32+&?7&Ee^gA_?hys(lwTAJ z{3KoLg|GSQ&fChfr40}H%rd0b#LaokxiZ{ovDk1a!{q+PQaS~mdOgI)m=1TZXn~Vk z->Jx5Kx4eD{32ZmfZ{#WNNO7Q#t;0bq%m)+0C90%{&HglexmE$RyA?Eyy_*cY0!8c z{O#g97j-an$UnwWS;?Os#WetsafvH}e=RTR0UGp?;WH}@O-0W5AfBIl4Y?e=n5E#5H`1TkI5Nc@04&fwIiK~Yz}2vkm-^FkYogbZzK|xl-`&0p zyK%-tZ>!+TT*HD)4=I}Np`E%elkk2;E%$GdmH zU^1a+fD&A$Kyex_sUZ-oTDz<5ZeBBegMgCxVKwg4bED#uT?IZeG=c$ZIMXkD?Rm&h zpCSmo!vwm@a;<%3rM&FzvX0-I`XC-p?veQ_(5=1$V~&h5N!~K9^*=3kEzvAGiNF!O zy4wNDp6`+;jItEh0*1Z8sBF6!1tl*C>0^Dma?vT%8@-Kky|ogrsh+L@ZE>Fq4*^@Y z_@aLT5V^)FMbl@rmdq6iNJY3QBszcqr=b*F?jGX`+ZyvC2u8^8dtJmMkfC;S%YekQ zGCcQ2YRx-MKbcL-U_@O9gK~c~$+VYV0#i}Ua|)OgMuIGrfed9_ovX-Cc~zNJxvL_q zU{n9Y5pNV=9`QWz{tzK~jPkVqT{UQ4M=x1GLAp&_EPs2Fe$_A#aHiv71+jw zWm_=H6)X#QToAMXfLmPd@MViJUdrCYL(V?WK446CX9B{rvNvLU#wX=q0>C~(c^v|- zc^yDByL`Wk^d8Y)Gw-J_96P6_^<=AteWoa1#j7$9NJ>{!DgC9lT!PGJuGh0?%vL;> zj9b#CaGwe`N{;(glI|D2q4&ozr|tRURr+%ZN>7qBY`PWHDgd{XZN_VNGKq&&4)gNR zJD*fw#*^ixYJ1aa0|Fe+1x=Nzbh7Ox<%W0oKMOYa(}Sad z^)Mew3{%MT8DGN$q+J&`Ey1gTb3xO!R--)90emrXHAcIFce5Qh#ty3fdI7rPCen?5 zuj#~U+~5dMG=bOj%w?NX34y~h+_uwEFm;VI*W$U#FKI{l7lQBte$*r8=g48cgtGFS zOsUg`#0BeB9nZ=XAa^PVaBQ5l^bWRSx>4B^d|<6`>^ z_mQ)#vqlMHPIcsHb(JZWrpPzjCT*Ata~l9{<^^SvhvV!bp$a6a3tzaPW*^$wqh5Va z`opXuj`>9b_{-zL4#)8Fc$bd|%Lt9C-1I^!0GFExQ>;CMjj!k(0z@kFwAvKV0)*t} z;~v2qY-vfzUG2hZ^<8=YbLH(9zEJK@VXVm!r_(8i1|ZTDFEUT;+fTFSQj~D>IbGbR#2g3&~_|q{)PyEgR`S@?{Hk+8uZJ{yF2C0 z`}fORdwb>W{Xx0QcSC-Y8n1Uu;N2^0y_M2N!3e_6#aM)<7QUca0p*mHtE){M?0(nD z&&c&{%zgve7ifz)6SEB<_nXjGYq|l@Y&xC0&_rP^N6^`CiZ}tHOrgNmv)~F#J#6ME z6DG}$X8^|;eGXJvRDe?U$u#HU+;OaI+aD|ZaIWkQ%*$5e5LF=Ynoz#!G^io(>?^0Q zg){RJdD-Eb{RECzy^(fSRK(J|4MhM!S z>1la;aF~6hx5ssQZ5O)Gi@O7Oeq%5$uMJ1#we#1P8Jib&_sh$B{qlN$P+lJn7{5W; zMLCU7UIzLfqC6wa1y6upTU3n~Q=eEzy&=*D%7uD0sH;w(OlxsUBYFZ`ex}YQ`_(&c z_gpu1~{c^f^nzM%{6K~o#oa;`jLV-Y%Ap&1LhQ%Tvxjry5~1NFc1ju&q2vUeAs8n z@p!y|4BXBjvD-&elXgn!XUXS2|F|g4oFxbub;bNI%UKb(K#4SRahK`JB^D#Qa{*;CVk@sHtQfc3K z3i(sLmC7A~m$Ltkcz%q2ng=X$9)#tpA?AaY2aULfA zI;noPcgmP^=gxN7xwlh}#-q}hP0BoVJ!C90*3^kAME=Xn;zbu09y6|EWg@@r1KwSX zrL@YaD4Swe|7oH zXFhZO={M(4=Xfdwoc5E+b@dw$2>wBsEG1UPE$;MC<{lKT>Pccx>Jb#H;3xt~0f7Kg zaQX_5saBlkHx#EP=SGmhi5$ZxZDHGxJBIU{(iZ$f4AHp@4(0t zL`2;lZGEv>R+gJ(5iqBKJUTwiHiS+~nzqB3mZTP<4tn4ODgu)l-{W@x4$8?Q3&A<> z^%@#)w>)=982|xu{3(3B4sdBMMZsflxlvXcjjR-Q=NorQXg8Y0e4BbwXbM8BdPD?F zPK6trl__zaam4eD%`;ALMte?pMz!<->WVZzdt|4MCC96JJ&fm^(BCz19UGj!wU2pR z#v>pGrOa?eSzb)T=+#?-rOiuc`}HQ6=H?y%_RZm>yxIrEBWSl%ry8#oj|jc(=RKac z8`@y37@IxrbJgcQ4;s=gy^0EEm9?NPZbb=|wpxd*z;x`PMf)<}ac!lWIyM=jP;WIh z^l0}Q%L({*w+>oEI~Wu06^QF`R}l?HlYq{Zt}%!F;xib7c$;aj07PMCeC7!>VxWAy zC=}@#uLsZ5Pq_q&l}4?DUN4ogeQ)CUM^?H?^CTEo5gWQtz3^2z%cpui2E1&!M zkC&hO2R~Xq{`Y@`^M^}+XFJB$gtB(;yaix+yUg|hh5H9(w6|YI7)G-JAP-P@GU}Jp z@t_<73{OVGvOFD?r70kh&jSp?F$UrM*&(2B3aL7~fe|)#p_=j!+JJvAcA}9_Yx*31 z)6)n&tU&Zz(AQOS!6Jj)ep3(UaBxs|5BAF7U|6Pr(X-KhS>U;+oS<0>n*pjurHQQS z0lo!UE==Lp0LdA$RYTK0)GO~|wfofTwSx(U`Y_Zkk0rh|#=WwndKWd24Gn;EBJ)GT z{BGTKEDY2g@SihBJIE1}_220a%ic&(I4c95GXNa+$8`)3#>kEl{X?eYv0v5;pvP^%E@7*rro!jMT?@pQCzghZkzgo6$-Ymm|{c`K27s@Yw^he95 ze&VC$rBD5{^44d5p?v8RKUaR~pZ;8V^@W$p8!x?7cDC=8+jqCi+jnjwpWs=>M7iv& zMz&r=?w`?ajf*%+=r2Sk?G0DcYWjlzl&yy7RM~KOJm?{ZUmow)p=?#Sa;S@;^U{Ht zH`{Ij*36Vzrg0P!FotCBl%-xk;|g7v;cKSlxbMQlqfoGLy_70*4^yoO3{8xiSS6&K z3s3Y$?Q4yzFkx~o}g4EvRUIddnN2soo6Hj4-B9(}I9Z^T8A>q^L&$`kZ zAOQ+J;=#wvRgwMVPtsiYYXXu{yPC1sFa$0pWluS85Ah8VL7xXNCT3#zLJ3 z#CMiWb<-@HoV`YiFD*(--eKS`x`@+$5yExteREAJCDI;EQxp}f{ZLq#iJMX8{k zLy)^oW}SwXyrSrqmeD$UBg}I~K!5?n9xeQ$yBIIdCT0Mf!UbJ~1Zz$twY_A5LG1A@Ud=h>y z%D?Wc+Up=fL}oFu+KFk0O?`fwTk*URo*N;t`(5z+PR&uv=}H3D41s+d~fZ;NijTTV-_X zPI=>VpDr(c`cvf#(8#Btn_v0Kzh7SdMU0AH{6x9Q_xE3Y89IBp^r`c~?oPbP*q+F! zx`JM(gUoDrk%0fT&;6RC=(nAxS5*44*-1!+{p(wc6t5o%;uyUHj zSU?4yLf>n=M{8QopFq*tWTh=a%^-0>gg0DFKRKzJ#U}{UtnyBI0+Fg@PpqSr;Y7yf z*~bV0gXR-MNg1&OsgSWNuKYDg@RS0MsDt&iAfKb~*UM?!jfY$WB)jTRPo1^TGfx03 z#uuXhX9xuY?%jLU7(b^i^{VPM3&_kVu&YYn>9Gmd=q)w=Mo*mrT6RD=XWBtssVVO*xGI>WyWw87l2dotp~g0fRQMMK zNWTkM^n&VzrdYnSeufm(wwofPL%(EqpylO^uZe)&FFVuUc>(~Q>jV1u!ZaNMJfUDQ zN%lNf%pXHfC|1U+(uJzAdK2T3qa=EOX9iYzXS{%VDpOC|YCgtg7t<)5slQuB(sl6! zXWExi?SFS55(F4vU$;<{ChR8_7<7^;Zt37SeeOaQ(?hMmFCyQ4>Us!JaY0(rySTtX z-biDqnTU|X@iPQriQ4L!j0a!#SqO{_Jy#w|AZoTnZz~C2OezDwf3izO3Mt~AQ;L7@DS>L=`);6z|*4kE?Z>^LC&*n;5?)1uX zt6f^giMM+geqCe&2IXQa#-H)O=d2~`a60Z)X87KPX39uYk!`q8242}{HZ$vBQfqS! zy7565gR<@rr2z`xIj$7A3KO`0{+ZLd7>pC+ZsB)5gP!uF>!!2Qi&V=!&Q55wE5lvk z>_RgaIyRv}V>I0@N*Q~ifd{=Bv+aT-SDLRO>sO#ZaBFEo?{18+0Kp{%n=%>0eg=P! z#uXgy?H`oE!2x({T&4h~gYEm}-tD_(_x7DK+1)O~`@HVlEAxQS1$0a6cv>3MVcDcV z8b>o)i<~&vE0fn>DF?57sqDP;MP6ShlUr|<>8-cR!Ob_y5TJKJ83%XoQsxfjZPOpK zathED;3}sR!w!EW#D`ZwwC6<_i;HrcHIcWJD}JxIa|XZ#M1woGO7HsP8ArV=E*zbw zzcl{ZoL9Q7ve|8x>#M6}v$qm@m}~V)cXfk4oKeuUoB}$>Z@*QJ-hR8>`P?s;+n@cV za_h6dTt4#?A1$B$i67(qNcqwy{#p6rCw?B|krS3qMi0?2%(+`4!{pvZgP2_)g++@zp1{>}6}3IQ2EQ``KU=^K7?3S7XD zBM(Z^d7GNm2lC=YfCau%*tnp^ypNXS!VITbr&#DG2o?8I6>ui@j~i@f>dw1tg=Jqx zfujgGU3`;7(e#(wXk93mc;6!Iv9u{)Z>S*1sd)3a-S3YwePgh-TSrGV*-KzkKhhtIk?Wcdlr59CCqlMm=qiURGhQQ}*_+;8~FGt`h;6 z(1m_KjR%dNcnEzOV>8ECY3Nv}V`^-qeoH;^_Jv+V0i|9*eLZ^YH(E7~lF7*pXK*%L z8nwRC(?#7AFU%W(qKkO+PJ3a}_4rJF6#Ti3nmk6$xC;=?d+Cgys)1k_1s~`N%BuHh z90(R{mtGrdZy&laPH^xrAJ?Dz%JN(Pl|Npd{osd6clT~-@7^x++qcTE{Fi^deD1&a zzm*q$@*{xDzgOP+?5D~-l>2P^UOBwabpSX$L~Ve0Qh?EqrfG7qQVms^M^2bZjBAuZ zoPN%#Th7E2a>iIYKQ+wVyWLF)oW*cob-mgY6`*5WuG8%1PISxBHTcJLP1zFFtw?*l zveIsrZU^8eO-r+kv2l4>C5=pA_`}0`(Dj--b!r0pF*3jzgVA_Y#-l-*J9NRzT!5L?&4aNBt?3E8$p33Pq9yb}(Zk4hqyC@_2ZM5OuwV9e_sZVATV?;=?Xq|0 zcDeJ~E9LO++hub5W*NQxdYRk1UltB_%7AP30D5{Z58dW-a8Qo;ZOk>dUU{j!^*Vt5 zg%``@%~#6t-fr1!Etc!;x$?x?a@hpEKC-f0uJs!9*<4wn59E*`GTAmdo$t;=j*aqH z-jHbwt*QD+IU^TEOuTb?DC4}M8rJ6`g=_s(zgLH;z32lzAnq7jW8oby#$Mpd*g2zj z0z(?R>9gFyN@H>i5S{JbDX07Q%i)X9my=hXFK4elUs`XyQqF$yXUpj)f41EEn}4O; z{hR;ia*y++@BcGppX)A<2R|@=pwP?XfsP;i!5_@)AO6FCIIsVo9^dp$-;|vly4M~l z-}a~fVp(3_DDx=Tt0=`ztC4Bm5r))0g2U-Cv|Vx;-q`2`WbOE)3t*1D@;t8?f=qAE zJeqXk^f8~;8(6SdXMg1nd~5li{J`Hs9vvazQ0EA^cp2ej6?vw1VN&@#X@O9zDqR2X z0sur5rZVw5y_R}h6c8&0jq$uYUB!^60<%Wa=rYc||3; zDm+fHT8|NEn~yva#bG538dsT9bcBriZky-QX(`h-WED8|tmRl!y>h&Ia=)G=f2)5I zIUr8&9q)avKxF&#zgU`&Jyw=iHqXDM-UucEvs1q=B$}H)MUj|(q{ic| z0!&~zHYqt{;S}{U;Bu?gDa~fPY>!XM&4XRW69A$qC6d8VGts;tk=neohrOmjU~Xt0{~2 zrz6J4D*-G37<4CwkjjYhl-{V*qTW#IF73Gp&HAaZ29sHg9lg3or?b%NI`!P@w9AkE z#XnnK_@!UqiFR{s*Z;pC$~EPi#|M7*A1Yt}J>OIMhQZL6@}@?JyyZUTgIB%?uPm4T z%P(cd<=zV@c<#IZr7z_E-lOMUD30#+$I9yUCj!>Jru)bfbvz}6i^CuM%xg8zDn-5g z(H|-w_?_QXHlBXAjL$T_0hQ2{a=?|za-If?-fQo0CLqQVW1q|ujGYF!N4#sZ5%kWz z)8n$eyAQ2scIb7}m=hfK%O3nL4bDb=o)f88+H31&6S{kHtyAW?cd*nhZ-4reiND$P=;MI&rJ3&k{Cz1!8x z##+ngUOxlGnoG6HAFr4zcR%-O^wCkd{*@mNptDr#VPAUqzvMipyrhhP^j13{uiI%M z50A?JU{*GJtumdsr?oQ;#%CLzWc_M6dKt_{k}MmX4qyJGu0HUMpZMYO_;2~zvhwH? zd8Tz3+<7Z9r2qC!+Gk(XTl#O^%&UAhy!{sM>T%@*Uy*y2FI(?_E{3x8RJ%R?6<-xu z)_v~>5|gVDpxO7zPkf}j@}vKc-2XE_^D~!I+P}_m2_k<3$8R=>>|A}MeEYxo7s}G= zS}f3~uy)OrrdZRuJpgb_oW^E^+U-_iX=DKRoKILj0(n}EEP zPPhE!-}kNMpZ}{r%##ra#__mnnd@Xq4~0#9FX2cmUrKicpVOJ3=m2RCk3vHSp-=JuPh@7UM|=Fh#=CZbMkwH5$($&AlooJC|lPbi6GNz zcOj0`tO^{1vR4qUUA>9`I`gop)XmYSLeG?r?V`+-ub_=A6)c{MJr#iesF$8GJ$u`~ z0*FL0E%oSou2XP#c#b>q*q`2F5PHBO!qR?kqJXrDood!&n4D?!#~H7tL~>Dp^{`*2 zD3&)7q<8uUJeRRLuB)?W6IY>|l$iQapD+EH|6TcAf=Jp~6+s;j!K_ooDqN@b&rn|G zOf)B?JGxW=X}uBtk^R+UhfGFkxWc%Bj9w^rN3O^}Ps=l!0wUiAL_Sp(d44nyWzam{ zR)u75CgzbpV}=yiDhjXjaQy5mJ+yjqv*MYb1)JWZa?;alhhHc)r_Z$ymUuw*?pfM= zx%o5ysPq7lANbm@P3am8-l0-*6}Ks0^n5gy8`PmrMb>Z(%P@_OAsx$*(owm!J1)m- zkClxZ&x8-m!)Ky-J=xTx(i)xX^EH$lYp0}5$25S>T^KO|PK0Dd&@6<;^$N5!y;zC97I0#oqwQw zjcB1@<7aMxq{nGQ1C0@7v;uip!Urf1n z<$nuk^11uyW1*oQK+~i9$m98}1bFqw|89BacYH_Lc=l-w(GI+2_6EQPyy@zH>3%XE zq#O@HnFj6RF>;poE@V80Z{^W|s&)tPVdx5VGk%&1E=UiG9t=sr;yyC$KGx__s}&g~ z?fT5-Ty+*~04^uJt@8X&|3n(})Hi=yIUNndONQVK4-U%Fh&s`C8gx55J2BvWj;w2+ zI)f$nZ7xBt)YJXm1xfOrr@ZKuJ#W4m@ zK1pd@P)q%_!*K{p@U5~{(7k{#iqz#dYp#=Gj_(as@|VTs#q{|CbsgQimsvMu<_;jR zmQ;_~{kvthefRv+uN_wbh4S$;AO3K_va?f`{n&@TI^N#_WtS)4LtoWZ<15tL_G=8t zgN}m(ZoIxmqp{zSZ=4#&8ttF^u^%pXKl*p_yh{-I>mQdO@;7k&W`oG~m22hO|MXud z?aeI|-?TipzLqH#V`v02POk~76l5(J!35Bv8}r|p62dq#r@3W4^|nIB!!5a75xa&G zUT?3IfB*OXj`G|7`bW+M#c?sMhNtMmm_2cqz$FVbP>RN;=}j~Nx%tbIjsh9!l#u|^ z>0NUx%FHH$9?VVWX%2 z<`?s2@P*Ho-s3mQTzBQXUI^oW5+F3!+O{T-bJet-iR8O<5mN+ijk6q1XftS60J*?* z#vnR=%Lr(_vv=Lva6Fk#=9KR;4!12&alBr%At9Q_yYy^?+JMP%*fnTR*^E`V}?%jI3Jo=ue z0X$WJ8viI@Qh8}xxHotf{vh&=A2d@y`jC1>4OuT<1d*Qht5b*mt|!)**%~6?Xh>VU z=lXbQP=M_yxjKe#e(WEW?$Nk>;OoAgx~PZ{@{EJZv9ml^RxyGWd9BIL6HviPZMY6K zh`_JYg;NyAy}e;+UU{lK`P_3nXE_VU?xP^xS6FqSg3I2z+%7m?q;GXQSkEB<-^FIe zVY%QZ0D`+TD5Oz==OW*E=w%hoE>K=gu3mR38BE<_L!)Z}P_$N_SnZU*`h9<*eD0I~ ztllS)Jp{*>gUI)N_rFwr%Xk0&7{!jcGa$w!YwXzXey!L1nYAu-ewMUT1LU1MWz}u` zq^;_W3jpB87BuZx%Gv&Z=Zn7z=vyeaUif@K%B|-=&-L@=-WNab6XM0{-?~}WpL(YB zHrC7fwZ}t`dfi(wIG`jxFLZlSWq8QEFw$9jWrhDM@K|15jX{;r6legLKxe;PkD-RX zGRk<%jczx5GdrBZGxOz;df%V8A%b}vYgooS0Mcv_PMvS=-7bwM-cvsQSO2~8_`moa zW$V4~hi;WQi}0|rq1H=-MIdG>8~Lpd@YMkIS;rcvyq=CmF&PWbbSpqo5cwnJ&Oi9u{Bj8*ALO_Mk-vfCHycDY0g>PKeSf~JTzMqZ zeUEh7nYQyxUP2hb=@yl}sc8%>M&^~>k?FUOV^Jy?gf)siFiEwPVKmdTt|J_-A_)J& zcmIy^JO0Msugp)G1>qvc)IULp%w7fS#WaTj%tnF#P@VUO_B?Apq~DwK&{g*JepG>J$U|e zW%WtG)Ji9UdwIT*70n7%1tz5_%}^RXzb+9@tA(hp5Q16 z~cB{WB`8B3sKetp(s7*9X0TN)s#f7UO7hT8vQUrNgwPTl)JZXmB-%m zOaSZ&MuJo$KGIX?P9ITDRnyQOjS1RZabNn~t>Nq*t#((P3w#AtULb(=ehmr7((zHr z+4nV$jWMU40)C1sul$prEbYT#`O1IcUqHE4?}%mVadirAt-V}Msl&W=fu=1-+B9sz zJ2H4mP7;_mH_OXJFu<@$TxSC;wx2<1NFd%-#oA!BUv{x)=^VwoB80S%p@xJ^>6 zVdMyTWJ^)*_3+tFak&?7QV`LfnbMxu?`mC52enlC(@|)DjrMJII*G~s&;IQ{S>F20 zFQ%M_Ma+IVi2UI1{zK(!zWaN!;#dRIPSwj-7r0c9Uo+ljl{+$sZ~Jar314WK1sL$1 zd;_^LjK)7Q4)9hyO%$T6GzFN#Xb2CO>(7Mrda;d>eCvz9QvT~d{k`Q|zV}a++s}Wo z+<)yA%Blcr=REeU_w;)+@|_#cQirqBzVROZ$B23My*xwWuYkxJ#)yDd^gh}Mjc`H8 zx&}Ucr(y4RhSX%Ac$z)HB6j%AEjtI@3V;@Gy;9bmeqZ^yzxp4PXTIgT%GUcnkSr9Y zPBSb>!%;vpZzv8AilKt=&kVqcbvl=C$bXN>Xyqj`%y`^G0H(sQbvnZUUoP9*J7s?| zwu)KJt<0|r$f~T>Qz>2B+`E8Cb02iCT%}EOWdsP6FVji9_U~2?;XrWsWyj;sV3hNB z^%VPdR)AKxiB2jl&a8X@;A;O_}JJXz&_Os;qLFUwU);+}Rpu8YCU%s(q9Oa0ni4zris!3vp1> zuJP$h|KLZ<+dp;*A|Ld)1d+di<2M^bHny&nZ~neNTdqIyI0EA^D@(Puue57!NWsMZ z*vPILOC%G?n0ufC)5BDYRiGn;lrgHp7aEu=%f%PhS60h^_&vX~eA8e55w6EFWw>P^ zrGnSUoO-!Lj3;NttSGz@Nc`TQ4lbZ^s>C!j3K}`iXDYg6_-mb3ai8G3)N^z=3*a%I zpwepeYP;@_HBQv?{DE;H@bpwr|GhNoMP8brJeSi z)Ap`l6%hNqR=?YgRkdzhmH<>mM4xkdtDZ;&vLMnaay@#EcTJ$|)`bhj)%B9xm;Uib zOKUbLAO6OFfqN;Ddo9E<@VP6krLurR6mn#jAv=`!K4UVQmF@Ak+#8MKwZ6MQD|4Gq zlxy#KKlO*Esh@|QE08~J0DLnh?qqa?;UaIHf)E9d#^5@J(sVKge(#fvi#L&KTwSm==*{%LcbV#?sb2P;k!#?bOy|8kwACK z;QiOWRJs_kpZsgzU!MAw?d5|Atw0RAG z0c7-#wCUc_hsUn6R{pmWa`e*YKaVb%l|Ii6uUXb;P=>F+TpPyW6!MoJ8-PD$($yPJ zW(?wm*z|no7Kpo_`=zpS<3{Ohu3?RyWx9OJDJ$A+k;Y^hUZe1zDZMG%^csSBEoOzF z;B99*&Z43dz=^Aj7v>w~YHOif1t=~qR$z5>vRHSCnT(Rq*wvp3V?BpI`)~Y_@~waV z`}t&3>}TU)5rvGk;xyMW*6v(modi}g~;{v*azKqPp#g{HpfB8XKaomMAXhTWQS z4a#-D4~V?=cDefW6Sd!{Tm-w%qQB;Nj$@o!AXEj9J*V$^RbdHwjaAL{=Y1rIoT2d2 z|CCqLMbYO7Zk3A*4Fn8Mc}Ed(8pr7Kzx0njQkt`V`QUH;hEzv-;uczLJQHKmS_Gi! zonH(+dK%9vfSA#)gBjyEnJ}Iw<;@*lH=Zb0-}AnBvGmZmkY{zN!98k>`7ERXdguDn zxoO%upkG`FAlO!+)l@D#gfS4nfPGRo=~?h1ukDMK_R#l{OUtj)SzWQRw(cuhJv5hpcqZcNb$RFPusEli%`N%kTRuKM4OJ zU%Fjr^(dJWB2zdlOFoc>&1w3MOoir!CwniwDEspafXORgEF*xIzkBvysX%k}nfK+@ zdTc%WzVgI#AIxfRXNA_@_aS&x#zFQ>XYkQsx&7kvrSZg5=(3s)*f<$?7@Y+j}zk;YfK(~Ul%FCxWUrikb=Ro-4*m~~=A|D0B z(z10|HXd(mLcdDD0yut(?wl|8KK@T?n8`PM1GF60iBZ21<5zG-4w(p1$m|eLr26zVJV!gNKvJ90KHH-{`kBA=x61N+K2#q4 z;8#ZO-FOTz3y9p>xRRL{SA@6MH>)nRMbv>urO$k3W@jkc9jTHRg5MX+{p)!1o`0Ef zbN3`?f(`+_W9sthkNik^<8oom10RkUj%5*K^}%(=EBr`6BfG z{6~MNG^hRYfv^91z`Y)7uXW5F-&2eYr!Q-27nMl-AU>CCG-KSie1<~a8y}bF?+(jk z?XhzGz3&f*G!=-kQyq*06HIG7v;h~%uSY+&(H;Vhea1%PMP(-K=(#XHDjpsi2oGuS z*wiR$m_Scc4-jcCKl{S8CVI@>Yuo8TJI8DQf9K!*lV#^229ejl{r8uz`L6HAXk7|V zxfi|$MnXjBQKwngIL*I!doqqun`G}?8_uRrP4=$$UmB2i#bT!zE%Mi@1}uj$xYC5B zO4m(iIXDf`kUzffTYqc$+Q0ChWIDLjYx8Jj&&3RkJfMN%OhDx|jRy+iHw`yEfXX0g zK-r@Q3qF&U&z~i@bK#Hsc3a@^r5DQJ^_S94Y5vypUnq~f|AYKejWNBKXN^WF8&}J% zfAZs{`P6$#>&AP_@y%BP*y7Wq9{pEdvU+J(AK-X#TzTJf`7(}zC%F&av*(D?Ha^;J(q}H9Jfi>VqDq<K7j9_6xfCUMhTEZj2*y86ui z&KPjDfY~wDK(~52PCoW`{&sohxBm9>==(mHY5Exk_+qD9?%chf&=GGP?Cz#7RyMDs zZW?`^&8@Vfv%U^L(&wFCLa-b=5 z`2d?XfTJ!Dkx{+M8hmBIqrxo7b@^=p0L)7$SpHd**fQQeHDt z9j=b7r+|RU0UnR%0Bx~st>bYSQ4iB)2)_JNAQ~rSZn-6%eTslqxC-d|Stw*#jstb! zI@5Q!I3ovrrC4`-wW58mBCxK44|`D$ntOw9V*MKN+fmiOX?@Uv}03DF%io-yDaL5miO>5yCyq1QqqDE%xQai7Y^okdhgcAmiB zzVn%u|1clYvAa+WphrE_32Cs;_&$5m^BGoPoX$|>%lX}IRNhH}hHfZlq)&-5xfm%= znczkM_lJj^GYq|>0GRvZX}LF@lpPGe0Y+1%gB?Q-^S&N0w#wM@8B?dr<28qlBY$`w z-s9Eh#VgJk-lCE{>efSMm?=WTMuR^4fKxwXF9mjMfW!9F?=4&3{GH{wKk~1a5C74B zz5JH{&7UZL@IU>p%2$5(_mr>tJ%6x#=sSLY0Pwv}e7x-Z>_05iH(oABZ@y9n|MVvV zqC7LD3++BiIZuA`cavNhIyH5Y^50Oy= zWbTYUIE3e3eWlE;Udear1VMd|cGkXBeo{|9>!p%Ydyh%U5`cHnMy!cZ;S#E#& zQ{|OU{IhcN#plc0fPHtcal6DfZ{3dfJ0O!bT^-OZA$8!tRIaZ(b%ebT8&pB?3$?qq^|MG8I6zbeWkK4!wSQ8TFJ{qWm53${Uq! z6e+?hCqfQ60obY5nel-U>j>0ipT|EHq+2j1tpwjKFP;kT?liVy-$U?r0w8d=7zJB) z=c1AYXEXwxp#Pia>A1Cqksf|S^0aUhZ99d zqq9(EdRXp^XXR~_(l!!z0@xK~Xk$CO7LN(-b)~y21#Qbat0@tnM;ZmTo3^+!hlhe# zlipH{FHPI1ugcW(gh6zi1jsau8yeB-%ePa92&`y6)y5)#* zLFqA0@d(mKdF9!Q^o?rvMD5hJ3QF)v5_HYcK zq~GcP{pk_c7^5l31>jNMI%QvNw#uWucH)X#3xGn(S%$`z8KX1CN^e&d{!m9();1ta z?2vdQ%oCVB-|2gsIFB+E2imWlB&asb#CDj3S^!D2rAvE+GV2uNNoZ@bd%yH=-%58r ztey-NvXLMfQwPW`r#Pi6`?$#)JzRov4a_d2o4#!}LoZ64;dET4fB|#mIul_Z+t(-Z zDYDU7fL#G3JZWfydpY0dygM3|I~Y*glW7@odTd~zIIH4rP8yLHhxL))1e7EA(uFJ4 zYlS?O==m4ph%q&WGjW*Etg*c=;1Ntp2g)~%E<+jIv-$9BfwJbxK7wF-G%ItDJyqtP zc(Syfe6l?Et>0O`>f64veE47e-)DOH>c9BA%CrCLf2}-bKm~^ z%2QwQ;quf6KU|*p;8&E@Cj0@PG-yWv^!SK=TPTn6ojG*f0Y}3{BT}!Qp&YPdc#x*W zAQmWB3CPKh{qZEU{OD?{Jigv8k73|F!KqPxrPnN57}$$E>jXLY;?3Ri$(QezUwvz@ ze1Y><-`Xv&-0PQ@?;Vt#!L%H4jmD!>){dzw*&}@Fnkrjy3#aVnchldgYpe}8uSm!0K;;CVfpskukrq%+`0XFxqa)6G9LHK zy*qDEr#{AMvwZ03$IDmTc)WbwSAV#?|IzE^nd?`xBhNDZ^|^oWBjuNW?1#%Ie(j-SQLv{+}&x{M=7b_j+7dtqzRK0}WU{J%Ql`3w&>~ai=9r=hNY`bS`E%t-7Q7x;_)sTiG_`z z6ONsoF7r^7H4;y+!WrM|In1g@+M>5%bXdKCdQP2Y&D1ybw}15doS;|)-&&8E!d7|H z20fyB4opjQhSG9TN){s>O>)}b$H!Byr%cLg%prhLN^?BxM1Utq2b8#i-O1?I{ApPQ zAa8;+)*FB|-aDna!1qnwn~dB=G_EFYEKr}rY1v1K4c!WjXFE2gHaVtTm7xGnkERP- zY96=R-}aHyqk5Aw9V{}W1BG+a1D6D>J58+D%+;V9y)NUVx6e9BJB~VKF>dae?R5Ki zNR4A92=rAlQvmwd=`Ix$O}8yHE_A3Na|nIAV~~npWclBC3J?R3lk>FlnN!^_V za4Nbz4@hSmjLm9$LQwWY1_P9_Aw+J!sDS z5o7vnAivV%SyTi6ccBgWOHZU31$uyqRRD}r#O~YgrU~^#MjmObDJ2~@_!|1qn<$Ma z9|bC|79>hH82Iadd@K7IgJmm`@9?btCvh3qaf*u`$u=V(qLT#fGw4)>#ef6(kzc&>6OQ?u3+rLLyXxW=gq;m zyv6za?Y(kmcTjHM9dhoMy}e<1>;9m;cpHGXH^vy80eUfLc~xhrlFmg+4)vUUq35~w zFLHzNw;tJwlC~%V^_tRz=nTD_NUMyWtJyW0jT=`U$kl^8x68rp+vPJq_2cDJ|L7;m z3qSi)1C%BRj}EDjI);P{{TD$K|lpUo|@EI;sq>S1hpIfiz*Zv z3I-RlI6dVQlvek#?O3Q&h1OHGA&?YkC>UK-axC&hxh&Dn-gzvY)B0YnQ1MRzn=Qn+ zceBwfkF~qy3P5-h<+9nDFIRg@WvjbXHW8j~`?ZCZ+v@RKXTDtPEn=NF$|}~mLQRmZ z7pq4(9je!hBBW6#2+EoJ>5j^DJSc~wewp?6IQPp5N=<;T0tg^a->b?PFZ+z&JoS8e zoqcMEgW%iLLJUa&lT$ZT0|2YSv=3aN?O4v&X>!Ixz$JaqY!sLv7FEtO^kkYz&OX$O znXm(2xiJ09Pl8w#lb=27mV?%mUPMSsrW5q06flsLcthvYN0_Hb*oe9U4t7jl0ze>i41WH)Fku9 zOe%X4Ge_Cx<^_YqFflQ@xoQooS%B#TVXnmA2h5I<%^D)oo`!_7Em;V-W*yqQ-tLrV zR(j>>)s=F++ewZ__pukGHIa8F=Z76BU&BOcr!nXMHBMdG?YHu@DS7rWMhCM)z~>>x z=``L$J&vo`RSo-*Yn2mffrK*ACJi#_xZwgLK%#(LKC|C#n_gFCr(==nc&DcANB+W= z)`or%q#Mh9doU^Yc=o|$22expQjVcF^YrB$46+W$yuRKpU;WfZ`P%nvmiJwy53Y90 zwT&*<&6S(`<8o_%Qtli~%V*!%DW7?LySxVAeErU_yb911a30Qd7SOlIMRkYr@XniW zmg_fax*!+P+~f21%{R-f&-_xk^~=9h-u$IsEH^*>sq(@{KT=-&iI0>o{LQ~!Uii=d z)AFVN{BM-<%O5Xizx1*4?DST7eE3#*Z186J)@RzBt@3~Py}zaWiSPdE^1Z+NpDTax z8{V7qYv2D!`TFOsm#_Q4_44>;mmau09`umE~0pEg&Scloj0YVvcG(E6CN|C}*xq%q7B7 zEC1xksb=bdG^faO!K4B}7+E%oKu;I9#=9xl^;J)mmf&#e&L|Vky7Pnz!ab%v+|tVQ zKrKEB@|ImejF8g`))KcYPut^kt^xHfG;u+Z+oK&gwQrmxtybWl(5S53gnZwb`aP-M zikay<5b7@Aa0RW(LQiP};Tqon5?m{N4Z&{goI5O>+IEEYl1hR8I0NLIOaX(_L%v32 z9!|?-JTBAzsEmixG8-P183J{Ja6RF>li`Sa#$|psD|1}mIz24ylWA!jPs`%rxGZzF z4`-zXa9Q$MlVKJV38FlvD2e^yq>SA{k7uf7lJuS5>^Fg)idcZz)XRa;U#8xM3v`!h zBmH!@CnMJLZ}p3g!+9_DvL(p&cqfry~b+#Rx#^RH~r` zka~<9>#o;vF`w%+-%JpGdg;gAj$^1@RC(y(I$T(DacsQrgE3k<^e5&bfaW|a!Rb-Fw!83{;N;$TmcDhyK!8^J zAFv1in&!$Q3;H+|hsJPk!oQE`Im3u+V@ zPi>VC-`FZw0iM^^TAc0ZtXn(7vJKEY7);AcZ|#-W0hu2E<-hkAIR8@ld;igYSZ;s( z$IJdFeyZFUzgeE-yfJyJJjMB)@9mcFdQUgN(DUE;JzrD)&^Nxn{Qj?dHo(wRkod$F zb=m6G_Wi#c$}+#V{=B_BegntDC*}UfbU@20pE_M=43LWiU~o>sgVWntBonGuu%Xxi z017)jk|w9k%0+~L!p>AHf-PgjkR@DO1*wPY7&{0qSLxL$4}nNs3~^!2x;Jnvel;|DXj0R;k=$GkuRE_|J!jbW0PeO$H&^au zGty(~s%^mKDfL=1&4i?Ugfta zC!X!KRlqwf2*^co=}BH~wBmgfSQ@h_cyhE*6!WfRnN9E4` zQMtW8D{mi6%k93elk%lI{qn`z`{nt!56UmSdcS=3jlJ^OoBi<4%fI?7|#d-5UDMTpx+tS+gonJpR|p3(7n(o zox&Jt#2--SG38lXX@88+(QubH;tx>&VAyHgIaA>?1pC#vRW~_1fNWMSQ}-1VhaSbm ztN%aQ`wwtiv#UH49XqeJb`B?3&Z?41fg}_xKtdoSf<-j8FAi-k*xkUz*w8%vT#Q3s z+t(Ou_ib$7ZewhN$p#4p6hRV_P>z+usj8FqK0EIfcf9XA=Kf1dhf*kl%D2y+`}}9E z^@sV-_|0#QG3J;&FSb}p){_$935fqxow}MDi))Wh#m$h-TOpe-xan9t|E2}*j3k8p zQp4|h@hyi^!_!Yn4kd;XL_rcsx}l9bNeTr6O4ePj90avQWt|ZYO1Ew z=$Yq~N~Y=);$cwz(_$cYFxF_@E!(nOEU&J|>iT-DuU*dFZh8{LcANV;vCDnU_0?!`bX%J-;QqIqhnaxH-551r ze4gLx#JwB6xMyW69@^ZF^B~_EgOn1pJwSP%!9_oD1C)yrOu?l{ZvkBH^VrQ- zrF753foF*GgXH5BgU>ayH3rb3XhOKNO!fw2acw=@*5YFi$0z>ieer?!yeEF|*M2QN z@XmL}N8j_Vc>IC;Vr^|XR#%qD3ojr|X$oSV`0J8Bw@X}v$SzYiE2Mve{B^j&$xgCP zzjLT9)t+vPLfE8|EXkDIbKha9UbR8VZ#Eb{h7TuJk_el%=hELNW#mM0i}K#2&1ec> zo3<%BiO~*G8()7*_-V~aYPPvgsa<Xj5a;m(N==}~(z&Y|6+$@fN^jCRJkB`ar}YC>RJKt|ee ziWS;e+lO+|i%&`nd9TFAE^iAd?S!kencNA7drO}zf3_+~ou)fY;>?|ENTd70TW)Ji zc9&`IE*zVMd7qpZjuR7OX(v28!OX%lR8SFJ7Z(X!8+S@yhB za$J!_7xSfrm`?=(#;KF{1>Uj13_-6E(~wv_ZuGP02&2UCsCVuqHT$itttBPt0@yT>rU>Bzn!G|K18?`@j3Vc<6K9R|T&pPLlhh z@WqGHACAH^6kPG^4AT|as#(SWD{T;+>Cs^sjOvGWKH3XSK_+JCz{i+vF4T2T;tbd- zv@-}w0G294fW`$Wj_mq0EWwWDN0ImmV7b*CKqN^}1*lXoZ7sPjq&f(6_@QyQvvJdt zQYJv41L@n?YR1ae7KES~oz3+)Xf5av$43i80Risij~dHR3mPzT#n}2S|NbVjp%M|#16!87l7M`pp8HzhXA?(rHUM? znsvIq)N+L;I5?WNSK#e3EvsF&9^ zk_hHAl&OP6+66k805D1bB+lCCxMF&b0b&pGAOTFDjV>Bd8rp+g`<+9ZJ0%S%k)u2v zpe$zx&Rm5^NJ$>=Qo1a3YKUKUTqp!hJE+yIc3fQFjEj`13kD>-+vK<1+m3Fh2dQo* z$!aOJr0!JHIiW}i2lXd7?lRbnHuN1yo$qc(O;sa=9+=O(YG`kYT=j3=Yxm?p zR(?2OUClwMl!Q;bs7xcA5IKp`<(2K+exPPUk|Zfq)osxURo1EEVpZbq8LvuKuLAmx zbdsuSS&fI2u%?qZ2@zOeU(^A$(qTOm7&IBNjazR+1AFP8()y&z5(Aw!G5_J5(sjw7 zUL>6GDS0Fh^oLxuN8P6VIen@zIGlu3PYH?-owT|B-2QFe`A5FUBY7ykENxST+JR*J?&mLqR@Vs3yhrEjrsbNZzN&+pNTs!@O%2WL;<%ug$!EbJZpk zw{gA1Qzx61jdgMLrEN8&)&4`~%wrN$;`g_C%LPn)5hInlDs{Ge44;n-ifR47`-9gC zAuP}Ihw69#vlW^2_u<#0@I{7F%17Z#8eaCYm*waF>QZd1t|d`(hH2+X_aX%CcLY2j zjv0K=VYRPO6%Z+f)Ln{dVOO*j*AiZ5z@$p^Df)K~gQbt~jsntq5G3EDp}Eq)Z3g3Q zz_+=!9$Orn>+2A?^=PecgpR4tK7KwPKX)-Mo;@2&PdpJz=g!6AEjQ$h}%ynwOfw-7QVxz%8zIe;MGp_*GeQwgBbj4=q41)`c) zwG>zf!BBmvT1`UKibY7;s;jFh7vptcuqO6MQ;Px0!AKjPM0?BJI3#J*o4z-7*_1Y; zK4&`UVFHwgk_hWmSxJ{c&TaAxJ>KBzLhZ!bq*oQ6ZNi<0oLsm|k{2G7?S`(zMI73fV<86dOZfD&K?tk z?O5CD#pSJTEUtGU*bq^8pF#@Vh?olpJ@)|D26U7%YBcG3EdT)j^hrcPRCKmtX1^0- zJ1rX8X7tuBMQ`O|?5tjh&bj+y^X#W$>Hd$!Lm&N6oPF@Yc;JDD}5n+G3k>w)I-XnshkW<;+P)D{W-A7mH6k47q%NJou3h#>d|B`uOzQ-WZR6_>bZ- z2xoVFB|0mRS;|;#xP<$#IcAv}oX9DCRkEYw<7}^2aiEF{Q3P+SM^(a_v{)>ueV`1j z*HTIj-n2yskl5#7ZhI5klqlv-QQTvFOFC@_J??XoWuHqk8=F3NDJ@Jg$UUma4O>il z_41%AC>_r04Pi7FqKKFT+lyq5#N@&($Po!54lso@NoiEWx&xEGD`)CX?#B{?v{P)- zIK^BiT-tV;zm!;$2h)@)YuZFk9=X&Z4Jm;mhzZ5)qrghpCR8nxlF5Sa+>-GrMN_M! z-$s3^IziSx+)1Y<7hCj4eXDLU>FVq-8Dp}z$HeIXa;_cq6oomP?zC!<-?1117u87F zjwOIjj7^W@Lxo$Zogv+x(~Xt+6@OMKQ{T1G-HBBul*`(6^Lq$fOP6vS#eI|BJQP5< zaLxRT&}YPwVq0n5D;2ejt>5g^mLH*?2o{1@(sX6$KUdv*WvK3{KC64GIQ{KJ|0y0l z3ZEyG8afKkT%f^9DpK+!3YJqbK*s~q=xh)baM$hBfFTG#kNdV`n0~Mcky~3{inYs& z@z{Nzj`I)Q8;?J5Pds}6J@L?e_r^!x^Pc$Bd*73Bu3k8w$JP>qJJ0NLbXJz5$>+x6 zl zC~7ZcJqYL}KqSc85P&=+yXT*q_v=2WWts6#iH&ZQ$|`Hp;yV+aBt#Axd_4rSY5N4$-wzRw)J&2*w z;(Z9AgQD9XIye__Hm?p+OamO{GYH@X#8ZNh&p2r7q<%2mK2EnOx;;s60VCRX(ROk$ zRVw0Y>Olr8CsmLL+XeAC=u15OXYcWK7P;*)7YlJgyFIt89AtnSZ%o9@^mNQ~Tz70C zt~qurCaDXLiy!@9EPmocanD=c823UhAN%kJ;_Qb$5SJf$Fj^4ct&R0u*wf-2O21Mb z%zLlqVC}jkXqUsf)b*Bqu-d`K-ek{!1@T2Y??EO2g-BXQ+C92ZMyg?}$wg*|q{IH> zL`l_gb|nsnGo_qv)Q}QJZgTQ$kjy&KREp_j+6noTm_m9~(`F~8|BF)E_1ZQ>3bD-2 zUy&Le&DTkXQhcS|E#g{Z(z8x`cfu!GthNDFgJF8otc1qrq1LCpxe=q2v*2TCAd)6E z21+ZP`-!i*T1$y1w`7{YC$Y{2arTFC%ZGEWWM4>^YBky%+>J_)1g=1rI`+V=lwy+J^rcFg)VicbgM4b{;rLTXv!+a(r+l@y zRw`;4>)SY88Br#x$R{A}*NzXT6jZ;U=~sAAyM9Sz%6_waGf-AJ_2d1PUll6SSA|Lq z-G3OW?-dz*s^5nG??>TJAF5IDC_F>K0dr$*H6DB5z9fH7Km?y)@W1fj1M!}>zct?T zwztFw-}(0V;P1aPe)qrra{S7F`A_jHzx-e0cYf_x;v*mWU>=|N$cJNZ-E0+}YL7Ws%aPoe*H9Q(jdZsx~BvIpgMyuIg19nW`fW zRVb>lhKELp&mn|Cg>>(2LsGUSE7}DzXajD$0N{47mug0(Ltux95!!c>xRf4A9#!=^ z>o!xl(pexS|E@BW7;l2cmm!lERySg4eFISJWqi|h2`=}OFG-I!o<((O`8pX8jEAF3 z+3`e5L}td_!G>~ZXp{@TeiQ9pT2)K8p_g}d&K6VHBLoP5sn;>>fu zEEaCPEk&1mwt~S+QrFpAtrSxx^ZbdlU_R*bZbcH1Go8X?}%TCpkZKt#&7h*YJ2=JP2NG$4_ zXK+X!_?L%^D^!K2qjJ)!I#DT2E~H2T;L6f6xyhCI4pPITyoX5v?~%kfK~r+&0Pld! z&#W^CPvg+*RP?7yIJ(2)Q)U9vj@sxM=f>QtXAtzW8ey#G9b~|~{ zzLwjQcv+P8({%mgNrHWn+YSTI(=H5pw-9UE`#QKTBvKo@v?)wUekXch#~gkCOhXf) z;<79?I<$w3UyPxR+D=@x>^YAy7p0I6Rm<*MZ@i{i--Su0m_SH?Y~7Mx$)NU)DS73n zHXyJM_^z!-ABgdrZqMhFfP#?B{bVg}nHi@q zkAUeAanh}}M9h^yx)Y49`cwE1n5>@-3>g|%}62Dlk1X<#ngp!j^#%

n01Y7{y+hxZNYz*b2Q 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

hMYg4gp}-#Nec$9=U1iI9E^B@0g6 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�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 a>swNAP3z70>}UVMe^f!5iskYzgZ~dsWABsz literal 24104 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 From 665f4e1bbcc0cc2d7e986202d8b768eb93ebdd27 Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Thu, 4 Jul 2024 23:15:09 +0200 Subject: [PATCH 69/71] update test cases for complex situations --- .../business/entities/rules/depth_average_rule.py | 5 +++++ .../business/entities/rules/test_depth_average_rule.py | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 46067fb4..8432c29c 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -69,12 +69,17 @@ def execute( ) return variables + # Deal with open layer system at water level and bottom + depths_interfaces.values[-1] = 10000 + depths_interfaces.values[0] = -10000 + # Broadcast the depths to the dimensions of the bed levels. Then make a # correction for the depths to the bed level, in other words all depths lower # than the bed level will be corrected to the bed level. depths_interfaces_broadcasted = depths_interfaces.broadcast_like( bed_level_values ) + corrected_depth_bed = depths_interfaces_broadcasted.where( bed_level_values < depths_interfaces_broadcasted, bed_level_values ) diff --git a/tests/business/entities/rules/test_depth_average_rule.py b/tests/business/entities/rules/test_depth_average_rule.py index 2048cc5a..f009c6d4 100644 --- a/tests/business/entities/rules/test_depth_average_rule.py +++ b/tests/business/entities/rules/test_depth_average_rule.py @@ -63,21 +63,21 @@ def test_no_validate_error_with_correct_rule(): _np.array([-10, -5, -10, -5]), _np.array([[0, 0, -1.5, -1.5], [0, -6, 5, -5]]), _np.array( - [[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 3.0, _np.nan]] + [[3.0, 2.2, 3.29411765, 2.57142857], [3.0, _np.nan, 2.33333, _np.nan]] ), ], # Added this next test as to match the example in documentation [ _np.tile(_np.arange(4, 0, -1), (2, 6, 1)), _np.array([-8.5, -6.5, -5, -2, 0]), - _np.array([-7.8, -7.3, -7.9, -8.5, -7, -7.9]), + _np.array([-7.8, -7.3, -5.2, -9.5, -7, -1.6]), _np.array( - [[-1.4, -1.6, -1.6, -1.4, -1.6, -1.6], [-1.4, -1.6, -2, -1.4, -1.6, -2]] + [[-1.4, -1.6, -3, -1.4, -1.6, -1.6], [0, -1.6, -3, 3, -1.6, -1.6]] ), _np.array( [ - [2.546875, 2.473684, 2.619048, 2.690141, 2.388889, 2.619048], - [2.546875, 2.473684, 2.728814, 2.690141, 2.388889, 2.728814], + [2.546875, 2.473684, 2.090909, 2.851852, 2.388889, _np.nan], + [2.269231, 2.473684, 2.090909, 2.2, 2.388889, _np.nan], ] ), ], From e8b62d7df5996c0a87d898578d70c9d15f61c65a Mon Sep 17 00:00:00 2001 From: CindyvdVries Date: Fri, 5 Jul 2024 11:33:36 +0200 Subject: [PATCH 70/71] Dei 217 depth average test case (#115) * add script to create simplified netcdf * add acceptance test * feat[DEI-217]: extend example with extra variation in data * Update depth_average_rule.py * update acceptance test * Update test17_depth_average_rule.nc --------- Co-authored-by: Wouter --- .../entities/rules/depth_average_rule.py | 6 +- scripts/create_nc.py | 89 ++++++++++++++++++ .../input_nc_files/test_depth_average_rule.nc | Bin 0 -> 17715 bytes .../test17_depth_average_rule.yaml | 27 ++++++ .../test17_depth_average_rule.nc | Bin 0 -> 22598 bytes 5 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 scripts/create_nc.py create mode 100644 tests_acceptance/input_nc_files/test_depth_average_rule.nc create mode 100644 tests_acceptance/input_yaml_files/test17_depth_average_rule.yaml create mode 100644 tests_acceptance/reference_nc_files/test17_depth_average_rule.nc diff --git a/decoimpact/business/entities/rules/depth_average_rule.py b/decoimpact/business/entities/rules/depth_average_rule.py index 8432c29c..72c23279 100644 --- a/decoimpact/business/entities/rules/depth_average_rule.py +++ b/decoimpact/business/entities/rules/depth_average_rule.py @@ -69,9 +69,9 @@ def execute( ) return variables - # Deal with open layer system at water level and bottom - depths_interfaces.values[-1] = 10000 - depths_interfaces.values[0] = -10000 + # Deal with open layer system at water level and bed level + depths_interfaces.values[depths_interfaces.values.argmin()] = -100000 + depths_interfaces.values[depths_interfaces.values.argmax()] = 100000 # Broadcast the depths to the dimensions of the bed levels. Then make a # correction for the depths to the bed level, in other words all depths lower diff --git a/scripts/create_nc.py b/scripts/create_nc.py new file mode 100644 index 00000000..e022207f --- /dev/null +++ b/scripts/create_nc.py @@ -0,0 +1,89 @@ +""" +This file creates a simple NetCDF containing a simplified 3D grid with +3 data variables. +""" + +import numpy as np +import xarray as xr + +# Create coordinates +mesh2d_nFaces = 3 +mesh2d_node_x = np.random.rand(mesh2d_nFaces) +mesh2d_node_y = np.random.rand(mesh2d_nFaces) +mesh2d_edge_x = np.random.rand(mesh2d_nFaces) +mesh2d_edge_y = np.random.rand(mesh2d_nFaces) +mesh2d_face_x = np.random.rand(mesh2d_nFaces) +mesh2d_face_y = np.random.rand(mesh2d_nFaces) +mesh2d_nLayers = 3 +timesteps = 10 + +data_variable = np.zeros((timesteps, mesh2d_nFaces, mesh2d_nLayers)) + +mesh2d_interface_z = np.array([0, -1, -3, -7]) +mesh2d_flowelem_bl = np.array([-7, -6, -3]) +mesh2d_s1 = np.broadcast_to(np.array([0, -0.5, -3]), (timesteps, mesh2d_nFaces)) + +data_variable_A = data_variable.copy() +data_variable_B = data_variable.copy() +data_variable_C = data_variable.copy() + +# Set different values on different levels +data_variable_A[0:6, :, 0] = np.array([11, 11, 3]) +data_variable_A[0:6, :, 1] = np.array([14, 14, 3]) +data_variable_A[0:6, :, 2] = np.array([19, 19, 3]) +data_variable_A[6:, :, 0] = np.array([5, 5, 2]) +data_variable_A[6:, :, 1] = np.array([3, 3, 2]) +data_variable_A[6:, :, 2] = np.array([1, 1, 2]) + +data_variable_B[:, :, 0] = np.array([11, 11, 11]) +data_variable_B[:, :, 1] = np.array([14, 14, 14]) +data_variable_B[:, :, 2] = np.array([19, 19, 19]) +data_variable_B[:, 1, 2] = np.array([np.NaN]) + +data_variable_C[:, :, 0] = np.array([11, 11, 11]) +data_variable_C[:, :, 1] = np.array([14, 14, 14]) +data_variable_C[:, :, 2] = np.array([19, 19, 19]) +data_variable_C[:, 1, 2] = np.array([-999]) + +# Create dataset +ds = xr.Dataset( + { + "var_3d_A": ( + ["time", "mesh2d_nFaces", "mesh2d_nLayers"], + data_variable_A, + {"location": "edge", "mesh": "mesh2d"}, + ), + "var_3d_B": ( + ["time", "mesh2d_nFaces", "mesh2d_nLayers"], + data_variable_B, + {"location": "edge", "mesh": "mesh2d"}, + ), + "var_3d_C": ( + ["time", "mesh2d_nFaces", "mesh2d_nLayers"], + data_variable_C, + {"location": "edge", "mesh": "mesh2d", "_FillValue": -999}, + ), + "mesh2d_interface_z": ( + ["mesh2d_nInterfaces"], + mesh2d_interface_z, + {"location": "edge", "mesh": "mesh2d"}, + ), + "mesh2d_flowelem_bl": ( + ["mesh2d_nFaces"], + mesh2d_flowelem_bl, + {"location": "edge", "mesh": "mesh2d"}, + ), + "mesh2d_s1": (["time", "mesh2d_nFaces"], mesh2d_s1, {"location": "edge"}), + "mesh2d": ([], 1, {"cf_role": "mesh_topology"}), + }, + coords={ + "mesh2d_node_x": np.arange(mesh2d_nFaces), + "mesh2d_node_y": np.arange(mesh2d_nFaces), + "mesh2d_edge_x": np.arange(mesh2d_nFaces), + "mesh2d_edge_y": np.arange(mesh2d_nFaces), + "mesh2d_face_x": np.arange(mesh2d_nFaces), + "mesh2d_face_y": np.arange(mesh2d_nFaces), + }, +) + +ds.to_netcdf("simple_dataset.nc") diff --git a/tests_acceptance/input_nc_files/test_depth_average_rule.nc b/tests_acceptance/input_nc_files/test_depth_average_rule.nc new file mode 100644 index 0000000000000000000000000000000000000000..e60a0353202e7e55b9f7cd25d57ecce6e4020a97 GIT binary patch literal 17715 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 Date: Fri, 5 Jul 2024 14:30:34 +0200 Subject: [PATCH 71/71] include coords --- decoimpact/business/entities/rule_based_model.py | 5 ++++- decoimpact/business/entities/rule_processor.py | 7 +++++-- decoimpact/business/utils/dataset_utils.py | 12 ++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/decoimpact/business/entities/rule_based_model.py b/decoimpact/business/entities/rule_based_model.py index 0e6af120..6c2bf6d1 100644 --- a/decoimpact/business/entities/rule_based_model.py +++ b/decoimpact/business/entities/rule_based_model.py @@ -159,7 +159,10 @@ def _validate_mappings(self, mappings: dict[str, str], logger: ILogger) -> bool: bool: if mappings are valid """ input_vars = _lu.flatten_list( - [_du.list_vars(ds) for ds in self._input_datasets] + [ + _lu.flatten_list([_du.list_vars(ds), _du.list_coords(ds)]) + for ds in self._input_datasets + ] ) valid = True diff --git a/decoimpact/business/entities/rule_processor.py b/decoimpact/business/entities/rule_processor.py index 4d13cf8f..7f25c291 100644 --- a/decoimpact/business/entities/rule_processor.py +++ b/decoimpact/business/entities/rule_processor.py @@ -16,6 +16,8 @@ import numpy as _np import xarray as _xr +import decoimpact.business.utils.dataset_utils as _du +import decoimpact.business.utils.list_utils as _lu from decoimpact.business.entities.rules.i_array_based_rule import IArrayBasedRule from decoimpact.business.entities.rules.i_cell_based_rule import ICellBasedRule @@ -63,8 +65,9 @@ def initialize(self, logger: ILogger) -> bool: """ inputs: List[str] = [] - inputs = [str(key) for key in self._input_dataset] - + inputs = _lu.flatten_list( + [_du.list_vars(self._input_dataset), _du.list_coords(self._input_dataset)] + ) tree, success = self._create_rule_sets(inputs, self._rules, [], logger) if success: self._processing_list = tree diff --git a/decoimpact/business/utils/dataset_utils.py b/decoimpact/business/utils/dataset_utils.py index b61656e8..651cd59a 100644 --- a/decoimpact/business/utils/dataset_utils.py +++ b/decoimpact/business/utils/dataset_utils.py @@ -100,6 +100,18 @@ def list_vars(dataset: _xr.Dataset) -> list[str]: return list((dataset.data_vars or {}).keys()) +def list_coords(dataset: _xr.Dataset) -> list[str]: + """List coordinates in dataset + + Args: + dataset (_xr.Dataset): Dataset to list variables from + + Returns: + list_variables + """ + return list((dataset.coords or {}).keys()) + + def copy_dataset(dataset: _xr.Dataset) -> _xr.Dataset: """Copy dataset to new dataset